Changeset 3387744
- Timestamp:
- 10/31/2025 04:36:34 PM (4 months ago)
- Location:
- vindi-pagamentos/trunk
- Files:
-
- 23 edited
-
app/Controllers/SettingsController.php (modified) (3 diffs)
-
app/Core/Boot.php (modified) (1 diff)
-
app/Core/Config.php (modified) (1 diff)
-
app/Core/Functions.php (modified) (4 diffs)
-
app/Services/WooCommerce/Checkout/PaymentProcessor.php (modified) (5 diffs)
-
app/Services/WooCommerce/Gateways/Credit.php (modified) (4 diffs)
-
app/Services/WooCommerce/Settings/VindiPagamentos.php (modified) (1 diff)
-
app/Services/WooCommerce/Shop/OneClickBuy.php (modified) (1 diff)
-
app/Views/Admin/onboarding/general-settings.php (modified) (1 diff)
-
app/Views/Pages/shop/one-click-modal.php (modified) (1 diff)
-
assets/blocks/components/PersonTypeFallback/block.json (modified) (1 diff)
-
assets/scripts/theme/order/components/form-handler.js (modified) (1 diff)
-
assets/scripts/theme/order/one-click-buy.js (modified) (1 diff)
-
composer.json (modified) (1 diff)
-
dist/scripts/theme/index.js (modified) (1 diff)
-
dist/scripts/theme/index.js.map (modified) (1 diff)
-
package.json (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
-
vendor/autoload.php (modified) (1 diff)
-
vendor/composer/autoload_real.php (modified) (2 diffs)
-
vendor/composer/autoload_static.php (modified) (2 diffs)
-
vendor/composer/installed.php (modified) (2 diffs)
-
vindi-pagamentos.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
vindi-pagamentos/trunk/app/Controllers/SettingsController.php
r3387147 r3387744 414 414 update_option('vindi-pagamentos-consumer_secret', sanitize_text_field($_POST['vindi-pagamentos-consumer_secret'] ?? '')); 415 415 update_option('vindi-pagamentos-document_field', isset($_POST['vindi-pagamentos-document_field']) ? 'yes' : 'no'); 416 update_option('vindi-pagamentos-one_click_purchase', isset($_POST['vindi-pagamentos-one_click_purchase']) ? 'yes' : 'no'); 416 417 update_option('vindi-pagamentos-enable_saved_cards_vindi', isset($_POST['vindi-pagamentos-enable_saved_cards_vindi']) ? 'yes' : 'no'); 417 418 update_option('vindi-pagamentos-show_icons', isset($_POST['vindi-pagamentos-show_icons']) ? 'yes' : 'no'); … … 434 435 $consumer_secret = get_option('vindi-pagamentos-consumer_secret'); 435 436 $document_field = get_option('vindi-pagamentos-document_field'); 437 $one_click_purchase = get_option('vindi-pagamentos-one_click_purchase'); 436 438 $enable_saved_cards_vindi = get_option('vindi-pagamentos-enable_saved_cards_vindi'); 437 439 $show_icons = get_option('vindi-pagamentos-show_icons'); … … 450 452 'consumer_secret' => $consumer_secret, 451 453 'document_field' => $document_field, 454 'one_click_purchase' => $one_click_purchase, 452 455 'enable_saved_cards_vindi' => $enable_saved_cards_vindi, 453 456 'show_icons' => $show_icons, -
vindi-pagamentos/trunk/app/Core/Boot.php
r3356741 r3387744 17 17 new Functions(), 18 18 'loadPluginScripts' 19 ]);20 21 add_action('wp_enqueue_scripts', [22 new Functions(),23 'loadOneClickBuyScripts'24 19 ]); 25 20 -
vindi-pagamentos/trunk/app/Core/Config.php
r3387147 r3387744 73 73 public function pluginVersion(): string 74 74 { 75 return '1. 0.9';75 return '1.1.0'; 76 76 } 77 77 } -
vindi-pagamentos/trunk/app/Core/Functions.php
r3356741 r3387744 25 25 { 26 26 if (!is_admin()) { 27 wp_enqueue_script( 28 'vindi-pagamentos-theme', 29 wvpmConfig()->distUrl('scripts/theme/index.js'), 30 ['jquery'], 31 ); 27 if (is_checkout() || is_product() || is_cart()) { 28 wp_enqueue_script( 29 'vindi-pagamentos-theme', 30 wvpmConfig()->distUrl('scripts/theme/index.js'), 31 ['jquery'], 32 ); 33 }; 34 35 $one_click_purchase_enabled = get_option('vindi-pagamentos-one_click_purchase', 'no') === 'yes'; 36 if (is_product() && $one_click_purchase_enabled) { 37 wp_localize_script('vindi-pagamentos-theme', 'vindiOneClick', [ 38 'ajax_url' => admin_url('admin-ajax.php'), 39 'nonce' => wp_create_nonce('vindi_one_click_buy'), 40 'checkout_nonce' => wp_create_nonce('update-order-review'), 41 'required_fields' => [ 42 'first_name' => __('Nome', 'vindi-pagamentos'), 43 'last_name' => __('Sobrenome', 'vindi-pagamentos'), 44 'cpf' => __('CPF', 'vindi-pagamentos'), 45 'company' => __('Razão Social', 'vindi-pagamentos'), 46 'cnpj' => __('CNPJ', 'vindi-pagamentos'), 47 'address_1' => __('Endereço', 'vindi-pagamentos'), 48 'city' => __('Cidade', 'vindi-pagamentos'), 49 'state' => __('Estado', 'vindi-pagamentos'), 50 'postcode' => __('CEP', 'vindi-pagamentos'), 51 'phone' => __('Telefone', 'vindi-pagamentos'), 52 'email' => __('Email', 'vindi-pagamentos') 53 ] 54 ]); 55 } 32 56 } 33 57 … … 46 70 } 47 71 48 public function loadOneClickBuyScripts(): void49 {50 if (!is_product()) {51 return;52 }53 54 wp_enqueue_script(55 'vindi-one-click-buy',56 wvpmConfig()->distUrl('scripts/theme/one-click-buy.js'),57 ['jquery'],58 '1.0.0',59 true60 );61 62 wp_localize_script('vindi-one-click-buy', 'vindiOneClick', [63 'ajax_url' => admin_url('admin-ajax.php'),64 'nonce' => wp_create_nonce('vindi_one_click_buy'),65 'checkout_nonce' => wp_create_nonce('update-order-review'),66 'required_fields' => [67 'first_name' => __('Nome', 'vindi-pagamentos'),68 'last_name' => __('Sobrenome', 'vindi-pagamentos'),69 'cpf' => __('CPF', 'vindi-pagamentos'),70 'company' => __('Razão Social', 'vindi-pagamentos'),71 'cnpj' => __('CNPJ', 'vindi-pagamentos'),72 'address_1' => __('Endereço', 'vindi-pagamentos'),73 'city' => __('Cidade', 'vindi-pagamentos'),74 'state' => __('Estado', 'vindi-pagamentos'),75 'postcode' => __('CEP', 'vindi-pagamentos'),76 'phone' => __('Telefone', 'vindi-pagamentos'),77 'email' => __('Email', 'vindi-pagamentos')78 ]79 ]);80 }81 82 72 public function createAdminMenu(): void 83 73 { 84 74 if (empty(self::getMissingDependencies())) { 85 add_submenu_page( 86 'woocommerce', 87 wvpmConfig()->menuName(), 88 wvpmConfig()->menuName(), 89 'manage_woocommerce', 90 wvpmConfig()->pluginSlug(), 91 [$this, 'redirectSettingsMenu'] 92 ); 75 $pluginSlug = wvpmConfig()->pluginSlug(); 76 if (!empty($pluginSlug)) { 77 add_submenu_page( 78 'woocommerce', 79 wvpmConfig()->menuName(), 80 wvpmConfig()->menuName(), 81 'manage_woocommerce', 82 $pluginSlug, 83 [$this, 'redirectSettingsMenu'] 84 ); 85 } 93 86 } 94 87 $this->settingsController = new SettingsController(); … … 98 91 public function redirectSettingsMenu(): void 99 92 { 100 wp_redirect('admin.php?page=wc-settings&tab=' . wvpmConfig()->pluginSlug()); 93 $pluginSlug = wvpmConfig()->pluginSlug(); 94 if (!empty($pluginSlug)) { 95 wp_redirect('admin.php?page=wc-settings&tab=' . $pluginSlug); 96 } else { 97 wp_redirect('admin.php?page=wc-settings'); 98 } 101 99 } 102 100 103 101 public function woocommerce(): void 104 102 { 105 //Validar esse loadPaumentFIelds aqui106 103 new \VindiPagamentos\Controllers\LoadPaymentFields(); 107 104 if (empty(self::getMissingDependencies())) { … … 239 236 wvpmConfig()->distUrl('styles/admin/index.css'), 240 237 ); 241 242 if ( isset($_GET['page']) && strpos($_GET['page'], 'vindi-wizard') !== false) {238 $page = $_GET['page'] ?? ''; 239 if (!empty($page) && strpos($page, 'vindi-wizard') !== false) { 243 240 wp_enqueue_script( 244 241 'vindi-wizard', -
vindi-pagamentos/trunk/app/Services/WooCommerce/Checkout/PaymentProcessor.php
r3382634 r3387744 96 96 { 97 97 $body = $this->buildRequestBody(); 98 98 99 $request = $this->initializeVindiService(); 99 100 return $this->shouldUseMultiPayment($body) ? … … 1182 1183 private function getCustomerData(): array 1183 1184 { 1185 1184 1186 $firstName = $this->order->get_billing_first_name(); 1185 1187 $lastName = $this->order->get_billing_last_name(); … … 1283 1285 { 1284 1286 $all_meta = $this->order->get_meta_data(); 1285 1287 1286 1288 foreach ($all_meta as $meta) { 1287 1289 $meta_key = $meta->key ?? ''; 1288 1290 1289 1291 if (strpos($meta_key, $search_term) !== false) { 1290 1292 $value = $meta->value ?? ''; … … 1294 1296 } 1295 1297 } 1296 1298 1297 1299 return ''; 1298 1300 } … … 1318 1320 { 1319 1321 $data['cpf'] = $this->getOrderMetaFlexible('billing_cpf'); 1320 1322 1321 1323 if (!$data['cpf']) { 1322 1324 throw new MissingDocumentException(__('CPF', 'vindi-pagamentos')); -
vindi-pagamentos/trunk/app/Services/WooCommerce/Gateways/Credit.php
r3387147 r3387744 60 60 protected function setCustomSettingsFields(): array 61 61 { 62 $maxInstallments = $this->validateInstallmentsLimit(); 62 63 return [ 63 64 'installments' => [ 64 65 'title' => __('Quantidade máxima de parcelas', 'vindi-pagamentos'), 65 66 'type' => 'number', 66 'default' => $ this->validateInstallmentsLimit(),67 'default' => $maxInstallments, 67 68 'description' => __( 68 69 'Quantidade máxima de parcelas que será disponibilizado ao comprador.', … … 70 71 ), 71 72 'custom_attributes' => [ 72 'max' => $ this->validateInstallmentsLimit(),73 'max' => $maxInstallments, 73 74 'min' => 1 74 75 ] … … 417 418 public function validateInstallmentsLimit() 418 419 { 420 $cached = get_transient('vindi_max_installments_limit'); 421 if ($cached !== false) { 422 return (int) $cached; 423 } 424 419 425 $token = get_option('vindi-pagamentos-token'); 420 426 $sandbox = get_option('vindi-pagamentos-environment') === 'sandbox'; … … 439 445 } 440 446 } 447 448 set_transient('vindi_max_installments_limit', $max_split, 24 * HOUR_IN_SECONDS); 441 449 442 450 return $max_split; -
vindi-pagamentos/trunk/app/Services/WooCommerce/Settings/VindiPagamentos.php
r3387147 r3387744 183 183 'default' => 'yes' 184 184 ], 185 'one_click_purchase' => [ 186 'title' => __('Habilitar compras com um clique', 'vindi-pagamentos'), 187 'type' => 'checkbox', 188 'desc' => __( 189 'Permite que clientes finalizem compras com um único clique, 190 usando informações de pagamento salvas.', 191 'vindi-pagamentos' 192 ), 193 'id' => 'vindi-pagamentos-one_click_purchase', 194 'default' => 'no' 195 ], 185 196 'enable_saved_cards_vindi' => [ 186 197 'title' => __('Salvar Cartão', 'vindi-pagamentos'), -
vindi-pagamentos/trunk/app/Services/WooCommerce/Shop/OneClickBuy.php
r3344656 r3387744 35 35 36 36 if (!is_user_logged_in()) { 37 return; 38 } 39 40 $one_click_purchase_enabled = get_option('vindi-pagamentos-one_click_purchase', 'no') === 'yes'; 41 if (!$one_click_purchase_enabled) { 37 42 return; 38 43 } -
vindi-pagamentos/trunk/app/Views/Admin/onboarding/general-settings.php
r3387147 r3387744 109 109 <div class="vindi-toggle-item"> 110 110 <div class="vindi-toggle-texts"> 111 <p class="vindi-toggle-title"><?php echo esc_html(__('Habilitar cartões salvos', 'wc-vindi-pagamentos')); ?></p> 112 <p class="vindi-toggle-desc"><?php echo esc_html(__('Marque essa opção para permitir que os clientes utilizem cartões salvos para compras futuras.', 'wc-vindi-pagamentos')); ?></p> 111 <p class="vindi-toggle-title"><?php echo esc_html(__('Habilitar compras com um clique', 'vindi-pagamentos')); ?></p> 112 <p class="vindi-toggle-desc"><?php echo esc_html(__('Permite que clientes finalizem compras com um único clique, usando informações de pagamento salvas.', 'vindi-pagamentos')); ?></p> 113 </div> 114 <label class="vindi-switch"> 115 <input type="checkbox" name="vindi-pagamentos-one_click_purchase" <?php checked($one_click_purchase, 'yes'); ?> /> 116 <span class="vindi-slider"></span> 117 </label> 118 </div> 119 120 <div class="vindi-toggle-item"> 121 <div class="vindi-toggle-texts"> 122 <p class="vindi-toggle-title"><?php echo esc_html(__('Habilitar cartões salvos', 'vindi-pagamentos')); ?></p> 123 <p class="vindi-toggle-desc"><?php echo esc_html(__('Marque essa opção para permitir que os clientes utilizem cartões salvos para compras futuras.', 'vindi-pagamentos')); ?></p> 113 124 </div> 114 125 <label class="vindi-switch"> -
vindi-pagamentos/trunk/app/Views/Pages/shop/one-click-modal.php
r3371384 r3387744 79 79 ?> 80 80 <div id="billing-pf-fields" class="billing-fields"> 81 <?php foreach ($pf_fields as $field => $label): 81 <?php 82 foreach ($pf_fields as $field => $label): 82 83 $value = isset($user_data['billing'][$field]) ? $user_data['billing'][$field] : ''; 83 84 $has_value = !empty($value); 84 $missing_fields = $missing_fields || !$has_value; 85 86 $is_sensitive = in_array($field, ['cpf', 'cnpj']); 87 $should_show_input = !$has_value || $is_sensitive; 85 88 ?> 86 <div class="form-row <?php echo $has_value? 'has-data' : 'missing-data'; ?>">87 <?php if ($has_value ): ?>89 <div class="form-row <?php echo ($has_value && !$is_sensitive) ? 'has-data' : 'missing-data'; ?>"> 90 <?php if ($has_value && !$is_sensitive): ?> 88 91 <p class="field-display"> 89 92 <strong><?php echo esc_html($label); ?>:</strong> 90 93 <?php echo esc_html($value); ?> 91 94 </p> 95 <input type="hidden" 96 name="billing_<?php echo esc_attr($field); ?>" 97 value="<?php echo esc_attr($value); ?>"> 92 98 <?php else: ?> 93 99 <div class="field-input"> -
vindi-pagamentos/trunk/assets/blocks/components/PersonTypeFallback/block.json
r3387147 r3387744 4 4 "name": "vindi-pagamentos/person-type-fallback", 5 5 "icon": "flag", 6 "version": "1. 0.9",6 "version": "1.1.0", 7 7 "title": "Woo - Tipo de Pessoa (Fallback)", 8 8 "description": "Definição de tipo de pessoa no checkout - versão fallback para WooCommerce antigo", -
vindi-pagamentos/trunk/assets/scripts/theme/order/components/form-handler.js
r3344656 r3387744 73 73 }); 74 74 75 jQuery(`${visibleFieldsContainer} .has-data .field-display`).each(function () { 76 const field = jQuery(this); 77 const label = field.find('strong').text(); 78 let value = field.text(); 79 80 Object.keys(vindiOneClick.required_fields).forEach(key => { 81 const fieldLabel = vindiOneClick.required_fields[key] + ':'; 82 value = value.replace(fieldLabel, '').trim(); 83 }); 84 85 const fieldName = Object.keys(vindiOneClick.required_fields) 86 .find(key => vindiOneClick.required_fields[key] === label.replace(':', '')); 87 88 if (fieldName) { 75 jQuery(`${visibleFieldsContainer} .has-data`).each(function () { 76 const formRow = jQuery(this); 77 const input = formRow.find('input'); 78 if (input.length) { 79 const fieldName = input.attr('name').replace('billing_', ''); 80 const value = input.val() || formRow.find('.field-display').text().split(':')[1].trim(); 89 81 billingData[fieldName] = value; 90 82 } 91 83 }); 92 84 console.log('=== DEBUG BILLING DATA ==='); 85 console.log('Person Type:', personType); 86 console.log('Visible Container:', visibleFieldsContainer); 87 console.log('Billing Data Collected:', billingData); 88 console.log('========================='); 93 89 return { 94 90 isValid: isValid, -
vindi-pagamentos/trunk/assets/scripts/theme/order/one-click-buy.js
r3344656 r3387744 8 8 export default class VindiOneClickBuy { 9 9 constructor() { 10 if (typeof vindiOneClick === 'undefined' || !vindiOneClick) { 11 return; 12 } 13 10 14 this.modalSelector = '#vindi-one-click-modal'; 11 15 this.modal = jQuery(this.modalSelector); -
vindi-pagamentos/trunk/composer.json
r3387147 r3387744 1 1 { 2 2 "name": "vindi/vindi-pagamentos", 3 "version": "1. 0.9",3 "version": "1.1.0", 4 4 "description": "WooCommerce payment plugin using Vindi gateways", 5 5 "type": "wordpress-plugin", -
vindi-pagamentos/trunk/dist/scripts/theme/index.js
r3345266 r3387744 1 (()=>{function e(e,t,s,n){Object.defineProperty(e,t,{get:s,set:n,enumerable:!0,configurable:!0})}function t(e){return"string"==typeof e||e instanceof String}function s(e){var t;return"object"==typeof e&&null!=e&&"Object"===(null==e||null==(t=e.constructor)?void 0:t.name)}function n(e,t){return Array.isArray(t)?n(e,((e,s)=>t.includes(s))):Object.entries(e).reduce(((e,s)=>{let[n,a]=s;return t(a,n)&&(e[n]=a),e}),{})}const a={NONE:"NONE",LEFT:"LEFT",FORCE_LEFT:"FORCE_LEFT",RIGHT:"RIGHT",FORCE_RIGHT:"FORCE_RIGHT"};function i(e){switch(e){case a.LEFT:return a.FORCE_LEFT;case a.RIGHT:return a.FORCE_RIGHT;default:return e}}function r(e){return e.replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1")}function o(e,t){if(t===e)return!0;const s=Array.isArray(t),n=Array.isArray(e);let a;if(s&&n){if(t.length!=e.length)return!1;for(a=0;a<t.length;a++)if(!o(t[a],e[a]))return!1;return!0}if(s!=n)return!1;if(t&&e&&"object"==typeof t&&"object"==typeof e){const s=t instanceof Date,n=e instanceof Date;if(s&&n)return t.getTime()==e.getTime();if(s!=n)return!1;const i=t instanceof RegExp,r=e instanceof RegExp;if(i&&r)return t.toString()==e.toString();if(i!=r)return!1;const u=Object.keys(t);for(a=0;a<u.length;a++)if(!Object.prototype.hasOwnProperty.call(e,u[a]))return!1;for(a=0;a<u.length;a++)if(!o(e[u[a]],t[u[a]]))return!1;return!0}return!(!t||!e||"function"!=typeof t||"function"!=typeof e)&&t.toString()===e.toString()}class u{constructor(e){for(Object.assign(this,e);this.value.slice(0,this.startChangePos)!==this.oldValue.slice(0,this.startChangePos);)--this.oldSelection.start}get startChangePos(){return Math.min(this.cursorPos,this.oldSelection.start)}get insertedCount(){return this.cursorPos-this.startChangePos}get inserted(){return this.value.substr(this.startChangePos,this.insertedCount)}get removedCount(){return Math.max(this.oldSelection.end-this.startChangePos||this.oldValue.length-this.value.length,0)}get removed(){return this.oldValue.substr(this.startChangePos,this.removedCount)}get head(){return this.value.substring(0,this.startChangePos)}get tail(){return this.value.substring(this.startChangePos+this.insertedCount)}get removeDirection(){return!this.removedCount||this.insertedCount?a.NONE:this.oldSelection.end!==this.cursorPos&&this.oldSelection.start!==this.cursorPos||this.oldSelection.end!==this.oldSelection.start?a.LEFT:a.RIGHT}}function l(e,t){return new l.InputMask(e,t)}function d(e){if(null==e)throw new Error("mask property should be defined");return e instanceof RegExp?l.MaskedRegExp:t(e)?l.MaskedPattern:e===Date?l.MaskedDate:e===Number?l.MaskedNumber:Array.isArray(e)||e===Array?l.MaskedDynamic:l.Masked&&e.prototype instanceof l.Masked?e:l.Masked&&e instanceof l.Masked?e.constructor:e instanceof Function?l.MaskedFunction:(console.warn("Mask not found for mask",e),l.Masked)}function c(e){if(!e)throw new Error("Options in not defined");if(l.Masked){if(e.prototype instanceof l.Masked)return{mask:e};const{mask:t,...a}=e instanceof l.Masked?{mask:e}:s(e)&&e.mask instanceof l.Masked?e:{};if(t){const e=t.mask;return{...n(t,((e,t)=>!t.startsWith("_"))),mask:t.constructor,_mask:e,...a}}}return s(e)?{...e}:{mask:e}}function h(e){if(l.Masked&&e instanceof l.Masked)return e;const t=c(e),s=d(t.mask);if(!s)throw new Error("Masked class is not found for provided mask, appropriate module needs to be imported manually before creating mask.");return t.mask===s&&delete t.mask,t._mask&&(t.mask=t._mask,delete t._mask),new s(t)}l.createMask=h;class p{get selectionStart(){let e;try{e=this._unsafeSelectionStart}catch{}return null!=e?e:this.value.length}get selectionEnd(){let e;try{e=this._unsafeSelectionEnd}catch{}return null!=e?e:this.value.length}select(e,t){if(null!=e&&null!=t&&(e!==this.selectionStart||t!==this.selectionEnd))try{this._unsafeSelect(e,t)}catch{}}get isActive(){return!1}}l.MaskElement=p;class m extends p{constructor(e){super(),this.input=e,this._handlers={}}get rootElement(){var e,t,s;return null!=(e=null==(t=(s=this.input).getRootNode)?void 0:t.call(s))?e:document}get isActive(){return this.input===this.rootElement.activeElement}bindEvents(e){Object.keys(e).forEach((t=>this._toggleEventHandler(m.EVENTS_MAP[t],e[t])))}unbindEvents(){Object.keys(this._handlers).forEach((e=>this._toggleEventHandler(e)))}_toggleEventHandler(e,t){this._handlers[e]&&(this.input.removeEventListener(e,this._handlers[e]),delete this._handlers[e]),t&&(this.input.addEventListener(e,t),this._handlers[e]=t)}}m.EVENTS_MAP={selectionChange:"keydown",input:"input",drop:"drop",click:"click",focus:"focus",commit:"blur"},l.HTMLMaskElement=m;class g extends m{constructor(e){super(e),this.input=e,this._handlers={}}get _unsafeSelectionStart(){return null!=this.input.selectionStart?this.input.selectionStart:this.value.length}get _unsafeSelectionEnd(){return this.input.selectionEnd}_unsafeSelect(e,t){this.input.setSelectionRange(e,t)}get value(){return this.input.value}set value(e){this.input.value=e}}l.HTMLMaskElement=m;class v extends m{get _unsafeSelectionStart(){const e=this.rootElement,t=e.getSelection&&e.getSelection(),s=t&&t.anchorOffset,n=t&&t.focusOffset;return null==n||null==s||s<n?s:n}get _unsafeSelectionEnd(){const e=this.rootElement,t=e.getSelection&&e.getSelection(),s=t&&t.anchorOffset,n=t&&t.focusOffset;return null==n||null==s||s>n?s:n}_unsafeSelect(e,t){if(!this.rootElement.createRange)return;const s=this.rootElement.createRange();s.setStart(this.input.firstChild||this.input,e),s.setEnd(this.input.lastChild||this.input,t);const n=this.rootElement,a=n.getSelection&&n.getSelection();a&&(a.removeAllRanges(),a.addRange(s))}get value(){return this.input.textContent||""}set value(e){this.input.textContent=e}}l.HTMLContenteditableMaskElement=v;l.InputMask=class{constructor(e,t){this.el=e instanceof p?e:e.isContentEditable&&"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName?new v(e):new g(e),this.masked=h(t),this._listeners={},this._value="",this._unmaskedValue="",this._saveSelection=this._saveSelection.bind(this),this._onInput=this._onInput.bind(this),this._onChange=this._onChange.bind(this),this._onDrop=this._onDrop.bind(this),this._onFocus=this._onFocus.bind(this),this._onClick=this._onClick.bind(this),this.alignCursor=this.alignCursor.bind(this),this.alignCursorFriendly=this.alignCursorFriendly.bind(this),this._bindEvents(),this.updateValue(),this._onChange()}maskEquals(e){var t;return null==e||(null==(t=this.masked)?void 0:t.maskEquals(e))}get mask(){return this.masked.mask}set mask(e){if(this.maskEquals(e))return;if(!(e instanceof l.Masked)&&this.masked.constructor===d(e))return void this.masked.updateOptions({mask:e});const t=e instanceof l.Masked?e:h({mask:e});t.unmaskedValue=this.masked.unmaskedValue,this.masked=t}get value(){return this._value}set value(e){this.value!==e&&(this.masked.value=e,this.updateControl(),this.alignCursor())}get unmaskedValue(){return this._unmaskedValue}set unmaskedValue(e){this.unmaskedValue!==e&&(this.masked.unmaskedValue=e,this.updateControl(),this.alignCursor())}get typedValue(){return this.masked.typedValue}set typedValue(e){this.masked.typedValueEquals(e)||(this.masked.typedValue=e,this.updateControl(),this.alignCursor())}get displayValue(){return this.masked.displayValue}_bindEvents(){this.el.bindEvents({selectionChange:this._saveSelection,input:this._onInput,drop:this._onDrop,click:this._onClick,focus:this._onFocus,commit:this._onChange})}_unbindEvents(){this.el&&this.el.unbindEvents()}_fireEvent(e,t){const s=this._listeners[e];s&&s.forEach((e=>e(t)))}get selectionStart(){return this._cursorChanging?this._changingCursorPos:this.el.selectionStart}get cursorPos(){return this._cursorChanging?this._changingCursorPos:this.el.selectionEnd}set cursorPos(e){this.el&&this.el.isActive&&(this.el.select(e,e),this._saveSelection())}_saveSelection(){this.displayValue!==this.el.value&&console.warn("Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly."),this._selection={start:this.selectionStart,end:this.cursorPos}}updateValue(){this.masked.value=this.el.value,this._value=this.masked.value}updateControl(){const e=this.masked.unmaskedValue,t=this.masked.value,s=this.displayValue,n=this.unmaskedValue!==e||this.value!==t;this._unmaskedValue=e,this._value=t,this.el.value!==s&&(this.el.value=s),n&&this._fireChangeEvents()}updateOptions(e){const{mask:t,...s}=e,n=!this.maskEquals(t),a=!o(this.masked,s);n&&(this.mask=t),a&&this.masked.updateOptions(s),(n||a)&&this.updateControl()}updateCursor(e){null!=e&&(this.cursorPos=e,this._delayUpdateCursor(e))}_delayUpdateCursor(e){this._abortUpdateCursor(),this._changingCursorPos=e,this._cursorChanging=setTimeout((()=>{this.el&&(this.cursorPos=this._changingCursorPos,this._abortUpdateCursor())}),10)}_fireChangeEvents(){this._fireEvent("accept",this._inputEvent),this.masked.isComplete&&this._fireEvent("complete",this._inputEvent)}_abortUpdateCursor(){this._cursorChanging&&(clearTimeout(this._cursorChanging),delete this._cursorChanging)}alignCursor(){this.cursorPos=this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos,a.LEFT))}alignCursorFriendly(){this.selectionStart===this.cursorPos&&this.alignCursor()}on(e,t){return this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t),this}off(e,t){if(!this._listeners[e])return this;if(!t)return delete this._listeners[e],this;const s=this._listeners[e].indexOf(t);return s>=0&&this._listeners[e].splice(s,1),this}_onInput(e){if(this._inputEvent=e,this._abortUpdateCursor(),!this._selection)return this.updateValue();const t=new u({value:this.el.value,cursorPos:this.cursorPos,oldValue:this.displayValue,oldSelection:this._selection}),s=this.masked.rawInputValue,n=this.masked.splice(t.startChangePos,t.removed.length,t.inserted,t.removeDirection,{input:!0,raw:!0}).offset,i=s===this.masked.rawInputValue?t.removeDirection:a.NONE;let r=this.masked.nearestInputPos(t.startChangePos+n,i);i!==a.NONE&&(r=this.masked.nearestInputPos(r,a.NONE)),this.updateControl(),this.updateCursor(r),delete this._inputEvent}_onChange(){this.displayValue!==this.el.value&&this.updateValue(),this.masked.doCommit(),this.updateControl(),this._saveSelection()}_onDrop(e){e.preventDefault(),e.stopPropagation()}_onFocus(e){this.alignCursorFriendly()}_onClick(e){this.alignCursorFriendly()}destroy(){this._unbindEvents(),this._listeners.length=0,delete this.el}};class f{static normalize(e){return Array.isArray(e)?e:[e,new f]}constructor(e){Object.assign(this,{inserted:"",rawInserted:"",skip:!1,tailShift:0},e)}aggregate(e){return this.rawInserted+=e.rawInserted,this.skip=this.skip||e.skip,this.inserted+=e.inserted,this.tailShift+=e.tailShift,this}get offset(){return this.tailShift+this.inserted.length}}l.ChangeDetails=f;class y{constructor(e,t,s){void 0===e&&(e=""),void 0===t&&(t=0),this.value=e,this.from=t,this.stop=s}toString(){return this.value}extend(e){this.value+=String(e)}appendTo(e){return e.append(this.toString(),{tail:!0}).aggregate(e._appendPlaceholder())}get state(){return{value:this.value,from:this.from,stop:this.stop}}set state(e){Object.assign(this,e)}unshift(e){if(!this.value.length||null!=e&&this.from>=e)return"";const t=this.value[0];return this.value=this.value.slice(1),t}shift(){if(!this.value.length)return"";const e=this.value[this.value.length-1];return this.value=this.value.slice(0,-1),e}}class _{constructor(e){this._value="",this._update({..._.DEFAULTS,...e}),this._initialized=!0}updateOptions(e){Object.keys(e).length&&this.withValueRefresh(this._update.bind(this,e))}_update(e){Object.assign(this,e)}get state(){return{_value:this.value,_rawInputValue:this.rawInputValue}}set state(e){this._value=e._value}reset(){this._value=""}get value(){return this._value}set value(e){this.resolve(e,{input:!0})}resolve(e,t){void 0===t&&(t={input:!0}),this.reset(),this.append(e,t,""),this.doCommit()}get unmaskedValue(){return this.value}set unmaskedValue(e){this.resolve(e,{})}get typedValue(){return this.parse?this.parse(this.value,this):this.unmaskedValue}set typedValue(e){this.format?this.value=this.format(e,this):this.unmaskedValue=String(e)}get rawInputValue(){return this.extractInput(0,this.displayValue.length,{raw:!0})}set rawInputValue(e){this.resolve(e,{raw:!0})}get displayValue(){return this.value}get isComplete(){return!0}get isFilled(){return this.isComplete}nearestInputPos(e,t){return e}totalInputPositions(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),Math.min(this.displayValue.length,t-e)}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),this.displayValue.slice(e,t)}extractTail(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),new y(this.extractInput(e,t),e)}appendTail(e){return t(e)&&(e=new y(String(e))),e.appendTo(this)}_appendCharRaw(e,t){return e?(this._value+=e,new f({inserted:e,rawInserted:e})):new f}_appendChar(e,t,s){void 0===t&&(t={});const n=this.state;let a;if([e,a]=this.doPrepareChar(e,t),a=a.aggregate(this._appendCharRaw(e,t)),a.inserted){let e,i=!1!==this.doValidate(t);if(i&&null!=s){const t=this.state;!0===this.overwrite&&(e=s.state,s.unshift(this.displayValue.length-a.tailShift));let n=this.appendTail(s);i=n.rawInserted===s.toString(),i&&n.inserted||"shift"!==this.overwrite||(this.state=t,e=s.state,s.shift(),n=this.appendTail(s),i=n.rawInserted===s.toString()),i&&n.inserted&&(this.state=t)}i||(a=new f,this.state=n,s&&e&&(s.state=e))}return a}_appendPlaceholder(){return new f}_appendEager(){return new f}append(e,s,n){if(!t(e))throw new Error("value should be string");const a=t(n)?new y(String(n)):n;let i;null!=s&&s.tail&&(s._beforeTailState=this.state),[e,i]=this.doPrepare(e,s);for(let t=0;t<e.length;++t){const n=this._appendChar(e[t],s,a);if(!n.rawInserted&&!this.doSkipInvalid(e[t],s,a))break;i.aggregate(n)}return(!0===this.eager||"append"===this.eager)&&null!=s&&s.input&&e&&i.aggregate(this._appendEager()),null!=a&&(i.tailShift+=this.appendTail(a).tailShift),i}remove(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),this._value=this.displayValue.slice(0,e)+this.displayValue.slice(t),new f}withValueRefresh(e){if(this._refreshing||!this._initialized)return e();this._refreshing=!0;const t=this.rawInputValue,s=this.value,n=e();return this.rawInputValue=t,this.value&&this.value!==s&&0===s.indexOf(this.value)&&this.append(s.slice(this.displayValue.length),{},""),delete this._refreshing,n}runIsolated(e){if(this._isolated||!this._initialized)return e(this);this._isolated=!0;const t=this.state,s=e(this);return this.state=t,delete this._isolated,s}doSkipInvalid(e,t,s){return Boolean(this.skipInvalid)}doPrepare(e,t){return void 0===t&&(t={}),f.normalize(this.prepare?this.prepare(e,this,t):e)}doPrepareChar(e,t){return void 0===t&&(t={}),f.normalize(this.prepareChar?this.prepareChar(e,this,t):e)}doValidate(e){return(!this.validate||this.validate(this.value,this,e))&&(!this.parent||this.parent.doValidate(e))}doCommit(){this.commit&&this.commit(this.value,this)}splice(e,t,s,n,r){void 0===n&&(n=a.NONE),void 0===r&&(r={input:!0});const o=e+t,u=this.extractTail(o),l=!0===this.eager||"remove"===this.eager;let d;l&&(n=i(n),d=this.extractInput(0,o,{raw:!0}));let c=e;const h=new f;if(n!==a.NONE&&(c=this.nearestInputPos(e,t>1&&0!==e&&!l?a.NONE:n),h.tailShift=c-e),h.aggregate(this.remove(c)),l&&n!==a.NONE&&d===this.rawInputValue)if(n===a.FORCE_LEFT){let e;for(;d===this.rawInputValue&&(e=this.displayValue.length);)h.aggregate(new f({tailShift:-1})).aggregate(this.remove(e-1))}else n===a.FORCE_RIGHT&&u.unshift();return h.aggregate(this.append(s,r,u))}maskEquals(e){return this.mask===e}typedValueEquals(e){const t=this.typedValue;return e===t||_.EMPTY_VALUES.includes(e)&&_.EMPTY_VALUES.includes(t)||!!this.format&&this.format(e,this)===this.format(this.typedValue,this)}}_.DEFAULTS={skipInvalid:!0},_.EMPTY_VALUES=[void 0,null,""],l.Masked=_;class k{constructor(e,t){void 0===e&&(e=[]),void 0===t&&(t=0),this.chunks=e,this.from=t}toString(){return this.chunks.map(String).join("")}extend(e){if(!String(e))return;e=t(e)?new y(String(e)):e;const s=this.chunks[this.chunks.length-1],n=s&&(s.stop===e.stop||null==e.stop)&&e.from===s.from+s.toString().length;if(e instanceof y)n?s.extend(e.toString()):this.chunks.push(e);else if(e instanceof k){if(null==e.stop){let t;for(;e.chunks.length&&null==e.chunks[0].stop;)t=e.chunks.shift(),t.from+=e.from,this.extend(t)}e.toString()&&(e.stop=e.blockIndex,this.chunks.push(e))}}appendTo(e){if(!(e instanceof l.MaskedPattern)){return new y(this.toString()).appendTo(e)}const t=new f;for(let s=0;s<this.chunks.length&&!t.skip;++s){const n=this.chunks[s],a=e._mapPosToBlock(e.displayValue.length),i=n.stop;let r;if(null!=i&&(!a||a.index<=i)){if(n instanceof k||e._stops.indexOf(i)>=0){const s=e._appendPlaceholder(i);t.aggregate(s)}r=n instanceof k&&e._blocks[i]}if(r){const s=r.appendTail(n);s.skip=!1,t.aggregate(s),e._value+=s.inserted;const a=n.toString().slice(s.rawInserted.length);a&&t.aggregate(e.append(a,{tail:!0}))}else t.aggregate(e.append(n.toString(),{tail:!0}))}return t}get state(){return{chunks:this.chunks.map((e=>e.state)),from:this.from,stop:this.stop,blockIndex:this.blockIndex}}set state(e){const{chunks:t,...s}=e;Object.assign(this,s),this.chunks=t.map((e=>{const t="chunks"in e?new k:new y;return t.state=e,t}))}unshift(e){if(!this.chunks.length||null!=e&&this.from>=e)return"";const t=null!=e?e-this.from:e;let s=0;for(;s<this.chunks.length;){const e=this.chunks[s],n=e.unshift(t);if(e.toString()){if(!n)break;++s}else this.chunks.splice(s,1);if(n)return n}return""}shift(){if(!this.chunks.length)return"";let e=this.chunks.length-1;for(;0<=e;){const t=this.chunks[e],s=t.shift();if(t.toString()){if(!s)break;--e}else this.chunks.splice(e,1);if(s)return s}return""}}class C{constructor(e,t){this.masked=e,this._log=[];const{offset:s,index:n}=e._mapPosToBlock(t)||(t<0?{index:0,offset:0}:{index:this.masked._blocks.length,offset:0});this.offset=s,this.index=n,this.ok=!1}get block(){return this.masked._blocks[this.index]}get pos(){return this.masked._blockStartPos(this.index)+this.offset}get state(){return{index:this.index,offset:this.offset,ok:this.ok}}set state(e){Object.assign(this,e)}pushState(){this._log.push(this.state)}popState(){const e=this._log.pop();return e&&(this.state=e),e}bindBlock(){this.block||(this.index<0&&(this.index=0,this.offset=0),this.index>=this.masked._blocks.length&&(this.index=this.masked._blocks.length-1,this.offset=this.block.displayValue.length))}_pushLeft(e){for(this.pushState(),this.bindBlock();0<=this.index;--this.index,this.offset=(null==(t=this.block)?void 0:t.displayValue.length)||0){var t;if(e())return this.ok=!0}return this.ok=!1}_pushRight(e){for(this.pushState(),this.bindBlock();this.index<this.masked._blocks.length;++this.index,this.offset=0)if(e())return this.ok=!0;return this.ok=!1}pushLeftBeforeFilled(){return this._pushLeft((()=>{if(!this.block.isFixed&&this.block.value)return this.offset=this.block.nearestInputPos(this.offset,a.FORCE_LEFT),0!==this.offset||void 0}))}pushLeftBeforeInput(){return this._pushLeft((()=>{if(!this.block.isFixed)return this.offset=this.block.nearestInputPos(this.offset,a.LEFT),!0}))}pushLeftBeforeRequired(){return this._pushLeft((()=>{if(!(this.block.isFixed||this.block.isOptional&&!this.block.value))return this.offset=this.block.nearestInputPos(this.offset,a.LEFT),!0}))}pushRightBeforeFilled(){return this._pushRight((()=>{if(!this.block.isFixed&&this.block.value)return this.offset=this.block.nearestInputPos(this.offset,a.FORCE_RIGHT),this.offset!==this.block.value.length||void 0}))}pushRightBeforeInput(){return this._pushRight((()=>{if(!this.block.isFixed)return this.offset=this.block.nearestInputPos(this.offset,a.NONE),!0}))}pushRightBeforeRequired(){return this._pushRight((()=>{if(!(this.block.isFixed||this.block.isOptional&&!this.block.value))return this.offset=this.block.nearestInputPos(this.offset,a.NONE),!0}))}}class E{constructor(e){Object.assign(this,e),this._value="",this.isFixed=!0}get value(){return this._value}get unmaskedValue(){return this.isUnmasking?this.value:""}get rawInputValue(){return this._isRawInput?this.value:""}get displayValue(){return this.value}reset(){this._isRawInput=!1,this._value=""}remove(e,t){return void 0===e&&(e=0),void 0===t&&(t=this._value.length),this._value=this._value.slice(0,e)+this._value.slice(t),this._value||(this._isRawInput=!1),new f}nearestInputPos(e,t){void 0===t&&(t=a.NONE);const s=this._value.length;switch(t){case a.LEFT:case a.FORCE_LEFT:return 0;default:return s}}totalInputPositions(e,t){return void 0===e&&(e=0),void 0===t&&(t=this._value.length),this._isRawInput?t-e:0}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this._value.length),void 0===s&&(s={}),s.raw&&this._isRawInput&&this._value.slice(e,t)||""}get isComplete(){return!0}get isFilled(){return Boolean(this._value)}_appendChar(e,t){void 0===t&&(t={});const s=new f;if(this.isFilled)return s;const n=!0===this.eager||"append"===this.eager,a=this.char===e&&(this.isUnmasking||t.input||t.raw)&&(!t.raw||!n)&&!t.tail;return a&&(s.rawInserted=this.char),this._value=s.inserted=this.char,this._isRawInput=a&&(t.raw||t.input),s}_appendEager(){return this._appendChar(this.char,{tail:!0})}_appendPlaceholder(){const e=new f;return this.isFilled||(this._value=e.inserted=this.char),e}extractTail(){return new y("")}appendTail(e){return t(e)&&(e=new y(String(e))),e.appendTo(this)}append(e,t,s){const n=this._appendChar(e[0],t);return null!=s&&(n.tailShift+=this.appendTail(s).tailShift),n}doCommit(){}get state(){return{_value:this._value,_rawInputValue:this.rawInputValue}}set state(e){this._value=e._value,this._isRawInput=Boolean(e._rawInputValue)}}class b{constructor(e){const{parent:t,isOptional:s,placeholderChar:n,displayChar:a,lazy:i,eager:r,...o}=e;this.masked=h(o),Object.assign(this,{parent:t,isOptional:s,placeholderChar:n,displayChar:a,lazy:i,eager:r})}reset(){this.isFilled=!1,this.masked.reset()}remove(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.value.length),0===e&&t>=1?(this.isFilled=!1,this.masked.remove(e,t)):new f}get value(){return this.masked.value||(this.isFilled&&!this.isOptional?this.placeholderChar:"")}get unmaskedValue(){return this.masked.unmaskedValue}get rawInputValue(){return this.masked.rawInputValue}get displayValue(){return this.masked.value&&this.displayChar||this.value}get isComplete(){return Boolean(this.masked.value)||this.isOptional}_appendChar(e,t){if(void 0===t&&(t={}),this.isFilled)return new f;const s=this.masked.state,n=this.masked._appendChar(e,this.currentMaskFlags(t));return n.inserted&&!1===this.doValidate(t)&&(n.inserted=n.rawInserted="",this.masked.state=s),n.inserted||this.isOptional||this.lazy||t.input||(n.inserted=this.placeholderChar),n.skip=!n.inserted&&!this.isOptional,this.isFilled=Boolean(n.inserted),n}append(e,t,s){return this.masked.append(e,this.currentMaskFlags(t),s)}_appendPlaceholder(){const e=new f;return this.isFilled||this.isOptional||(this.isFilled=!0,e.inserted=this.placeholderChar),e}_appendEager(){return new f}extractTail(e,t){return this.masked.extractTail(e,t)}appendTail(e){return this.masked.appendTail(e)}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this.value.length),this.masked.extractInput(e,t,s)}nearestInputPos(e,t){void 0===t&&(t=a.NONE);const s=this.value.length,n=Math.min(Math.max(e,0),s);switch(t){case a.LEFT:case a.FORCE_LEFT:return this.isComplete?n:0;case a.RIGHT:case a.FORCE_RIGHT:return this.isComplete?n:s;default:return n}}totalInputPositions(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.value.length),this.value.slice(e,t).length}doValidate(e){return this.masked.doValidate(this.currentMaskFlags(e))&&(!this.parent||this.parent.doValidate(this.currentMaskFlags(e)))}doCommit(){this.masked.doCommit()}get state(){return{_value:this.value,_rawInputValue:this.rawInputValue,masked:this.masked.state,isFilled:this.isFilled}}set state(e){this.masked.state=e.masked,this.isFilled=e.isFilled}currentMaskFlags(e){var t;return{...e,_beforeTailState:(null==e||null==(t=e._beforeTailState)?void 0:t.masked)||(null==e?void 0:e._beforeTailState)}}}b.DEFAULT_DEFINITIONS={0:/\d/,a:/[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,"*":/./};l.MaskedRegExp=class extends _{updateOptions(e){super.updateOptions(e)}_update(e){const t=e.mask;t&&(e.validate=e=>e.search(t)>=0),super._update(e)}};class S extends _{constructor(e){super({...S.DEFAULTS,...e,definitions:Object.assign({},b.DEFAULT_DEFINITIONS,null==e?void 0:e.definitions)})}updateOptions(e){super.updateOptions(e)}_update(e){e.definitions=Object.assign({},this.definitions,e.definitions),super._update(e),this._rebuildMask()}_rebuildMask(){const e=this.definitions;this._blocks=[],this.exposeBlock=void 0,this._stops=[],this._maskedBlocks={};const t=this.mask;if(!t||!e)return;let s=!1,n=!1;for(let a=0;a<t.length;++a){if(this.blocks){const e=t.slice(a),s=Object.keys(this.blocks).filter((t=>0===e.indexOf(t)));s.sort(((e,t)=>t.length-e.length));const n=s[0];if(n){const{expose:e,...t}=c(this.blocks[n]),s=h({lazy:this.lazy,eager:this.eager,placeholderChar:this.placeholderChar,displayChar:this.displayChar,overwrite:this.overwrite,...t,parent:this});s&&(this._blocks.push(s),e&&(this.exposeBlock=s),this._maskedBlocks[n]||(this._maskedBlocks[n]=[]),this._maskedBlocks[n].push(this._blocks.length-1)),a+=n.length-1;continue}}let i=t[a],r=i in e;if(i===S.STOP_CHAR){this._stops.push(this._blocks.length);continue}if("{"===i||"}"===i){s=!s;continue}if("["===i||"]"===i){n=!n;continue}if(i===S.ESCAPE_CHAR){if(++a,i=t[a],!i)break;r=!1}const o=r?new b({isOptional:n,lazy:this.lazy,eager:this.eager,placeholderChar:this.placeholderChar,displayChar:this.displayChar,...c(e[i]),parent:this}):new E({char:i,eager:this.eager,isUnmasking:s});this._blocks.push(o)}}get state(){return{...super.state,_blocks:this._blocks.map((e=>e.state))}}set state(e){const{_blocks:t,...s}=e;this._blocks.forEach(((e,s)=>e.state=t[s])),super.state=s}reset(){super.reset(),this._blocks.forEach((e=>e.reset()))}get isComplete(){return this.exposeBlock?this.exposeBlock.isComplete:this._blocks.every((e=>e.isComplete))}get isFilled(){return this._blocks.every((e=>e.isFilled))}get isFixed(){return this._blocks.every((e=>e.isFixed))}get isOptional(){return this._blocks.every((e=>e.isOptional))}doCommit(){this._blocks.forEach((e=>e.doCommit())),super.doCommit()}get unmaskedValue(){return this.exposeBlock?this.exposeBlock.unmaskedValue:this._blocks.reduce(((e,t)=>e+t.unmaskedValue),"")}set unmaskedValue(e){if(this.exposeBlock){const t=this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock))+this.exposeBlock.displayValue.length);this.exposeBlock.unmaskedValue=e,this.appendTail(t),this.doCommit()}else super.unmaskedValue=e}get value(){return this.exposeBlock?this.exposeBlock.value:this._blocks.reduce(((e,t)=>e+t.value),"")}set value(e){if(this.exposeBlock){const t=this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock))+this.exposeBlock.displayValue.length);this.exposeBlock.value=e,this.appendTail(t),this.doCommit()}else super.value=e}get typedValue(){return this.exposeBlock?this.exposeBlock.typedValue:super.typedValue}set typedValue(e){if(this.exposeBlock){const t=this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock))+this.exposeBlock.displayValue.length);this.exposeBlock.typedValue=e,this.appendTail(t),this.doCommit()}else super.typedValue=e}get displayValue(){return this._blocks.reduce(((e,t)=>e+t.displayValue),"")}appendTail(e){return super.appendTail(e).aggregate(this._appendPlaceholder())}_appendEager(){var e;const t=new f;let s=null==(e=this._mapPosToBlock(this.displayValue.length))?void 0:e.index;if(null==s)return t;this._blocks[s].isFilled&&++s;for(let e=s;e<this._blocks.length;++e){const s=this._blocks[e]._appendEager();if(!s.inserted)break;t.aggregate(s)}return t}_appendCharRaw(e,t){void 0===t&&(t={});const s=this._mapPosToBlock(this.displayValue.length),n=new f;if(!s)return n;for(let i=s.index;;++i){var a;const s=this._blocks[i];if(!s)break;const r=s._appendChar(e,{...t,_beforeTailState:null==(a=t._beforeTailState)||null==(a=a._blocks)?void 0:a[i]}),o=r.skip;if(n.aggregate(r),o||r.rawInserted)break}return n}extractTail(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length);const s=new k;return e===t||this._forEachBlocksInRange(e,t,((e,t,n,a)=>{const i=e.extractTail(n,a);i.stop=this._findStopBefore(t),i.from=this._blockStartPos(t),i instanceof k&&(i.blockIndex=t),s.extend(i)})),s}extractInput(e,t,s){if(void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),void 0===s&&(s={}),e===t)return"";let n="";return this._forEachBlocksInRange(e,t,((e,t,a,i)=>{n+=e.extractInput(a,i,s)})),n}_findStopBefore(e){let t;for(let s=0;s<this._stops.length;++s){const n=this._stops[s];if(!(n<=e))break;t=n}return t}_appendPlaceholder(e){const t=new f;if(this.lazy&&null==e)return t;const s=this._mapPosToBlock(this.displayValue.length);if(!s)return t;const n=s.index,a=null!=e?e:this._blocks.length;return this._blocks.slice(n,a).forEach((s=>{if(!s.lazy||null!=e){var n;const e=s._appendPlaceholder(null==(n=s._blocks)?void 0:n.length);this._value+=e.inserted,t.aggregate(e)}})),t}_mapPosToBlock(e){let t="";for(let s=0;s<this._blocks.length;++s){const n=this._blocks[s],a=t.length;if(t+=n.displayValue,e<=t.length)return{index:s,offset:e-a}}}_blockStartPos(e){return this._blocks.slice(0,e).reduce(((e,t)=>e+t.displayValue.length),0)}_forEachBlocksInRange(e,t,s){void 0===t&&(t=this.displayValue.length);const n=this._mapPosToBlock(e);if(n){const e=this._mapPosToBlock(t),a=e&&n.index===e.index,i=n.offset,r=e&&a?e.offset:this._blocks[n.index].displayValue.length;if(s(this._blocks[n.index],n.index,i,r),e&&!a){for(let t=n.index+1;t<e.index;++t)s(this._blocks[t],t,0,this._blocks[t].displayValue.length);s(this._blocks[e.index],e.index,0,e.offset)}}}remove(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length);const s=super.remove(e,t);return this._forEachBlocksInRange(e,t,((e,t,n,a)=>{s.aggregate(e.remove(n,a))})),s}nearestInputPos(e,t){if(void 0===t&&(t=a.NONE),!this._blocks.length)return 0;const s=new C(this,e);if(t===a.NONE)return s.pushRightBeforeInput()?s.pos:(s.popState(),s.pushLeftBeforeInput()?s.pos:this.displayValue.length);if(t===a.LEFT||t===a.FORCE_LEFT){if(t===a.LEFT){if(s.pushRightBeforeFilled(),s.ok&&s.pos===e)return e;s.popState()}if(s.pushLeftBeforeInput(),s.pushLeftBeforeRequired(),s.pushLeftBeforeFilled(),t===a.LEFT){if(s.pushRightBeforeInput(),s.pushRightBeforeRequired(),s.ok&&s.pos<=e)return s.pos;if(s.popState(),s.ok&&s.pos<=e)return s.pos;s.popState()}return s.ok?s.pos:t===a.FORCE_LEFT?0:(s.popState(),s.ok?s.pos:(s.popState(),s.ok?s.pos:0))}return t===a.RIGHT||t===a.FORCE_RIGHT?(s.pushRightBeforeInput(),s.pushRightBeforeRequired(),s.pushRightBeforeFilled()?s.pos:t===a.FORCE_RIGHT?this.displayValue.length:(s.popState(),s.ok?s.pos:(s.popState(),s.ok?s.pos:this.nearestInputPos(e,a.LEFT)))):e}totalInputPositions(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length);let s=0;return this._forEachBlocksInRange(e,t,((e,t,n,a)=>{s+=e.totalInputPositions(n,a)})),s}maskedBlock(e){return this.maskedBlocks(e)[0]}maskedBlocks(e){const t=this._maskedBlocks[e];return t?t.map((e=>this._blocks[e])):[]}}S.DEFAULTS={lazy:!0,placeholderChar:"_"},S.STOP_CHAR="`",S.ESCAPE_CHAR="\\",S.InputDefinition=b,S.FixedDefinition=E,l.MaskedPattern=S;class w extends S{get _matchFrom(){return this.maxLength-String(this.from).length}constructor(e){super(e)}updateOptions(e){super.updateOptions(e)}_update(e){const{to:t=this.to||0,from:s=this.from||0,maxLength:n=this.maxLength||0,autofix:a=this.autofix,...i}=e;this.to=t,this.from=s,this.maxLength=Math.max(String(t).length,n),this.autofix=a;const r=String(this.from).padStart(this.maxLength,"0"),o=String(this.to).padStart(this.maxLength,"0");let u=0;for(;u<o.length&&o[u]===r[u];)++u;i.mask=o.slice(0,u).replace(/0/g,"\\0")+"0".repeat(this.maxLength-u),super._update(i)}get isComplete(){return super.isComplete&&Boolean(this.value)}boundaries(e){let t="",s="";const[,n,a]=e.match(/^(\D*)(\d*)(\D*)/)||[];return a&&(t="0".repeat(n.length)+a,s="9".repeat(n.length)+a),t=t.padEnd(this.maxLength,"0"),s=s.padEnd(this.maxLength,"9"),[t,s]}doPrepareChar(e,t){let s;if(void 0===t&&(t={}),[e,s]=super.doPrepareChar(e.replace(/\D/g,""),t),!this.autofix||!e)return[e,s];const n=String(this.from).padStart(this.maxLength,"0"),a=String(this.to).padStart(this.maxLength,"0"),i=this.value+e;if(i.length>this.maxLength)return["",s];const[r,o]=this.boundaries(i);return Number(o)<this.from?[n[i.length-1],s]:Number(r)>this.to?"pad"===this.autofix&&i.length<this.maxLength?["",s.aggregate(this.append(n[i.length-1]+e,t))]:[a[i.length-1],s]:[e,s]}doValidate(e){const t=this.value;if(-1===t.search(/[^0]/)&&t.length<=this._matchFrom)return!0;const[s,n]=this.boundaries(t);return this.from<=Number(n)&&Number(s)<=this.to&&super.doValidate(e)}}l.MaskedRange=w;class F extends S{constructor(e){const{mask:s,pattern:n,...a}={...F.DEFAULTS,...e};super({...a,mask:t(s)?s:n})}updateOptions(e){super.updateOptions(e)}_update(e){const{mask:s,pattern:n,blocks:a,...i}={...F.DEFAULTS,...e},r=Object.assign({},F.GET_DEFAULT_BLOCKS());e.min&&(r.Y.from=e.min.getFullYear()),e.max&&(r.Y.to=e.max.getFullYear()),e.min&&e.max&&r.Y.from===r.Y.to&&(r.m.from=e.min.getMonth()+1,r.m.to=e.max.getMonth()+1,r.m.from===r.m.to&&(r.d.from=e.min.getDate(),r.d.to=e.max.getDate())),Object.assign(r,this.blocks,a),Object.keys(r).forEach((t=>{const s=r[t];!("autofix"in s)&&"autofix"in e&&(s.autofix=e.autofix)})),super._update({...i,mask:t(s)?s:n,blocks:r})}doValidate(e){const t=this.date;return super.doValidate(e)&&(!this.isComplete||this.isDateExist(this.value)&&null!=t&&(null==this.min||this.min<=t)&&(null==this.max||t<=this.max))}isDateExist(e){return this.format(this.parse(e,this),this).indexOf(e)>=0}get date(){return this.typedValue}set date(e){this.typedValue=e}get typedValue(){return this.isComplete?super.typedValue:null}set typedValue(e){super.typedValue=e}maskEquals(e){return e===Date||super.maskEquals(e)}}F.GET_DEFAULT_BLOCKS=()=>({d:{mask:w,from:1,to:31,maxLength:2},m:{mask:w,from:1,to:12,maxLength:2},Y:{mask:w,from:1900,to:9999}}),F.DEFAULTS={mask:Date,pattern:"d{.}`m{.}`Y",format:(e,t)=>{if(!e)return"";return[String(e.getDate()).padStart(2,"0"),String(e.getMonth()+1).padStart(2,"0"),e.getFullYear()].join(".")},parse:(e,t)=>{const[s,n,a]=e.split(".").map(Number);return new Date(a,n-1,s)}},l.MaskedDate=F;class A extends _{constructor(e){super({...A.DEFAULTS,...e}),this.currentMask=void 0}updateOptions(e){super.updateOptions(e)}_update(e){super._update(e),"mask"in e&&(this.exposeMask=void 0,this.compiledMasks=Array.isArray(e.mask)?e.mask.map((e=>{const{expose:t,...s}=c(e),n=h({overwrite:this._overwrite,eager:this._eager,skipInvalid:this._skipInvalid,...s});return t&&(this.exposeMask=n),n})):[])}_appendCharRaw(e,t){void 0===t&&(t={});const s=this._applyDispatch(e,t);return this.currentMask&&s.aggregate(this.currentMask._appendChar(e,this.currentMaskFlags(t))),s}_applyDispatch(e,t,s){void 0===e&&(e=""),void 0===t&&(t={}),void 0===s&&(s="");const n=t.tail&&null!=t._beforeTailState?t._beforeTailState._value:this.value,a=this.rawInputValue,i=t.tail&&null!=t._beforeTailState?t._beforeTailState._rawInputValue:a,r=a.slice(i.length),o=this.currentMask,u=new f,l=null==o?void 0:o.state;if(this.currentMask=this.doDispatch(e,{...t},s),this.currentMask)if(this.currentMask!==o){if(this.currentMask.reset(),i){const e=this.currentMask.append(i,{raw:!0});u.tailShift=e.inserted.length-n.length}r&&(u.tailShift+=this.currentMask.append(r,{raw:!0,tail:!0}).tailShift)}else l&&(this.currentMask.state=l);return u}_appendPlaceholder(){const e=this._applyDispatch();return this.currentMask&&e.aggregate(this.currentMask._appendPlaceholder()),e}_appendEager(){const e=this._applyDispatch();return this.currentMask&&e.aggregate(this.currentMask._appendEager()),e}appendTail(e){const t=new f;return e&&t.aggregate(this._applyDispatch("",{},e)),t.aggregate(this.currentMask?this.currentMask.appendTail(e):super.appendTail(e))}currentMaskFlags(e){var t,s;return{...e,_beforeTailState:(null==(t=e._beforeTailState)?void 0:t.currentMaskRef)===this.currentMask&&(null==(s=e._beforeTailState)?void 0:s.currentMask)||e._beforeTailState}}doDispatch(e,t,s){return void 0===t&&(t={}),void 0===s&&(s=""),this.dispatch(e,this,t,s)}doValidate(e){return super.doValidate(e)&&(!this.currentMask||this.currentMask.doValidate(this.currentMaskFlags(e)))}doPrepare(e,t){void 0===t&&(t={});let[s,n]=super.doPrepare(e,t);if(this.currentMask){let e;[s,e]=super.doPrepare(s,this.currentMaskFlags(t)),n=n.aggregate(e)}return[s,n]}doPrepareChar(e,t){void 0===t&&(t={});let[s,n]=super.doPrepareChar(e,t);if(this.currentMask){let e;[s,e]=super.doPrepareChar(s,this.currentMaskFlags(t)),n=n.aggregate(e)}return[s,n]}reset(){var e;null==(e=this.currentMask)||e.reset(),this.compiledMasks.forEach((e=>e.reset()))}get value(){return this.exposeMask?this.exposeMask.value:this.currentMask?this.currentMask.value:""}set value(e){this.exposeMask?(this.exposeMask.value=e,this.currentMask=this.exposeMask,this._applyDispatch()):super.value=e}get unmaskedValue(){return this.exposeMask?this.exposeMask.unmaskedValue:this.currentMask?this.currentMask.unmaskedValue:""}set unmaskedValue(e){this.exposeMask?(this.exposeMask.unmaskedValue=e,this.currentMask=this.exposeMask,this._applyDispatch()):super.unmaskedValue=e}get typedValue(){return this.exposeMask?this.exposeMask.typedValue:this.currentMask?this.currentMask.typedValue:""}set typedValue(e){if(this.exposeMask)return this.exposeMask.typedValue=e,this.currentMask=this.exposeMask,void this._applyDispatch();let t=String(e);this.currentMask&&(this.currentMask.typedValue=e,t=this.currentMask.unmaskedValue),this.unmaskedValue=t}get displayValue(){return this.currentMask?this.currentMask.displayValue:""}get isComplete(){var e;return Boolean(null==(e=this.currentMask)?void 0:e.isComplete)}get isFilled(){var e;return Boolean(null==(e=this.currentMask)?void 0:e.isFilled)}remove(e,t){const s=new f;return this.currentMask&&s.aggregate(this.currentMask.remove(e,t)).aggregate(this._applyDispatch()),s}get state(){var e;return{...super.state,_rawInputValue:this.rawInputValue,compiledMasks:this.compiledMasks.map((e=>e.state)),currentMaskRef:this.currentMask,currentMask:null==(e=this.currentMask)?void 0:e.state}}set state(e){const{compiledMasks:t,currentMaskRef:s,currentMask:n,...a}=e;t&&this.compiledMasks.forEach(((e,s)=>e.state=t[s])),null!=s&&(this.currentMask=s,this.currentMask.state=n),super.state=a}extractInput(e,t,s){return this.currentMask?this.currentMask.extractInput(e,t,s):""}extractTail(e,t){return this.currentMask?this.currentMask.extractTail(e,t):super.extractTail(e,t)}doCommit(){this.currentMask&&this.currentMask.doCommit(),super.doCommit()}nearestInputPos(e,t){return this.currentMask?this.currentMask.nearestInputPos(e,t):super.nearestInputPos(e,t)}get overwrite(){return this.currentMask?this.currentMask.overwrite:this._overwrite}set overwrite(e){this._overwrite=e}get eager(){return this.currentMask?this.currentMask.eager:this._eager}set eager(e){this._eager=e}get skipInvalid(){return this.currentMask?this.currentMask.skipInvalid:this._skipInvalid}set skipInvalid(e){this._skipInvalid=e}maskEquals(e){return Array.isArray(e)?this.compiledMasks.every(((t,s)=>{if(!e[s])return;const{mask:n,...a}=e[s];return o(t,a)&&t.maskEquals(n)})):super.maskEquals(e)}typedValueEquals(e){var t;return Boolean(null==(t=this.currentMask)?void 0:t.typedValueEquals(e))}}A.DEFAULTS=void 0,A.DEFAULTS={dispatch:(e,t,s,n)=>{if(!t.compiledMasks.length)return;const i=t.rawInputValue,r=t.compiledMasks.map(((r,o)=>{const u=t.currentMask===r,l=u?r.displayValue.length:r.nearestInputPos(r.displayValue.length,a.FORCE_LEFT);return r.rawInputValue!==i?(r.reset(),r.append(i,{raw:!0})):u||r.remove(l),r.append(e,t.currentMaskFlags(s)),r.appendTail(n),{index:o,weight:r.rawInputValue.length,totalInputPositions:r.totalInputPositions(0,Math.max(l,r.nearestInputPos(r.displayValue.length,a.FORCE_LEFT)))}}));return r.sort(((e,t)=>t.weight-e.weight||t.totalInputPositions-e.totalInputPositions)),t.compiledMasks[r[0].index]}},l.MaskedDynamic=A;l.MaskedEnum=class extends S{constructor(e){super(e)}updateOptions(e){super.updateOptions(e)}_update(e){const{enum:t,...s}=e;if(t){const e=t.map((e=>e.length)),n=Math.min(...e),a=Math.max(...e)-n;s.mask="*".repeat(n),a&&(s.mask+="["+"*".repeat(a)+"]"),this.enum=t}super._update(s)}doValidate(e){return this.enum.some((e=>0===e.indexOf(this.unmaskedValue)))&&super.doValidate(e)}};l.MaskedFunction=class extends _{updateOptions(e){super.updateOptions(e)}_update(e){super._update({...e,validate:e.mask})}};class x extends _{constructor(e){super({...x.DEFAULTS,...e})}updateOptions(e){super.updateOptions(e)}_update(e){super._update(e),this._updateRegExps()}_updateRegExps(){const e="^"+(this.allowNegative?"[+|\\-]?":""),t=(this.scale?"("+r(this.radix)+"\\d{0,"+this.scale+"})?":"")+"$";this._numberRegExp=new RegExp(e+"\\d*"+t),this._mapToRadixRegExp=new RegExp("["+this.mapToRadix.map(r).join("")+"]","g"),this._thousandsSeparatorRegExp=new RegExp(r(this.thousandsSeparator),"g")}_removeThousandsSeparators(e){return e.replace(this._thousandsSeparatorRegExp,"")}_insertThousandsSeparators(e){const t=e.split(this.radix);return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,this.thousandsSeparator),t.join(this.radix)}doPrepareChar(e,t){void 0===t&&(t={});const[s,n]=super.doPrepareChar(this._removeThousandsSeparators(this.scale&&this.mapToRadix.length&&(t.input&&t.raw||!t.input&&!t.raw)?e.replace(this._mapToRadixRegExp,this.radix):e),t);return e&&!s&&(n.skip=!0),!s||this.allowPositive||this.value||"-"===s||n.aggregate(this._appendChar("-")),[s,n]}_separatorsCount(e,t){void 0===t&&(t=!1);let s=0;for(let n=0;n<e;++n)this._value.indexOf(this.thousandsSeparator,n)===n&&(++s,t&&(e+=this.thousandsSeparator.length));return s}_separatorsCountFromSlice(e){return void 0===e&&(e=this._value),this._separatorsCount(this._removeThousandsSeparators(e).length,!0)}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),[e,t]=this._adjustRangeWithSeparators(e,t),this._removeThousandsSeparators(super.extractInput(e,t,s))}_appendCharRaw(e,t){if(void 0===t&&(t={}),!this.thousandsSeparator)return super._appendCharRaw(e,t);const s=t.tail&&t._beforeTailState?t._beforeTailState._value:this._value,n=this._separatorsCountFromSlice(s);this._value=this._removeThousandsSeparators(this.value);const a=super._appendCharRaw(e,t);this._value=this._insertThousandsSeparators(this._value);const i=t.tail&&t._beforeTailState?t._beforeTailState._value:this._value,r=this._separatorsCountFromSlice(i);return a.tailShift+=(r-n)*this.thousandsSeparator.length,a.skip=!a.rawInserted&&e===this.thousandsSeparator,a}_findSeparatorAround(e){if(this.thousandsSeparator){const t=e-this.thousandsSeparator.length+1,s=this.value.indexOf(this.thousandsSeparator,t);if(s<=e)return s}return-1}_adjustRangeWithSeparators(e,t){const s=this._findSeparatorAround(e);s>=0&&(e=s);const n=this._findSeparatorAround(t);return n>=0&&(t=n+this.thousandsSeparator.length),[e,t]}remove(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),[e,t]=this._adjustRangeWithSeparators(e,t);const s=this.value.slice(0,e),n=this.value.slice(t),a=this._separatorsCount(s.length);this._value=this._insertThousandsSeparators(this._removeThousandsSeparators(s+n));const i=this._separatorsCountFromSlice(s);return new f({tailShift:(i-a)*this.thousandsSeparator.length})}nearestInputPos(e,t){if(!this.thousandsSeparator)return e;switch(t){case a.NONE:case a.LEFT:case a.FORCE_LEFT:{const s=this._findSeparatorAround(e-1);if(s>=0){const n=s+this.thousandsSeparator.length;if(e<n||this.value.length<=n||t===a.FORCE_LEFT)return s}break}case a.RIGHT:case a.FORCE_RIGHT:{const t=this._findSeparatorAround(e);if(t>=0)return t+this.thousandsSeparator.length}}return e}doValidate(e){let t=Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));if(t){const e=this.number;t=t&&!isNaN(e)&&(null==this.min||this.min>=0||this.min<=this.number)&&(null==this.max||this.max<=0||this.number<=this.max)}return t&&super.doValidate(e)}doCommit(){if(this.value){const e=this.number;let t=e;null!=this.min&&(t=Math.max(t,this.min)),null!=this.max&&(t=Math.min(t,this.max)),t!==e&&(this.unmaskedValue=this.format(t,this));let s=this.value;this.normalizeZeros&&(s=this._normalizeZeros(s)),this.padFractionalZeros&&this.scale>0&&(s=this._padFractionalZeros(s)),this._value=s}super.doCommit()}_normalizeZeros(e){const t=this._removeThousandsSeparators(e).split(this.radix);return t[0]=t[0].replace(/^(\D*)(0*)(\d*)/,((e,t,s,n)=>t+n)),e.length&&!/\d$/.test(t[0])&&(t[0]=t[0]+"0"),t.length>1&&(t[1]=t[1].replace(/0*$/,""),t[1].length||(t.length=1)),this._insertThousandsSeparators(t.join(this.radix))}_padFractionalZeros(e){if(!e)return e;const t=e.split(this.radix);return t.length<2&&t.push(""),t[1]=t[1].padEnd(this.scale,"0"),t.join(this.radix)}doSkipInvalid(e,t,s){void 0===t&&(t={});const n=0===this.scale&&e!==this.thousandsSeparator&&(e===this.radix||e===x.UNMASKED_RADIX||this.mapToRadix.includes(e));return super.doSkipInvalid(e,t,s)&&!n}get unmaskedValue(){return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix,x.UNMASKED_RADIX)}set unmaskedValue(e){super.unmaskedValue=e}get typedValue(){return this.parse(this.unmaskedValue,this)}set typedValue(e){this.rawInputValue=this.format(e,this).replace(x.UNMASKED_RADIX,this.radix)}get number(){return this.typedValue}set number(e){this.typedValue=e}get allowNegative(){return null!=this.min&&this.min<0||null!=this.max&&this.max<0}get allowPositive(){return null!=this.min&&this.min>0||null!=this.max&&this.max>0}typedValueEquals(e){return(super.typedValueEquals(e)||x.EMPTY_VALUES.includes(e)&&x.EMPTY_VALUES.includes(this.typedValue))&&!(0===e&&""===this.value)}}x.UNMASKED_RADIX=".",x.EMPTY_VALUES=[..._.EMPTY_VALUES,0],x.DEFAULTS={mask:Number,radix:",",thousandsSeparator:"",mapToRadix:[x.UNMASKED_RADIX],min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER,scale:2,normalizeZeros:!0,padFractionalZeros:!1,parse:Number,format:e=>e.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20})},l.MaskedNumber=x;const M={MASKED:"value",UNMASKED:"unmaskedValue",TYPED:"typedValue"};function I(e,t,s){void 0===t&&(t=M.MASKED),void 0===s&&(s=M.MASKED);const n=h(e);return e=>n.runIsolated((n=>(n[t]=e,n[s])))}l.PIPE_TYPE=M,l.createPipe=I,l.pipe=function(e,t,s,n){return I(t,s,n)(e)};try{globalThis.IMask=l}catch{}var B,T,D={};e(D,"sprintf",(()=>B),(e=>B=e)),e(D,"vsprintf",(()=>T),(e=>T=e)),function(){"use strict";var e={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function t(s){return function(s,n){var a,i,r,o,u,l,d,c,h,p=1,m=s.length,g="";for(i=0;i<m;i++)if("string"==typeof s[i])g+=s[i];else if("object"==typeof s[i]){if((o=s[i]).keys)for(a=n[p],r=0;r<o.keys.length;r++){if(null==a)throw new Error(t('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[r],o.keys[r-1]));a=a[o.keys[r]]}else a=o.param_no?n[o.param_no]:n[p++];if(e.not_type.test(o.type)&&e.not_primitive.test(o.type)&&a instanceof Function&&(a=a()),e.numeric_arg.test(o.type)&&"number"!=typeof a&&isNaN(a))throw new TypeError(t("[sprintf] expecting number but found %T",a));switch(e.number.test(o.type)&&(c=a>=0),o.type){case"b":a=parseInt(a,10).toString(2);break;case"c":a=String.fromCharCode(parseInt(a,10));break;case"d":case"i":a=parseInt(a,10);break;case"j":a=JSON.stringify(a,null,o.width?parseInt(o.width):0);break;case"e":a=o.precision?parseFloat(a).toExponential(o.precision):parseFloat(a).toExponential();break;case"f":a=o.precision?parseFloat(a).toFixed(o.precision):parseFloat(a);break;case"g":a=o.precision?String(Number(a.toPrecision(o.precision))):parseFloat(a);break;case"o":a=(parseInt(a,10)>>>0).toString(8);break;case"s":a=String(a),a=o.precision?a.substring(0,o.precision):a;break;case"t":a=String(!!a),a=o.precision?a.substring(0,o.precision):a;break;case"T":a=Object.prototype.toString.call(a).slice(8,-1).toLowerCase(),a=o.precision?a.substring(0,o.precision):a;break;case"u":a=parseInt(a,10)>>>0;break;case"v":a=a.valueOf(),a=o.precision?a.substring(0,o.precision):a;break;case"x":a=(parseInt(a,10)>>>0).toString(16);break;case"X":a=(parseInt(a,10)>>>0).toString(16).toUpperCase()}e.json.test(o.type)?g+=a:(!e.number.test(o.type)||c&&!o.sign?h="":(h=c?"+":"-",a=a.toString().replace(e.sign,"")),l=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",d=o.width-(h+a).length,u=o.width&&d>0?l.repeat(d):"",g+=o.align?h+a+u:"0"===l?h+u+a:u+h+a)}return g}(function(t){if(n[t])return n[t];var s,a=t,i=[],r=0;for(;a;){if(null!==(s=e.text.exec(a)))i.push(s[0]);else if(null!==(s=e.modulo.exec(a)))i.push("%");else{if(null===(s=e.placeholder.exec(a)))throw new SyntaxError("[sprintf] unexpected placeholder");if(s[2]){r|=1;var o=[],u=s[2],l=[];if(null===(l=e.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(l[1]);""!==(u=u.substring(l[0].length));)if(null!==(l=e.key_access.exec(u)))o.push(l[1]);else{if(null===(l=e.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(l[1])}s[2]=o}else r|=2;if(3===r)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");i.push({placeholder:s[0],param_no:s[1],keys:s[2],sign:s[3],pad_char:s[4],align:s[5],width:s[6],precision:s[7],type:s[8]})}a=a.substring(s[0].length)}return n[t]=i}(s),arguments)}function s(e,s){return t.apply(null,[e].concat(s||[]))}var n=Object.create(null);B=t,T=s,"undefined"!=typeof window&&(window.sprintf=t,window.vsprintf=s,"function"==typeof define&&define.amd&&define((function(){return{sprintf:t,vsprintf:s}})))}();!function(e,t){var s,n,a=0;function i(){var i,r,o=s,u=arguments.length;e:for(;o;){if(o.args.length===arguments.length){for(r=0;r<u;r++)if(o.args[r]!==arguments[r]){o=o.next;continue e}return o!==s&&(o===n&&(n=o.prev),o.prev.next=o.next,o.next&&(o.next.prev=o.prev),o.next=s,o.prev=null,s.prev=o,s=o),o.val}o=o.next}for(i=new Array(u),r=0;r<u;r++)i[r]=arguments[r];return o={args:i,val:e.apply(null,i)},s?(s.prev=o,o.next=s):n=o,a===t.maxSize?(n=n.prev).next=null:a++,s=o,o.val}t=t||{},i.clear=function(){s=null,n=null,a=0}}(console.error);var j,V,P,L;function O(e){for(var t,s,n,a,i=[],r=[];t=e.match(L);){for(s=t[0],(n=e.substr(0,t.index).trim())&&i.push(n);a=r.pop();){if(P[s]){if(P[s][0]===a){s=P[s][1]||s;break}}else if(V.indexOf(a)>=0||j[a]<j[s]){r.push(a);break}i.push(a)}P[s]||r.push(s),e=e.substr(t.index+s.length)}return(e=e.trim())&&i.push(e),i.concat(r.reverse())}j={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},V=["(","?"],P={")":["("],":":["?","?:"]},L=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var Q={"!":function(e){return!e},"*":function(e,t){return e*t},"/":function(e,t){return e/t},"%":function(e,t){return e%t},"+":function(e,t){return e+t},"-":function(e,t){return e-t},"<":function(e,t){return e<t},"<=":function(e,t){return e<=t},">":function(e,t){return e>t},">=":function(e,t){return e>=t},"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},"&&":function(e,t){return e&&t},"||":function(e,t){return e||t},"?:":function(e,t,s){if(e)throw t;return s}};function R(e,t){var s,n,a,i,r,o,u=[];for(s=0;s<e.length;s++){if(r=e[s],i=Q[r]){for(n=i.length,a=Array(n);n--;)a[n]=u.pop();try{o=i.apply(null,a)}catch(e){return e}}else o=t.hasOwnProperty(r)?t[r]:+r;u.push(o)}return u[0]}function q(e){var t=O(e);return function(e){return R(t,e)}}var N={contextDelimiter:"",onMissingKey:null};function H(e,t){var s;for(s in this.data=e,this.pluralForms={},this.options={},N)this.options[s]=void 0!==t&&s in t?t[s]:N[s]}H.prototype.getPluralForm=function(e,t){var s,n,a,i,r=this.pluralForms[e];return r||("function"!=typeof(a=(s=this.data[e][""])["Plural-Forms"]||s["plural-forms"]||s.plural_forms)&&(n=function(e){var t,s,n;for(t=e.split(";"),s=0;s<t.length;s++)if(0===(n=t[s].trim()).indexOf("plural="))return n.substr(7)}(s["Plural-Forms"]||s["plural-forms"]||s.plural_forms),i=q(n),a=function(e){return+i({n:e})}),r=this.pluralForms[e]=a),r(t)},H.prototype.dcnpgettext=function(e,t,s,n,a){var i,r,o;return i=void 0===a?0:this.getPluralForm(e,a),r=s,t&&(r=t+this.options.contextDelimiter+s),(o=this.data[e][r])&&o[i]?o[i]:(this.options.onMissingKey&&this.options.onMissingKey(s,e),0===i?s:n)};const $={plural_forms:e=>1===e?0:1},z=/^i18n\.(n?gettext|has_translation)(_|$)/;var U=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)};var G=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)};var Y=function(e,t){return function(s,n,a,i=10){const r=e[t];if(!G(s))return;if(!U(n))return;if("function"!=typeof a)return void console.error("The hook callback must be a function.");if("number"!=typeof i)return void console.error("If specified, the hook priority must be a number.");const o={callback:a,priority:i,namespace:n};if(r[s]){const e=r[s].handlers;let t;for(t=e.length;t>0&&!(i>=e[t-1].priority);t--);t===e.length?e[t]=o:e.splice(t,0,o),r.__current.forEach((e=>{e.name===s&&e.currentIndex>=t&&e.currentIndex++}))}else r[s]={handlers:[o],runs:0};"hookAdded"!==s&&e.doAction("hookAdded",s,n,a,i)}};var Z=function(e,t,s=!1){return function(n,a){const i=e[t];if(!G(n))return;if(!s&&!U(a))return;if(!i[n])return 0;let r=0;if(s)r=i[n].handlers.length,i[n]={runs:i[n].runs,handlers:[]};else{const e=i[n].handlers;for(let t=e.length-1;t>=0;t--)e[t].namespace===a&&(e.splice(t,1),r++,i.__current.forEach((e=>{e.name===n&&e.currentIndex>=t&&e.currentIndex--})))}return"hookRemoved"!==n&&e.doAction("hookRemoved",n,a),r}};var K=function(e,t){return function(s,n){const a=e[t];return void 0!==n?s in a&&a[s].handlers.some((e=>e.namespace===n)):s in a}};var X=function(e,t,s=!1){return function(n,...a){const i=e[t];i[n]||(i[n]={handlers:[],runs:0}),i[n].runs++;const r=i[n].handlers;if(!r||!r.length)return s?a[0]:void 0;const o={name:n,currentIndex:0};for(i.__current.push(o);o.currentIndex<r.length;){const e=r[o.currentIndex].callback.apply(null,a);s&&(a[0]=e),o.currentIndex++}return i.__current.pop(),s?a[0]:void 0}};var J=function(e,t){return function(){var s;const n=e[t];return null!==(s=n.__current[n.__current.length-1]?.name)&&void 0!==s?s:null}};var W=function(e,t){return function(s){const n=e[t];return void 0===s?void 0!==n.__current[0]:!!n.__current[0]&&s===n.__current[0].name}};var ee=function(e,t){return function(s){const n=e[t];if(G(s))return n[s]&&n[s].runs?n[s].runs:0}};class te{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=Y(this,"actions"),this.addFilter=Y(this,"filters"),this.removeAction=Z(this,"actions"),this.removeFilter=Z(this,"filters"),this.hasAction=K(this,"actions"),this.hasFilter=K(this,"filters"),this.removeAllActions=Z(this,"actions",!0),this.removeAllFilters=Z(this,"filters",!0),this.doAction=X(this,"actions"),this.applyFilters=X(this,"filters",!0),this.currentAction=J(this,"actions"),this.currentFilter=J(this,"filters"),this.doingAction=W(this,"actions"),this.doingFilter=W(this,"filters"),this.didAction=ee(this,"actions"),this.didFilter=ee(this,"filters")}}const se=new te,{addAction:ne,addFilter:ae,removeAction:ie,removeFilter:re,hasAction:oe,hasFilter:ue,removeAllActions:le,removeAllFilters:de,doAction:ce,applyFilters:he,currentAction:pe,currentFilter:me,doingAction:ge,doingFilter:ve,didAction:fe,didFilter:ye,actions:_e,filters:ke}=se,Ce=((e,t,s)=>{const n=new H({}),a=new Set,i=()=>{a.forEach((e=>e()))},r=(e,t="default")=>{n.data[t]={...n.data[t],...e},n.data[t][""]={...$,...n.data[t]?.[""]},delete n.pluralForms[t]},o=(e,t)=>{r(e,t),i()},u=(e="default",t,s,a,i)=>(n.data[e]||r(void 0,e),n.dcnpgettext(e,t,s,a,i)),l=(e="default")=>e,d=(e,t,n)=>{let a=u(n,t,e);return s?(a=s.applyFilters("i18n.gettext_with_context",a,e,t,n),s.applyFilters("i18n.gettext_with_context_"+l(n),a,e,t,n)):a};if(e&&o(e,t),s){const e=e=>{z.test(e)&&i()};s.addAction("hookAdded","core/i18n",e),s.addAction("hookRemoved","core/i18n",e)}return{getLocaleData:(e="default")=>n.data[e],setLocaleData:o,addLocaleData:(e,t="default")=>{n.data[t]={...n.data[t],...e,"":{...$,...n.data[t]?.[""],...e?.[""]}},delete n.pluralForms[t],i()},resetLocaleData:(e,t)=>{n.data={},n.pluralForms={},o(e,t)},subscribe:e=>(a.add(e),()=>a.delete(e)),__:(e,t)=>{let n=u(t,void 0,e);return s?(n=s.applyFilters("i18n.gettext",n,e,t),s.applyFilters("i18n.gettext_"+l(t),n,e,t)):n},_x:d,_n:(e,t,n,a)=>{let i=u(a,void 0,e,t,n);return s?(i=s.applyFilters("i18n.ngettext",i,e,t,n,a),s.applyFilters("i18n.ngettext_"+l(a),i,e,t,n,a)):i},_nx:(e,t,n,a,i)=>{let r=u(i,a,e,t,n);return s?(r=s.applyFilters("i18n.ngettext_with_context",r,e,t,n,a,i),s.applyFilters("i18n.ngettext_with_context_"+l(i),r,e,t,n,a,i)):r},isRTL:()=>"rtl"===d("ltr","text direction"),hasTranslation:(e,t,a)=>{const i=t?t+""+e:e;let r=!!n.data?.[null!=a?a:"default"]?.[i];return s&&(r=s.applyFilters("i18n.has_translation",r,e,t,a),r=s.applyFilters("i18n.has_translation_"+l(a),r,e,t,a)),r}}})(void 0,void 0,se);Ce.getLocaleData.bind(Ce),Ce.setLocaleData.bind(Ce),Ce.resetLocaleData.bind(Ce),Ce.subscribe.bind(Ce);const Ee=Ce.__.bind(Ce);Ce._x.bind(Ce),Ce._n.bind(Ce),Ce._nx.bind(Ce),Ce.isRTL.bind(Ce),Ce.hasTranslation.bind(Ce);class be{constructor(){this.setCardNumberMask(),this.setCardOwnerMask(),this.setCardCodeMask(),this.setCardDateMask(),this.manageTokenSelect()}setCardNumberMask(){const e=document.querySelector("#wvp-card-number");e&&(e.classList.contains("wvp-block-field")||l(e,{mask:"0000 0000 0000 0000"}),this.handleCardBrand(e),e.addEventListener("input",(()=>{this.handleCardBrand(e)})))}setCardOwnerMask(){const e=document.querySelector("#wvp-card-owner");if(e&&!e.classList.contains("wvp-block-field")){const t=l(e,{mask:/^[A-Za-z\s]*$/});e.addEventListener("input",(()=>{e.value=e.value.toUpperCase(),t.updateValue()}))}}setCardDateMask(){const e=document.querySelector("#wvp-card-date");e&&!e.classList.contains("wvp-block-field")&&l(e,{mask:"00/00"})}setCardCodeMask(){const e=document.querySelector("#wvp-card-code");e&&(e.classList.contains("wvp-block-field")||l(e,{mask:"0000"}),e.addEventListener("input",(()=>{this.setCodeBrand(e)})))}handleCardBrand(e){const t=this.getBrands(),s=e.value.replace(/\s/g,"");let n;!s||e.value.length<16||(this.resetInstallmentsError(),t.forEach((e=>{if(e.regex.test(s)&&!n)return n=e,this.setCardBrand(e.name,e.code),void this.getCardInstallments()})),n||(this.setCardBrand("mono/generic",1),this.showInstallmentsError()))}showInstallmentsError(){const e=document.querySelector("#wvp-installments-error");e&&(e.innerText=Ee("Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.","vindi-pagamentos"),e.classList.add("active"))}resetInstallmentsError(){const e=document.querySelector("#wvp-installments-error");e&&(e.innerText="",e.classList.remove("active"))}getBrands(){return[{code:16,name:"elo",regex:/^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/},{code:3,name:"visa",regex:/^4[0-9]{12}(?:[0-9]{3})?$/},{code:4,name:"mastercard",regex:/^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/},{code:5,name:"amex",regex:/^3[47][0-9]{13}$/},{code:25,name:"hipercard",regex:/^(606282|3841\d{2}|60(?!11)\d{2})\d{10}$/},{code:20,name:"hiper",regex:/^(637095|637599|637612|637609|637598)\d*$/}]}setCardBrand(e,t){const s=document.querySelector("#wvp-brand-icon"),n=document.querySelector("#wvp-card-brand");if(s){const t=s.getAttribute("data-img");t&&(s.src=s.src.replace(t,e),s.setAttribute("data-img",e))}n&&(n.value=t)}setCodeBrand(e){const t=document.querySelector("#wvp-cvv-icon"),s=e.length<3?"mono/cvv":"cvv";if(t){const e=t.getAttribute("data-img");e&&(t.src=t.src.replace(e,s),t.setAttribute("data-img",s))}}manageTokenSelect(){jQuery('input[name="wc-vindi-pagamentos-credit-payment-token"]').on("change",(e=>{jQuery(e.target).is(":checked")&&"new"!==e.target.value&&this.getCardInstallments(e.target.value);document.querySelector("#wvp-card-installments").innerHTML=""}))}getCardInstallments(e=null){if(!document.querySelector("#wvp-card-installments"))return;const t=document.querySelector("#wvp-card-brand"),s=document.querySelector("#wvp-card-nonce"),n=document.querySelector("#wvp-cart-total");this.resetInstallmentsError(),this.setRequestLoader();const a={price:n.value,_wpnonce:s.value,security:wc_checkout_params.update_order_review_nonce};e?a.token=e:a.brand=t.value;const i=e,r=jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"),method:"POST",contentType:"application/json",data:JSON.stringify(a),success:function(e){if(e.success){const t=e.data.installments,s=document.querySelector("#wvp-card-installments"),n=document.querySelector("#wvp-installments-error");e.data.message&&(n.textContent=e.data.message,n.classList.add("active")),s.innerHTML="";for(const e in t){const n=document.createElement("option");n.value=e,n.innerText=t[e],s.appendChild(n)}}},error:function(e,t,s){if("abort"!==t){const e=document.querySelector("#wvp-installments-error");if(e&&""===e.innerHTML){const t=document.createElement("span");t.innerText=s.message,e.appendChild(t),e.classList.add("active")}}},complete:()=>{jQuery(".wvp-credit-fields").removeClass("processing").unblock()}});jQuery('input[name="wc-vindi-pagamentos-credit-payment-token"]').on("change",(e=>{jQuery(e.target).is(":checked")&&e.target.value!==i&&r.abort()}))}setRequestLoader(){jQuery(".wvp-credit-fields").addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}}class Se{constructor(){this.setDocumentMask(),this.handlerPersonType(),this.setDocumentNameAttribute(),this.hideGateway(),this.setFingerPrintEnviroment(),this.hideBlockDocumentField(),this.selectedGateway()}hideBlockDocumentField(){const e=document.querySelector("#vindi-pagamentos__billing_persontype");e&&e.addEventListener("change",(()=>{2==e.value?this.handlerDocumentField(!1):this.handlerDocumentField(!0)}))}setFingerPrintEnviroment(){const e=document.querySelector(".wvp-enviroment"),t=document.querySelectorAll(".wvp-fingerprint");if(window.yapay&&e){const s=window.yapay.FingerPrint({env:e.value});t.forEach((e=>{e.value=s.getFingerPrint()}))}}setDocumentMask(){document.querySelectorAll(".wc-vindi-customer-document").forEach((e=>{e.classList.contains("wvp-block-field")&&l(e,{mask:"000.000.000-00"})}))}handlerPersonType(){const e=document.querySelector("#billing_persontype");e&&(this.handlerDocumentField("1"===e.value),jQuery("#billing_persontype").change((()=>{this.handlerDocumentField("1"===e.value)})))}handlerDocumentField(e){document.querySelectorAll(".vindi-pagamentos-document").forEach((t=>{e?t.classList.add("vindi-pagamentos-document-hidden"):t.classList.remove("vindi-pagamentos-document-hidden")}))}setDocumentNameAttribute(){document.querySelectorAll(".wc-vindi-customer-document").forEach((e=>{e.addEventListener("focusin",(()=>{this.unsetDocumentNameAttribute(),e.setAttribute("name","wc-vindi-customer-document")}))}))}unsetDocumentNameAttribute(){document.querySelectorAll(".wc-vindi-customer-document").forEach((e=>{e.removeAttribute("name")}))}hideGateway(){document.querySelectorAll(".wvp-hidden-gateway").forEach((e=>{const t=document.querySelector(`.payment_method_${e.value}`);t?t.classList.add("wvp-hidden-gateway"):this.hideBlockGateways(e)}))}hideBlockGateways(e){const t=document.querySelector(`#hidden-${e.value}`);if(t){t.parentElement.parentElement.classList.add("wvp-hidden-gateway")}}selectedGateway(){document.querySelectorAll('form.checkout input[name^="payment_method"]').forEach((e=>{e.addEventListener("change",(()=>{const e=new Event("update_checkout");document.body.dispatchEvent(e)}))}))}}class we{constructor(){this.handleBankBrands()}handleBankBrands(){const e=document.querySelectorAll(".wvp-transfer-brand"),t=document.querySelector("#wvp-transfer-bank");t&&e.forEach((e=>{e.addEventListener("click",(()=>{this.clearSelectedBrands(),e.classList.add("wvp-transfer-brand-selected"),t.value=e.getAttribute("data-bank")}))}))}clearSelectedBrands(){document.querySelectorAll(".wvp-transfer-brand-selected").forEach((e=>{e.classList.remove("wvp-transfer-brand-selected")}))}}class Fe{constructor(){this.isOrderPayPage()&&(this.handlePersonType(),this.handleDocumentMask(),this.validateFormFields(),this.fillFormFields())}handlePersonType(){const e=document.querySelector("#billing_persontype");e&&(this.selectPersonType(),e.addEventListener("change",(()=>{this.selectPersonType()})))}selectPersonType(){const e=document.querySelector("#billing_persontype"),t=document.querySelector("#billing_cpf_field"),s=document.querySelector("#billing_cnpj_field"),n=document.querySelector("#billing_company_field");"1"===e.value&&(t.style.display="block",s.style.display="none",n.style.display="none"),"2"===e.value&&(t.style.display="none",s.style.display="block",n.style.display="block")}isOrderPayPage(){return!!new URLSearchParams(location.href).has("vindi-payment-link")}handleDocumentMask(){const e=document.querySelector("#billing_cpf"),t=document.querySelector("#billing_cnpj"),s=document.querySelector("#billing_phone");e&&l(e,{mask:"000.000.000-00"}),t&&l(t,{mask:"00.000.000/0000-00"}),s&&l(s,{mask:"(00) 0 0000-0000"})}validateFormFields(){const e=document.querySelector(".woocommerce > #order_review");e&&(this.setRequiredAttribute(),e.addEventListener("submit",(t=>{t.preventDefault(),this.saveFormData(),e.reportValidity()?(this.handleWoocommerceLoader(!0),e.submit()):setTimeout((()=>{this.handleWoocommerceLoader(!1)}),500)})))}handleWoocommerceLoader(e=!0){document.querySelectorAll(".blockUI").forEach((t=>{t.style.display="block",e||(t.style.display="none")}))}setRequiredAttribute(){this.getFormFields(!0).forEach((e=>{const t=document.querySelector(`#billing_${e}`);t&&t.setAttribute("required",!0)}))}getFormFields(e=!1){let t=["first_name","last_name","person_type","country","postcode","address_1","neighborhood","number","city","phone","email"];return e?t:t.concat(["address_2","cpf","cnpj"])}saveFormData(){const e=this.getFormFields(),t={};e.forEach((e=>{const s=document.querySelector(`#billing_${e}`);s&&(t[e]=s.value)})),localStorage.setItem("vindi-pagamento-form-data",JSON.stringify(t))}fillFormFields(){const e=localStorage.getItem("vindi-pagamento-form-data");if(e){const t=JSON.parse(e);for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const s=document.querySelector(`#billing_${e}`);s&&(s.value=t[e])}}}}class Ae{constructor(){this.handleCopyButton()}handleCopyButton(){document.querySelectorAll(".copy-button").forEach((e=>{e.addEventListener("click",(()=>{const t=e.getAttribute("data-text"),s=document.querySelector(".copy-input");try{navigator.clipboard.writeText(t),s.select()}catch(e){s.select(),document.execCommand("copy")}}))}))}}class xe{constructor(e){this.modalSelector=e}initUI(){0===jQuery(".order-total-section .total-loader").length&&jQuery(".order-total-section").append('<div class="total-loader" style="display: none;"><div class="spinner"></div></div>')}showTotalLoader(){jQuery(".order-total-section .total-loader").show(),jQuery(".total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value").css("opacity","0.5")}hideTotalLoader(){jQuery(".order-total-section .total-loader").hide(),jQuery(".total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value").css("opacity","1")}showCouponMessage(e,t){const s=jQuery(".coupon-message");s.text(e),s.removeClass("success error"),t&&s.addClass(t)}displayModal(){jQuery(this.modalSelector).css("display","block")}hideModal(){jQuery(this.modalSelector).hide()}setRequestLoader(){jQuery(".wvp-credit-fields, .saved-card-cvv").addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}removeRequestLoader(){jQuery(".wvp-credit-fields, .saved-card-cvv").removeClass("processing").unblock()}updateProductInfo(e,t){jQuery(".product-info").html(`\n <h3>${e}</h3>\n <p>Valor: ${t}</p>\n `)}}class Me{constructor(e,t){this.modalSelector=e,this.uiManager=t}initializeCreditCardHandling(){jQuery(".wvp-credit-fields-modal").hide(),jQuery('input[name="payment_method"]').on("change",(e=>{const t=jQuery(e.currentTarget);jQuery(".wvp-credit-fields-modal").slideUp(),"vindi-pagamentos-credit"!==t.val()||t.data("token")||(t.closest(".payment-method").find(".wvp-credit-fields-modal").slideDown(),this.onPaymentMethodChange(null))})),jQuery("#wvp-card-number").on("input",(()=>{this.handleCardBrand()}))}initializeCvvHandling(){jQuery(".saved-card-cvv").hide(),jQuery('input[name="payment_method"]').on("change",(e=>{const t=jQuery(e.currentTarget);jQuery(".saved-card-cvv").slideUp(),"vindi-pagamentos-credit"===t.val()&&t.data("token")&&(t.closest(".saved-card").find(".saved-card-cvv").slideDown(),this.onPaymentMethodChange(t.data("token")))})),jQuery(".saved-card-cvv-input").on("input",(function(){this.value=this.value.replace(/[^0-9]/g,"")}))}handleCardBrand(){const e=jQuery("#wvp-card-number");if(!e.length)return;const t=e.val().replace(/\s/g,"");if(t.length<6)return;let s=!1;[{code:16,name:"elo",regex:/^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/},{code:3,name:"visa",regex:/^4[0-9]{12}(?:[0-9]{3})?$/},{code:4,name:"mastercard",regex:/^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/},{code:5,name:"amex",regex:/^3[47][0-9]{13}$/},{code:25,name:"hipercard",regex:/^(606282|3841\d{2}|60(?!11)\d{2})\d{10}$/},{code:20,name:"hiper",regex:/^(637095|637599|637612|637609|637598)\d*$/}].forEach((e=>{e.regex.test(t)&&!s&&(s=!0,this.setCardBrand(e.name,e.code),this.onPaymentMethodChange(null))})),s||(this.setCardBrand("mono/generic",1),this.showInstallmentsError("Não foi possível reconhecer a bandeira do cartão."))}setCardBrand(e,t){const s=jQuery("#wvp-brand-icon"),n=jQuery("#wvp-card-brand");if(s.length){const t=s.attr("data-img");t&&(s.attr("src",s.attr("src").replace(t,e)),s.attr("data-img",e))}n.length&&n.val(t)}showInstallmentsError(e){const t=jQuery("#wvp-installments-error");t.length&&t.html(e).addClass("active")}resetInstallmentsError(){const e=jQuery("#wvp-installments-error");e.length&&e.html("").removeClass("active")}onPaymentMethodChange(e){}validateAndGetPaymentData(){const e=jQuery('input[name="payment_method"]:checked');if(!e.length)return{isValid:!1,message:"Por favor, selecione uma forma de pagamento."};const t=e.val(),s=e.data("token");let n={};if("vindi-pagamentos-credit"===t)if(s){const t=jQuery(`#saved_card_cvv_${s}`).val();if(!t)return{isValid:!1,message:"Por favor, informe o código CVV do cartão."};n={token_id:s,cvv:t,last4:e.data("last4"),expiry:e.data("expiry")}}else{const e=jQuery("#wvp-card-owner").val(),t=jQuery("#wvp-card-number").val(),s=jQuery("#wvp-card-date").val(),a=jQuery("#wvp-card-code").val(),i=jQuery("#wvp-card-brand").val(),r=jQuery("#wvp-card-installments").val()||"1";if(!(e&&t&&s&&a))return{isValid:!1,message:"Por favor, preencha todos os dados do cartão de crédito."};n={owner:e,number:t,date:s,code:a,brand:i,installments:r}}return{isValid:!0,data:{payment_method:t,card_data:n}}}}class Ie{constructor(){this.personType="1"}initializePersonTypeHandling(){jQuery("#billing-pf-fields").show(),jQuery("#billing-pj-fields").hide(),jQuery("#billing-pf-fields input").prop("required",!0),jQuery("#billing-pj-fields input").prop("required",!1),this.initializeCpfMask(),jQuery('input[name="billing_persontype"]').on("change",(e=>{const t="1"===e.target.value;this.personType=e.target.value,jQuery("#billing-pf-fields").toggle(t),jQuery("#billing-pj-fields").toggle(!t),jQuery("#billing-pf-fields input").prop("required",t),jQuery("#billing-pj-fields input").prop("required",!t),t?this.initializeCpfMask():this.initializeCnpjMask()}))}initializeCpfMask(){const e=document.querySelector('input[name="billing_cpf"]');e&&"function"==typeof IMask&&IMask(e,{mask:"000.000.000-00"})}initializeCnpjMask(){const e=document.querySelector('input[name="billing_cnpj"]');e&&"function"==typeof IMask&&IMask(e,{mask:"00.000.000/0000-00"})}validateAndGetBillingData(){const e=jQuery('input[name="billing_persontype"]:checked').val()||"1",t={persontype:e};let s=!0;const n="1"===e?"#billing-pf-fields":"#billing-pj-fields";return jQuery(`${n} .missing-data input`).each((function(){const e=jQuery(this),n=e.attr("name").replace("billing_",""),a=e.val().trim();a?(e.removeClass("error"),t[n]=a):(e.addClass("error"),s=!1)})),jQuery(`${n} .has-data .field-display`).each((function(){const e=jQuery(this),s=e.find("strong").text();let n=e.text();Object.keys(vindiOneClick.required_fields).forEach((e=>{const t=vindiOneClick.required_fields[e]+":";n=n.replace(t,"").trim()}));const a=Object.keys(vindiOneClick.required_fields).find((e=>vindiOneClick.required_fields[e]===s.replace(":","")));a&&(t[a]=n)})),{isValid:s,data:t,message:s?"":"Por favor, preencha todos os campos obrigatórios."}}}class Be{constructor(e,t){this.modalSelector=e,this.uiManager=t,this.currentXhr=null}initializeInstallmentsHandling(){jQuery('input[name="payment_method"]').on("change",(e=>{const t=jQuery(e.currentTarget);"vindi-pagamentos-credit"===t.val()&&t.data("token")&&this.getInstallments(t.data("token"))}))}getInstallments(e=null,t=null){this.currentXhr&&this.currentXhr.abort();let s=t;if(!s){const e=jQuery(".total-value");if(e.length){const t=e.text().replace(/[^\d,.-]/g,"").replace(",",".");s=parseFloat(t)}if(!s||isNaN(s)){s=parseFloat(jQuery("#wvp-cart-total-price").val()||0)*parseInt(jQuery("#vindi-one-click-quantity").val()||1)}}const n=jQuery("#wvp-card-nonce").val();this.resetInstallmentsError(),this.uiManager.setRequestLoader();const a={price:s.toFixed(2),_wpnonce:n||vindiOneClick.nonce,security:"undefined"!=typeof wc_checkout_params?wc_checkout_params.update_order_review_nonce:vindiOneClick.nonce};e?a.token=e:jQuery("#wvp-card-brand").length&&jQuery("#wvp-card-brand").val()&&(a.brand=jQuery("#wvp-card-brand").val());const i="undefined"!=typeof wc_checkout_params?wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"):vindiOneClick.ajax_url+"?wc-ajax=checkout_installments";this.currentXhr=jQuery.ajax({url:i,method:"POST",contentType:"application/json",data:JSON.stringify(a),success:t=>{if(t.success){const s=t.data.installments;let n;n=e?`.saved-card:has(input[data-token="${e}"]) select[name="wvp-installments"]`:"#wvp-card-installments";const a=jQuery(n);t.data.message&&this.showInstallmentsMessage(t.data.message),a.length?a.each((function(){const e=jQuery(this);e.empty(),Object.entries(s).forEach((([t,s])=>{e.append(jQuery("<option>",{value:t,text:s}))}))})):console.warn("Seletor de parcelas não encontrado:",n)}else this.showInstallmentsError(t.data.message||"Erro ao carregar parcelas")},error:(e,t,s)=>{"abort"!==t&&this.showInstallmentsError("Não foi possível carregar as parcelas. Tente novamente.")},complete:()=>{this.uiManager.removeRequestLoader()}})}showInstallmentsMessage(e){const t=jQuery("#wvp-installments-error");t.length&&e&&t.html(e).addClass("active")}showInstallmentsError(e){const t=jQuery("#wvp-installments-error");t.length&&t.html(e).addClass("active")}resetInstallmentsError(){const e=jQuery("#wvp-installments-error");e.length&&e.html("").removeClass("active")}}class Te{constructor(e,t,s){this.mainController=e,this.modalSelector=t,this.uiManager=s,this.appliedCoupons=[]}initializeCouponHandling(){0===jQuery(".applied-coupons-container").length&&jQuery(".coupon-form").after('<div class="applied-coupons-container"></div>'),jQuery("#vindi-apply-coupon").on("click",(()=>{this.applyCoupon()})),jQuery("#vindi-coupon-code").on("keypress",(e=>{13===e.which&&(e.preventDefault(),this.applyCoupon())}))}applyCoupon(){const e=jQuery("#vindi-coupon-code").val().trim();if(!e)return void this.uiManager.showCouponMessage("Por favor, informe um código de cupom.","error");const t=jQuery("#vindi-apply-coupon"),s=jQuery(".coupon-loader");t.prop("disabled",!0),s.show(),this.uiManager.showCouponMessage("",""),this.uiManager.showTotalLoader();const n=this.mainController.getProductInfo(),a=jQuery('input[name="payment_method"]:checked').val()||"";jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"validate_one_click_coupon",nonce:vindiOneClick.nonce,product_id:n.productId,quantity:n.quantity,payment_method:a,coupon_code:e,existing_coupons:[]},success:t=>{t.success?(this.uiManager.showCouponMessage(t.data.messages.coupon_applied||"Cupom aplicado com sucesso!","success"),t.data.coupon_codes?this.appliedCoupons=t.data.coupon_codes:t.data.new_coupon&&(this.appliedCoupons=[e]),jQuery("#vindi-coupon-code").val(""),this.updateAppliedCouponsDisplay(t.data.applied_coupons||[]),this.mainController.onCouponApplied(t.data)):(this.uiManager.showCouponMessage(t.data||"Cupom inválido ou não aplicável.","error"),this.uiManager.hideTotalLoader())},error:e=>{this.uiManager.showCouponMessage("Erro","error"),this.uiManager.hideTotalLoader()},complete:()=>{t.prop("disabled",!1),s.hide()}})}removeCoupon(e){this.appliedCoupons=[],this.uiManager.showCouponMessage("Cupom removido.","success"),jQuery(".applied-coupons-container").empty(),jQuery(".coupon-discount-row").hide(),jQuery(".coupon-discount-value").html(""),jQuery(".total-discount-row").hide(),jQuery(".total-discount-value").html("");const t=this.mainController.getProductInfo(),s=jQuery('input[name="payment_method"]:checked').val()||"";this.uiManager.showTotalLoader();const n=jQuery(".subtotal-value").text();jQuery(".total-value").html(n),jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"calculate_one_click_discount",nonce:vindiOneClick.nonce,product_id:t.productId,payment_method:s,quantity:t.quantity,coupon_codes:[]},success:e=>{e.success&&(this.mainController.onCouponRemoved(e.data),jQuery(".applied-coupons-container").empty())},error:()=>{this.uiManager.showCouponMessage("Erro","error"),this.uiManager.hideTotalLoader()},complete:()=>{this.uiManager.hideTotalLoader()}})}updateAppliedCouponsDisplay(e){const t=jQuery(".applied-coupons-container");if(t.empty(),e.length){const s=jQuery("<h4>").text("Cupom aplicado:");t.append(s);const n=jQuery('<ul class="applied-coupons-list">'),a=e[0],i=jQuery('<li class="applied-coupon-item">'),r=jQuery('<span class="coupon-code">').text(a.code),o=jQuery('<button type="button" class="remove-coupon">').text("×");o.on("click",(()=>this.removeCoupon(a.code))),i.append(r),a.description&&a.description!==a.code&&i.append(" - ",jQuery('<span class="coupon-description">').text(a.description)),i.append(o),n.append(i),t.append(n)}}getAppliedCoupons(){return this.appliedCoupons}}class De{constructor(e,t,s){this.modalSelector=e,this.mainController=t,this.uiManager=s}initializeDiscountHandling(){jQuery('input[name="payment_method"]').on("change",(e=>{this.uiManager.showTotalLoader(),this.updateOrderTotal(jQuery(e.currentTarget).val())}))}initializeQuantityHandling(){const e=()=>{const e=jQuery('input[name="payment_method"]:checked').val()||"";e&&(this.uiManager.showTotalLoader(),this.updateOrderTotal(e),setTimeout((()=>{"vindi-pagamentos-credit"===e&&this.mainController.updateInstallmentsForSelectedPayment()}),300))};jQuery(".quantity-decrease").on("click",(()=>{const t=jQuery("#vindi-one-click-quantity"),s=parseInt(t.val());s>1&&(t.val(s-1),e())})),jQuery(".quantity-increase").on("click",(()=>{const t=jQuery("#vindi-one-click-quantity"),s=parseInt(t.val());s<parseInt(t.attr("max"))&&(t.val(s+1),e())})),jQuery("#vindi-one-click-quantity").on("change",e)}updateOrderTotal(e){const t=this.mainController.getProductInfo(),s=this.mainController.getAppliedCoupons();this.uiManager.showTotalLoader(),jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"calculate_one_click_discount",nonce:vindiOneClick.nonce,product_id:t.productId,payment_method:e,quantity:t.quantity,coupon_codes:s},success:e=>{e.success&&this.updateOrderTotals(e.data)},complete:()=>{this.uiManager.hideTotalLoader()}})}updateOrderTotals(e){jQuery(".payment-discount-row").hide(),jQuery(".payment-discount-value").html(""),jQuery(".coupon-discount-row").hide(),jQuery(".coupon-discount-value").html(""),jQuery(".total-discount-row").hide(),jQuery(".total-discount-value").html(""),jQuery(".subtotal-value").html(e.subtotal),jQuery(".total-value").html(e.total),void 0!==e.total_raw&&parseFloat(e.total_raw)<=0?(this.uiManager.showCouponMessage(e.messages.coupon_exceeds_total,"error"),jQuery("#vindi-process-quick-buy").prop("disabled",!0)):jQuery("#vindi-process-quick-buy").prop("disabled",!1),e.payment_discount&&parseFloat(e.payment_discount)>0&&(jQuery(".payment-discount-row").show(),jQuery(".payment-discount-value").html(e.payment_discount_formated));const t=this.mainController.getAppliedCoupons();t&&t.length>0&&e.coupon_discount&&parseFloat(e.coupon_discount)>0&&(jQuery(".coupon-discount-row").show(),jQuery(".coupon-label").html("Cupom de Desconto:"),jQuery(".coupon-discount-value").html(e.coupon_discount_formated)),e.has_discount&&e.discount&&parseFloat(e.has_discount)>0&&(jQuery(".total-discount-row").show(),jQuery(".total-discount-value").html(e.discount));const s=e.total,n=jQuery(".total-value").data("previous-value")||"";jQuery(".total-value").data("previous-value",s);if(n!==s||e.update_installments){"vindi-pagamentos-credit"===(jQuery('input[name="payment_method"]:checked').val()||"")&&setTimeout((()=>this.mainController.updateInstallmentsForSelectedPayment()),300)}this.uiManager.hideTotalLoader()}}class je{constructor(){this.modalSelector="#vindi-one-click-modal",this.modal=jQuery(this.modalSelector),0!==this.modal.length&&(this.buyButton=jQuery(".vindi-one-click-buy"),this.closeBtn=jQuery(".vindi-modal-close"),this.processButton=jQuery("#vindi-process-quick-buy"),this.uiManager=new xe(this.modalSelector),this.formHandler=new Ie,this.paymentHandler=new Me(this.modalSelector,this.uiManager),this.installmentsManager=new Be(this.modalSelector,this.uiManager),this.couponManager=new Te(this,this.modalSelector,this.uiManager),this.orderTotalCalculator=new De(this.modalSelector,this,this.uiManager),this.paymentHandler.onPaymentMethodChange=e=>{this.installmentsManager.getInstallments(e)},this.init())}init(){this.bindEvents(),this.uiManager.initUI(),this.paymentHandler.initializeCreditCardHandling(),this.paymentHandler.initializeCvvHandling(),this.formHandler.initializePersonTypeHandling(),this.formHandler.initializeCpfMask(),this.installmentsManager.initializeInstallmentsHandling(),this.orderTotalCalculator.initializeDiscountHandling(),this.orderTotalCalculator.initializeQuantityHandling(),this.couponManager.initializeCouponHandling()}bindEvents(){this.buyButton.on("click",(e=>{this.handleBuyButtonClick(e)})),this.closeBtn.on("click",(()=>this.handleCloseModal())),this.processButton.on("click",(()=>this.handleProcessPurchase()))}handleBuyButtonClick(e){e.preventDefault();this.buyButton.data("product-id");const t=jQuery("h1.product_title").text(),s=jQuery(".price .amount").text();this.uiManager.displayModal(),this.uiManager.updateProductInfo(t,s)}handleCloseModal(){this.uiManager.hideModal()}handleProcessPurchase(){const e=this.processButton,t=document.querySelector(".loading-spinner");e.prop("disabled",!0),t.style.display="block";const s=this.formHandler.validateAndGetBillingData();if(!s.isValid)return alert(s.message),e.prop("disabled",!1),void(t.style.display="none");const n=this.paymentHandler.validateAndGetPaymentData();if(!n.isValid)return alert(n.message),e.prop("disabled",!1),void(t.style.display="none");const a=this.getProductInfo();jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"process_one_click_buy",nonce:vindiOneClick.nonce,product_id:a.productId,quantity:a.quantity,payment_method:n.data.payment_method,card_data:n.data.card_data,billing_data:s.data,coupon_codes:this.getAppliedCoupons()},success:s=>{s.success?window.location.href=s.data.redirect:(alert(s.data||"Erro ao processar pagamento"),e.prop("disabled",!1),t.style.display="none")},error:()=>{alert("Erro ao processar pagamento. Por favor, tente novamente."),e.prop("disabled",!1),t.style.display="none"}})}getProductInfo(){return{productId:this.buyButton.data("product-id"),quantity:parseInt(jQuery("#vindi-one-click-quantity").val()||1)}}getAppliedCoupons(){return this.couponManager.getAppliedCoupons()}updateInstallmentsForSelectedPayment(){const e=jQuery('input[name="payment_method"]:checked');if(e.length&&"vindi-pagamentos-credit"===e.val()){const t=e.data("token");if(t)this.installmentsManager.getInstallments(t);else{jQuery("#wvp-card-brand").val()&&this.installmentsManager.getInstallments(null)}}}onCouponApplied(e){this.orderTotalCalculator.updateOrderTotals(e)}onCouponRemoved(e){this.orderTotalCalculator.updateOrderTotals(e,!0)}}class Ve{constructor(e={}){if(this.settings={ajaxUrl:e.ajaxUrl||("undefined"!=typeof ajaxurl?ajaxurl:"/wp-admin/admin-ajax.php"),nonce:e.nonce||"",...e},!this.settings.nonce){const e=document.querySelector('input[name="vindi-pagamento_nonce"]');e&&(this.settings.nonce=e.value)}this.init()}init(){this.initElements(),this.firstMethodSelect&&this.secondMethodSelect&&(this.setupEventListeners(),this.initializePaymentFields()),this.prepareFormSubmission(),this.initPaymentMethodListener("first"),this.initPaymentMethodListener("second")}initElements(){this.firstMethodSelect=document.getElementById("first_payment_method"),this.secondMethodSelect=document.getElementById("second_payment_method"),this.firstAmountInput=document.getElementById("first_payment_amount"),this.secondAmountInput=document.getElementById("second_payment_amount"),this.cartTotalInput=document.getElementById("cart_total"),this.errorDiv=document.getElementById("first-payment-amount-error")}setupEventListeners(){this.firstMethodSelect.addEventListener("change",(()=>{this.firstMethodValue=this.firstMethodSelect.value,this.updateSecondMethodOptions(this.firstMethodSelect.value),this.updatePaymentMethodFields(this.firstMethodSelect.value,"first")})),this.secondMethodSelect.addEventListener("change",(()=>{this.secondMethodValue=this.secondMethodSelect.value,this.updateFirstMethodOptions(this.secondMethodSelect.value),this.updatePaymentMethodFields(this.secondMethodSelect.value,"second")})),this.firstAmountInput&&this.secondAmountInput&&this.cartTotalInput&&this.firstAmountInput.addEventListener("input",(()=>{this.updateSecondAmount()})),document.addEventListener("updated_checkout",(()=>{setTimeout((()=>{const e=this.firstMethodSelect?.value,t=this.secondMethodSelect?.value;"credit_card"===e&&this.setupCreditCardFunctionality("first"),"credit_card"===t&&this.setupCreditCardFunctionality("second")}),500)})),document.addEventListener("input",(e=>{if(e.target&&"first_wvp-card-number"===e.target.id)try{this.handleCardBrandDetection(e.target,"first")}catch(e){console.warn("Erro ao detectar bandeira do primeiro cartão:",e)}if(e.target&&"second_wvp-card-number"===e.target.id)try{this.handleCardBrandDetection(e.target,"second")}catch(e){console.warn("Erro ao detectar bandeira do segundo cartão:",e)}}))}updateSecondMethodOptions(e){jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_get_compatible_methods"),type:"POST",data:{selected_method:e,target_field:"second",security:this.settings.nonce},success:e=>{if(e.success&&e.data&&(this.secondMethodSelect.innerHTML="",Object.keys(e.data).forEach((t=>{const s=document.createElement("option");s.value=t,s.textContent=e.data[t],this.secondMethodSelect.appendChild(s)})),this.secondMethodSelect.options.length>0)){Array.from(this.secondMethodSelect.options).some((e=>e.value===this.secondMethodValue))?this.secondMethodSelect.value=this.secondMethodValue:this.secondMethodSelect.options.length>0&&(this.secondMethodSelect.selectedIndex=0),this.updatePaymentMethodFields(this.secondMethodSelect.value,"second")}}})}updateFirstMethodOptions(e){jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_get_compatible_methods"),type:"POST",data:{selected_method:e,target_field:"first",security:this.settings.nonce},success:e=>{if(e.success&&e.data&&(this.firstMethodSelect.innerHTML="",Object.keys(e.data).forEach((t=>{const s=document.createElement("option");s.value=t,s.textContent=e.data[t],this.firstMethodSelect.appendChild(s)})),this.firstMethodSelect.options.length>0)){Array.from(this.firstMethodSelect.options).some((e=>e.value===this.firstMethodValue))?this.firstMethodSelect.value=this.firstMethodValue:this.firstMethodSelect.options.length>0&&(this.secondMethodSelect.selectedIndex=0),this.updatePaymentMethodFields(this.firstMethodSelect.value,"first")}}})}initializePaymentFields(){if(this.firstMethodSelect&&this.firstMethodSelect.value&&(this.updatePaymentMethodFields(this.firstMethodSelect.value,"first"),this.updateSecondMethodOptions(this.firstMethodSelect.value)),this.secondMethodSelect&&this.secondMethodSelect.value)this.updatePaymentMethodFields(this.secondMethodSelect.value,"second");else if(this.secondMethodSelect){const e=this.secondMethodSelect.options;e.length>0&&(this.secondMethodSelect.value=e[0].value,this.updatePaymentMethodFields(e[0].value,"second"))}this.updateSecondAmount()}updatePaymentMethodFields(e,t){if(!e)return;const s="first"===t?"payment-method-":"second-payment-method-";document.querySelectorAll(`.${t}-payment-method .payment-method-content`).forEach((e=>{e.style.display="none"}));const n=document.getElementById(`${s}${e}`);n?n.style.display="block":this.loadPaymentMethodFields(e,t),"credit_card"===e&&this.setupCreditCardFunctionality(t)}setupCreditCardFunctionality(e){if("first"===e){this.setCardNumberMask(e),this.setCardOwnerMask(e),this.setCardCodeMask(e),this.setCardDateMask(e),this.manageTokenSelect(e);const t=document.getElementById("first_wvp-card-number");t&&t.value&&this.detectCardBrand(t,"first")}else{this.setCardNumberMask(e),this.setCardOwnerMask(e),this.setCardDateMask(e),this.setCardCodeMask(e),this.manageTokenSelect(e);const t=document.getElementById("second_wvp-card-number");t&&t.value&&this.detectCardBrand(t,"second")}}loadPaymentMethodFields(e,t){const s="first"===t?this.firstAmountInput:this.secondAmountInput,n=s?s.value:"0,00",a=document.getElementById(`${t}-payment-method-fields`);a&&(a.innerHTML='<div class="loading">Carregando...</div>',jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_load_payment_method_fields"),type:"POST",data:{method:e,prefix:t+"_",amount:this.parseMoneyValue(n).toString(),security:this.settings.nonce},success:s=>{if(s.success&&s.data){const n="first"===t?"payment-method-"+e:"second-payment-method-"+e,i=document.getElementById(n);i&&i.remove();const r=document.createElement("div");r.id=n,r.className="payment-method-content "+t+"-payment-"+e,r.innerHTML=s.data,a.innerHTML="",a.appendChild(r),r.style.display="block","credit_card"===e&&(this.initCreditCardMasks(t),this.setupCreditCardFunctionality(t),this.initPaymentMethodListener(t))}else a.innerHTML="<p>Não foi possível carregar os campos para "+e+".</p>"},error:(t,s,n)=>{console.error(`Erro ao carregar campos para ${e}:`,n),a.innerHTML="<p>Erro ao carregar campos do método de pagamento.</p>"}}))}updateSecondAmount(){if(!this.firstAmountInput||!this.secondAmountInput||!this.cartTotalInput)return;let e=this.parseMoneyValue(this.firstAmountInput.value);const t=parseFloat(this.cartTotalInput.value)||0;e<=0||e>=t?(this.errorDiv&&(this.errorDiv.style.display="block"),this.firstAmountInput.classList.add("error")):(this.errorDiv&&(this.errorDiv.style.display="none"),this.firstAmountInput.classList.remove("error"));const s=Math.max(0,t-e);this.secondAmountInput.value=this.formatMoneyDisplay(s);const n=document.getElementById("second_payment_amount_original");n&&(n.value=s.toFixed(2));const a=document.getElementById("vindi_first_amount_for_installments"),i=document.getElementById("vindi_second_amount_for_installments");a&&(a.value=e.toFixed(2)),i&&(i.value=s.toFixed(2)),setTimeout((()=>{const e=this.firstMethodSelect.value,t=this.secondMethodSelect.value;if("credit_card"===e)try{this.getCardInstallments()}catch(e){console.warn("Erro ao atualizar parcelas do primeiro método:",e)}if("credit_card"===t)try{this.getSecondMethodInstallments()}catch(e){console.warn("Erro ao atualizar parcelas do segundo método:",e)}}),300)}formatMoneyDisplay(e){return e.toFixed(2).replace(".",",")}parseMoneyValue(e){return e&&parseFloat(e.toString().replace(/[^\d,.-]/g,"").replace(",","."))||0}initCreditCardMasks(e=""){const t=e?e+"_":"",s=document.getElementById(t+"wvp-card-number");s&&s.addEventListener("input",(function(){let e=this.value.replace(/\D/g,""),t="";for(let s=0;s<e.length;s++)s>0&&s%4==0&&(t+=" "),t+=e[s];this.value=t.substring(0,19)}));const n=document.getElementById(t+"wvp-card-date");n&&n.addEventListener("input",(function(){let e=this.value.replace(/\D/g,""),t="";t=e.length>2?e.substring(0,2)+"/"+e.substring(2,4):e,this.value=t.substring(0,5)}));const a=document.getElementById(t+"wvp-card-code");a&&a.addEventListener("input",(function(){let e=this.value.replace(/\D/g,"");this.value=e.substring(0,4)}))}prepareFormSubmission(){const e=document.querySelector("form.checkout");if(!e)return;const t={credit_card:"vindi-pagamentos-credit",pix:"vindi-pagamentos-pix",bolepix:"vindi-pagamentos-bolepix"};e.addEventListener("submit",(s=>{const n=document.querySelector('input[name="payment_method"]:checked');if(!n||"vindi-pagamentos-multi-payment"!==n.value)return;this.initElements();const a=this.firstMethodSelect?this.firstMethodSelect.value:"",i=this.secondMethodSelect?this.secondMethodSelect.value:"";if("credit_card"===a&&"credit_card"===i){const e=document.getElementById("first_wvp-card-number"),t=document.getElementById("second_wvp-card-number");if(e&&t){const n=e.value.replace(/\s/g,"");if(n===t.value.replace(/\s/g,"")&&""!==n)return s.preventDefault(),alert(Ee("Você não pode usar o mesmo cartão para ambos os métodos de pagamento.","vindi-pagamentos")),!1}}this.removeExistingInputs(e,"multi_payment");const r=t[a]||a,o=t[i]||i,u=this.firstAmountInput?this.firstAmountInput.value:"",l=this.secondAmountInput?this.secondAmountInput.value:"";this.addHiddenInput(e,"multi_payment[first_method]",r),this.addHiddenInput(e,"multi_payment[second_method]",o),this.addHiddenInput(e,"multi_payment[first_amount]",u),this.addHiddenInput(e,"multi_payment[second_amount]",l);const d=this.getPaymentMethodId(a);this.addHiddenInput(e,"payment[payment_method_id]",d),"credit_card"===a&&this.collectFirstCreditCardData(e),"credit_card"===i&&this.collectSecondCreditCardData(e)}))}collectFirstCreditCardData(e){const t=document.getElementById("first_wvp-card-owner"),s=document.getElementById("first_wvp-card-number"),n=document.getElementById("first_wvp-card-date"),a=document.getElementById("first_wvp-card-code"),i=document.getElementById("first_wvp-card-installments"),r=document.getElementById("first_wvp-card-brand");if(s&&this.addHiddenInput(e,"payment[card_number]",s.value.replace(/\s/g,"")),t&&this.addHiddenInput(e,"payment[card_name]",t.value),a&&this.addHiddenInput(e,"payment[card_cvv]",a.value),i&&this.addHiddenInput(e,"payment[split]",i.value),r&&this.addHiddenInput(e,"payment[payment_method_id]",r.value||"1"),n){const t=n.value.split("/");if(2===t.length){const s=t[0],a="20"+t[1];this.addHiddenInput(e,"payment[card_expiration_date]",n.value),this.addHiddenInput(e,"payment[card_expdate_month]",s),this.addHiddenInput(e,"payment[card_expdate_year]",a)}}}collectSecondCreditCardData(e){const t=document.getElementById("second_wvp-card-owner"),s=document.getElementById("second_wvp-card-number"),n=document.getElementById("second_wvp-card-date"),a=document.getElementById("second_wvp-card-code"),i=document.getElementById("second_wvp-card-installments"),r=document.getElementById("second_wvp-card-brand");if(s&&this.addHiddenInput(e,"second_payment[card_number]",s.value.replace(/\s/g,"")),t&&this.addHiddenInput(e,"second_payment[card_name]",t.value),a&&this.addHiddenInput(e,"second_payment[card_cvv]",a.value),i&&this.addHiddenInput(e,"second_payment[split]",i.value),r&&this.addHiddenInput(e,"second_payment[payment_method_id]",r.value||"1"),n){const t=n.value.split("/");if(2===t.length){const s=t[0],a="20"+t[1];this.addHiddenInput(e,"second_payment[card_expiration_date]",n.value),this.addHiddenInput(e,"second_payment[card_expdate_month]",s),this.addHiddenInput(e,"second_payment[card_expdate_year]",a)}}}removeExistingInputs(e,t){e.querySelectorAll(`input[name^="${t}["]`).forEach((e=>e.remove()))}getPaymentMethodId(e){return{pix:"27",credit_card:"1",bolepix:"28"}[e]||""}addHiddenInput(e,t,s){const n=e.querySelector(`input[name="${t}"]`);if(n)return void(n.value=s);let a=document.createElement("input");a.type="hidden",a.name=t,a.value=s,e.appendChild(a)}setCardBrand(e,t,s){const n="first"===s?"first_":"second_",a=document.getElementById(`${n}wvp-brand-icon`),i=document.getElementById(`${n}wvp-card-brand`);if(a){const t=a.getAttribute("data-img");if(t){const s=a.src.replace(t,e);a.src=s,a.setAttribute("data-img",e)}}i&&(i.value=t);const r=new CustomEvent("vindi_card_brand_changed",{detail:{prefix:s,name:e,code:t}});document.dispatchEvent(r),"mono/generic"!==e&&this.updateInstallmentsForBrand(s,t)}updateInstallmentsForBrand(e,t){if("first"===e)try{return void this.getCardInstallments(null,null,this.parseMoneyValue(this.firstAmountInput.value))}catch(e){console.warn("Erro ao chamar getCardInstallments:",e)}if("second"===e)try{return void this.getSecondMethodInstallments(null,null,this.parseMoneyValue(this.secondAmountInput.value))}catch(e){console.warn("Erro ao chamar getSecondMethodInstallments:",e)}}updateCompatibleMethods(e,t){const s="first"===t?this.firstMethodSelect:this.secondMethodSelect;if(!s)return;const n=s.value;jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_get_compatible_methods"),type:"POST",data:{selected_method:e,target_field:t,security:this.settings.nonce},success:e=>{if(e.success&&e.data){s.innerHTML="",Object.keys(e.data).forEach((t=>{const n=document.createElement("option");n.value=t,n.textContent=e.data[t],s.appendChild(n)}));Array.from(s.options).some((e=>e.value===n))?s.value=n:s.options.length>0&&(s.value=s.options[0].value,s.dispatchEvent(new Event("change")))}},error:(e,t,s)=>{console.error("Erro ao obter métodos compatíveis:",s)}})}setCardNumberMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-number`);s&&(s.classList.contains("wvp-block-field")||l(s,{mask:"0000 0000 0000 0000"}),this.detectCardBrand(s,e),s.addEventListener("input",(()=>{this.detectCardBrand(s,e)})))}setCardOwnerMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-owner`);if(s&&!s.classList.contains("wvp-block-field")){const e=l(s,{mask:/^[A-Za-z\s]*$/});s.addEventListener("input",(()=>{s.value=s.value.toUpperCase(),e.updateValue()}))}}setCardDateMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-date`);s&&!s.classList.contains("wvp-block-field")&&l(s,{mask:"00/00"})}setCardCodeMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-code`);s&&(s.classList.contains("wvp-block-field")||l(s,{mask:"0000"}),s.addEventListener("input",(()=>{this.setCodeBrand(s,e)})))}detectCardBrand(e,t){const s=e.value.replace(/\s/g,"");if(s.length<6)return;const n=this.getBrands();let a=null;return n.forEach((e=>{e.regex.test(s)&&!a&&(a=e)})),a?(this.setCardBrand(a.name,a.code,t),this.resetInstallmentsError("second"===t),s.length>=13&&("first"===t?this.getCardInstallments():this.getSecondMethodInstallments()),!0):(this.setCardBrand("mono/generic",1,t),this.showInstallmentsError("second"===t),!1)}showInstallmentsError(e=!1){const t=e?document.querySelector("#second_wvp-installments-error"):document.querySelector("#first_wvp-installments-error");t&&(t.innerText=Ee("Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.","vindi-pagamentos"),t.classList.add("active"))}resetInstallmentsError(e=!1){const t=e?document.querySelector("#second_wvp-installments-error"):document.querySelector("#first_wvp-installments-error");t&&(t.innerText="",t.classList.remove("active"))}getBrands(){return[{code:16,name:"elo",regex:/^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/},{code:3,name:"visa",regex:/^4[0-9]{12}(?:[0-9]{3})?$/},{code:4,name:"mastercard",regex:/^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/},{code:5,name:"amex",regex:/^3[47][0-9]{13}$/},{code:25,name:"hipercard",regex:/^(606282|3841\d{2}|60(?!11)\d{2})\d{10}$/},{code:20,name:"hiper",regex:/^(637095|637599|637612|637609|637598)\d*$/}]}setCodeBrand(e,t){const s="first"===t?"first_":"second_",n=document.querySelector(`#${s}wvp-cvv-icon`),a=e.length<3?"mono/cvv":"cvv";if(n){const e=n.getAttribute("data-img");e&&(n.src=n.src.replace(e,a),n.setAttribute("data-img",a))}}manageTokenSelect(e){jQuery("first"===e?'input[name="first_wc-vindi-pagamentos-credit-payment-token"]':'input[name="second_wc-vindi-pagamentos-credit-payment-token"]').on("change",(t=>{if(jQuery(t.target).is(":checked"))if("new"!==t.target.value)"first"===e?this.getCardInstallments(t.target.value):this.getSecondMethodInstallments(t.target.value);else{const t="first"===e?"#first_wvp-card-installments":"#second_wvp-card-installments",s=document.querySelector(t);if(s){const t=s.value;s.innerHTML="","first"===e?this.getCardInstallments(null,t):this.getSecondMethodInstallments(null,t)}}}))}getCardInstallments(e=null,t=null,s=null){const n="#first_wvp-card-installments",a="#first_wvp-installments-error";if(!document.querySelector(n))return;const i=document.querySelector("#first_wvp-card-brand"),r=document.querySelector("#first_wvp-card-nonce"),o=document.querySelector("#wvp-cart-total");if(!i)return;this.resetInstallmentsError(!1),jQuery("form.checkout").block({message:null,overlayCSS:{background:"#fff",opacity:.6}}),this.setRequestLoader(!1);const u=jQuery("#multi_payment_toggle").is(":checked")||"1"===jQuery("#vindi_multi_payment_active").val(),l={_wpnonce:r.value,security:wc_checkout_params.update_order_review_nonce};if(u){const e=jQuery("#first_payment_amount").val();l.price=e?e.replace(",","."):o.value}else l.price=o.value;l.brand=i.value,e&&(l.token=e);const d=e,c=jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"),method:"POST",contentType:"application/json",data:JSON.stringify(l),success:e=>{const s=document.querySelector(n);if(s.innerHTML="",e.success){const n=e.data.installments,i=document.querySelector(a);if(e.data.message&&i&&(i.textContent=e.data.message,i.classList.add("active")),s){!t&&s.value&&(t=s.value);const e={};s.innerHTML="";for(const t in n){const a=document.createElement("option");a.value=t,a.innerText=n[t],e[t]||(e[t]=!0,s.appendChild(a))}t&&s.querySelector(`option[value="${t}"]`)&&(s.value=t)}}},error:(e,t,s)=>{if("abort"!==t){const e=document.querySelector(a);if(e&&""===e.innerHTML){const t=document.createElement("span");t.innerText=s.message,e.appendChild(t),e.classList.add("active")}}},complete:()=>{jQuery(".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)").removeClass("processing").unblock(),jQuery("form.checkout").unblock()}});jQuery('input[name="wc-vindi-pagamentos-credit-payment-token"]').on("change",(e=>{jQuery(e.target).is(":checked")&&e.target.value!==d&&c.abort()}))}setRequestLoader(e=!1){jQuery(e?"#segundo-metodo-pagamento .wvp-credit-fields":".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)").addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}getSecondMethodInstallments(e=null,t=null,s=null){const n="#second_wvp-card-installments",a="#segundo-metodo-pagamento .wvp-credit-fields";if(!document.querySelector(n))return;const i=document.querySelector("#second_wvp-card-brand"),r=document.querySelector("#second_wvp-card-nonce");if(!i)return;const o=document.querySelector("#second_wvp-installments-error");o&&(o.innerText="",o.classList.remove("active")),jQuery("form.checkout").block({message:null,overlayCSS:{background:"#fff",opacity:.6}}),jQuery(a).addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}});let u=0;if(s)u=parseFloat(s.toString().replace(",","."));else{const e=document.querySelector("#second_payment_amount");if(!e||!e.value)return jQuery(a).removeClass("processing").unblock(),void jQuery("form.checkout").unblock();u=parseFloat(e.value.replace(",","."))}const l={_wpnonce:r.value,security:wc_checkout_params.update_order_review_nonce,price:u.toString(),brand:i.value,is_second_method:!0};e&&(l.token=e),jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"),method:"POST",contentType:"application/json",data:JSON.stringify(l),success:e=>{const s=document.querySelector(n);if(s.innerHTML="",e.success){const n=e.data.installments,a={},i=(Object.values(n)[0]||"").match(/R\$\s?([0-9.,]+)/);if(i&&i[1]){const e=parseFloat(i[1].replace(".","").replace(",","."));if(Math.abs(e-u)>.01){const t=u/e;Object.keys(n).forEach((e=>{const s=n[e],i=s.split("R$");if(i.length>=2){const n=i[1].trim().split(/\s|-|\(|>/)[0],r=(parseFloat(n.replace(".","").replace(",","."))*t).toFixed(2).replace(".",",");if(a[e]=s.replace(n,r),s.includes("(R$")){const n=s.match(/\(R\$\s?([0-9.,]+)/);if(n&&n[1]){const s=(parseFloat(n[1].replace(".","").replace(",","."))*t).toFixed(2).replace(".",",");a[e]=a[e].replace(n[1],s)}}}else a[e]=s}))}else Object.assign(a,n)}else Object.assign(a,n);s&&(!t&&s.value&&(t=s.value),Object.keys(a).forEach((e=>{const t=document.createElement("option");t.value=e,t.innerText=a[e],s.appendChild(t)})),t&&s.querySelector(`option[value="${t}"]`)&&(s.value=t))}},error:(e,t,s)=>{o&&(o.innerText="Erro ao calcular parcelas: "+s,o.classList.add("active"))},complete:()=>{jQuery(a).removeClass("processing").unblock(),jQuery("form.checkout").unblock()}})}initPaymentMethodListener(e){const t=`${e}_wc-vindi-pagamentos-credit-payment-token`,s=document.querySelectorAll(`input[name="${t}"]`),n=document.querySelector(`.${e}_wvp-credit-fields-hide`),a=document.querySelector(`.${e}_wvp-card-date-hide`);s.forEach((t=>{t.addEventListener("change",(()=>{const t=this.getSelectedPaymentMethod(e);t&&"new"!==t?(n&&(n.style.display="none"),a&&(a.style.display="none")):(n&&(n.style.display="block"),a&&(a.style.display="block"))}))}))}getSelectedPaymentMethod(e){const t=`${e}_wc-vindi-pagamentos-credit-payment-token`,s=document.querySelector(`input[name="${t}"]:checked`);return s?s.value:null}}var Pe;window.vindiMultiPaymentSettings=window.vindiMultiPaymentSettings||{ajaxUrl:"undefined"!=typeof ajaxurl?ajaxurl:"/wp-admin/admin-ajax.php",totalAmount:"0.00",currency:"BRL",currencySymbol:"R$"},(Pe=jQuery)(document).on("ready updated_checkout",(()=>{new Ae,new be,new we,new Se,new Fe,new je,new Ve})),Pe(document).on("add_checkout_block_fields",(()=>{new we,new Se}))})();1 (()=>{function e(e,t,s,n){Object.defineProperty(e,t,{get:s,set:n,enumerable:!0,configurable:!0})}function t(e){return"string"==typeof e||e instanceof String}function s(e){var t;return"object"==typeof e&&null!=e&&"Object"===(null==e||null==(t=e.constructor)?void 0:t.name)}function n(e,t){return Array.isArray(t)?n(e,((e,s)=>t.includes(s))):Object.entries(e).reduce(((e,s)=>{let[n,a]=s;return t(a,n)&&(e[n]=a),e}),{})}const a={NONE:"NONE",LEFT:"LEFT",FORCE_LEFT:"FORCE_LEFT",RIGHT:"RIGHT",FORCE_RIGHT:"FORCE_RIGHT"};function i(e){switch(e){case a.LEFT:return a.FORCE_LEFT;case a.RIGHT:return a.FORCE_RIGHT;default:return e}}function r(e){return e.replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1")}function o(e,t){if(t===e)return!0;const s=Array.isArray(t),n=Array.isArray(e);let a;if(s&&n){if(t.length!=e.length)return!1;for(a=0;a<t.length;a++)if(!o(t[a],e[a]))return!1;return!0}if(s!=n)return!1;if(t&&e&&"object"==typeof t&&"object"==typeof e){const s=t instanceof Date,n=e instanceof Date;if(s&&n)return t.getTime()==e.getTime();if(s!=n)return!1;const i=t instanceof RegExp,r=e instanceof RegExp;if(i&&r)return t.toString()==e.toString();if(i!=r)return!1;const u=Object.keys(t);for(a=0;a<u.length;a++)if(!Object.prototype.hasOwnProperty.call(e,u[a]))return!1;for(a=0;a<u.length;a++)if(!o(e[u[a]],t[u[a]]))return!1;return!0}return!(!t||!e||"function"!=typeof t||"function"!=typeof e)&&t.toString()===e.toString()}class u{constructor(e){for(Object.assign(this,e);this.value.slice(0,this.startChangePos)!==this.oldValue.slice(0,this.startChangePos);)--this.oldSelection.start}get startChangePos(){return Math.min(this.cursorPos,this.oldSelection.start)}get insertedCount(){return this.cursorPos-this.startChangePos}get inserted(){return this.value.substr(this.startChangePos,this.insertedCount)}get removedCount(){return Math.max(this.oldSelection.end-this.startChangePos||this.oldValue.length-this.value.length,0)}get removed(){return this.oldValue.substr(this.startChangePos,this.removedCount)}get head(){return this.value.substring(0,this.startChangePos)}get tail(){return this.value.substring(this.startChangePos+this.insertedCount)}get removeDirection(){return!this.removedCount||this.insertedCount?a.NONE:this.oldSelection.end!==this.cursorPos&&this.oldSelection.start!==this.cursorPos||this.oldSelection.end!==this.oldSelection.start?a.LEFT:a.RIGHT}}function l(e,t){return new l.InputMask(e,t)}function d(e){if(null==e)throw new Error("mask property should be defined");return e instanceof RegExp?l.MaskedRegExp:t(e)?l.MaskedPattern:e===Date?l.MaskedDate:e===Number?l.MaskedNumber:Array.isArray(e)||e===Array?l.MaskedDynamic:l.Masked&&e.prototype instanceof l.Masked?e:l.Masked&&e instanceof l.Masked?e.constructor:e instanceof Function?l.MaskedFunction:(console.warn("Mask not found for mask",e),l.Masked)}function c(e){if(!e)throw new Error("Options in not defined");if(l.Masked){if(e.prototype instanceof l.Masked)return{mask:e};const{mask:t,...a}=e instanceof l.Masked?{mask:e}:s(e)&&e.mask instanceof l.Masked?e:{};if(t){const e=t.mask;return{...n(t,((e,t)=>!t.startsWith("_"))),mask:t.constructor,_mask:e,...a}}}return s(e)?{...e}:{mask:e}}function h(e){if(l.Masked&&e instanceof l.Masked)return e;const t=c(e),s=d(t.mask);if(!s)throw new Error("Masked class is not found for provided mask, appropriate module needs to be imported manually before creating mask.");return t.mask===s&&delete t.mask,t._mask&&(t.mask=t._mask,delete t._mask),new s(t)}l.createMask=h;class p{get selectionStart(){let e;try{e=this._unsafeSelectionStart}catch{}return null!=e?e:this.value.length}get selectionEnd(){let e;try{e=this._unsafeSelectionEnd}catch{}return null!=e?e:this.value.length}select(e,t){if(null!=e&&null!=t&&(e!==this.selectionStart||t!==this.selectionEnd))try{this._unsafeSelect(e,t)}catch{}}get isActive(){return!1}}l.MaskElement=p;class m extends p{constructor(e){super(),this.input=e,this._handlers={}}get rootElement(){var e,t,s;return null!=(e=null==(t=(s=this.input).getRootNode)?void 0:t.call(s))?e:document}get isActive(){return this.input===this.rootElement.activeElement}bindEvents(e){Object.keys(e).forEach((t=>this._toggleEventHandler(m.EVENTS_MAP[t],e[t])))}unbindEvents(){Object.keys(this._handlers).forEach((e=>this._toggleEventHandler(e)))}_toggleEventHandler(e,t){this._handlers[e]&&(this.input.removeEventListener(e,this._handlers[e]),delete this._handlers[e]),t&&(this.input.addEventListener(e,t),this._handlers[e]=t)}}m.EVENTS_MAP={selectionChange:"keydown",input:"input",drop:"drop",click:"click",focus:"focus",commit:"blur"},l.HTMLMaskElement=m;class g extends m{constructor(e){super(e),this.input=e,this._handlers={}}get _unsafeSelectionStart(){return null!=this.input.selectionStart?this.input.selectionStart:this.value.length}get _unsafeSelectionEnd(){return this.input.selectionEnd}_unsafeSelect(e,t){this.input.setSelectionRange(e,t)}get value(){return this.input.value}set value(e){this.input.value=e}}l.HTMLMaskElement=m;class v extends m{get _unsafeSelectionStart(){const e=this.rootElement,t=e.getSelection&&e.getSelection(),s=t&&t.anchorOffset,n=t&&t.focusOffset;return null==n||null==s||s<n?s:n}get _unsafeSelectionEnd(){const e=this.rootElement,t=e.getSelection&&e.getSelection(),s=t&&t.anchorOffset,n=t&&t.focusOffset;return null==n||null==s||s>n?s:n}_unsafeSelect(e,t){if(!this.rootElement.createRange)return;const s=this.rootElement.createRange();s.setStart(this.input.firstChild||this.input,e),s.setEnd(this.input.lastChild||this.input,t);const n=this.rootElement,a=n.getSelection&&n.getSelection();a&&(a.removeAllRanges(),a.addRange(s))}get value(){return this.input.textContent||""}set value(e){this.input.textContent=e}}l.HTMLContenteditableMaskElement=v;l.InputMask=class{constructor(e,t){this.el=e instanceof p?e:e.isContentEditable&&"INPUT"!==e.tagName&&"TEXTAREA"!==e.tagName?new v(e):new g(e),this.masked=h(t),this._listeners={},this._value="",this._unmaskedValue="",this._saveSelection=this._saveSelection.bind(this),this._onInput=this._onInput.bind(this),this._onChange=this._onChange.bind(this),this._onDrop=this._onDrop.bind(this),this._onFocus=this._onFocus.bind(this),this._onClick=this._onClick.bind(this),this.alignCursor=this.alignCursor.bind(this),this.alignCursorFriendly=this.alignCursorFriendly.bind(this),this._bindEvents(),this.updateValue(),this._onChange()}maskEquals(e){var t;return null==e||(null==(t=this.masked)?void 0:t.maskEquals(e))}get mask(){return this.masked.mask}set mask(e){if(this.maskEquals(e))return;if(!(e instanceof l.Masked)&&this.masked.constructor===d(e))return void this.masked.updateOptions({mask:e});const t=e instanceof l.Masked?e:h({mask:e});t.unmaskedValue=this.masked.unmaskedValue,this.masked=t}get value(){return this._value}set value(e){this.value!==e&&(this.masked.value=e,this.updateControl(),this.alignCursor())}get unmaskedValue(){return this._unmaskedValue}set unmaskedValue(e){this.unmaskedValue!==e&&(this.masked.unmaskedValue=e,this.updateControl(),this.alignCursor())}get typedValue(){return this.masked.typedValue}set typedValue(e){this.masked.typedValueEquals(e)||(this.masked.typedValue=e,this.updateControl(),this.alignCursor())}get displayValue(){return this.masked.displayValue}_bindEvents(){this.el.bindEvents({selectionChange:this._saveSelection,input:this._onInput,drop:this._onDrop,click:this._onClick,focus:this._onFocus,commit:this._onChange})}_unbindEvents(){this.el&&this.el.unbindEvents()}_fireEvent(e,t){const s=this._listeners[e];s&&s.forEach((e=>e(t)))}get selectionStart(){return this._cursorChanging?this._changingCursorPos:this.el.selectionStart}get cursorPos(){return this._cursorChanging?this._changingCursorPos:this.el.selectionEnd}set cursorPos(e){this.el&&this.el.isActive&&(this.el.select(e,e),this._saveSelection())}_saveSelection(){this.displayValue!==this.el.value&&console.warn("Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly."),this._selection={start:this.selectionStart,end:this.cursorPos}}updateValue(){this.masked.value=this.el.value,this._value=this.masked.value}updateControl(){const e=this.masked.unmaskedValue,t=this.masked.value,s=this.displayValue,n=this.unmaskedValue!==e||this.value!==t;this._unmaskedValue=e,this._value=t,this.el.value!==s&&(this.el.value=s),n&&this._fireChangeEvents()}updateOptions(e){const{mask:t,...s}=e,n=!this.maskEquals(t),a=!o(this.masked,s);n&&(this.mask=t),a&&this.masked.updateOptions(s),(n||a)&&this.updateControl()}updateCursor(e){null!=e&&(this.cursorPos=e,this._delayUpdateCursor(e))}_delayUpdateCursor(e){this._abortUpdateCursor(),this._changingCursorPos=e,this._cursorChanging=setTimeout((()=>{this.el&&(this.cursorPos=this._changingCursorPos,this._abortUpdateCursor())}),10)}_fireChangeEvents(){this._fireEvent("accept",this._inputEvent),this.masked.isComplete&&this._fireEvent("complete",this._inputEvent)}_abortUpdateCursor(){this._cursorChanging&&(clearTimeout(this._cursorChanging),delete this._cursorChanging)}alignCursor(){this.cursorPos=this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos,a.LEFT))}alignCursorFriendly(){this.selectionStart===this.cursorPos&&this.alignCursor()}on(e,t){return this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t),this}off(e,t){if(!this._listeners[e])return this;if(!t)return delete this._listeners[e],this;const s=this._listeners[e].indexOf(t);return s>=0&&this._listeners[e].splice(s,1),this}_onInput(e){if(this._inputEvent=e,this._abortUpdateCursor(),!this._selection)return this.updateValue();const t=new u({value:this.el.value,cursorPos:this.cursorPos,oldValue:this.displayValue,oldSelection:this._selection}),s=this.masked.rawInputValue,n=this.masked.splice(t.startChangePos,t.removed.length,t.inserted,t.removeDirection,{input:!0,raw:!0}).offset,i=s===this.masked.rawInputValue?t.removeDirection:a.NONE;let r=this.masked.nearestInputPos(t.startChangePos+n,i);i!==a.NONE&&(r=this.masked.nearestInputPos(r,a.NONE)),this.updateControl(),this.updateCursor(r),delete this._inputEvent}_onChange(){this.displayValue!==this.el.value&&this.updateValue(),this.masked.doCommit(),this.updateControl(),this._saveSelection()}_onDrop(e){e.preventDefault(),e.stopPropagation()}_onFocus(e){this.alignCursorFriendly()}_onClick(e){this.alignCursorFriendly()}destroy(){this._unbindEvents(),this._listeners.length=0,delete this.el}};class f{static normalize(e){return Array.isArray(e)?e:[e,new f]}constructor(e){Object.assign(this,{inserted:"",rawInserted:"",skip:!1,tailShift:0},e)}aggregate(e){return this.rawInserted+=e.rawInserted,this.skip=this.skip||e.skip,this.inserted+=e.inserted,this.tailShift+=e.tailShift,this}get offset(){return this.tailShift+this.inserted.length}}l.ChangeDetails=f;class y{constructor(e,t,s){void 0===e&&(e=""),void 0===t&&(t=0),this.value=e,this.from=t,this.stop=s}toString(){return this.value}extend(e){this.value+=String(e)}appendTo(e){return e.append(this.toString(),{tail:!0}).aggregate(e._appendPlaceholder())}get state(){return{value:this.value,from:this.from,stop:this.stop}}set state(e){Object.assign(this,e)}unshift(e){if(!this.value.length||null!=e&&this.from>=e)return"";const t=this.value[0];return this.value=this.value.slice(1),t}shift(){if(!this.value.length)return"";const e=this.value[this.value.length-1];return this.value=this.value.slice(0,-1),e}}class _{constructor(e){this._value="",this._update({..._.DEFAULTS,...e}),this._initialized=!0}updateOptions(e){Object.keys(e).length&&this.withValueRefresh(this._update.bind(this,e))}_update(e){Object.assign(this,e)}get state(){return{_value:this.value,_rawInputValue:this.rawInputValue}}set state(e){this._value=e._value}reset(){this._value=""}get value(){return this._value}set value(e){this.resolve(e,{input:!0})}resolve(e,t){void 0===t&&(t={input:!0}),this.reset(),this.append(e,t,""),this.doCommit()}get unmaskedValue(){return this.value}set unmaskedValue(e){this.resolve(e,{})}get typedValue(){return this.parse?this.parse(this.value,this):this.unmaskedValue}set typedValue(e){this.format?this.value=this.format(e,this):this.unmaskedValue=String(e)}get rawInputValue(){return this.extractInput(0,this.displayValue.length,{raw:!0})}set rawInputValue(e){this.resolve(e,{raw:!0})}get displayValue(){return this.value}get isComplete(){return!0}get isFilled(){return this.isComplete}nearestInputPos(e,t){return e}totalInputPositions(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),Math.min(this.displayValue.length,t-e)}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),this.displayValue.slice(e,t)}extractTail(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),new y(this.extractInput(e,t),e)}appendTail(e){return t(e)&&(e=new y(String(e))),e.appendTo(this)}_appendCharRaw(e,t){return e?(this._value+=e,new f({inserted:e,rawInserted:e})):new f}_appendChar(e,t,s){void 0===t&&(t={});const n=this.state;let a;if([e,a]=this.doPrepareChar(e,t),a=a.aggregate(this._appendCharRaw(e,t)),a.inserted){let e,i=!1!==this.doValidate(t);if(i&&null!=s){const t=this.state;!0===this.overwrite&&(e=s.state,s.unshift(this.displayValue.length-a.tailShift));let n=this.appendTail(s);i=n.rawInserted===s.toString(),i&&n.inserted||"shift"!==this.overwrite||(this.state=t,e=s.state,s.shift(),n=this.appendTail(s),i=n.rawInserted===s.toString()),i&&n.inserted&&(this.state=t)}i||(a=new f,this.state=n,s&&e&&(s.state=e))}return a}_appendPlaceholder(){return new f}_appendEager(){return new f}append(e,s,n){if(!t(e))throw new Error("value should be string");const a=t(n)?new y(String(n)):n;let i;null!=s&&s.tail&&(s._beforeTailState=this.state),[e,i]=this.doPrepare(e,s);for(let t=0;t<e.length;++t){const n=this._appendChar(e[t],s,a);if(!n.rawInserted&&!this.doSkipInvalid(e[t],s,a))break;i.aggregate(n)}return(!0===this.eager||"append"===this.eager)&&null!=s&&s.input&&e&&i.aggregate(this._appendEager()),null!=a&&(i.tailShift+=this.appendTail(a).tailShift),i}remove(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),this._value=this.displayValue.slice(0,e)+this.displayValue.slice(t),new f}withValueRefresh(e){if(this._refreshing||!this._initialized)return e();this._refreshing=!0;const t=this.rawInputValue,s=this.value,n=e();return this.rawInputValue=t,this.value&&this.value!==s&&0===s.indexOf(this.value)&&this.append(s.slice(this.displayValue.length),{},""),delete this._refreshing,n}runIsolated(e){if(this._isolated||!this._initialized)return e(this);this._isolated=!0;const t=this.state,s=e(this);return this.state=t,delete this._isolated,s}doSkipInvalid(e,t,s){return Boolean(this.skipInvalid)}doPrepare(e,t){return void 0===t&&(t={}),f.normalize(this.prepare?this.prepare(e,this,t):e)}doPrepareChar(e,t){return void 0===t&&(t={}),f.normalize(this.prepareChar?this.prepareChar(e,this,t):e)}doValidate(e){return(!this.validate||this.validate(this.value,this,e))&&(!this.parent||this.parent.doValidate(e))}doCommit(){this.commit&&this.commit(this.value,this)}splice(e,t,s,n,r){void 0===n&&(n=a.NONE),void 0===r&&(r={input:!0});const o=e+t,u=this.extractTail(o),l=!0===this.eager||"remove"===this.eager;let d;l&&(n=i(n),d=this.extractInput(0,o,{raw:!0}));let c=e;const h=new f;if(n!==a.NONE&&(c=this.nearestInputPos(e,t>1&&0!==e&&!l?a.NONE:n),h.tailShift=c-e),h.aggregate(this.remove(c)),l&&n!==a.NONE&&d===this.rawInputValue)if(n===a.FORCE_LEFT){let e;for(;d===this.rawInputValue&&(e=this.displayValue.length);)h.aggregate(new f({tailShift:-1})).aggregate(this.remove(e-1))}else n===a.FORCE_RIGHT&&u.unshift();return h.aggregate(this.append(s,r,u))}maskEquals(e){return this.mask===e}typedValueEquals(e){const t=this.typedValue;return e===t||_.EMPTY_VALUES.includes(e)&&_.EMPTY_VALUES.includes(t)||!!this.format&&this.format(e,this)===this.format(this.typedValue,this)}}_.DEFAULTS={skipInvalid:!0},_.EMPTY_VALUES=[void 0,null,""],l.Masked=_;class k{constructor(e,t){void 0===e&&(e=[]),void 0===t&&(t=0),this.chunks=e,this.from=t}toString(){return this.chunks.map(String).join("")}extend(e){if(!String(e))return;e=t(e)?new y(String(e)):e;const s=this.chunks[this.chunks.length-1],n=s&&(s.stop===e.stop||null==e.stop)&&e.from===s.from+s.toString().length;if(e instanceof y)n?s.extend(e.toString()):this.chunks.push(e);else if(e instanceof k){if(null==e.stop){let t;for(;e.chunks.length&&null==e.chunks[0].stop;)t=e.chunks.shift(),t.from+=e.from,this.extend(t)}e.toString()&&(e.stop=e.blockIndex,this.chunks.push(e))}}appendTo(e){if(!(e instanceof l.MaskedPattern)){return new y(this.toString()).appendTo(e)}const t=new f;for(let s=0;s<this.chunks.length&&!t.skip;++s){const n=this.chunks[s],a=e._mapPosToBlock(e.displayValue.length),i=n.stop;let r;if(null!=i&&(!a||a.index<=i)){if(n instanceof k||e._stops.indexOf(i)>=0){const s=e._appendPlaceholder(i);t.aggregate(s)}r=n instanceof k&&e._blocks[i]}if(r){const s=r.appendTail(n);s.skip=!1,t.aggregate(s),e._value+=s.inserted;const a=n.toString().slice(s.rawInserted.length);a&&t.aggregate(e.append(a,{tail:!0}))}else t.aggregate(e.append(n.toString(),{tail:!0}))}return t}get state(){return{chunks:this.chunks.map((e=>e.state)),from:this.from,stop:this.stop,blockIndex:this.blockIndex}}set state(e){const{chunks:t,...s}=e;Object.assign(this,s),this.chunks=t.map((e=>{const t="chunks"in e?new k:new y;return t.state=e,t}))}unshift(e){if(!this.chunks.length||null!=e&&this.from>=e)return"";const t=null!=e?e-this.from:e;let s=0;for(;s<this.chunks.length;){const e=this.chunks[s],n=e.unshift(t);if(e.toString()){if(!n)break;++s}else this.chunks.splice(s,1);if(n)return n}return""}shift(){if(!this.chunks.length)return"";let e=this.chunks.length-1;for(;0<=e;){const t=this.chunks[e],s=t.shift();if(t.toString()){if(!s)break;--e}else this.chunks.splice(e,1);if(s)return s}return""}}class C{constructor(e,t){this.masked=e,this._log=[];const{offset:s,index:n}=e._mapPosToBlock(t)||(t<0?{index:0,offset:0}:{index:this.masked._blocks.length,offset:0});this.offset=s,this.index=n,this.ok=!1}get block(){return this.masked._blocks[this.index]}get pos(){return this.masked._blockStartPos(this.index)+this.offset}get state(){return{index:this.index,offset:this.offset,ok:this.ok}}set state(e){Object.assign(this,e)}pushState(){this._log.push(this.state)}popState(){const e=this._log.pop();return e&&(this.state=e),e}bindBlock(){this.block||(this.index<0&&(this.index=0,this.offset=0),this.index>=this.masked._blocks.length&&(this.index=this.masked._blocks.length-1,this.offset=this.block.displayValue.length))}_pushLeft(e){for(this.pushState(),this.bindBlock();0<=this.index;--this.index,this.offset=(null==(t=this.block)?void 0:t.displayValue.length)||0){var t;if(e())return this.ok=!0}return this.ok=!1}_pushRight(e){for(this.pushState(),this.bindBlock();this.index<this.masked._blocks.length;++this.index,this.offset=0)if(e())return this.ok=!0;return this.ok=!1}pushLeftBeforeFilled(){return this._pushLeft((()=>{if(!this.block.isFixed&&this.block.value)return this.offset=this.block.nearestInputPos(this.offset,a.FORCE_LEFT),0!==this.offset||void 0}))}pushLeftBeforeInput(){return this._pushLeft((()=>{if(!this.block.isFixed)return this.offset=this.block.nearestInputPos(this.offset,a.LEFT),!0}))}pushLeftBeforeRequired(){return this._pushLeft((()=>{if(!(this.block.isFixed||this.block.isOptional&&!this.block.value))return this.offset=this.block.nearestInputPos(this.offset,a.LEFT),!0}))}pushRightBeforeFilled(){return this._pushRight((()=>{if(!this.block.isFixed&&this.block.value)return this.offset=this.block.nearestInputPos(this.offset,a.FORCE_RIGHT),this.offset!==this.block.value.length||void 0}))}pushRightBeforeInput(){return this._pushRight((()=>{if(!this.block.isFixed)return this.offset=this.block.nearestInputPos(this.offset,a.NONE),!0}))}pushRightBeforeRequired(){return this._pushRight((()=>{if(!(this.block.isFixed||this.block.isOptional&&!this.block.value))return this.offset=this.block.nearestInputPos(this.offset,a.NONE),!0}))}}class E{constructor(e){Object.assign(this,e),this._value="",this.isFixed=!0}get value(){return this._value}get unmaskedValue(){return this.isUnmasking?this.value:""}get rawInputValue(){return this._isRawInput?this.value:""}get displayValue(){return this.value}reset(){this._isRawInput=!1,this._value=""}remove(e,t){return void 0===e&&(e=0),void 0===t&&(t=this._value.length),this._value=this._value.slice(0,e)+this._value.slice(t),this._value||(this._isRawInput=!1),new f}nearestInputPos(e,t){void 0===t&&(t=a.NONE);const s=this._value.length;switch(t){case a.LEFT:case a.FORCE_LEFT:return 0;default:return s}}totalInputPositions(e,t){return void 0===e&&(e=0),void 0===t&&(t=this._value.length),this._isRawInput?t-e:0}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this._value.length),void 0===s&&(s={}),s.raw&&this._isRawInput&&this._value.slice(e,t)||""}get isComplete(){return!0}get isFilled(){return Boolean(this._value)}_appendChar(e,t){void 0===t&&(t={});const s=new f;if(this.isFilled)return s;const n=!0===this.eager||"append"===this.eager,a=this.char===e&&(this.isUnmasking||t.input||t.raw)&&(!t.raw||!n)&&!t.tail;return a&&(s.rawInserted=this.char),this._value=s.inserted=this.char,this._isRawInput=a&&(t.raw||t.input),s}_appendEager(){return this._appendChar(this.char,{tail:!0})}_appendPlaceholder(){const e=new f;return this.isFilled||(this._value=e.inserted=this.char),e}extractTail(){return new y("")}appendTail(e){return t(e)&&(e=new y(String(e))),e.appendTo(this)}append(e,t,s){const n=this._appendChar(e[0],t);return null!=s&&(n.tailShift+=this.appendTail(s).tailShift),n}doCommit(){}get state(){return{_value:this._value,_rawInputValue:this.rawInputValue}}set state(e){this._value=e._value,this._isRawInput=Boolean(e._rawInputValue)}}class b{constructor(e){const{parent:t,isOptional:s,placeholderChar:n,displayChar:a,lazy:i,eager:r,...o}=e;this.masked=h(o),Object.assign(this,{parent:t,isOptional:s,placeholderChar:n,displayChar:a,lazy:i,eager:r})}reset(){this.isFilled=!1,this.masked.reset()}remove(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.value.length),0===e&&t>=1?(this.isFilled=!1,this.masked.remove(e,t)):new f}get value(){return this.masked.value||(this.isFilled&&!this.isOptional?this.placeholderChar:"")}get unmaskedValue(){return this.masked.unmaskedValue}get rawInputValue(){return this.masked.rawInputValue}get displayValue(){return this.masked.value&&this.displayChar||this.value}get isComplete(){return Boolean(this.masked.value)||this.isOptional}_appendChar(e,t){if(void 0===t&&(t={}),this.isFilled)return new f;const s=this.masked.state,n=this.masked._appendChar(e,this.currentMaskFlags(t));return n.inserted&&!1===this.doValidate(t)&&(n.inserted=n.rawInserted="",this.masked.state=s),n.inserted||this.isOptional||this.lazy||t.input||(n.inserted=this.placeholderChar),n.skip=!n.inserted&&!this.isOptional,this.isFilled=Boolean(n.inserted),n}append(e,t,s){return this.masked.append(e,this.currentMaskFlags(t),s)}_appendPlaceholder(){const e=new f;return this.isFilled||this.isOptional||(this.isFilled=!0,e.inserted=this.placeholderChar),e}_appendEager(){return new f}extractTail(e,t){return this.masked.extractTail(e,t)}appendTail(e){return this.masked.appendTail(e)}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this.value.length),this.masked.extractInput(e,t,s)}nearestInputPos(e,t){void 0===t&&(t=a.NONE);const s=this.value.length,n=Math.min(Math.max(e,0),s);switch(t){case a.LEFT:case a.FORCE_LEFT:return this.isComplete?n:0;case a.RIGHT:case a.FORCE_RIGHT:return this.isComplete?n:s;default:return n}}totalInputPositions(e,t){return void 0===e&&(e=0),void 0===t&&(t=this.value.length),this.value.slice(e,t).length}doValidate(e){return this.masked.doValidate(this.currentMaskFlags(e))&&(!this.parent||this.parent.doValidate(this.currentMaskFlags(e)))}doCommit(){this.masked.doCommit()}get state(){return{_value:this.value,_rawInputValue:this.rawInputValue,masked:this.masked.state,isFilled:this.isFilled}}set state(e){this.masked.state=e.masked,this.isFilled=e.isFilled}currentMaskFlags(e){var t;return{...e,_beforeTailState:(null==e||null==(t=e._beforeTailState)?void 0:t.masked)||(null==e?void 0:e._beforeTailState)}}}b.DEFAULT_DEFINITIONS={0:/\d/,a:/[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,"*":/./};l.MaskedRegExp=class extends _{updateOptions(e){super.updateOptions(e)}_update(e){const t=e.mask;t&&(e.validate=e=>e.search(t)>=0),super._update(e)}};class S extends _{constructor(e){super({...S.DEFAULTS,...e,definitions:Object.assign({},b.DEFAULT_DEFINITIONS,null==e?void 0:e.definitions)})}updateOptions(e){super.updateOptions(e)}_update(e){e.definitions=Object.assign({},this.definitions,e.definitions),super._update(e),this._rebuildMask()}_rebuildMask(){const e=this.definitions;this._blocks=[],this.exposeBlock=void 0,this._stops=[],this._maskedBlocks={};const t=this.mask;if(!t||!e)return;let s=!1,n=!1;for(let a=0;a<t.length;++a){if(this.blocks){const e=t.slice(a),s=Object.keys(this.blocks).filter((t=>0===e.indexOf(t)));s.sort(((e,t)=>t.length-e.length));const n=s[0];if(n){const{expose:e,...t}=c(this.blocks[n]),s=h({lazy:this.lazy,eager:this.eager,placeholderChar:this.placeholderChar,displayChar:this.displayChar,overwrite:this.overwrite,...t,parent:this});s&&(this._blocks.push(s),e&&(this.exposeBlock=s),this._maskedBlocks[n]||(this._maskedBlocks[n]=[]),this._maskedBlocks[n].push(this._blocks.length-1)),a+=n.length-1;continue}}let i=t[a],r=i in e;if(i===S.STOP_CHAR){this._stops.push(this._blocks.length);continue}if("{"===i||"}"===i){s=!s;continue}if("["===i||"]"===i){n=!n;continue}if(i===S.ESCAPE_CHAR){if(++a,i=t[a],!i)break;r=!1}const o=r?new b({isOptional:n,lazy:this.lazy,eager:this.eager,placeholderChar:this.placeholderChar,displayChar:this.displayChar,...c(e[i]),parent:this}):new E({char:i,eager:this.eager,isUnmasking:s});this._blocks.push(o)}}get state(){return{...super.state,_blocks:this._blocks.map((e=>e.state))}}set state(e){const{_blocks:t,...s}=e;this._blocks.forEach(((e,s)=>e.state=t[s])),super.state=s}reset(){super.reset(),this._blocks.forEach((e=>e.reset()))}get isComplete(){return this.exposeBlock?this.exposeBlock.isComplete:this._blocks.every((e=>e.isComplete))}get isFilled(){return this._blocks.every((e=>e.isFilled))}get isFixed(){return this._blocks.every((e=>e.isFixed))}get isOptional(){return this._blocks.every((e=>e.isOptional))}doCommit(){this._blocks.forEach((e=>e.doCommit())),super.doCommit()}get unmaskedValue(){return this.exposeBlock?this.exposeBlock.unmaskedValue:this._blocks.reduce(((e,t)=>e+t.unmaskedValue),"")}set unmaskedValue(e){if(this.exposeBlock){const t=this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock))+this.exposeBlock.displayValue.length);this.exposeBlock.unmaskedValue=e,this.appendTail(t),this.doCommit()}else super.unmaskedValue=e}get value(){return this.exposeBlock?this.exposeBlock.value:this._blocks.reduce(((e,t)=>e+t.value),"")}set value(e){if(this.exposeBlock){const t=this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock))+this.exposeBlock.displayValue.length);this.exposeBlock.value=e,this.appendTail(t),this.doCommit()}else super.value=e}get typedValue(){return this.exposeBlock?this.exposeBlock.typedValue:super.typedValue}set typedValue(e){if(this.exposeBlock){const t=this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock))+this.exposeBlock.displayValue.length);this.exposeBlock.typedValue=e,this.appendTail(t),this.doCommit()}else super.typedValue=e}get displayValue(){return this._blocks.reduce(((e,t)=>e+t.displayValue),"")}appendTail(e){return super.appendTail(e).aggregate(this._appendPlaceholder())}_appendEager(){var e;const t=new f;let s=null==(e=this._mapPosToBlock(this.displayValue.length))?void 0:e.index;if(null==s)return t;this._blocks[s].isFilled&&++s;for(let e=s;e<this._blocks.length;++e){const s=this._blocks[e]._appendEager();if(!s.inserted)break;t.aggregate(s)}return t}_appendCharRaw(e,t){void 0===t&&(t={});const s=this._mapPosToBlock(this.displayValue.length),n=new f;if(!s)return n;for(let i=s.index;;++i){var a;const s=this._blocks[i];if(!s)break;const r=s._appendChar(e,{...t,_beforeTailState:null==(a=t._beforeTailState)||null==(a=a._blocks)?void 0:a[i]}),o=r.skip;if(n.aggregate(r),o||r.rawInserted)break}return n}extractTail(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length);const s=new k;return e===t||this._forEachBlocksInRange(e,t,((e,t,n,a)=>{const i=e.extractTail(n,a);i.stop=this._findStopBefore(t),i.from=this._blockStartPos(t),i instanceof k&&(i.blockIndex=t),s.extend(i)})),s}extractInput(e,t,s){if(void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),void 0===s&&(s={}),e===t)return"";let n="";return this._forEachBlocksInRange(e,t,((e,t,a,i)=>{n+=e.extractInput(a,i,s)})),n}_findStopBefore(e){let t;for(let s=0;s<this._stops.length;++s){const n=this._stops[s];if(!(n<=e))break;t=n}return t}_appendPlaceholder(e){const t=new f;if(this.lazy&&null==e)return t;const s=this._mapPosToBlock(this.displayValue.length);if(!s)return t;const n=s.index,a=null!=e?e:this._blocks.length;return this._blocks.slice(n,a).forEach((s=>{if(!s.lazy||null!=e){var n;const e=s._appendPlaceholder(null==(n=s._blocks)?void 0:n.length);this._value+=e.inserted,t.aggregate(e)}})),t}_mapPosToBlock(e){let t="";for(let s=0;s<this._blocks.length;++s){const n=this._blocks[s],a=t.length;if(t+=n.displayValue,e<=t.length)return{index:s,offset:e-a}}}_blockStartPos(e){return this._blocks.slice(0,e).reduce(((e,t)=>e+t.displayValue.length),0)}_forEachBlocksInRange(e,t,s){void 0===t&&(t=this.displayValue.length);const n=this._mapPosToBlock(e);if(n){const e=this._mapPosToBlock(t),a=e&&n.index===e.index,i=n.offset,r=e&&a?e.offset:this._blocks[n.index].displayValue.length;if(s(this._blocks[n.index],n.index,i,r),e&&!a){for(let t=n.index+1;t<e.index;++t)s(this._blocks[t],t,0,this._blocks[t].displayValue.length);s(this._blocks[e.index],e.index,0,e.offset)}}}remove(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length);const s=super.remove(e,t);return this._forEachBlocksInRange(e,t,((e,t,n,a)=>{s.aggregate(e.remove(n,a))})),s}nearestInputPos(e,t){if(void 0===t&&(t=a.NONE),!this._blocks.length)return 0;const s=new C(this,e);if(t===a.NONE)return s.pushRightBeforeInput()?s.pos:(s.popState(),s.pushLeftBeforeInput()?s.pos:this.displayValue.length);if(t===a.LEFT||t===a.FORCE_LEFT){if(t===a.LEFT){if(s.pushRightBeforeFilled(),s.ok&&s.pos===e)return e;s.popState()}if(s.pushLeftBeforeInput(),s.pushLeftBeforeRequired(),s.pushLeftBeforeFilled(),t===a.LEFT){if(s.pushRightBeforeInput(),s.pushRightBeforeRequired(),s.ok&&s.pos<=e)return s.pos;if(s.popState(),s.ok&&s.pos<=e)return s.pos;s.popState()}return s.ok?s.pos:t===a.FORCE_LEFT?0:(s.popState(),s.ok?s.pos:(s.popState(),s.ok?s.pos:0))}return t===a.RIGHT||t===a.FORCE_RIGHT?(s.pushRightBeforeInput(),s.pushRightBeforeRequired(),s.pushRightBeforeFilled()?s.pos:t===a.FORCE_RIGHT?this.displayValue.length:(s.popState(),s.ok?s.pos:(s.popState(),s.ok?s.pos:this.nearestInputPos(e,a.LEFT)))):e}totalInputPositions(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length);let s=0;return this._forEachBlocksInRange(e,t,((e,t,n,a)=>{s+=e.totalInputPositions(n,a)})),s}maskedBlock(e){return this.maskedBlocks(e)[0]}maskedBlocks(e){const t=this._maskedBlocks[e];return t?t.map((e=>this._blocks[e])):[]}}S.DEFAULTS={lazy:!0,placeholderChar:"_"},S.STOP_CHAR="`",S.ESCAPE_CHAR="\\",S.InputDefinition=b,S.FixedDefinition=E,l.MaskedPattern=S;class w extends S{get _matchFrom(){return this.maxLength-String(this.from).length}constructor(e){super(e)}updateOptions(e){super.updateOptions(e)}_update(e){const{to:t=this.to||0,from:s=this.from||0,maxLength:n=this.maxLength||0,autofix:a=this.autofix,...i}=e;this.to=t,this.from=s,this.maxLength=Math.max(String(t).length,n),this.autofix=a;const r=String(this.from).padStart(this.maxLength,"0"),o=String(this.to).padStart(this.maxLength,"0");let u=0;for(;u<o.length&&o[u]===r[u];)++u;i.mask=o.slice(0,u).replace(/0/g,"\\0")+"0".repeat(this.maxLength-u),super._update(i)}get isComplete(){return super.isComplete&&Boolean(this.value)}boundaries(e){let t="",s="";const[,n,a]=e.match(/^(\D*)(\d*)(\D*)/)||[];return a&&(t="0".repeat(n.length)+a,s="9".repeat(n.length)+a),t=t.padEnd(this.maxLength,"0"),s=s.padEnd(this.maxLength,"9"),[t,s]}doPrepareChar(e,t){let s;if(void 0===t&&(t={}),[e,s]=super.doPrepareChar(e.replace(/\D/g,""),t),!this.autofix||!e)return[e,s];const n=String(this.from).padStart(this.maxLength,"0"),a=String(this.to).padStart(this.maxLength,"0"),i=this.value+e;if(i.length>this.maxLength)return["",s];const[r,o]=this.boundaries(i);return Number(o)<this.from?[n[i.length-1],s]:Number(r)>this.to?"pad"===this.autofix&&i.length<this.maxLength?["",s.aggregate(this.append(n[i.length-1]+e,t))]:[a[i.length-1],s]:[e,s]}doValidate(e){const t=this.value;if(-1===t.search(/[^0]/)&&t.length<=this._matchFrom)return!0;const[s,n]=this.boundaries(t);return this.from<=Number(n)&&Number(s)<=this.to&&super.doValidate(e)}}l.MaskedRange=w;class F extends S{constructor(e){const{mask:s,pattern:n,...a}={...F.DEFAULTS,...e};super({...a,mask:t(s)?s:n})}updateOptions(e){super.updateOptions(e)}_update(e){const{mask:s,pattern:n,blocks:a,...i}={...F.DEFAULTS,...e},r=Object.assign({},F.GET_DEFAULT_BLOCKS());e.min&&(r.Y.from=e.min.getFullYear()),e.max&&(r.Y.to=e.max.getFullYear()),e.min&&e.max&&r.Y.from===r.Y.to&&(r.m.from=e.min.getMonth()+1,r.m.to=e.max.getMonth()+1,r.m.from===r.m.to&&(r.d.from=e.min.getDate(),r.d.to=e.max.getDate())),Object.assign(r,this.blocks,a),Object.keys(r).forEach((t=>{const s=r[t];!("autofix"in s)&&"autofix"in e&&(s.autofix=e.autofix)})),super._update({...i,mask:t(s)?s:n,blocks:r})}doValidate(e){const t=this.date;return super.doValidate(e)&&(!this.isComplete||this.isDateExist(this.value)&&null!=t&&(null==this.min||this.min<=t)&&(null==this.max||t<=this.max))}isDateExist(e){return this.format(this.parse(e,this),this).indexOf(e)>=0}get date(){return this.typedValue}set date(e){this.typedValue=e}get typedValue(){return this.isComplete?super.typedValue:null}set typedValue(e){super.typedValue=e}maskEquals(e){return e===Date||super.maskEquals(e)}}F.GET_DEFAULT_BLOCKS=()=>({d:{mask:w,from:1,to:31,maxLength:2},m:{mask:w,from:1,to:12,maxLength:2},Y:{mask:w,from:1900,to:9999}}),F.DEFAULTS={mask:Date,pattern:"d{.}`m{.}`Y",format:(e,t)=>{if(!e)return"";return[String(e.getDate()).padStart(2,"0"),String(e.getMonth()+1).padStart(2,"0"),e.getFullYear()].join(".")},parse:(e,t)=>{const[s,n,a]=e.split(".").map(Number);return new Date(a,n-1,s)}},l.MaskedDate=F;class A extends _{constructor(e){super({...A.DEFAULTS,...e}),this.currentMask=void 0}updateOptions(e){super.updateOptions(e)}_update(e){super._update(e),"mask"in e&&(this.exposeMask=void 0,this.compiledMasks=Array.isArray(e.mask)?e.mask.map((e=>{const{expose:t,...s}=c(e),n=h({overwrite:this._overwrite,eager:this._eager,skipInvalid:this._skipInvalid,...s});return t&&(this.exposeMask=n),n})):[])}_appendCharRaw(e,t){void 0===t&&(t={});const s=this._applyDispatch(e,t);return this.currentMask&&s.aggregate(this.currentMask._appendChar(e,this.currentMaskFlags(t))),s}_applyDispatch(e,t,s){void 0===e&&(e=""),void 0===t&&(t={}),void 0===s&&(s="");const n=t.tail&&null!=t._beforeTailState?t._beforeTailState._value:this.value,a=this.rawInputValue,i=t.tail&&null!=t._beforeTailState?t._beforeTailState._rawInputValue:a,r=a.slice(i.length),o=this.currentMask,u=new f,l=null==o?void 0:o.state;if(this.currentMask=this.doDispatch(e,{...t},s),this.currentMask)if(this.currentMask!==o){if(this.currentMask.reset(),i){const e=this.currentMask.append(i,{raw:!0});u.tailShift=e.inserted.length-n.length}r&&(u.tailShift+=this.currentMask.append(r,{raw:!0,tail:!0}).tailShift)}else l&&(this.currentMask.state=l);return u}_appendPlaceholder(){const e=this._applyDispatch();return this.currentMask&&e.aggregate(this.currentMask._appendPlaceholder()),e}_appendEager(){const e=this._applyDispatch();return this.currentMask&&e.aggregate(this.currentMask._appendEager()),e}appendTail(e){const t=new f;return e&&t.aggregate(this._applyDispatch("",{},e)),t.aggregate(this.currentMask?this.currentMask.appendTail(e):super.appendTail(e))}currentMaskFlags(e){var t,s;return{...e,_beforeTailState:(null==(t=e._beforeTailState)?void 0:t.currentMaskRef)===this.currentMask&&(null==(s=e._beforeTailState)?void 0:s.currentMask)||e._beforeTailState}}doDispatch(e,t,s){return void 0===t&&(t={}),void 0===s&&(s=""),this.dispatch(e,this,t,s)}doValidate(e){return super.doValidate(e)&&(!this.currentMask||this.currentMask.doValidate(this.currentMaskFlags(e)))}doPrepare(e,t){void 0===t&&(t={});let[s,n]=super.doPrepare(e,t);if(this.currentMask){let e;[s,e]=super.doPrepare(s,this.currentMaskFlags(t)),n=n.aggregate(e)}return[s,n]}doPrepareChar(e,t){void 0===t&&(t={});let[s,n]=super.doPrepareChar(e,t);if(this.currentMask){let e;[s,e]=super.doPrepareChar(s,this.currentMaskFlags(t)),n=n.aggregate(e)}return[s,n]}reset(){var e;null==(e=this.currentMask)||e.reset(),this.compiledMasks.forEach((e=>e.reset()))}get value(){return this.exposeMask?this.exposeMask.value:this.currentMask?this.currentMask.value:""}set value(e){this.exposeMask?(this.exposeMask.value=e,this.currentMask=this.exposeMask,this._applyDispatch()):super.value=e}get unmaskedValue(){return this.exposeMask?this.exposeMask.unmaskedValue:this.currentMask?this.currentMask.unmaskedValue:""}set unmaskedValue(e){this.exposeMask?(this.exposeMask.unmaskedValue=e,this.currentMask=this.exposeMask,this._applyDispatch()):super.unmaskedValue=e}get typedValue(){return this.exposeMask?this.exposeMask.typedValue:this.currentMask?this.currentMask.typedValue:""}set typedValue(e){if(this.exposeMask)return this.exposeMask.typedValue=e,this.currentMask=this.exposeMask,void this._applyDispatch();let t=String(e);this.currentMask&&(this.currentMask.typedValue=e,t=this.currentMask.unmaskedValue),this.unmaskedValue=t}get displayValue(){return this.currentMask?this.currentMask.displayValue:""}get isComplete(){var e;return Boolean(null==(e=this.currentMask)?void 0:e.isComplete)}get isFilled(){var e;return Boolean(null==(e=this.currentMask)?void 0:e.isFilled)}remove(e,t){const s=new f;return this.currentMask&&s.aggregate(this.currentMask.remove(e,t)).aggregate(this._applyDispatch()),s}get state(){var e;return{...super.state,_rawInputValue:this.rawInputValue,compiledMasks:this.compiledMasks.map((e=>e.state)),currentMaskRef:this.currentMask,currentMask:null==(e=this.currentMask)?void 0:e.state}}set state(e){const{compiledMasks:t,currentMaskRef:s,currentMask:n,...a}=e;t&&this.compiledMasks.forEach(((e,s)=>e.state=t[s])),null!=s&&(this.currentMask=s,this.currentMask.state=n),super.state=a}extractInput(e,t,s){return this.currentMask?this.currentMask.extractInput(e,t,s):""}extractTail(e,t){return this.currentMask?this.currentMask.extractTail(e,t):super.extractTail(e,t)}doCommit(){this.currentMask&&this.currentMask.doCommit(),super.doCommit()}nearestInputPos(e,t){return this.currentMask?this.currentMask.nearestInputPos(e,t):super.nearestInputPos(e,t)}get overwrite(){return this.currentMask?this.currentMask.overwrite:this._overwrite}set overwrite(e){this._overwrite=e}get eager(){return this.currentMask?this.currentMask.eager:this._eager}set eager(e){this._eager=e}get skipInvalid(){return this.currentMask?this.currentMask.skipInvalid:this._skipInvalid}set skipInvalid(e){this._skipInvalid=e}maskEquals(e){return Array.isArray(e)?this.compiledMasks.every(((t,s)=>{if(!e[s])return;const{mask:n,...a}=e[s];return o(t,a)&&t.maskEquals(n)})):super.maskEquals(e)}typedValueEquals(e){var t;return Boolean(null==(t=this.currentMask)?void 0:t.typedValueEquals(e))}}A.DEFAULTS=void 0,A.DEFAULTS={dispatch:(e,t,s,n)=>{if(!t.compiledMasks.length)return;const i=t.rawInputValue,r=t.compiledMasks.map(((r,o)=>{const u=t.currentMask===r,l=u?r.displayValue.length:r.nearestInputPos(r.displayValue.length,a.FORCE_LEFT);return r.rawInputValue!==i?(r.reset(),r.append(i,{raw:!0})):u||r.remove(l),r.append(e,t.currentMaskFlags(s)),r.appendTail(n),{index:o,weight:r.rawInputValue.length,totalInputPositions:r.totalInputPositions(0,Math.max(l,r.nearestInputPos(r.displayValue.length,a.FORCE_LEFT)))}}));return r.sort(((e,t)=>t.weight-e.weight||t.totalInputPositions-e.totalInputPositions)),t.compiledMasks[r[0].index]}},l.MaskedDynamic=A;l.MaskedEnum=class extends S{constructor(e){super(e)}updateOptions(e){super.updateOptions(e)}_update(e){const{enum:t,...s}=e;if(t){const e=t.map((e=>e.length)),n=Math.min(...e),a=Math.max(...e)-n;s.mask="*".repeat(n),a&&(s.mask+="["+"*".repeat(a)+"]"),this.enum=t}super._update(s)}doValidate(e){return this.enum.some((e=>0===e.indexOf(this.unmaskedValue)))&&super.doValidate(e)}};l.MaskedFunction=class extends _{updateOptions(e){super.updateOptions(e)}_update(e){super._update({...e,validate:e.mask})}};class x extends _{constructor(e){super({...x.DEFAULTS,...e})}updateOptions(e){super.updateOptions(e)}_update(e){super._update(e),this._updateRegExps()}_updateRegExps(){const e="^"+(this.allowNegative?"[+|\\-]?":""),t=(this.scale?"("+r(this.radix)+"\\d{0,"+this.scale+"})?":"")+"$";this._numberRegExp=new RegExp(e+"\\d*"+t),this._mapToRadixRegExp=new RegExp("["+this.mapToRadix.map(r).join("")+"]","g"),this._thousandsSeparatorRegExp=new RegExp(r(this.thousandsSeparator),"g")}_removeThousandsSeparators(e){return e.replace(this._thousandsSeparatorRegExp,"")}_insertThousandsSeparators(e){const t=e.split(this.radix);return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,this.thousandsSeparator),t.join(this.radix)}doPrepareChar(e,t){void 0===t&&(t={});const[s,n]=super.doPrepareChar(this._removeThousandsSeparators(this.scale&&this.mapToRadix.length&&(t.input&&t.raw||!t.input&&!t.raw)?e.replace(this._mapToRadixRegExp,this.radix):e),t);return e&&!s&&(n.skip=!0),!s||this.allowPositive||this.value||"-"===s||n.aggregate(this._appendChar("-")),[s,n]}_separatorsCount(e,t){void 0===t&&(t=!1);let s=0;for(let n=0;n<e;++n)this._value.indexOf(this.thousandsSeparator,n)===n&&(++s,t&&(e+=this.thousandsSeparator.length));return s}_separatorsCountFromSlice(e){return void 0===e&&(e=this._value),this._separatorsCount(this._removeThousandsSeparators(e).length,!0)}extractInput(e,t,s){return void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),[e,t]=this._adjustRangeWithSeparators(e,t),this._removeThousandsSeparators(super.extractInput(e,t,s))}_appendCharRaw(e,t){if(void 0===t&&(t={}),!this.thousandsSeparator)return super._appendCharRaw(e,t);const s=t.tail&&t._beforeTailState?t._beforeTailState._value:this._value,n=this._separatorsCountFromSlice(s);this._value=this._removeThousandsSeparators(this.value);const a=super._appendCharRaw(e,t);this._value=this._insertThousandsSeparators(this._value);const i=t.tail&&t._beforeTailState?t._beforeTailState._value:this._value,r=this._separatorsCountFromSlice(i);return a.tailShift+=(r-n)*this.thousandsSeparator.length,a.skip=!a.rawInserted&&e===this.thousandsSeparator,a}_findSeparatorAround(e){if(this.thousandsSeparator){const t=e-this.thousandsSeparator.length+1,s=this.value.indexOf(this.thousandsSeparator,t);if(s<=e)return s}return-1}_adjustRangeWithSeparators(e,t){const s=this._findSeparatorAround(e);s>=0&&(e=s);const n=this._findSeparatorAround(t);return n>=0&&(t=n+this.thousandsSeparator.length),[e,t]}remove(e,t){void 0===e&&(e=0),void 0===t&&(t=this.displayValue.length),[e,t]=this._adjustRangeWithSeparators(e,t);const s=this.value.slice(0,e),n=this.value.slice(t),a=this._separatorsCount(s.length);this._value=this._insertThousandsSeparators(this._removeThousandsSeparators(s+n));const i=this._separatorsCountFromSlice(s);return new f({tailShift:(i-a)*this.thousandsSeparator.length})}nearestInputPos(e,t){if(!this.thousandsSeparator)return e;switch(t){case a.NONE:case a.LEFT:case a.FORCE_LEFT:{const s=this._findSeparatorAround(e-1);if(s>=0){const n=s+this.thousandsSeparator.length;if(e<n||this.value.length<=n||t===a.FORCE_LEFT)return s}break}case a.RIGHT:case a.FORCE_RIGHT:{const t=this._findSeparatorAround(e);if(t>=0)return t+this.thousandsSeparator.length}}return e}doValidate(e){let t=Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));if(t){const e=this.number;t=t&&!isNaN(e)&&(null==this.min||this.min>=0||this.min<=this.number)&&(null==this.max||this.max<=0||this.number<=this.max)}return t&&super.doValidate(e)}doCommit(){if(this.value){const e=this.number;let t=e;null!=this.min&&(t=Math.max(t,this.min)),null!=this.max&&(t=Math.min(t,this.max)),t!==e&&(this.unmaskedValue=this.format(t,this));let s=this.value;this.normalizeZeros&&(s=this._normalizeZeros(s)),this.padFractionalZeros&&this.scale>0&&(s=this._padFractionalZeros(s)),this._value=s}super.doCommit()}_normalizeZeros(e){const t=this._removeThousandsSeparators(e).split(this.radix);return t[0]=t[0].replace(/^(\D*)(0*)(\d*)/,((e,t,s,n)=>t+n)),e.length&&!/\d$/.test(t[0])&&(t[0]=t[0]+"0"),t.length>1&&(t[1]=t[1].replace(/0*$/,""),t[1].length||(t.length=1)),this._insertThousandsSeparators(t.join(this.radix))}_padFractionalZeros(e){if(!e)return e;const t=e.split(this.radix);return t.length<2&&t.push(""),t[1]=t[1].padEnd(this.scale,"0"),t.join(this.radix)}doSkipInvalid(e,t,s){void 0===t&&(t={});const n=0===this.scale&&e!==this.thousandsSeparator&&(e===this.radix||e===x.UNMASKED_RADIX||this.mapToRadix.includes(e));return super.doSkipInvalid(e,t,s)&&!n}get unmaskedValue(){return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix,x.UNMASKED_RADIX)}set unmaskedValue(e){super.unmaskedValue=e}get typedValue(){return this.parse(this.unmaskedValue,this)}set typedValue(e){this.rawInputValue=this.format(e,this).replace(x.UNMASKED_RADIX,this.radix)}get number(){return this.typedValue}set number(e){this.typedValue=e}get allowNegative(){return null!=this.min&&this.min<0||null!=this.max&&this.max<0}get allowPositive(){return null!=this.min&&this.min>0||null!=this.max&&this.max>0}typedValueEquals(e){return(super.typedValueEquals(e)||x.EMPTY_VALUES.includes(e)&&x.EMPTY_VALUES.includes(this.typedValue))&&!(0===e&&""===this.value)}}x.UNMASKED_RADIX=".",x.EMPTY_VALUES=[..._.EMPTY_VALUES,0],x.DEFAULTS={mask:Number,radix:",",thousandsSeparator:"",mapToRadix:[x.UNMASKED_RADIX],min:Number.MIN_SAFE_INTEGER,max:Number.MAX_SAFE_INTEGER,scale:2,normalizeZeros:!0,padFractionalZeros:!1,parse:Number,format:e=>e.toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:20})},l.MaskedNumber=x;const M={MASKED:"value",UNMASKED:"unmaskedValue",TYPED:"typedValue"};function I(e,t,s){void 0===t&&(t=M.MASKED),void 0===s&&(s=M.MASKED);const n=h(e);return e=>n.runIsolated((n=>(n[t]=e,n[s])))}l.PIPE_TYPE=M,l.createPipe=I,l.pipe=function(e,t,s,n){return I(t,s,n)(e)};try{globalThis.IMask=l}catch{}var B,T,D={};e(D,"sprintf",(()=>B),(e=>B=e)),e(D,"vsprintf",(()=>T),(e=>T=e)),function(){"use strict";var e={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function t(s){return function(s,n){var a,i,r,o,u,l,d,c,h,p=1,m=s.length,g="";for(i=0;i<m;i++)if("string"==typeof s[i])g+=s[i];else if("object"==typeof s[i]){if((o=s[i]).keys)for(a=n[p],r=0;r<o.keys.length;r++){if(null==a)throw new Error(t('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[r],o.keys[r-1]));a=a[o.keys[r]]}else a=o.param_no?n[o.param_no]:n[p++];if(e.not_type.test(o.type)&&e.not_primitive.test(o.type)&&a instanceof Function&&(a=a()),e.numeric_arg.test(o.type)&&"number"!=typeof a&&isNaN(a))throw new TypeError(t("[sprintf] expecting number but found %T",a));switch(e.number.test(o.type)&&(c=a>=0),o.type){case"b":a=parseInt(a,10).toString(2);break;case"c":a=String.fromCharCode(parseInt(a,10));break;case"d":case"i":a=parseInt(a,10);break;case"j":a=JSON.stringify(a,null,o.width?parseInt(o.width):0);break;case"e":a=o.precision?parseFloat(a).toExponential(o.precision):parseFloat(a).toExponential();break;case"f":a=o.precision?parseFloat(a).toFixed(o.precision):parseFloat(a);break;case"g":a=o.precision?String(Number(a.toPrecision(o.precision))):parseFloat(a);break;case"o":a=(parseInt(a,10)>>>0).toString(8);break;case"s":a=String(a),a=o.precision?a.substring(0,o.precision):a;break;case"t":a=String(!!a),a=o.precision?a.substring(0,o.precision):a;break;case"T":a=Object.prototype.toString.call(a).slice(8,-1).toLowerCase(),a=o.precision?a.substring(0,o.precision):a;break;case"u":a=parseInt(a,10)>>>0;break;case"v":a=a.valueOf(),a=o.precision?a.substring(0,o.precision):a;break;case"x":a=(parseInt(a,10)>>>0).toString(16);break;case"X":a=(parseInt(a,10)>>>0).toString(16).toUpperCase()}e.json.test(o.type)?g+=a:(!e.number.test(o.type)||c&&!o.sign?h="":(h=c?"+":"-",a=a.toString().replace(e.sign,"")),l=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",d=o.width-(h+a).length,u=o.width&&d>0?l.repeat(d):"",g+=o.align?h+a+u:"0"===l?h+u+a:u+h+a)}return g}(function(t){if(n[t])return n[t];var s,a=t,i=[],r=0;for(;a;){if(null!==(s=e.text.exec(a)))i.push(s[0]);else if(null!==(s=e.modulo.exec(a)))i.push("%");else{if(null===(s=e.placeholder.exec(a)))throw new SyntaxError("[sprintf] unexpected placeholder");if(s[2]){r|=1;var o=[],u=s[2],l=[];if(null===(l=e.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(l[1]);""!==(u=u.substring(l[0].length));)if(null!==(l=e.key_access.exec(u)))o.push(l[1]);else{if(null===(l=e.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(l[1])}s[2]=o}else r|=2;if(3===r)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");i.push({placeholder:s[0],param_no:s[1],keys:s[2],sign:s[3],pad_char:s[4],align:s[5],width:s[6],precision:s[7],type:s[8]})}a=a.substring(s[0].length)}return n[t]=i}(s),arguments)}function s(e,s){return t.apply(null,[e].concat(s||[]))}var n=Object.create(null);B=t,T=s,"undefined"!=typeof window&&(window.sprintf=t,window.vsprintf=s,"function"==typeof define&&define.amd&&define((function(){return{sprintf:t,vsprintf:s}})))}();!function(e,t){var s,n,a=0;function i(){var i,r,o=s,u=arguments.length;e:for(;o;){if(o.args.length===arguments.length){for(r=0;r<u;r++)if(o.args[r]!==arguments[r]){o=o.next;continue e}return o!==s&&(o===n&&(n=o.prev),o.prev.next=o.next,o.next&&(o.next.prev=o.prev),o.next=s,o.prev=null,s.prev=o,s=o),o.val}o=o.next}for(i=new Array(u),r=0;r<u;r++)i[r]=arguments[r];return o={args:i,val:e.apply(null,i)},s?(s.prev=o,o.next=s):n=o,a===t.maxSize?(n=n.prev).next=null:a++,s=o,o.val}t=t||{},i.clear=function(){s=null,n=null,a=0}}(console.error);var j,V,P,L;function O(e){for(var t,s,n,a,i=[],r=[];t=e.match(L);){for(s=t[0],(n=e.substr(0,t.index).trim())&&i.push(n);a=r.pop();){if(P[s]){if(P[s][0]===a){s=P[s][1]||s;break}}else if(V.indexOf(a)>=0||j[a]<j[s]){r.push(a);break}i.push(a)}P[s]||r.push(s),e=e.substr(t.index+s.length)}return(e=e.trim())&&i.push(e),i.concat(r.reverse())}j={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},V=["(","?"],P={")":["("],":":["?","?:"]},L=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var Q={"!":function(e){return!e},"*":function(e,t){return e*t},"/":function(e,t){return e/t},"%":function(e,t){return e%t},"+":function(e,t){return e+t},"-":function(e,t){return e-t},"<":function(e,t){return e<t},"<=":function(e,t){return e<=t},">":function(e,t){return e>t},">=":function(e,t){return e>=t},"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},"&&":function(e,t){return e&&t},"||":function(e,t){return e||t},"?:":function(e,t,s){if(e)throw t;return s}};function R(e,t){var s,n,a,i,r,o,u=[];for(s=0;s<e.length;s++){if(r=e[s],i=Q[r]){for(n=i.length,a=Array(n);n--;)a[n]=u.pop();try{o=i.apply(null,a)}catch(e){return e}}else o=t.hasOwnProperty(r)?t[r]:+r;u.push(o)}return u[0]}function q(e){var t=O(e);return function(e){return R(t,e)}}var N={contextDelimiter:"",onMissingKey:null};function H(e,t){var s;for(s in this.data=e,this.pluralForms={},this.options={},N)this.options[s]=void 0!==t&&s in t?t[s]:N[s]}H.prototype.getPluralForm=function(e,t){var s,n,a,i,r=this.pluralForms[e];return r||("function"!=typeof(a=(s=this.data[e][""])["Plural-Forms"]||s["plural-forms"]||s.plural_forms)&&(n=function(e){var t,s,n;for(t=e.split(";"),s=0;s<t.length;s++)if(0===(n=t[s].trim()).indexOf("plural="))return n.substr(7)}(s["Plural-Forms"]||s["plural-forms"]||s.plural_forms),i=q(n),a=function(e){return+i({n:e})}),r=this.pluralForms[e]=a),r(t)},H.prototype.dcnpgettext=function(e,t,s,n,a){var i,r,o;return i=void 0===a?0:this.getPluralForm(e,a),r=s,t&&(r=t+this.options.contextDelimiter+s),(o=this.data[e][r])&&o[i]?o[i]:(this.options.onMissingKey&&this.options.onMissingKey(s,e),0===i?s:n)};const $={plural_forms:e=>1===e?0:1},z=/^i18n\.(n?gettext|has_translation)(_|$)/;var U=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)};var G=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)};var Y=function(e,t){return function(s,n,a,i=10){const r=e[t];if(!G(s))return;if(!U(n))return;if("function"!=typeof a)return void console.error("The hook callback must be a function.");if("number"!=typeof i)return void console.error("If specified, the hook priority must be a number.");const o={callback:a,priority:i,namespace:n};if(r[s]){const e=r[s].handlers;let t;for(t=e.length;t>0&&!(i>=e[t-1].priority);t--);t===e.length?e[t]=o:e.splice(t,0,o),r.__current.forEach((e=>{e.name===s&&e.currentIndex>=t&&e.currentIndex++}))}else r[s]={handlers:[o],runs:0};"hookAdded"!==s&&e.doAction("hookAdded",s,n,a,i)}};var Z=function(e,t,s=!1){return function(n,a){const i=e[t];if(!G(n))return;if(!s&&!U(a))return;if(!i[n])return 0;let r=0;if(s)r=i[n].handlers.length,i[n]={runs:i[n].runs,handlers:[]};else{const e=i[n].handlers;for(let t=e.length-1;t>=0;t--)e[t].namespace===a&&(e.splice(t,1),r++,i.__current.forEach((e=>{e.name===n&&e.currentIndex>=t&&e.currentIndex--})))}return"hookRemoved"!==n&&e.doAction("hookRemoved",n,a),r}};var K=function(e,t){return function(s,n){const a=e[t];return void 0!==n?s in a&&a[s].handlers.some((e=>e.namespace===n)):s in a}};var X=function(e,t,s=!1){return function(n,...a){const i=e[t];i[n]||(i[n]={handlers:[],runs:0}),i[n].runs++;const r=i[n].handlers;if(!r||!r.length)return s?a[0]:void 0;const o={name:n,currentIndex:0};for(i.__current.push(o);o.currentIndex<r.length;){const e=r[o.currentIndex].callback.apply(null,a);s&&(a[0]=e),o.currentIndex++}return i.__current.pop(),s?a[0]:void 0}};var J=function(e,t){return function(){var s;const n=e[t];return null!==(s=n.__current[n.__current.length-1]?.name)&&void 0!==s?s:null}};var W=function(e,t){return function(s){const n=e[t];return void 0===s?void 0!==n.__current[0]:!!n.__current[0]&&s===n.__current[0].name}};var ee=function(e,t){return function(s){const n=e[t];if(G(s))return n[s]&&n[s].runs?n[s].runs:0}};class te{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=Y(this,"actions"),this.addFilter=Y(this,"filters"),this.removeAction=Z(this,"actions"),this.removeFilter=Z(this,"filters"),this.hasAction=K(this,"actions"),this.hasFilter=K(this,"filters"),this.removeAllActions=Z(this,"actions",!0),this.removeAllFilters=Z(this,"filters",!0),this.doAction=X(this,"actions"),this.applyFilters=X(this,"filters",!0),this.currentAction=J(this,"actions"),this.currentFilter=J(this,"filters"),this.doingAction=W(this,"actions"),this.doingFilter=W(this,"filters"),this.didAction=ee(this,"actions"),this.didFilter=ee(this,"filters")}}const se=new te,{addAction:ne,addFilter:ae,removeAction:ie,removeFilter:re,hasAction:oe,hasFilter:ue,removeAllActions:le,removeAllFilters:de,doAction:ce,applyFilters:he,currentAction:pe,currentFilter:me,doingAction:ge,doingFilter:ve,didAction:fe,didFilter:ye,actions:_e,filters:ke}=se,Ce=((e,t,s)=>{const n=new H({}),a=new Set,i=()=>{a.forEach((e=>e()))},r=(e,t="default")=>{n.data[t]={...n.data[t],...e},n.data[t][""]={...$,...n.data[t]?.[""]},delete n.pluralForms[t]},o=(e,t)=>{r(e,t),i()},u=(e="default",t,s,a,i)=>(n.data[e]||r(void 0,e),n.dcnpgettext(e,t,s,a,i)),l=(e="default")=>e,d=(e,t,n)=>{let a=u(n,t,e);return s?(a=s.applyFilters("i18n.gettext_with_context",a,e,t,n),s.applyFilters("i18n.gettext_with_context_"+l(n),a,e,t,n)):a};if(e&&o(e,t),s){const e=e=>{z.test(e)&&i()};s.addAction("hookAdded","core/i18n",e),s.addAction("hookRemoved","core/i18n",e)}return{getLocaleData:(e="default")=>n.data[e],setLocaleData:o,addLocaleData:(e,t="default")=>{n.data[t]={...n.data[t],...e,"":{...$,...n.data[t]?.[""],...e?.[""]}},delete n.pluralForms[t],i()},resetLocaleData:(e,t)=>{n.data={},n.pluralForms={},o(e,t)},subscribe:e=>(a.add(e),()=>a.delete(e)),__:(e,t)=>{let n=u(t,void 0,e);return s?(n=s.applyFilters("i18n.gettext",n,e,t),s.applyFilters("i18n.gettext_"+l(t),n,e,t)):n},_x:d,_n:(e,t,n,a)=>{let i=u(a,void 0,e,t,n);return s?(i=s.applyFilters("i18n.ngettext",i,e,t,n,a),s.applyFilters("i18n.ngettext_"+l(a),i,e,t,n,a)):i},_nx:(e,t,n,a,i)=>{let r=u(i,a,e,t,n);return s?(r=s.applyFilters("i18n.ngettext_with_context",r,e,t,n,a,i),s.applyFilters("i18n.ngettext_with_context_"+l(i),r,e,t,n,a,i)):r},isRTL:()=>"rtl"===d("ltr","text direction"),hasTranslation:(e,t,a)=>{const i=t?t+""+e:e;let r=!!n.data?.[null!=a?a:"default"]?.[i];return s&&(r=s.applyFilters("i18n.has_translation",r,e,t,a),r=s.applyFilters("i18n.has_translation_"+l(a),r,e,t,a)),r}}})(void 0,void 0,se);Ce.getLocaleData.bind(Ce),Ce.setLocaleData.bind(Ce),Ce.resetLocaleData.bind(Ce),Ce.subscribe.bind(Ce);const Ee=Ce.__.bind(Ce);Ce._x.bind(Ce),Ce._n.bind(Ce),Ce._nx.bind(Ce),Ce.isRTL.bind(Ce),Ce.hasTranslation.bind(Ce);class be{constructor(){this.setCardNumberMask(),this.setCardOwnerMask(),this.setCardCodeMask(),this.setCardDateMask(),this.manageTokenSelect()}setCardNumberMask(){const e=document.querySelector("#wvp-card-number");e&&(e.classList.contains("wvp-block-field")||l(e,{mask:"0000 0000 0000 0000"}),this.handleCardBrand(e),e.addEventListener("input",(()=>{this.handleCardBrand(e)})))}setCardOwnerMask(){const e=document.querySelector("#wvp-card-owner");if(e&&!e.classList.contains("wvp-block-field")){const t=l(e,{mask:/^[A-Za-z\s]*$/});e.addEventListener("input",(()=>{e.value=e.value.toUpperCase(),t.updateValue()}))}}setCardDateMask(){const e=document.querySelector("#wvp-card-date");e&&!e.classList.contains("wvp-block-field")&&l(e,{mask:"00/00"})}setCardCodeMask(){const e=document.querySelector("#wvp-card-code");e&&(e.classList.contains("wvp-block-field")||l(e,{mask:"0000"}),e.addEventListener("input",(()=>{this.setCodeBrand(e)})))}handleCardBrand(e){const t=this.getBrands(),s=e.value.replace(/\s/g,"");let n;!s||e.value.length<16||(this.resetInstallmentsError(),t.forEach((e=>{if(e.regex.test(s)&&!n)return n=e,this.setCardBrand(e.name,e.code),void this.getCardInstallments()})),n||(this.setCardBrand("mono/generic",1),this.showInstallmentsError()))}showInstallmentsError(){const e=document.querySelector("#wvp-installments-error");e&&(e.innerText=Ee("Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.","vindi-pagamentos"),e.classList.add("active"))}resetInstallmentsError(){const e=document.querySelector("#wvp-installments-error");e&&(e.innerText="",e.classList.remove("active"))}getBrands(){return[{code:16,name:"elo",regex:/^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/},{code:3,name:"visa",regex:/^4[0-9]{12}(?:[0-9]{3})?$/},{code:4,name:"mastercard",regex:/^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/},{code:5,name:"amex",regex:/^3[47][0-9]{13}$/},{code:25,name:"hipercard",regex:/^(606282|3841\d{2}|60(?!11)\d{2})\d{10}$/},{code:20,name:"hiper",regex:/^(637095|637599|637612|637609|637598)\d*$/}]}setCardBrand(e,t){const s=document.querySelector("#wvp-brand-icon"),n=document.querySelector("#wvp-card-brand");if(s){const t=s.getAttribute("data-img");t&&(s.src=s.src.replace(t,e),s.setAttribute("data-img",e))}n&&(n.value=t)}setCodeBrand(e){const t=document.querySelector("#wvp-cvv-icon"),s=e.length<3?"mono/cvv":"cvv";if(t){const e=t.getAttribute("data-img");e&&(t.src=t.src.replace(e,s),t.setAttribute("data-img",s))}}manageTokenSelect(){jQuery('input[name="wc-vindi-pagamentos-credit-payment-token"]').on("change",(e=>{jQuery(e.target).is(":checked")&&"new"!==e.target.value&&this.getCardInstallments(e.target.value);document.querySelector("#wvp-card-installments").innerHTML=""}))}getCardInstallments(e=null){if(!document.querySelector("#wvp-card-installments"))return;const t=document.querySelector("#wvp-card-brand"),s=document.querySelector("#wvp-card-nonce"),n=document.querySelector("#wvp-cart-total");this.resetInstallmentsError(),this.setRequestLoader();const a={price:n.value,_wpnonce:s.value,security:wc_checkout_params.update_order_review_nonce};e?a.token=e:a.brand=t.value;const i=e,r=jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"),method:"POST",contentType:"application/json",data:JSON.stringify(a),success:function(e){if(e.success){const t=e.data.installments,s=document.querySelector("#wvp-card-installments"),n=document.querySelector("#wvp-installments-error");e.data.message&&(n.textContent=e.data.message,n.classList.add("active")),s.innerHTML="";for(const e in t){const n=document.createElement("option");n.value=e,n.innerText=t[e],s.appendChild(n)}}},error:function(e,t,s){if("abort"!==t){const e=document.querySelector("#wvp-installments-error");if(e&&""===e.innerHTML){const t=document.createElement("span");t.innerText=s.message,e.appendChild(t),e.classList.add("active")}}},complete:()=>{jQuery(".wvp-credit-fields").removeClass("processing").unblock()}});jQuery('input[name="wc-vindi-pagamentos-credit-payment-token"]').on("change",(e=>{jQuery(e.target).is(":checked")&&e.target.value!==i&&r.abort()}))}setRequestLoader(){jQuery(".wvp-credit-fields").addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}}class Se{constructor(){this.setDocumentMask(),this.handlerPersonType(),this.setDocumentNameAttribute(),this.hideGateway(),this.setFingerPrintEnviroment(),this.hideBlockDocumentField(),this.selectedGateway()}hideBlockDocumentField(){const e=document.querySelector("#vindi-pagamentos__billing_persontype");e&&e.addEventListener("change",(()=>{2==e.value?this.handlerDocumentField(!1):this.handlerDocumentField(!0)}))}setFingerPrintEnviroment(){const e=document.querySelector(".wvp-enviroment"),t=document.querySelectorAll(".wvp-fingerprint");if(window.yapay&&e){const s=window.yapay.FingerPrint({env:e.value});t.forEach((e=>{e.value=s.getFingerPrint()}))}}setDocumentMask(){document.querySelectorAll(".wc-vindi-customer-document").forEach((e=>{e.classList.contains("wvp-block-field")&&l(e,{mask:"000.000.000-00"})}))}handlerPersonType(){const e=document.querySelector("#billing_persontype");e&&(this.handlerDocumentField("1"===e.value),jQuery("#billing_persontype").change((()=>{this.handlerDocumentField("1"===e.value)})))}handlerDocumentField(e){document.querySelectorAll(".vindi-pagamentos-document").forEach((t=>{e?t.classList.add("vindi-pagamentos-document-hidden"):t.classList.remove("vindi-pagamentos-document-hidden")}))}setDocumentNameAttribute(){document.querySelectorAll(".wc-vindi-customer-document").forEach((e=>{e.addEventListener("focusin",(()=>{this.unsetDocumentNameAttribute(),e.setAttribute("name","wc-vindi-customer-document")}))}))}unsetDocumentNameAttribute(){document.querySelectorAll(".wc-vindi-customer-document").forEach((e=>{e.removeAttribute("name")}))}hideGateway(){document.querySelectorAll(".wvp-hidden-gateway").forEach((e=>{const t=document.querySelector(`.payment_method_${e.value}`);t?t.classList.add("wvp-hidden-gateway"):this.hideBlockGateways(e)}))}hideBlockGateways(e){const t=document.querySelector(`#hidden-${e.value}`);if(t){t.parentElement.parentElement.classList.add("wvp-hidden-gateway")}}selectedGateway(){document.querySelectorAll('form.checkout input[name^="payment_method"]').forEach((e=>{e.addEventListener("change",(()=>{const e=new Event("update_checkout");document.body.dispatchEvent(e)}))}))}}class we{constructor(){this.handleBankBrands()}handleBankBrands(){const e=document.querySelectorAll(".wvp-transfer-brand"),t=document.querySelector("#wvp-transfer-bank");t&&e.forEach((e=>{e.addEventListener("click",(()=>{this.clearSelectedBrands(),e.classList.add("wvp-transfer-brand-selected"),t.value=e.getAttribute("data-bank")}))}))}clearSelectedBrands(){document.querySelectorAll(".wvp-transfer-brand-selected").forEach((e=>{e.classList.remove("wvp-transfer-brand-selected")}))}}class Fe{constructor(){this.isOrderPayPage()&&(this.handlePersonType(),this.handleDocumentMask(),this.validateFormFields(),this.fillFormFields())}handlePersonType(){const e=document.querySelector("#billing_persontype");e&&(this.selectPersonType(),e.addEventListener("change",(()=>{this.selectPersonType()})))}selectPersonType(){const e=document.querySelector("#billing_persontype"),t=document.querySelector("#billing_cpf_field"),s=document.querySelector("#billing_cnpj_field"),n=document.querySelector("#billing_company_field");"1"===e.value&&(t.style.display="block",s.style.display="none",n.style.display="none"),"2"===e.value&&(t.style.display="none",s.style.display="block",n.style.display="block")}isOrderPayPage(){return!!new URLSearchParams(location.href).has("vindi-payment-link")}handleDocumentMask(){const e=document.querySelector("#billing_cpf"),t=document.querySelector("#billing_cnpj"),s=document.querySelector("#billing_phone");e&&l(e,{mask:"000.000.000-00"}),t&&l(t,{mask:"00.000.000/0000-00"}),s&&l(s,{mask:"(00) 0 0000-0000"})}validateFormFields(){const e=document.querySelector(".woocommerce > #order_review");e&&(this.setRequiredAttribute(),e.addEventListener("submit",(t=>{t.preventDefault(),this.saveFormData(),e.reportValidity()?(this.handleWoocommerceLoader(!0),e.submit()):setTimeout((()=>{this.handleWoocommerceLoader(!1)}),500)})))}handleWoocommerceLoader(e=!0){document.querySelectorAll(".blockUI").forEach((t=>{t.style.display="block",e||(t.style.display="none")}))}setRequiredAttribute(){this.getFormFields(!0).forEach((e=>{const t=document.querySelector(`#billing_${e}`);t&&t.setAttribute("required",!0)}))}getFormFields(e=!1){let t=["first_name","last_name","person_type","country","postcode","address_1","neighborhood","number","city","phone","email"];return e?t:t.concat(["address_2","cpf","cnpj"])}saveFormData(){const e=this.getFormFields(),t={};e.forEach((e=>{const s=document.querySelector(`#billing_${e}`);s&&(t[e]=s.value)})),localStorage.setItem("vindi-pagamento-form-data",JSON.stringify(t))}fillFormFields(){const e=localStorage.getItem("vindi-pagamento-form-data");if(e){const t=JSON.parse(e);for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const s=document.querySelector(`#billing_${e}`);s&&(s.value=t[e])}}}}class Ae{constructor(){this.handleCopyButton()}handleCopyButton(){document.querySelectorAll(".copy-button").forEach((e=>{e.addEventListener("click",(()=>{const t=e.getAttribute("data-text"),s=document.querySelector(".copy-input");try{navigator.clipboard.writeText(t),s.select()}catch(e){s.select(),document.execCommand("copy")}}))}))}}class xe{constructor(e){this.modalSelector=e}initUI(){0===jQuery(".order-total-section .total-loader").length&&jQuery(".order-total-section").append('<div class="total-loader" style="display: none;"><div class="spinner"></div></div>')}showTotalLoader(){jQuery(".order-total-section .total-loader").show(),jQuery(".total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value").css("opacity","0.5")}hideTotalLoader(){jQuery(".order-total-section .total-loader").hide(),jQuery(".total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value").css("opacity","1")}showCouponMessage(e,t){const s=jQuery(".coupon-message");s.text(e),s.removeClass("success error"),t&&s.addClass(t)}displayModal(){jQuery(this.modalSelector).css("display","block")}hideModal(){jQuery(this.modalSelector).hide()}setRequestLoader(){jQuery(".wvp-credit-fields, .saved-card-cvv").addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}removeRequestLoader(){jQuery(".wvp-credit-fields, .saved-card-cvv").removeClass("processing").unblock()}updateProductInfo(e,t){jQuery(".product-info").html(`\n <h3>${e}</h3>\n <p>Valor: ${t}</p>\n `)}}class Me{constructor(e,t){this.modalSelector=e,this.uiManager=t}initializeCreditCardHandling(){jQuery(".wvp-credit-fields-modal").hide(),jQuery('input[name="payment_method"]').on("change",(e=>{const t=jQuery(e.currentTarget);jQuery(".wvp-credit-fields-modal").slideUp(),"vindi-pagamentos-credit"!==t.val()||t.data("token")||(t.closest(".payment-method").find(".wvp-credit-fields-modal").slideDown(),this.onPaymentMethodChange(null))})),jQuery("#wvp-card-number").on("input",(()=>{this.handleCardBrand()}))}initializeCvvHandling(){jQuery(".saved-card-cvv").hide(),jQuery('input[name="payment_method"]').on("change",(e=>{const t=jQuery(e.currentTarget);jQuery(".saved-card-cvv").slideUp(),"vindi-pagamentos-credit"===t.val()&&t.data("token")&&(t.closest(".saved-card").find(".saved-card-cvv").slideDown(),this.onPaymentMethodChange(t.data("token")))})),jQuery(".saved-card-cvv-input").on("input",(function(){this.value=this.value.replace(/[^0-9]/g,"")}))}handleCardBrand(){const e=jQuery("#wvp-card-number");if(!e.length)return;const t=e.val().replace(/\s/g,"");if(t.length<6)return;let s=!1;[{code:16,name:"elo",regex:/^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/},{code:3,name:"visa",regex:/^4[0-9]{12}(?:[0-9]{3})?$/},{code:4,name:"mastercard",regex:/^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/},{code:5,name:"amex",regex:/^3[47][0-9]{13}$/},{code:25,name:"hipercard",regex:/^(606282|3841\d{2}|60(?!11)\d{2})\d{10}$/},{code:20,name:"hiper",regex:/^(637095|637599|637612|637609|637598)\d*$/}].forEach((e=>{e.regex.test(t)&&!s&&(s=!0,this.setCardBrand(e.name,e.code),this.onPaymentMethodChange(null))})),s||(this.setCardBrand("mono/generic",1),this.showInstallmentsError("Não foi possível reconhecer a bandeira do cartão."))}setCardBrand(e,t){const s=jQuery("#wvp-brand-icon"),n=jQuery("#wvp-card-brand");if(s.length){const t=s.attr("data-img");t&&(s.attr("src",s.attr("src").replace(t,e)),s.attr("data-img",e))}n.length&&n.val(t)}showInstallmentsError(e){const t=jQuery("#wvp-installments-error");t.length&&t.html(e).addClass("active")}resetInstallmentsError(){const e=jQuery("#wvp-installments-error");e.length&&e.html("").removeClass("active")}onPaymentMethodChange(e){}validateAndGetPaymentData(){const e=jQuery('input[name="payment_method"]:checked');if(!e.length)return{isValid:!1,message:"Por favor, selecione uma forma de pagamento."};const t=e.val(),s=e.data("token");let n={};if("vindi-pagamentos-credit"===t)if(s){const t=jQuery(`#saved_card_cvv_${s}`).val();if(!t)return{isValid:!1,message:"Por favor, informe o código CVV do cartão."};n={token_id:s,cvv:t,last4:e.data("last4"),expiry:e.data("expiry")}}else{const e=jQuery("#wvp-card-owner").val(),t=jQuery("#wvp-card-number").val(),s=jQuery("#wvp-card-date").val(),a=jQuery("#wvp-card-code").val(),i=jQuery("#wvp-card-brand").val(),r=jQuery("#wvp-card-installments").val()||"1";if(!(e&&t&&s&&a))return{isValid:!1,message:"Por favor, preencha todos os dados do cartão de crédito."};n={owner:e,number:t,date:s,code:a,brand:i,installments:r}}return{isValid:!0,data:{payment_method:t,card_data:n}}}}class Ie{constructor(){this.personType="1"}initializePersonTypeHandling(){jQuery("#billing-pf-fields").show(),jQuery("#billing-pj-fields").hide(),jQuery("#billing-pf-fields input").prop("required",!0),jQuery("#billing-pj-fields input").prop("required",!1),this.initializeCpfMask(),jQuery('input[name="billing_persontype"]').on("change",(e=>{const t="1"===e.target.value;this.personType=e.target.value,jQuery("#billing-pf-fields").toggle(t),jQuery("#billing-pj-fields").toggle(!t),jQuery("#billing-pf-fields input").prop("required",t),jQuery("#billing-pj-fields input").prop("required",!t),t?this.initializeCpfMask():this.initializeCnpjMask()}))}initializeCpfMask(){const e=document.querySelector('input[name="billing_cpf"]');e&&"function"==typeof IMask&&IMask(e,{mask:"000.000.000-00"})}initializeCnpjMask(){const e=document.querySelector('input[name="billing_cnpj"]');e&&"function"==typeof IMask&&IMask(e,{mask:"00.000.000/0000-00"})}validateAndGetBillingData(){const e=jQuery('input[name="billing_persontype"]:checked').val()||"1",t={persontype:e};let s=!0;const n="1"===e?"#billing-pf-fields":"#billing-pj-fields";return jQuery(`${n} .missing-data input`).each((function(){const e=jQuery(this),n=e.attr("name").replace("billing_",""),a=e.val().trim();a?(e.removeClass("error"),t[n]=a):(e.addClass("error"),s=!1)})),jQuery(`${n} .has-data`).each((function(){const e=jQuery(this),s=e.find("input");if(s.length){const n=s.attr("name").replace("billing_",""),a=s.val()||e.find(".field-display").text().split(":")[1].trim();t[n]=a}})),console.log("=== DEBUG BILLING DATA ==="),console.log("Person Type:",e),console.log("Visible Container:",n),console.log("Billing Data Collected:",t),console.log("========================="),{isValid:s,data:t,message:s?"":"Por favor, preencha todos os campos obrigatórios."}}}class Be{constructor(e,t){this.modalSelector=e,this.uiManager=t,this.currentXhr=null}initializeInstallmentsHandling(){jQuery('input[name="payment_method"]').on("change",(e=>{const t=jQuery(e.currentTarget);"vindi-pagamentos-credit"===t.val()&&t.data("token")&&this.getInstallments(t.data("token"))}))}getInstallments(e=null,t=null){this.currentXhr&&this.currentXhr.abort();let s=t;if(!s){const e=jQuery(".total-value");if(e.length){const t=e.text().replace(/[^\d,.-]/g,"").replace(",",".");s=parseFloat(t)}if(!s||isNaN(s)){s=parseFloat(jQuery("#wvp-cart-total-price").val()||0)*parseInt(jQuery("#vindi-one-click-quantity").val()||1)}}const n=jQuery("#wvp-card-nonce").val();this.resetInstallmentsError(),this.uiManager.setRequestLoader();const a={price:s.toFixed(2),_wpnonce:n||vindiOneClick.nonce,security:"undefined"!=typeof wc_checkout_params?wc_checkout_params.update_order_review_nonce:vindiOneClick.nonce};e?a.token=e:jQuery("#wvp-card-brand").length&&jQuery("#wvp-card-brand").val()&&(a.brand=jQuery("#wvp-card-brand").val());const i="undefined"!=typeof wc_checkout_params?wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"):vindiOneClick.ajax_url+"?wc-ajax=checkout_installments";this.currentXhr=jQuery.ajax({url:i,method:"POST",contentType:"application/json",data:JSON.stringify(a),success:t=>{if(t.success){const s=t.data.installments;let n;n=e?`.saved-card:has(input[data-token="${e}"]) select[name="wvp-installments"]`:"#wvp-card-installments";const a=jQuery(n);t.data.message&&this.showInstallmentsMessage(t.data.message),a.length?a.each((function(){const e=jQuery(this);e.empty(),Object.entries(s).forEach((([t,s])=>{e.append(jQuery("<option>",{value:t,text:s}))}))})):console.warn("Seletor de parcelas não encontrado:",n)}else this.showInstallmentsError(t.data.message||"Erro ao carregar parcelas")},error:(e,t,s)=>{"abort"!==t&&this.showInstallmentsError("Não foi possível carregar as parcelas. Tente novamente.")},complete:()=>{this.uiManager.removeRequestLoader()}})}showInstallmentsMessage(e){const t=jQuery("#wvp-installments-error");t.length&&e&&t.html(e).addClass("active")}showInstallmentsError(e){const t=jQuery("#wvp-installments-error");t.length&&t.html(e).addClass("active")}resetInstallmentsError(){const e=jQuery("#wvp-installments-error");e.length&&e.html("").removeClass("active")}}class Te{constructor(e,t,s){this.mainController=e,this.modalSelector=t,this.uiManager=s,this.appliedCoupons=[]}initializeCouponHandling(){0===jQuery(".applied-coupons-container").length&&jQuery(".coupon-form").after('<div class="applied-coupons-container"></div>'),jQuery("#vindi-apply-coupon").on("click",(()=>{this.applyCoupon()})),jQuery("#vindi-coupon-code").on("keypress",(e=>{13===e.which&&(e.preventDefault(),this.applyCoupon())}))}applyCoupon(){const e=jQuery("#vindi-coupon-code").val().trim();if(!e)return void this.uiManager.showCouponMessage("Por favor, informe um código de cupom.","error");const t=jQuery("#vindi-apply-coupon"),s=jQuery(".coupon-loader");t.prop("disabled",!0),s.show(),this.uiManager.showCouponMessage("",""),this.uiManager.showTotalLoader();const n=this.mainController.getProductInfo(),a=jQuery('input[name="payment_method"]:checked').val()||"";jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"validate_one_click_coupon",nonce:vindiOneClick.nonce,product_id:n.productId,quantity:n.quantity,payment_method:a,coupon_code:e,existing_coupons:[]},success:t=>{t.success?(this.uiManager.showCouponMessage(t.data.messages.coupon_applied||"Cupom aplicado com sucesso!","success"),t.data.coupon_codes?this.appliedCoupons=t.data.coupon_codes:t.data.new_coupon&&(this.appliedCoupons=[e]),jQuery("#vindi-coupon-code").val(""),this.updateAppliedCouponsDisplay(t.data.applied_coupons||[]),this.mainController.onCouponApplied(t.data)):(this.uiManager.showCouponMessage(t.data||"Cupom inválido ou não aplicável.","error"),this.uiManager.hideTotalLoader())},error:e=>{this.uiManager.showCouponMessage("Erro","error"),this.uiManager.hideTotalLoader()},complete:()=>{t.prop("disabled",!1),s.hide()}})}removeCoupon(e){this.appliedCoupons=[],this.uiManager.showCouponMessage("Cupom removido.","success"),jQuery(".applied-coupons-container").empty(),jQuery(".coupon-discount-row").hide(),jQuery(".coupon-discount-value").html(""),jQuery(".total-discount-row").hide(),jQuery(".total-discount-value").html("");const t=this.mainController.getProductInfo(),s=jQuery('input[name="payment_method"]:checked').val()||"";this.uiManager.showTotalLoader();const n=jQuery(".subtotal-value").text();jQuery(".total-value").html(n),jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"calculate_one_click_discount",nonce:vindiOneClick.nonce,product_id:t.productId,payment_method:s,quantity:t.quantity,coupon_codes:[]},success:e=>{e.success&&(this.mainController.onCouponRemoved(e.data),jQuery(".applied-coupons-container").empty())},error:()=>{this.uiManager.showCouponMessage("Erro","error"),this.uiManager.hideTotalLoader()},complete:()=>{this.uiManager.hideTotalLoader()}})}updateAppliedCouponsDisplay(e){const t=jQuery(".applied-coupons-container");if(t.empty(),e.length){const s=jQuery("<h4>").text("Cupom aplicado:");t.append(s);const n=jQuery('<ul class="applied-coupons-list">'),a=e[0],i=jQuery('<li class="applied-coupon-item">'),r=jQuery('<span class="coupon-code">').text(a.code),o=jQuery('<button type="button" class="remove-coupon">').text("×");o.on("click",(()=>this.removeCoupon(a.code))),i.append(r),a.description&&a.description!==a.code&&i.append(" - ",jQuery('<span class="coupon-description">').text(a.description)),i.append(o),n.append(i),t.append(n)}}getAppliedCoupons(){return this.appliedCoupons}}class De{constructor(e,t,s){this.modalSelector=e,this.mainController=t,this.uiManager=s}initializeDiscountHandling(){jQuery('input[name="payment_method"]').on("change",(e=>{this.uiManager.showTotalLoader(),this.updateOrderTotal(jQuery(e.currentTarget).val())}))}initializeQuantityHandling(){const e=()=>{const e=jQuery('input[name="payment_method"]:checked').val()||"";e&&(this.uiManager.showTotalLoader(),this.updateOrderTotal(e),setTimeout((()=>{"vindi-pagamentos-credit"===e&&this.mainController.updateInstallmentsForSelectedPayment()}),300))};jQuery(".quantity-decrease").on("click",(()=>{const t=jQuery("#vindi-one-click-quantity"),s=parseInt(t.val());s>1&&(t.val(s-1),e())})),jQuery(".quantity-increase").on("click",(()=>{const t=jQuery("#vindi-one-click-quantity"),s=parseInt(t.val());s<parseInt(t.attr("max"))&&(t.val(s+1),e())})),jQuery("#vindi-one-click-quantity").on("change",e)}updateOrderTotal(e){const t=this.mainController.getProductInfo(),s=this.mainController.getAppliedCoupons();this.uiManager.showTotalLoader(),jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"calculate_one_click_discount",nonce:vindiOneClick.nonce,product_id:t.productId,payment_method:e,quantity:t.quantity,coupon_codes:s},success:e=>{e.success&&this.updateOrderTotals(e.data)},complete:()=>{this.uiManager.hideTotalLoader()}})}updateOrderTotals(e){jQuery(".payment-discount-row").hide(),jQuery(".payment-discount-value").html(""),jQuery(".coupon-discount-row").hide(),jQuery(".coupon-discount-value").html(""),jQuery(".total-discount-row").hide(),jQuery(".total-discount-value").html(""),jQuery(".subtotal-value").html(e.subtotal),jQuery(".total-value").html(e.total),void 0!==e.total_raw&&parseFloat(e.total_raw)<=0?(this.uiManager.showCouponMessage(e.messages.coupon_exceeds_total,"error"),jQuery("#vindi-process-quick-buy").prop("disabled",!0)):jQuery("#vindi-process-quick-buy").prop("disabled",!1),e.payment_discount&&parseFloat(e.payment_discount)>0&&(jQuery(".payment-discount-row").show(),jQuery(".payment-discount-value").html(e.payment_discount_formated));const t=this.mainController.getAppliedCoupons();t&&t.length>0&&e.coupon_discount&&parseFloat(e.coupon_discount)>0&&(jQuery(".coupon-discount-row").show(),jQuery(".coupon-label").html("Cupom de Desconto:"),jQuery(".coupon-discount-value").html(e.coupon_discount_formated)),e.has_discount&&e.discount&&parseFloat(e.has_discount)>0&&(jQuery(".total-discount-row").show(),jQuery(".total-discount-value").html(e.discount));const s=e.total,n=jQuery(".total-value").data("previous-value")||"";jQuery(".total-value").data("previous-value",s);if(n!==s||e.update_installments){"vindi-pagamentos-credit"===(jQuery('input[name="payment_method"]:checked').val()||"")&&setTimeout((()=>this.mainController.updateInstallmentsForSelectedPayment()),300)}this.uiManager.hideTotalLoader()}}class je{constructor(){"undefined"!=typeof vindiOneClick&&vindiOneClick&&(this.modalSelector="#vindi-one-click-modal",this.modal=jQuery(this.modalSelector),0!==this.modal.length&&(this.buyButton=jQuery(".vindi-one-click-buy"),this.closeBtn=jQuery(".vindi-modal-close"),this.processButton=jQuery("#vindi-process-quick-buy"),this.uiManager=new xe(this.modalSelector),this.formHandler=new Ie,this.paymentHandler=new Me(this.modalSelector,this.uiManager),this.installmentsManager=new Be(this.modalSelector,this.uiManager),this.couponManager=new Te(this,this.modalSelector,this.uiManager),this.orderTotalCalculator=new De(this.modalSelector,this,this.uiManager),this.paymentHandler.onPaymentMethodChange=e=>{this.installmentsManager.getInstallments(e)},this.init()))}init(){this.bindEvents(),this.uiManager.initUI(),this.paymentHandler.initializeCreditCardHandling(),this.paymentHandler.initializeCvvHandling(),this.formHandler.initializePersonTypeHandling(),this.formHandler.initializeCpfMask(),this.installmentsManager.initializeInstallmentsHandling(),this.orderTotalCalculator.initializeDiscountHandling(),this.orderTotalCalculator.initializeQuantityHandling(),this.couponManager.initializeCouponHandling()}bindEvents(){this.buyButton.on("click",(e=>{this.handleBuyButtonClick(e)})),this.closeBtn.on("click",(()=>this.handleCloseModal())),this.processButton.on("click",(()=>this.handleProcessPurchase()))}handleBuyButtonClick(e){e.preventDefault();this.buyButton.data("product-id");const t=jQuery("h1.product_title").text(),s=jQuery(".price .amount").text();this.uiManager.displayModal(),this.uiManager.updateProductInfo(t,s)}handleCloseModal(){this.uiManager.hideModal()}handleProcessPurchase(){const e=this.processButton,t=document.querySelector(".loading-spinner");e.prop("disabled",!0),t.style.display="block";const s=this.formHandler.validateAndGetBillingData();if(!s.isValid)return alert(s.message),e.prop("disabled",!1),void(t.style.display="none");const n=this.paymentHandler.validateAndGetPaymentData();if(!n.isValid)return alert(n.message),e.prop("disabled",!1),void(t.style.display="none");const a=this.getProductInfo();jQuery.ajax({url:vindiOneClick.ajax_url,type:"POST",data:{action:"process_one_click_buy",nonce:vindiOneClick.nonce,product_id:a.productId,quantity:a.quantity,payment_method:n.data.payment_method,card_data:n.data.card_data,billing_data:s.data,coupon_codes:this.getAppliedCoupons()},success:s=>{s.success?window.location.href=s.data.redirect:(alert(s.data||"Erro ao processar pagamento"),e.prop("disabled",!1),t.style.display="none")},error:()=>{alert("Erro ao processar pagamento. Por favor, tente novamente."),e.prop("disabled",!1),t.style.display="none"}})}getProductInfo(){return{productId:this.buyButton.data("product-id"),quantity:parseInt(jQuery("#vindi-one-click-quantity").val()||1)}}getAppliedCoupons(){return this.couponManager.getAppliedCoupons()}updateInstallmentsForSelectedPayment(){const e=jQuery('input[name="payment_method"]:checked');if(e.length&&"vindi-pagamentos-credit"===e.val()){const t=e.data("token");if(t)this.installmentsManager.getInstallments(t);else{jQuery("#wvp-card-brand").val()&&this.installmentsManager.getInstallments(null)}}}onCouponApplied(e){this.orderTotalCalculator.updateOrderTotals(e)}onCouponRemoved(e){this.orderTotalCalculator.updateOrderTotals(e,!0)}}class Ve{constructor(e={}){if(this.settings={ajaxUrl:e.ajaxUrl||("undefined"!=typeof ajaxurl?ajaxurl:"/wp-admin/admin-ajax.php"),nonce:e.nonce||"",...e},!this.settings.nonce){const e=document.querySelector('input[name="vindi-pagamento_nonce"]');e&&(this.settings.nonce=e.value)}this.init()}init(){this.initElements(),this.firstMethodSelect&&this.secondMethodSelect&&(this.setupEventListeners(),this.initializePaymentFields()),this.prepareFormSubmission(),this.initPaymentMethodListener("first"),this.initPaymentMethodListener("second")}initElements(){this.firstMethodSelect=document.getElementById("first_payment_method"),this.secondMethodSelect=document.getElementById("second_payment_method"),this.firstAmountInput=document.getElementById("first_payment_amount"),this.secondAmountInput=document.getElementById("second_payment_amount"),this.cartTotalInput=document.getElementById("cart_total"),this.errorDiv=document.getElementById("first-payment-amount-error")}setupEventListeners(){this.firstMethodSelect.addEventListener("change",(()=>{this.firstMethodValue=this.firstMethodSelect.value,this.updateSecondMethodOptions(this.firstMethodSelect.value),this.updatePaymentMethodFields(this.firstMethodSelect.value,"first")})),this.secondMethodSelect.addEventListener("change",(()=>{this.secondMethodValue=this.secondMethodSelect.value,this.updateFirstMethodOptions(this.secondMethodSelect.value),this.updatePaymentMethodFields(this.secondMethodSelect.value,"second")})),this.firstAmountInput&&this.secondAmountInput&&this.cartTotalInput&&this.firstAmountInput.addEventListener("input",(()=>{this.updateSecondAmount()})),document.addEventListener("updated_checkout",(()=>{setTimeout((()=>{const e=this.firstMethodSelect?.value,t=this.secondMethodSelect?.value;"credit_card"===e&&this.setupCreditCardFunctionality("first"),"credit_card"===t&&this.setupCreditCardFunctionality("second")}),500)})),document.addEventListener("input",(e=>{if(e.target&&"first_wvp-card-number"===e.target.id)try{this.handleCardBrandDetection(e.target,"first")}catch(e){console.warn("Erro ao detectar bandeira do primeiro cartão:",e)}if(e.target&&"second_wvp-card-number"===e.target.id)try{this.handleCardBrandDetection(e.target,"second")}catch(e){console.warn("Erro ao detectar bandeira do segundo cartão:",e)}}))}updateSecondMethodOptions(e){jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_get_compatible_methods"),type:"POST",data:{selected_method:e,target_field:"second",security:this.settings.nonce},success:e=>{if(e.success&&e.data&&(this.secondMethodSelect.innerHTML="",Object.keys(e.data).forEach((t=>{const s=document.createElement("option");s.value=t,s.textContent=e.data[t],this.secondMethodSelect.appendChild(s)})),this.secondMethodSelect.options.length>0)){Array.from(this.secondMethodSelect.options).some((e=>e.value===this.secondMethodValue))?this.secondMethodSelect.value=this.secondMethodValue:this.secondMethodSelect.options.length>0&&(this.secondMethodSelect.selectedIndex=0),this.updatePaymentMethodFields(this.secondMethodSelect.value,"second")}}})}updateFirstMethodOptions(e){jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_get_compatible_methods"),type:"POST",data:{selected_method:e,target_field:"first",security:this.settings.nonce},success:e=>{if(e.success&&e.data&&(this.firstMethodSelect.innerHTML="",Object.keys(e.data).forEach((t=>{const s=document.createElement("option");s.value=t,s.textContent=e.data[t],this.firstMethodSelect.appendChild(s)})),this.firstMethodSelect.options.length>0)){Array.from(this.firstMethodSelect.options).some((e=>e.value===this.firstMethodValue))?this.firstMethodSelect.value=this.firstMethodValue:this.firstMethodSelect.options.length>0&&(this.secondMethodSelect.selectedIndex=0),this.updatePaymentMethodFields(this.firstMethodSelect.value,"first")}}})}initializePaymentFields(){if(this.firstMethodSelect&&this.firstMethodSelect.value&&(this.updatePaymentMethodFields(this.firstMethodSelect.value,"first"),this.updateSecondMethodOptions(this.firstMethodSelect.value)),this.secondMethodSelect&&this.secondMethodSelect.value)this.updatePaymentMethodFields(this.secondMethodSelect.value,"second");else if(this.secondMethodSelect){const e=this.secondMethodSelect.options;e.length>0&&(this.secondMethodSelect.value=e[0].value,this.updatePaymentMethodFields(e[0].value,"second"))}this.updateSecondAmount()}updatePaymentMethodFields(e,t){if(!e)return;const s="first"===t?"payment-method-":"second-payment-method-";document.querySelectorAll(`.${t}-payment-method .payment-method-content`).forEach((e=>{e.style.display="none"}));const n=document.getElementById(`${s}${e}`);n?n.style.display="block":this.loadPaymentMethodFields(e,t),"credit_card"===e&&this.setupCreditCardFunctionality(t)}setupCreditCardFunctionality(e){if("first"===e){this.setCardNumberMask(e),this.setCardOwnerMask(e),this.setCardCodeMask(e),this.setCardDateMask(e),this.manageTokenSelect(e);const t=document.getElementById("first_wvp-card-number");t&&t.value&&this.detectCardBrand(t,"first")}else{this.setCardNumberMask(e),this.setCardOwnerMask(e),this.setCardDateMask(e),this.setCardCodeMask(e),this.manageTokenSelect(e);const t=document.getElementById("second_wvp-card-number");t&&t.value&&this.detectCardBrand(t,"second")}}loadPaymentMethodFields(e,t){const s="first"===t?this.firstAmountInput:this.secondAmountInput,n=s?s.value:"0,00",a=document.getElementById(`${t}-payment-method-fields`);a&&(a.innerHTML='<div class="loading">Carregando...</div>',jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_load_payment_method_fields"),type:"POST",data:{method:e,prefix:t+"_",amount:this.parseMoneyValue(n).toString(),security:this.settings.nonce},success:s=>{if(s.success&&s.data){const n="first"===t?"payment-method-"+e:"second-payment-method-"+e,i=document.getElementById(n);i&&i.remove();const r=document.createElement("div");r.id=n,r.className="payment-method-content "+t+"-payment-"+e,r.innerHTML=s.data,a.innerHTML="",a.appendChild(r),r.style.display="block","credit_card"===e&&(this.initCreditCardMasks(t),this.setupCreditCardFunctionality(t),this.initPaymentMethodListener(t))}else a.innerHTML="<p>Não foi possível carregar os campos para "+e+".</p>"},error:(t,s,n)=>{console.error(`Erro ao carregar campos para ${e}:`,n),a.innerHTML="<p>Erro ao carregar campos do método de pagamento.</p>"}}))}updateSecondAmount(){if(!this.firstAmountInput||!this.secondAmountInput||!this.cartTotalInput)return;let e=this.parseMoneyValue(this.firstAmountInput.value);const t=parseFloat(this.cartTotalInput.value)||0;e<=0||e>=t?(this.errorDiv&&(this.errorDiv.style.display="block"),this.firstAmountInput.classList.add("error")):(this.errorDiv&&(this.errorDiv.style.display="none"),this.firstAmountInput.classList.remove("error"));const s=Math.max(0,t-e);this.secondAmountInput.value=this.formatMoneyDisplay(s);const n=document.getElementById("second_payment_amount_original");n&&(n.value=s.toFixed(2));const a=document.getElementById("vindi_first_amount_for_installments"),i=document.getElementById("vindi_second_amount_for_installments");a&&(a.value=e.toFixed(2)),i&&(i.value=s.toFixed(2)),setTimeout((()=>{const e=this.firstMethodSelect.value,t=this.secondMethodSelect.value;if("credit_card"===e)try{this.getCardInstallments()}catch(e){console.warn("Erro ao atualizar parcelas do primeiro método:",e)}if("credit_card"===t)try{this.getSecondMethodInstallments()}catch(e){console.warn("Erro ao atualizar parcelas do segundo método:",e)}}),300)}formatMoneyDisplay(e){return e.toFixed(2).replace(".",",")}parseMoneyValue(e){return e&&parseFloat(e.toString().replace(/[^\d,.-]/g,"").replace(",","."))||0}initCreditCardMasks(e=""){const t=e?e+"_":"",s=document.getElementById(t+"wvp-card-number");s&&s.addEventListener("input",(function(){let e=this.value.replace(/\D/g,""),t="";for(let s=0;s<e.length;s++)s>0&&s%4==0&&(t+=" "),t+=e[s];this.value=t.substring(0,19)}));const n=document.getElementById(t+"wvp-card-date");n&&n.addEventListener("input",(function(){let e=this.value.replace(/\D/g,""),t="";t=e.length>2?e.substring(0,2)+"/"+e.substring(2,4):e,this.value=t.substring(0,5)}));const a=document.getElementById(t+"wvp-card-code");a&&a.addEventListener("input",(function(){let e=this.value.replace(/\D/g,"");this.value=e.substring(0,4)}))}prepareFormSubmission(){const e=document.querySelector("form.checkout");if(!e)return;const t={credit_card:"vindi-pagamentos-credit",pix:"vindi-pagamentos-pix",bolepix:"vindi-pagamentos-bolepix"};e.addEventListener("submit",(s=>{const n=document.querySelector('input[name="payment_method"]:checked');if(!n||"vindi-pagamentos-multi-payment"!==n.value)return;this.initElements();const a=this.firstMethodSelect?this.firstMethodSelect.value:"",i=this.secondMethodSelect?this.secondMethodSelect.value:"";if("credit_card"===a&&"credit_card"===i){const e=document.getElementById("first_wvp-card-number"),t=document.getElementById("second_wvp-card-number");if(e&&t){const n=e.value.replace(/\s/g,"");if(n===t.value.replace(/\s/g,"")&&""!==n)return s.preventDefault(),alert(Ee("Você não pode usar o mesmo cartão para ambos os métodos de pagamento.","vindi-pagamentos")),!1}}this.removeExistingInputs(e,"multi_payment");const r=t[a]||a,o=t[i]||i,u=this.firstAmountInput?this.firstAmountInput.value:"",l=this.secondAmountInput?this.secondAmountInput.value:"";this.addHiddenInput(e,"multi_payment[first_method]",r),this.addHiddenInput(e,"multi_payment[second_method]",o),this.addHiddenInput(e,"multi_payment[first_amount]",u),this.addHiddenInput(e,"multi_payment[second_amount]",l);const d=this.getPaymentMethodId(a);this.addHiddenInput(e,"payment[payment_method_id]",d),"credit_card"===a&&this.collectFirstCreditCardData(e),"credit_card"===i&&this.collectSecondCreditCardData(e)}))}collectFirstCreditCardData(e){const t=document.getElementById("first_wvp-card-owner"),s=document.getElementById("first_wvp-card-number"),n=document.getElementById("first_wvp-card-date"),a=document.getElementById("first_wvp-card-code"),i=document.getElementById("first_wvp-card-installments"),r=document.getElementById("first_wvp-card-brand");if(s&&this.addHiddenInput(e,"payment[card_number]",s.value.replace(/\s/g,"")),t&&this.addHiddenInput(e,"payment[card_name]",t.value),a&&this.addHiddenInput(e,"payment[card_cvv]",a.value),i&&this.addHiddenInput(e,"payment[split]",i.value),r&&this.addHiddenInput(e,"payment[payment_method_id]",r.value||"1"),n){const t=n.value.split("/");if(2===t.length){const s=t[0],a="20"+t[1];this.addHiddenInput(e,"payment[card_expiration_date]",n.value),this.addHiddenInput(e,"payment[card_expdate_month]",s),this.addHiddenInput(e,"payment[card_expdate_year]",a)}}}collectSecondCreditCardData(e){const t=document.getElementById("second_wvp-card-owner"),s=document.getElementById("second_wvp-card-number"),n=document.getElementById("second_wvp-card-date"),a=document.getElementById("second_wvp-card-code"),i=document.getElementById("second_wvp-card-installments"),r=document.getElementById("second_wvp-card-brand");if(s&&this.addHiddenInput(e,"second_payment[card_number]",s.value.replace(/\s/g,"")),t&&this.addHiddenInput(e,"second_payment[card_name]",t.value),a&&this.addHiddenInput(e,"second_payment[card_cvv]",a.value),i&&this.addHiddenInput(e,"second_payment[split]",i.value),r&&this.addHiddenInput(e,"second_payment[payment_method_id]",r.value||"1"),n){const t=n.value.split("/");if(2===t.length){const s=t[0],a="20"+t[1];this.addHiddenInput(e,"second_payment[card_expiration_date]",n.value),this.addHiddenInput(e,"second_payment[card_expdate_month]",s),this.addHiddenInput(e,"second_payment[card_expdate_year]",a)}}}removeExistingInputs(e,t){e.querySelectorAll(`input[name^="${t}["]`).forEach((e=>e.remove()))}getPaymentMethodId(e){return{pix:"27",credit_card:"1",bolepix:"28"}[e]||""}addHiddenInput(e,t,s){const n=e.querySelector(`input[name="${t}"]`);if(n)return void(n.value=s);let a=document.createElement("input");a.type="hidden",a.name=t,a.value=s,e.appendChild(a)}setCardBrand(e,t,s){const n="first"===s?"first_":"second_",a=document.getElementById(`${n}wvp-brand-icon`),i=document.getElementById(`${n}wvp-card-brand`);if(a){const t=a.getAttribute("data-img");if(t){const s=a.src.replace(t,e);a.src=s,a.setAttribute("data-img",e)}}i&&(i.value=t);const r=new CustomEvent("vindi_card_brand_changed",{detail:{prefix:s,name:e,code:t}});document.dispatchEvent(r),"mono/generic"!==e&&this.updateInstallmentsForBrand(s,t)}updateInstallmentsForBrand(e,t){if("first"===e)try{return void this.getCardInstallments(null,null,this.parseMoneyValue(this.firstAmountInput.value))}catch(e){console.warn("Erro ao chamar getCardInstallments:",e)}if("second"===e)try{return void this.getSecondMethodInstallments(null,null,this.parseMoneyValue(this.secondAmountInput.value))}catch(e){console.warn("Erro ao chamar getSecondMethodInstallments:",e)}}updateCompatibleMethods(e,t){const s="first"===t?this.firstMethodSelect:this.secondMethodSelect;if(!s)return;const n=s.value;jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","vindi_get_compatible_methods"),type:"POST",data:{selected_method:e,target_field:t,security:this.settings.nonce},success:e=>{if(e.success&&e.data){s.innerHTML="",Object.keys(e.data).forEach((t=>{const n=document.createElement("option");n.value=t,n.textContent=e.data[t],s.appendChild(n)}));Array.from(s.options).some((e=>e.value===n))?s.value=n:s.options.length>0&&(s.value=s.options[0].value,s.dispatchEvent(new Event("change")))}},error:(e,t,s)=>{console.error("Erro ao obter métodos compatíveis:",s)}})}setCardNumberMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-number`);s&&(s.classList.contains("wvp-block-field")||l(s,{mask:"0000 0000 0000 0000"}),this.detectCardBrand(s,e),s.addEventListener("input",(()=>{this.detectCardBrand(s,e)})))}setCardOwnerMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-owner`);if(s&&!s.classList.contains("wvp-block-field")){const e=l(s,{mask:/^[A-Za-z\s]*$/});s.addEventListener("input",(()=>{s.value=s.value.toUpperCase(),e.updateValue()}))}}setCardDateMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-date`);s&&!s.classList.contains("wvp-block-field")&&l(s,{mask:"00/00"})}setCardCodeMask(e){const t="first"===e?"first_":"second_",s=document.querySelector(`#${t}wvp-card-code`);s&&(s.classList.contains("wvp-block-field")||l(s,{mask:"0000"}),s.addEventListener("input",(()=>{this.setCodeBrand(s,e)})))}detectCardBrand(e,t){const s=e.value.replace(/\s/g,"");if(s.length<6)return;const n=this.getBrands();let a=null;return n.forEach((e=>{e.regex.test(s)&&!a&&(a=e)})),a?(this.setCardBrand(a.name,a.code,t),this.resetInstallmentsError("second"===t),s.length>=13&&("first"===t?this.getCardInstallments():this.getSecondMethodInstallments()),!0):(this.setCardBrand("mono/generic",1,t),this.showInstallmentsError("second"===t),!1)}showInstallmentsError(e=!1){const t=e?document.querySelector("#second_wvp-installments-error"):document.querySelector("#first_wvp-installments-error");t&&(t.innerText=Ee("Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.","vindi-pagamentos"),t.classList.add("active"))}resetInstallmentsError(e=!1){const t=e?document.querySelector("#second_wvp-installments-error"):document.querySelector("#first_wvp-installments-error");t&&(t.innerText="",t.classList.remove("active"))}getBrands(){return[{code:16,name:"elo",regex:/^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/},{code:3,name:"visa",regex:/^4[0-9]{12}(?:[0-9]{3})?$/},{code:4,name:"mastercard",regex:/^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/},{code:5,name:"amex",regex:/^3[47][0-9]{13}$/},{code:25,name:"hipercard",regex:/^(606282|3841\d{2}|60(?!11)\d{2})\d{10}$/},{code:20,name:"hiper",regex:/^(637095|637599|637612|637609|637598)\d*$/}]}setCodeBrand(e,t){const s="first"===t?"first_":"second_",n=document.querySelector(`#${s}wvp-cvv-icon`),a=e.length<3?"mono/cvv":"cvv";if(n){const e=n.getAttribute("data-img");e&&(n.src=n.src.replace(e,a),n.setAttribute("data-img",a))}}manageTokenSelect(e){jQuery("first"===e?'input[name="first_wc-vindi-pagamentos-credit-payment-token"]':'input[name="second_wc-vindi-pagamentos-credit-payment-token"]').on("change",(t=>{if(jQuery(t.target).is(":checked"))if("new"!==t.target.value)"first"===e?this.getCardInstallments(t.target.value):this.getSecondMethodInstallments(t.target.value);else{const t="first"===e?"#first_wvp-card-installments":"#second_wvp-card-installments",s=document.querySelector(t);if(s){const t=s.value;s.innerHTML="","first"===e?this.getCardInstallments(null,t):this.getSecondMethodInstallments(null,t)}}}))}getCardInstallments(e=null,t=null,s=null){const n="#first_wvp-card-installments",a="#first_wvp-installments-error";if(!document.querySelector(n))return;const i=document.querySelector("#first_wvp-card-brand"),r=document.querySelector("#first_wvp-card-nonce"),o=document.querySelector("#wvp-cart-total");if(!i)return;this.resetInstallmentsError(!1),jQuery("form.checkout").block({message:null,overlayCSS:{background:"#fff",opacity:.6}}),this.setRequestLoader(!1);const u=jQuery("#multi_payment_toggle").is(":checked")||"1"===jQuery("#vindi_multi_payment_active").val(),l={_wpnonce:r.value,security:wc_checkout_params.update_order_review_nonce};if(u){const e=jQuery("#first_payment_amount").val();l.price=e?e.replace(",","."):o.value}else l.price=o.value;l.brand=i.value,e&&(l.token=e);const d=e,c=jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"),method:"POST",contentType:"application/json",data:JSON.stringify(l),success:e=>{const s=document.querySelector(n);if(s.innerHTML="",e.success){const n=e.data.installments,i=document.querySelector(a);if(e.data.message&&i&&(i.textContent=e.data.message,i.classList.add("active")),s){!t&&s.value&&(t=s.value);const e={};s.innerHTML="";for(const t in n){const a=document.createElement("option");a.value=t,a.innerText=n[t],e[t]||(e[t]=!0,s.appendChild(a))}t&&s.querySelector(`option[value="${t}"]`)&&(s.value=t)}}},error:(e,t,s)=>{if("abort"!==t){const e=document.querySelector(a);if(e&&""===e.innerHTML){const t=document.createElement("span");t.innerText=s.message,e.appendChild(t),e.classList.add("active")}}},complete:()=>{jQuery(".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)").removeClass("processing").unblock(),jQuery("form.checkout").unblock()}});jQuery('input[name="wc-vindi-pagamentos-credit-payment-token"]').on("change",(e=>{jQuery(e.target).is(":checked")&&e.target.value!==d&&c.abort()}))}setRequestLoader(e=!1){jQuery(e?"#segundo-metodo-pagamento .wvp-credit-fields":".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)").addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})}getSecondMethodInstallments(e=null,t=null,s=null){const n="#second_wvp-card-installments",a="#segundo-metodo-pagamento .wvp-credit-fields";if(!document.querySelector(n))return;const i=document.querySelector("#second_wvp-card-brand"),r=document.querySelector("#second_wvp-card-nonce");if(!i)return;const o=document.querySelector("#second_wvp-installments-error");o&&(o.innerText="",o.classList.remove("active")),jQuery("form.checkout").block({message:null,overlayCSS:{background:"#fff",opacity:.6}}),jQuery(a).addClass("processing").block({message:null,overlayCSS:{background:"#fff",opacity:.6}});let u=0;if(s)u=parseFloat(s.toString().replace(",","."));else{const e=document.querySelector("#second_payment_amount");if(!e||!e.value)return jQuery(a).removeClass("processing").unblock(),void jQuery("form.checkout").unblock();u=parseFloat(e.value.replace(",","."))}const l={_wpnonce:r.value,security:wc_checkout_params.update_order_review_nonce,price:u.toString(),brand:i.value,is_second_method:!0};e&&(l.token=e),jQuery.ajax({url:wc_checkout_params.wc_ajax_url.toString().replace("%%endpoint%%","checkout_installments"),method:"POST",contentType:"application/json",data:JSON.stringify(l),success:e=>{const s=document.querySelector(n);if(s.innerHTML="",e.success){const n=e.data.installments,a={},i=(Object.values(n)[0]||"").match(/R\$\s?([0-9.,]+)/);if(i&&i[1]){const e=parseFloat(i[1].replace(".","").replace(",","."));if(Math.abs(e-u)>.01){const t=u/e;Object.keys(n).forEach((e=>{const s=n[e],i=s.split("R$");if(i.length>=2){const n=i[1].trim().split(/\s|-|\(|>/)[0],r=(parseFloat(n.replace(".","").replace(",","."))*t).toFixed(2).replace(".",",");if(a[e]=s.replace(n,r),s.includes("(R$")){const n=s.match(/\(R\$\s?([0-9.,]+)/);if(n&&n[1]){const s=(parseFloat(n[1].replace(".","").replace(",","."))*t).toFixed(2).replace(".",",");a[e]=a[e].replace(n[1],s)}}}else a[e]=s}))}else Object.assign(a,n)}else Object.assign(a,n);s&&(!t&&s.value&&(t=s.value),Object.keys(a).forEach((e=>{const t=document.createElement("option");t.value=e,t.innerText=a[e],s.appendChild(t)})),t&&s.querySelector(`option[value="${t}"]`)&&(s.value=t))}},error:(e,t,s)=>{o&&(o.innerText="Erro ao calcular parcelas: "+s,o.classList.add("active"))},complete:()=>{jQuery(a).removeClass("processing").unblock(),jQuery("form.checkout").unblock()}})}initPaymentMethodListener(e){const t=`${e}_wc-vindi-pagamentos-credit-payment-token`,s=document.querySelectorAll(`input[name="${t}"]`),n=document.querySelector(`.${e}_wvp-credit-fields-hide`),a=document.querySelector(`.${e}_wvp-card-date-hide`);s.forEach((t=>{t.addEventListener("change",(()=>{const t=this.getSelectedPaymentMethod(e);t&&"new"!==t?(n&&(n.style.display="none"),a&&(a.style.display="none")):(n&&(n.style.display="block"),a&&(a.style.display="block"))}))}))}getSelectedPaymentMethod(e){const t=`${e}_wc-vindi-pagamentos-credit-payment-token`,s=document.querySelector(`input[name="${t}"]:checked`);return s?s.value:null}}var Pe;window.vindiMultiPaymentSettings=window.vindiMultiPaymentSettings||{ajaxUrl:"undefined"!=typeof ajaxurl?ajaxurl:"/wp-admin/admin-ajax.php",totalAmount:"0.00",currency:"BRL",currencySymbol:"R$"},(Pe=jQuery)(document).on("ready updated_checkout",(()=>{new Ae,new be,new we,new Se,new Fe,new je,new Ve})),Pe(document).on("add_checkout_block_fields",(()=>{new we,new Se}))})(); 2 2 //# sourceMappingURL=index.js.map -
vindi-pagamentos/trunk/dist/scripts/theme/index.js.map
r3367804 r3387744 1 {"mappings":"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","sources":["node_modules/imask/esm/core/utils.js","node_modules/imask/esm/core/action-details.js","node_modules/imask/esm/core/holder.js","node_modules/imask/esm/masked/factory.js","node_modules/imask/esm/controls/mask-element.js","node_modules/imask/esm/controls/html-mask-element.js","node_modules/imask/esm/controls/html-input-mask-element.js","node_modules/imask/esm/controls/html-contenteditable-mask-element.js","node_modules/imask/esm/controls/input.js","node_modules/imask/esm/core/change-details.js","node_modules/imask/esm/core/continuous-tail-details.js","node_modules/imask/esm/masked/base.js","node_modules/imask/esm/masked/pattern/chunk-tail-details.js","node_modules/imask/esm/masked/pattern/cursor.js","node_modules/imask/esm/masked/pattern/fixed-definition.js","node_modules/imask/esm/masked/pattern/input-definition.js","node_modules/imask/esm/masked/regexp.js","node_modules/imask/esm/masked/pattern.js","node_modules/imask/esm/masked/range.js","node_modules/imask/esm/masked/date.js","node_modules/imask/esm/masked/dynamic.js","node_modules/imask/esm/masked/enum.js","node_modules/imask/esm/masked/function.js","node_modules/imask/esm/masked/number.js","node_modules/imask/esm/masked/pipe.js","node_modules/imask/esm/index.js","node_modules/sprintf-js/src/sprintf.js","node_modules/memize/dist/index.js","node_modules/@wordpress/i18n/build-module/@wordpress/i18n/src/sprintf.js","node_modules/@tannin/postfix/index.js","node_modules/@tannin/evaluate/index.js","node_modules/@tannin/compile/index.js","node_modules/tannin/index.js","node_modules/@tannin/plural-forms/index.js","node_modules/@wordpress/i18n/build-module/@wordpress/i18n/src/create-i18n.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/validateNamespace.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/validateHookName.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createAddHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createRemoveHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createHasHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createRunHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createCurrentHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createDoingHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createDidHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createHooks.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/index.js","node_modules/@wordpress/i18n/build-module/@wordpress/i18n/src/default-i18n.js","assets/scripts/theme/checkout/credit.js","assets/scripts/theme/checkout/gateways.js","assets/scripts/theme/checkout/transfer.js","assets/scripts/theme/order/payment-link.js","assets/scripts/theme/order/thankyou.js","assets/scripts/theme/order/components/ui-manager.js","assets/scripts/theme/order/components/payment-method-handler.js","assets/scripts/theme/order/components/form-handler.js","assets/scripts/theme/order/components/install-ments-manager.js","assets/scripts/theme/order/components/coupon-manager.js","assets/scripts/theme/order/components/order-total-calculator.js","assets/scripts/theme/order/one-click-buy.js","assets/scripts/theme/checkout/vindi-multipayment.js","assets/scripts/theme/index.js"],"sourcesContent":["/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be imported manually before creating mask.');\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\n\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._handlers = {};\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /**\n Is element in focus\n */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /**\n Binds HTMLElement events to mask internal events\n */\n bindEvents(handlers) {\n Object.keys(handlers).forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\n }\n\n /**\n Unbinds HTMLElement events to mask internal events\n */\n unbindEvents() {\n Object.keys(this._handlers).forEach(event => this._toggleEventHandler(event));\n }\n _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n}\n/** Mapping between HTMLElement events and mask internal events */\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n this._handlers = {};\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","import { objectIncludes, DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl() {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (isChanged) this._fireChangeEvents();\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts;\n const updateMask = !this.maskEquals(mask);\n const updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n\n // fix strange IE behavior\n if (!this._selection) return this.updateValue();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) {\n this.updateValue();\n }\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Can skip chars */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!Object.keys(opts).length) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n details = details.aggregate(this._appendCharRaw(ch, flags));\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n checkTail.shift();\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n const phDetails = masked._appendPlaceholder(stop);\n details.aggregate(phDetails);\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted;\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n const details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled || this.isOptional) return details;\n this.isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n ...blockOpts\n } = normalizeOpts(this.blocks[bName]);\n const maskedBlock = createMask({\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n ...blockOpts,\n parent: this\n });\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index;; ++bi) {\n var _flags$_beforeTailSta;\n const block = this._blocks[bi];\n if (!block) break;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n const skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n const bDetails = b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length);\n this._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n}\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/change-details.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n /** */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n to = this.to || 0,\n from = this.from || 0,\n maxLength = this.maxLength || 0,\n autofix = this.autofix,\n ...patternOpts\n } = opts;\n this.to = to;\n this.from = from;\n this.maxLength = Math.max(String(to).length, maxLength);\n this.autofix = autofix;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n super._update(patternOpts);\n }\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let details;\n [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n if (!this.autofix || !ch) return [ch, details];\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const nextVal = this.value + ch;\n if (nextVal.length > this.maxLength) return ['', details];\n const [minstr, maxstr] = this.boundaries(nextVal);\n if (Number(maxstr) < this.from) return [fromStr[nextVal.length - 1], details];\n if (Number(minstr) > this.to) {\n if (this.autofix === 'pad' && nextVal.length < this.maxLength) {\n return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];\n }\n return [toStr[nextVal.length - 1], details];\n }\n return [ch, details];\n }\n doValidate(flags) {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n super({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n mask,\n pattern,\n blocks,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n patternBlocks.m.from = opts.min.getMonth() + 1;\n patternBlocks.m.to = opts.max.getMonth() + 1;\n if (patternBlocks.m.from === patternBlocks.m.to) {\n patternBlocks.d.from = opts.min.getDate();\n patternBlocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(patternBlocks, this.blocks, blocks);\n\n // add autofix\n Object.keys(patternBlocks).forEach(bk => {\n const b = patternBlocks[bk];\n if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;\n });\n super._update({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern,\n blocks: patternBlocks\n });\n }\n doValidate(flags) {\n const date = this.date;\n return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nMaskedDate.DEFAULTS = {\n mask: Date,\n pattern: 'd{.}`m{.}`Y',\n format: (date, masked) => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: (str, masked) => {\n const [day, month, year] = str.split('.').map(Number);\n return new Date(year, month - 1, day);\n }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n /** Currently chosen mask */\n\n /** Currently chosen mask */\n\n /** Compliled {@link Masked} options */\n\n /** Chooses {@link Masked} depending on input value */\n\n constructor(opts) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n this.currentMask = undefined;\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n this.exposeMask = undefined;\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n const {\n expose,\n ...maskOpts\n } = normalizeOpts(m);\n const masked = createMask({\n overwrite: this._overwrite,\n eager: this._eager,\n skipInvalid: this._skipInvalid,\n ...maskOpts\n });\n if (expose) this.exposeMask = masked;\n return masked;\n }) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch(appended, flags, tail) {\n if (appended === void 0) {\n appended = '';\n }\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, {\n ...flags\n }, tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n const d = this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else if (prevMaskState) {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n _appendEager() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return {\n ...flags,\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n };\n }\n doDispatch(appended, flags, tail) {\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n return this.dispatch(appended, this, flags, tail);\n }\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepare(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepareChar(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) == null ? void 0 : _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n get value() {\n return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n if (this.exposeMask) {\n this.exposeMask.value = value;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.value = value;\n }\n get unmaskedValue() {\n return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeMask) {\n this.exposeMask.unmaskedValue = unmaskedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n }\n set typedValue(typedValue) {\n if (this.exposeMask) {\n this.exposeMask.typedValue = typedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n return;\n }\n let unmaskedValue = String(typedValue);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = typedValue;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n }\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n }\n remove(fromPos, toPos) {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(fromPos, toPos))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n get state() {\n var _this$currentMask4;\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n };\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask,\n ...maskedState\n } = state;\n if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n extractInput(fromPos, toPos, flags) {\n return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n }\n extractTail(fromPos, toPos) {\n return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n }\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n nearestInputPos(cursorPos, direction) {\n return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n }\n set overwrite(overwrite) {\n this._overwrite = overwrite;\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : this._eager;\n }\n set eager(eager) {\n this._eager = eager;\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n this._skipInvalid = skipInvalid;\n }\n maskEquals(mask) {\n return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const {\n mask: oldMask,\n ...restOpts\n } = mask[mi];\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n }) : super.maskEquals(mask);\n }\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\nMaskedDynamic.DEFAULTS = void 0;\nMaskedDynamic.DEFAULTS = {\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n enum: _enum,\n ...eopts\n } = opts;\n if (_enum) {\n const lengths = _enum.map(e => e.length);\n const requiredLength = Math.min(...lengths);\n const optionalLength = Math.max(...lengths) - requiredLength;\n eopts.mask = '*'.repeat(requiredLength);\n if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n this.enum = _enum;\n }\n super._update(eopts);\n }\n doValidate(flags) {\n return this.enum.some(e => e.indexOf(this.unmaskedValue) === 0) && super.doValidate(flags);\n }\n}\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update({\n ...opts,\n validate: opts.mask\n });\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Number mask */\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n _updateRegExps() {\n const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n const mid = '\\\\d*';\n const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n if (ch && !prepCh) details.skip = true;\n if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n return [prepCh, details];\n }\n _separatorsCount(to, extendOnSeparators) {\n if (extendOnSeparators === void 0) {\n extendOnSeparators = false;\n }\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n _separatorsCountFromSlice(slice) {\n if (slice === void 0) {\n slice = this._value;\n }\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const appendDetails = super._appendCharRaw(ch, flags);\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n doValidate(flags) {\n // validate as string\n let valid = Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));\n if (valid) {\n // validate as number\n const number = this.number;\n valid = valid && !isNaN(number) && (\n // check min bound for negative values\n this.min == null || this.min >= 0 || this.min <= this.number) && (\n // check max bound for positive values\n this.max == null || this.max <= 0 || this.number <= this.max);\n }\n return valid && super.doValidate(flags);\n }\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n doSkipInvalid(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.parse(this.unmaskedValue, this);\n }\n set typedValue(n) {\n this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n\n /**\n Is negative allowed\n */\n get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n\n /**\n Is positive allowed\n */\n get allowPositive() {\n return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n }\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n mask: Number,\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [MaskedNumber.UNMASKED_RADIX],\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scale: 2,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n if (from === void 0) {\n from = PIPE_TYPE.MASKED;\n }\n if (to === void 0) {\n to = PIPE_TYPE.MASKED;\n }\n const masked = createMask(arg);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nimport './core/action-details.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n","/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/**\n * Memize options object.\n *\n * @typedef MemizeOptions\n *\n * @property {number} [maxSize] Maximum size of the cache.\n */\n\n/**\n * Internal cache entry.\n *\n * @typedef MemizeCacheNode\n *\n * @property {?MemizeCacheNode|undefined} [prev] Previous node.\n * @property {?MemizeCacheNode|undefined} [next] Next node.\n * @property {Array<*>} args Function arguments for cache\n * entry.\n * @property {*} val Function result.\n */\n\n/**\n * Properties of the enhanced function for controlling cache.\n *\n * @typedef MemizeMemoizedFunction\n *\n * @property {()=>void} clear Clear the cache.\n */\n\n/**\n * Accepts a function to be memoized, and returns a new memoized function, with\n * optional options.\n *\n * @template {(...args: any[]) => any} F\n *\n * @param {F} fn Function to memoize.\n * @param {MemizeOptions} [options] Options object.\n *\n * @return {((...args: Parameters<F>) => ReturnType<F>) & MemizeMemoizedFunction} Memoized function.\n */\nfunction memize(fn, options) {\n\tvar size = 0;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar head;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar tail;\n\n\toptions = options || {};\n\n\tfunction memoized(/* ...args */) {\n\t\tvar node = head,\n\t\t\tlen = arguments.length,\n\t\t\targs,\n\t\t\ti;\n\n\t\tsearchCache: while (node) {\n\t\t\t// Perform a shallow equality test to confirm that whether the node\n\t\t\t// under test is a candidate for the arguments passed. Two arrays\n\t\t\t// are shallowly equal if their length matches and each entry is\n\t\t\t// strictly equal between the two sets. Avoid abstracting to a\n\t\t\t// function which could incur an arguments leaking deoptimization.\n\n\t\t\t// Check whether node arguments match arguments length\n\t\t\tif (node.args.length !== arguments.length) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check whether node arguments match arguments values\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tif (node.args[i] !== arguments[i]) {\n\t\t\t\t\tnode = node.next;\n\t\t\t\t\tcontinue searchCache;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif (node !== head) {\n\t\t\t\t// As tail, shift to previous. Must only shift if not also\n\t\t\t\t// head, since if both head and tail, there is no previous.\n\t\t\t\tif (node === tail) {\n\t\t\t\t\ttail = node.prev;\n\t\t\t\t}\n\n\t\t\t\t// Adjust siblings to point to each other. If node was tail,\n\t\t\t\t// this also handles new tail's empty `next` assignment.\n\t\t\t\t/** @type {MemizeCacheNode} */ (node.prev).next = node.next;\n\t\t\t\tif (node.next) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = head;\n\t\t\t\tnode.prev = null;\n\t\t\t\t/** @type {MemizeCacheNode} */ (head).prev = node;\n\t\t\t\thead = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\t// Create a copy of arguments (avoid leaking deoptimization)\n\t\targs = new Array(len);\n\t\tfor (i = 0; i < len; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\tnode = {\n\t\t\targs: args,\n\n\t\t\t// Generate the result from original function\n\t\t\tval: fn.apply(null, args),\n\t\t};\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif (head) {\n\t\t\thead.prev = node;\n\t\t\tnode.next = head;\n\t\t} else {\n\t\t\t// If no head, follows that there's no tail (at initial or reset)\n\t\t\ttail = node;\n\t\t}\n\n\t\t// Trim tail if we're reached max size and are pending cache insertion\n\t\tif (size === /** @type {MemizeOptions} */ (options).maxSize) {\n\t\t\ttail = /** @type {MemizeCacheNode} */ (tail).prev;\n\t\t\t/** @type {MemizeCacheNode} */ (tail).next = null;\n\t\t} else {\n\t\t\tsize++;\n\t\t}\n\n\t\thead = node;\n\n\t\treturn node.val;\n\t}\n\n\tmemoized.clear = function () {\n\t\thead = null;\n\t\ttail = null;\n\t\tsize = 0;\n\t};\n\n\t// Ignore reason: There's not a clear solution to create an intersection of\n\t// the function with additional properties, where the goal is to retain the\n\t// function signature of the incoming argument and add control properties\n\t// on the return value.\n\n\t// @ts-ignore\n\treturn memoized;\n}\n\nexport { memize as default };\n","/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memoize( console.error ); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nexport function sprintf( format, ...args ) {\n\ttry {\n\t\treturn sprintfjs.sprintf( format, ...args );\n\t} catch ( error ) {\n\t\tif ( error instanceof Error ) {\n\t\t\tlogErrorOnce( 'sprintf error: \\n\\n' + error.toString() );\n\t\t}\n\t\treturn format;\n\t}\n}\n","var PRECEDENCE, OPENERS, TERMINATORS, PATTERN;\n\n/**\n * Operator precedence mapping.\n *\n * @type {Object}\n */\nPRECEDENCE = {\n\t'(': 9,\n\t'!': 8,\n\t'*': 7,\n\t'/': 7,\n\t'%': 7,\n\t'+': 6,\n\t'-': 6,\n\t'<': 5,\n\t'<=': 5,\n\t'>': 5,\n\t'>=': 5,\n\t'==': 4,\n\t'!=': 4,\n\t'&&': 3,\n\t'||': 2,\n\t'?': 1,\n\t'?:': 1,\n};\n\n/**\n * Characters which signal pair opening, to be terminated by terminators.\n *\n * @type {string[]}\n */\nOPENERS = [ '(', '?' ];\n\n/**\n * Characters which signal pair termination, the value an array with the\n * opener as its first member. The second member is an optional operator\n * replacement to push to the stack.\n *\n * @type {string[]}\n */\nTERMINATORS = {\n\t')': [ '(' ],\n\t':': [ '?', '?:' ],\n};\n\n/**\n * Pattern matching operators and openers.\n *\n * @type {RegExp}\n */\nPATTERN = /<=|>=|==|!=|&&|\\|\\||\\?:|\\(|!|\\*|\\/|%|\\+|-|<|>|\\?|\\)|:/;\n\n/**\n * Given a C expression, returns the equivalent postfix (Reverse Polish)\n * notation terms as an array.\n *\n * If a postfix string is desired, simply `.join( ' ' )` the result.\n *\n * @example\n *\n * ```js\n * import postfix from '@tannin/postfix';\n *\n * postfix( 'n > 1' );\n * // ⇒ [ 'n', '1', '>' ]\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {string[]} Postfix terms.\n */\nexport default function postfix( expression ) {\n\tvar terms = [],\n\t\tstack = [],\n\t\tmatch, operator, term, element;\n\n\twhile ( ( match = expression.match( PATTERN ) ) ) {\n\t\toperator = match[ 0 ];\n\n\t\t// Term is the string preceding the operator match. It may contain\n\t\t// whitespace, and may be empty (if operator is at beginning).\n\t\tterm = expression.substr( 0, match.index ).trim();\n\t\tif ( term ) {\n\t\t\tterms.push( term );\n\t\t}\n\n\t\twhile ( ( element = stack.pop() ) ) {\n\t\t\tif ( TERMINATORS[ operator ] ) {\n\t\t\t\tif ( TERMINATORS[ operator ][ 0 ] === element ) {\n\t\t\t\t\t// Substitution works here under assumption that because\n\t\t\t\t\t// the assigned operator will no longer be a terminator, it\n\t\t\t\t\t// will be pushed to the stack during the condition below.\n\t\t\t\t\toperator = TERMINATORS[ operator ][ 1 ] || operator;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) {\n\t\t\t\t// Push to stack if either an opener or when pop reveals an\n\t\t\t\t// element of lower precedence.\n\t\t\t\tstack.push( element );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// For each popped from stack, push to terms.\n\t\t\tterms.push( element );\n\t\t}\n\n\t\tif ( ! TERMINATORS[ operator ] ) {\n\t\t\tstack.push( operator );\n\t\t}\n\n\t\t// Slice matched fragment from expression to continue match.\n\t\texpression = expression.substr( match.index + operator.length );\n\t}\n\n\t// Push remainder of operand, if exists, to terms.\n\texpression = expression.trim();\n\tif ( expression ) {\n\t\tterms.push( expression );\n\t}\n\n\t// Pop remaining items from stack into terms.\n\treturn terms.concat( stack.reverse() );\n}\n","/**\n * Operator callback functions.\n *\n * @type {Object}\n */\nvar OPERATORS = {\n\t'!': function( a ) {\n\t\treturn ! a;\n\t},\n\t'*': function( a, b ) {\n\t\treturn a * b;\n\t},\n\t'/': function( a, b ) {\n\t\treturn a / b;\n\t},\n\t'%': function( a, b ) {\n\t\treturn a % b;\n\t},\n\t'+': function( a, b ) {\n\t\treturn a + b;\n\t},\n\t'-': function( a, b ) {\n\t\treturn a - b;\n\t},\n\t'<': function( a, b ) {\n\t\treturn a < b;\n\t},\n\t'<=': function( a, b ) {\n\t\treturn a <= b;\n\t},\n\t'>': function( a, b ) {\n\t\treturn a > b;\n\t},\n\t'>=': function( a, b ) {\n\t\treturn a >= b;\n\t},\n\t'==': function( a, b ) {\n\t\treturn a === b;\n\t},\n\t'!=': function( a, b ) {\n\t\treturn a !== b;\n\t},\n\t'&&': function( a, b ) {\n\t\treturn a && b;\n\t},\n\t'||': function( a, b ) {\n\t\treturn a || b;\n\t},\n\t'?:': function( a, b, c ) {\n\t\tif ( a ) {\n\t\t\tthrow b;\n\t\t}\n\n\t\treturn c;\n\t},\n};\n\n/**\n * Given an array of postfix terms and operand variables, returns the result of\n * the postfix evaluation.\n *\n * @example\n *\n * ```js\n * import evaluate from '@tannin/evaluate';\n *\n * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +'\n * const terms = [ '3', '4', '5', '*', '6', '/', '+' ];\n *\n * evaluate( terms, {} );\n * // ⇒ 6.333333333333334\n * ```\n *\n * @param {string[]} postfix Postfix terms.\n * @param {Object} variables Operand variables.\n *\n * @return {*} Result of evaluation.\n */\nexport default function evaluate( postfix, variables ) {\n\tvar stack = [],\n\t\ti, j, args, getOperatorResult, term, value;\n\n\tfor ( i = 0; i < postfix.length; i++ ) {\n\t\tterm = postfix[ i ];\n\n\t\tgetOperatorResult = OPERATORS[ term ];\n\t\tif ( getOperatorResult ) {\n\t\t\t// Pop from stack by number of function arguments.\n\t\t\tj = getOperatorResult.length;\n\t\t\targs = Array( j );\n\t\t\twhile ( j-- ) {\n\t\t\t\targs[ j ] = stack.pop();\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tvalue = getOperatorResult.apply( null, args );\n\t\t\t} catch ( earlyReturn ) {\n\t\t\t\treturn earlyReturn;\n\t\t\t}\n\t\t} else if ( variables.hasOwnProperty( term ) ) {\n\t\t\tvalue = variables[ term ];\n\t\t} else {\n\t\t\tvalue = +term;\n\t\t}\n\n\t\tstack.push( value );\n\t}\n\n\treturn stack[ 0 ];\n}\n","import postfix from '@tannin/postfix';\nimport evaluate from '@tannin/evaluate';\n\n/**\n * Given a C expression, returns a function which can be called to evaluate its\n * result.\n *\n * @example\n *\n * ```js\n * import compile from '@tannin/compile';\n *\n * const evaluate = compile( 'n > 1' );\n *\n * evaluate( { n: 2 } );\n * // ⇒ true\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {(variables?:{[variable:string]:*})=>*} Compiled evaluator.\n */\nexport default function compile( expression ) {\n\tvar terms = postfix( expression );\n\n\treturn function( variables ) {\n\t\treturn evaluate( terms, variables );\n\t};\n}\n","import pluralForms from '@tannin/plural-forms';\n\n/**\n * Tannin constructor options.\n *\n * @typedef {Object} TanninOptions\n *\n * @property {string} [contextDelimiter] Joiner in string lookup with context.\n * @property {Function} [onMissingKey] Callback to invoke when key missing.\n */\n\n/**\n * Domain metadata.\n *\n * @typedef {Object} TanninDomainMetadata\n *\n * @property {string} [domain] Domain name.\n * @property {string} [lang] Language code.\n * @property {(string|Function)} [plural_forms] Plural forms expression or\n * function evaluator.\n */\n\n/**\n * Domain translation pair respectively representing the singular and plural\n * translation.\n *\n * @typedef {[string,string]} TanninTranslation\n */\n\n/**\n * Locale data domain. The key is used as reference for lookup, the value an\n * array of two string entries respectively representing the singular and plural\n * translation.\n *\n * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain\n */\n\n/**\n * Jed-formatted locale data.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData\n */\n\n/**\n * Default Tannin constructor options.\n *\n * @type {TanninOptions}\n */\nvar DEFAULT_OPTIONS = {\n\tcontextDelimiter: '\\u0004',\n\tonMissingKey: null,\n};\n\n/**\n * Given a specific locale data's config `plural_forms` value, returns the\n * expression.\n *\n * @example\n *\n * ```\n * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)'\n * ```\n *\n * @param {string} pf Locale data plural forms.\n *\n * @return {string} Plural forms expression.\n */\nfunction getPluralExpression( pf ) {\n\tvar parts, i, part;\n\n\tparts = pf.split( ';' );\n\n\tfor ( i = 0; i < parts.length; i++ ) {\n\t\tpart = parts[ i ].trim();\n\t\tif ( part.indexOf( 'plural=' ) === 0 ) {\n\t\t\treturn part.substr( 7 );\n\t\t}\n\t}\n}\n\n/**\n * Tannin constructor.\n *\n * @class\n *\n * @param {TanninLocaleData} data Jed-formatted locale data.\n * @param {TanninOptions} [options] Tannin options.\n */\nexport default function Tannin( data, options ) {\n\tvar key;\n\n\t/**\n\t * Jed-formatted locale data.\n\t *\n\t * @name Tannin#data\n\t * @type {TanninLocaleData}\n\t */\n\tthis.data = data;\n\n\t/**\n\t * Plural forms function cache, keyed by plural forms string.\n\t *\n\t * @name Tannin#pluralForms\n\t * @type {Object<string,Function>}\n\t */\n\tthis.pluralForms = {};\n\n\t/**\n\t * Effective options for instance, including defaults.\n\t *\n\t * @name Tannin#options\n\t * @type {TanninOptions}\n\t */\n\tthis.options = {};\n\n\tfor ( key in DEFAULT_OPTIONS ) {\n\t\tthis.options[ key ] = options !== undefined && key in options\n\t\t\t? options[ key ]\n\t\t\t: DEFAULT_OPTIONS[ key ];\n\t}\n}\n\n/**\n * Returns the plural form index for the given domain and value.\n *\n * @param {string} domain Domain on which to calculate plural form.\n * @param {number} n Value for which plural form is to be calculated.\n *\n * @return {number} Plural form index.\n */\nTannin.prototype.getPluralForm = function( domain, n ) {\n\tvar getPluralForm = this.pluralForms[ domain ],\n\t\tconfig, plural, pf;\n\n\tif ( ! getPluralForm ) {\n\t\tconfig = this.data[ domain ][ '' ];\n\n\t\tpf = (\n\t\t\tconfig[ 'Plural-Forms' ] ||\n\t\t\tconfig[ 'plural-forms' ] ||\n\t\t\t// Ignore reason: As known, there's no way to document the empty\n\t\t\t// string property on a key to guarantee this as metadata.\n\t\t\t// @ts-ignore\n\t\t\tconfig.plural_forms\n\t\t);\n\n\t\tif ( typeof pf !== 'function' ) {\n\t\t\tplural = getPluralExpression(\n\t\t\t\tconfig[ 'Plural-Forms' ] ||\n\t\t\t\tconfig[ 'plural-forms' ] ||\n\t\t\t\t// Ignore reason: As known, there's no way to document the empty\n\t\t\t\t// string property on a key to guarantee this as metadata.\n\t\t\t\t// @ts-ignore\n\t\t\t\tconfig.plural_forms\n\t\t\t);\n\n\t\t\tpf = pluralForms( plural );\n\t\t}\n\n\t\tgetPluralForm = this.pluralForms[ domain ] = pf;\n\t}\n\n\treturn getPluralForm( n );\n};\n\n/**\n * Translate a string.\n *\n * @param {string} domain Translation domain.\n * @param {string|void} context Context distinguishing terms of the same name.\n * @param {string} singular Primary key for translation lookup.\n * @param {string=} plural Fallback value used for non-zero plural\n * form index.\n * @param {number=} n Value to use in calculating plural form.\n *\n * @return {string} Translated string.\n */\nTannin.prototype.dcnpgettext = function( domain, context, singular, plural, n ) {\n\tvar index, key, entry;\n\n\tif ( n === undefined ) {\n\t\t// Default to singular.\n\t\tindex = 0;\n\t} else {\n\t\t// Find index by evaluating plural form for value.\n\t\tindex = this.getPluralForm( domain, n );\n\t}\n\n\tkey = singular;\n\n\t// If provided, context is prepended to key with delimiter.\n\tif ( context ) {\n\t\tkey = context + this.options.contextDelimiter + singular;\n\t}\n\n\tentry = this.data[ domain ][ key ];\n\n\t// Verify not only that entry exists, but that the intended index is within\n\t// range and non-empty.\n\tif ( entry && entry[ index ] ) {\n\t\treturn entry[ index ];\n\t}\n\n\tif ( this.options.onMissingKey ) {\n\t\tthis.options.onMissingKey( singular, domain );\n\t}\n\n\t// If entry not found, fall back to singular vs. plural with zero index\n\t// representing the singular value.\n\treturn index === 0 ? singular : plural;\n};\n","import compile from '@tannin/compile';\n\n/**\n * Given a C expression, returns a function which, when called with a value,\n * evaluates the result with the value assumed to be the \"n\" variable of the\n * expression. The result will be coerced to its numeric equivalent.\n *\n * @param {string} expression C expression.\n *\n * @return {Function} Evaluator function.\n */\nexport default function pluralForms( expression ) {\n\tvar evaluate = compile( expression );\n\n\treturn function( n ) {\n\t\treturn +evaluate( { n: n } );\n\t};\n}\n","/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n\t'': {\n\t\t/** @param {number} n */\n\t\tplural_forms( n ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {AddLocaleData} addLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data.\n * @property {__} __ Retrieve the translation of text.\n * @property {_x} _x Retrieve translated string with gettext context.\n * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied\n * number.\n * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n * @property {IsRtl} isRTL Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData] Locale data configuration.\n * @param {string} [initialDomain] Domain for which configuration applies.\n * @param {Hooks} [hooks] Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nexport const createI18n = ( initialData, initialDomain, hooks ) => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t *\n\t * @type {Tannin}\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param {SubscribeCallback} callback Subscription callback.\n\t * @return {UnsubscribeCallback} Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback ) => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\t/** @type {GetLocaleData} */\n\tconst getLocaleData = ( domain = 'default' ) => tannin.data[ domain ];\n\n\t/**\n\t * @param {LocaleData} [data]\n\t * @param {string} [domain]\n\t */\n\tconst doSetLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t};\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\t/** @type {SetLocaleData} */\n\tconst setLocaleData = ( data, domain ) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {AddLocaleData} */\n\tconst addLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {ResetLocaleData} */\n\tconst resetLocaleData = ( data, domain ) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param {string|undefined} domain Domain to retrieve the translated text.\n\t * @param {string|undefined} context Context information for the translators.\n\t * @param {string} single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param {string} [plural] The text to be used if the number is\n\t * plural.\n\t * @param {number} [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return {string} The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default',\n\t\tcontext,\n\t\tsingle,\n\t\tplural,\n\t\tnumber\n\t) => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\t/** @type {GetFilterDomain} */\n\tconst getFilterDomain = ( domain = 'default' ) => domain;\n\n\t/** @type {__} */\n\tconst __ = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_x} */\n\tconst _x = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_n} */\n\tconst _n = ( single, plural, number, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_nx} */\n\tconst _nx = ( single, plural, number, context, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {IsRtl} */\n\tconst isRTL = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\t/** @type {HasTranslation} */\n\tconst hasTranslation = ( single, context, domain ) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param {boolean} hasTranslation Whether the translation is present or not..\n\t\t\t * @param {string} single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param {string} context Context information for the translators.\n\t\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation',\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param {string} hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n","/**\n * Validate a namespace string.\n *\n * @param {string} namespace The namespace to validate - should take the form\n * `vendor/plugin/function`.\n *\n * @return {boolean} Whether the namespace is valid.\n */\nfunction validateNamespace( namespace ) {\n\tif ( 'string' !== typeof namespace || '' === namespace ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The namespace must be a non-empty string.' );\n\t\treturn false;\n\t}\n\n\tif ( ! /^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test( namespace ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t'The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.'\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default validateNamespace;\n","/**\n * Validate a hookName string.\n *\n * @param {string} hookName The hook name to validate. Should be a non empty string containing\n * only numbers, letters, dashes, periods and underscores. Also,\n * the hook name cannot begin with `__`.\n *\n * @return {boolean} Whether the hook name is valid.\n */\nfunction validateHookName( hookName ) {\n\tif ( 'string' !== typeof hookName || '' === hookName ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The hook name must be a non-empty string.' );\n\t\treturn false;\n\t}\n\n\tif ( /^__/.test( hookName ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The hook name cannot begin with `__`.' );\n\t\treturn false;\n\t}\n\n\tif ( ! /^[a-zA-Z][a-zA-Z0-9_.-]*$/.test( hookName ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t'The hook name can only contain numbers, letters, dashes, periods and underscores.'\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default validateHookName;\n","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback AddHook\n *\n * Adds the hook to the appropriate hooks container.\n *\n * @param {string} hookName Name of hook to add\n * @param {string} namespace The unique namespace identifying the callback in the form `vendor/plugin/function`.\n * @param {import('.').Callback} callback Function to call when the hook is run\n * @param {number} [priority=10] Priority of this hook\n */\n\n/**\n * Returns a function which, when invoked, will add a hook.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {AddHook} Function that adds a new hook.\n */\nfunction createAddHook( hooks, storeKey ) {\n\treturn function addHook( hookName, namespace, callback, priority = 10 ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! validateNamespace( namespace ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( 'function' !== typeof callback ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'The hook callback must be a function.' );\n\t\t\treturn;\n\t\t}\n\n\t\t// Validate numeric priority\n\t\tif ( 'number' !== typeof priority ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(\n\t\t\t\t'If specified, the hook priority must be a number.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = { callback, priority, namespace };\n\n\t\tif ( hooksStore[ hookName ] ) {\n\t\t\t// Find the correct insert index of the new hook.\n\t\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t\t/** @type {number} */\n\t\t\tlet i;\n\t\t\tfor ( i = handlers.length; i > 0; i-- ) {\n\t\t\t\tif ( priority >= handlers[ i - 1 ].priority ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( i === handlers.length ) {\n\t\t\t\t// If append, operate via direct assignment.\n\t\t\t\thandlers[ i ] = handler;\n\t\t\t} else {\n\t\t\t\t// Otherwise, insert before index via splice.\n\t\t\t\thandlers.splice( i, 0, handler );\n\t\t\t}\n\n\t\t\t// We may also be currently executing this hook. If the callback\n\t\t\t// we're adding would come after the current callback, there's no\n\t\t\t// problem; otherwise we need to increase the execution index of\n\t\t\t// any other runs by 1 to account for the added element.\n\t\t\thooksStore.__current.forEach( ( hookInfo ) => {\n\t\t\t\tif (\n\t\t\t\t\thookInfo.name === hookName &&\n\t\t\t\t\thookInfo.currentIndex >= i\n\t\t\t\t) {\n\t\t\t\t\thookInfo.currentIndex++;\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\t// This is the first hook of its type.\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [ handler ],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\tif ( hookName !== 'hookAdded' ) {\n\t\t\thooks.doAction(\n\t\t\t\t'hookAdded',\n\t\t\t\thookName,\n\t\t\t\tnamespace,\n\t\t\t\tcallback,\n\t\t\t\tpriority\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport default createAddHook;\n","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback RemoveHook\n * Removes the specified callback (or all callbacks) from the hook with a given hookName\n * and namespace.\n *\n * @param {string} hookName The name of the hook to modify.\n * @param {string} namespace The unique namespace identifying the callback in the\n * form `vendor/plugin/function`.\n *\n * @return {number | undefined} The number of callbacks removed.\n */\n\n/**\n * Returns a function which, when invoked, will remove a specified hook or all\n * hooks by the given name.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean} [removeAll=false] Whether to remove all callbacks for a hookName,\n * without regard to namespace. Used to create\n * `removeAll*` functions.\n *\n * @return {RemoveHook} Function that removes hooks.\n */\nfunction createRemoveHook( hooks, storeKey, removeAll = false ) {\n\treturn function removeHook( hookName, namespace ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! removeAll && ! validateNamespace( namespace ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Bail if no hooks exist by this name.\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet handlersRemoved = 0;\n\n\t\tif ( removeAll ) {\n\t\t\thandlersRemoved = hooksStore[ hookName ].handlers.length;\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\truns: hooksStore[ hookName ].runs,\n\t\t\t\thandlers: [],\n\t\t\t};\n\t\t} else {\n\t\t\t// Try to find the specified callback to remove.\n\t\t\tconst handlers = hooksStore[ hookName ].handlers;\n\t\t\tfor ( let i = handlers.length - 1; i >= 0; i-- ) {\n\t\t\t\tif ( handlers[ i ].namespace === namespace ) {\n\t\t\t\t\thandlers.splice( i, 1 );\n\t\t\t\t\thandlersRemoved++;\n\t\t\t\t\t// This callback may also be part of a hook that is\n\t\t\t\t\t// currently executing. If the callback we're removing\n\t\t\t\t\t// comes after the current callback, there's no problem;\n\t\t\t\t\t// otherwise we need to decrease the execution index of any\n\t\t\t\t\t// other runs by 1 to account for the removed element.\n\t\t\t\t\thooksStore.__current.forEach( ( hookInfo ) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thookInfo.name === hookName &&\n\t\t\t\t\t\t\thookInfo.currentIndex >= i\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\thookInfo.currentIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( hookName !== 'hookRemoved' ) {\n\t\t\thooks.doAction( 'hookRemoved', hookName, namespace );\n\t\t}\n\n\t\treturn handlersRemoved;\n\t};\n}\n\nexport default createRemoveHook;\n","/**\n * @callback HasHook\n *\n * Returns whether any handlers are attached for the given hookName and optional namespace.\n *\n * @param {string} hookName The name of the hook to check for.\n * @param {string} [namespace] Optional. The unique namespace identifying the callback\n * in the form `vendor/plugin/function`.\n *\n * @return {boolean} Whether there are handlers that are attached to the given hook.\n */\n/**\n * Returns a function which, when invoked, will return whether any handlers are\n * attached to a particular hook.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {HasHook} Function that returns whether any handlers are\n * attached to a particular hook and optional namespace.\n */\nfunction createHasHook( hooks, storeKey ) {\n\treturn function hasHook( hookName, namespace ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\t// Use the namespace if provided.\n\t\tif ( 'undefined' !== typeof namespace ) {\n\t\t\treturn (\n\t\t\t\thookName in hooksStore &&\n\t\t\t\thooksStore[ hookName ].handlers.some(\n\t\t\t\t\t( hook ) => hook.namespace === namespace\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn hookName in hooksStore;\n\t};\n}\n\nexport default createHasHook;\n","/**\n * Returns a function which, when invoked, will execute all callbacks\n * registered to a hook of the specified type, optionally returning the final\n * value of the call chain.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean} [returnFirstArg=false] Whether each hook callback is expected to\n * return its first argument.\n *\n * @return {(hookName:string, ...args: unknown[]) => undefined|unknown} Function that runs hook callbacks.\n */\nfunction createRunHook( hooks, storeKey, returnFirstArg = false ) {\n\treturn function runHooks( hookName, ...args ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\thooksStore[ hookName ].runs++;\n\n\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t// The following code is stripped from production builds.\n\t\tif ( 'production' !== process.env.NODE_ENV ) {\n\t\t\t// Handle any 'all' hooks registered.\n\t\t\tif ( 'hookAdded' !== hookName && hooksStore.all ) {\n\t\t\t\thandlers.push( ...hooksStore.all.handlers );\n\t\t\t}\n\t\t}\n\n\t\tif ( ! handlers || ! handlers.length ) {\n\t\t\treturn returnFirstArg ? args[ 0 ] : undefined;\n\t\t}\n\n\t\tconst hookInfo = {\n\t\t\tname: hookName,\n\t\t\tcurrentIndex: 0,\n\t\t};\n\n\t\thooksStore.__current.push( hookInfo );\n\n\t\twhile ( hookInfo.currentIndex < handlers.length ) {\n\t\t\tconst handler = handlers[ hookInfo.currentIndex ];\n\n\t\t\tconst result = handler.callback.apply( null, args );\n\t\t\tif ( returnFirstArg ) {\n\t\t\t\targs[ 0 ] = result;\n\t\t\t}\n\n\t\t\thookInfo.currentIndex++;\n\t\t}\n\n\t\thooksStore.__current.pop();\n\n\t\tif ( returnFirstArg ) {\n\t\t\treturn args[ 0 ];\n\t\t}\n\n\t\treturn undefined;\n\t};\n}\n\nexport default createRunHook;\n","/**\n * Returns a function which, when invoked, will return the name of the\n * currently running hook, or `null` if no hook of the given type is currently\n * running.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {() => string | null} Function that returns the current hook name or null.\n */\nfunction createCurrentHook( hooks, storeKey ) {\n\treturn function currentHook() {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\treturn (\n\t\t\thooksStore.__current[ hooksStore.__current.length - 1 ]?.name ??\n\t\t\tnull\n\t\t);\n\t};\n}\n\nexport default createCurrentHook;\n","/**\n * @callback DoingHook\n * Returns whether a hook is currently being executed.\n *\n * @param {string} [hookName] The name of the hook to check for. If\n * omitted, will check for any hook being executed.\n *\n * @return {boolean} Whether the hook is being executed.\n */\n\n/**\n * Returns a function which, when invoked, will return whether a hook is\n * currently being executed.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DoingHook} Function that returns whether a hook is currently\n * being executed.\n */\nfunction createDoingHook( hooks, storeKey ) {\n\treturn function doingHook( hookName ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\t// If the hookName was not passed, check for any current hook.\n\t\tif ( 'undefined' === typeof hookName ) {\n\t\t\treturn 'undefined' !== typeof hooksStore.__current[ 0 ];\n\t\t}\n\n\t\t// Return the __current hook.\n\t\treturn hooksStore.__current[ 0 ]\n\t\t\t? hookName === hooksStore.__current[ 0 ].name\n\t\t\t: false;\n\t};\n}\n\nexport default createDoingHook;\n","/**\n * Internal dependencies\n */\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback DidHook\n *\n * Returns the number of times an action has been fired.\n *\n * @param {string} hookName The hook name to check.\n *\n * @return {number | undefined} The number of times the hook has run.\n */\n\n/**\n * Returns a function which, when invoked, will return the number of times a\n * hook has been called.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DidHook} Function that returns a hook's call count.\n */\nfunction createDidHook( hooks, storeKey ) {\n\treturn function didHook( hookName ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn hooksStore[ hookName ] && hooksStore[ hookName ].runs\n\t\t\t? hooksStore[ hookName ].runs\n\t\t\t: 0;\n\t};\n}\n\nexport default createDidHook;\n","/**\n * Internal dependencies\n */\nimport createAddHook from './createAddHook';\nimport createRemoveHook from './createRemoveHook';\nimport createHasHook from './createHasHook';\nimport createRunHook from './createRunHook';\nimport createCurrentHook from './createCurrentHook';\nimport createDoingHook from './createDoingHook';\nimport createDidHook from './createDidHook';\n\n/**\n * Internal class for constructing hooks. Use `createHooks()` function\n *\n * Note, it is necessary to expose this class to make its type public.\n *\n * @private\n */\nexport class _Hooks {\n\tconstructor() {\n\t\t/** @type {import('.').Store} actions */\n\t\tthis.actions = Object.create( null );\n\t\tthis.actions.__current = [];\n\n\t\t/** @type {import('.').Store} filters */\n\t\tthis.filters = Object.create( null );\n\t\tthis.filters.__current = [];\n\n\t\tthis.addAction = createAddHook( this, 'actions' );\n\t\tthis.addFilter = createAddHook( this, 'filters' );\n\t\tthis.removeAction = createRemoveHook( this, 'actions' );\n\t\tthis.removeFilter = createRemoveHook( this, 'filters' );\n\t\tthis.hasAction = createHasHook( this, 'actions' );\n\t\tthis.hasFilter = createHasHook( this, 'filters' );\n\t\tthis.removeAllActions = createRemoveHook( this, 'actions', true );\n\t\tthis.removeAllFilters = createRemoveHook( this, 'filters', true );\n\t\tthis.doAction = createRunHook( this, 'actions' );\n\t\tthis.applyFilters = createRunHook( this, 'filters', true );\n\t\tthis.currentAction = createCurrentHook( this, 'actions' );\n\t\tthis.currentFilter = createCurrentHook( this, 'filters' );\n\t\tthis.doingAction = createDoingHook( this, 'actions' );\n\t\tthis.doingFilter = createDoingHook( this, 'filters' );\n\t\tthis.didAction = createDidHook( this, 'actions' );\n\t\tthis.didFilter = createDidHook( this, 'filters' );\n\t}\n}\n\n/** @typedef {_Hooks} Hooks */\n\n/**\n * Returns an instance of the hooks object.\n *\n * @return {Hooks} A Hooks instance.\n */\nfunction createHooks() {\n\treturn new _Hooks();\n}\n\nexport default createHooks;\n","/**\n * Internal dependencies\n */\nimport createHooks from './createHooks';\n\n/** @typedef {(...args: any[])=>any} Callback */\n\n/**\n * @typedef Handler\n * @property {Callback} callback The callback\n * @property {string} namespace The namespace\n * @property {number} priority The namespace\n */\n\n/**\n * @typedef Hook\n * @property {Handler[]} handlers Array of handlers\n * @property {number} runs Run counter\n */\n\n/**\n * @typedef Current\n * @property {string} name Hook name\n * @property {number} currentIndex The index\n */\n\n/**\n * @typedef {Record<string, Hook> & {__current: Current[]}} Store\n */\n\n/**\n * @typedef {'actions' | 'filters'} StoreKey\n */\n\n/**\n * @typedef {import('./createHooks').Hooks} Hooks\n */\n\nexport const defaultHooks = createHooks();\n\nconst {\n\taddAction,\n\taddFilter,\n\tremoveAction,\n\tremoveFilter,\n\thasAction,\n\thasFilter,\n\tremoveAllActions,\n\tremoveAllFilters,\n\tdoAction,\n\tapplyFilters,\n\tcurrentAction,\n\tcurrentFilter,\n\tdoingAction,\n\tdoingFilter,\n\tdidAction,\n\tdidFilter,\n\tactions,\n\tfilters,\n} = defaultHooks;\n\nexport {\n\tcreateHooks,\n\taddAction,\n\taddFilter,\n\tremoveAction,\n\tremoveFilter,\n\thasAction,\n\thasFilter,\n\tremoveAllActions,\n\tremoveAllFilters,\n\tdoAction,\n\tapplyFilters,\n\tcurrentAction,\n\tcurrentFilter,\n\tdoingAction,\n\tdoingFilter,\n\tdidAction,\n\tdidFilter,\n\tactions,\n\tfilters,\n};\n","/**\n * Internal dependencies\n */\nimport { createI18n } from './create-i18n';\n\n/**\n * WordPress dependencies\n */\nimport { defaultHooks } from '@wordpress/hooks';\n\nconst i18n = createI18n( undefined, undefined, defaultHooks );\n\n/**\n * Default, singleton instance of `I18n`.\n */\nexport default i18n;\n\n/*\n * Comments in this file are duplicated from ./i18n due to\n * https://github.com/WordPress/gutenberg/pull/20318#issuecomment-590837722\n */\n\n/**\n * @typedef {import('./create-i18n').LocaleData} LocaleData\n * @typedef {import('./create-i18n').SubscribeCallback} SubscribeCallback\n * @typedef {import('./create-i18n').UnsubscribeCallback} UnsubscribeCallback\n */\n\n/**\n * Returns locale data by domain in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {string} [domain] Domain for which to get the data.\n * @return {LocaleData} Locale data.\n */\nexport const getLocaleData = i18n.getLocaleData.bind( i18n );\n\n/**\n * Merges locale data into the Tannin instance by domain. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data] Locale data configuration.\n * @param {string} [domain] Domain for which configuration applies.\n */\nexport const setLocaleData = i18n.setLocaleData.bind( i18n );\n\n/**\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data] Locale data configuration.\n * @param {string} [domain] Domain for which configuration applies.\n */\nexport const resetLocaleData = i18n.resetLocaleData.bind( i18n );\n\n/**\n * Subscribes to changes of locale data\n *\n * @param {SubscribeCallback} callback Subscription callback\n * @return {UnsubscribeCallback} Unsubscribe callback\n */\nexport const subscribe = i18n.subscribe.bind( i18n );\n\n/**\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n *\n * @param {string} text Text to translate.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated text.\n */\nexport const __ = i18n.__.bind( i18n );\n\n/**\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n *\n * @param {string} text Text to translate.\n * @param {string} context Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated context string without pipe.\n */\nexport const _x = i18n._x.bind( i18n );\n\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n *\n * @param {string} single The text to be used if the number is singular.\n * @param {string} plural The text to be used if the number is plural.\n * @param {number} number The number to compare against to use either the\n * singular or plural form.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\nexport const _n = i18n._n.bind( i18n );\n\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n *\n * @param {string} single The text to be used if the number is singular.\n * @param {string} plural The text to be used if the number is plural.\n * @param {number} number The number to compare against to use either the\n * singular or plural form.\n * @param {string} context Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\nexport const _nx = i18n._nx.bind( i18n );\n\n/**\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n *\n * @return {boolean} Whether locale is RTL.\n */\nexport const isRTL = i18n.isRTL.bind( i18n );\n\n/**\n * Check if there is a translation for a given string (in singular form).\n *\n * @param {string} single Singular form of the string to look up.\n * @param {string} [context] Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n * @return {boolean} Whether the translation exists or not.\n */\nexport const hasTranslation = i18n.hasTranslation.bind( i18n );\n","import IMask from \"imask\";\nimport { __ } from \"@wordpress/i18n\";\n\nexport default class Credit {\n constructor() {\n this.setCardNumberMask();\n this.setCardOwnerMask();\n this.setCardCodeMask();\n this.setCardDateMask();\n this.manageTokenSelect();\n }\n\n setCardNumberMask() {\n const field = document.querySelector(\"#wvp-card-number\");\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000 0000 0000 0000\",\n });\n }\n\n this.handleCardBrand(field);\n\n field.addEventListener(\"input\", () => {\n this.handleCardBrand(field);\n });\n }\n }\n\n setCardOwnerMask() {\n const field = document.querySelector(\"#wvp-card-owner\");\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n const mask = IMask(field, {\n mask: /^[A-Za-z\\s]*$/,\n });\n\n field.addEventListener(\"input\", () => {\n field.value = field.value.toUpperCase();\n mask.updateValue();\n });\n }\n }\n\n setCardDateMask() {\n const field = document.querySelector(\"#wvp-card-date\");\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"00/00\",\n });\n }\n }\n\n setCardCodeMask() {\n const field = document.querySelector(\"#wvp-card-code\");\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000\",\n });\n }\n\n field.addEventListener(\"input\", () => {\n this.setCodeBrand(field);\n });\n }\n }\n\n handleCardBrand(card) {\n const brands = this.getBrands();\n const number = card.value.replace(/\\s/g, \"\");\n let found;\n\n if (!number || card.value.length < 16) return;\n\n this.resetInstallmentsError();\n\n brands.forEach((brand) => {\n if (brand.regex.test(number) && !found) {\n found = brand;\n this.setCardBrand(brand.name, brand.code);\n this.getCardInstallments();\n\n return;\n }\n });\n\n if (!found) {\n this.setCardBrand(\"mono/generic\", 1);\n this.showInstallmentsError();\n }\n }\n\n showInstallmentsError() {\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (errorList) {\n errorList.innerText = __(\n \"Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.\",\n \"vindi-pagamentos\",\n );\n errorList.classList.add(\"active\");\n }\n }\n\n resetInstallmentsError() {\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (errorList) {\n errorList.innerText = \"\";\n errorList.classList.remove(\"active\");\n }\n }\n\n getBrands() {\n return [\n {\n code: 16,\n name: \"elo\",\n regex: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/,\n },\n {\n code: 3,\n name: \"visa\",\n regex: /^4[0-9]{12}(?:[0-9]{3})?$/,\n },\n {\n code: 4,\n name: \"mastercard\",\n regex: /^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/,\n },\n {\n code: 5,\n name: \"amex\",\n regex: /^3[47][0-9]{13}$/,\n },\n {\n code: 25,\n name: \"hipercard\",\n regex: /^(606282|3841\\d{2}|60(?!11)\\d{2})\\d{10}$/,\n },\n {\n code: 20,\n name: \"hiper\",\n regex: /^(637095|637599|637612|637609|637598)\\d*$/,\n },\n ];\n }\n\n setCardBrand(name, code) {\n const img = document.querySelector(\"#wvp-brand-icon\");\n const hidden = document.querySelector(\"#wvp-card-brand\");\n\n if (img) {\n const attr = img.getAttribute(\"data-img\");\n if (attr) {\n img.src = img.src.replace(attr, name);\n img.setAttribute(\"data-img\", name);\n }\n }\n\n if (hidden) {\n hidden.value = code;\n }\n }\n\n setCodeBrand(code) {\n const img = document.querySelector(\"#wvp-cvv-icon\");\n const brand = code.length < 3 ? \"mono/cvv\" : \"cvv\";\n\n if (img) {\n const attr = img.getAttribute(\"data-img\");\n if (attr) {\n img.src = img.src.replace(attr, brand);\n img.setAttribute(\"data-img\", brand);\n }\n }\n }\n manageTokenSelect() {\n jQuery('input[name=\"wc-vindi-pagamentos-credit-payment-token\"]').on('change', (e) => {\n if (jQuery(e.target).is(':checked') && e.target.value !== 'new') {\n this.getCardInstallments(e.target.value);\n }\n const select = document.querySelector(\"#wvp-card-installments\");\n select.innerHTML = \"\";\n });\n }\n\n getCardInstallments(token = null) {\n if (!document.querySelector(\"#wvp-card-installments\")) {\n return;\n }\n\n const brand = document.querySelector(\"#wvp-card-brand\");\n const nonce = document.querySelector(\"#wvp-card-nonce\");\n const total = document.querySelector(\"#wvp-cart-total\");\n\n this.resetInstallmentsError();\n this.setRequestLoader();\n\n const data = {\n price: total.value,\n _wpnonce: nonce.value,\n security: wc_checkout_params.update_order_review_nonce,\n };\n\n // Use token if provided, otherwise use brand\n if (token) {\n data.token = token;\n } else {\n data.brand = brand.value;\n }\n\n // Store the current token to check later\n const currentToken = token;\n\n const xhr = jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments'),\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: function (data) {\n if (data.success) {\n const installments = data.data.installments;\n const select = document.querySelector(\"#wvp-card-installments\");\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (data.data.message) {\n errorList.textContent = data.data.message;\n errorList.classList.add(\"active\");\n }\n\n select.innerHTML = \"\";\n for (const key in installments) {\n const option = document.createElement(\"option\");\n option.value = key;\n option.innerText = installments[key];\n\n select.appendChild(option);\n }\n }\n },\n error: function (xhr, status, error) {\n if (status !== 'abort') {\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (errorList && errorList.innerHTML === \"\") {\n const span = document.createElement(\"span\");\n\n span.innerText = error.message;\n errorList.appendChild(span);\n errorList.classList.add(\"active\");\n }\n }\n },\n complete: () => {\n jQuery(\".wvp-credit-fields\").removeClass(\"processing\").unblock();\n },\n });\n\n // Cancel the request if the token changes\n jQuery('input[name=\"wc-vindi-pagamentos-credit-payment-token\"]').on('change', (e) => {\n if (jQuery(e.target).is(':checked') && e.target.value !== currentToken) {\n xhr.abort();\n }\n });\n }\n\n setRequestLoader() {\n jQuery(\".wvp-credit-fields\")\n .addClass(\"processing\")\n .block({\n message: null,\n overlayCSS: {\n background: \"#fff\",\n opacity: 0.6,\n },\n });\n }\n}","import IMask from \"imask\";\n\nexport default class Gateways {\n constructor() {\n this.setDocumentMask();\n this.handlerPersonType();\n this.setDocumentNameAttribute();\n this.hideGateway();\n this.setFingerPrintEnviroment();\n this.hideBlockDocumentField();\n this.selectedGateway();\n }\n \n\n hideBlockDocumentField() {\n const person = document.querySelector(\n \"#vindi-pagamentos__billing_persontype\",\n );\n\n if (person) {\n person.addEventListener(\"change\", () => {\n if (person.value == 2) {\n this.handlerDocumentField(false);\n } else {\n this.handlerDocumentField(true);\n }\n });\n }\n }\n\n setFingerPrintEnviroment() {\n const enviroment = document.querySelector(\".wvp-enviroment\");\n const elements = document.querySelectorAll(\".wvp-fingerprint\");\n\n if (window.yapay && enviroment) {\n const fingerprint = window.yapay.FingerPrint({\n env: enviroment.value,\n });\n\n elements.forEach((element) => {\n element.value = fingerprint.getFingerPrint();\n });\n }\n }\n\n setDocumentMask() {\n const documents = document.querySelectorAll(\".wc-vindi-customer-document\");\n documents.forEach((element) => {\n if (element.classList.contains(\"wvp-block-field\")) {\n IMask(element, {\n mask: \"000.000.000-00\",\n });\n }\n });\n }\n\n handlerPersonType() {\n const person = document.querySelector(\"#billing_persontype\");\n\n if (person) {\n this.handlerDocumentField(person.value === \"1\");\n\n jQuery(\"#billing_persontype\").change(() => {\n this.handlerDocumentField(person.value === \"1\");\n });\n }\n }\n\n handlerDocumentField(show) {\n const documents = document.querySelectorAll(\n \".vindi-pagamentos-document\",\n );\n documents.forEach((element) => {\n if (show) {\n element.classList.add(\"vindi-pagamentos-document-hidden\");\n } else {\n element.classList.remove(\"vindi-pagamentos-document-hidden\");\n }\n });\n }\n\n setDocumentNameAttribute() {\n const documents = document.querySelectorAll(\".wc-vindi-customer-document\");\n\n documents.forEach((element) => {\n element.addEventListener(\"focusin\", () => {\n this.unsetDocumentNameAttribute();\n\n element.setAttribute(\"name\", \"wc-vindi-customer-document\");\n });\n });\n }\n\n unsetDocumentNameAttribute() {\n const documents = document.querySelectorAll(\".wc-vindi-customer-document\");\n\n documents.forEach((element) => {\n element.removeAttribute(\"name\");\n });\n }\n\n hideGateway() {\n const hiddens = document.querySelectorAll(\".wvp-hidden-gateway\");\n\n hiddens.forEach((hidden) => {\n const gateway = document.querySelector(`.payment_method_${hidden.value}`);\n if (gateway) {\n gateway.classList.add(\"wvp-hidden-gateway\");\n } else {\n this.hideBlockGateways(hidden);\n }\n });\n }\n\n hideBlockGateways(gateway) {\n const input = document.querySelector(`#hidden-${gateway.value}`);\n if (input) {\n const parent = input.parentElement.parentElement;\n parent.classList.add(\"wvp-hidden-gateway\");\n }\n }\n\n selectedGateway() {\n const gateways = document.querySelectorAll('form.checkout input[name^=\"payment_method\"]');\n gateways.forEach(gateway => {\n gateway.addEventListener('change', () => {\n const event = new Event('update_checkout');\n document.body.dispatchEvent(event)\n });\n });\n }\n\n}\n","export default class Trasnfer {\n constructor() {\n this.handleBankBrands();\n }\n\n handleBankBrands() {\n const brands = document.querySelectorAll(\".wvp-transfer-brand\");\n const bank = document.querySelector(\"#wvp-transfer-bank\");\n\n if (bank) {\n brands.forEach((brand) => {\n brand.addEventListener(\"click\", () => {\n this.clearSelectedBrands();\n\n brand.classList.add(\"wvp-transfer-brand-selected\");\n bank.value = brand.getAttribute(\"data-bank\");\n });\n });\n }\n }\n\n clearSelectedBrands() {\n const brands = document.querySelectorAll(\".wvp-transfer-brand-selected\");\n\n brands.forEach((brand) => {\n brand.classList.remove(\"wvp-transfer-brand-selected\");\n });\n }\n}\n","import IMask from \"imask\";\n\nexport default class PaymentLink {\n constructor() {\n if(this.isOrderPayPage()) {\n this.handlePersonType();\n this.handleDocumentMask();\n this.validateFormFields();\n this.fillFormFields();\n }\n }\n\n handlePersonType() {\n const personType = document.querySelector('#billing_persontype');\n\n if (personType) {\n this.selectPersonType();\n\n personType.addEventListener('change', () => {\n this.selectPersonType();\n })\n }\n }\n\n selectPersonType() {\n const personType = document.querySelector('#billing_persontype');\n const cpf = document.querySelector('#billing_cpf_field');\n const cnpj = document.querySelector('#billing_cnpj_field');\n const company = document.querySelector('#billing_company_field');\n\n if (personType.value === '1') {\n cpf.style.display = 'block';\n\n cnpj.style.display = 'none';\n company.style.display = 'none';\n }\n\n if (personType.value === '2') {\n cpf.style.display = 'none';\n\n cnpj.style.display = 'block';\n company.style.display = 'block';\n }\n }\n\n isOrderPayPage() {\n const url = new URLSearchParams(location.href);\n if (url.has(\"vindi-payment-link\")) {\n return true;\n }\n\n return false;\n }\n\n handleDocumentMask() {\n const cpf = document.querySelector('#billing_cpf');\n const cnpj = document.querySelector('#billing_cnpj');\n const phone = document.querySelector('#billing_phone');\n\n if (cpf) {\n IMask(cpf, {\n mask: \"000.000.000-00\",\n });\n }\n\n if (cnpj) {\n IMask(cnpj, {\n mask: \"00.000.000/0000-00\",\n });\n }\n\n if (phone) {\n IMask(phone, {\n mask: \"(00) 0 0000-0000\",\n });\n }\n }\n\n validateFormFields() {\n const form = document.querySelector('.woocommerce > #order_review');\n\n if (form) {\n this.setRequiredAttribute();\n\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n\n this.saveFormData();\n\n if (!form.reportValidity()) {\n setTimeout(() => {\n this.handleWoocommerceLoader(false);\n }, 500);\n\n return;\n }\n\n this.handleWoocommerceLoader(true);\n form.submit();\n });\n }\n }\n\n handleWoocommerceLoader(active = true) {\n const loaders = document.querySelectorAll('.blockUI');\n\n loaders.forEach(loader => {\n loader.style.display = 'block';\n\n if (!active) {\n loader.style.display = 'none';\n }\n });\n }\n\n setRequiredAttribute() {\n const fields = this.getFormFields(true);\n\n fields.forEach(field => {\n const element = document.querySelector(`#billing_${field}`);\n if (element) {\n element.setAttribute('required', true);\n }\n });\n }\n\n getFormFields(requiredOnly = false) {\n let requiredFields = ['first_name', 'last_name', 'person_type', 'country', 'postcode', 'address_1', 'neighborhood', 'number', 'city', 'phone', 'email'];\n\n if (requiredOnly) {\n return requiredFields;\n }\n\n return requiredFields.concat(['address_2', 'cpf', 'cnpj']);\n }\n\n saveFormData() {\n const fields = this.getFormFields();\n const formData = {};\n\n fields.forEach(field => {\n const element = document.querySelector(`#billing_${field}`);\n if (element) {\n formData[field] = element.value;\n }\n });\n\n localStorage.setItem('vindi-pagamento-form-data', JSON.stringify(formData));\n }\n\n fillFormFields() {\n const formData = localStorage.getItem('vindi-pagamento-form-data');\n\n if (formData) {\n const formDataObject = JSON.parse(formData);\n\n for (const key in formDataObject) {\n if (Object.prototype.hasOwnProperty.call(formDataObject, key)) {\n const element = document.querySelector(`#billing_${key}`);\n if (element) {\n element.value = formDataObject[key];\n }\n }\n }\n }\n }\n}\n","export default class Thankyou {\n constructor() {\n this.handleCopyButton();\n }\n\n handleCopyButton() {\n const buttons = document.querySelectorAll(\".copy-button\");\n\n buttons.forEach((button) => {\n button.addEventListener(\"click\", () => {\n const text = button.getAttribute(\"data-text\");\n const input = document.querySelector(\".copy-input\");\n\n try {\n navigator.clipboard.writeText(text);\n input.select();\n } catch (error) {\n input.select();\n document.execCommand(\"copy\");\n }\n });\n });\n }\n}\n","export default class UIManager {\n constructor(modalSelector) {\n this.modalSelector = modalSelector;\n }\n\n initUI() {\n if (jQuery('.order-total-section .total-loader').length === 0) {\n jQuery('.order-total-section').append('<div class=\"total-loader\" style=\"display: none;\"><div class=\"spinner\"></div></div>');\n }\n }\n\n showTotalLoader() {\n jQuery('.order-total-section .total-loader').show();\n jQuery('.total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value')\n .css('opacity', '0.5');\n }\n\n hideTotalLoader() {\n jQuery('.order-total-section .total-loader').hide();\n jQuery('.total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value')\n .css('opacity', '1');\n }\n\n showCouponMessage(message, type) {\n const messageEl = jQuery('.coupon-message');\n messageEl.text(message);\n messageEl.removeClass('success error');\n if (type) {\n messageEl.addClass(type);\n }\n }\n\n displayModal() {\n jQuery(this.modalSelector).css('display', 'block');\n }\n\n hideModal() {\n jQuery(this.modalSelector).hide();\n }\n\n setRequestLoader() {\n jQuery('.wvp-credit-fields, .saved-card-cvv')\n .addClass('processing')\n .block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n\n removeRequestLoader() {\n jQuery('.wvp-credit-fields, .saved-card-cvv')\n .removeClass('processing')\n .unblock();\n }\n\n updateProductInfo(title, price) {\n jQuery('.product-info').html(`\n <h3>${title}</h3>\n <p>Valor: ${price}</p>\n `);\n }\n}","export default class PaymentMethodHandler {\n constructor(modalSelector, uiManager) {\n this.modalSelector = modalSelector;\n this.uiManager = uiManager;\n }\n\n initializeCreditCardHandling() {\n jQuery('.wvp-credit-fields-modal').hide();\n\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n const $this = jQuery(e.currentTarget);\n jQuery('.wvp-credit-fields-modal').slideUp();\n\n if ($this.val() === 'vindi-pagamentos-credit' && !$this.data('token')) {\n $this.closest('.payment-method').find('.wvp-credit-fields-modal').slideDown();\n this.onPaymentMethodChange(null);\n }\n });\n\n jQuery('#wvp-card-number').on('input', () => {\n this.handleCardBrand();\n });\n }\n\n initializeCvvHandling() {\n jQuery('.saved-card-cvv').hide();\n\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n const $this = jQuery(e.currentTarget);\n jQuery('.saved-card-cvv').slideUp();\n\n if ($this.val() === 'vindi-pagamentos-credit' && $this.data('token')) {\n $this.closest('.saved-card').find('.saved-card-cvv').slideDown();\n this.onPaymentMethodChange($this.data('token'));\n }\n });\n\n jQuery('.saved-card-cvv-input').on('input', function () {\n this.value = this.value.replace(/[^0-9]/g, '');\n });\n }\n\n handleCardBrand() {\n const cardField = jQuery('#wvp-card-number');\n if (!cardField.length) return;\n\n const cardNumber = cardField.val().replace(/\\s/g, '');\n if (cardNumber.length < 6) return;\n\n const brands = [\n {\n code: 16,\n name: \"elo\",\n regex: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/,\n },\n {\n code: 3,\n name: \"visa\",\n regex: /^4[0-9]{12}(?:[0-9]{3})?$/,\n },\n {\n code: 4,\n name: \"mastercard\",\n regex: /^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/,\n },\n {\n code: 5,\n name: \"amex\",\n regex: /^3[47][0-9]{13}$/,\n },\n {\n code: 25,\n name: \"hipercard\",\n regex: /^(606282|3841\\d{2}|60(?!11)\\d{2})\\d{10}$/,\n },\n {\n code: 20,\n name: \"hiper\",\n regex: /^(637095|637599|637612|637609|637598)\\d*$/,\n },\n ];\n\n let found = false;\n\n brands.forEach((brand) => {\n if (brand.regex.test(cardNumber) && !found) {\n found = true;\n this.setCardBrand(brand.name, brand.code);\n this.onPaymentMethodChange(null);\n }\n });\n\n if (!found) {\n this.setCardBrand(\"mono/generic\", 1);\n this.showInstallmentsError('Não foi possível reconhecer a bandeira do cartão.');\n }\n }\n\n setCardBrand(name, code) {\n const img = jQuery('#wvp-brand-icon');\n const hidden = jQuery('#wvp-card-brand');\n\n if (img.length) {\n const attr = img.attr('data-img');\n if (attr) {\n img.attr('src', img.attr('src').replace(attr, name));\n img.attr('data-img', name);\n }\n }\n\n if (hidden.length) {\n hidden.val(code);\n }\n }\n\n showInstallmentsError(message) {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html(message).addClass('active');\n }\n }\n\n resetInstallmentsError() {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html('').removeClass('active');\n }\n }\n\n // Set a callback for when payment method changes\n onPaymentMethodChange(token) {\n // This will be replaced by the main class\n }\n\n validateAndGetPaymentData() {\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked');\n \n if (!paymentMethod.length) {\n return { isValid: false, message: 'Por favor, selecione uma forma de pagamento.' };\n }\n\n const paymentMethodValue = paymentMethod.val();\n const tokenId = paymentMethod.data('token');\n \n let cardData = {};\n \n if (paymentMethodValue === 'vindi-pagamentos-credit') {\n if (tokenId) {\n const cvv = jQuery(`#saved_card_cvv_${tokenId}`).val();\n if (!cvv) {\n return { isValid: false, message: 'Por favor, informe o código CVV do cartão.' };\n }\n\n cardData = {\n token_id: tokenId,\n cvv: cvv,\n last4: paymentMethod.data('last4'),\n expiry: paymentMethod.data('expiry')\n };\n } else {\n const cardOwner = jQuery('#wvp-card-owner').val();\n const cardNumber = jQuery('#wvp-card-number').val();\n const cardDate = jQuery('#wvp-card-date').val();\n const cardCode = jQuery('#wvp-card-code').val();\n const cardBrand = jQuery('#wvp-card-brand').val();\n const installments = jQuery('#wvp-card-installments').val() || '1';\n\n if (!cardOwner || !cardNumber || !cardDate || !cardCode) {\n return { isValid: false, message: 'Por favor, preencha todos os dados do cartão de crédito.' };\n }\n\n cardData = {\n owner: cardOwner,\n number: cardNumber,\n date: cardDate,\n code: cardCode,\n brand: cardBrand,\n installments: installments\n };\n }\n }\n \n return { \n isValid: true, \n data: {\n payment_method: paymentMethodValue,\n card_data: cardData\n }\n };\n }\n}","export default class FormHandler {\n constructor() {\n this.personType = '1'; // Default to PF\n }\n\n initializePersonTypeHandling() {\n jQuery('#billing-pf-fields').show();\n jQuery('#billing-pj-fields').hide();\n jQuery('#billing-pf-fields input').prop('required', true);\n jQuery('#billing-pj-fields input').prop('required', false);\n\n this.initializeCpfMask();\n\n jQuery('input[name=\"billing_persontype\"]').on('change', (e) => {\n const isPF = e.target.value === '1';\n this.personType = e.target.value;\n\n jQuery('#billing-pf-fields').toggle(isPF);\n jQuery('#billing-pj-fields').toggle(!isPF);\n\n jQuery('#billing-pf-fields input').prop('required', isPF);\n jQuery('#billing-pj-fields input').prop('required', !isPF);\n\n if (isPF) {\n this.initializeCpfMask();\n } else {\n this.initializeCnpjMask();\n }\n });\n }\n\n initializeCpfMask() {\n const cpfInput = document.querySelector('input[name=\"billing_cpf\"]');\n if (cpfInput && typeof IMask === 'function') {\n IMask(cpfInput, {\n mask: '000.000.000-00',\n });\n }\n }\n\n initializeCnpjMask() {\n const cnpjInput = document.querySelector('input[name=\"billing_cnpj\"]');\n if (cnpjInput && typeof IMask === 'function') {\n IMask(cnpjInput, {\n mask: '00.000.000/0000-00',\n });\n }\n }\n\n validateAndGetBillingData() {\n const personType = jQuery('input[name=\"billing_persontype\"]:checked').val() || '1';\n const isPF = personType === '1';\n\n const billingData = {\n persontype: personType,\n };\n let isValid = true;\n\n const visibleFieldsContainer = isPF ? '#billing-pf-fields' : '#billing-pj-fields';\n\n jQuery(`${visibleFieldsContainer} .missing-data input`).each(function () {\n const field = jQuery(this);\n const fieldName = field.attr('name').replace('billing_', '');\n const value = field.val().trim();\n\n if (!value) {\n field.addClass('error');\n isValid = false;\n } else {\n field.removeClass('error');\n billingData[fieldName] = value;\n }\n });\n\n jQuery(`${visibleFieldsContainer} .has-data .field-display`).each(function () {\n const field = jQuery(this);\n const label = field.find('strong').text();\n let value = field.text();\n\n Object.keys(vindiOneClick.required_fields).forEach(key => {\n const fieldLabel = vindiOneClick.required_fields[key] + ':';\n value = value.replace(fieldLabel, '').trim();\n });\n\n const fieldName = Object.keys(vindiOneClick.required_fields)\n .find(key => vindiOneClick.required_fields[key] === label.replace(':', ''));\n\n if (fieldName) {\n billingData[fieldName] = value;\n }\n });\n\n return {\n isValid: isValid,\n data: billingData,\n message: isValid ? '' : 'Por favor, preencha todos os campos obrigatórios.'\n };\n }\n}","export default class InstallmentsManager {\n constructor(modalSelector, uiManager) {\n this.modalSelector = modalSelector;\n this.uiManager = uiManager;\n this.currentXhr = null;\n }\n\n initializeInstallmentsHandling() {\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n const $this = jQuery(e.currentTarget);\n if ($this.val() === 'vindi-pagamentos-credit') {\n if ($this.data('token')) {\n this.getInstallments($this.data('token'));\n }\n }\n });\n }\n\n getInstallments(token = null, price = null) {\n if (this.currentXhr) {\n this.currentXhr.abort();\n }\n\n let finalPrice = price;\n if (!finalPrice) {\n const totalElement = jQuery('.total-value');\n if (totalElement.length) {\n const totalText = totalElement.text().replace(/[^\\d,.-]/g, '').replace(',', '.');\n finalPrice = parseFloat(totalText);\n }\n \n if (!finalPrice || isNaN(finalPrice)) {\n const basePrice = parseFloat(jQuery('#wvp-cart-total-price').val() || 0);\n const quantity = parseInt(jQuery('#vindi-one-click-quantity').val() || 1);\n finalPrice = basePrice * quantity;\n }\n }\n \n const nonce = jQuery('#wvp-card-nonce').val();\n\n this.resetInstallmentsError();\n this.uiManager.setRequestLoader();\n\n const data = {\n price: finalPrice.toFixed(2),\n _wpnonce: nonce || vindiOneClick.nonce,\n security: typeof wc_checkout_params !== 'undefined' ?\n wc_checkout_params.update_order_review_nonce :\n vindiOneClick.nonce\n };\n\n if (token) {\n data.token = token;\n } else if (jQuery('#wvp-card-brand').length && jQuery('#wvp-card-brand').val()) {\n data.brand = jQuery('#wvp-card-brand').val();\n }\n\n const ajaxUrl = typeof wc_checkout_params !== 'undefined' ?\n wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments') :\n vindiOneClick.ajax_url + '?wc-ajax=checkout_installments';\n\n this.currentXhr = jQuery.ajax({\n url: ajaxUrl,\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: (response) => {\n if (response.success) {\n const installments = response.data.installments;\n\n let targetSelector;\n if (token) {\n targetSelector = `.saved-card:has(input[data-token=\"${token}\"]) select[name=\"wvp-installments\"]`;\n } else {\n targetSelector = '#wvp-card-installments';\n }\n\n const selects = jQuery(targetSelector);\n\n if (response.data.message) {\n this.showInstallmentsMessage(response.data.message);\n }\n\n if (selects.length) {\n selects.each(function () {\n const select = jQuery(this);\n select.empty();\n\n Object.entries(installments).forEach(([key, value]) => {\n select.append(jQuery('<option>', {\n value: key,\n text: value\n }));\n });\n });\n } else {\n console.warn('Seletor de parcelas não encontrado:', targetSelector);\n }\n } else {\n this.showInstallmentsError(response.data.message || 'Erro ao carregar parcelas');\n }\n },\n error: (xhr, status, error) => {\n if (status !== 'abort') {\n this.showInstallmentsError('Não foi possível carregar as parcelas. Tente novamente.');\n }\n },\n complete: () => {\n this.uiManager.removeRequestLoader();\n }\n });\n }\n\n showInstallmentsMessage(message) {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length && message) {\n errorElement.html(message).addClass('active');\n }\n }\n\n showInstallmentsError(message) {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html(message).addClass('active');\n }\n }\n\n resetInstallmentsError() {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html('').removeClass('active');\n }\n }\n}","export default class CouponManager {\n constructor(mainController, modalSelector, uiManager) {\n this.mainController = mainController;\n this.modalSelector = modalSelector;\n this.uiManager = uiManager;\n this.appliedCoupons = [];\n }\n\n initializeCouponHandling() {\n if (jQuery('.applied-coupons-container').length === 0) {\n jQuery('.coupon-form').after('<div class=\"applied-coupons-container\"></div>');\n }\n\n jQuery('#vindi-apply-coupon').on('click', () => {\n this.applyCoupon();\n });\n\n jQuery('#vindi-coupon-code').on('keypress', (e) => {\n if (e.which === 13) {\n e.preventDefault();\n this.applyCoupon();\n }\n });\n }\n\n applyCoupon() {\n const couponCode = jQuery('#vindi-coupon-code').val().trim();\n if (!couponCode) {\n this.uiManager.showCouponMessage('Por favor, informe um código de cupom.', 'error');\n return;\n }\n\n const applyButton = jQuery('#vindi-apply-coupon');\n const loader = jQuery('.coupon-loader');\n\n applyButton.prop('disabled', true);\n loader.show();\n this.uiManager.showCouponMessage('', '');\n this.uiManager.showTotalLoader();\n\n const productInfo = this.mainController.getProductInfo();\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n\n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'validate_one_click_coupon',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n quantity: productInfo.quantity,\n payment_method: paymentMethod,\n coupon_code: couponCode,\n existing_coupons: []\n },\n success: (response) => {\n if (response.success) {\n this.uiManager.showCouponMessage(response.data.messages.coupon_applied || 'Cupom aplicado com sucesso!', 'success');\n \n if (response.data.coupon_codes) {\n this.appliedCoupons = response.data.coupon_codes;\n } else if (response.data.new_coupon) {\n this.appliedCoupons = [couponCode];\n }\n \n jQuery('#vindi-coupon-code').val('');\n \n this.updateAppliedCouponsDisplay(response.data.applied_coupons || []);\n \n this.mainController.onCouponApplied(response.data);\n } else {\n this.uiManager.showCouponMessage(response.data || 'Cupom inválido ou não aplicável.', 'error');\n this.uiManager.hideTotalLoader();\n }\n },\n error: (response) => {\n this.uiManager.showCouponMessage('Erro', 'error');\n this.uiManager.hideTotalLoader();\n },\n complete: () => {\n applyButton.prop('disabled', false);\n loader.hide();\n }\n });\n }\n\n removeCoupon(couponCode) {\n this.appliedCoupons = [];\n \n this.uiManager.showCouponMessage('Cupom removido.', 'success');\n\n jQuery('.applied-coupons-container').empty();\n jQuery('.coupon-discount-row').hide();\n jQuery('.coupon-discount-value').html('');\n jQuery('.total-discount-row').hide();\n jQuery('.total-discount-value').html('');\n \n const productInfo = this.mainController.getProductInfo();\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n \n this.uiManager.showTotalLoader();\n \n const subtotalText = jQuery('.subtotal-value').text();\n jQuery('.total-value').html(subtotalText);\n \n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'calculate_one_click_discount',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n payment_method: paymentMethod,\n quantity: productInfo.quantity,\n coupon_codes: []\n },\n success: (response) => {\n if (response.success) {\n this.mainController.onCouponRemoved(response.data);\n jQuery('.applied-coupons-container').empty();\n }\n },\n error: () => {\n this.uiManager.showCouponMessage('Erro', 'error');\n this.uiManager.hideTotalLoader();\n },\n complete: () => {\n this.uiManager.hideTotalLoader();\n }\n });\n }\n\n updateAppliedCouponsDisplay(coupons) {\n const container = jQuery('.applied-coupons-container');\n container.empty();\n \n if (coupons.length) {\n const heading = jQuery('<h4>').text('Cupom aplicado:');\n container.append(heading);\n \n const couponList = jQuery('<ul class=\"applied-coupons-list\">');\n \n const coupon = coupons[0];\n const listItem = jQuery('<li class=\"applied-coupon-item\">');\n const text = jQuery('<span class=\"coupon-code\">').text(coupon.code);\n const removeBtn = jQuery('<button type=\"button\" class=\"remove-coupon\">').text('×');\n \n removeBtn.on('click', () => this.removeCoupon(coupon.code));\n \n listItem.append(text);\n if (coupon.description && coupon.description !== coupon.code) {\n listItem.append(' - ', jQuery('<span class=\"coupon-description\">').text(coupon.description));\n }\n listItem.append(removeBtn);\n couponList.append(listItem);\n \n container.append(couponList);\n }\n }\n\n getAppliedCoupons() {\n return this.appliedCoupons;\n }\n}","export default class OrderTotalCalculator {\n constructor(modalSelector, mainController, uiManager) {\n this.modalSelector = modalSelector;\n this.mainController = mainController;\n this.uiManager = uiManager;\n }\n\n initializeDiscountHandling() {\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n this.uiManager.showTotalLoader();\n this.updateOrderTotal(jQuery(e.currentTarget).val());\n });\n }\n\n initializeQuantityHandling() {\n const updateAll = () => {\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n if (paymentMethod) {\n this.uiManager.showTotalLoader();\n this.updateOrderTotal(paymentMethod);\n setTimeout(() => {\n if (paymentMethod === 'vindi-pagamentos-credit') {\n this.mainController.updateInstallmentsForSelectedPayment();\n }\n }, 300);\n }\n };\n\n jQuery('.quantity-decrease').on('click', () => {\n const quantityInput = jQuery('#vindi-one-click-quantity');\n const currentValue = parseInt(quantityInput.val());\n if (currentValue > 1) {\n quantityInput.val(currentValue - 1);\n updateAll();\n }\n });\n\n jQuery('.quantity-increase').on('click', () => {\n const quantityInput = jQuery('#vindi-one-click-quantity');\n const currentValue = parseInt(quantityInput.val());\n const maxValue = parseInt(quantityInput.attr('max'));\n if (currentValue < maxValue) {\n quantityInput.val(currentValue + 1);\n updateAll();\n }\n });\n\n jQuery('#vindi-one-click-quantity').on('change', updateAll);\n }\n\n updateOrderTotal(paymentMethod) {\n const productInfo = this.mainController.getProductInfo();\n const appliedCoupons = this.mainController.getAppliedCoupons();\n\n this.uiManager.showTotalLoader();\n\n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'calculate_one_click_discount',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n payment_method: paymentMethod,\n quantity: productInfo.quantity,\n coupon_codes: appliedCoupons\n },\n success: (response) => {\n if (response.success) {\n this.updateOrderTotals(response.data);\n }\n },\n complete: () => {\n this.uiManager.hideTotalLoader();\n }\n });\n }\n\n updateOrderTotals(data) {\n\n jQuery('.payment-discount-row').hide();\n jQuery('.payment-discount-value').html('');\n jQuery('.coupon-discount-row').hide();\n jQuery('.coupon-discount-value').html('');\n jQuery('.total-discount-row').hide();\n jQuery('.total-discount-value').html('');\n\n jQuery('.subtotal-value').html(data.subtotal);\n jQuery('.total-value').html(data.total);\n if (data.total_raw !== undefined && parseFloat(data.total_raw) <= 0) {\n this.uiManager.showCouponMessage(data.messages.coupon_exceeds_total, 'error');\n jQuery('#vindi-process-quick-buy').prop('disabled', true);\n } else {\n jQuery('#vindi-process-quick-buy').prop('disabled', false);\n }\n\n if (data.payment_discount && parseFloat(data.payment_discount) > 0) {\n jQuery('.payment-discount-row').show();\n jQuery('.payment-discount-value').html(data.payment_discount_formated);\n }\n\n const appliedCoupons = this.mainController.getAppliedCoupons();\n const hasCoupons = appliedCoupons && appliedCoupons.length > 0;\n if (hasCoupons && data.coupon_discount && parseFloat(data.coupon_discount) > 0) {\n jQuery('.coupon-discount-row').show();\n jQuery('.coupon-label').html(`Cupom de Desconto:`);\n jQuery('.coupon-discount-value').html(data.coupon_discount_formated);\n }\n\n if (data.has_discount && data.discount && parseFloat(data.has_discount) > 0) {\n jQuery('.total-discount-row').show();\n jQuery('.total-discount-value').html(data.discount);\n }\n\n const newTotal = data.total;\n const oldTotal = jQuery('.total-value').data('previous-value') || '';\n jQuery('.total-value').data('previous-value', newTotal);\n\n const totalChanged = oldTotal !== newTotal;\n\n if (totalChanged || data.update_installments) {\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n if (paymentMethod === 'vindi-pagamentos-credit') {\n setTimeout(() => this.mainController.updateInstallmentsForSelectedPayment(), 300);\n }\n }\n\n this.uiManager.hideTotalLoader();\n }\n}","import UIManager from './components/ui-manager';\nimport PaymentMethodHandler from './components/payment-method-handler';\nimport FormHandler from './components/form-handler';\nimport InstallmentsManager from './components/install-ments-manager';\nimport CouponManager from './components/coupon-manager';\nimport OrderTotalCalculator from './components/order-total-calculator';\n\nexport default class VindiOneClickBuy {\n constructor() {\n this.modalSelector = '#vindi-one-click-modal';\n this.modal = jQuery(this.modalSelector);\n\n if (this.modal.length === 0) {\n return;\n }\n\n this.buyButton = jQuery('.vindi-one-click-buy');\n this.closeBtn = jQuery('.vindi-modal-close');\n this.processButton = jQuery('#vindi-process-quick-buy');\n\n this.uiManager = new UIManager(this.modalSelector);\n this.formHandler = new FormHandler();\n this.paymentHandler = new PaymentMethodHandler(this.modalSelector, this.uiManager);\n this.installmentsManager = new InstallmentsManager(this.modalSelector, this.uiManager);\n this.couponManager = new CouponManager(this, this.modalSelector, this.uiManager);\n this.orderTotalCalculator = new OrderTotalCalculator(this.modalSelector, this, this.uiManager);\n\n this.paymentHandler.onPaymentMethodChange = (token) => {\n this.installmentsManager.getInstallments(token);\n };\n\n this.init();\n }\n\n init() {\n this.bindEvents();\n this.uiManager.initUI();\n this.paymentHandler.initializeCreditCardHandling();\n this.paymentHandler.initializeCvvHandling();\n this.formHandler.initializePersonTypeHandling();\n this.formHandler.initializeCpfMask();\n this.installmentsManager.initializeInstallmentsHandling();\n this.orderTotalCalculator.initializeDiscountHandling();\n this.orderTotalCalculator.initializeQuantityHandling();\n this.couponManager.initializeCouponHandling();\n }\n\n bindEvents() {\n this.buyButton.on('click', (e) => {\n this.handleBuyButtonClick(e);\n });\n this.closeBtn.on('click', () => this.handleCloseModal());\n this.processButton.on('click', () => this.handleProcessPurchase());\n }\n\n handleBuyButtonClick(e) {\n e.preventDefault();\n\n const productId = this.buyButton.data('product-id');\n const productTitle = jQuery('h1.product_title').text();\n const productPrice = jQuery('.price .amount').text();\n\n this.uiManager.displayModal();\n this.uiManager.updateProductInfo(productTitle, productPrice);\n }\n\n handleCloseModal() {\n this.uiManager.hideModal();\n }\n\n handleProcessPurchase() {\n const processButton = this.processButton;\n const loadingSpinner = document.querySelector('.loading-spinner');\n\n processButton.prop('disabled', true);\n loadingSpinner.style.display = 'block';\n\n const billingValidation = this.formHandler.validateAndGetBillingData();\n if (!billingValidation.isValid) {\n alert(billingValidation.message);\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n return;\n }\n\n const paymentValidation = this.paymentHandler.validateAndGetPaymentData();\n if (!paymentValidation.isValid) {\n alert(paymentValidation.message);\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n return;\n }\n\n const productInfo = this.getProductInfo();\n\n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'process_one_click_buy',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n quantity: productInfo.quantity,\n payment_method: paymentValidation.data.payment_method,\n card_data: paymentValidation.data.card_data,\n billing_data: billingValidation.data,\n coupon_codes: this.getAppliedCoupons()\n },\n success: (response) => {\n if (response.success) {\n window.location.href = response.data.redirect;\n } else {\n alert(response.data || 'Erro ao processar pagamento');\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n }\n },\n error: () => {\n alert('Erro ao processar pagamento. Por favor, tente novamente.');\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n }\n });\n }\n\n getProductInfo() {\n return {\n productId: this.buyButton.data('product-id'),\n quantity: parseInt(jQuery('#vindi-one-click-quantity').val() || 1)\n };\n }\n\n getAppliedCoupons() {\n return this.couponManager.getAppliedCoupons();\n }\n\n updateInstallmentsForSelectedPayment() {\n const selectedPaymentMethod = jQuery('input[name=\"payment_method\"]:checked');\n\n if (selectedPaymentMethod.length && selectedPaymentMethod.val() === 'vindi-pagamentos-credit') {\n const tokenId = selectedPaymentMethod.data('token');\n\n if (tokenId) {\n this.installmentsManager.getInstallments(tokenId);\n } else {\n const cardBrand = jQuery('#wvp-card-brand').val();\n if (cardBrand) {\n this.installmentsManager.getInstallments(null);\n }\n }\n }\n }\n\n onCouponApplied(data) {\n this.orderTotalCalculator.updateOrderTotals(data);\n }\n\n onCouponRemoved(data) {\n this.orderTotalCalculator.updateOrderTotals(data, true);\n }\n}","import IMask from \"imask\";\nimport { __ } from \"@wordpress/i18n\";\n\nexport default class VindiMultipayment {\n constructor(settings = {}) {\n this.settings = {\n ajaxUrl: settings.ajaxUrl || (typeof ajaxurl !== 'undefined' ? ajaxurl : '/wp-admin/admin-ajax.php'),\n nonce: settings.nonce || '',\n ...settings\n };\n\n if (!this.settings.nonce) {\n const nonceField = document.querySelector('input[name=\"vindi-pagamento_nonce\"]');\n if (nonceField) {\n this.settings.nonce = nonceField.value;\n }\n }\n\n this.init();\n }\n\n init() {\n this.initElements();\n\n if (this.firstMethodSelect && this.secondMethodSelect) {\n this.setupEventListeners();\n this.initializePaymentFields();\n }\n\n this.prepareFormSubmission();\n this.initPaymentMethodListener('first');\n this.initPaymentMethodListener('second');\n }\n\n initElements() {\n this.firstMethodSelect = document.getElementById('first_payment_method');\n this.secondMethodSelect = document.getElementById('second_payment_method');\n this.firstAmountInput = document.getElementById('first_payment_amount');\n this.secondAmountInput = document.getElementById('second_payment_amount');\n this.cartTotalInput = document.getElementById('cart_total');\n this.errorDiv = document.getElementById('first-payment-amount-error');\n }\n\n setupEventListeners() {\n this.firstMethodSelect.addEventListener('change', () => {\n this.firstMethodValue = this.firstMethodSelect.value;\n this.updateSecondMethodOptions(this.firstMethodSelect.value);\n this.updatePaymentMethodFields(this.firstMethodSelect.value, 'first');\n });\n\n this.secondMethodSelect.addEventListener('change', () => {\n this.secondMethodValue = this.secondMethodSelect.value;\n this.updateFirstMethodOptions(this.secondMethodSelect.value);\n this.updatePaymentMethodFields(this.secondMethodSelect.value, 'second');\n });\n\n if (this.firstAmountInput && this.secondAmountInput && this.cartTotalInput) {\n this.firstAmountInput.addEventListener('input', () => {\n this.updateSecondAmount();\n });\n }\n\n document.addEventListener('updated_checkout', () => {\n setTimeout(() => {\n const firstMethod = this.firstMethodSelect?.value;\n const secondMethod = this.secondMethodSelect?.value;\n\n if (firstMethod === 'credit_card') {\n this.setupCreditCardFunctionality('first');\n }\n\n if (secondMethod === 'credit_card') {\n this.setupCreditCardFunctionality('second');\n }\n }, 500);\n });\n\n document.addEventListener('input', (e) => {\n if (e.target && e.target.id === 'first_wvp-card-number') {\n try {\n this.handleCardBrandDetection(e.target, 'first');\n } catch (error) {\n console.warn('Erro ao detectar bandeira do primeiro cartão:', error);\n }\n }\n\n if (e.target && e.target.id === 'second_wvp-card-number') {\n try {\n this.handleCardBrandDetection(e.target, 'second');\n } catch (error) {\n console.warn('Erro ao detectar bandeira do segundo cartão:', error);\n }\n }\n });\n }\n\n updateSecondMethodOptions(firstMethod) {\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_get_compatible_methods\"),\n type: 'POST',\n data: {\n selected_method: firstMethod,\n target_field: 'second',\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n this.secondMethodSelect.innerHTML = '';\n\n Object.keys(response.data).forEach(method => {\n const option = document.createElement('option');\n option.value = method;\n option.textContent = response.data[method];\n this.secondMethodSelect.appendChild(option);\n });\n\n if (this.secondMethodSelect.options.length > 0) {\n const optionStillExists = Array.from(this.secondMethodSelect.options).some(\n option => option.value === this.secondMethodValue\n );\n\n if (optionStillExists) {\n this.secondMethodSelect.value = this.secondMethodValue\n } else if (this.secondMethodSelect.options.length > 0) {\n this.secondMethodSelect.selectedIndex = 0;\n }\n this.updatePaymentMethodFields(this.secondMethodSelect.value, 'second');\n }\n\n }\n }\n });\n }\n\n updateFirstMethodOptions(secondMethod) {\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_get_compatible_methods\"),\n type: 'POST',\n data: {\n selected_method: secondMethod,\n target_field: 'first',\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n this.firstMethodSelect.innerHTML = '';\n\n Object.keys(response.data).forEach(method => {\n const option = document.createElement('option');\n option.value = method;\n option.textContent = response.data[method];\n this.firstMethodSelect.appendChild(option);\n });\n\n if (this.firstMethodSelect.options.length > 0) {\n const optionStillExists = Array.from(this.firstMethodSelect.options).some(\n option => option.value === this.firstMethodValue\n );\n if (optionStillExists) {\n this.firstMethodSelect.value = this.firstMethodValue\n } else if (this.firstMethodSelect.options.length > 0) {\n this.secondMethodSelect.selectedIndex = 0;\n }\n this.updatePaymentMethodFields(this.firstMethodSelect.value, 'first');\n }\n }\n }\n });\n }\n\n initializePaymentFields() {\n if (this.firstMethodSelect && this.firstMethodSelect.value) {\n this.updatePaymentMethodFields(this.firstMethodSelect.value, 'first');\n this.updateSecondMethodOptions(this.firstMethodSelect.value);\n }\n\n if (this.secondMethodSelect && this.secondMethodSelect.value) {\n this.updatePaymentMethodFields(this.secondMethodSelect.value, 'second');\n } else if (this.secondMethodSelect) {\n const options = this.secondMethodSelect.options;\n if (options.length > 0) {\n this.secondMethodSelect.value = options[0].value;\n this.updatePaymentMethodFields(options[0].value, 'second');\n }\n }\n\n this.updateSecondAmount();\n }\n\n updatePaymentMethodFields(methodType, prefix) {\n if (!methodType) {\n return;\n }\n\n const containerPrefix = prefix === 'first' ? 'payment-method-' : 'second-payment-method-';\n const methodContainers = document.querySelectorAll(`.${prefix}-payment-method .payment-method-content`);\n\n methodContainers.forEach(el => {\n el.style.display = 'none';\n });\n\n const selectedContainer = document.getElementById(`${containerPrefix}${methodType}`);\n\n if (selectedContainer) {\n selectedContainer.style.display = 'block';\n } else {\n this.loadPaymentMethodFields(methodType, prefix);\n }\n\n if (methodType === 'credit_card') {\n this.setupCreditCardFunctionality(prefix);\n }\n }\n\n setupCreditCardFunctionality(prefix) {\n if (prefix === 'first') {\n this.setCardNumberMask(prefix);\n this.setCardOwnerMask(prefix);\n this.setCardCodeMask(prefix);\n this.setCardDateMask(prefix);\n this.manageTokenSelect(prefix);\n\n const cardNumberInput = document.getElementById('first_wvp-card-number');\n if (cardNumberInput && cardNumberInput.value) {\n this.detectCardBrand(cardNumberInput, 'first');\n }\n } else {\n this.setCardNumberMask(prefix);\n this.setCardOwnerMask(prefix);\n this.setCardDateMask(prefix);\n this.setCardCodeMask(prefix);\n this.manageTokenSelect(prefix);\n\n const cardNumberInput = document.getElementById('second_wvp-card-number');\n if (cardNumberInput && cardNumberInput.value) {\n this.detectCardBrand(cardNumberInput, 'second');\n }\n }\n }\n\n loadPaymentMethodFields(method, prefix) {\n const amountInput = prefix === 'first' ? this.firstAmountInput : this.secondAmountInput;\n const amount = amountInput ? amountInput.value : '0,00';\n const container = document.getElementById(`${prefix}-payment-method-fields`);\n\n if (!container) {\n return;\n }\n\n container.innerHTML = '<div class=\"loading\">Carregando...</div>';\n\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_load_payment_method_fields\"),\n type: 'POST',\n data: {\n method: method,\n prefix: prefix + '_',\n amount: this.parseMoneyValue(amount).toString(),\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n const fieldId = prefix === 'first' ? 'payment-method-' + method : 'second-payment-method-' + method;\n\n const existingDiv = document.getElementById(fieldId);\n if (existingDiv) {\n existingDiv.remove();\n }\n\n const fieldDiv = document.createElement('div');\n fieldDiv.id = fieldId;\n fieldDiv.className = 'payment-method-content ' + prefix + '-payment-' + method;\n fieldDiv.innerHTML = response.data;\n container.innerHTML = '';\n container.appendChild(fieldDiv);\n fieldDiv.style.display = 'block';\n\n if (method === 'credit_card') {\n this.initCreditCardMasks(prefix);\n this.setupCreditCardFunctionality(prefix);\n this.initPaymentMethodListener(prefix);\n }\n } else {\n container.innerHTML = '<p>Não foi possível carregar os campos para ' + method + '.</p>';\n }\n },\n error: (xhr, status, error) => {\n console.error(`Erro ao carregar campos para ${method}:`, error);\n container.innerHTML = '<p>Erro ao carregar campos do método de pagamento.</p>';\n }\n });\n }\n\n updateSecondAmount() {\n if (!this.firstAmountInput || !this.secondAmountInput || !this.cartTotalInput) return;\n\n let firstValue = this.parseMoneyValue(this.firstAmountInput.value);\n const cartTotal = parseFloat(this.cartTotalInput.value) || 0;\n\n if (firstValue <= 0 || firstValue >= cartTotal) {\n if (this.errorDiv) this.errorDiv.style.display = 'block';\n this.firstAmountInput.classList.add('error');\n } else {\n if (this.errorDiv) this.errorDiv.style.display = 'none';\n this.firstAmountInput.classList.remove('error');\n }\n\n const secondValue = Math.max(0, cartTotal - firstValue);\n this.secondAmountInput.value = this.formatMoneyDisplay(secondValue);\n\n const secondOriginalInput = document.getElementById('second_payment_amount_original');\n if (secondOriginalInput) {\n secondOriginalInput.value = secondValue.toFixed(2);\n }\n\n const firstAmountForInstallments = document.getElementById('vindi_first_amount_for_installments');\n const secondAmountForInstallments = document.getElementById('vindi_second_amount_for_installments');\n\n if (firstAmountForInstallments) {\n firstAmountForInstallments.value = firstValue.toFixed(2);\n }\n\n if (secondAmountForInstallments) {\n secondAmountForInstallments.value = secondValue.toFixed(2);\n }\n setTimeout(() => {\n const firstMethod = this.firstMethodSelect.value;\n const secondMethod = this.secondMethodSelect.value;\n\n if (firstMethod === 'credit_card') {\n try {\n this.getCardInstallments();\n } catch (e) {\n console.warn('Erro ao atualizar parcelas do primeiro método:', e);\n }\n }\n\n if (secondMethod === 'credit_card') {\n try {\n this.getSecondMethodInstallments();\n } catch (e) {\n console.warn('Erro ao atualizar parcelas do segundo método:', e);\n }\n }\n }, 300);\n }\n\n formatMoneyDisplay(value) {\n return value.toFixed(2).replace('.', ',');\n }\n\n parseMoneyValue(value) {\n if (!value) return 0;\n return parseFloat(value.toString().replace(/[^\\d,.-]/g, '').replace(',', '.')) || 0;\n }\n\n initCreditCardMasks(prefix = '') {\n const prefixStr = prefix ? prefix + '_' : '';\n\n const cardNumberInput = document.getElementById(prefixStr + 'wvp-card-number');\n if (cardNumberInput) {\n cardNumberInput.addEventListener('input', function () {\n let value = this.value.replace(/\\D/g, '');\n let formattedValue = '';\n\n for (let i = 0; i < value.length; i++) {\n if (i > 0 && i % 4 === 0) {\n formattedValue += ' ';\n }\n formattedValue += value[i];\n }\n\n this.value = formattedValue.substring(0, 19);\n });\n }\n\n const cardDateInput = document.getElementById(prefixStr + 'wvp-card-date');\n if (cardDateInput) {\n cardDateInput.addEventListener('input', function () {\n let value = this.value.replace(/\\D/g, '');\n let formattedValue = '';\n\n if (value.length > 2) {\n formattedValue = value.substring(0, 2) + '/' + value.substring(2, 4);\n } else {\n formattedValue = value;\n }\n\n this.value = formattedValue.substring(0, 5);\n });\n }\n\n const cardCodeInput = document.getElementById(prefixStr + 'wvp-card-code');\n if (cardCodeInput) {\n cardCodeInput.addEventListener('input', function () {\n let value = this.value.replace(/\\D/g, '');\n this.value = value.substring(0, 4);\n });\n }\n }\n\n prepareFormSubmission() {\n const checkoutForm = document.querySelector('form.checkout');\n if (!checkoutForm) return;\n const methodMap = {\n 'credit_card': 'vindi-pagamentos-credit',\n 'pix': 'vindi-pagamentos-pix',\n 'bolepix': 'vindi-pagamentos-bolepix'\n };\n\n checkoutForm.addEventListener('submit', (e) => {\n const selectedPaymentMethod = document.querySelector('input[name=\"payment_method\"]:checked');\n if (!selectedPaymentMethod || selectedPaymentMethod.value !== 'vindi-pagamentos-multi-payment') return;\n this.initElements();\n\n const firstMethodShort = this.firstMethodSelect ? this.firstMethodSelect.value : '';\n const secondMethodShort = this.secondMethodSelect ? this.secondMethodSelect.value : '';\n\n if (firstMethodShort === 'credit_card' && secondMethodShort === 'credit_card') {\n const firstCardNumber = document.getElementById('first_wvp-card-number');\n const secondCardNumber = document.getElementById('second_wvp-card-number');\n\n if (firstCardNumber && secondCardNumber) {\n const firstCardClean = firstCardNumber.value.replace(/\\s/g, '');\n const secondCardClean = secondCardNumber.value.replace(/\\s/g, '');\n\n if (firstCardClean === secondCardClean && firstCardClean !== '') {\n e.preventDefault();\n alert(__('Você não pode usar o mesmo cartão para ambos os métodos de pagamento.', 'vindi-pagamentos'));\n return false;\n }\n }\n }\n\n this.removeExistingInputs(checkoutForm, 'multi_payment');\n\n const firstMethod = methodMap[firstMethodShort] || firstMethodShort;\n const secondMethod = methodMap[secondMethodShort] || secondMethodShort;\n\n\n const firstAmount = this.firstAmountInput ? this.firstAmountInput.value : '';\n const secondAmount = this.secondAmountInput ? this.secondAmountInput.value : '';\n this.addHiddenInput(checkoutForm, 'multi_payment[first_method]', firstMethod);\n this.addHiddenInput(checkoutForm, 'multi_payment[second_method]', secondMethod);\n this.addHiddenInput(checkoutForm, 'multi_payment[first_amount]', firstAmount);\n this.addHiddenInput(checkoutForm, 'multi_payment[second_amount]', secondAmount);\n\n const firstPaymentMethodId = this.getPaymentMethodId(firstMethodShort);\n this.addHiddenInput(checkoutForm, 'payment[payment_method_id]', firstPaymentMethodId);\n\n if (firstMethodShort === 'credit_card') {\n this.collectFirstCreditCardData(checkoutForm);\n }\n\n if (secondMethodShort === 'credit_card') {\n this.collectSecondCreditCardData(checkoutForm);\n }\n });\n }\n\n collectFirstCreditCardData(form) {\n const cardOwner = document.getElementById('first_wvp-card-owner');\n const cardNumber = document.getElementById('first_wvp-card-number');\n const cardDate = document.getElementById('first_wvp-card-date');\n const cardCode = document.getElementById('first_wvp-card-code');\n const installments = document.getElementById('first_wvp-card-installments');\n const brandInput = document.getElementById('first_wvp-card-brand');\n\n if (cardNumber) {\n this.addHiddenInput(form, 'payment[card_number]', cardNumber.value.replace(/\\s/g, ''));\n }\n\n if (cardOwner) {\n this.addHiddenInput(form, 'payment[card_name]', cardOwner.value);\n }\n\n if (cardCode) {\n this.addHiddenInput(form, 'payment[card_cvv]', cardCode.value);\n }\n\n if (installments) {\n this.addHiddenInput(form, 'payment[split]', installments.value);\n }\n\n if (brandInput) {\n this.addHiddenInput(form, 'payment[payment_method_id]', brandInput.value || '1');\n }\n\n if (cardDate) {\n const dateParts = cardDate.value.split('/');\n if (dateParts.length === 2) {\n const month = dateParts[0];\n const year = '20' + dateParts[1];\n\n this.addHiddenInput(form, 'payment[card_expiration_date]', cardDate.value);\n this.addHiddenInput(form, 'payment[card_expdate_month]', month);\n this.addHiddenInput(form, 'payment[card_expdate_year]', year);\n }\n }\n }\n\n collectSecondCreditCardData(form) {\n const cardOwner = document.getElementById('second_wvp-card-owner');\n const cardNumber = document.getElementById('second_wvp-card-number');\n const cardDate = document.getElementById('second_wvp-card-date');\n const cardCode = document.getElementById('second_wvp-card-code');\n const installments = document.getElementById('second_wvp-card-installments');\n const brandInput = document.getElementById('second_wvp-card-brand');\n\n if (cardNumber) {\n this.addHiddenInput(form, 'second_payment[card_number]', cardNumber.value.replace(/\\s/g, ''));\n }\n\n if (cardOwner) {\n this.addHiddenInput(form, 'second_payment[card_name]', cardOwner.value);\n }\n\n if (cardCode) {\n this.addHiddenInput(form, 'second_payment[card_cvv]', cardCode.value);\n }\n\n if (installments) {\n this.addHiddenInput(form, 'second_payment[split]', installments.value);\n }\n\n if (brandInput) {\n this.addHiddenInput(form, 'second_payment[payment_method_id]', brandInput.value || '1');\n }\n\n if (cardDate) {\n const dateParts = cardDate.value.split('/');\n if (dateParts.length === 2) {\n const month = dateParts[0];\n const year = '20' + dateParts[1];\n\n this.addHiddenInput(form, 'second_payment[card_expiration_date]', cardDate.value);\n this.addHiddenInput(form, 'second_payment[card_expdate_month]', month);\n this.addHiddenInput(form, 'second_payment[card_expdate_year]', year);\n }\n }\n }\n\n removeExistingInputs(form, prefix) {\n const existingInputs = form.querySelectorAll(`input[name^=\"${prefix}[\"]`);\n existingInputs.forEach(input => input.remove());\n }\n\n getPaymentMethodId(method) {\n const idMap = {\n 'pix': '27', // ID numérico para Pix\n 'credit_card': '1', // ID numérico para Cartão de Crédito\n 'bolepix': '28' // ID numérico para Bolepix\n };\n\n return idMap[method] || '';\n }\n\n addHiddenInput(form, name, value) {\n const existingInput = form.querySelector(`input[name=\"${name}\"]`);\n if (existingInput) {\n existingInput.value = value;\n return;\n }\n\n let input = document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value;\n form.appendChild(input);\n }\n\n setCardBrand(name, code, prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const brandIcon = document.getElementById(`${prefixId}wvp-brand-icon`);\n const brandInput = document.getElementById(`${prefixId}wvp-card-brand`);\n\n if (brandIcon) {\n const currentImg = brandIcon.getAttribute('data-img');\n\n if (currentImg) {\n const newImgSrc = brandIcon.src.replace(currentImg, name);\n brandIcon.src = newImgSrc;\n brandIcon.setAttribute('data-img', name);\n }\n }\n\n if (brandInput) {\n brandInput.value = code;\n }\n\n const brandChangeEvent = new CustomEvent('vindi_card_brand_changed', {\n detail: { prefix, name, code }\n });\n document.dispatchEvent(brandChangeEvent);\n\n if (name !== 'mono/generic') {\n this.updateInstallmentsForBrand(prefix, code);\n }\n }\n\n updateInstallmentsForBrand(prefix, brandCode) {\n if (prefix === 'first') {\n try {\n this.getCardInstallments(null, null, this.parseMoneyValue(this.firstAmountInput.value));\n return;\n } catch (e) {\n console.warn('Erro ao chamar getCardInstallments:', e);\n }\n }\n\n if (prefix === 'second') {\n try {\n this.getSecondMethodInstallments(null, null, this.parseMoneyValue(this.secondAmountInput.value));\n return;\n } catch (e) {\n console.warn('Erro ao chamar getSecondMethodInstallments:', e);\n }\n }\n }\n\n\n updateCompatibleMethods(selectedMethod, targetField) {\n const targetSelect = targetField === 'first' ? this.firstMethodSelect : this.secondMethodSelect;\n if (!targetSelect) return;\n\n const currentSelection = targetSelect.value;\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_get_compatible_methods\"),\n type: 'POST',\n data: {\n selected_method: selectedMethod,\n target_field: targetField,\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n targetSelect.innerHTML = '';\n\n Object.keys(response.data).forEach(method => {\n const option = document.createElement('option');\n option.value = method;\n option.textContent = response.data[method];\n targetSelect.appendChild(option);\n });\n\n const optionExists = Array.from(targetSelect.options)\n .some(opt => opt.value === currentSelection);\n\n if (optionExists) {\n targetSelect.value = currentSelection;\n } else if (targetSelect.options.length > 0) {\n targetSelect.value = targetSelect.options[0].value;\n targetSelect.dispatchEvent(new Event('change'));\n }\n }\n },\n error: (xhr, status, error) => {\n console.error('Erro ao obter métodos compatíveis:', error);\n }\n });\n }\n\n setCardNumberMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-number`);\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000 0000 0000 0000\",\n });\n }\n\n this.detectCardBrand(field, prefix);\n\n field.addEventListener(\"input\", () => {\n this.detectCardBrand(field, prefix);\n });\n }\n }\n\n setCardOwnerMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-owner`);\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n const mask = IMask(field, {\n mask: /^[A-Za-z\\s]*$/,\n });\n\n field.addEventListener(\"input\", () => {\n field.value = field.value.toUpperCase();\n mask.updateValue();\n });\n }\n }\n\n setCardDateMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-date`);\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"00/00\",\n });\n }\n }\n\n setCardCodeMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-code`);\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000\",\n });\n }\n\n field.addEventListener(\"input\", () => {\n this.setCodeBrand(field, prefix);\n });\n }\n }\n\n detectCardBrand(cardInput, prefix) {\n const cardNumber = cardInput.value.replace(/\\s/g, \"\");\n\n if (cardNumber.length < 6) {\n return;\n }\n\n const brands = this.getBrands();\n let foundBrand = null;\n\n brands.forEach(brand => {\n if (brand.regex.test(cardNumber) && !foundBrand) {\n foundBrand = brand;\n }\n });\n\n if (foundBrand) {\n this.setCardBrand(foundBrand.name, foundBrand.code, prefix);\n this.resetInstallmentsError(prefix === 'second');\n if (cardNumber.length >= 13) {\n if (prefix === 'first') {\n this.getCardInstallments();\n } else {\n this.getSecondMethodInstallments();\n }\n }\n return true;\n } else {\n this.setCardBrand(\"mono/generic\", 1, prefix);\n this.showInstallmentsError(prefix === 'second');\n return false;\n }\n }\n\n showInstallmentsError(isSecondMethod = false) {\n const errorList = isSecondMethod ?\n document.querySelector(\"#second_wvp-installments-error\") :\n document.querySelector(\"#first_wvp-installments-error\");\n\n if (errorList) {\n errorList.innerText = __(\n \"Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.\",\n \"vindi-pagamentos\",\n );\n errorList.classList.add(\"active\");\n }\n }\n\n resetInstallmentsError(isSecondMethod = false) {\n const errorList = isSecondMethod ?\n document.querySelector(\"#second_wvp-installments-error\") :\n document.querySelector(\"#first_wvp-installments-error\");\n\n if (errorList) {\n errorList.innerText = \"\";\n errorList.classList.remove(\"active\");\n }\n }\n\n getBrands() {\n return [\n {\n code: 16,\n name: \"elo\",\n regex: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/,\n },\n {\n code: 3,\n name: \"visa\",\n regex: /^4[0-9]{12}(?:[0-9]{3})?$/,\n },\n {\n code: 4,\n name: \"mastercard\",\n regex: /^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/,\n },\n {\n code: 5,\n name: \"amex\",\n regex: /^3[47][0-9]{13}$/,\n },\n {\n code: 25,\n name: \"hipercard\",\n regex: /^(606282|3841\\d{2}|60(?!11)\\d{2})\\d{10}$/,\n },\n {\n code: 20,\n name: \"hiper\",\n regex: /^(637095|637599|637612|637609|637598)\\d*$/,\n },\n ];\n }\n\n setCodeBrand(code, prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const img = document.querySelector(`#${prefixId}wvp-cvv-icon`);\n const brand = code.length < 3 ? \"mono/cvv\" : \"cvv\";\n\n if (img) {\n const attr = img.getAttribute(\"data-img\");\n if (attr) {\n img.src = img.src.replace(attr, brand);\n img.setAttribute(\"data-img\", brand);\n }\n }\n }\n\n manageTokenSelect(prefix) {\n const tokenSelector = prefix === 'first' ?\n 'input[name=\"first_wc-vindi-pagamentos-credit-payment-token\"]' :\n 'input[name=\"second_wc-vindi-pagamentos-credit-payment-token\"]';\n\n jQuery(tokenSelector).on('change', (e) => {\n if (jQuery(e.target).is(':checked')) {\n if (e.target.value !== 'new') {\n if (prefix === 'first') {\n this.getCardInstallments(e.target.value);\n } else {\n this.getSecondMethodInstallments(e.target.value);\n }\n } else {\n const installmentsSelector = prefix === 'first' ?\n \"#first_wvp-card-installments\" :\n \"#second_wvp-card-installments\";\n\n const select = document.querySelector(installmentsSelector);\n if (select) {\n const selectedValue = select.value;\n select.innerHTML = \"\";\n\n if (prefix === 'first') {\n this.getCardInstallments(null, selectedValue);\n } else {\n this.getSecondMethodInstallments(null, selectedValue);\n }\n }\n }\n }\n });\n }\n\n getCardInstallments(token = null, savedSelection = null, price = null) {\n const installmentsSelector = \"#first_wvp-card-installments\";\n const brandSelector = \"#first_wvp-card-brand\";\n const nonceSelector = \"#first_wvp-card-nonce\";\n const errorSelector = \"#first_wvp-installments-error\";\n const fieldsSelector = \".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)\";\n\n if (!document.querySelector(installmentsSelector)) {\n return;\n }\n\n const brand = document.querySelector(brandSelector);\n const nonce = document.querySelector(nonceSelector);\n const total = document.querySelector(\"#wvp-cart-total\");\n\n if (!brand) {\n return;\n }\n\n this.resetInstallmentsError(false);\n\n jQuery('form.checkout').block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n\n this.setRequestLoader(false);\n\n const isMultiPaymentActive = jQuery('#multi_payment_toggle').is(':checked') ||\n jQuery('#vindi_multi_payment_active').val() === '1';\n\n const data = {\n _wpnonce: nonce.value,\n security: wc_checkout_params.update_order_review_nonce,\n };\n\n if (isMultiPaymentActive) {\n const firstAmount = jQuery('#first_payment_amount').val();\n if (firstAmount) {\n data.price = firstAmount.replace(',', '.');\n } else {\n data.price = total.value;\n }\n } else {\n data.price = total.value;\n }\n\n data.brand = brand.value;\n\n if (token) {\n data.token = token;\n }\n\n const currentToken = token;\n\n const xhr = jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments'),\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: (response) => {\n const select = document.querySelector(installmentsSelector);\n select.innerHTML = \"\";\n if (response.success) {\n const installments = response.data.installments;\n const errorList = document.querySelector(errorSelector);\n\n if (response.data.message && errorList) {\n errorList.textContent = response.data.message;\n errorList.classList.add(\"active\");\n }\n\n if (select) {\n if (!savedSelection && select.value) {\n savedSelection = select.value;\n }\n\n const existingOptions = {};\n\n select.innerHTML = \"\";\n\n for (const key in installments) {\n const option = document.createElement(\"option\");\n option.value = key;\n option.innerText = installments[key];\n\n if (!existingOptions[key]) {\n existingOptions[key] = true;\n select.appendChild(option);\n }\n }\n\n if (savedSelection && select.querySelector(`option[value=\"${savedSelection}\"]`)) {\n select.value = savedSelection;\n }\n }\n }\n },\n error: (xhr, status, error) => {\n if (status !== 'abort') {\n const errorList = document.querySelector(errorSelector);\n if (errorList && errorList.innerHTML === \"\") {\n const span = document.createElement(\"span\");\n span.innerText = error.message;\n errorList.appendChild(span);\n errorList.classList.add(\"active\");\n }\n }\n },\n complete: () => {\n jQuery(fieldsSelector).removeClass(\"processing\").unblock();\n jQuery('form.checkout').unblock();\n }\n });\n\n const tokenSelector = 'input[name=\"wc-vindi-pagamentos-credit-payment-token\"]';\n\n jQuery(tokenSelector).on('change', (e) => {\n if (jQuery(e.target).is(':checked') && e.target.value !== currentToken) {\n xhr.abort();\n }\n });\n }\n\n setRequestLoader(isSecondMethod = false) {\n const fieldsSelector = isSecondMethod ?\n \"#segundo-metodo-pagamento .wvp-credit-fields\" :\n \".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)\";\n\n jQuery(fieldsSelector).addClass(\"processing\").block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n\n getSecondMethodInstallments(token = null, savedSelection = null, price = null) {\n const installmentsSelector = \"#second_wvp-card-installments\";\n const brandSelector = \"#second_wvp-card-brand\";\n const nonceSelector = \"#second_wvp-card-nonce\";\n const errorSelector = \"#second_wvp-installments-error\";\n const fieldsSelector = \"#segundo-metodo-pagamento .wvp-credit-fields\";\n\n if (!document.querySelector(installmentsSelector)) {\n return;\n }\n\n const brand = document.querySelector(brandSelector);\n const nonce = document.querySelector(nonceSelector);\n\n if (!brand) {\n return;\n }\n\n const errorList = document.querySelector(errorSelector);\n if (errorList) {\n errorList.innerText = \"\";\n errorList.classList.remove(\"active\");\n }\n\n jQuery('form.checkout').block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n\n jQuery(fieldsSelector).addClass(\"processing\").block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n\n let secondValue = 0;\n\n if (price) {\n secondValue = parseFloat(price.toString().replace(',', '.'));\n } else {\n const secondAmountField = document.querySelector('#second_payment_amount');\n if (secondAmountField && secondAmountField.value) {\n secondValue = parseFloat(secondAmountField.value.replace(',', '.'));\n } else {\n jQuery(fieldsSelector).removeClass(\"processing\").unblock();\n jQuery('form.checkout').unblock();\n return;\n }\n }\n\n const data = {\n _wpnonce: nonce.value,\n security: wc_checkout_params.update_order_review_nonce,\n price: secondValue.toString(),\n brand: brand.value,\n is_second_method: true\n };\n\n if (token) {\n data.token = token;\n }\n\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments'),\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: (response) => {\n const select = document.querySelector(installmentsSelector);\n select.innerHTML = \"\";\n if (response.success) {\n const originalInstallments = response.data.installments;\n const correctedInstallments = {};\n\n const firstOption = Object.values(originalInstallments)[0] || '';\n const match = firstOption.match(/R\\$\\s?([0-9.,]+)/);\n\n if (match && match[1]) {\n const serverValue = parseFloat(match[1].replace('.', '').replace(',', '.'));\n\n if (Math.abs(serverValue - secondValue) > 0.01) {\n const ratio = secondValue / serverValue;\n\n Object.keys(originalInstallments).forEach(key => {\n const text = originalInstallments[key];\n const valueParts = text.split('R$');\n\n if (valueParts.length >= 2) {\n const valueStr = valueParts[1].trim().split(/\\s|-|\\(|>/)[0];\n const value = parseFloat(valueStr.replace('.', '').replace(',', '.'));\n\n const correctedValue = (value * ratio).toFixed(2).replace('.', ',');\n\n correctedInstallments[key] = text.replace(valueStr, correctedValue);\n\n if (text.includes('(R$')) {\n const totalMatch = text.match(/\\(R\\$\\s?([0-9.,]+)/);\n if (totalMatch && totalMatch[1]) {\n const totalValue = parseFloat(totalMatch[1].replace('.', '').replace(',', '.'));\n const correctedTotal = (totalValue * ratio).toFixed(2).replace('.', ',');\n correctedInstallments[key] = correctedInstallments[key].replace(totalMatch[1], correctedTotal);\n }\n }\n } else {\n correctedInstallments[key] = text;\n }\n });\n } else {\n Object.assign(correctedInstallments, originalInstallments);\n }\n } else {\n Object.assign(correctedInstallments, originalInstallments);\n }\n\n if (select) {\n if (!savedSelection && select.value) {\n savedSelection = select.value;\n }\n\n Object.keys(correctedInstallments).forEach(key => {\n const option = document.createElement(\"option\");\n option.value = key;\n option.innerText = correctedInstallments[key];\n select.appendChild(option);\n });\n\n if (savedSelection && select.querySelector(`option[value=\"${savedSelection}\"]`)) {\n select.value = savedSelection;\n }\n }\n }\n },\n error: (xhr, status, error) => {\n if (errorList) {\n errorList.innerText = \"Erro ao calcular parcelas: \" + error;\n errorList.classList.add(\"active\");\n }\n },\n complete: () => {\n jQuery(fieldsSelector).removeClass(\"processing\").unblock();\n jQuery('form.checkout').unblock();\n }\n });\n }\n\n initPaymentMethodListener(prefix) {\n const inputName = `${prefix}_wc-vindi-pagamentos-credit-payment-token`;\n const paymentOptions = document.querySelectorAll(`input[name=\"${inputName}\"]`);\n const ownerFields = document.querySelector(`.${prefix}_wvp-credit-fields-hide`);\n const ownerCardDate = document.querySelector(`.${prefix}_wvp-card-date-hide`);\n\n paymentOptions.forEach((option) => {\n option.addEventListener('change', () => {\n const selectedOption = this.getSelectedPaymentMethod(prefix);\n if (selectedOption && selectedOption !== \"new\") {\n if (ownerFields) ownerFields.style.display = 'none';\n if (ownerCardDate) ownerCardDate.style.display = \"none\";\n } else {\n if (ownerFields) ownerFields.style.display = 'block';\n if (ownerCardDate) ownerCardDate.style.display = \"block\";\n }\n });\n });\n }\n\n getSelectedPaymentMethod(prefix) {\n const inputName = `${prefix}_wc-vindi-pagamentos-credit-payment-token`;\n const selectedInput = document.querySelector(`input[name=\"${inputName}\"]:checked`);\n return selectedInput ? selectedInput.value : null;\n }\n}","import Credit from \"./checkout/credit\";\nimport Gateways from \"./checkout/gateways\";\nimport Trasnfer from \"./checkout/transfer\";\nimport PaymentLink from \"./order/payment-link\";\nimport Thankyou from \"./order/thankyou\";\nimport VindiOneClickBuy from \"./order/one-click-buy\";\nimport VindiMultipayment from \"./checkout/vindi-multipayment\";\n\n\nwindow.vindiMultiPaymentSettings = window.vindiMultiPaymentSettings || {\n ajaxUrl: typeof ajaxurl !== 'undefined' ? ajaxurl : '/wp-admin/admin-ajax.php',\n totalAmount: '0.00',\n currency: 'BRL',\n currencySymbol: 'R$'\n};\n\n(function ($) {\n $(document).on(\"ready updated_checkout\", () => {\n new Thankyou();\n new Credit();\n new Trasnfer();\n new Gateways();\n new PaymentLink();\n new VindiOneClickBuy();\n new VindiMultipayment();\n });\n\n $(document).on(\"add_checkout_block_fields\", () => {\n new Trasnfer();\n new Gateways();\n });\n\n})(jQuery);\n"],"names":["$297913352d90e18e$export$844ec244b1367d54","str","String","$297913352d90e18e$export$a6cdc56e425d0d0a","obj","_obj$constructor","constructor","name","$297913352d90e18e$export$357523c63a2253b9","keys","Array","isArray","_","k","includes","Object","entries","reduce","acc","_ref","v","$297913352d90e18e$export$9106728c49045482","NONE","LEFT","FORCE_LEFT","RIGHT","FORCE_RIGHT","$297913352d90e18e$export$32af4dafed14c8ce","direction","$297913352d90e18e$export$7c57da42ce8e346f","replace","$297913352d90e18e$export$7aeb68f71172641d","b","a","arrA","arrB","i","length","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","toString","prototype","hasOwnProperty","call","$009600582982b1de$export$2e2bcd8739ae039","opts","assign","this","value","slice","startChangePos","oldValue","oldSelection","start","Math","min","cursorPos","insertedCount","inserted","substr","removedCount","max","end","removed","head","substring","tail","removeDirection","$6935d2fd91e23121$export$2e2bcd8739ae039","el","InputMask","$04eba1c21f72882d$export$81ad4b1539a22420","mask","Error","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","Masked","Function","MaskedFunction","console","warn","$04eba1c21f72882d$export$a213ae1c699d7230","instanceOpts","_mask","startsWith","$04eba1c21f72882d$export$2e2bcd8739ae039","nOpts","MaskedClass","createMask","$58914a612445e359$export$2e2bcd8739ae039","selectionStart","_unsafeSelectionStart","selectionEnd","_unsafeSelectionEnd","select","_unsafeSelect","isActive","MaskElement","$0b64e8eaf462b1c4$export$2e2bcd8739ae039","input","super","_handlers","rootElement","_this$input$getRootNo","_this$input$getRootNo2","_this$input","getRootNode","document","activeElement","bindEvents","handlers","forEach","event","_toggleEventHandler","EVENTS_MAP","unbindEvents","handler","removeEventListener","addEventListener","selectionChange","drop","click","focus","commit","HTMLMaskElement","$f7b3ffebaa825b51$export$2e2bcd8739ae039","setSelectionRange","$1f98d66e42010ceb$export$2e2bcd8739ae039","root","selection","getSelection","anchorOffset","focusOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","HTMLContenteditableMaskElement","isContentEditable","tagName","masked","_listeners","_value","_unmaskedValue","_saveSelection","bind","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","maskEquals","_this$masked","updateOptions","unmaskedValue","updateControl","typedValue","val","typedValueEquals","displayValue","_unbindEvents","_fireEvent","ev","e","listeners","l","_cursorChanging","_changingCursorPos","pos","_selection","newUnmaskedValue","newValue","newDisplayValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","updateCursor","_delayUpdateCursor","_abortUpdateCursor","setTimeout","_inputEvent","isComplete","clearTimeout","nearestInputPos","on","push","off","hIndex","indexOf","splice","details","oldRawValue","rawInputValue","offset","raw","doCommit","preventDefault","stopPropagation","destroy","$42c38c98c80ffb03$export$2e2bcd8739ae039","normalize","prep","rawInserted","skip","tailShift","aggregate","ChangeDetails","$6f0dc42dfe2c31a9$export$2e2bcd8739ae039","from","stop","extend","appendTo","append","_appendPlaceholder","state","unshift","beforePos","shiftChar","shift","$422a8c2668dc4e1a$export$2e2bcd8739ae039","_update","DEFAULTS","_initialized","withValueRefresh","_rawInputValue","reset","resolve","flags","parse","format","extractInput","isFilled","totalInputPositions","fromPos","toPos","extractTail","appendTail","_appendCharRaw","ch","_appendChar","checkTail","consistentState","doPrepareChar","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","_appendEager","_beforeTailState","doPrepare","ci","d","doSkipInvalid","eager","remove","fn","_refreshing","rawInput","ret","runIsolated","_isolated","Boolean","skipInvalid","prepare","prepareChar","validate","parent","deleteCount","tailPos","eagerRemove","valLength","tval","EMPTY_VALUES","undefined","$23b1364d377b0d09$export$2e2bcd8739ae039","chunks","map","join","tailChunk","lastChunk","extendLast","firstTailChunk","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","index","_stops","phDetails","_blocks","remainChars","c","props","cstate","chunkShiftPos","$baa6ec98fc1ffec4$export$2e2bcd8739ae039","_log","ok","block","_blockStartPos","s","pushState","popState","pop","bindBlock","_pushLeft","_this$block","_pushRight","pushLeftBeforeFilled","isFixed","pushLeftBeforeInput","pushLeftBeforeRequired","isOptional","pushRightBeforeFilled","pushRightBeforeInput","pushRightBeforeRequired","$f79d78c596426ad8$export$2e2bcd8739ae039","isUnmasking","_isRawInput","maxPos","appendEager","isResolved","char","$e27282e98e221795$export$2e2bcd8739ae039","placeholderChar","displayChar","lazy","maskOpts","currentMaskFlags","boundPos","_flags$_beforeTailSta","DEFAULT_DEFINITIONS","search","$382bf60a70530ec6$export$2e2bcd8739ae039","definitions","_rebuildMask","defs","exposeBlock","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","p","bNames","filter","bName","sort","expose","blockOpts","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","every","_this$_mapPosToBlock","startBlockIndex","blockIter","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","_blocks2","bDetails","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","cursor","total","maskedBlocks","indices","gi","InputDefinition","FixedDefinition","$4a0e3cc97ad5300d$export$2e2bcd8739ae039","_matchFrom","maxLength","to","autofix","patternOpts","fromStr","padStart","toStr","sameCharsCount","repeat","boundaries","minstr","maxstr","placeholder","num","match","padEnd","nextVal","MaskedRange","$dadb0bbe513c82ac$export$2e2bcd8739ae039","patternBlocks","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","getDate","bk","date","isDateExist","day","month","year","split","$d72501c5bcba0e7e$export$2e2bcd8739ae039","currentMask","exposeMask","compiledMasks","_overwrite","_eager","_skipInvalid","_applyDispatch","prevValueBeforeTail","inputValue","insertValue","tailValue","prevMask","prevMaskState","doDispatch","_flags$_beforeTailSta2","currentMaskRef","dispatch","currentDetails","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","mi","oldMask","_this$currentMask5","inputs","isCurrent","startInputPos","weight","i1","i2","MaskedEnum","enum","_enum","eopts","lengths","requiredLength","optionalLength","some","$53a522de03a4a256$export$2e2bcd8739ae039","_updateRegExps","allowNegative","scale","radix","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","_insertThousandsSeparators","parts","prepCh","allowPositive","_separatorsCount","extendOnSeparators","count","_separatorsCountFromSlice","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","appendDetails","beforeTailValue","beforeTailSeparatorsCount","_findSeparatorAround","searchFrom","separatorPos","separatorAroundFromPos","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","valid","number","isNaN","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","test","dropFractional","UNMASKED_RADIX","n","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","toLocaleString","useGrouping","maximumFractionDigits","$e2045d7156ea1579$export$90dab59c3d4b6e03","MASKED","UNMASKED","TYPED","$e2045d7156ea1579$export$a504d53a5b99e1b9","arg","PIPE_TYPE","createPipe","pipe","globalThis","IMask","$c665d93b2532c65d$export$63151d8bb18a49f9","$c665d93b2532c65d$export$790fb69b1a2884f9","re","not_string","not_bool","not_type","not_primitive","numeric_arg","json","not_json","text","modulo","key","key_access","index_access","sprintf","parse_tree","argv","ph","pad","pad_character","pad_length","is_positive","tree_length","output","param_no","type","TypeError","parseInt","fromCharCode","JSON","stringify","width","precision","parseFloat","toExponential","toFixed","toPrecision","toLowerCase","valueOf","toUpperCase","pad_char","charAt","align","sprintf_format","fmt","sprintf_cache","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","sprintf_parse","arguments","vsprintf","apply","concat","create","window","define","options","size","memoized","args","node","len","searchCache","next","prev","maxSize","clear","memoize","error","$0f4d45ff44486fdb$var$PRECEDENCE","$0f4d45ff44486fdb$var$OPENERS","$0f4d45ff44486fdb$var$TERMINATORS","$0f4d45ff44486fdb$var$PATTERN","$0f4d45ff44486fdb$export$2e2bcd8739ae039","expression","operator","term","element","terms","stack","trim","reverse","$94eef1b2d5e65686$var$OPERATORS","$94eef1b2d5e65686$export$2e2bcd8739ae039","postfix","variables","j","getOperatorResult","earlyReturn","$00d0953cc7be59d8$export$2e2bcd8739ae039","$05530cac947ad0da$var$DEFAULT_OPTIONS","contextDelimiter","onMissingKey","$05530cac947ad0da$export$2e2bcd8739ae039","data","pluralForms","getPluralForm","domain","config","plural","pf","evaluate","plural_forms","part","$05530cac947ad0da$var$getPluralExpression","dcnpgettext","context","singular","entry","DEFAULT_LOCALE_DATA","I18N_HOOK_REGEXP","$5a069099b4672102$export$2e2bcd8739ae039","namespace","$a478171861c8c86e$export$2e2bcd8739ae039","hookName","$fd035fa4006b395f$export$2e2bcd8739ae039","hooks","storeKey","callback","priority","hooksStore","validateHookName","validateNamespace","__current","hookInfo","currentIndex","runs","doAction","$991de1ff8f7500c1$export$2e2bcd8739ae039","removeAll","handlersRemoved","$797ba1df0a5d77ab$export$2e2bcd8739ae039","hook","$2d8581afdd65ecf6$export$2e2bcd8739ae039","returnFirstArg","result","$9c6275b0851c63c2$export$2e2bcd8739ae039","_hooksStore$__current","$c7417ed2fa92e6d4$export$2e2bcd8739ae039","$88ef48e984585ad1$export$2e2bcd8739ae039","_Hooks","actions","filters","addAction","createAddHook","addFilter","removeAction","createRemoveHook","removeFilter","hasAction","createHasHook","hasFilter","removeAllActions","removeAllFilters","createRunHook","applyFilters","currentAction","createCurrentHook","currentFilter","doingAction","createDoingHook","doingFilter","didAction","createDidHook","didFilter","defaultHooks","i18n","createI18n","initialData","initialDomain","tannin","Tannin","Set","notifyListeners","listener","doSetLocaleData","setLocaleData","single","getFilterDomain","_x","translation","onHookAddedOrRemoved","getLocaleData","addLocaleData","resetLocaleData","add","delete","__","_n","_nx","isRTL","hasTranslation","subscribe","$195372cf1c3f224d$export$2e2bcd8739ae039","setCardNumberMask","setCardOwnerMask","setCardCodeMask","setCardDateMask","manageTokenSelect","field","querySelector","classList","contains","handleCardBrand","setCodeBrand","card","brands","getBrands","found","resetInstallmentsError","brand","regex","setCardBrand","code","getCardInstallments","showInstallmentsError","errorList","innerText","$0f347b570078cb3c$export$c6452175cea4361a","img","hidden","attr","getAttribute","src","setAttribute","jQuery","target","is","innerHTML","token","nonce","setRequestLoader","price","_wpnonce","security","wc_checkout_params","update_order_review_nonce","currentToken","xhr","ajax","url","wc_ajax_url","method","contentType","success","installments","message","option","createElement","appendChild","status","span","complete","removeClass","unblock","abort","addClass","overlayCSS","background","opacity","$47c6bc6166a7a9a8$export$2e2bcd8739ae039","setDocumentMask","handlerPersonType","setDocumentNameAttribute","hideGateway","setFingerPrintEnviroment","hideBlockDocumentField","selectedGateway","person","handlerDocumentField","enviroment","elements","querySelectorAll","yapay","fingerprint","FingerPrint","env","getFingerPrint","change","show","unsetDocumentNameAttribute","removeAttribute","gateway","hideBlockGateways","parentElement","Event","body","dispatchEvent","$cbefbef2c2fe563c$export$2e2bcd8739ae039","handleBankBrands","bank","clearSelectedBrands","$4c0f33845e558c19$export$2e2bcd8739ae039","isOrderPayPage","handlePersonType","handleDocumentMask","validateFormFields","fillFormFields","personType","selectPersonType","cpf","cnpj","company","style","display","URLSearchParams","location","href","has","phone","form","setRequiredAttribute","saveFormData","reportValidity","handleWoocommerceLoader","submit","active","loader","getFormFields","requiredOnly","requiredFields","fields","formData","localStorage","setItem","getItem","formDataObject","$f2a4ac33baae8bcc$export$2e2bcd8739ae039","handleCopyButton","button","navigator","clipboard","writeText","execCommand","$232a8c8a08c6cc34$export$2e2bcd8739ae039","modalSelector","initUI","showTotalLoader","css","hideTotalLoader","hide","showCouponMessage","messageEl","displayModal","hideModal","removeRequestLoader","updateProductInfo","title","html","$fb1cfbf3b5af5be9$export$2e2bcd8739ae039","uiManager","initializeCreditCardHandling","$this","currentTarget","slideUp","closest","find","slideDown","onPaymentMethodChange","initializeCvvHandling","cardField","cardNumber","errorElement","validateAndGetPaymentData","paymentMethod","isValid","paymentMethodValue","tokenId","cardData","cvv","token_id","last4","expiry","cardOwner","cardDate","cardCode","cardBrand","owner","payment_method","card_data","$76be25293da653ff$export$2e2bcd8739ae039","initializePersonTypeHandling","prop","initializeCpfMask","isPF","toggle","initializeCnpjMask","cpfInput","cnpjInput","validateAndGetBillingData","billingData","persontype","visibleFieldsContainer","each","fieldName","label","vindiOneClick","required_fields","fieldLabel","$34dc56aa98751fe2$export$2e2bcd8739ae039","currentXhr","initializeInstallmentsHandling","getInstallments","finalPrice","totalElement","totalText","ajaxUrl","ajax_url","response","targetSelector","selects","showInstallmentsMessage","empty","$41ba05986f823e29$export$2e2bcd8739ae039","mainController","appliedCoupons","initializeCouponHandling","after","applyCoupon","which","couponCode","applyButton","productInfo","getProductInfo","action","product_id","productId","quantity","coupon_code","existing_coupons","messages","coupon_applied","coupon_codes","new_coupon","updateAppliedCouponsDisplay","applied_coupons","onCouponApplied","removeCoupon","subtotalText","onCouponRemoved","coupons","container","heading","couponList","coupon","listItem","removeBtn","description","getAppliedCoupons","$aeb540346e41fa94$export$2e2bcd8739ae039","initializeDiscountHandling","updateOrderTotal","initializeQuantityHandling","updateAll","updateInstallmentsForSelectedPayment","quantityInput","currentValue","updateOrderTotals","subtotal","total_raw","coupon_exceeds_total","payment_discount","payment_discount_formated","coupon_discount","coupon_discount_formated","has_discount","discount","newTotal","oldTotal","update_installments","$9582f32e55dafb58$export$2e2bcd8739ae039","modal","buyButton","closeBtn","processButton","formHandler","paymentHandler","installmentsManager","couponManager","orderTotalCalculator","init","handleBuyButtonClick","handleCloseModal","handleProcessPurchase","productTitle","productPrice","loadingSpinner","billingValidation","alert","paymentValidation","billing_data","redirect","selectedPaymentMethod","$cf01999a38f77380$export$2e2bcd8739ae039","settings","ajaxurl","nonceField","initElements","firstMethodSelect","secondMethodSelect","setupEventListeners","initializePaymentFields","prepareFormSubmission","initPaymentMethodListener","getElementById","firstAmountInput","secondAmountInput","cartTotalInput","errorDiv","firstMethodValue","updateSecondMethodOptions","updatePaymentMethodFields","secondMethodValue","updateFirstMethodOptions","updateSecondAmount","firstMethod","secondMethod","setupCreditCardFunctionality","id","handleCardBrandDetection","error1","selected_method","target_field","selectedIndex","methodType","prefix","containerPrefix","selectedContainer","loadPaymentMethodFields","cardNumberInput","detectCardBrand","cardNumberInput1","amountInput","amount","parseMoneyValue","fieldId","existingDiv","fieldDiv","className","initCreditCardMasks","firstValue","cartTotal","secondValue","formatMoneyDisplay","secondOriginalInput","firstAmountForInstallments","secondAmountForInstallments","getSecondMethodInstallments","e1","prefixStr","formattedValue","cardDateInput","cardCodeInput","checkoutForm","methodMap","credit_card","pix","bolepix","firstMethodShort","secondMethodShort","firstCardNumber","secondCardNumber","firstCardClean","removeExistingInputs","firstAmount","secondAmount","addHiddenInput","firstPaymentMethodId","getPaymentMethodId","collectFirstCreditCardData","collectSecondCreditCardData","brandInput","dateParts","existingInput","prefixId","brandIcon","currentImg","newImgSrc","brandChangeEvent","CustomEvent","detail","updateInstallmentsForBrand","brandCode","updateCompatibleMethods","selectedMethod","targetField","targetSelect","currentSelection","opt","cardInput","foundBrand","isSecondMethod","installmentsSelector","selectedValue","savedSelection","errorSelector","isMultiPaymentActive","existingOptions","fieldsSelector","secondAmountField","is_second_method","originalInstallments","correctedInstallments","values","serverValue","abs","ratio","valueParts","valueStr","correctedValue","totalMatch","correctedTotal","inputName","paymentOptions","ownerFields","ownerCardDate","selectedOption","getSelectedPaymentMethod","selectedInput","$","vindiMultiPaymentSettings","totalAmount","currency","currencySymbol"],"version":3,"file":"index.js.map"}1 {"mappings":"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","sources":["node_modules/imask/esm/core/utils.js","node_modules/imask/esm/core/action-details.js","node_modules/imask/esm/core/holder.js","node_modules/imask/esm/masked/factory.js","node_modules/imask/esm/controls/mask-element.js","node_modules/imask/esm/controls/html-mask-element.js","node_modules/imask/esm/controls/html-input-mask-element.js","node_modules/imask/esm/controls/html-contenteditable-mask-element.js","node_modules/imask/esm/controls/input.js","node_modules/imask/esm/core/change-details.js","node_modules/imask/esm/core/continuous-tail-details.js","node_modules/imask/esm/masked/base.js","node_modules/imask/esm/masked/pattern/chunk-tail-details.js","node_modules/imask/esm/masked/pattern/cursor.js","node_modules/imask/esm/masked/pattern/fixed-definition.js","node_modules/imask/esm/masked/pattern/input-definition.js","node_modules/imask/esm/masked/regexp.js","node_modules/imask/esm/masked/pattern.js","node_modules/imask/esm/masked/range.js","node_modules/imask/esm/masked/date.js","node_modules/imask/esm/masked/dynamic.js","node_modules/imask/esm/masked/enum.js","node_modules/imask/esm/masked/function.js","node_modules/imask/esm/masked/number.js","node_modules/imask/esm/masked/pipe.js","node_modules/imask/esm/index.js","node_modules/sprintf-js/src/sprintf.js","node_modules/memize/dist/index.js","node_modules/@wordpress/i18n/build-module/@wordpress/i18n/src/sprintf.js","node_modules/@tannin/postfix/index.js","node_modules/@tannin/evaluate/index.js","node_modules/@tannin/compile/index.js","node_modules/tannin/index.js","node_modules/@tannin/plural-forms/index.js","node_modules/@wordpress/i18n/build-module/@wordpress/i18n/src/create-i18n.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/validateNamespace.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/validateHookName.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createAddHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createRemoveHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createHasHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createRunHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createCurrentHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createDoingHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createDidHook.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/createHooks.js","node_modules/@wordpress/hooks/build-module/@wordpress/hooks/src/index.js","node_modules/@wordpress/i18n/build-module/@wordpress/i18n/src/default-i18n.js","assets/scripts/theme/checkout/credit.js","assets/scripts/theme/checkout/gateways.js","assets/scripts/theme/checkout/transfer.js","assets/scripts/theme/order/payment-link.js","assets/scripts/theme/order/thankyou.js","assets/scripts/theme/order/components/ui-manager.js","assets/scripts/theme/order/components/payment-method-handler.js","assets/scripts/theme/order/components/form-handler.js","assets/scripts/theme/order/components/install-ments-manager.js","assets/scripts/theme/order/components/coupon-manager.js","assets/scripts/theme/order/components/order-total-calculator.js","assets/scripts/theme/order/one-click-buy.js","assets/scripts/theme/checkout/vindi-multipayment.js","assets/scripts/theme/index.js"],"sourcesContent":["/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n var _obj$constructor;\n return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n return Object.entries(obj).reduce((acc, _ref) => {\n let [k, v] = _ref;\n if (keys(v, k)) acc[k] = v;\n return acc;\n }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n NONE: 'NONE',\n LEFT: 'LEFT',\n FORCE_LEFT: 'FORCE_LEFT',\n RIGHT: 'RIGHT',\n FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n default:\n return direction;\n }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n const arrA = Array.isArray(a),\n arrB = Array.isArray(b);\n let i;\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n return true;\n }\n if (arrA != arrB) return false;\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n const dateA = a instanceof Date,\n dateB = b instanceof Date;\n if (dateA && dateB) return a.getTime() == b.getTime();\n if (dateA != dateB) return false;\n const regexpA = a instanceof RegExp,\n regexpB = b instanceof RegExp;\n if (regexpA && regexpB) return a.toString() == b.toString();\n if (regexpA != regexpB) return false;\n const keys = Object.keys(a);\n // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n return false;\n}\n\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, isObject, isString, objectIncludes, pick };\n","import { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\nclass ActionDetails {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n\n constructor(opts) {\n Object.assign(this, opts);\n\n // double check if left part was changed (autofilling, other non-standard input triggers)\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n\n /** Start changing position */\n get startChangePos() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n\n /** Inserted symbols count */\n get insertedCount() {\n return this.cursorPos - this.startChangePos;\n }\n\n /** Inserted symbols */\n get inserted() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n\n /** Removed symbols count */\n get removedCount() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos ||\n // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n\n /** Removed symbols */\n get removed() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n\n /** Unchanged head symbols */\n get head() {\n return this.value.substring(0, this.startChangePos);\n }\n\n /** Unchanged tail symbols */\n get tail() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n\n /** Remove direction */\n get removeDirection() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n // align right if delete at right\n return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n // if not range removed (event with backspace)\n this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n}\n\nexport { ActionDetails as default };\n","/** Applies mask on element */\nfunction IMask(el, opts) {\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { isString, isObject, pick } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n if (mask == null) throw new Error('mask property should be defined');\n if (mask instanceof RegExp) return IMask.MaskedRegExp;\n if (isString(mask)) return IMask.MaskedPattern;\n if (mask === Date) return IMask.MaskedDate;\n if (mask === Number) return IMask.MaskedNumber;\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n if (mask instanceof Function) return IMask.MaskedFunction;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n if (!opts) throw new Error('Options in not defined');\n if (IMask.Masked) {\n if (opts.prototype instanceof IMask.Masked) return {\n mask: opts\n };\n\n /*\n handle cases like:\n 1) opts = Masked\n 2) opts = { mask: Masked, ...instanceOpts }\n */\n const {\n mask = undefined,\n ...instanceOpts\n } = opts instanceof IMask.Masked ? {\n mask: opts\n } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n if (mask) {\n const _mask = mask.mask;\n return {\n ...pick(mask, (_, k) => !k.startsWith('_')),\n mask: mask.constructor,\n _mask,\n ...instanceOpts\n };\n }\n }\n if (!isObject(opts)) return {\n mask: opts\n };\n return {\n ...opts\n };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n const nOpts = normalizeOpts(opts);\n const MaskedClass = maskedClass(nOpts.mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be imported manually before creating mask.');\n if (nOpts.mask === MaskedClass) delete nOpts.mask;\n if (nOpts._mask) {\n nOpts.mask = nOpts._mask;\n delete nOpts._mask;\n }\n return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass, normalizeOpts };\n","import IMask from '../core/holder.js';\n\n/** Generic element API to use with mask */\nclass MaskElement {\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n get selectionStart() {\n let start;\n try {\n start = this._unsafeSelectionStart;\n } catch {}\n return start != null ? start : this.value.length;\n }\n\n /** Safely returns selection end */\n get selectionEnd() {\n let end;\n try {\n end = this._unsafeSelectionEnd;\n } catch {}\n return end != null ? end : this.value.length;\n }\n\n /** Safely sets element selection */\n select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n try {\n this._unsafeSelect(start, end);\n } catch {}\n }\n\n /** */\n get isActive() {\n return false;\n }\n /** */\n\n /** */\n\n /** */\n}\n\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n /** HTMLElement to use mask on */\n\n constructor(input) {\n super();\n this.input = input;\n this._handlers = {};\n }\n get rootElement() {\n var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n }\n\n /**\n Is element in focus\n */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /**\n Binds HTMLElement events to mask internal events\n */\n bindEvents(handlers) {\n Object.keys(handlers).forEach(event => this._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]));\n }\n\n /**\n Unbinds HTMLElement events to mask internal events\n */\n unbindEvents() {\n Object.keys(this._handlers).forEach(event => this._toggleEventHandler(event));\n }\n _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n}\n/** Mapping between HTMLElement events and mask internal events */\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n /** InputElement to use mask on */\n\n constructor(input) {\n super(input);\n this.input = input;\n this._handlers = {};\n }\n\n /** Returns InputElement selection start */\n get _unsafeSelectionStart() {\n return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n }\n\n /** Returns InputElement selection end */\n get _unsafeSelectionEnd() {\n return this.input.selectionEnd;\n }\n\n /** Sets InputElement selection */\n _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n get value() {\n return this.input.value;\n }\n set value(value) {\n this.input.value = value;\n }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLInputMaskElement as default };\n","import HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n /** Returns HTMLElement selection start */\n get _unsafeSelectionStart() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Returns HTMLElement selection end */\n get _unsafeSelectionEnd() {\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n const anchorOffset = selection && selection.anchorOffset;\n const focusOffset = selection && selection.focusOffset;\n if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n return anchorOffset;\n }\n return focusOffset;\n }\n\n /** Sets HTMLElement selection */\n _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n const range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n const root = this.rootElement;\n const selection = root.getSelection && root.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n\n /** HTMLElement value */\n get value() {\n return this.input.textContent || '';\n }\n set value(value) {\n this.input.textContent = value;\n }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","import { objectIncludes, DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLInputMaskElement from './html-input-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './html-mask-element.js';\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n /**\n View element\n */\n\n /** Internal {@link Masked} model */\n\n constructor(el, opts) {\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n this._bindEvents();\n\n // refresh\n this.updateValue();\n this._onChange();\n }\n maskEquals(mask) {\n var _this$masked;\n return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n }\n\n /** Masked */\n get mask() {\n return this.masked.mask;\n }\n set mask(mask) {\n if (this.maskEquals(mask)) return;\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n // TODO \"any\" no idea\n this.masked.updateOptions({\n mask\n });\n return;\n }\n const masked = mask instanceof IMask.Masked ? mask : createMask({\n mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n\n /** Raw value */\n get value() {\n return this._value;\n }\n set value(str) {\n if (this.value === str) return;\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Unmasked value */\n get unmaskedValue() {\n return this._unmaskedValue;\n }\n set unmaskedValue(str) {\n if (this.unmaskedValue === str) return;\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Typed unmasked value */\n get typedValue() {\n return this.masked.typedValue;\n }\n set typedValue(val) {\n if (this.masked.typedValueEquals(val)) return;\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n\n /** Display value */\n get displayValue() {\n return this.masked.displayValue;\n }\n\n /** Starts listening to element events */\n _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n\n /** Stops listening to element events */\n _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n\n /** Fires custom event */\n _fireEvent(ev, e) {\n const listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(l => l(e));\n }\n\n /** Current selection start */\n get selectionStart() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n\n /** Current cursor position */\n get cursorPos() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n }\n set cursorPos(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n this._saveSelection();\n }\n\n /** Stores current selection */\n _saveSelection( /* ev */\n ) {\n if (this.displayValue !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n\n /** Syncronizes model value from view */\n updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl() {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (isChanged) this._fireChangeEvents();\n }\n\n /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n updateOptions(opts) {\n const {\n mask,\n ...restOpts\n } = opts;\n const updateMask = !this.maskEquals(mask);\n const updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n if (updateMask || updateOpts) this.updateControl();\n }\n\n /** Updates cursor */\n updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos;\n\n // also queue change cursor for mobile browsers\n this._delayUpdateCursor(cursorPos);\n }\n\n /** Delays cursor update to support mobile browsers */\n _delayUpdateCursor(cursorPos) {\n this._abortUpdateCursor();\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(() => {\n if (!this.el) return; // if was destroyed\n this.cursorPos = this._changingCursorPos;\n this._abortUpdateCursor();\n }, 10);\n }\n\n /** Fires custom events */\n _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n\n /** Aborts delayed cursor update */\n _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n\n /** Aligns cursor to nearest available position */\n alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n }\n\n /** Aligns cursor only if selection is empty */\n alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n this.alignCursor();\n }\n\n /** Adds listener on custom event */\n on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n this._listeners[ev].push(handler);\n return this;\n }\n\n /** Removes custom event listener */\n off(ev, handler) {\n if (!this._listeners[ev]) return this;\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n const hIndex = this._listeners[ev].indexOf(handler);\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n\n /** Handles view input event */\n _onInput(e) {\n this._inputEvent = e;\n this._abortUpdateCursor();\n\n // fix strange IE behavior\n if (!this._selection) return this.updateValue();\n const details = new ActionDetails({\n // new state\n value: this.el.value,\n cursorPos: this.cursorPos,\n // old state\n oldValue: this.displayValue,\n oldSelection: this._selection\n });\n const oldRawValue = this.masked.rawInputValue;\n const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n input: true,\n raw: true\n }).offset;\n\n // force align in remove direction only if no input chars were removed\n // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n\n /** Handles view change event and commits model value */\n _onChange() {\n if (this.displayValue !== this.el.value) {\n this.updateValue();\n }\n this.masked.doCommit();\n this.updateControl();\n this._saveSelection();\n }\n\n /** Handles view drop event, prevents by default */\n _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n /** Restore last selection on focus */\n _onFocus(ev) {\n this.alignCursorFriendly();\n }\n\n /** Restore last selection on focus */\n _onClick(ev) {\n this.alignCursorFriendly();\n }\n\n /** Unbind view events and removes element reference */\n destroy() {\n this._unbindEvents();\n this._listeners.length = 0;\n delete this.el;\n }\n}\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import IMask from './holder.js';\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n /** Inserted symbols */\n\n /** Can skip chars */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n static normalize(prep) {\n return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n }\n constructor(details) {\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n}\nIMask.ChangeDetails = ChangeDetails;\n\nexport { ChangeDetails as default };\n","/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n\n constructor(value, from, stop) {\n if (value === void 0) {\n value = '';\n }\n if (from === void 0) {\n from = 0;\n }\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n toString() {\n return this.value;\n }\n extend(tail) {\n this.value += String(tail);\n }\n appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n get state() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n }\n set state(state) {\n Object.assign(this, state);\n }\n unshift(beforePos) {\n if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n const shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n shift() {\n if (!this.value.length) return '';\n const shiftChar = this.value[this.value.length - 1];\n this.value = this.value.slice(0, -1);\n return shiftChar;\n }\n}\n\nexport { ContinuousTailDetails as default };\n","import ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString, DIRECTION, forceDirection } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n /** */\n\n /** */\n\n /** Transforms value before mask processing */\n\n /** Transforms each char before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing at the end of editing */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n this._value = '';\n this._update({\n ...Masked.DEFAULTS,\n ...opts\n });\n this._initialized = true;\n }\n\n /** Sets and applies new options */\n updateOptions(opts) {\n if (!Object.keys(opts).length) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n\n /** Sets new options */\n _update(opts) {\n Object.assign(this, opts);\n }\n\n /** Mask state */\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n }\n\n /** Resets value */\n reset() {\n this._value = '';\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this.resolve(value, {\n input: true\n });\n }\n\n /** Resolve new value */\n resolve(value, flags) {\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n this.reset();\n this.append(value, flags, '');\n this.doCommit();\n }\n get unmaskedValue() {\n return this.value;\n }\n set unmaskedValue(value) {\n this.resolve(value, {});\n }\n get typedValue() {\n return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n }\n set typedValue(value) {\n if (this.format) {\n this.value = this.format(value, this);\n } else {\n this.unmaskedValue = String(value);\n }\n }\n\n /** Value that includes raw user input */\n get rawInputValue() {\n return this.extractInput(0, this.displayValue.length, {\n raw: true\n });\n }\n set rawInputValue(value) {\n this.resolve(value, {\n raw: true\n });\n }\n get displayValue() {\n return this.value;\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return this.isComplete;\n }\n\n /** Finds nearest input position in direction */\n nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return Math.min(this.displayValue.length, toPos - fromPos);\n }\n\n /** Extracts value in range considering flags */\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return this.displayValue.slice(fromPos, toPos);\n }\n\n /** Extracts tail in range */\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n\n /** Appends tail */\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n\n /** Appends char */\n _appendCharRaw(ch, flags) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n\n /** Appends char */\n _appendChar(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const consistentState = this.state;\n let details;\n [ch, details] = this.doPrepareChar(ch, flags);\n details = details.aggregate(this._appendCharRaw(ch, flags));\n if (details.inserted) {\n let consistentTail;\n let appended = this.doValidate(flags) !== false;\n if (appended && checkTail != null) {\n // validation ok, check tail\n const beforeTailState = this.state;\n if (this.overwrite === true) {\n consistentTail = checkTail.state;\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n checkTail.shift();\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString();\n }\n\n // if ok, rollback state after tail\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n }\n\n // revert all if something went wrong\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n return details;\n }\n\n /** Appends optional placeholder at the end */\n _appendPlaceholder() {\n return new ChangeDetails();\n }\n\n /** Appends optional eager placeholder at the end */\n _appendEager() {\n return new ChangeDetails();\n }\n\n /** Appends symbols considering flags */\n append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags != null && flags.tail) flags._beforeTailState = this.state;\n let details;\n [str, details] = this.doPrepare(str, flags);\n for (let ci = 0; ci < str.length; ++ci) {\n const d = this._appendChar(str[ci], flags, checkTail);\n if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n details.aggregate(d);\n }\n if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n details.aggregate(this._appendEager());\n }\n\n // append tail but aggregate only tailShift\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift;\n // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n\n return details;\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n return new ChangeDetails();\n }\n\n /** Calls function and reapplies current value */\n withValueRefresh(fn) {\n if (this._refreshing || !this._initialized) return fn();\n this._refreshing = true;\n const rawInput = this.rawInputValue;\n const value = this.value;\n const ret = fn();\n this.rawInputValue = rawInput;\n // append lost trailing chars at the end\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.displayValue.length), {}, '');\n }\n delete this._refreshing;\n return ret;\n }\n runIsolated(fn) {\n if (this._isolated || !this._initialized) return fn(this);\n this._isolated = true;\n const state = this.state;\n const ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n doSkipInvalid(ch, flags, checkTail) {\n return Boolean(this.skipInvalid);\n }\n\n /** Prepares string before mask processing */\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n }\n\n /** Prepares each char before mask processing */\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n }\n\n /** Validates if value is acceptable */\n doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n\n /** Does additional processing at the end of editing */\n doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n splice(start, deleteCount, inserted, removeDirection, flags) {\n if (removeDirection === void 0) {\n removeDirection = DIRECTION.NONE;\n }\n if (flags === void 0) {\n flags = {\n input: true\n };\n }\n const tailPos = start + deleteCount;\n const tail = this.extractTail(tailPos);\n const eagerRemove = this.eager === true || this.eager === 'remove';\n let oldRawValue;\n if (eagerRemove) {\n removeDirection = forceDirection(removeDirection);\n oldRawValue = this.extractInput(0, tailPos, {\n raw: true\n });\n }\n let startChangePos = start;\n const details = new ChangeDetails();\n\n // if it is just deletion without insertion\n if (removeDirection !== DIRECTION.NONE) {\n startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n // adjust tailShift if start was aligned\n details.tailShift = startChangePos - start;\n }\n details.aggregate(this.remove(startChangePos));\n if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n if (removeDirection === DIRECTION.FORCE_LEFT) {\n let valLength;\n while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n details.aggregate(new ChangeDetails({\n tailShift: -1\n })).aggregate(this.remove(valLength - 1));\n }\n } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n tail.unshift();\n }\n }\n return details.aggregate(this.append(inserted, flags, tail));\n }\n maskEquals(mask) {\n return this.mask === mask;\n }\n typedValueEquals(value) {\n const tval = this.typedValue;\n return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n }\n}\nMasked.DEFAULTS = {\n skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport IMask from '../../core/holder.js';\n\nclass ChunksTailDetails {\n /** */\n\n constructor(chunks, from) {\n if (chunks === void 0) {\n chunks = [];\n }\n if (from === void 0) {\n from = 0;\n }\n this.chunks = chunks;\n this.from = from;\n }\n toString() {\n return this.chunks.map(String).join('');\n }\n extend(tailChunk) {\n if (!String(tailChunk)) return;\n tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n const lastChunk = this.chunks[this.chunks.length - 1];\n const extendLast = lastChunk && (\n // if stops are same or tail has no stop\n lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n if (tailChunk instanceof ContinuousTailDetails) {\n // check the ability to extend previous chunk\n if (extendLast) {\n // extend previous chunk\n lastChunk.extend(tailChunk.toString());\n } else {\n // append new chunk\n this.chunks.push(tailChunk);\n }\n } else if (tailChunk instanceof ChunksTailDetails) {\n if (tailChunk.stop == null) {\n // unwrap floating chunks to parent, keeping `from` pos\n let firstTailChunk;\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n }\n\n // if tail chunk still has value\n if (tailChunk.toString()) {\n // if chunks contains stops, then popup stop to container\n tailChunk.stop = tailChunk.blockIndex;\n this.chunks.push(tailChunk);\n }\n }\n }\n appendTo(masked) {\n if (!(masked instanceof IMask.MaskedPattern)) {\n const tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n const details = new ChangeDetails();\n for (let ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n const chunk = this.chunks[ci];\n const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n const stop = chunk.stop;\n let chunkBlock;\n if (stop != null && (\n // if block not found or stop is behind lastBlock\n !lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails ||\n // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n const phDetails = masked._appendPlaceholder(stop);\n details.aggregate(phDetails);\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted;\n\n // get not inserted chars\n const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n if (remainChars) details.aggregate(masked.append(remainChars, {\n tail: true\n }));\n } else {\n details.aggregate(masked.append(chunk.toString(), {\n tail: true\n }));\n }\n }\n return details;\n }\n get state() {\n return {\n chunks: this.chunks.map(c => c.state),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n }\n set state(state) {\n const {\n chunks,\n ...props\n } = state;\n Object.assign(this, props);\n this.chunks = chunks.map(cstate => {\n const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n chunk.state = cstate;\n return chunk;\n });\n }\n unshift(beforePos) {\n if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n let ci = 0;\n while (ci < this.chunks.length) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.unshift(chunkShiftPos);\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n ++ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n shift() {\n if (!this.chunks.length) return '';\n let ci = this.chunks.length - 1;\n while (0 <= ci) {\n const chunk = this.chunks[ci];\n const shiftChar = chunk.shift();\n if (chunk.toString()) {\n // chunk still contains value\n // but not shifted - means no more available chars to shift\n if (!shiftChar) break;\n --ci;\n } else {\n // clean if chunk has no value\n this.chunks.splice(ci, 1);\n }\n if (shiftChar) return shiftChar;\n }\n return '';\n }\n}\n\nexport { ChunksTailDetails as default };\n","import { DIRECTION } from '../../core/utils.js';\n\nclass PatternCursor {\n constructor(masked, pos) {\n this.masked = masked;\n this._log = [];\n const {\n offset,\n index\n } = masked._mapPosToBlock(pos) || (pos < 0 ?\n // first\n {\n index: 0,\n offset: 0\n } :\n // last\n {\n index: this.masked._blocks.length,\n offset: 0\n });\n this.offset = offset;\n this.index = index;\n this.ok = false;\n }\n get block() {\n return this.masked._blocks[this.index];\n }\n get pos() {\n return this.masked._blockStartPos(this.index) + this.offset;\n }\n get state() {\n return {\n index: this.index,\n offset: this.offset,\n ok: this.ok\n };\n }\n set state(s) {\n Object.assign(this, s);\n }\n pushState() {\n this._log.push(this.state);\n }\n popState() {\n const s = this._log.pop();\n if (s) this.state = s;\n return s;\n }\n bindBlock() {\n if (this.block) return;\n if (this.index < 0) {\n this.index = 0;\n this.offset = 0;\n }\n if (this.index >= this.masked._blocks.length) {\n this.index = this.masked._blocks.length - 1;\n this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n }\n }\n\n _pushLeft(fn) {\n this.pushState();\n for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n var _this$block;\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n _pushRight(fn) {\n this.pushState();\n for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n if (fn()) return this.ok = true;\n }\n return this.ok = false;\n }\n pushLeftBeforeFilled() {\n return this._pushLeft(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n if (this.offset !== 0) return true;\n });\n }\n pushLeftBeforeInput() {\n // cases:\n // filled input: 00|\n // optional empty input: 00[]|\n // nested block: XX<[]>|\n return this._pushLeft(() => {\n if (this.block.isFixed) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushLeftBeforeRequired() {\n return this._pushLeft(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n return true;\n });\n }\n pushRightBeforeFilled() {\n return this._pushRight(() => {\n if (this.block.isFixed || !this.block.value) return;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n if (this.offset !== this.block.value.length) return true;\n });\n }\n pushRightBeforeInput() {\n return this._pushRight(() => {\n if (this.block.isFixed) return;\n\n // const o = this.offset;\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n // aa|X\n // aa<X|[]>X_ - this will not work\n // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n return true;\n });\n }\n pushRightBeforeRequired() {\n return this._pushRight(() => {\n if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n // TODO check |[*]XX_\n this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n return true;\n });\n }\n}\n\nexport { PatternCursor as default };\n","import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n Object.assign(this, opts);\n this._value = '';\n this.isFixed = true;\n }\n get value() {\n return this._value;\n }\n get unmaskedValue() {\n return this.isUnmasking ? this.value : '';\n }\n get rawInputValue() {\n return this._isRawInput ? this.value : '';\n }\n get displayValue() {\n return this.value;\n }\n reset() {\n this._isRawInput = false;\n this._value = '';\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n if (!this._value) this._isRawInput = false;\n return new ChangeDetails();\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this._value.length;\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n return this._isRawInput ? toPos - fromPos : 0;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this._value.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n get isComplete() {\n return true;\n }\n get isFilled() {\n return Boolean(this._value);\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n const appendEager = this.eager === true || this.eager === 'append';\n const appended = this.char === ch;\n const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n _appendEager() {\n return this._appendChar(this.char, {\n tail: true\n });\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n extractTail() {\n return new ContinuousTailDetails('');\n }\n appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n append(str, flags, tail) {\n const details = this._appendChar(str[0], flags);\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n return details;\n }\n doCommit() {}\n get state() {\n return {\n _value: this._value,\n _rawInputValue: this.rawInputValue\n };\n }\n set state(state) {\n this._value = state._value;\n this._isRawInput = Boolean(state._rawInputValue);\n }\n}\n\nexport { PatternFixedDefinition as default };\n","import createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nclass PatternInputDefinition {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n constructor(opts) {\n const {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager,\n ...maskOpts\n } = opts;\n this.masked = createMask(maskOpts);\n Object.assign(this, {\n parent,\n isOptional,\n placeholderChar,\n displayChar,\n lazy,\n eager\n });\n }\n reset() {\n this.isFilled = false;\n this.masked.reset();\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n if (fromPos === 0 && toPos >= 1) {\n this.isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n return new ChangeDetails();\n }\n get value() {\n return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n get unmaskedValue() {\n return this.masked.unmaskedValue;\n }\n get rawInputValue() {\n return this.masked.rawInputValue;\n }\n get displayValue() {\n return this.masked.value && this.displayChar || this.value;\n }\n get isComplete() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n _appendChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (this.isFilled) return new ChangeDetails();\n const state = this.masked.state;\n // simulate input\n const details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n details.skip = !details.inserted && !this.isOptional;\n this.isFilled = Boolean(details.inserted);\n return details;\n }\n append(str, flags, tail) {\n // TODO probably should be done via _appendChar\n return this.masked.append(str, this.currentMaskFlags(flags), tail);\n }\n _appendPlaceholder() {\n const details = new ChangeDetails();\n if (this.isFilled || this.isOptional) return details;\n this.isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n _appendEager() {\n return new ChangeDetails();\n }\n extractTail(fromPos, toPos) {\n return this.masked.extractTail(fromPos, toPos);\n }\n appendTail(tail) {\n return this.masked.appendTail(tail);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n const minPos = 0;\n const maxPos = this.value.length;\n const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.value.length;\n }\n return this.value.slice(fromPos, toPos).length;\n }\n doValidate(flags) {\n return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n }\n doCommit() {\n this.masked.doCommit();\n }\n get state() {\n return {\n _value: this.value,\n _rawInputValue: this.rawInputValue,\n masked: this.masked.state,\n isFilled: this.isFilled\n };\n }\n set state(state) {\n this.masked.state = state.masked;\n this.isFilled = state.isFilled;\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta;\n return {\n ...flags,\n _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n };\n }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n '0': /\\d/,\n 'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n // http://stackoverflow.com/a/22075070\n '*': /./\n};\n\nexport { PatternInputDefinition as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const mask = opts.mask;\n if (mask) opts.validate = value => value.search(mask) >= 0;\n super._update(opts);\n }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport { DIRECTION } from '../core/utils.js';\nimport Masked from './base.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport PatternCursor from './pattern/cursor.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport PatternInputDefinition from './pattern/input-definition.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Single char for filled input */\n\n /** Show placeholder only when needed */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n constructor(opts) {\n super({\n ...MaskedPattern.DEFAULTS,\n ...opts,\n definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n super._update(opts);\n this._rebuildMask();\n }\n _rebuildMask() {\n const defs = this.definitions;\n this._blocks = [];\n this.exposeBlock = undefined;\n this._stops = [];\n this._maskedBlocks = {};\n const pattern = this.mask;\n if (!pattern || !defs) return;\n let unmaskingBlock = false;\n let optionalBlock = false;\n for (let i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n const p = pattern.slice(i);\n const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n // order by key length\n bNames.sort((a, b) => b.length - a.length);\n // use block name with max length\n const bName = bNames[0];\n if (bName) {\n const {\n expose,\n ...blockOpts\n } = normalizeOpts(this.blocks[bName]);\n const maskedBlock = createMask({\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n ...blockOpts,\n parent: this\n });\n if (maskedBlock) {\n this._blocks.push(maskedBlock);\n if (expose) this.exposeBlock = maskedBlock;\n\n // store block index\n if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n this._maskedBlocks[bName].push(this._blocks.length - 1);\n }\n i += bName.length - 1;\n continue;\n }\n }\n let char = pattern[i];\n let isInput = (char in defs);\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n continue;\n }\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n isInput = false;\n }\n const def = isInput ? new PatternInputDefinition({\n isOptional: optionalBlock,\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n ...normalizeOpts(defs[char]),\n parent: this\n }) : new PatternFixedDefinition({\n char,\n eager: this.eager,\n isUnmasking: unmaskingBlock\n });\n this._blocks.push(def);\n }\n }\n get state() {\n return {\n ...super.state,\n _blocks: this._blocks.map(b => b.state)\n };\n }\n set state(state) {\n const {\n _blocks,\n ...maskedState\n } = state;\n this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n super.state = maskedState;\n }\n reset() {\n super.reset();\n this._blocks.forEach(b => b.reset());\n }\n get isComplete() {\n return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n }\n get isFilled() {\n return this._blocks.every(b => b.isFilled);\n }\n get isFixed() {\n return this._blocks.every(b => b.isFixed);\n }\n get isOptional() {\n return this._blocks.every(b => b.isOptional);\n }\n doCommit() {\n this._blocks.forEach(b => b.doCommit());\n super.doCommit();\n }\n get unmaskedValue() {\n return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.unmaskedValue = unmaskedValue;\n this.appendTail(tail);\n this.doCommit();\n } else super.unmaskedValue = unmaskedValue;\n }\n get value() {\n return this.exposeBlock ? this.exposeBlock.value :\n // TODO return _value when not in change?\n this._blocks.reduce((str, b) => str += b.value, '');\n }\n set value(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.value = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.value = value;\n }\n get typedValue() {\n return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n }\n set typedValue(value) {\n if (this.exposeBlock) {\n const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n this.exposeBlock.typedValue = value;\n this.appendTail(tail);\n this.doCommit();\n } else super.typedValue = value;\n }\n get displayValue() {\n return this._blocks.reduce((str, b) => str += b.displayValue, '');\n }\n appendTail(tail) {\n return super.appendTail(tail).aggregate(this._appendPlaceholder());\n }\n _appendEager() {\n var _this$_mapPosToBlock;\n const details = new ChangeDetails();\n let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n if (startBlockIndex == null) return details;\n\n // TODO test if it works for nested pattern masks\n if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n const d = this._blocks[bi]._appendEager();\n if (!d.inserted) break;\n details.aggregate(d);\n }\n return details;\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const blockIter = this._mapPosToBlock(this.displayValue.length);\n const details = new ChangeDetails();\n if (!blockIter) return details;\n for (let bi = blockIter.index;; ++bi) {\n var _flags$_beforeTailSta;\n const block = this._blocks[bi];\n if (!block) break;\n const blockDetails = block._appendChar(ch, {\n ...flags,\n _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n });\n const skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n extractTail(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n const blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = this._findStopBefore(bi);\n blockChunk.from = this._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n return chunkTail;\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n if (flags === void 0) {\n flags = {};\n }\n if (fromPos === toPos) return '';\n let input = '';\n this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n input += b.extractInput(fromPos, toPos, flags);\n });\n return input;\n }\n _findStopBefore(blockIndex) {\n let stopBefore;\n for (let si = 0; si < this._stops.length; ++si) {\n const stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n return stopBefore;\n }\n\n /** Appends placeholder depending on laziness */\n _appendPlaceholder(toBlockIndex) {\n const details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n if (!startBlockIter) return details;\n const startBlockIndex = startBlockIter.index;\n const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n if (!b.lazy || toBlockIndex != null) {\n var _blocks2;\n const bDetails = b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length);\n this._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n return details;\n }\n\n /** Finds block in pos */\n _mapPosToBlock(pos) {\n let accVal = '';\n for (let bi = 0; bi < this._blocks.length; ++bi) {\n const block = this._blocks[bi];\n const blockStartPos = accVal.length;\n accVal += block.displayValue;\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n }\n _forEachBlocksInRange(fromPos, toPos, fn) {\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const fromBlockIter = this._mapPosToBlock(fromPos);\n if (fromBlockIter) {\n const toBlockIter = this._mapPosToBlock(toPos);\n // process first block\n const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n const fromBlockStartPos = fromBlockIter.offset;\n const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n }\n\n // process last block\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n const removeDetails = super.remove(fromPos, toPos);\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n return removeDetails;\n }\n nearestInputPos(cursorPos, direction) {\n if (direction === void 0) {\n direction = DIRECTION.NONE;\n }\n if (!this._blocks.length) return 0;\n const cursor = new PatternCursor(this, cursorPos);\n if (direction === DIRECTION.NONE) {\n // -------------------------------------------------\n // NONE should only go out from fixed to the right!\n // -------------------------------------------------\n if (cursor.pushRightBeforeInput()) return cursor.pos;\n cursor.popState();\n if (cursor.pushLeftBeforeInput()) return cursor.pos;\n return this.displayValue.length;\n }\n\n // FORCE is only about a|* otherwise is 0\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // try to break fast when *|a\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeFilled();\n if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n cursor.popState();\n }\n\n // forward flow\n cursor.pushLeftBeforeInput();\n cursor.pushLeftBeforeRequired();\n cursor.pushLeftBeforeFilled();\n\n // backward flow\n if (direction === DIRECTION.LEFT) {\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n cursor.popState();\n }\n if (cursor.ok) return cursor.pos;\n if (direction === DIRECTION.FORCE_LEFT) return 0;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return 0;\n }\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // forward flow\n cursor.pushRightBeforeInput();\n cursor.pushRightBeforeRequired();\n if (cursor.pushRightBeforeFilled()) return cursor.pos;\n if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n // backward flow\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n cursor.popState();\n if (cursor.ok) return cursor.pos;\n return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n }\n return cursorPos;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n let total = 0;\n this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n total += b.totalInputPositions(bFromPos, bToPos);\n });\n return total;\n }\n\n /** Get block by name */\n maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n\n /** Get all blocks by name */\n maskedBlocks(name) {\n const indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(gi => this._blocks[gi]);\n }\n}\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/change-details.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n /** */\n\n get _matchFrom() {\n return this.maxLength - String(this.from).length;\n }\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n to = this.to || 0,\n from = this.from || 0,\n maxLength = this.maxLength || 0,\n autofix = this.autofix,\n ...patternOpts\n } = opts;\n this.to = to;\n this.from = from;\n this.maxLength = Math.max(String(to).length, maxLength);\n this.autofix = autofix;\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n let sameCharsCount = 0;\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n super._update(patternOpts);\n }\n get isComplete() {\n return super.isComplete && Boolean(this.value);\n }\n boundaries(str) {\n let minstr = '';\n let maxstr = '';\n const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let details;\n [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n if (!this.autofix || !ch) return [ch, details];\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const nextVal = this.value + ch;\n if (nextVal.length > this.maxLength) return ['', details];\n const [minstr, maxstr] = this.boundaries(nextVal);\n if (Number(maxstr) < this.from) return [fromStr[nextVal.length - 1], details];\n if (Number(minstr) > this.to) {\n if (this.autofix === 'pad' && nextVal.length < this.maxLength) {\n return ['', details.aggregate(this.append(fromStr[nextVal.length - 1] + ch, flags))];\n }\n return [toStr[nextVal.length - 1], details];\n }\n return [ch, details];\n }\n doValidate(flags) {\n const str = this.value;\n const firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n const [minstr, maxstr] = this.boundaries(str);\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n }\n}\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport { isString } from '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n super({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n mask,\n pattern,\n blocks,\n ...patternOpts\n } = {\n ...MaskedDate.DEFAULTS,\n ...opts\n };\n const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n // adjust year block\n if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n patternBlocks.m.from = opts.min.getMonth() + 1;\n patternBlocks.m.to = opts.max.getMonth() + 1;\n if (patternBlocks.m.from === patternBlocks.m.to) {\n patternBlocks.d.from = opts.min.getDate();\n patternBlocks.d.to = opts.max.getDate();\n }\n }\n Object.assign(patternBlocks, this.blocks, blocks);\n\n // add autofix\n Object.keys(patternBlocks).forEach(bk => {\n const b = patternBlocks[bk];\n if (!('autofix' in b) && 'autofix' in opts) b.autofix = opts.autofix;\n });\n super._update({\n ...patternOpts,\n mask: isString(mask) ? mask : pattern,\n blocks: patternBlocks\n });\n }\n doValidate(flags) {\n const date = this.date;\n return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n\n /** Checks if date is exists */\n isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n\n /** Parsed Date */\n get date() {\n return this.typedValue;\n }\n set date(date) {\n this.typedValue = date;\n }\n get typedValue() {\n return this.isComplete ? super.typedValue : null;\n }\n set typedValue(value) {\n super.typedValue = value;\n }\n maskEquals(mask) {\n return mask === Date || super.maskEquals(mask);\n }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n d: {\n mask: MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2\n },\n m: {\n mask: MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2\n },\n Y: {\n mask: MaskedRange,\n from: 1900,\n to: 9999\n }\n});\nMaskedDate.DEFAULTS = {\n mask: Date,\n pattern: 'd{.}`m{.}`Y',\n format: (date, masked) => {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: (str, masked) => {\n const [day, month, year] = str.split('.').map(Number);\n return new Date(year, month - 1, day);\n }\n};\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { DIRECTION, objectIncludes } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n /** Currently chosen mask */\n\n /** Currently chosen mask */\n\n /** Compliled {@link Masked} options */\n\n /** Chooses {@link Masked} depending on input value */\n\n constructor(opts) {\n super({\n ...MaskedDynamic.DEFAULTS,\n ...opts\n });\n this.currentMask = undefined;\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n if ('mask' in opts) {\n this.exposeMask = undefined;\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n const {\n expose,\n ...maskOpts\n } = normalizeOpts(m);\n const masked = createMask({\n overwrite: this._overwrite,\n eager: this._eager,\n skipInvalid: this._skipInvalid,\n ...maskOpts\n });\n if (expose) this.exposeMask = masked;\n return masked;\n }) : [];\n\n // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n }\n }\n\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = this._applyDispatch(ch, flags);\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n }\n return details;\n }\n _applyDispatch(appended, flags, tail) {\n if (appended === void 0) {\n appended = '';\n }\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n const inputValue = this.rawInputValue;\n const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n const tailValue = inputValue.slice(insertValue.length);\n const prevMask = this.currentMask;\n const details = new ChangeDetails();\n const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n // clone flags to prevent overwriting `_beforeTailState`\n this.currentMask = this.doDispatch(appended, {\n ...flags\n }, tail);\n\n // restore state after dispatch\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n if (insertValue) {\n const d = this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n if (tailValue) {\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else if (prevMaskState) {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n return details;\n }\n _appendPlaceholder() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n return details;\n }\n _appendEager() {\n const details = this._applyDispatch();\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendEager());\n }\n return details;\n }\n appendTail(tail) {\n const details = new ChangeDetails();\n if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n }\n currentMaskFlags(flags) {\n var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n return {\n ...flags,\n _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n };\n }\n doDispatch(appended, flags, tail) {\n if (flags === void 0) {\n flags = {};\n }\n if (tail === void 0) {\n tail = '';\n }\n return this.dispatch(appended, this, flags, tail);\n }\n doValidate(flags) {\n return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n }\n doPrepare(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepare(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n doPrepareChar(str, flags) {\n if (flags === void 0) {\n flags = {};\n }\n let [s, details] = super.doPrepareChar(str, flags);\n if (this.currentMask) {\n let currentDetails;\n [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n details = details.aggregate(currentDetails);\n }\n return [s, details];\n }\n reset() {\n var _this$currentMask;\n (_this$currentMask = this.currentMask) == null ? void 0 : _this$currentMask.reset();\n this.compiledMasks.forEach(m => m.reset());\n }\n get value() {\n return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n }\n set value(value) {\n if (this.exposeMask) {\n this.exposeMask.value = value;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.value = value;\n }\n get unmaskedValue() {\n return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n }\n set unmaskedValue(unmaskedValue) {\n if (this.exposeMask) {\n this.exposeMask.unmaskedValue = unmaskedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n } else super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n }\n set typedValue(typedValue) {\n if (this.exposeMask) {\n this.exposeMask.typedValue = typedValue;\n this.currentMask = this.exposeMask;\n this._applyDispatch();\n return;\n }\n let unmaskedValue = String(typedValue);\n\n // double check it\n if (this.currentMask) {\n this.currentMask.typedValue = typedValue;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n this.unmaskedValue = unmaskedValue;\n }\n get displayValue() {\n return this.currentMask ? this.currentMask.displayValue : '';\n }\n get isComplete() {\n var _this$currentMask2;\n return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n }\n get isFilled() {\n var _this$currentMask3;\n return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n }\n remove(fromPos, toPos) {\n const details = new ChangeDetails();\n if (this.currentMask) {\n details.aggregate(this.currentMask.remove(fromPos, toPos))\n // update with dispatch\n .aggregate(this._applyDispatch());\n }\n return details;\n }\n get state() {\n var _this$currentMask4;\n return {\n ...super.state,\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(m => m.state),\n currentMaskRef: this.currentMask,\n currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n };\n }\n set state(state) {\n const {\n compiledMasks,\n currentMaskRef,\n currentMask,\n ...maskedState\n } = state;\n if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n super.state = maskedState;\n }\n extractInput(fromPos, toPos, flags) {\n return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n }\n extractTail(fromPos, toPos) {\n return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n }\n doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n super.doCommit();\n }\n nearestInputPos(cursorPos, direction) {\n return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n }\n get overwrite() {\n return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n }\n set overwrite(overwrite) {\n this._overwrite = overwrite;\n }\n get eager() {\n return this.currentMask ? this.currentMask.eager : this._eager;\n }\n set eager(eager) {\n this._eager = eager;\n }\n get skipInvalid() {\n return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n }\n set skipInvalid(skipInvalid) {\n this._skipInvalid = skipInvalid;\n }\n maskEquals(mask) {\n return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n if (!mask[mi]) return;\n const {\n mask: oldMask,\n ...restOpts\n } = mask[mi];\n return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n }) : super.maskEquals(mask);\n }\n typedValueEquals(value) {\n var _this$currentMask5;\n return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n }\n}\nMaskedDynamic.DEFAULTS = void 0;\nMaskedDynamic.DEFAULTS = {\n dispatch: (appended, masked, flags, tail) => {\n if (!masked.compiledMasks.length) return;\n const inputValue = masked.rawInputValue;\n\n // simulate input\n const inputs = masked.compiledMasks.map((m, index) => {\n const isCurrent = masked.currentMask === m;\n const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n if (m.rawInputValue !== inputValue) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n } else if (!isCurrent) {\n m.remove(startInputPos);\n }\n m.append(appended, masked.currentMaskFlags(flags));\n m.appendTail(tail);\n return {\n index,\n weight: m.rawInputValue.length,\n totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n };\n });\n\n // pop masks with longer values first\n inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './factory.js';\nimport './pattern/chunk-tail-details.js';\nimport './pattern/cursor.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/input-definition.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n constructor(opts) {\n super(opts); // mask will be created in _update\n }\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n const {\n enum: _enum,\n ...eopts\n } = opts;\n if (_enum) {\n const lengths = _enum.map(e => e.length);\n const requiredLength = Math.min(...lengths);\n const optionalLength = Math.max(...lengths) - requiredLength;\n eopts.mask = '*'.repeat(requiredLength);\n if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n this.enum = _enum;\n }\n super._update(eopts);\n }\n doValidate(flags) {\n return this.enum.some(e => e.indexOf(this.unmaskedValue) === 0) && super.doValidate(flags);\n }\n}\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/change-details.js';\nimport '../core/continuous-tail-details.js';\nimport '../core/utils.js';\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n /** */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update({\n ...opts,\n validate: opts.mask\n });\n }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/** Number mask */\nclass MaskedNumber extends Masked {\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** Flag to remove leading and trailing zeros in the end of editing */\n\n /** Flag to pad trailing zeros after point in the end of editing */\n\n /** Enable characters overwriting */\n\n /** */\n\n /** */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super({\n ...MaskedNumber.DEFAULTS,\n ...opts\n });\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n super._update(opts);\n this._updateRegExps();\n }\n _updateRegExps() {\n const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n const mid = '\\\\d*';\n const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n this._numberRegExp = new RegExp(start + mid + end);\n this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n }\n _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n const parts = value.split(this.radix);\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n return parts.join(this.radix);\n }\n doPrepareChar(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n /*\n radix should be mapped when\n 1) input is done from keyboard = flags.input && flags.raw\n 2) unmasked value is set = !flags.input && !flags.raw\n and should not be mapped when\n 1) value is set = flags.input && !flags.raw\n 2) raw value is set = !flags.input && flags.raw\n */\n flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n if (ch && !prepCh) details.skip = true;\n if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n return [prepCh, details];\n }\n _separatorsCount(to, extendOnSeparators) {\n if (extendOnSeparators === void 0) {\n extendOnSeparators = false;\n }\n let count = 0;\n for (let pos = 0; pos < to; ++pos) {\n if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n ++count;\n if (extendOnSeparators) to += this.thousandsSeparator.length;\n }\n }\n return count;\n }\n _separatorsCountFromSlice(slice) {\n if (slice === void 0) {\n slice = this._value;\n }\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n extractInput(fromPos, toPos, flags) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.thousandsSeparator) return super._appendCharRaw(ch, flags);\n const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n this._value = this._removeThousandsSeparators(this.value);\n const appendDetails = super._appendCharRaw(ch, flags);\n this._value = this._insertThousandsSeparators(this._value);\n const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n const searchFrom = pos - this.thousandsSeparator.length + 1;\n const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n return -1;\n }\n _adjustRangeWithSeparators(from, to) {\n const separatorAroundFromPos = this._findSeparatorAround(from);\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n const separatorAroundToPos = this._findSeparatorAround(to);\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n remove(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos === void 0) {\n toPos = this.displayValue.length;\n }\n [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n const valueBeforePos = this.value.slice(0, fromPos);\n const valueAfterPos = this.value.slice(toPos);\n const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n if (separatorAtLeftPos >= 0) {\n const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n break;\n }\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n return cursorPos;\n }\n doValidate(flags) {\n // validate as string\n let valid = Boolean(this._removeThousandsSeparators(this.value).match(this._numberRegExp));\n if (valid) {\n // validate as number\n const number = this.number;\n valid = valid && !isNaN(number) && (\n // check min bound for negative values\n this.min == null || this.min >= 0 || this.min <= this.number) && (\n // check max bound for positive values\n this.max == null || this.max <= 0 || this.number <= this.max);\n }\n return valid && super.doValidate(flags);\n }\n doCommit() {\n if (this.value) {\n const number = this.number;\n let validnum = number;\n\n // check bounds\n if (this.min != null) validnum = Math.max(validnum, this.min);\n if (this.max != null) validnum = Math.min(validnum, this.max);\n if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n let formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n super.doCommit();\n }\n _normalizeZeros(value) {\n const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n // remove leading zeros\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n // add leading zero\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n _padFractionalZeros(value) {\n if (!value) return value;\n const parts = value.split(this.radix);\n if (parts.length < 2) parts.push('');\n parts[1] = parts[1].padEnd(this.scale, '0');\n return parts.join(this.radix);\n }\n doSkipInvalid(ch, flags, checkTail) {\n if (flags === void 0) {\n flags = {};\n }\n const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n }\n get unmaskedValue() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n }\n set unmaskedValue(unmaskedValue) {\n super.unmaskedValue = unmaskedValue;\n }\n get typedValue() {\n return this.parse(this.unmaskedValue, this);\n }\n set typedValue(n) {\n this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n }\n\n /** Parsed Number */\n get number() {\n return this.typedValue;\n }\n set number(number) {\n this.typedValue = number;\n }\n\n /**\n Is negative allowed\n */\n get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n\n /**\n Is positive allowed\n */\n get allowPositive() {\n return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n }\n typedValueEquals(value) {\n // handle 0 -> '' case (typed = 0 even if value = '')\n // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n }\n}\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n mask: Number,\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: [MaskedNumber.UNMASKED_RADIX],\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n scale: 2,\n normalizeZeros: true,\n padFractionalZeros: false,\n parse: Number,\n format: n => n.toLocaleString('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20\n })\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n MASKED: 'value',\n UNMASKED: 'unmaskedValue',\n TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n if (from === void 0) {\n from = PIPE_TYPE.MASKED;\n }\n if (to === void 0) {\n to = PIPE_TYPE.MASKED;\n }\n const masked = createMask(arg);\n return value => masked.runIsolated(m => {\n m[from] = value;\n return m[to];\n });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { default as HTMLInputMaskElement } from './controls/html-input-mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as ChangeDetails } from './core/change-details.js';\nexport { DIRECTION, forceDirection } from './core/utils.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as createMask, normalizeOpts } from './masked/factory.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as ChunksTailDetails } from './masked/pattern/chunk-tail-details.js';\nexport { default as PatternFixedDefinition } from './masked/pattern/fixed-definition.js';\nexport { default as PatternInputDefinition } from './masked/pattern/input-definition.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nimport './core/action-details.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/cursor.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch {}\n\nexport { IMask as default };\n","/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","/**\n * Memize options object.\n *\n * @typedef MemizeOptions\n *\n * @property {number} [maxSize] Maximum size of the cache.\n */\n\n/**\n * Internal cache entry.\n *\n * @typedef MemizeCacheNode\n *\n * @property {?MemizeCacheNode|undefined} [prev] Previous node.\n * @property {?MemizeCacheNode|undefined} [next] Next node.\n * @property {Array<*>} args Function arguments for cache\n * entry.\n * @property {*} val Function result.\n */\n\n/**\n * Properties of the enhanced function for controlling cache.\n *\n * @typedef MemizeMemoizedFunction\n *\n * @property {()=>void} clear Clear the cache.\n */\n\n/**\n * Accepts a function to be memoized, and returns a new memoized function, with\n * optional options.\n *\n * @template {(...args: any[]) => any} F\n *\n * @param {F} fn Function to memoize.\n * @param {MemizeOptions} [options] Options object.\n *\n * @return {((...args: Parameters<F>) => ReturnType<F>) & MemizeMemoizedFunction} Memoized function.\n */\nfunction memize(fn, options) {\n\tvar size = 0;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar head;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar tail;\n\n\toptions = options || {};\n\n\tfunction memoized(/* ...args */) {\n\t\tvar node = head,\n\t\t\tlen = arguments.length,\n\t\t\targs,\n\t\t\ti;\n\n\t\tsearchCache: while (node) {\n\t\t\t// Perform a shallow equality test to confirm that whether the node\n\t\t\t// under test is a candidate for the arguments passed. Two arrays\n\t\t\t// are shallowly equal if their length matches and each entry is\n\t\t\t// strictly equal between the two sets. Avoid abstracting to a\n\t\t\t// function which could incur an arguments leaking deoptimization.\n\n\t\t\t// Check whether node arguments match arguments length\n\t\t\tif (node.args.length !== arguments.length) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check whether node arguments match arguments values\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tif (node.args[i] !== arguments[i]) {\n\t\t\t\t\tnode = node.next;\n\t\t\t\t\tcontinue searchCache;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif (node !== head) {\n\t\t\t\t// As tail, shift to previous. Must only shift if not also\n\t\t\t\t// head, since if both head and tail, there is no previous.\n\t\t\t\tif (node === tail) {\n\t\t\t\t\ttail = node.prev;\n\t\t\t\t}\n\n\t\t\t\t// Adjust siblings to point to each other. If node was tail,\n\t\t\t\t// this also handles new tail's empty `next` assignment.\n\t\t\t\t/** @type {MemizeCacheNode} */ (node.prev).next = node.next;\n\t\t\t\tif (node.next) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = head;\n\t\t\t\tnode.prev = null;\n\t\t\t\t/** @type {MemizeCacheNode} */ (head).prev = node;\n\t\t\t\thead = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\t// Create a copy of arguments (avoid leaking deoptimization)\n\t\targs = new Array(len);\n\t\tfor (i = 0; i < len; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\n\t\tnode = {\n\t\t\targs: args,\n\n\t\t\t// Generate the result from original function\n\t\t\tval: fn.apply(null, args),\n\t\t};\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif (head) {\n\t\t\thead.prev = node;\n\t\t\tnode.next = head;\n\t\t} else {\n\t\t\t// If no head, follows that there's no tail (at initial or reset)\n\t\t\ttail = node;\n\t\t}\n\n\t\t// Trim tail if we're reached max size and are pending cache insertion\n\t\tif (size === /** @type {MemizeOptions} */ (options).maxSize) {\n\t\t\ttail = /** @type {MemizeCacheNode} */ (tail).prev;\n\t\t\t/** @type {MemizeCacheNode} */ (tail).next = null;\n\t\t} else {\n\t\t\tsize++;\n\t\t}\n\n\t\thead = node;\n\n\t\treturn node.val;\n\t}\n\n\tmemoized.clear = function () {\n\t\thead = null;\n\t\ttail = null;\n\t\tsize = 0;\n\t};\n\n\t// Ignore reason: There's not a clear solution to create an intersection of\n\t// the function with additional properties, where the goal is to retain the\n\t// function signature of the incoming argument and add control properties\n\t// on the return value.\n\n\t// @ts-ignore\n\treturn memoized;\n}\n\nexport { memize as default };\n","/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memoize( console.error ); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nexport function sprintf( format, ...args ) {\n\ttry {\n\t\treturn sprintfjs.sprintf( format, ...args );\n\t} catch ( error ) {\n\t\tif ( error instanceof Error ) {\n\t\t\tlogErrorOnce( 'sprintf error: \\n\\n' + error.toString() );\n\t\t}\n\t\treturn format;\n\t}\n}\n","var PRECEDENCE, OPENERS, TERMINATORS, PATTERN;\n\n/**\n * Operator precedence mapping.\n *\n * @type {Object}\n */\nPRECEDENCE = {\n\t'(': 9,\n\t'!': 8,\n\t'*': 7,\n\t'/': 7,\n\t'%': 7,\n\t'+': 6,\n\t'-': 6,\n\t'<': 5,\n\t'<=': 5,\n\t'>': 5,\n\t'>=': 5,\n\t'==': 4,\n\t'!=': 4,\n\t'&&': 3,\n\t'||': 2,\n\t'?': 1,\n\t'?:': 1,\n};\n\n/**\n * Characters which signal pair opening, to be terminated by terminators.\n *\n * @type {string[]}\n */\nOPENERS = [ '(', '?' ];\n\n/**\n * Characters which signal pair termination, the value an array with the\n * opener as its first member. The second member is an optional operator\n * replacement to push to the stack.\n *\n * @type {string[]}\n */\nTERMINATORS = {\n\t')': [ '(' ],\n\t':': [ '?', '?:' ],\n};\n\n/**\n * Pattern matching operators and openers.\n *\n * @type {RegExp}\n */\nPATTERN = /<=|>=|==|!=|&&|\\|\\||\\?:|\\(|!|\\*|\\/|%|\\+|-|<|>|\\?|\\)|:/;\n\n/**\n * Given a C expression, returns the equivalent postfix (Reverse Polish)\n * notation terms as an array.\n *\n * If a postfix string is desired, simply `.join( ' ' )` the result.\n *\n * @example\n *\n * ```js\n * import postfix from '@tannin/postfix';\n *\n * postfix( 'n > 1' );\n * // ⇒ [ 'n', '1', '>' ]\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {string[]} Postfix terms.\n */\nexport default function postfix( expression ) {\n\tvar terms = [],\n\t\tstack = [],\n\t\tmatch, operator, term, element;\n\n\twhile ( ( match = expression.match( PATTERN ) ) ) {\n\t\toperator = match[ 0 ];\n\n\t\t// Term is the string preceding the operator match. It may contain\n\t\t// whitespace, and may be empty (if operator is at beginning).\n\t\tterm = expression.substr( 0, match.index ).trim();\n\t\tif ( term ) {\n\t\t\tterms.push( term );\n\t\t}\n\n\t\twhile ( ( element = stack.pop() ) ) {\n\t\t\tif ( TERMINATORS[ operator ] ) {\n\t\t\t\tif ( TERMINATORS[ operator ][ 0 ] === element ) {\n\t\t\t\t\t// Substitution works here under assumption that because\n\t\t\t\t\t// the assigned operator will no longer be a terminator, it\n\t\t\t\t\t// will be pushed to the stack during the condition below.\n\t\t\t\t\toperator = TERMINATORS[ operator ][ 1 ] || operator;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) {\n\t\t\t\t// Push to stack if either an opener or when pop reveals an\n\t\t\t\t// element of lower precedence.\n\t\t\t\tstack.push( element );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// For each popped from stack, push to terms.\n\t\t\tterms.push( element );\n\t\t}\n\n\t\tif ( ! TERMINATORS[ operator ] ) {\n\t\t\tstack.push( operator );\n\t\t}\n\n\t\t// Slice matched fragment from expression to continue match.\n\t\texpression = expression.substr( match.index + operator.length );\n\t}\n\n\t// Push remainder of operand, if exists, to terms.\n\texpression = expression.trim();\n\tif ( expression ) {\n\t\tterms.push( expression );\n\t}\n\n\t// Pop remaining items from stack into terms.\n\treturn terms.concat( stack.reverse() );\n}\n","/**\n * Operator callback functions.\n *\n * @type {Object}\n */\nvar OPERATORS = {\n\t'!': function( a ) {\n\t\treturn ! a;\n\t},\n\t'*': function( a, b ) {\n\t\treturn a * b;\n\t},\n\t'/': function( a, b ) {\n\t\treturn a / b;\n\t},\n\t'%': function( a, b ) {\n\t\treturn a % b;\n\t},\n\t'+': function( a, b ) {\n\t\treturn a + b;\n\t},\n\t'-': function( a, b ) {\n\t\treturn a - b;\n\t},\n\t'<': function( a, b ) {\n\t\treturn a < b;\n\t},\n\t'<=': function( a, b ) {\n\t\treturn a <= b;\n\t},\n\t'>': function( a, b ) {\n\t\treturn a > b;\n\t},\n\t'>=': function( a, b ) {\n\t\treturn a >= b;\n\t},\n\t'==': function( a, b ) {\n\t\treturn a === b;\n\t},\n\t'!=': function( a, b ) {\n\t\treturn a !== b;\n\t},\n\t'&&': function( a, b ) {\n\t\treturn a && b;\n\t},\n\t'||': function( a, b ) {\n\t\treturn a || b;\n\t},\n\t'?:': function( a, b, c ) {\n\t\tif ( a ) {\n\t\t\tthrow b;\n\t\t}\n\n\t\treturn c;\n\t},\n};\n\n/**\n * Given an array of postfix terms and operand variables, returns the result of\n * the postfix evaluation.\n *\n * @example\n *\n * ```js\n * import evaluate from '@tannin/evaluate';\n *\n * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +'\n * const terms = [ '3', '4', '5', '*', '6', '/', '+' ];\n *\n * evaluate( terms, {} );\n * // ⇒ 6.333333333333334\n * ```\n *\n * @param {string[]} postfix Postfix terms.\n * @param {Object} variables Operand variables.\n *\n * @return {*} Result of evaluation.\n */\nexport default function evaluate( postfix, variables ) {\n\tvar stack = [],\n\t\ti, j, args, getOperatorResult, term, value;\n\n\tfor ( i = 0; i < postfix.length; i++ ) {\n\t\tterm = postfix[ i ];\n\n\t\tgetOperatorResult = OPERATORS[ term ];\n\t\tif ( getOperatorResult ) {\n\t\t\t// Pop from stack by number of function arguments.\n\t\t\tj = getOperatorResult.length;\n\t\t\targs = Array( j );\n\t\t\twhile ( j-- ) {\n\t\t\t\targs[ j ] = stack.pop();\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tvalue = getOperatorResult.apply( null, args );\n\t\t\t} catch ( earlyReturn ) {\n\t\t\t\treturn earlyReturn;\n\t\t\t}\n\t\t} else if ( variables.hasOwnProperty( term ) ) {\n\t\t\tvalue = variables[ term ];\n\t\t} else {\n\t\t\tvalue = +term;\n\t\t}\n\n\t\tstack.push( value );\n\t}\n\n\treturn stack[ 0 ];\n}\n","import postfix from '@tannin/postfix';\nimport evaluate from '@tannin/evaluate';\n\n/**\n * Given a C expression, returns a function which can be called to evaluate its\n * result.\n *\n * @example\n *\n * ```js\n * import compile from '@tannin/compile';\n *\n * const evaluate = compile( 'n > 1' );\n *\n * evaluate( { n: 2 } );\n * // ⇒ true\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {(variables?:{[variable:string]:*})=>*} Compiled evaluator.\n */\nexport default function compile( expression ) {\n\tvar terms = postfix( expression );\n\n\treturn function( variables ) {\n\t\treturn evaluate( terms, variables );\n\t};\n}\n","import pluralForms from '@tannin/plural-forms';\n\n/**\n * Tannin constructor options.\n *\n * @typedef {Object} TanninOptions\n *\n * @property {string} [contextDelimiter] Joiner in string lookup with context.\n * @property {Function} [onMissingKey] Callback to invoke when key missing.\n */\n\n/**\n * Domain metadata.\n *\n * @typedef {Object} TanninDomainMetadata\n *\n * @property {string} [domain] Domain name.\n * @property {string} [lang] Language code.\n * @property {(string|Function)} [plural_forms] Plural forms expression or\n * function evaluator.\n */\n\n/**\n * Domain translation pair respectively representing the singular and plural\n * translation.\n *\n * @typedef {[string,string]} TanninTranslation\n */\n\n/**\n * Locale data domain. The key is used as reference for lookup, the value an\n * array of two string entries respectively representing the singular and plural\n * translation.\n *\n * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain\n */\n\n/**\n * Jed-formatted locale data.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData\n */\n\n/**\n * Default Tannin constructor options.\n *\n * @type {TanninOptions}\n */\nvar DEFAULT_OPTIONS = {\n\tcontextDelimiter: '\\u0004',\n\tonMissingKey: null,\n};\n\n/**\n * Given a specific locale data's config `plural_forms` value, returns the\n * expression.\n *\n * @example\n *\n * ```\n * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)'\n * ```\n *\n * @param {string} pf Locale data plural forms.\n *\n * @return {string} Plural forms expression.\n */\nfunction getPluralExpression( pf ) {\n\tvar parts, i, part;\n\n\tparts = pf.split( ';' );\n\n\tfor ( i = 0; i < parts.length; i++ ) {\n\t\tpart = parts[ i ].trim();\n\t\tif ( part.indexOf( 'plural=' ) === 0 ) {\n\t\t\treturn part.substr( 7 );\n\t\t}\n\t}\n}\n\n/**\n * Tannin constructor.\n *\n * @class\n *\n * @param {TanninLocaleData} data Jed-formatted locale data.\n * @param {TanninOptions} [options] Tannin options.\n */\nexport default function Tannin( data, options ) {\n\tvar key;\n\n\t/**\n\t * Jed-formatted locale data.\n\t *\n\t * @name Tannin#data\n\t * @type {TanninLocaleData}\n\t */\n\tthis.data = data;\n\n\t/**\n\t * Plural forms function cache, keyed by plural forms string.\n\t *\n\t * @name Tannin#pluralForms\n\t * @type {Object<string,Function>}\n\t */\n\tthis.pluralForms = {};\n\n\t/**\n\t * Effective options for instance, including defaults.\n\t *\n\t * @name Tannin#options\n\t * @type {TanninOptions}\n\t */\n\tthis.options = {};\n\n\tfor ( key in DEFAULT_OPTIONS ) {\n\t\tthis.options[ key ] = options !== undefined && key in options\n\t\t\t? options[ key ]\n\t\t\t: DEFAULT_OPTIONS[ key ];\n\t}\n}\n\n/**\n * Returns the plural form index for the given domain and value.\n *\n * @param {string} domain Domain on which to calculate plural form.\n * @param {number} n Value for which plural form is to be calculated.\n *\n * @return {number} Plural form index.\n */\nTannin.prototype.getPluralForm = function( domain, n ) {\n\tvar getPluralForm = this.pluralForms[ domain ],\n\t\tconfig, plural, pf;\n\n\tif ( ! getPluralForm ) {\n\t\tconfig = this.data[ domain ][ '' ];\n\n\t\tpf = (\n\t\t\tconfig[ 'Plural-Forms' ] ||\n\t\t\tconfig[ 'plural-forms' ] ||\n\t\t\t// Ignore reason: As known, there's no way to document the empty\n\t\t\t// string property on a key to guarantee this as metadata.\n\t\t\t// @ts-ignore\n\t\t\tconfig.plural_forms\n\t\t);\n\n\t\tif ( typeof pf !== 'function' ) {\n\t\t\tplural = getPluralExpression(\n\t\t\t\tconfig[ 'Plural-Forms' ] ||\n\t\t\t\tconfig[ 'plural-forms' ] ||\n\t\t\t\t// Ignore reason: As known, there's no way to document the empty\n\t\t\t\t// string property on a key to guarantee this as metadata.\n\t\t\t\t// @ts-ignore\n\t\t\t\tconfig.plural_forms\n\t\t\t);\n\n\t\t\tpf = pluralForms( plural );\n\t\t}\n\n\t\tgetPluralForm = this.pluralForms[ domain ] = pf;\n\t}\n\n\treturn getPluralForm( n );\n};\n\n/**\n * Translate a string.\n *\n * @param {string} domain Translation domain.\n * @param {string|void} context Context distinguishing terms of the same name.\n * @param {string} singular Primary key for translation lookup.\n * @param {string=} plural Fallback value used for non-zero plural\n * form index.\n * @param {number=} n Value to use in calculating plural form.\n *\n * @return {string} Translated string.\n */\nTannin.prototype.dcnpgettext = function( domain, context, singular, plural, n ) {\n\tvar index, key, entry;\n\n\tif ( n === undefined ) {\n\t\t// Default to singular.\n\t\tindex = 0;\n\t} else {\n\t\t// Find index by evaluating plural form for value.\n\t\tindex = this.getPluralForm( domain, n );\n\t}\n\n\tkey = singular;\n\n\t// If provided, context is prepended to key with delimiter.\n\tif ( context ) {\n\t\tkey = context + this.options.contextDelimiter + singular;\n\t}\n\n\tentry = this.data[ domain ][ key ];\n\n\t// Verify not only that entry exists, but that the intended index is within\n\t// range and non-empty.\n\tif ( entry && entry[ index ] ) {\n\t\treturn entry[ index ];\n\t}\n\n\tif ( this.options.onMissingKey ) {\n\t\tthis.options.onMissingKey( singular, domain );\n\t}\n\n\t// If entry not found, fall back to singular vs. plural with zero index\n\t// representing the singular value.\n\treturn index === 0 ? singular : plural;\n};\n","import compile from '@tannin/compile';\n\n/**\n * Given a C expression, returns a function which, when called with a value,\n * evaluates the result with the value assumed to be the \"n\" variable of the\n * expression. The result will be coerced to its numeric equivalent.\n *\n * @param {string} expression C expression.\n *\n * @return {Function} Evaluator function.\n */\nexport default function pluralForms( expression ) {\n\tvar evaluate = compile( expression );\n\n\treturn function( n ) {\n\t\treturn +evaluate( { n: n } );\n\t};\n}\n","/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n\t'': {\n\t\t/** @param {number} n */\n\t\tplural_forms( n ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {AddLocaleData} addLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data.\n * @property {__} __ Retrieve the translation of text.\n * @property {_x} _x Retrieve translated string with gettext context.\n * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied\n * number.\n * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n * @property {IsRtl} isRTL Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData] Locale data configuration.\n * @param {string} [initialDomain] Domain for which configuration applies.\n * @param {Hooks} [hooks] Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nexport const createI18n = ( initialData, initialDomain, hooks ) => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t *\n\t * @type {Tannin}\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param {SubscribeCallback} callback Subscription callback.\n\t * @return {UnsubscribeCallback} Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback ) => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\t/** @type {GetLocaleData} */\n\tconst getLocaleData = ( domain = 'default' ) => tannin.data[ domain ];\n\n\t/**\n\t * @param {LocaleData} [data]\n\t * @param {string} [domain]\n\t */\n\tconst doSetLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t};\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\t/** @type {SetLocaleData} */\n\tconst setLocaleData = ( data, domain ) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {AddLocaleData} */\n\tconst addLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {ResetLocaleData} */\n\tconst resetLocaleData = ( data, domain ) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param {string|undefined} domain Domain to retrieve the translated text.\n\t * @param {string|undefined} context Context information for the translators.\n\t * @param {string} single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param {string} [plural] The text to be used if the number is\n\t * plural.\n\t * @param {number} [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return {string} The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default',\n\t\tcontext,\n\t\tsingle,\n\t\tplural,\n\t\tnumber\n\t) => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\t/** @type {GetFilterDomain} */\n\tconst getFilterDomain = ( domain = 'default' ) => domain;\n\n\t/** @type {__} */\n\tconst __ = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_x} */\n\tconst _x = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_n} */\n\tconst _n = ( single, plural, number, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_nx} */\n\tconst _nx = ( single, plural, number, context, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {IsRtl} */\n\tconst isRTL = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\t/** @type {HasTranslation} */\n\tconst hasTranslation = ( single, context, domain ) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param {boolean} hasTranslation Whether the translation is present or not..\n\t\t\t * @param {string} single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param {string} context Context information for the translators.\n\t\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation',\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param {string} hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n","/**\n * Validate a namespace string.\n *\n * @param {string} namespace The namespace to validate - should take the form\n * `vendor/plugin/function`.\n *\n * @return {boolean} Whether the namespace is valid.\n */\nfunction validateNamespace( namespace ) {\n\tif ( 'string' !== typeof namespace || '' === namespace ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The namespace must be a non-empty string.' );\n\t\treturn false;\n\t}\n\n\tif ( ! /^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test( namespace ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t'The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.'\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default validateNamespace;\n","/**\n * Validate a hookName string.\n *\n * @param {string} hookName The hook name to validate. Should be a non empty string containing\n * only numbers, letters, dashes, periods and underscores. Also,\n * the hook name cannot begin with `__`.\n *\n * @return {boolean} Whether the hook name is valid.\n */\nfunction validateHookName( hookName ) {\n\tif ( 'string' !== typeof hookName || '' === hookName ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The hook name must be a non-empty string.' );\n\t\treturn false;\n\t}\n\n\tif ( /^__/.test( hookName ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'The hook name cannot begin with `__`.' );\n\t\treturn false;\n\t}\n\n\tif ( ! /^[a-zA-Z][a-zA-Z0-9_.-]*$/.test( hookName ) ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(\n\t\t\t'The hook name can only contain numbers, letters, dashes, periods and underscores.'\n\t\t);\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\nexport default validateHookName;\n","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback AddHook\n *\n * Adds the hook to the appropriate hooks container.\n *\n * @param {string} hookName Name of hook to add\n * @param {string} namespace The unique namespace identifying the callback in the form `vendor/plugin/function`.\n * @param {import('.').Callback} callback Function to call when the hook is run\n * @param {number} [priority=10] Priority of this hook\n */\n\n/**\n * Returns a function which, when invoked, will add a hook.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {AddHook} Function that adds a new hook.\n */\nfunction createAddHook( hooks, storeKey ) {\n\treturn function addHook( hookName, namespace, callback, priority = 10 ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! validateNamespace( namespace ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( 'function' !== typeof callback ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'The hook callback must be a function.' );\n\t\t\treturn;\n\t\t}\n\n\t\t// Validate numeric priority\n\t\tif ( 'number' !== typeof priority ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(\n\t\t\t\t'If specified, the hook priority must be a number.'\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst handler = { callback, priority, namespace };\n\n\t\tif ( hooksStore[ hookName ] ) {\n\t\t\t// Find the correct insert index of the new hook.\n\t\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t\t/** @type {number} */\n\t\t\tlet i;\n\t\t\tfor ( i = handlers.length; i > 0; i-- ) {\n\t\t\t\tif ( priority >= handlers[ i - 1 ].priority ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( i === handlers.length ) {\n\t\t\t\t// If append, operate via direct assignment.\n\t\t\t\thandlers[ i ] = handler;\n\t\t\t} else {\n\t\t\t\t// Otherwise, insert before index via splice.\n\t\t\t\thandlers.splice( i, 0, handler );\n\t\t\t}\n\n\t\t\t// We may also be currently executing this hook. If the callback\n\t\t\t// we're adding would come after the current callback, there's no\n\t\t\t// problem; otherwise we need to increase the execution index of\n\t\t\t// any other runs by 1 to account for the added element.\n\t\t\thooksStore.__current.forEach( ( hookInfo ) => {\n\t\t\t\tif (\n\t\t\t\t\thookInfo.name === hookName &&\n\t\t\t\t\thookInfo.currentIndex >= i\n\t\t\t\t) {\n\t\t\t\t\thookInfo.currentIndex++;\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\t// This is the first hook of its type.\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [ handler ],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\tif ( hookName !== 'hookAdded' ) {\n\t\t\thooks.doAction(\n\t\t\t\t'hookAdded',\n\t\t\t\thookName,\n\t\t\t\tnamespace,\n\t\t\t\tcallback,\n\t\t\t\tpriority\n\t\t\t);\n\t\t}\n\t};\n}\n\nexport default createAddHook;\n","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback RemoveHook\n * Removes the specified callback (or all callbacks) from the hook with a given hookName\n * and namespace.\n *\n * @param {string} hookName The name of the hook to modify.\n * @param {string} namespace The unique namespace identifying the callback in the\n * form `vendor/plugin/function`.\n *\n * @return {number | undefined} The number of callbacks removed.\n */\n\n/**\n * Returns a function which, when invoked, will remove a specified hook or all\n * hooks by the given name.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean} [removeAll=false] Whether to remove all callbacks for a hookName,\n * without regard to namespace. Used to create\n * `removeAll*` functions.\n *\n * @return {RemoveHook} Function that removes hooks.\n */\nfunction createRemoveHook( hooks, storeKey, removeAll = false ) {\n\treturn function removeHook( hookName, namespace ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( ! removeAll && ! validateNamespace( namespace ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Bail if no hooks exist by this name.\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet handlersRemoved = 0;\n\n\t\tif ( removeAll ) {\n\t\t\thandlersRemoved = hooksStore[ hookName ].handlers.length;\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\truns: hooksStore[ hookName ].runs,\n\t\t\t\thandlers: [],\n\t\t\t};\n\t\t} else {\n\t\t\t// Try to find the specified callback to remove.\n\t\t\tconst handlers = hooksStore[ hookName ].handlers;\n\t\t\tfor ( let i = handlers.length - 1; i >= 0; i-- ) {\n\t\t\t\tif ( handlers[ i ].namespace === namespace ) {\n\t\t\t\t\thandlers.splice( i, 1 );\n\t\t\t\t\thandlersRemoved++;\n\t\t\t\t\t// This callback may also be part of a hook that is\n\t\t\t\t\t// currently executing. If the callback we're removing\n\t\t\t\t\t// comes after the current callback, there's no problem;\n\t\t\t\t\t// otherwise we need to decrease the execution index of any\n\t\t\t\t\t// other runs by 1 to account for the removed element.\n\t\t\t\t\thooksStore.__current.forEach( ( hookInfo ) => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\thookInfo.name === hookName &&\n\t\t\t\t\t\t\thookInfo.currentIndex >= i\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\thookInfo.currentIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( hookName !== 'hookRemoved' ) {\n\t\t\thooks.doAction( 'hookRemoved', hookName, namespace );\n\t\t}\n\n\t\treturn handlersRemoved;\n\t};\n}\n\nexport default createRemoveHook;\n","/**\n * @callback HasHook\n *\n * Returns whether any handlers are attached for the given hookName and optional namespace.\n *\n * @param {string} hookName The name of the hook to check for.\n * @param {string} [namespace] Optional. The unique namespace identifying the callback\n * in the form `vendor/plugin/function`.\n *\n * @return {boolean} Whether there are handlers that are attached to the given hook.\n */\n/**\n * Returns a function which, when invoked, will return whether any handlers are\n * attached to a particular hook.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {HasHook} Function that returns whether any handlers are\n * attached to a particular hook and optional namespace.\n */\nfunction createHasHook( hooks, storeKey ) {\n\treturn function hasHook( hookName, namespace ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\t// Use the namespace if provided.\n\t\tif ( 'undefined' !== typeof namespace ) {\n\t\t\treturn (\n\t\t\t\thookName in hooksStore &&\n\t\t\t\thooksStore[ hookName ].handlers.some(\n\t\t\t\t\t( hook ) => hook.namespace === namespace\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn hookName in hooksStore;\n\t};\n}\n\nexport default createHasHook;\n","/**\n * Returns a function which, when invoked, will execute all callbacks\n * registered to a hook of the specified type, optionally returning the final\n * value of the call chain.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n * @param {boolean} [returnFirstArg=false] Whether each hook callback is expected to\n * return its first argument.\n *\n * @return {(hookName:string, ...args: unknown[]) => undefined|unknown} Function that runs hook callbacks.\n */\nfunction createRunHook( hooks, storeKey, returnFirstArg = false ) {\n\treturn function runHooks( hookName, ...args ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! hooksStore[ hookName ] ) {\n\t\t\thooksStore[ hookName ] = {\n\t\t\t\thandlers: [],\n\t\t\t\truns: 0,\n\t\t\t};\n\t\t}\n\n\t\thooksStore[ hookName ].runs++;\n\n\t\tconst handlers = hooksStore[ hookName ].handlers;\n\n\t\t// The following code is stripped from production builds.\n\t\tif ( 'production' !== process.env.NODE_ENV ) {\n\t\t\t// Handle any 'all' hooks registered.\n\t\t\tif ( 'hookAdded' !== hookName && hooksStore.all ) {\n\t\t\t\thandlers.push( ...hooksStore.all.handlers );\n\t\t\t}\n\t\t}\n\n\t\tif ( ! handlers || ! handlers.length ) {\n\t\t\treturn returnFirstArg ? args[ 0 ] : undefined;\n\t\t}\n\n\t\tconst hookInfo = {\n\t\t\tname: hookName,\n\t\t\tcurrentIndex: 0,\n\t\t};\n\n\t\thooksStore.__current.push( hookInfo );\n\n\t\twhile ( hookInfo.currentIndex < handlers.length ) {\n\t\t\tconst handler = handlers[ hookInfo.currentIndex ];\n\n\t\t\tconst result = handler.callback.apply( null, args );\n\t\t\tif ( returnFirstArg ) {\n\t\t\t\targs[ 0 ] = result;\n\t\t\t}\n\n\t\t\thookInfo.currentIndex++;\n\t\t}\n\n\t\thooksStore.__current.pop();\n\n\t\tif ( returnFirstArg ) {\n\t\t\treturn args[ 0 ];\n\t\t}\n\n\t\treturn undefined;\n\t};\n}\n\nexport default createRunHook;\n","/**\n * Returns a function which, when invoked, will return the name of the\n * currently running hook, or `null` if no hook of the given type is currently\n * running.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {() => string | null} Function that returns the current hook name or null.\n */\nfunction createCurrentHook( hooks, storeKey ) {\n\treturn function currentHook() {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\treturn (\n\t\t\thooksStore.__current[ hooksStore.__current.length - 1 ]?.name ??\n\t\t\tnull\n\t\t);\n\t};\n}\n\nexport default createCurrentHook;\n","/**\n * @callback DoingHook\n * Returns whether a hook is currently being executed.\n *\n * @param {string} [hookName] The name of the hook to check for. If\n * omitted, will check for any hook being executed.\n *\n * @return {boolean} Whether the hook is being executed.\n */\n\n/**\n * Returns a function which, when invoked, will return whether a hook is\n * currently being executed.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DoingHook} Function that returns whether a hook is currently\n * being executed.\n */\nfunction createDoingHook( hooks, storeKey ) {\n\treturn function doingHook( hookName ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\t// If the hookName was not passed, check for any current hook.\n\t\tif ( 'undefined' === typeof hookName ) {\n\t\t\treturn 'undefined' !== typeof hooksStore.__current[ 0 ];\n\t\t}\n\n\t\t// Return the __current hook.\n\t\treturn hooksStore.__current[ 0 ]\n\t\t\t? hookName === hooksStore.__current[ 0 ].name\n\t\t\t: false;\n\t};\n}\n\nexport default createDoingHook;\n","/**\n * Internal dependencies\n */\nimport validateHookName from './validateHookName.js';\n\n/**\n * @callback DidHook\n *\n * Returns the number of times an action has been fired.\n *\n * @param {string} hookName The hook name to check.\n *\n * @return {number | undefined} The number of times the hook has run.\n */\n\n/**\n * Returns a function which, when invoked, will return the number of times a\n * hook has been called.\n *\n * @param {import('.').Hooks} hooks Hooks instance.\n * @param {import('.').StoreKey} storeKey\n *\n * @return {DidHook} Function that returns a hook's call count.\n */\nfunction createDidHook( hooks, storeKey ) {\n\treturn function didHook( hookName ) {\n\t\tconst hooksStore = hooks[ storeKey ];\n\n\t\tif ( ! validateHookName( hookName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn hooksStore[ hookName ] && hooksStore[ hookName ].runs\n\t\t\t? hooksStore[ hookName ].runs\n\t\t\t: 0;\n\t};\n}\n\nexport default createDidHook;\n","/**\n * Internal dependencies\n */\nimport createAddHook from './createAddHook';\nimport createRemoveHook from './createRemoveHook';\nimport createHasHook from './createHasHook';\nimport createRunHook from './createRunHook';\nimport createCurrentHook from './createCurrentHook';\nimport createDoingHook from './createDoingHook';\nimport createDidHook from './createDidHook';\n\n/**\n * Internal class for constructing hooks. Use `createHooks()` function\n *\n * Note, it is necessary to expose this class to make its type public.\n *\n * @private\n */\nexport class _Hooks {\n\tconstructor() {\n\t\t/** @type {import('.').Store} actions */\n\t\tthis.actions = Object.create( null );\n\t\tthis.actions.__current = [];\n\n\t\t/** @type {import('.').Store} filters */\n\t\tthis.filters = Object.create( null );\n\t\tthis.filters.__current = [];\n\n\t\tthis.addAction = createAddHook( this, 'actions' );\n\t\tthis.addFilter = createAddHook( this, 'filters' );\n\t\tthis.removeAction = createRemoveHook( this, 'actions' );\n\t\tthis.removeFilter = createRemoveHook( this, 'filters' );\n\t\tthis.hasAction = createHasHook( this, 'actions' );\n\t\tthis.hasFilter = createHasHook( this, 'filters' );\n\t\tthis.removeAllActions = createRemoveHook( this, 'actions', true );\n\t\tthis.removeAllFilters = createRemoveHook( this, 'filters', true );\n\t\tthis.doAction = createRunHook( this, 'actions' );\n\t\tthis.applyFilters = createRunHook( this, 'filters', true );\n\t\tthis.currentAction = createCurrentHook( this, 'actions' );\n\t\tthis.currentFilter = createCurrentHook( this, 'filters' );\n\t\tthis.doingAction = createDoingHook( this, 'actions' );\n\t\tthis.doingFilter = createDoingHook( this, 'filters' );\n\t\tthis.didAction = createDidHook( this, 'actions' );\n\t\tthis.didFilter = createDidHook( this, 'filters' );\n\t}\n}\n\n/** @typedef {_Hooks} Hooks */\n\n/**\n * Returns an instance of the hooks object.\n *\n * @return {Hooks} A Hooks instance.\n */\nfunction createHooks() {\n\treturn new _Hooks();\n}\n\nexport default createHooks;\n","/**\n * Internal dependencies\n */\nimport createHooks from './createHooks';\n\n/** @typedef {(...args: any[])=>any} Callback */\n\n/**\n * @typedef Handler\n * @property {Callback} callback The callback\n * @property {string} namespace The namespace\n * @property {number} priority The namespace\n */\n\n/**\n * @typedef Hook\n * @property {Handler[]} handlers Array of handlers\n * @property {number} runs Run counter\n */\n\n/**\n * @typedef Current\n * @property {string} name Hook name\n * @property {number} currentIndex The index\n */\n\n/**\n * @typedef {Record<string, Hook> & {__current: Current[]}} Store\n */\n\n/**\n * @typedef {'actions' | 'filters'} StoreKey\n */\n\n/**\n * @typedef {import('./createHooks').Hooks} Hooks\n */\n\nexport const defaultHooks = createHooks();\n\nconst {\n\taddAction,\n\taddFilter,\n\tremoveAction,\n\tremoveFilter,\n\thasAction,\n\thasFilter,\n\tremoveAllActions,\n\tremoveAllFilters,\n\tdoAction,\n\tapplyFilters,\n\tcurrentAction,\n\tcurrentFilter,\n\tdoingAction,\n\tdoingFilter,\n\tdidAction,\n\tdidFilter,\n\tactions,\n\tfilters,\n} = defaultHooks;\n\nexport {\n\tcreateHooks,\n\taddAction,\n\taddFilter,\n\tremoveAction,\n\tremoveFilter,\n\thasAction,\n\thasFilter,\n\tremoveAllActions,\n\tremoveAllFilters,\n\tdoAction,\n\tapplyFilters,\n\tcurrentAction,\n\tcurrentFilter,\n\tdoingAction,\n\tdoingFilter,\n\tdidAction,\n\tdidFilter,\n\tactions,\n\tfilters,\n};\n","/**\n * Internal dependencies\n */\nimport { createI18n } from './create-i18n';\n\n/**\n * WordPress dependencies\n */\nimport { defaultHooks } from '@wordpress/hooks';\n\nconst i18n = createI18n( undefined, undefined, defaultHooks );\n\n/**\n * Default, singleton instance of `I18n`.\n */\nexport default i18n;\n\n/*\n * Comments in this file are duplicated from ./i18n due to\n * https://github.com/WordPress/gutenberg/pull/20318#issuecomment-590837722\n */\n\n/**\n * @typedef {import('./create-i18n').LocaleData} LocaleData\n * @typedef {import('./create-i18n').SubscribeCallback} SubscribeCallback\n * @typedef {import('./create-i18n').UnsubscribeCallback} UnsubscribeCallback\n */\n\n/**\n * Returns locale data by domain in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {string} [domain] Domain for which to get the data.\n * @return {LocaleData} Locale data.\n */\nexport const getLocaleData = i18n.getLocaleData.bind( i18n );\n\n/**\n * Merges locale data into the Tannin instance by domain. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data] Locale data configuration.\n * @param {string} [domain] Domain for which configuration applies.\n */\nexport const setLocaleData = i18n.setLocaleData.bind( i18n );\n\n/**\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data] Locale data configuration.\n * @param {string} [domain] Domain for which configuration applies.\n */\nexport const resetLocaleData = i18n.resetLocaleData.bind( i18n );\n\n/**\n * Subscribes to changes of locale data\n *\n * @param {SubscribeCallback} callback Subscription callback\n * @return {UnsubscribeCallback} Unsubscribe callback\n */\nexport const subscribe = i18n.subscribe.bind( i18n );\n\n/**\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n *\n * @param {string} text Text to translate.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated text.\n */\nexport const __ = i18n.__.bind( i18n );\n\n/**\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n *\n * @param {string} text Text to translate.\n * @param {string} context Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated context string without pipe.\n */\nexport const _x = i18n._x.bind( i18n );\n\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n *\n * @param {string} single The text to be used if the number is singular.\n * @param {string} plural The text to be used if the number is plural.\n * @param {number} number The number to compare against to use either the\n * singular or plural form.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\nexport const _n = i18n._n.bind( i18n );\n\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n *\n * @param {string} single The text to be used if the number is singular.\n * @param {string} plural The text to be used if the number is plural.\n * @param {number} number The number to compare against to use either the\n * singular or plural form.\n * @param {string} context Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\nexport const _nx = i18n._nx.bind( i18n );\n\n/**\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n *\n * @return {boolean} Whether locale is RTL.\n */\nexport const isRTL = i18n.isRTL.bind( i18n );\n\n/**\n * Check if there is a translation for a given string (in singular form).\n *\n * @param {string} single Singular form of the string to look up.\n * @param {string} [context] Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n * @return {boolean} Whether the translation exists or not.\n */\nexport const hasTranslation = i18n.hasTranslation.bind( i18n );\n","import IMask from \"imask\";\nimport { __ } from \"@wordpress/i18n\";\n\nexport default class Credit {\n constructor() {\n this.setCardNumberMask();\n this.setCardOwnerMask();\n this.setCardCodeMask();\n this.setCardDateMask();\n this.manageTokenSelect();\n }\n\n setCardNumberMask() {\n const field = document.querySelector(\"#wvp-card-number\");\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000 0000 0000 0000\",\n });\n }\n\n this.handleCardBrand(field);\n\n field.addEventListener(\"input\", () => {\n this.handleCardBrand(field);\n });\n }\n }\n\n setCardOwnerMask() {\n const field = document.querySelector(\"#wvp-card-owner\");\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n const mask = IMask(field, {\n mask: /^[A-Za-z\\s]*$/,\n });\n\n field.addEventListener(\"input\", () => {\n field.value = field.value.toUpperCase();\n mask.updateValue();\n });\n }\n }\n\n setCardDateMask() {\n const field = document.querySelector(\"#wvp-card-date\");\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"00/00\",\n });\n }\n }\n\n setCardCodeMask() {\n const field = document.querySelector(\"#wvp-card-code\");\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000\",\n });\n }\n\n field.addEventListener(\"input\", () => {\n this.setCodeBrand(field);\n });\n }\n }\n\n handleCardBrand(card) {\n const brands = this.getBrands();\n const number = card.value.replace(/\\s/g, \"\");\n let found;\n\n if (!number || card.value.length < 16) return;\n\n this.resetInstallmentsError();\n\n brands.forEach((brand) => {\n if (brand.regex.test(number) && !found) {\n found = brand;\n this.setCardBrand(brand.name, brand.code);\n this.getCardInstallments();\n\n return;\n }\n });\n\n if (!found) {\n this.setCardBrand(\"mono/generic\", 1);\n this.showInstallmentsError();\n }\n }\n\n showInstallmentsError() {\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (errorList) {\n errorList.innerText = __(\n \"Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.\",\n \"vindi-pagamentos\",\n );\n errorList.classList.add(\"active\");\n }\n }\n\n resetInstallmentsError() {\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (errorList) {\n errorList.innerText = \"\";\n errorList.classList.remove(\"active\");\n }\n }\n\n getBrands() {\n return [\n {\n code: 16,\n name: \"elo\",\n regex: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/,\n },\n {\n code: 3,\n name: \"visa\",\n regex: /^4[0-9]{12}(?:[0-9]{3})?$/,\n },\n {\n code: 4,\n name: \"mastercard\",\n regex: /^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/,\n },\n {\n code: 5,\n name: \"amex\",\n regex: /^3[47][0-9]{13}$/,\n },\n {\n code: 25,\n name: \"hipercard\",\n regex: /^(606282|3841\\d{2}|60(?!11)\\d{2})\\d{10}$/,\n },\n {\n code: 20,\n name: \"hiper\",\n regex: /^(637095|637599|637612|637609|637598)\\d*$/,\n },\n ];\n }\n\n setCardBrand(name, code) {\n const img = document.querySelector(\"#wvp-brand-icon\");\n const hidden = document.querySelector(\"#wvp-card-brand\");\n\n if (img) {\n const attr = img.getAttribute(\"data-img\");\n if (attr) {\n img.src = img.src.replace(attr, name);\n img.setAttribute(\"data-img\", name);\n }\n }\n\n if (hidden) {\n hidden.value = code;\n }\n }\n\n setCodeBrand(code) {\n const img = document.querySelector(\"#wvp-cvv-icon\");\n const brand = code.length < 3 ? \"mono/cvv\" : \"cvv\";\n\n if (img) {\n const attr = img.getAttribute(\"data-img\");\n if (attr) {\n img.src = img.src.replace(attr, brand);\n img.setAttribute(\"data-img\", brand);\n }\n }\n }\n manageTokenSelect() {\n jQuery('input[name=\"wc-vindi-pagamentos-credit-payment-token\"]').on('change', (e) => {\n if (jQuery(e.target).is(':checked') && e.target.value !== 'new') {\n this.getCardInstallments(e.target.value);\n }\n const select = document.querySelector(\"#wvp-card-installments\");\n select.innerHTML = \"\";\n });\n }\n\n getCardInstallments(token = null) {\n if (!document.querySelector(\"#wvp-card-installments\")) {\n return;\n }\n\n const brand = document.querySelector(\"#wvp-card-brand\");\n const nonce = document.querySelector(\"#wvp-card-nonce\");\n const total = document.querySelector(\"#wvp-cart-total\");\n\n this.resetInstallmentsError();\n this.setRequestLoader();\n\n const data = {\n price: total.value,\n _wpnonce: nonce.value,\n security: wc_checkout_params.update_order_review_nonce,\n };\n\n // Use token if provided, otherwise use brand\n if (token) {\n data.token = token;\n } else {\n data.brand = brand.value;\n }\n\n // Store the current token to check later\n const currentToken = token;\n\n const xhr = jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments'),\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: function (data) {\n if (data.success) {\n const installments = data.data.installments;\n const select = document.querySelector(\"#wvp-card-installments\");\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (data.data.message) {\n errorList.textContent = data.data.message;\n errorList.classList.add(\"active\");\n }\n\n select.innerHTML = \"\";\n for (const key in installments) {\n const option = document.createElement(\"option\");\n option.value = key;\n option.innerText = installments[key];\n\n select.appendChild(option);\n }\n }\n },\n error: function (xhr, status, error) {\n if (status !== 'abort') {\n const errorList = document.querySelector(\"#wvp-installments-error\");\n if (errorList && errorList.innerHTML === \"\") {\n const span = document.createElement(\"span\");\n\n span.innerText = error.message;\n errorList.appendChild(span);\n errorList.classList.add(\"active\");\n }\n }\n },\n complete: () => {\n jQuery(\".wvp-credit-fields\").removeClass(\"processing\").unblock();\n },\n });\n\n // Cancel the request if the token changes\n jQuery('input[name=\"wc-vindi-pagamentos-credit-payment-token\"]').on('change', (e) => {\n if (jQuery(e.target).is(':checked') && e.target.value !== currentToken) {\n xhr.abort();\n }\n });\n }\n\n setRequestLoader() {\n jQuery(\".wvp-credit-fields\")\n .addClass(\"processing\")\n .block({\n message: null,\n overlayCSS: {\n background: \"#fff\",\n opacity: 0.6,\n },\n });\n }\n}","import IMask from \"imask\";\n\nexport default class Gateways {\n constructor() {\n this.setDocumentMask();\n this.handlerPersonType();\n this.setDocumentNameAttribute();\n this.hideGateway();\n this.setFingerPrintEnviroment();\n this.hideBlockDocumentField();\n this.selectedGateway();\n }\n \n\n hideBlockDocumentField() {\n const person = document.querySelector(\n \"#vindi-pagamentos__billing_persontype\",\n );\n\n if (person) {\n person.addEventListener(\"change\", () => {\n if (person.value == 2) {\n this.handlerDocumentField(false);\n } else {\n this.handlerDocumentField(true);\n }\n });\n }\n }\n\n setFingerPrintEnviroment() {\n const enviroment = document.querySelector(\".wvp-enviroment\");\n const elements = document.querySelectorAll(\".wvp-fingerprint\");\n\n if (window.yapay && enviroment) {\n const fingerprint = window.yapay.FingerPrint({\n env: enviroment.value,\n });\n\n elements.forEach((element) => {\n element.value = fingerprint.getFingerPrint();\n });\n }\n }\n\n setDocumentMask() {\n const documents = document.querySelectorAll(\".wc-vindi-customer-document\");\n documents.forEach((element) => {\n if (element.classList.contains(\"wvp-block-field\")) {\n IMask(element, {\n mask: \"000.000.000-00\",\n });\n }\n });\n }\n\n handlerPersonType() {\n const person = document.querySelector(\"#billing_persontype\");\n\n if (person) {\n this.handlerDocumentField(person.value === \"1\");\n\n jQuery(\"#billing_persontype\").change(() => {\n this.handlerDocumentField(person.value === \"1\");\n });\n }\n }\n\n handlerDocumentField(show) {\n const documents = document.querySelectorAll(\n \".vindi-pagamentos-document\",\n );\n documents.forEach((element) => {\n if (show) {\n element.classList.add(\"vindi-pagamentos-document-hidden\");\n } else {\n element.classList.remove(\"vindi-pagamentos-document-hidden\");\n }\n });\n }\n\n setDocumentNameAttribute() {\n const documents = document.querySelectorAll(\".wc-vindi-customer-document\");\n\n documents.forEach((element) => {\n element.addEventListener(\"focusin\", () => {\n this.unsetDocumentNameAttribute();\n\n element.setAttribute(\"name\", \"wc-vindi-customer-document\");\n });\n });\n }\n\n unsetDocumentNameAttribute() {\n const documents = document.querySelectorAll(\".wc-vindi-customer-document\");\n\n documents.forEach((element) => {\n element.removeAttribute(\"name\");\n });\n }\n\n hideGateway() {\n const hiddens = document.querySelectorAll(\".wvp-hidden-gateway\");\n\n hiddens.forEach((hidden) => {\n const gateway = document.querySelector(`.payment_method_${hidden.value}`);\n if (gateway) {\n gateway.classList.add(\"wvp-hidden-gateway\");\n } else {\n this.hideBlockGateways(hidden);\n }\n });\n }\n\n hideBlockGateways(gateway) {\n const input = document.querySelector(`#hidden-${gateway.value}`);\n if (input) {\n const parent = input.parentElement.parentElement;\n parent.classList.add(\"wvp-hidden-gateway\");\n }\n }\n\n selectedGateway() {\n const gateways = document.querySelectorAll('form.checkout input[name^=\"payment_method\"]');\n gateways.forEach(gateway => {\n gateway.addEventListener('change', () => {\n const event = new Event('update_checkout');\n document.body.dispatchEvent(event)\n });\n });\n }\n\n}\n","export default class Trasnfer {\n constructor() {\n this.handleBankBrands();\n }\n\n handleBankBrands() {\n const brands = document.querySelectorAll(\".wvp-transfer-brand\");\n const bank = document.querySelector(\"#wvp-transfer-bank\");\n\n if (bank) {\n brands.forEach((brand) => {\n brand.addEventListener(\"click\", () => {\n this.clearSelectedBrands();\n\n brand.classList.add(\"wvp-transfer-brand-selected\");\n bank.value = brand.getAttribute(\"data-bank\");\n });\n });\n }\n }\n\n clearSelectedBrands() {\n const brands = document.querySelectorAll(\".wvp-transfer-brand-selected\");\n\n brands.forEach((brand) => {\n brand.classList.remove(\"wvp-transfer-brand-selected\");\n });\n }\n}\n","import IMask from \"imask\";\n\nexport default class PaymentLink {\n constructor() {\n if(this.isOrderPayPage()) {\n this.handlePersonType();\n this.handleDocumentMask();\n this.validateFormFields();\n this.fillFormFields();\n }\n }\n\n handlePersonType() {\n const personType = document.querySelector('#billing_persontype');\n\n if (personType) {\n this.selectPersonType();\n\n personType.addEventListener('change', () => {\n this.selectPersonType();\n })\n }\n }\n\n selectPersonType() {\n const personType = document.querySelector('#billing_persontype');\n const cpf = document.querySelector('#billing_cpf_field');\n const cnpj = document.querySelector('#billing_cnpj_field');\n const company = document.querySelector('#billing_company_field');\n\n if (personType.value === '1') {\n cpf.style.display = 'block';\n\n cnpj.style.display = 'none';\n company.style.display = 'none';\n }\n\n if (personType.value === '2') {\n cpf.style.display = 'none';\n\n cnpj.style.display = 'block';\n company.style.display = 'block';\n }\n }\n\n isOrderPayPage() {\n const url = new URLSearchParams(location.href);\n if (url.has(\"vindi-payment-link\")) {\n return true;\n }\n\n return false;\n }\n\n handleDocumentMask() {\n const cpf = document.querySelector('#billing_cpf');\n const cnpj = document.querySelector('#billing_cnpj');\n const phone = document.querySelector('#billing_phone');\n\n if (cpf) {\n IMask(cpf, {\n mask: \"000.000.000-00\",\n });\n }\n\n if (cnpj) {\n IMask(cnpj, {\n mask: \"00.000.000/0000-00\",\n });\n }\n\n if (phone) {\n IMask(phone, {\n mask: \"(00) 0 0000-0000\",\n });\n }\n }\n\n validateFormFields() {\n const form = document.querySelector('.woocommerce > #order_review');\n\n if (form) {\n this.setRequiredAttribute();\n\n form.addEventListener('submit', (e) => {\n e.preventDefault();\n\n this.saveFormData();\n\n if (!form.reportValidity()) {\n setTimeout(() => {\n this.handleWoocommerceLoader(false);\n }, 500);\n\n return;\n }\n\n this.handleWoocommerceLoader(true);\n form.submit();\n });\n }\n }\n\n handleWoocommerceLoader(active = true) {\n const loaders = document.querySelectorAll('.blockUI');\n\n loaders.forEach(loader => {\n loader.style.display = 'block';\n\n if (!active) {\n loader.style.display = 'none';\n }\n });\n }\n\n setRequiredAttribute() {\n const fields = this.getFormFields(true);\n\n fields.forEach(field => {\n const element = document.querySelector(`#billing_${field}`);\n if (element) {\n element.setAttribute('required', true);\n }\n });\n }\n\n getFormFields(requiredOnly = false) {\n let requiredFields = ['first_name', 'last_name', 'person_type', 'country', 'postcode', 'address_1', 'neighborhood', 'number', 'city', 'phone', 'email'];\n\n if (requiredOnly) {\n return requiredFields;\n }\n\n return requiredFields.concat(['address_2', 'cpf', 'cnpj']);\n }\n\n saveFormData() {\n const fields = this.getFormFields();\n const formData = {};\n\n fields.forEach(field => {\n const element = document.querySelector(`#billing_${field}`);\n if (element) {\n formData[field] = element.value;\n }\n });\n\n localStorage.setItem('vindi-pagamento-form-data', JSON.stringify(formData));\n }\n\n fillFormFields() {\n const formData = localStorage.getItem('vindi-pagamento-form-data');\n\n if (formData) {\n const formDataObject = JSON.parse(formData);\n\n for (const key in formDataObject) {\n if (Object.prototype.hasOwnProperty.call(formDataObject, key)) {\n const element = document.querySelector(`#billing_${key}`);\n if (element) {\n element.value = formDataObject[key];\n }\n }\n }\n }\n }\n}\n","export default class Thankyou {\n constructor() {\n this.handleCopyButton();\n }\n\n handleCopyButton() {\n const buttons = document.querySelectorAll(\".copy-button\");\n\n buttons.forEach((button) => {\n button.addEventListener(\"click\", () => {\n const text = button.getAttribute(\"data-text\");\n const input = document.querySelector(\".copy-input\");\n\n try {\n navigator.clipboard.writeText(text);\n input.select();\n } catch (error) {\n input.select();\n document.execCommand(\"copy\");\n }\n });\n });\n }\n}\n","export default class UIManager {\n constructor(modalSelector) {\n this.modalSelector = modalSelector;\n }\n\n initUI() {\n if (jQuery('.order-total-section .total-loader').length === 0) {\n jQuery('.order-total-section').append('<div class=\"total-loader\" style=\"display: none;\"><div class=\"spinner\"></div></div>');\n }\n }\n\n showTotalLoader() {\n jQuery('.order-total-section .total-loader').show();\n jQuery('.total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value')\n .css('opacity', '0.5');\n }\n\n hideTotalLoader() {\n jQuery('.order-total-section .total-loader').hide();\n jQuery('.total-value, .subtotal-value, .payment-discount-value, .coupon-discount-value, .total-discount-value')\n .css('opacity', '1');\n }\n\n showCouponMessage(message, type) {\n const messageEl = jQuery('.coupon-message');\n messageEl.text(message);\n messageEl.removeClass('success error');\n if (type) {\n messageEl.addClass(type);\n }\n }\n\n displayModal() {\n jQuery(this.modalSelector).css('display', 'block');\n }\n\n hideModal() {\n jQuery(this.modalSelector).hide();\n }\n\n setRequestLoader() {\n jQuery('.wvp-credit-fields, .saved-card-cvv')\n .addClass('processing')\n .block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n\n removeRequestLoader() {\n jQuery('.wvp-credit-fields, .saved-card-cvv')\n .removeClass('processing')\n .unblock();\n }\n\n updateProductInfo(title, price) {\n jQuery('.product-info').html(`\n <h3>${title}</h3>\n <p>Valor: ${price}</p>\n `);\n }\n}","export default class PaymentMethodHandler {\n constructor(modalSelector, uiManager) {\n this.modalSelector = modalSelector;\n this.uiManager = uiManager;\n }\n\n initializeCreditCardHandling() {\n jQuery('.wvp-credit-fields-modal').hide();\n\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n const $this = jQuery(e.currentTarget);\n jQuery('.wvp-credit-fields-modal').slideUp();\n\n if ($this.val() === 'vindi-pagamentos-credit' && !$this.data('token')) {\n $this.closest('.payment-method').find('.wvp-credit-fields-modal').slideDown();\n this.onPaymentMethodChange(null);\n }\n });\n\n jQuery('#wvp-card-number').on('input', () => {\n this.handleCardBrand();\n });\n }\n\n initializeCvvHandling() {\n jQuery('.saved-card-cvv').hide();\n\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n const $this = jQuery(e.currentTarget);\n jQuery('.saved-card-cvv').slideUp();\n\n if ($this.val() === 'vindi-pagamentos-credit' && $this.data('token')) {\n $this.closest('.saved-card').find('.saved-card-cvv').slideDown();\n this.onPaymentMethodChange($this.data('token'));\n }\n });\n\n jQuery('.saved-card-cvv-input').on('input', function () {\n this.value = this.value.replace(/[^0-9]/g, '');\n });\n }\n\n handleCardBrand() {\n const cardField = jQuery('#wvp-card-number');\n if (!cardField.length) return;\n\n const cardNumber = cardField.val().replace(/\\s/g, '');\n if (cardNumber.length < 6) return;\n\n const brands = [\n {\n code: 16,\n name: \"elo\",\n regex: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/,\n },\n {\n code: 3,\n name: \"visa\",\n regex: /^4[0-9]{12}(?:[0-9]{3})?$/,\n },\n {\n code: 4,\n name: \"mastercard\",\n regex: /^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/,\n },\n {\n code: 5,\n name: \"amex\",\n regex: /^3[47][0-9]{13}$/,\n },\n {\n code: 25,\n name: \"hipercard\",\n regex: /^(606282|3841\\d{2}|60(?!11)\\d{2})\\d{10}$/,\n },\n {\n code: 20,\n name: \"hiper\",\n regex: /^(637095|637599|637612|637609|637598)\\d*$/,\n },\n ];\n\n let found = false;\n\n brands.forEach((brand) => {\n if (brand.regex.test(cardNumber) && !found) {\n found = true;\n this.setCardBrand(brand.name, brand.code);\n this.onPaymentMethodChange(null);\n }\n });\n\n if (!found) {\n this.setCardBrand(\"mono/generic\", 1);\n this.showInstallmentsError('Não foi possível reconhecer a bandeira do cartão.');\n }\n }\n\n setCardBrand(name, code) {\n const img = jQuery('#wvp-brand-icon');\n const hidden = jQuery('#wvp-card-brand');\n\n if (img.length) {\n const attr = img.attr('data-img');\n if (attr) {\n img.attr('src', img.attr('src').replace(attr, name));\n img.attr('data-img', name);\n }\n }\n\n if (hidden.length) {\n hidden.val(code);\n }\n }\n\n showInstallmentsError(message) {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html(message).addClass('active');\n }\n }\n\n resetInstallmentsError() {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html('').removeClass('active');\n }\n }\n\n // Set a callback for when payment method changes\n onPaymentMethodChange(token) {\n // This will be replaced by the main class\n }\n\n validateAndGetPaymentData() {\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked');\n \n if (!paymentMethod.length) {\n return { isValid: false, message: 'Por favor, selecione uma forma de pagamento.' };\n }\n\n const paymentMethodValue = paymentMethod.val();\n const tokenId = paymentMethod.data('token');\n \n let cardData = {};\n \n if (paymentMethodValue === 'vindi-pagamentos-credit') {\n if (tokenId) {\n const cvv = jQuery(`#saved_card_cvv_${tokenId}`).val();\n if (!cvv) {\n return { isValid: false, message: 'Por favor, informe o código CVV do cartão.' };\n }\n\n cardData = {\n token_id: tokenId,\n cvv: cvv,\n last4: paymentMethod.data('last4'),\n expiry: paymentMethod.data('expiry')\n };\n } else {\n const cardOwner = jQuery('#wvp-card-owner').val();\n const cardNumber = jQuery('#wvp-card-number').val();\n const cardDate = jQuery('#wvp-card-date').val();\n const cardCode = jQuery('#wvp-card-code').val();\n const cardBrand = jQuery('#wvp-card-brand').val();\n const installments = jQuery('#wvp-card-installments').val() || '1';\n\n if (!cardOwner || !cardNumber || !cardDate || !cardCode) {\n return { isValid: false, message: 'Por favor, preencha todos os dados do cartão de crédito.' };\n }\n\n cardData = {\n owner: cardOwner,\n number: cardNumber,\n date: cardDate,\n code: cardCode,\n brand: cardBrand,\n installments: installments\n };\n }\n }\n \n return { \n isValid: true, \n data: {\n payment_method: paymentMethodValue,\n card_data: cardData\n }\n };\n }\n}","export default class FormHandler {\n constructor() {\n this.personType = '1'; // Default to PF\n }\n\n initializePersonTypeHandling() {\n jQuery('#billing-pf-fields').show();\n jQuery('#billing-pj-fields').hide();\n jQuery('#billing-pf-fields input').prop('required', true);\n jQuery('#billing-pj-fields input').prop('required', false);\n\n this.initializeCpfMask();\n\n jQuery('input[name=\"billing_persontype\"]').on('change', (e) => {\n const isPF = e.target.value === '1';\n this.personType = e.target.value;\n\n jQuery('#billing-pf-fields').toggle(isPF);\n jQuery('#billing-pj-fields').toggle(!isPF);\n\n jQuery('#billing-pf-fields input').prop('required', isPF);\n jQuery('#billing-pj-fields input').prop('required', !isPF);\n\n if (isPF) {\n this.initializeCpfMask();\n } else {\n this.initializeCnpjMask();\n }\n });\n }\n\n initializeCpfMask() {\n const cpfInput = document.querySelector('input[name=\"billing_cpf\"]');\n if (cpfInput && typeof IMask === 'function') {\n IMask(cpfInput, {\n mask: '000.000.000-00',\n });\n }\n }\n\n initializeCnpjMask() {\n const cnpjInput = document.querySelector('input[name=\"billing_cnpj\"]');\n if (cnpjInput && typeof IMask === 'function') {\n IMask(cnpjInput, {\n mask: '00.000.000/0000-00',\n });\n }\n }\n\n validateAndGetBillingData() {\n const personType = jQuery('input[name=\"billing_persontype\"]:checked').val() || '1';\n const isPF = personType === '1';\n\n const billingData = {\n persontype: personType,\n };\n let isValid = true;\n\n const visibleFieldsContainer = isPF ? '#billing-pf-fields' : '#billing-pj-fields';\n\n jQuery(`${visibleFieldsContainer} .missing-data input`).each(function () {\n const field = jQuery(this);\n const fieldName = field.attr('name').replace('billing_', '');\n const value = field.val().trim();\n\n if (!value) {\n field.addClass('error');\n isValid = false;\n } else {\n field.removeClass('error');\n billingData[fieldName] = value;\n }\n });\n\n jQuery(`${visibleFieldsContainer} .has-data`).each(function () {\n const formRow = jQuery(this);\n const input = formRow.find('input');\n if (input.length) {\n const fieldName = input.attr('name').replace('billing_', '');\n const value = input.val() || formRow.find('.field-display').text().split(':')[1].trim();\n billingData[fieldName] = value;\n }\n });\nconsole.log('=== DEBUG BILLING DATA ===');\nconsole.log('Person Type:', personType);\nconsole.log('Visible Container:', visibleFieldsContainer);\nconsole.log('Billing Data Collected:', billingData);\nconsole.log('=========================');\n return {\n isValid: isValid,\n data: billingData,\n message: isValid ? '' : 'Por favor, preencha todos os campos obrigatórios.'\n };\n }\n}","export default class InstallmentsManager {\n constructor(modalSelector, uiManager) {\n this.modalSelector = modalSelector;\n this.uiManager = uiManager;\n this.currentXhr = null;\n }\n\n initializeInstallmentsHandling() {\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n const $this = jQuery(e.currentTarget);\n if ($this.val() === 'vindi-pagamentos-credit') {\n if ($this.data('token')) {\n this.getInstallments($this.data('token'));\n }\n }\n });\n }\n\n getInstallments(token = null, price = null) {\n if (this.currentXhr) {\n this.currentXhr.abort();\n }\n\n let finalPrice = price;\n if (!finalPrice) {\n const totalElement = jQuery('.total-value');\n if (totalElement.length) {\n const totalText = totalElement.text().replace(/[^\\d,.-]/g, '').replace(',', '.');\n finalPrice = parseFloat(totalText);\n }\n \n if (!finalPrice || isNaN(finalPrice)) {\n const basePrice = parseFloat(jQuery('#wvp-cart-total-price').val() || 0);\n const quantity = parseInt(jQuery('#vindi-one-click-quantity').val() || 1);\n finalPrice = basePrice * quantity;\n }\n }\n \n const nonce = jQuery('#wvp-card-nonce').val();\n\n this.resetInstallmentsError();\n this.uiManager.setRequestLoader();\n\n const data = {\n price: finalPrice.toFixed(2),\n _wpnonce: nonce || vindiOneClick.nonce,\n security: typeof wc_checkout_params !== 'undefined' ?\n wc_checkout_params.update_order_review_nonce :\n vindiOneClick.nonce\n };\n\n if (token) {\n data.token = token;\n } else if (jQuery('#wvp-card-brand').length && jQuery('#wvp-card-brand').val()) {\n data.brand = jQuery('#wvp-card-brand').val();\n }\n\n const ajaxUrl = typeof wc_checkout_params !== 'undefined' ?\n wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments') :\n vindiOneClick.ajax_url + '?wc-ajax=checkout_installments';\n\n this.currentXhr = jQuery.ajax({\n url: ajaxUrl,\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: (response) => {\n if (response.success) {\n const installments = response.data.installments;\n\n let targetSelector;\n if (token) {\n targetSelector = `.saved-card:has(input[data-token=\"${token}\"]) select[name=\"wvp-installments\"]`;\n } else {\n targetSelector = '#wvp-card-installments';\n }\n\n const selects = jQuery(targetSelector);\n\n if (response.data.message) {\n this.showInstallmentsMessage(response.data.message);\n }\n\n if (selects.length) {\n selects.each(function () {\n const select = jQuery(this);\n select.empty();\n\n Object.entries(installments).forEach(([key, value]) => {\n select.append(jQuery('<option>', {\n value: key,\n text: value\n }));\n });\n });\n } else {\n console.warn('Seletor de parcelas não encontrado:', targetSelector);\n }\n } else {\n this.showInstallmentsError(response.data.message || 'Erro ao carregar parcelas');\n }\n },\n error: (xhr, status, error) => {\n if (status !== 'abort') {\n this.showInstallmentsError('Não foi possível carregar as parcelas. Tente novamente.');\n }\n },\n complete: () => {\n this.uiManager.removeRequestLoader();\n }\n });\n }\n\n showInstallmentsMessage(message) {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length && message) {\n errorElement.html(message).addClass('active');\n }\n }\n\n showInstallmentsError(message) {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html(message).addClass('active');\n }\n }\n\n resetInstallmentsError() {\n const errorElement = jQuery('#wvp-installments-error');\n if (errorElement.length) {\n errorElement.html('').removeClass('active');\n }\n }\n}","export default class CouponManager {\n constructor(mainController, modalSelector, uiManager) {\n this.mainController = mainController;\n this.modalSelector = modalSelector;\n this.uiManager = uiManager;\n this.appliedCoupons = [];\n }\n\n initializeCouponHandling() {\n if (jQuery('.applied-coupons-container').length === 0) {\n jQuery('.coupon-form').after('<div class=\"applied-coupons-container\"></div>');\n }\n\n jQuery('#vindi-apply-coupon').on('click', () => {\n this.applyCoupon();\n });\n\n jQuery('#vindi-coupon-code').on('keypress', (e) => {\n if (e.which === 13) {\n e.preventDefault();\n this.applyCoupon();\n }\n });\n }\n\n applyCoupon() {\n const couponCode = jQuery('#vindi-coupon-code').val().trim();\n if (!couponCode) {\n this.uiManager.showCouponMessage('Por favor, informe um código de cupom.', 'error');\n return;\n }\n\n const applyButton = jQuery('#vindi-apply-coupon');\n const loader = jQuery('.coupon-loader');\n\n applyButton.prop('disabled', true);\n loader.show();\n this.uiManager.showCouponMessage('', '');\n this.uiManager.showTotalLoader();\n\n const productInfo = this.mainController.getProductInfo();\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n\n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'validate_one_click_coupon',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n quantity: productInfo.quantity,\n payment_method: paymentMethod,\n coupon_code: couponCode,\n existing_coupons: []\n },\n success: (response) => {\n if (response.success) {\n this.uiManager.showCouponMessage(response.data.messages.coupon_applied || 'Cupom aplicado com sucesso!', 'success');\n \n if (response.data.coupon_codes) {\n this.appliedCoupons = response.data.coupon_codes;\n } else if (response.data.new_coupon) {\n this.appliedCoupons = [couponCode];\n }\n \n jQuery('#vindi-coupon-code').val('');\n \n this.updateAppliedCouponsDisplay(response.data.applied_coupons || []);\n \n this.mainController.onCouponApplied(response.data);\n } else {\n this.uiManager.showCouponMessage(response.data || 'Cupom inválido ou não aplicável.', 'error');\n this.uiManager.hideTotalLoader();\n }\n },\n error: (response) => {\n this.uiManager.showCouponMessage('Erro', 'error');\n this.uiManager.hideTotalLoader();\n },\n complete: () => {\n applyButton.prop('disabled', false);\n loader.hide();\n }\n });\n }\n\n removeCoupon(couponCode) {\n this.appliedCoupons = [];\n \n this.uiManager.showCouponMessage('Cupom removido.', 'success');\n\n jQuery('.applied-coupons-container').empty();\n jQuery('.coupon-discount-row').hide();\n jQuery('.coupon-discount-value').html('');\n jQuery('.total-discount-row').hide();\n jQuery('.total-discount-value').html('');\n \n const productInfo = this.mainController.getProductInfo();\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n \n this.uiManager.showTotalLoader();\n \n const subtotalText = jQuery('.subtotal-value').text();\n jQuery('.total-value').html(subtotalText);\n \n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'calculate_one_click_discount',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n payment_method: paymentMethod,\n quantity: productInfo.quantity,\n coupon_codes: []\n },\n success: (response) => {\n if (response.success) {\n this.mainController.onCouponRemoved(response.data);\n jQuery('.applied-coupons-container').empty();\n }\n },\n error: () => {\n this.uiManager.showCouponMessage('Erro', 'error');\n this.uiManager.hideTotalLoader();\n },\n complete: () => {\n this.uiManager.hideTotalLoader();\n }\n });\n }\n\n updateAppliedCouponsDisplay(coupons) {\n const container = jQuery('.applied-coupons-container');\n container.empty();\n \n if (coupons.length) {\n const heading = jQuery('<h4>').text('Cupom aplicado:');\n container.append(heading);\n \n const couponList = jQuery('<ul class=\"applied-coupons-list\">');\n \n const coupon = coupons[0];\n const listItem = jQuery('<li class=\"applied-coupon-item\">');\n const text = jQuery('<span class=\"coupon-code\">').text(coupon.code);\n const removeBtn = jQuery('<button type=\"button\" class=\"remove-coupon\">').text('×');\n \n removeBtn.on('click', () => this.removeCoupon(coupon.code));\n \n listItem.append(text);\n if (coupon.description && coupon.description !== coupon.code) {\n listItem.append(' - ', jQuery('<span class=\"coupon-description\">').text(coupon.description));\n }\n listItem.append(removeBtn);\n couponList.append(listItem);\n \n container.append(couponList);\n }\n }\n\n getAppliedCoupons() {\n return this.appliedCoupons;\n }\n}","export default class OrderTotalCalculator {\n constructor(modalSelector, mainController, uiManager) {\n this.modalSelector = modalSelector;\n this.mainController = mainController;\n this.uiManager = uiManager;\n }\n\n initializeDiscountHandling() {\n jQuery('input[name=\"payment_method\"]').on('change', (e) => {\n this.uiManager.showTotalLoader();\n this.updateOrderTotal(jQuery(e.currentTarget).val());\n });\n }\n\n initializeQuantityHandling() {\n const updateAll = () => {\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n if (paymentMethod) {\n this.uiManager.showTotalLoader();\n this.updateOrderTotal(paymentMethod);\n setTimeout(() => {\n if (paymentMethod === 'vindi-pagamentos-credit') {\n this.mainController.updateInstallmentsForSelectedPayment();\n }\n }, 300);\n }\n };\n\n jQuery('.quantity-decrease').on('click', () => {\n const quantityInput = jQuery('#vindi-one-click-quantity');\n const currentValue = parseInt(quantityInput.val());\n if (currentValue > 1) {\n quantityInput.val(currentValue - 1);\n updateAll();\n }\n });\n\n jQuery('.quantity-increase').on('click', () => {\n const quantityInput = jQuery('#vindi-one-click-quantity');\n const currentValue = parseInt(quantityInput.val());\n const maxValue = parseInt(quantityInput.attr('max'));\n if (currentValue < maxValue) {\n quantityInput.val(currentValue + 1);\n updateAll();\n }\n });\n\n jQuery('#vindi-one-click-quantity').on('change', updateAll);\n }\n\n updateOrderTotal(paymentMethod) {\n const productInfo = this.mainController.getProductInfo();\n const appliedCoupons = this.mainController.getAppliedCoupons();\n\n this.uiManager.showTotalLoader();\n\n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'calculate_one_click_discount',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n payment_method: paymentMethod,\n quantity: productInfo.quantity,\n coupon_codes: appliedCoupons\n },\n success: (response) => {\n if (response.success) {\n this.updateOrderTotals(response.data);\n }\n },\n complete: () => {\n this.uiManager.hideTotalLoader();\n }\n });\n }\n\n updateOrderTotals(data) {\n\n jQuery('.payment-discount-row').hide();\n jQuery('.payment-discount-value').html('');\n jQuery('.coupon-discount-row').hide();\n jQuery('.coupon-discount-value').html('');\n jQuery('.total-discount-row').hide();\n jQuery('.total-discount-value').html('');\n\n jQuery('.subtotal-value').html(data.subtotal);\n jQuery('.total-value').html(data.total);\n if (data.total_raw !== undefined && parseFloat(data.total_raw) <= 0) {\n this.uiManager.showCouponMessage(data.messages.coupon_exceeds_total, 'error');\n jQuery('#vindi-process-quick-buy').prop('disabled', true);\n } else {\n jQuery('#vindi-process-quick-buy').prop('disabled', false);\n }\n\n if (data.payment_discount && parseFloat(data.payment_discount) > 0) {\n jQuery('.payment-discount-row').show();\n jQuery('.payment-discount-value').html(data.payment_discount_formated);\n }\n\n const appliedCoupons = this.mainController.getAppliedCoupons();\n const hasCoupons = appliedCoupons && appliedCoupons.length > 0;\n if (hasCoupons && data.coupon_discount && parseFloat(data.coupon_discount) > 0) {\n jQuery('.coupon-discount-row').show();\n jQuery('.coupon-label').html(`Cupom de Desconto:`);\n jQuery('.coupon-discount-value').html(data.coupon_discount_formated);\n }\n\n if (data.has_discount && data.discount && parseFloat(data.has_discount) > 0) {\n jQuery('.total-discount-row').show();\n jQuery('.total-discount-value').html(data.discount);\n }\n\n const newTotal = data.total;\n const oldTotal = jQuery('.total-value').data('previous-value') || '';\n jQuery('.total-value').data('previous-value', newTotal);\n\n const totalChanged = oldTotal !== newTotal;\n\n if (totalChanged || data.update_installments) {\n const paymentMethod = jQuery('input[name=\"payment_method\"]:checked').val() || '';\n if (paymentMethod === 'vindi-pagamentos-credit') {\n setTimeout(() => this.mainController.updateInstallmentsForSelectedPayment(), 300);\n }\n }\n\n this.uiManager.hideTotalLoader();\n }\n}","import UIManager from './components/ui-manager';\nimport PaymentMethodHandler from './components/payment-method-handler';\nimport FormHandler from './components/form-handler';\nimport InstallmentsManager from './components/install-ments-manager';\nimport CouponManager from './components/coupon-manager';\nimport OrderTotalCalculator from './components/order-total-calculator';\n\nexport default class VindiOneClickBuy {\n constructor() {\n if (typeof vindiOneClick === 'undefined' || !vindiOneClick) {\n return;\n }\n\n this.modalSelector = '#vindi-one-click-modal';\n this.modal = jQuery(this.modalSelector);\n\n if (this.modal.length === 0) {\n return;\n }\n\n this.buyButton = jQuery('.vindi-one-click-buy');\n this.closeBtn = jQuery('.vindi-modal-close');\n this.processButton = jQuery('#vindi-process-quick-buy');\n\n this.uiManager = new UIManager(this.modalSelector);\n this.formHandler = new FormHandler();\n this.paymentHandler = new PaymentMethodHandler(this.modalSelector, this.uiManager);\n this.installmentsManager = new InstallmentsManager(this.modalSelector, this.uiManager);\n this.couponManager = new CouponManager(this, this.modalSelector, this.uiManager);\n this.orderTotalCalculator = new OrderTotalCalculator(this.modalSelector, this, this.uiManager);\n\n this.paymentHandler.onPaymentMethodChange = (token) => {\n this.installmentsManager.getInstallments(token);\n };\n\n this.init();\n }\n\n init() {\n this.bindEvents();\n this.uiManager.initUI();\n this.paymentHandler.initializeCreditCardHandling();\n this.paymentHandler.initializeCvvHandling();\n this.formHandler.initializePersonTypeHandling();\n this.formHandler.initializeCpfMask();\n this.installmentsManager.initializeInstallmentsHandling();\n this.orderTotalCalculator.initializeDiscountHandling();\n this.orderTotalCalculator.initializeQuantityHandling();\n this.couponManager.initializeCouponHandling();\n }\n\n bindEvents() {\n this.buyButton.on('click', (e) => {\n this.handleBuyButtonClick(e);\n });\n this.closeBtn.on('click', () => this.handleCloseModal());\n this.processButton.on('click', () => this.handleProcessPurchase());\n }\n\n handleBuyButtonClick(e) {\n e.preventDefault();\n\n const productId = this.buyButton.data('product-id');\n const productTitle = jQuery('h1.product_title').text();\n const productPrice = jQuery('.price .amount').text();\n\n this.uiManager.displayModal();\n this.uiManager.updateProductInfo(productTitle, productPrice);\n }\n\n handleCloseModal() {\n this.uiManager.hideModal();\n }\n\n handleProcessPurchase() {\n const processButton = this.processButton;\n const loadingSpinner = document.querySelector('.loading-spinner');\n\n processButton.prop('disabled', true);\n loadingSpinner.style.display = 'block';\n\n const billingValidation = this.formHandler.validateAndGetBillingData();\n if (!billingValidation.isValid) {\n alert(billingValidation.message);\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n return;\n }\n\n const paymentValidation = this.paymentHandler.validateAndGetPaymentData();\n if (!paymentValidation.isValid) {\n alert(paymentValidation.message);\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n return;\n }\n\n const productInfo = this.getProductInfo();\n\n jQuery.ajax({\n url: vindiOneClick.ajax_url,\n type: 'POST',\n data: {\n action: 'process_one_click_buy',\n nonce: vindiOneClick.nonce,\n product_id: productInfo.productId,\n quantity: productInfo.quantity,\n payment_method: paymentValidation.data.payment_method,\n card_data: paymentValidation.data.card_data,\n billing_data: billingValidation.data,\n coupon_codes: this.getAppliedCoupons()\n },\n success: (response) => {\n if (response.success) {\n window.location.href = response.data.redirect;\n } else {\n alert(response.data || 'Erro ao processar pagamento');\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n }\n },\n error: () => {\n alert('Erro ao processar pagamento. Por favor, tente novamente.');\n processButton.prop('disabled', false);\n loadingSpinner.style.display = 'none';\n }\n });\n }\n\n getProductInfo() {\n return {\n productId: this.buyButton.data('product-id'),\n quantity: parseInt(jQuery('#vindi-one-click-quantity').val() || 1)\n };\n }\n\n getAppliedCoupons() {\n return this.couponManager.getAppliedCoupons();\n }\n\n updateInstallmentsForSelectedPayment() {\n const selectedPaymentMethod = jQuery('input[name=\"payment_method\"]:checked');\n\n if (selectedPaymentMethod.length && selectedPaymentMethod.val() === 'vindi-pagamentos-credit') {\n const tokenId = selectedPaymentMethod.data('token');\n\n if (tokenId) {\n this.installmentsManager.getInstallments(tokenId);\n } else {\n const cardBrand = jQuery('#wvp-card-brand').val();\n if (cardBrand) {\n this.installmentsManager.getInstallments(null);\n }\n }\n }\n }\n\n onCouponApplied(data) {\n this.orderTotalCalculator.updateOrderTotals(data);\n }\n\n onCouponRemoved(data) {\n this.orderTotalCalculator.updateOrderTotals(data, true);\n }\n}","import IMask from \"imask\";\nimport { __ } from \"@wordpress/i18n\";\n\nexport default class VindiMultipayment {\n constructor(settings = {}) {\n this.settings = {\n ajaxUrl: settings.ajaxUrl || (typeof ajaxurl !== 'undefined' ? ajaxurl : '/wp-admin/admin-ajax.php'),\n nonce: settings.nonce || '',\n ...settings\n };\n\n if (!this.settings.nonce) {\n const nonceField = document.querySelector('input[name=\"vindi-pagamento_nonce\"]');\n if (nonceField) {\n this.settings.nonce = nonceField.value;\n }\n }\n\n this.init();\n }\n\n init() {\n this.initElements();\n\n if (this.firstMethodSelect && this.secondMethodSelect) {\n this.setupEventListeners();\n this.initializePaymentFields();\n }\n\n this.prepareFormSubmission();\n this.initPaymentMethodListener('first');\n this.initPaymentMethodListener('second');\n }\n\n initElements() {\n this.firstMethodSelect = document.getElementById('first_payment_method');\n this.secondMethodSelect = document.getElementById('second_payment_method');\n this.firstAmountInput = document.getElementById('first_payment_amount');\n this.secondAmountInput = document.getElementById('second_payment_amount');\n this.cartTotalInput = document.getElementById('cart_total');\n this.errorDiv = document.getElementById('first-payment-amount-error');\n }\n\n setupEventListeners() {\n this.firstMethodSelect.addEventListener('change', () => {\n this.firstMethodValue = this.firstMethodSelect.value;\n this.updateSecondMethodOptions(this.firstMethodSelect.value);\n this.updatePaymentMethodFields(this.firstMethodSelect.value, 'first');\n });\n\n this.secondMethodSelect.addEventListener('change', () => {\n this.secondMethodValue = this.secondMethodSelect.value;\n this.updateFirstMethodOptions(this.secondMethodSelect.value);\n this.updatePaymentMethodFields(this.secondMethodSelect.value, 'second');\n });\n\n if (this.firstAmountInput && this.secondAmountInput && this.cartTotalInput) {\n this.firstAmountInput.addEventListener('input', () => {\n this.updateSecondAmount();\n });\n }\n\n document.addEventListener('updated_checkout', () => {\n setTimeout(() => {\n const firstMethod = this.firstMethodSelect?.value;\n const secondMethod = this.secondMethodSelect?.value;\n\n if (firstMethod === 'credit_card') {\n this.setupCreditCardFunctionality('first');\n }\n\n if (secondMethod === 'credit_card') {\n this.setupCreditCardFunctionality('second');\n }\n }, 500);\n });\n\n document.addEventListener('input', (e) => {\n if (e.target && e.target.id === 'first_wvp-card-number') {\n try {\n this.handleCardBrandDetection(e.target, 'first');\n } catch (error) {\n console.warn('Erro ao detectar bandeira do primeiro cartão:', error);\n }\n }\n\n if (e.target && e.target.id === 'second_wvp-card-number') {\n try {\n this.handleCardBrandDetection(e.target, 'second');\n } catch (error) {\n console.warn('Erro ao detectar bandeira do segundo cartão:', error);\n }\n }\n });\n }\n\n updateSecondMethodOptions(firstMethod) {\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_get_compatible_methods\"),\n type: 'POST',\n data: {\n selected_method: firstMethod,\n target_field: 'second',\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n this.secondMethodSelect.innerHTML = '';\n\n Object.keys(response.data).forEach(method => {\n const option = document.createElement('option');\n option.value = method;\n option.textContent = response.data[method];\n this.secondMethodSelect.appendChild(option);\n });\n\n if (this.secondMethodSelect.options.length > 0) {\n const optionStillExists = Array.from(this.secondMethodSelect.options).some(\n option => option.value === this.secondMethodValue\n );\n\n if (optionStillExists) {\n this.secondMethodSelect.value = this.secondMethodValue\n } else if (this.secondMethodSelect.options.length > 0) {\n this.secondMethodSelect.selectedIndex = 0;\n }\n this.updatePaymentMethodFields(this.secondMethodSelect.value, 'second');\n }\n\n }\n }\n });\n }\n\n updateFirstMethodOptions(secondMethod) {\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_get_compatible_methods\"),\n type: 'POST',\n data: {\n selected_method: secondMethod,\n target_field: 'first',\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n this.firstMethodSelect.innerHTML = '';\n\n Object.keys(response.data).forEach(method => {\n const option = document.createElement('option');\n option.value = method;\n option.textContent = response.data[method];\n this.firstMethodSelect.appendChild(option);\n });\n\n if (this.firstMethodSelect.options.length > 0) {\n const optionStillExists = Array.from(this.firstMethodSelect.options).some(\n option => option.value === this.firstMethodValue\n );\n if (optionStillExists) {\n this.firstMethodSelect.value = this.firstMethodValue\n } else if (this.firstMethodSelect.options.length > 0) {\n this.secondMethodSelect.selectedIndex = 0;\n }\n this.updatePaymentMethodFields(this.firstMethodSelect.value, 'first');\n }\n }\n }\n });\n }\n\n initializePaymentFields() {\n if (this.firstMethodSelect && this.firstMethodSelect.value) {\n this.updatePaymentMethodFields(this.firstMethodSelect.value, 'first');\n this.updateSecondMethodOptions(this.firstMethodSelect.value);\n }\n\n if (this.secondMethodSelect && this.secondMethodSelect.value) {\n this.updatePaymentMethodFields(this.secondMethodSelect.value, 'second');\n } else if (this.secondMethodSelect) {\n const options = this.secondMethodSelect.options;\n if (options.length > 0) {\n this.secondMethodSelect.value = options[0].value;\n this.updatePaymentMethodFields(options[0].value, 'second');\n }\n }\n\n this.updateSecondAmount();\n }\n\n updatePaymentMethodFields(methodType, prefix) {\n if (!methodType) {\n return;\n }\n\n const containerPrefix = prefix === 'first' ? 'payment-method-' : 'second-payment-method-';\n const methodContainers = document.querySelectorAll(`.${prefix}-payment-method .payment-method-content`);\n\n methodContainers.forEach(el => {\n el.style.display = 'none';\n });\n\n const selectedContainer = document.getElementById(`${containerPrefix}${methodType}`);\n\n if (selectedContainer) {\n selectedContainer.style.display = 'block';\n } else {\n this.loadPaymentMethodFields(methodType, prefix);\n }\n\n if (methodType === 'credit_card') {\n this.setupCreditCardFunctionality(prefix);\n }\n }\n\n setupCreditCardFunctionality(prefix) {\n if (prefix === 'first') {\n this.setCardNumberMask(prefix);\n this.setCardOwnerMask(prefix);\n this.setCardCodeMask(prefix);\n this.setCardDateMask(prefix);\n this.manageTokenSelect(prefix);\n\n const cardNumberInput = document.getElementById('first_wvp-card-number');\n if (cardNumberInput && cardNumberInput.value) {\n this.detectCardBrand(cardNumberInput, 'first');\n }\n } else {\n this.setCardNumberMask(prefix);\n this.setCardOwnerMask(prefix);\n this.setCardDateMask(prefix);\n this.setCardCodeMask(prefix);\n this.manageTokenSelect(prefix);\n\n const cardNumberInput = document.getElementById('second_wvp-card-number');\n if (cardNumberInput && cardNumberInput.value) {\n this.detectCardBrand(cardNumberInput, 'second');\n }\n }\n }\n\n loadPaymentMethodFields(method, prefix) {\n const amountInput = prefix === 'first' ? this.firstAmountInput : this.secondAmountInput;\n const amount = amountInput ? amountInput.value : '0,00';\n const container = document.getElementById(`${prefix}-payment-method-fields`);\n\n if (!container) {\n return;\n }\n\n container.innerHTML = '<div class=\"loading\">Carregando...</div>';\n\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_load_payment_method_fields\"),\n type: 'POST',\n data: {\n method: method,\n prefix: prefix + '_',\n amount: this.parseMoneyValue(amount).toString(),\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n const fieldId = prefix === 'first' ? 'payment-method-' + method : 'second-payment-method-' + method;\n\n const existingDiv = document.getElementById(fieldId);\n if (existingDiv) {\n existingDiv.remove();\n }\n\n const fieldDiv = document.createElement('div');\n fieldDiv.id = fieldId;\n fieldDiv.className = 'payment-method-content ' + prefix + '-payment-' + method;\n fieldDiv.innerHTML = response.data;\n container.innerHTML = '';\n container.appendChild(fieldDiv);\n fieldDiv.style.display = 'block';\n\n if (method === 'credit_card') {\n this.initCreditCardMasks(prefix);\n this.setupCreditCardFunctionality(prefix);\n this.initPaymentMethodListener(prefix);\n }\n } else {\n container.innerHTML = '<p>Não foi possível carregar os campos para ' + method + '.</p>';\n }\n },\n error: (xhr, status, error) => {\n console.error(`Erro ao carregar campos para ${method}:`, error);\n container.innerHTML = '<p>Erro ao carregar campos do método de pagamento.</p>';\n }\n });\n }\n\n updateSecondAmount() {\n if (!this.firstAmountInput || !this.secondAmountInput || !this.cartTotalInput) return;\n\n let firstValue = this.parseMoneyValue(this.firstAmountInput.value);\n const cartTotal = parseFloat(this.cartTotalInput.value) || 0;\n\n if (firstValue <= 0 || firstValue >= cartTotal) {\n if (this.errorDiv) this.errorDiv.style.display = 'block';\n this.firstAmountInput.classList.add('error');\n } else {\n if (this.errorDiv) this.errorDiv.style.display = 'none';\n this.firstAmountInput.classList.remove('error');\n }\n\n const secondValue = Math.max(0, cartTotal - firstValue);\n this.secondAmountInput.value = this.formatMoneyDisplay(secondValue);\n\n const secondOriginalInput = document.getElementById('second_payment_amount_original');\n if (secondOriginalInput) {\n secondOriginalInput.value = secondValue.toFixed(2);\n }\n\n const firstAmountForInstallments = document.getElementById('vindi_first_amount_for_installments');\n const secondAmountForInstallments = document.getElementById('vindi_second_amount_for_installments');\n\n if (firstAmountForInstallments) {\n firstAmountForInstallments.value = firstValue.toFixed(2);\n }\n\n if (secondAmountForInstallments) {\n secondAmountForInstallments.value = secondValue.toFixed(2);\n }\n setTimeout(() => {\n const firstMethod = this.firstMethodSelect.value;\n const secondMethod = this.secondMethodSelect.value;\n\n if (firstMethod === 'credit_card') {\n try {\n this.getCardInstallments();\n } catch (e) {\n console.warn('Erro ao atualizar parcelas do primeiro método:', e);\n }\n }\n\n if (secondMethod === 'credit_card') {\n try {\n this.getSecondMethodInstallments();\n } catch (e) {\n console.warn('Erro ao atualizar parcelas do segundo método:', e);\n }\n }\n }, 300);\n }\n\n formatMoneyDisplay(value) {\n return value.toFixed(2).replace('.', ',');\n }\n\n parseMoneyValue(value) {\n if (!value) return 0;\n return parseFloat(value.toString().replace(/[^\\d,.-]/g, '').replace(',', '.')) || 0;\n }\n\n initCreditCardMasks(prefix = '') {\n const prefixStr = prefix ? prefix + '_' : '';\n\n const cardNumberInput = document.getElementById(prefixStr + 'wvp-card-number');\n if (cardNumberInput) {\n cardNumberInput.addEventListener('input', function () {\n let value = this.value.replace(/\\D/g, '');\n let formattedValue = '';\n\n for (let i = 0; i < value.length; i++) {\n if (i > 0 && i % 4 === 0) {\n formattedValue += ' ';\n }\n formattedValue += value[i];\n }\n\n this.value = formattedValue.substring(0, 19);\n });\n }\n\n const cardDateInput = document.getElementById(prefixStr + 'wvp-card-date');\n if (cardDateInput) {\n cardDateInput.addEventListener('input', function () {\n let value = this.value.replace(/\\D/g, '');\n let formattedValue = '';\n\n if (value.length > 2) {\n formattedValue = value.substring(0, 2) + '/' + value.substring(2, 4);\n } else {\n formattedValue = value;\n }\n\n this.value = formattedValue.substring(0, 5);\n });\n }\n\n const cardCodeInput = document.getElementById(prefixStr + 'wvp-card-code');\n if (cardCodeInput) {\n cardCodeInput.addEventListener('input', function () {\n let value = this.value.replace(/\\D/g, '');\n this.value = value.substring(0, 4);\n });\n }\n }\n\n prepareFormSubmission() {\n const checkoutForm = document.querySelector('form.checkout');\n if (!checkoutForm) return;\n const methodMap = {\n 'credit_card': 'vindi-pagamentos-credit',\n 'pix': 'vindi-pagamentos-pix',\n 'bolepix': 'vindi-pagamentos-bolepix'\n };\n\n checkoutForm.addEventListener('submit', (e) => {\n const selectedPaymentMethod = document.querySelector('input[name=\"payment_method\"]:checked');\n if (!selectedPaymentMethod || selectedPaymentMethod.value !== 'vindi-pagamentos-multi-payment') return;\n this.initElements();\n\n const firstMethodShort = this.firstMethodSelect ? this.firstMethodSelect.value : '';\n const secondMethodShort = this.secondMethodSelect ? this.secondMethodSelect.value : '';\n\n if (firstMethodShort === 'credit_card' && secondMethodShort === 'credit_card') {\n const firstCardNumber = document.getElementById('first_wvp-card-number');\n const secondCardNumber = document.getElementById('second_wvp-card-number');\n\n if (firstCardNumber && secondCardNumber) {\n const firstCardClean = firstCardNumber.value.replace(/\\s/g, '');\n const secondCardClean = secondCardNumber.value.replace(/\\s/g, '');\n\n if (firstCardClean === secondCardClean && firstCardClean !== '') {\n e.preventDefault();\n alert(__('Você não pode usar o mesmo cartão para ambos os métodos de pagamento.', 'vindi-pagamentos'));\n return false;\n }\n }\n }\n\n this.removeExistingInputs(checkoutForm, 'multi_payment');\n\n const firstMethod = methodMap[firstMethodShort] || firstMethodShort;\n const secondMethod = methodMap[secondMethodShort] || secondMethodShort;\n\n\n const firstAmount = this.firstAmountInput ? this.firstAmountInput.value : '';\n const secondAmount = this.secondAmountInput ? this.secondAmountInput.value : '';\n this.addHiddenInput(checkoutForm, 'multi_payment[first_method]', firstMethod);\n this.addHiddenInput(checkoutForm, 'multi_payment[second_method]', secondMethod);\n this.addHiddenInput(checkoutForm, 'multi_payment[first_amount]', firstAmount);\n this.addHiddenInput(checkoutForm, 'multi_payment[second_amount]', secondAmount);\n\n const firstPaymentMethodId = this.getPaymentMethodId(firstMethodShort);\n this.addHiddenInput(checkoutForm, 'payment[payment_method_id]', firstPaymentMethodId);\n\n if (firstMethodShort === 'credit_card') {\n this.collectFirstCreditCardData(checkoutForm);\n }\n\n if (secondMethodShort === 'credit_card') {\n this.collectSecondCreditCardData(checkoutForm);\n }\n });\n }\n\n collectFirstCreditCardData(form) {\n const cardOwner = document.getElementById('first_wvp-card-owner');\n const cardNumber = document.getElementById('first_wvp-card-number');\n const cardDate = document.getElementById('first_wvp-card-date');\n const cardCode = document.getElementById('first_wvp-card-code');\n const installments = document.getElementById('first_wvp-card-installments');\n const brandInput = document.getElementById('first_wvp-card-brand');\n\n if (cardNumber) {\n this.addHiddenInput(form, 'payment[card_number]', cardNumber.value.replace(/\\s/g, ''));\n }\n\n if (cardOwner) {\n this.addHiddenInput(form, 'payment[card_name]', cardOwner.value);\n }\n\n if (cardCode) {\n this.addHiddenInput(form, 'payment[card_cvv]', cardCode.value);\n }\n\n if (installments) {\n this.addHiddenInput(form, 'payment[split]', installments.value);\n }\n\n if (brandInput) {\n this.addHiddenInput(form, 'payment[payment_method_id]', brandInput.value || '1');\n }\n\n if (cardDate) {\n const dateParts = cardDate.value.split('/');\n if (dateParts.length === 2) {\n const month = dateParts[0];\n const year = '20' + dateParts[1];\n\n this.addHiddenInput(form, 'payment[card_expiration_date]', cardDate.value);\n this.addHiddenInput(form, 'payment[card_expdate_month]', month);\n this.addHiddenInput(form, 'payment[card_expdate_year]', year);\n }\n }\n }\n\n collectSecondCreditCardData(form) {\n const cardOwner = document.getElementById('second_wvp-card-owner');\n const cardNumber = document.getElementById('second_wvp-card-number');\n const cardDate = document.getElementById('second_wvp-card-date');\n const cardCode = document.getElementById('second_wvp-card-code');\n const installments = document.getElementById('second_wvp-card-installments');\n const brandInput = document.getElementById('second_wvp-card-brand');\n\n if (cardNumber) {\n this.addHiddenInput(form, 'second_payment[card_number]', cardNumber.value.replace(/\\s/g, ''));\n }\n\n if (cardOwner) {\n this.addHiddenInput(form, 'second_payment[card_name]', cardOwner.value);\n }\n\n if (cardCode) {\n this.addHiddenInput(form, 'second_payment[card_cvv]', cardCode.value);\n }\n\n if (installments) {\n this.addHiddenInput(form, 'second_payment[split]', installments.value);\n }\n\n if (brandInput) {\n this.addHiddenInput(form, 'second_payment[payment_method_id]', brandInput.value || '1');\n }\n\n if (cardDate) {\n const dateParts = cardDate.value.split('/');\n if (dateParts.length === 2) {\n const month = dateParts[0];\n const year = '20' + dateParts[1];\n\n this.addHiddenInput(form, 'second_payment[card_expiration_date]', cardDate.value);\n this.addHiddenInput(form, 'second_payment[card_expdate_month]', month);\n this.addHiddenInput(form, 'second_payment[card_expdate_year]', year);\n }\n }\n }\n\n removeExistingInputs(form, prefix) {\n const existingInputs = form.querySelectorAll(`input[name^=\"${prefix}[\"]`);\n existingInputs.forEach(input => input.remove());\n }\n\n getPaymentMethodId(method) {\n const idMap = {\n 'pix': '27', // ID numérico para Pix\n 'credit_card': '1', // ID numérico para Cartão de Crédito\n 'bolepix': '28' // ID numérico para Bolepix\n };\n\n return idMap[method] || '';\n }\n\n addHiddenInput(form, name, value) {\n const existingInput = form.querySelector(`input[name=\"${name}\"]`);\n if (existingInput) {\n existingInput.value = value;\n return;\n }\n\n let input = document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value;\n form.appendChild(input);\n }\n\n setCardBrand(name, code, prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const brandIcon = document.getElementById(`${prefixId}wvp-brand-icon`);\n const brandInput = document.getElementById(`${prefixId}wvp-card-brand`);\n\n if (brandIcon) {\n const currentImg = brandIcon.getAttribute('data-img');\n\n if (currentImg) {\n const newImgSrc = brandIcon.src.replace(currentImg, name);\n brandIcon.src = newImgSrc;\n brandIcon.setAttribute('data-img', name);\n }\n }\n\n if (brandInput) {\n brandInput.value = code;\n }\n\n const brandChangeEvent = new CustomEvent('vindi_card_brand_changed', {\n detail: { prefix, name, code }\n });\n document.dispatchEvent(brandChangeEvent);\n\n if (name !== 'mono/generic') {\n this.updateInstallmentsForBrand(prefix, code);\n }\n }\n\n updateInstallmentsForBrand(prefix, brandCode) {\n if (prefix === 'first') {\n try {\n this.getCardInstallments(null, null, this.parseMoneyValue(this.firstAmountInput.value));\n return;\n } catch (e) {\n console.warn('Erro ao chamar getCardInstallments:', e);\n }\n }\n\n if (prefix === 'second') {\n try {\n this.getSecondMethodInstallments(null, null, this.parseMoneyValue(this.secondAmountInput.value));\n return;\n } catch (e) {\n console.warn('Erro ao chamar getSecondMethodInstallments:', e);\n }\n }\n }\n\n\n updateCompatibleMethods(selectedMethod, targetField) {\n const targetSelect = targetField === 'first' ? this.firstMethodSelect : this.secondMethodSelect;\n if (!targetSelect) return;\n\n const currentSelection = targetSelect.value;\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url\n .toString()\n .replace(\"%%endpoint%%\", \"vindi_get_compatible_methods\"),\n type: 'POST',\n data: {\n selected_method: selectedMethod,\n target_field: targetField,\n security: this.settings.nonce\n },\n success: (response) => {\n if (response.success && response.data) {\n targetSelect.innerHTML = '';\n\n Object.keys(response.data).forEach(method => {\n const option = document.createElement('option');\n option.value = method;\n option.textContent = response.data[method];\n targetSelect.appendChild(option);\n });\n\n const optionExists = Array.from(targetSelect.options)\n .some(opt => opt.value === currentSelection);\n\n if (optionExists) {\n targetSelect.value = currentSelection;\n } else if (targetSelect.options.length > 0) {\n targetSelect.value = targetSelect.options[0].value;\n targetSelect.dispatchEvent(new Event('change'));\n }\n }\n },\n error: (xhr, status, error) => {\n console.error('Erro ao obter métodos compatíveis:', error);\n }\n });\n }\n\n setCardNumberMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-number`);\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000 0000 0000 0000\",\n });\n }\n\n this.detectCardBrand(field, prefix);\n\n field.addEventListener(\"input\", () => {\n this.detectCardBrand(field, prefix);\n });\n }\n }\n\n setCardOwnerMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-owner`);\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n const mask = IMask(field, {\n mask: /^[A-Za-z\\s]*$/,\n });\n\n field.addEventListener(\"input\", () => {\n field.value = field.value.toUpperCase();\n mask.updateValue();\n });\n }\n }\n\n setCardDateMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-date`);\n\n if (field && !field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"00/00\",\n });\n }\n }\n\n setCardCodeMask(prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const field = document.querySelector(`#${prefixId}wvp-card-code`);\n\n if (field) {\n if (!field.classList.contains(\"wvp-block-field\")) {\n IMask(field, {\n mask: \"0000\",\n });\n }\n\n field.addEventListener(\"input\", () => {\n this.setCodeBrand(field, prefix);\n });\n }\n }\n\n detectCardBrand(cardInput, prefix) {\n const cardNumber = cardInput.value.replace(/\\s/g, \"\");\n\n if (cardNumber.length < 6) {\n return;\n }\n\n const brands = this.getBrands();\n let foundBrand = null;\n\n brands.forEach(brand => {\n if (brand.regex.test(cardNumber) && !foundBrand) {\n foundBrand = brand;\n }\n });\n\n if (foundBrand) {\n this.setCardBrand(foundBrand.name, foundBrand.code, prefix);\n this.resetInstallmentsError(prefix === 'second');\n if (cardNumber.length >= 13) {\n if (prefix === 'first') {\n this.getCardInstallments();\n } else {\n this.getSecondMethodInstallments();\n }\n }\n return true;\n } else {\n this.setCardBrand(\"mono/generic\", 1, prefix);\n this.showInstallmentsError(prefix === 'second');\n return false;\n }\n }\n\n showInstallmentsError(isSecondMethod = false) {\n const errorList = isSecondMethod ?\n document.querySelector(\"#second_wvp-installments-error\") :\n document.querySelector(\"#first_wvp-installments-error\");\n\n if (errorList) {\n errorList.innerText = __(\n \"Não foi possível acessar os dados de parcelamento para esta bandeira de cartão.\",\n \"vindi-pagamentos\",\n );\n errorList.classList.add(\"active\");\n }\n }\n\n resetInstallmentsError(isSecondMethod = false) {\n const errorList = isSecondMethod ?\n document.querySelector(\"#second_wvp-installments-error\") :\n document.querySelector(\"#first_wvp-installments-error\");\n\n if (errorList) {\n errorList.innerText = \"\";\n errorList.classList.remove(\"active\");\n }\n }\n\n getBrands() {\n return [\n {\n code: 16,\n name: \"elo\",\n regex: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|506699|5067[0-6][0-9]|506777|506778|509[0-8][0-9]{2}|50999[0-8][0-9]|509999[0-9]|627780|636297|636368|636369|650003[1-3]|650003[5-9]|650004[0-9]|650005[0-1]|650405|650406|650407|650408|650409|650410[5-9]|650411[0-9]|650412[0-9]|650485|650486|650487|650488|650489|650490[0-9]|650491[0-8]|6505[0-8][0-9]|6507[0-6][0-9]|6507[7-8][0-9]|6509[0-8][0-9]{2}|650999[0-8][0-9]|6509999|65165[2-9]|65166[0-9]|655000|655[1-6][0-9]{2}|6557[0-9]{3}|6558[0-9]{3}|6559[0-8][0-9]{2}|655999|655(99[7-9]|9[8-9][0-9])|6504[0-5][0-9]{2}|65047[1-9]|6504[8-9][0-9]|650[5-6][0-9]{3}|6507[0-5][0-9]{2}|6507[8-9][0-9]{2}|650(8[0-4][0-9]{2}|850|86[0-9]{2}|870|88[0-9]{2})|65[1-5][0-9]{4}|65[6-9][0-9]{4}|6516[5-6][0-9]{2}|65167[0-9]|6517[0-8][0-9]{2}|65179[0-8][0-9]{2}|651799)/,\n },\n {\n code: 3,\n name: \"visa\",\n regex: /^4[0-9]{12}(?:[0-9]{3})?$/,\n },\n {\n code: 4,\n name: \"mastercard\",\n regex: /^5[1-5][0-9]{14}$|^2[2-7][0-9]{14}$/,\n },\n {\n code: 5,\n name: \"amex\",\n regex: /^3[47][0-9]{13}$/,\n },\n {\n code: 25,\n name: \"hipercard\",\n regex: /^(606282|3841\\d{2}|60(?!11)\\d{2})\\d{10}$/,\n },\n {\n code: 20,\n name: \"hiper\",\n regex: /^(637095|637599|637612|637609|637598)\\d*$/,\n },\n ];\n }\n\n setCodeBrand(code, prefix) {\n const prefixId = prefix === 'first' ? 'first_' : 'second_';\n const img = document.querySelector(`#${prefixId}wvp-cvv-icon`);\n const brand = code.length < 3 ? \"mono/cvv\" : \"cvv\";\n\n if (img) {\n const attr = img.getAttribute(\"data-img\");\n if (attr) {\n img.src = img.src.replace(attr, brand);\n img.setAttribute(\"data-img\", brand);\n }\n }\n }\n\n manageTokenSelect(prefix) {\n const tokenSelector = prefix === 'first' ?\n 'input[name=\"first_wc-vindi-pagamentos-credit-payment-token\"]' :\n 'input[name=\"second_wc-vindi-pagamentos-credit-payment-token\"]';\n\n jQuery(tokenSelector).on('change', (e) => {\n if (jQuery(e.target).is(':checked')) {\n if (e.target.value !== 'new') {\n if (prefix === 'first') {\n this.getCardInstallments(e.target.value);\n } else {\n this.getSecondMethodInstallments(e.target.value);\n }\n } else {\n const installmentsSelector = prefix === 'first' ?\n \"#first_wvp-card-installments\" :\n \"#second_wvp-card-installments\";\n\n const select = document.querySelector(installmentsSelector);\n if (select) {\n const selectedValue = select.value;\n select.innerHTML = \"\";\n\n if (prefix === 'first') {\n this.getCardInstallments(null, selectedValue);\n } else {\n this.getSecondMethodInstallments(null, selectedValue);\n }\n }\n }\n }\n });\n }\n\n getCardInstallments(token = null, savedSelection = null, price = null) {\n const installmentsSelector = \"#first_wvp-card-installments\";\n const brandSelector = \"#first_wvp-card-brand\";\n const nonceSelector = \"#first_wvp-card-nonce\";\n const errorSelector = \"#first_wvp-installments-error\";\n const fieldsSelector = \".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)\";\n\n if (!document.querySelector(installmentsSelector)) {\n return;\n }\n\n const brand = document.querySelector(brandSelector);\n const nonce = document.querySelector(nonceSelector);\n const total = document.querySelector(\"#wvp-cart-total\");\n\n if (!brand) {\n return;\n }\n\n this.resetInstallmentsError(false);\n\n jQuery('form.checkout').block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n\n this.setRequestLoader(false);\n\n const isMultiPaymentActive = jQuery('#multi_payment_toggle').is(':checked') ||\n jQuery('#vindi_multi_payment_active').val() === '1';\n\n const data = {\n _wpnonce: nonce.value,\n security: wc_checkout_params.update_order_review_nonce,\n };\n\n if (isMultiPaymentActive) {\n const firstAmount = jQuery('#first_payment_amount').val();\n if (firstAmount) {\n data.price = firstAmount.replace(',', '.');\n } else {\n data.price = total.value;\n }\n } else {\n data.price = total.value;\n }\n\n data.brand = brand.value;\n\n if (token) {\n data.token = token;\n }\n\n const currentToken = token;\n\n const xhr = jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments'),\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: (response) => {\n const select = document.querySelector(installmentsSelector);\n select.innerHTML = \"\";\n if (response.success) {\n const installments = response.data.installments;\n const errorList = document.querySelector(errorSelector);\n\n if (response.data.message && errorList) {\n errorList.textContent = response.data.message;\n errorList.classList.add(\"active\");\n }\n\n if (select) {\n if (!savedSelection && select.value) {\n savedSelection = select.value;\n }\n\n const existingOptions = {};\n\n select.innerHTML = \"\";\n\n for (const key in installments) {\n const option = document.createElement(\"option\");\n option.value = key;\n option.innerText = installments[key];\n\n if (!existingOptions[key]) {\n existingOptions[key] = true;\n select.appendChild(option);\n }\n }\n\n if (savedSelection && select.querySelector(`option[value=\"${savedSelection}\"]`)) {\n select.value = savedSelection;\n }\n }\n }\n },\n error: (xhr, status, error) => {\n if (status !== 'abort') {\n const errorList = document.querySelector(errorSelector);\n if (errorList && errorList.innerHTML === \"\") {\n const span = document.createElement(\"span\");\n span.innerText = error.message;\n errorList.appendChild(span);\n errorList.classList.add(\"active\");\n }\n }\n },\n complete: () => {\n jQuery(fieldsSelector).removeClass(\"processing\").unblock();\n jQuery('form.checkout').unblock();\n }\n });\n\n const tokenSelector = 'input[name=\"wc-vindi-pagamentos-credit-payment-token\"]';\n\n jQuery(tokenSelector).on('change', (e) => {\n if (jQuery(e.target).is(':checked') && e.target.value !== currentToken) {\n xhr.abort();\n }\n });\n }\n\n setRequestLoader(isSecondMethod = false) {\n const fieldsSelector = isSecondMethod ?\n \"#segundo-metodo-pagamento .wvp-credit-fields\" :\n \".wvp-credit-fields:not(#segundo-metodo-pagamento .wvp-credit-fields)\";\n\n jQuery(fieldsSelector).addClass(\"processing\").block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n }\n\n getSecondMethodInstallments(token = null, savedSelection = null, price = null) {\n const installmentsSelector = \"#second_wvp-card-installments\";\n const brandSelector = \"#second_wvp-card-brand\";\n const nonceSelector = \"#second_wvp-card-nonce\";\n const errorSelector = \"#second_wvp-installments-error\";\n const fieldsSelector = \"#segundo-metodo-pagamento .wvp-credit-fields\";\n\n if (!document.querySelector(installmentsSelector)) {\n return;\n }\n\n const brand = document.querySelector(brandSelector);\n const nonce = document.querySelector(nonceSelector);\n\n if (!brand) {\n return;\n }\n\n const errorList = document.querySelector(errorSelector);\n if (errorList) {\n errorList.innerText = \"\";\n errorList.classList.remove(\"active\");\n }\n\n jQuery('form.checkout').block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n\n jQuery(fieldsSelector).addClass(\"processing\").block({\n message: null,\n overlayCSS: {\n background: '#fff',\n opacity: 0.6\n }\n });\n\n let secondValue = 0;\n\n if (price) {\n secondValue = parseFloat(price.toString().replace(',', '.'));\n } else {\n const secondAmountField = document.querySelector('#second_payment_amount');\n if (secondAmountField && secondAmountField.value) {\n secondValue = parseFloat(secondAmountField.value.replace(',', '.'));\n } else {\n jQuery(fieldsSelector).removeClass(\"processing\").unblock();\n jQuery('form.checkout').unblock();\n return;\n }\n }\n\n const data = {\n _wpnonce: nonce.value,\n security: wc_checkout_params.update_order_review_nonce,\n price: secondValue.toString(),\n brand: brand.value,\n is_second_method: true\n };\n\n if (token) {\n data.token = token;\n }\n\n jQuery.ajax({\n url: wc_checkout_params.wc_ajax_url.toString().replace('%%endpoint%%', 'checkout_installments'),\n method: 'POST',\n contentType: 'application/json',\n data: JSON.stringify(data),\n success: (response) => {\n const select = document.querySelector(installmentsSelector);\n select.innerHTML = \"\";\n if (response.success) {\n const originalInstallments = response.data.installments;\n const correctedInstallments = {};\n\n const firstOption = Object.values(originalInstallments)[0] || '';\n const match = firstOption.match(/R\\$\\s?([0-9.,]+)/);\n\n if (match && match[1]) {\n const serverValue = parseFloat(match[1].replace('.', '').replace(',', '.'));\n\n if (Math.abs(serverValue - secondValue) > 0.01) {\n const ratio = secondValue / serverValue;\n\n Object.keys(originalInstallments).forEach(key => {\n const text = originalInstallments[key];\n const valueParts = text.split('R$');\n\n if (valueParts.length >= 2) {\n const valueStr = valueParts[1].trim().split(/\\s|-|\\(|>/)[0];\n const value = parseFloat(valueStr.replace('.', '').replace(',', '.'));\n\n const correctedValue = (value * ratio).toFixed(2).replace('.', ',');\n\n correctedInstallments[key] = text.replace(valueStr, correctedValue);\n\n if (text.includes('(R$')) {\n const totalMatch = text.match(/\\(R\\$\\s?([0-9.,]+)/);\n if (totalMatch && totalMatch[1]) {\n const totalValue = parseFloat(totalMatch[1].replace('.', '').replace(',', '.'));\n const correctedTotal = (totalValue * ratio).toFixed(2).replace('.', ',');\n correctedInstallments[key] = correctedInstallments[key].replace(totalMatch[1], correctedTotal);\n }\n }\n } else {\n correctedInstallments[key] = text;\n }\n });\n } else {\n Object.assign(correctedInstallments, originalInstallments);\n }\n } else {\n Object.assign(correctedInstallments, originalInstallments);\n }\n\n if (select) {\n if (!savedSelection && select.value) {\n savedSelection = select.value;\n }\n\n Object.keys(correctedInstallments).forEach(key => {\n const option = document.createElement(\"option\");\n option.value = key;\n option.innerText = correctedInstallments[key];\n select.appendChild(option);\n });\n\n if (savedSelection && select.querySelector(`option[value=\"${savedSelection}\"]`)) {\n select.value = savedSelection;\n }\n }\n }\n },\n error: (xhr, status, error) => {\n if (errorList) {\n errorList.innerText = \"Erro ao calcular parcelas: \" + error;\n errorList.classList.add(\"active\");\n }\n },\n complete: () => {\n jQuery(fieldsSelector).removeClass(\"processing\").unblock();\n jQuery('form.checkout').unblock();\n }\n });\n }\n\n initPaymentMethodListener(prefix) {\n const inputName = `${prefix}_wc-vindi-pagamentos-credit-payment-token`;\n const paymentOptions = document.querySelectorAll(`input[name=\"${inputName}\"]`);\n const ownerFields = document.querySelector(`.${prefix}_wvp-credit-fields-hide`);\n const ownerCardDate = document.querySelector(`.${prefix}_wvp-card-date-hide`);\n\n paymentOptions.forEach((option) => {\n option.addEventListener('change', () => {\n const selectedOption = this.getSelectedPaymentMethod(prefix);\n if (selectedOption && selectedOption !== \"new\") {\n if (ownerFields) ownerFields.style.display = 'none';\n if (ownerCardDate) ownerCardDate.style.display = \"none\";\n } else {\n if (ownerFields) ownerFields.style.display = 'block';\n if (ownerCardDate) ownerCardDate.style.display = \"block\";\n }\n });\n });\n }\n\n getSelectedPaymentMethod(prefix) {\n const inputName = `${prefix}_wc-vindi-pagamentos-credit-payment-token`;\n const selectedInput = document.querySelector(`input[name=\"${inputName}\"]:checked`);\n return selectedInput ? selectedInput.value : null;\n }\n}","import Credit from \"./checkout/credit\";\nimport Gateways from \"./checkout/gateways\";\nimport Trasnfer from \"./checkout/transfer\";\nimport PaymentLink from \"./order/payment-link\";\nimport Thankyou from \"./order/thankyou\";\nimport VindiOneClickBuy from \"./order/one-click-buy\";\nimport VindiMultipayment from \"./checkout/vindi-multipayment\";\n\n\nwindow.vindiMultiPaymentSettings = window.vindiMultiPaymentSettings || {\n ajaxUrl: typeof ajaxurl !== 'undefined' ? ajaxurl : '/wp-admin/admin-ajax.php',\n totalAmount: '0.00',\n currency: 'BRL',\n currencySymbol: 'R$'\n};\n\n(function ($) {\n $(document).on(\"ready updated_checkout\", () => {\n new Thankyou();\n new Credit();\n new Trasnfer();\n new Gateways();\n new PaymentLink();\n new VindiOneClickBuy();\n new VindiMultipayment();\n });\n\n $(document).on(\"add_checkout_block_fields\", () => {\n new Trasnfer();\n new Gateways();\n });\n\n})(jQuery);\n"],"names":["$297913352d90e18e$export$844ec244b1367d54","str","String","$297913352d90e18e$export$a6cdc56e425d0d0a","obj","_obj$constructor","constructor","name","$297913352d90e18e$export$357523c63a2253b9","keys","Array","isArray","_","k","includes","Object","entries","reduce","acc","_ref","v","$297913352d90e18e$export$9106728c49045482","NONE","LEFT","FORCE_LEFT","RIGHT","FORCE_RIGHT","$297913352d90e18e$export$32af4dafed14c8ce","direction","$297913352d90e18e$export$7c57da42ce8e346f","replace","$297913352d90e18e$export$7aeb68f71172641d","b","a","arrA","arrB","i","length","dateA","Date","dateB","getTime","regexpA","RegExp","regexpB","toString","prototype","hasOwnProperty","call","$009600582982b1de$export$2e2bcd8739ae039","opts","assign","this","value","slice","startChangePos","oldValue","oldSelection","start","Math","min","cursorPos","insertedCount","inserted","substr","removedCount","max","end","removed","head","substring","tail","removeDirection","$6935d2fd91e23121$export$2e2bcd8739ae039","el","InputMask","$04eba1c21f72882d$export$81ad4b1539a22420","mask","Error","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","Masked","Function","MaskedFunction","console","warn","$04eba1c21f72882d$export$a213ae1c699d7230","instanceOpts","_mask","startsWith","$04eba1c21f72882d$export$2e2bcd8739ae039","nOpts","MaskedClass","createMask","$58914a612445e359$export$2e2bcd8739ae039","selectionStart","_unsafeSelectionStart","selectionEnd","_unsafeSelectionEnd","select","_unsafeSelect","isActive","MaskElement","$0b64e8eaf462b1c4$export$2e2bcd8739ae039","input","super","_handlers","rootElement","_this$input$getRootNo","_this$input$getRootNo2","_this$input","getRootNode","document","activeElement","bindEvents","handlers","forEach","event","_toggleEventHandler","EVENTS_MAP","unbindEvents","handler","removeEventListener","addEventListener","selectionChange","drop","click","focus","commit","HTMLMaskElement","$f7b3ffebaa825b51$export$2e2bcd8739ae039","setSelectionRange","$1f98d66e42010ceb$export$2e2bcd8739ae039","root","selection","getSelection","anchorOffset","focusOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","HTMLContenteditableMaskElement","isContentEditable","tagName","masked","_listeners","_value","_unmaskedValue","_saveSelection","bind","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","updateValue","maskEquals","_this$masked","updateOptions","unmaskedValue","updateControl","typedValue","val","typedValueEquals","displayValue","_unbindEvents","_fireEvent","ev","e","listeners","l","_cursorChanging","_changingCursorPos","pos","_selection","newUnmaskedValue","newValue","newDisplayValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","updateCursor","_delayUpdateCursor","_abortUpdateCursor","setTimeout","_inputEvent","isComplete","clearTimeout","nearestInputPos","on","push","off","hIndex","indexOf","splice","details","oldRawValue","rawInputValue","offset","raw","doCommit","preventDefault","stopPropagation","destroy","$42c38c98c80ffb03$export$2e2bcd8739ae039","normalize","prep","rawInserted","skip","tailShift","aggregate","ChangeDetails","$6f0dc42dfe2c31a9$export$2e2bcd8739ae039","from","stop","extend","appendTo","append","_appendPlaceholder","state","unshift","beforePos","shiftChar","shift","$422a8c2668dc4e1a$export$2e2bcd8739ae039","_update","DEFAULTS","_initialized","withValueRefresh","_rawInputValue","reset","resolve","flags","parse","format","extractInput","isFilled","totalInputPositions","fromPos","toPos","extractTail","appendTail","_appendCharRaw","ch","_appendChar","checkTail","consistentState","doPrepareChar","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","_appendEager","_beforeTailState","doPrepare","ci","d","doSkipInvalid","eager","remove","fn","_refreshing","rawInput","ret","runIsolated","_isolated","Boolean","skipInvalid","prepare","prepareChar","validate","parent","deleteCount","tailPos","eagerRemove","valLength","tval","EMPTY_VALUES","undefined","$23b1364d377b0d09$export$2e2bcd8739ae039","chunks","map","join","tailChunk","lastChunk","extendLast","firstTailChunk","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","index","_stops","phDetails","_blocks","remainChars","c","props","cstate","chunkShiftPos","$baa6ec98fc1ffec4$export$2e2bcd8739ae039","_log","ok","block","_blockStartPos","s","pushState","popState","pop","bindBlock","_pushLeft","_this$block","_pushRight","pushLeftBeforeFilled","isFixed","pushLeftBeforeInput","pushLeftBeforeRequired","isOptional","pushRightBeforeFilled","pushRightBeforeInput","pushRightBeforeRequired","$f79d78c596426ad8$export$2e2bcd8739ae039","isUnmasking","_isRawInput","maxPos","appendEager","isResolved","char","$e27282e98e221795$export$2e2bcd8739ae039","placeholderChar","displayChar","lazy","maskOpts","currentMaskFlags","boundPos","_flags$_beforeTailSta","DEFAULT_DEFINITIONS","search","$382bf60a70530ec6$export$2e2bcd8739ae039","definitions","_rebuildMask","defs","exposeBlock","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","p","bNames","filter","bName","sort","expose","blockOpts","maskedBlock","isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","every","_this$_mapPosToBlock","startBlockIndex","blockIter","blockDetails","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","stopBefore","si","toBlockIndex","startBlockIter","endBlockIndex","_blocks2","bDetails","accVal","blockStartPos","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","cursor","total","maskedBlocks","indices","gi","InputDefinition","FixedDefinition","$4a0e3cc97ad5300d$export$2e2bcd8739ae039","_matchFrom","maxLength","to","autofix","patternOpts","fromStr","padStart","toStr","sameCharsCount","repeat","boundaries","minstr","maxstr","placeholder","num","match","padEnd","nextVal","MaskedRange","$dadb0bbe513c82ac$export$2e2bcd8739ae039","patternBlocks","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","getDate","bk","date","isDateExist","day","month","year","split","$d72501c5bcba0e7e$export$2e2bcd8739ae039","currentMask","exposeMask","compiledMasks","_overwrite","_eager","_skipInvalid","_applyDispatch","prevValueBeforeTail","inputValue","insertValue","tailValue","prevMask","prevMaskState","doDispatch","_flags$_beforeTailSta2","currentMaskRef","dispatch","currentDetails","_this$currentMask","_this$currentMask2","_this$currentMask3","_this$currentMask4","mi","oldMask","_this$currentMask5","inputs","isCurrent","startInputPos","weight","i1","i2","MaskedEnum","enum","_enum","eopts","lengths","requiredLength","optionalLength","some","$53a522de03a4a256$export$2e2bcd8739ae039","_updateRegExps","allowNegative","scale","radix","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","_insertThousandsSeparators","parts","prepCh","allowPositive","_separatorsCount","extendOnSeparators","count","_separatorsCountFromSlice","_adjustRangeWithSeparators","prevBeforeTailValue","prevBeforeTailSeparatorsCount","appendDetails","beforeTailValue","beforeTailSeparatorsCount","_findSeparatorAround","searchFrom","separatorPos","separatorAroundFromPos","separatorAroundToPos","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","valid","number","isNaN","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","test","dropFractional","UNMASKED_RADIX","n","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","toLocaleString","useGrouping","maximumFractionDigits","$e2045d7156ea1579$export$90dab59c3d4b6e03","MASKED","UNMASKED","TYPED","$e2045d7156ea1579$export$a504d53a5b99e1b9","arg","PIPE_TYPE","createPipe","pipe","globalThis","IMask","$c665d93b2532c65d$export$63151d8bb18a49f9","$c665d93b2532c65d$export$790fb69b1a2884f9","re","not_string","not_bool","not_type","not_primitive","numeric_arg","json","not_json","text","modulo","key","key_access","index_access","sprintf","parse_tree","argv","ph","pad","pad_character","pad_length","is_positive","tree_length","output","param_no","type","TypeError","parseInt","fromCharCode","JSON","stringify","width","precision","parseFloat","toExponential","toFixed","toPrecision","toLowerCase","valueOf","toUpperCase","pad_char","charAt","align","sprintf_format","fmt","sprintf_cache","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","sprintf_parse","arguments","vsprintf","apply","concat","create","window","define","options","size","memoized","args","node","len","searchCache","next","prev","maxSize","clear","memoize","error","$0f4d45ff44486fdb$var$PRECEDENCE","$0f4d45ff44486fdb$var$OPENERS","$0f4d45ff44486fdb$var$TERMINATORS","$0f4d45ff44486fdb$var$PATTERN","$0f4d45ff44486fdb$export$2e2bcd8739ae039","expression","operator","term","element","terms","stack","trim","reverse","$94eef1b2d5e65686$var$OPERATORS","$94eef1b2d5e65686$export$2e2bcd8739ae039","postfix","variables","j","getOperatorResult","earlyReturn","$00d0953cc7be59d8$export$2e2bcd8739ae039","$05530cac947ad0da$var$DEFAULT_OPTIONS","contextDelimiter","onMissingKey","$05530cac947ad0da$export$2e2bcd8739ae039","data","pluralForms","getPluralForm","domain","config","plural","pf","evaluate","plural_forms","part","$05530cac947ad0da$var$getPluralExpression","dcnpgettext","context","singular","entry","DEFAULT_LOCALE_DATA","I18N_HOOK_REGEXP","$5a069099b4672102$export$2e2bcd8739ae039","namespace","$a478171861c8c86e$export$2e2bcd8739ae039","hookName","$fd035fa4006b395f$export$2e2bcd8739ae039","hooks","storeKey","callback","priority","hooksStore","validateHookName","validateNamespace","__current","hookInfo","currentIndex","runs","doAction","$991de1ff8f7500c1$export$2e2bcd8739ae039","removeAll","handlersRemoved","$797ba1df0a5d77ab$export$2e2bcd8739ae039","hook","$2d8581afdd65ecf6$export$2e2bcd8739ae039","returnFirstArg","result","$9c6275b0851c63c2$export$2e2bcd8739ae039","_hooksStore$__current","$c7417ed2fa92e6d4$export$2e2bcd8739ae039","$88ef48e984585ad1$export$2e2bcd8739ae039","_Hooks","actions","filters","addAction","createAddHook","addFilter","removeAction","createRemoveHook","removeFilter","hasAction","createHasHook","hasFilter","removeAllActions","removeAllFilters","createRunHook","applyFilters","currentAction","createCurrentHook","currentFilter","doingAction","createDoingHook","doingFilter","didAction","createDidHook","didFilter","defaultHooks","i18n","createI18n","initialData","initialDomain","tannin","Tannin","Set","notifyListeners","listener","doSetLocaleData","setLocaleData","single","getFilterDomain","_x","translation","onHookAddedOrRemoved","getLocaleData","addLocaleData","resetLocaleData","add","delete","__","_n","_nx","isRTL","hasTranslation","subscribe","$195372cf1c3f224d$export$2e2bcd8739ae039","setCardNumberMask","setCardOwnerMask","setCardCodeMask","setCardDateMask","manageTokenSelect","field","querySelector","classList","contains","handleCardBrand","setCodeBrand","card","brands","getBrands","found","resetInstallmentsError","brand","regex","setCardBrand","code","getCardInstallments","showInstallmentsError","errorList","innerText","$0f347b570078cb3c$export$c6452175cea4361a","img","hidden","attr","getAttribute","src","setAttribute","jQuery","target","is","innerHTML","token","nonce","setRequestLoader","price","_wpnonce","security","wc_checkout_params","update_order_review_nonce","currentToken","xhr","ajax","url","wc_ajax_url","method","contentType","success","installments","message","option","createElement","appendChild","status","span","complete","removeClass","unblock","abort","addClass","overlayCSS","background","opacity","$47c6bc6166a7a9a8$export$2e2bcd8739ae039","setDocumentMask","handlerPersonType","setDocumentNameAttribute","hideGateway","setFingerPrintEnviroment","hideBlockDocumentField","selectedGateway","person","handlerDocumentField","enviroment","elements","querySelectorAll","yapay","fingerprint","FingerPrint","env","getFingerPrint","change","show","unsetDocumentNameAttribute","removeAttribute","gateway","hideBlockGateways","parentElement","Event","body","dispatchEvent","$cbefbef2c2fe563c$export$2e2bcd8739ae039","handleBankBrands","bank","clearSelectedBrands","$4c0f33845e558c19$export$2e2bcd8739ae039","isOrderPayPage","handlePersonType","handleDocumentMask","validateFormFields","fillFormFields","personType","selectPersonType","cpf","cnpj","company","style","display","URLSearchParams","location","href","has","phone","form","setRequiredAttribute","saveFormData","reportValidity","handleWoocommerceLoader","submit","active","loader","getFormFields","requiredOnly","requiredFields","fields","formData","localStorage","setItem","getItem","formDataObject","$f2a4ac33baae8bcc$export$2e2bcd8739ae039","handleCopyButton","button","navigator","clipboard","writeText","execCommand","$232a8c8a08c6cc34$export$2e2bcd8739ae039","modalSelector","initUI","showTotalLoader","css","hideTotalLoader","hide","showCouponMessage","messageEl","displayModal","hideModal","removeRequestLoader","updateProductInfo","title","html","$fb1cfbf3b5af5be9$export$2e2bcd8739ae039","uiManager","initializeCreditCardHandling","$this","currentTarget","slideUp","closest","find","slideDown","onPaymentMethodChange","initializeCvvHandling","cardField","cardNumber","errorElement","validateAndGetPaymentData","paymentMethod","isValid","paymentMethodValue","tokenId","cardData","cvv","token_id","last4","expiry","cardOwner","cardDate","cardCode","cardBrand","owner","payment_method","card_data","$76be25293da653ff$export$2e2bcd8739ae039","initializePersonTypeHandling","prop","initializeCpfMask","isPF","toggle","initializeCnpjMask","cpfInput","cnpjInput","validateAndGetBillingData","billingData","persontype","visibleFieldsContainer","each","fieldName","formRow","log","$34dc56aa98751fe2$export$2e2bcd8739ae039","currentXhr","initializeInstallmentsHandling","getInstallments","finalPrice","totalElement","totalText","vindiOneClick","ajaxUrl","ajax_url","response","targetSelector","selects","showInstallmentsMessage","empty","$41ba05986f823e29$export$2e2bcd8739ae039","mainController","appliedCoupons","initializeCouponHandling","after","applyCoupon","which","couponCode","applyButton","productInfo","getProductInfo","action","product_id","productId","quantity","coupon_code","existing_coupons","messages","coupon_applied","coupon_codes","new_coupon","updateAppliedCouponsDisplay","applied_coupons","onCouponApplied","removeCoupon","subtotalText","onCouponRemoved","coupons","container","heading","couponList","coupon","listItem","removeBtn","description","getAppliedCoupons","$aeb540346e41fa94$export$2e2bcd8739ae039","initializeDiscountHandling","updateOrderTotal","initializeQuantityHandling","updateAll","updateInstallmentsForSelectedPayment","quantityInput","currentValue","updateOrderTotals","subtotal","total_raw","coupon_exceeds_total","payment_discount","payment_discount_formated","coupon_discount","coupon_discount_formated","has_discount","discount","newTotal","oldTotal","update_installments","$9582f32e55dafb58$export$2e2bcd8739ae039","modal","buyButton","closeBtn","processButton","formHandler","paymentHandler","installmentsManager","couponManager","orderTotalCalculator","init","handleBuyButtonClick","handleCloseModal","handleProcessPurchase","productTitle","productPrice","loadingSpinner","billingValidation","alert","paymentValidation","billing_data","redirect","selectedPaymentMethod","$cf01999a38f77380$export$2e2bcd8739ae039","settings","ajaxurl","nonceField","initElements","firstMethodSelect","secondMethodSelect","setupEventListeners","initializePaymentFields","prepareFormSubmission","initPaymentMethodListener","getElementById","firstAmountInput","secondAmountInput","cartTotalInput","errorDiv","firstMethodValue","updateSecondMethodOptions","updatePaymentMethodFields","secondMethodValue","updateFirstMethodOptions","updateSecondAmount","firstMethod","secondMethod","setupCreditCardFunctionality","id","handleCardBrandDetection","error1","selected_method","target_field","selectedIndex","methodType","prefix","containerPrefix","selectedContainer","loadPaymentMethodFields","cardNumberInput","detectCardBrand","cardNumberInput1","amountInput","amount","parseMoneyValue","fieldId","existingDiv","fieldDiv","className","initCreditCardMasks","firstValue","cartTotal","secondValue","formatMoneyDisplay","secondOriginalInput","firstAmountForInstallments","secondAmountForInstallments","getSecondMethodInstallments","e1","prefixStr","formattedValue","cardDateInput","cardCodeInput","checkoutForm","methodMap","credit_card","pix","bolepix","firstMethodShort","secondMethodShort","firstCardNumber","secondCardNumber","firstCardClean","removeExistingInputs","firstAmount","secondAmount","addHiddenInput","firstPaymentMethodId","getPaymentMethodId","collectFirstCreditCardData","collectSecondCreditCardData","brandInput","dateParts","existingInput","prefixId","brandIcon","currentImg","newImgSrc","brandChangeEvent","CustomEvent","detail","updateInstallmentsForBrand","brandCode","updateCompatibleMethods","selectedMethod","targetField","targetSelect","currentSelection","opt","cardInput","foundBrand","isSecondMethod","installmentsSelector","selectedValue","savedSelection","errorSelector","isMultiPaymentActive","existingOptions","fieldsSelector","secondAmountField","is_second_method","originalInstallments","correctedInstallments","values","serverValue","abs","ratio","valueParts","valueStr","correctedValue","totalMatch","correctedTotal","inputName","paymentOptions","ownerFields","ownerCardDate","selectedOption","getSelectedPaymentMethod","selectedInput","$","vindiMultiPaymentSettings","totalAmount","currency","currencySymbol"],"version":3,"file":"index.js.map"} -
vindi-pagamentos/trunk/package.json
r3387147 r3387744 1 1 { 2 2 "name": "vindi-pagamentos", 3 "version": "1. 0.9",3 "version": "1.1.0", 4 4 "description": "WooCommerce payment plugin using Vindi gateways", 5 5 "repository": "https://github.com/vindi/vindi-pagamentos", -
vindi-pagamentos/trunk/readme.txt
r3387147 r3387744 4 4 Requires at least: 6.0 5 5 Tested up to: 6.8 6 Stable tag: 1. 0.96 Stable tag: 1.1.0 7 7 Requires PHP: 7.4 8 8 License: GPLv3 … … 56 56 57 57 == Changelog == 58 =1.1.0 = 31-10-2025 59 * Correção: Implementado cache para o limite máximo de parcelas, reduzindo chamadas desnecessárias à API. 60 * Correção: Ajustado o JavaScript responsável pela funcionalidade de compra com um clique. 61 * Adição: Adicionada a opção para ativar ou desativar o recurso de compra rápida diretamente nas configurações. 62 58 63 =1.0.9 = 30-10-2025 59 64 * Melhoria: Limite máximo de parcelas agora é dinâmico. -
vindi-pagamentos/trunk/vendor/autoload.php
r3387147 r3387744 23 23 require_once __DIR__ . '/composer/autoload_real.php'; 24 24 25 return ComposerAutoloaderInit 88846023fe988773aa9c80f244ce8f86::getLoader();25 return ComposerAutoloaderInite99ed6bcf813f1966c838cefc14911f6::getLoader(); -
vindi-pagamentos/trunk/vendor/composer/autoload_real.php
r3387147 r3387744 3 3 // autoload_real.php @generated by Composer 4 4 5 class ComposerAutoloaderInit 88846023fe988773aa9c80f244ce8f865 class ComposerAutoloaderInite99ed6bcf813f1966c838cefc14911f6 6 6 { 7 7 private static $loader; … … 23 23 } 24 24 25 spl_autoload_register(array('ComposerAutoloaderInit 88846023fe988773aa9c80f244ce8f86', 'loadClassLoader'), true, true);25 spl_autoload_register(array('ComposerAutoloaderInite99ed6bcf813f1966c838cefc14911f6', 'loadClassLoader'), true, true); 26 26 self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); 27 spl_autoload_unregister(array('ComposerAutoloaderInit 88846023fe988773aa9c80f244ce8f86', 'loadClassLoader'));27 spl_autoload_unregister(array('ComposerAutoloaderInite99ed6bcf813f1966c838cefc14911f6', 'loadClassLoader')); 28 28 29 29 require __DIR__ . '/autoload_static.php'; 30 call_user_func(\Composer\Autoload\ComposerStaticInit 88846023fe988773aa9c80f244ce8f86::getInitializer($loader));30 call_user_func(\Composer\Autoload\ComposerStaticInite99ed6bcf813f1966c838cefc14911f6::getInitializer($loader)); 31 31 32 32 $loader->register(true); 33 33 34 $filesToLoad = \Composer\Autoload\ComposerStaticInit 88846023fe988773aa9c80f244ce8f86::$files;34 $filesToLoad = \Composer\Autoload\ComposerStaticInite99ed6bcf813f1966c838cefc14911f6::$files; 35 35 $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { 36 36 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { -
vindi-pagamentos/trunk/vendor/composer/autoload_static.php
r3387147 r3387744 5 5 namespace Composer\Autoload; 6 6 7 class ComposerStaticInit 88846023fe988773aa9c80f244ce8f867 class ComposerStaticInite99ed6bcf813f1966c838cefc14911f6 8 8 { 9 9 public static $files = array ( … … 32 32 { 33 33 return \Closure::bind(function () use ($loader) { 34 $loader->prefixLengthsPsr4 = ComposerStaticInit 88846023fe988773aa9c80f244ce8f86::$prefixLengthsPsr4;35 $loader->prefixDirsPsr4 = ComposerStaticInit 88846023fe988773aa9c80f244ce8f86::$prefixDirsPsr4;36 $loader->classMap = ComposerStaticInit 88846023fe988773aa9c80f244ce8f86::$classMap;34 $loader->prefixLengthsPsr4 = ComposerStaticInite99ed6bcf813f1966c838cefc14911f6::$prefixLengthsPsr4; 35 $loader->prefixDirsPsr4 = ComposerStaticInite99ed6bcf813f1966c838cefc14911f6::$prefixDirsPsr4; 36 $loader->classMap = ComposerStaticInite99ed6bcf813f1966c838cefc14911f6::$classMap; 37 37 38 38 }, null, ClassLoader::class); -
vindi-pagamentos/trunk/vendor/composer/installed.php
r3387147 r3387744 2 2 'root' => array( 3 3 'name' => 'vindi/vindi-pagamentos', 4 'pretty_version' => '1. 0.9',5 'version' => '1. 0.9.0',4 'pretty_version' => '1.1.0', 5 'version' => '1.1.0.0', 6 6 'reference' => NULL, 7 7 'type' => 'wordpress-plugin', … … 12 12 'versions' => array( 13 13 'vindi/vindi-pagamentos' => array( 14 'pretty_version' => '1. 0.9',15 'version' => '1. 0.9.0',14 'pretty_version' => '1.1.0', 15 'version' => '1.1.0.0', 16 16 'reference' => NULL, 17 17 'type' => 'wordpress-plugin', -
vindi-pagamentos/trunk/vindi-pagamentos.php
r3387147 r3387744 7 7 * Author: Apiki WordPress 8 8 * Author URI: https://github.com/vindi/ 9 * Version: 1. 0.99 * Version: 1.1.0 10 10 * Requires PHP: 7.4 11 11 * Requires at least: 6.0 … … 15 15 * 16 16 * @link https://vindi.com.br/ 17 * @since 1. 0.917 * @since 1.1.0 18 18 * @package VindiPagamentos 19 19 */
Note: See TracChangeset
for help on using the changeset viewer.