From 530097ff1559dbe82aadf70540381b0ff0876ad7 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:32:36 +0200 Subject: [PATCH 01/24] Replace custom amount type with money amount type --- demo/config/config.exs | 7 +++ demo/lib/demo/invoice.ex | 4 +- demo/lib/demo/product.ex | 4 +- lib/backpex/ecto/amount_type.ex | 61 ------------------------- test/ecto/amount_type_test.exs | 80 --------------------------------- 5 files changed, 9 insertions(+), 147 deletions(-) delete mode 100644 lib/backpex/ecto/amount_type.ex delete mode 100644 test/ecto/amount_type_test.exs diff --git a/demo/config/config.exs b/demo/config/config.exs index ec5c33f6b..2d56988d3 100644 --- a/demo/config/config.exs +++ b/demo/config/config.exs @@ -25,6 +25,13 @@ config :spark, "Ash.Domain": [section_order: [:resources, :policies, :authorization, :domain, :execution]] ] +config :money, + default_currency: :EUR, + separator: ".", + delimiter: ",", + symbol_on_right: true, + symbol_space: true + config :demo, namespace: Demo, ecto_repos: [Demo.Repo], diff --git a/demo/lib/demo/invoice.ex b/demo/lib/demo/invoice.ex index 663ad0584..952eab4a1 100644 --- a/demo/lib/demo/invoice.ex +++ b/demo/lib/demo/invoice.ex @@ -8,9 +8,7 @@ defmodule Demo.Invoice do schema "invoices" do field :company, :string - field :amount, Backpex.Ecto.Amount.Type, - currency: :EUR, - opts: [separator: ".", delimiter: ",", symbol_on_right: true, symbol_space: true] + field :amount, Money.Ecto.Amount.Type timestamps() end diff --git a/demo/lib/demo/product.ex b/demo/lib/demo/product.ex index 325c577d9..7baa1bfad 100644 --- a/demo/lib/demo/product.ex +++ b/demo/lib/demo/product.ex @@ -15,9 +15,7 @@ defmodule Demo.Product do field :manufacturer, :string field :images, {:array, :string} - field :price, Backpex.Ecto.Amount.Type, - currency: :EUR, - opts: [separator: ".", delimiter: ",", symbol_on_right: true, symbol_space: true] + field :price, Money.Ecto.Amount.Type has_many :suppliers, Supplier, on_replace: :delete, on_delete: :delete_all has_many :short_links, ShortLink, on_replace: :delete, on_delete: :delete_all, foreign_key: :product_id diff --git a/lib/backpex/ecto/amount_type.ex b/lib/backpex/ecto/amount_type.ex deleted file mode 100644 index f901c205a..000000000 --- a/lib/backpex/ecto/amount_type.ex +++ /dev/null @@ -1,61 +0,0 @@ -defmodule Backpex.Ecto.Amount.Type do - @moduledoc """ - Provides a type for Ecto to store a amount. - The underlying data type should be an integer. - ## Migration - - create table(:my_table) do - add :amount, :integer - end - - ## Schema - - schema "my_table" do - field :amount, Backpex.Ecto.Amount.Type - end - - schema "my_table" do - field :amount, Backpex.Ecto.Amount.Type, currency: :EUR, separator: ".", delimiter: "," - end - """ - - use Ecto.ParameterizedType - - def type(_params), do: :integer - - def init(opts), do: opts - - def cast(str, opts) when is_binary(str) do - currency = Keyword.get(opts, :currency, :USD) - - Money.parse(str, currency, opts) - end - - def cast(int, opts) when is_integer(int) do - currency = Keyword.get(opts, :currency, :USD) - - {:ok, Money.new(int, currency)} - end - - def cast(nil, opts) do - currency = Keyword.get(opts, :currency, :USD) - - {:ok, Money.new(0, currency)} - end - - def cast(%Money{} = money, _opts), do: {:ok, money} - - def cast(_val, _opts), do: :error - - def load(int, _loader, opts) when is_integer(int) do - currency = Keyword.get(opts, :currency, :USD) - - {:ok, Money.new(int, currency)} - end - - def load(_val, _loader, _opts), do: :error - - def dump(int, _dumper, _opts) when is_integer(int), do: {:ok, int} - def dump(%Money{} = m, _dumper, _opts), do: {:ok, m.amount} - def dump(_val, _dumper, _opts), do: {:ok, nil} -end diff --git a/test/ecto/amount_type_test.exs b/test/ecto/amount_type_test.exs deleted file mode 100644 index fcdde7c10..000000000 --- a/test/ecto/amount_type_test.exs +++ /dev/null @@ -1,80 +0,0 @@ -defmodule Backpex.Ecto.AmountTypeTest do - use ExUnit.Case, async: true - alias Backpex.Ecto.Amount.Type - - describe "Ecto Amount Type Test" do - test "type" do - assert Type.type([]) == :integer - end - - test "init" do - opts = [currency: :EUR, opts: [separator: ".", delimiter: ","]] - assert Type.init(opts) == opts - end - - test "cast int" do - assert Type.cast(10_000, []) == {:ok, %Money{amount: 10_000, currency: :USD}} - end - - test "cast int with opts" do - opts = [currency: :EUR, opts: [separator: ".", delimiter: ","]] - assert Type.cast(10_000, opts) == {:ok, %Money{amount: 10_000, currency: :EUR}} - end - - test "cast binary" do - assert Type.cast("1000000", []) == {:ok, %Money{amount: 100_000_000, currency: :USD}} - end - - test "cast binary with opts" do - opts = [currency: :EUR, opts: [separator: ".", delimiter: ","]] - assert Type.cast("1000000", opts) == {:ok, %Money{amount: 100_000_000, currency: :EUR}} - end - - test "cast nil" do - assert Type.cast(nil, currency: :EUR, opts: [separator: ".", delimiter: ","]) == - {:ok, %Money{amount: 0, currency: :EUR}} - - assert Type.cast(nil, []) == {:ok, %Money{amount: 0, currency: :USD}} - end - - test "cast dirty" do - assert Type.cast("dirty", []) == :error - assert Type.cast("$", []) == :error - assert Type.cast("ABC1000DEF", []) == {:ok, %Money{amount: 100_000, currency: :USD}} - assert Type.cast("10,20.30,40.50", []) == {:ok, %Money{amount: 102_030, currency: :USD}} - end - - test "load int" do - assert Type.load(100_000_000, nil, []) == {:ok, %Money{amount: 100_000_000, currency: :USD}} - end - - test "load int with opts" do - opts = [currency: :EUR, opts: [separator: ".", delimiter: ","]] - assert Type.load(100_000_000, nil, opts) == {:ok, %Money{amount: 100_000_000, currency: :EUR}} - end - - test "load binary" do - assert Type.load("100000000", nil, []) == :error - end - - test "load nil" do - assert Type.load(nil, nil, []) == :error - end - - test "dump money" do - assert Type.dump(%Money{amount: 1000}, nil, []) == {:ok, 1000} - end - - test "dump int" do - assert Type.dump(1000, nil, []) == {:ok, 1000} - end - - test "dump binary" do - assert Type.dump("1000", nil, []) == {:ok, nil} - end - - test "dump nil" do - assert Type.dump(nil, nil, []) == {:ok, nil} - end - end -end From ffa9a6aaa47518a4e84fd584f7d66c161c196728 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:33:38 +0200 Subject: [PATCH 02/24] Add masked input --- assets/js/hooks/_masked_input.js | 30 ++++++++++++ assets/js/hooks/index.js | 1 + lib/backpex/html/form.ex | 84 ++++++++++++++++++++++++++++++++ package.json | 3 ++ yarn.lock | 19 ++++++++ 5 files changed, 137 insertions(+) create mode 100644 assets/js/hooks/_masked_input.js diff --git a/assets/js/hooks/_masked_input.js b/assets/js/hooks/_masked_input.js new file mode 100644 index 000000000..f26146b19 --- /dev/null +++ b/assets/js/hooks/_masked_input.js @@ -0,0 +1,30 @@ +import IMask from 'imask' + +export default { + mounted () { + this.maskedInput = this.el.querySelector('[data-masked-input]') + this.hiddenInput = this.el.querySelector('[data-hidden-input]') + + this.initializeMask() + }, + initializeMask () { + const maskPattern = this.el.dataset.unit ? `num ${this.el.dataset.unit}` : 'num' + + this.maskOptions = { + mask: maskPattern, + lazy: false, + blocks: { + num: { + mask: Number, + thousandsSeparator: this.el.dataset.thousandsSeparator, + radix: this.el.dataset.radix + } + } + } + + this.mask = IMask(this.maskedInput, this.maskOptions) + }, + destroyed () { + this.mask.destroy() + } +} diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index deb20a1e2..e84c94edd 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -4,3 +4,4 @@ export { default as BackpexSidebarSections } from './_sidebar_sections' export { default as BackpexStickyActions } from './_sticky_actions' export { default as BackpexThemeSelector } from './_theme_selector' export { default as BackpexTooltip } from './_tooltip' +export { default as BackpexMaskedInput } from './_masked_input' diff --git a/lib/backpex/html/form.ex b/lib/backpex/html/form.ex index e03ec4c8c..6eceed836 100644 --- a/lib/backpex/html/form.ex +++ b/lib/backpex/html/form.ex @@ -164,6 +164,90 @@ defmodule Backpex.HTML.Form do """ end + @doc """ + Renders a masked input. + + A `Phoenix.HTML.FormField` may be passed as argument, which is used to retrieve the input name, id, and values. + Otherwise all attributes may be passed explicitly. + + ## Examples + + <.masked_input field={@form[:amount]} unit="€" /> + <.masked_input id="amount-input" name="amount" value="20" unit="€" readonly /> + """ + attr :id, :any, default: nil + attr :name, :any + attr :label, :string, default: nil + attr :help_text, :string, default: nil + attr :value, :any + + attr :field, Phoenix.HTML.FormField, doc: "a form field struct retrieved from the form, for example: @form[:email]" + + attr :errors, :list, default: [] + + attr :class, :any, default: nil, doc: "additional classes for the container element" + + attr :input_class, :any, + default: nil, + doc: "the input class to use over defaults, note that this is applied to a wrapper span element + to allow for proper styling of the masked input" + + attr :error_class, :any, default: nil, doc: "the input error class to use over defaults" + + attr :translate_error_fun, :any, default: &Function.identity/1, doc: "a custom function to map form errors" + attr :hide_errors, :boolean, default: false, doc: "if errors should be hidden" + + attr :unit, :string, default: nil + attr :radix, :string, default: "." + attr :thousands_separator, :string, default: "," + + attr :rest, :global, include: ~w(accept autocomplete capture cols disabled form list max maxlength min minlength + multiple pattern placeholder readonly required rows size step) + + def masked_input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do + errors = if Phoenix.Component.used_input?(field), do: field.errors, else: [] + + assigns + |> assign(field: nil, id: assigns.id || field.id) + |> assign(:errors, translate_form_errors(errors, assigns.translate_error_fun)) + |> assign_new(:name, fn -> field.name end) + |> assign_new(:value, fn -> field.value end) + |> masked_input() + end + + def masked_input(assigns) do + ~H""" +
+ {@label} +
+ <%!-- As the input ignores updates, we need to wrap it in a span to apply the styles correctly --%> + _input]:input [&_>_input]:w-full", + @errors != [] && (@error_class || "[&_>_input]:input-error [&_>_input]:bg-error/10") + ]}> + + +
+ <.error :for={msg <- @errors} :if={not @hide_errors}>{msg} + <.help_text :if={@help_text}>{@help_text} +
+ """ + end + @doc """ Generates a generic error message. """ diff --git a/package.json b/package.json index b55b7f13b..0d1dcdd99 100644 --- a/package.json +++ b/package.json @@ -35,5 +35,8 @@ }, "devDependencies": { "standard": "17.1.2" + }, + "dependencies": { + "imask": "^7.6.1" } } diff --git a/yarn.lock b/yarn.lock index 8ef8e54d3..492099261 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/runtime-corejs3@^7.24.4": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.28.0.tgz#4d9938897f5a9aaa9e5f99408a4bf86daba40ec1" + integrity sha512-nlIXnSqLcBij8K8TtkxbBJgfzfvi75V1pAKSM7dUXejGw12vJAqez74jZrHTsJ3Z+Aczc5Q/6JgNjKRMsVU44g== + dependencies: + core-js-pure "^3.43.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.7.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" @@ -305,6 +312,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +core-js-pure@^3.43.0: + version "3.44.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.44.0.tgz#6e9d6c128c8b967c5eac4f181c2b654d85c28090" + integrity sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ== + cross-spawn@^7.0.2: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -981,6 +993,13 @@ ignore@^5.1.1, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +imask@^7.6.1: + version "7.6.1" + resolved "https://registry.yarnpkg.com/imask/-/imask-7.6.1.tgz#04fa4693bf47a4a71bbf7325408e0d058a74dcad" + integrity sha512-sJlIFM7eathUEMChTh9Mrfw/IgiWgJqBKq2VNbyXvBZ7ev/IlO6/KQTKlV/Fm+viQMLrFLG/zCuudrLIwgK2dg== + dependencies: + "@babel/runtime-corejs3" "^7.24.4" + import-fresh@^3.2.1: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" From c52444d591a725226ad1796142baf7b191dc6a61 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:33:52 +0200 Subject: [PATCH 03/24] Refactor currency field to use masked input --- lib/backpex/fields/currency.ex | 74 ++++++++++++++++------------------ 1 file changed, 35 insertions(+), 39 deletions(-) diff --git a/lib/backpex/fields/currency.ex b/lib/backpex/fields/currency.ex index 78b185465..425862e2f 100644 --- a/lib/backpex/fields/currency.ex +++ b/lib/backpex/fields/currency.ex @@ -7,6 +7,23 @@ defmodule Backpex.Fields.Currency do throttle: [ doc: "Timeout value (in milliseconds) or function that receives the assigns.", type: {:or, [:pos_integer, {:fun, 1}]} + ], + unit: [ + doc: "Unit to display with the currency value, e.g. '€'.", + type: :string, + default: "€" + ], + radix: [ + doc: + "Character used as the decimal separator, e.g. ',' or '.'. Make sure this value matches the one you've configured in your Money library.", + type: :string, + default: "," + ], + thousands_separator: [ + doc: + "Character used as the thousands separator, e.g. '.' or ','. Make sure this value matches the one you've configured in your Money library.", + type: :string, + default: "." ] ] @@ -21,16 +38,14 @@ defmodule Backpex.Fields.Currency do ## Schema - `Backpex.Ecto.Amount.Type` provides a type for Ecto to store a amount. The underlying data type should be an integer. - For a full list of configuration options see: https://hexdocs.pm/money/Money.html#module-configuration + Backpex expects you to use a Money library or a similar approach for handling currency values and dumping / casting them correctly in your database schema. - schema "article" do - field :price, Backpex.Ecto.Amount.Type - ... - end + Ensure that your schema field is set up to handle the currency type appropriately. + + For example, if you are using the [Money](https://hex.pm/packages/money) library, your schema might look like this: schema "article" do - field :price, Backpex.Ecto.Amount.Type, currency: :EUR, opts: [separator: ".", delimiter: ","] + field :price, Money.Ecto.Amount.Type ... end @@ -41,46 +56,45 @@ defmodule Backpex.Fields.Currency do [ price: %{ module: Backpex.Fields.Currency, - label: "Price" + label: "Price", + unit: "€", + radix: ",", + thousands_separator: "." } ] end """ use Backpex.Field, config_schema: @config_schema + import Ecto.Query - alias Backpex.Ecto.Amount.Type @impl Backpex.Field def render_value(assigns) do - schema = assigns.live_resource.adapter_config(:schema) - assigns = assign(assigns, :casted_value, maybe_cast_value(assigns.name, schema, assigns.value)) - ~H"""

- {@casted_value} + {@value}

""" end @impl Backpex.Field def render_form(assigns) do - assigns = assign(assigns, :casted_value, maybe_cast_form(PhoenixForm.input_value(assigns.form, assigns.name))) - ~H"""
<:label align={Backpex.Field.align_label(@field_options, assigns)}> -
@@ -91,25 +105,7 @@ defmodule Backpex.Fields.Currency do def search_condition(schema_name, field_name, search_string) do dynamic( [{^schema_name, schema_name}], - ilike(fragment("CAST(? AS TEXT)", schema_name |> field(^field_name)), ^search_string) + ilike(fragment("CAST(? AS TEXT)", field(schema_name, ^field_name)), ^search_string) ) end - - defp maybe_cast_value(field_name, schema, value) do - type = schema.__schema__(:type, field_name) || schema.__schema__(:virtual_type, field_name) - - case type do - {:parameterized, Backpex.Ecto.Amount.Type, opts} -> - {:ok, money} = Type.cast(value, opts) - - Money.to_string(money, Keyword.get(opts, :opts, [])) - - _type -> - value - end - end - - defp maybe_cast_form(val) when is_binary(val), do: val - defp maybe_cast_form(nil), do: Decimal.new("0.00") - defp maybe_cast_form(%Money{} = value), do: Money.to_decimal(value) end From 502803bad2470cc2bc322351a00dcef850728668 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:38:38 +0200 Subject: [PATCH 04/24] Remove money dependency from backpex --- mix.exs | 1 - mix.lock | 1 - 2 files changed, 2 deletions(-) diff --git a/mix.exs b/mix.exs index ad47175fb..860cfa335 100644 --- a/mix.exs +++ b/mix.exs @@ -50,7 +50,6 @@ defmodule Backpex.MixProject do {:gettext, "~> 0.26"}, {:jason, "~> 1.2"}, {:number, "~> 1.0"}, - {:money, "~> 1.13"}, # phoenix {:phoenix, "~> 1.7.6"}, diff --git a/mix.lock b/mix.lock index d5fd79539..d182f1207 100644 --- a/mix.lock +++ b/mix.lock @@ -32,7 +32,6 @@ "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, "mix_audit": {:hex, :mix_audit, "2.1.5", "c0f77cee6b4ef9d97e37772359a187a166c7a1e0e08b50edf5bf6959dfe5a016", [:make, :mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:yaml_elixir, "~> 2.11", [hex: :yaml_elixir, repo: "hexpm", optional: false]}], "hexpm", "87f9298e21da32f697af535475860dc1d3617a010e0b418d2ec6142bc8b42d69"}, - "money": {:hex, :money, "1.14.0", "61c1e9d9ae1dd45dae7f72568987b3e7275031c3f5a0bf8a053bd74259555934", [:mix], [{:decimal, "~> 1.2 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:ecto, "~> 2.1 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.0 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "b8691009e0c31715d2e5a3cca68ca2e1a46895d63c11257b317d8801ee2c54e3"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"}, "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, From f9e43746b636b4ca518e0b4e883bf1a734beeec3 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 18 Jul 2025 10:39:37 +0200 Subject: [PATCH 05/24] Install money in demo --- demo/mix.exs | 1 + 1 file changed, 1 insertion(+) diff --git a/demo/mix.exs b/demo/mix.exs index 3f4482cef..95872364f 100644 --- a/demo/mix.exs +++ b/demo/mix.exs @@ -74,6 +74,7 @@ defmodule Demo.MixProject do {:jason, ">= 1.0.0"}, {:ash, "~> 3.0"}, {:ash_postgres, "~> 2.6.0"}, + {:money, "~> 1.14"}, # assets {:esbuild, "~> 0.9", runtime: Mix.env() == :dev}, From c331680a6371acdd84d2976e611eeb22d20a8aa6 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 18 Jul 2025 12:11:08 +0200 Subject: [PATCH 06/24] Use hidden input for currency value --- assets/js/hooks/_masked_input.js | 15 +++++++++++++++ lib/backpex/html/form.ex | 11 ++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/assets/js/hooks/_masked_input.js b/assets/js/hooks/_masked_input.js index f26146b19..e1b1f159e 100644 --- a/assets/js/hooks/_masked_input.js +++ b/assets/js/hooks/_masked_input.js @@ -23,6 +23,21 @@ export default { } this.mask = IMask(this.maskedInput, this.maskOptions) + this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value) + this.mask.on('accept', this.handleMaskChange.bind(this)) + }, + updated () { + this.handleMaskChange.bind(this) + }, + handleMaskChange () { + this.hiddenInput.value = this.rawValue(this.mask.value) + this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true })) + }, + rawValue (value) { + return value + .replace(this.el.dataset.unit || '', '') + .trim() + .replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, 'g'), '') }, destroyed () { this.mask.destroy() diff --git a/lib/backpex/html/form.ex b/lib/backpex/html/form.ex index 6eceed836..d1343d349 100644 --- a/lib/backpex/html/form.ex +++ b/lib/backpex/html/form.ex @@ -231,15 +231,8 @@ defmodule Backpex.HTML.Form do @input_class || "[&_>_input]:input [&_>_input]:w-full", @errors != [] && (@error_class || "[&_>_input]:input-error [&_>_input]:bg-error/10") ]}> - + + <.error :for={msg <- @errors} :if={not @hide_errors}>{msg} From 2c8a14958078995c747a378f7c11dc4767173545 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:27:29 +0200 Subject: [PATCH 07/24] Update masked input --- assets/js/hooks/_masked_input.js | 9 ++++++++- lib/backpex/fields/currency.ex | 12 +++++++++++- lib/backpex/html/form.ex | 5 +++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/assets/js/hooks/_masked_input.js b/assets/js/hooks/_masked_input.js index e1b1f159e..63b4aa37c 100644 --- a/assets/js/hooks/_masked_input.js +++ b/assets/js/hooks/_masked_input.js @@ -8,7 +8,14 @@ export default { this.initializeMask() }, initializeMask () { - const maskPattern = this.el.dataset.unit ? `num ${this.el.dataset.unit}` : 'num' + const maskPattern = this.el.dataset.maskPattern + + console.log('Mask pattern:', maskPattern) + + if (!maskPattern) { + console.error('You must provide a mask pattern in the data-masked-pattern attribute.') + return + } this.maskOptions = { mask: maskPattern, diff --git a/lib/backpex/fields/currency.ex b/lib/backpex/fields/currency.ex index 425862e2f..58892c955 100644 --- a/lib/backpex/fields/currency.ex +++ b/lib/backpex/fields/currency.ex @@ -13,6 +13,11 @@ defmodule Backpex.Fields.Currency do type: :string, default: "€" ], + unit_position: [ + doc: "Position of the unit relative to the value, either `:before` or `:after`.", + type: {:in, [:before, :after]}, + default: :before + ], radix: [ doc: "Character used as the decimal separator, e.g. ',' or '.'. Make sure this value matches the one you've configured in your Money library.", @@ -79,6 +84,8 @@ defmodule Backpex.Fields.Currency do @impl Backpex.Field def render_form(assigns) do + assigns = assign(assigns, :mask_pattern, build_mask_pattern(assigns.field_options)) + ~H"""
@@ -92,8 +99,8 @@ defmodule Backpex.Fields.Currency do help_text={Backpex.Field.help_text(@field_options, assigns)} phx-debounce={Backpex.Field.debounce(@field_options, assigns)} phx-throttle={Backpex.Field.throttle(@field_options, assigns)} - unit={@field_options[:unit]} radix={@field_options[:radix]} + mask_pattern={@mask_pattern} thousands_separator={@field_options[:thousands_separator]} /> @@ -108,4 +115,7 @@ defmodule Backpex.Fields.Currency do ilike(fragment("CAST(? AS TEXT)", field(schema_name, ^field_name)), ^search_string) ) end + + defp build_mask_pattern(%{unit_position: :before} = field_option), do: "#{field_option.unit} num" + defp build_mask_pattern(%{unit_position: :after} = field_option), do: "num #{field_option.unit}" end diff --git a/lib/backpex/html/form.ex b/lib/backpex/html/form.ex index d1343d349..8300c26c1 100644 --- a/lib/backpex/html/form.ex +++ b/lib/backpex/html/form.ex @@ -197,9 +197,9 @@ defmodule Backpex.HTML.Form do attr :translate_error_fun, :any, default: &Function.identity/1, doc: "a custom function to map form errors" attr :hide_errors, :boolean, default: false, doc: "if errors should be hidden" - attr :unit, :string, default: nil attr :radix, :string, default: "." attr :thousands_separator, :string, default: "," + attr :mask_pattern, :string, default: "num" attr :rest, :global, include: ~w(accept autocomplete capture cols disabled form list max maxlength min minlength multiple pattern placeholder readonly required rows size step) @@ -217,14 +217,15 @@ defmodule Backpex.HTML.Form do def masked_input(assigns) do ~H""" +
{@label}
<%!-- As the input ignores updates, we need to wrap it in a span to apply the styles correctly --%> Date: Fri, 8 Aug 2025 14:27:35 +0200 Subject: [PATCH 08/24] Update js build --- priv/static/js/backpex.cjs.js | 3272 +++++++++++++++++++++++++++++ priv/static/js/backpex.cjs.js.map | 8 +- priv/static/js/backpex.esm.js | 3272 +++++++++++++++++++++++++++++ priv/static/js/backpex.esm.js.map | 8 +- 4 files changed, 6552 insertions(+), 8 deletions(-) diff --git a/priv/static/js/backpex.cjs.js b/priv/static/js/backpex.cjs.js index ca8e2d7f7..17a485c98 100644 --- a/priv/static/js/backpex.cjs.js +++ b/priv/static/js/backpex.cjs.js @@ -28,6 +28,7 @@ var hooks_exports = {}; __export(hooks_exports, { BackpexCancelEntry: () => cancel_entry_default, BackpexDragHover: () => drag_hover_default, + BackpexMaskedInput: () => masked_input_default, BackpexSidebarSections: () => sidebar_sections_default, BackpexStickyActions: () => sticky_actions_default, BackpexThemeSelector: () => theme_selector_default, @@ -252,4 +253,3275 @@ var tooltip_default = { this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`; } }; + +// ../node_modules/imask/esm/core/utils.js +function isString(str) { + return typeof str === "string" || str instanceof String; +} +function isObject(obj) { + var _obj$constructor; + return typeof obj === "object" && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === "Object"; +} +function pick(obj, keys) { + if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k)); + return Object.entries(obj).reduce((acc, _ref) => { + let [k, v] = _ref; + if (keys(v, k)) acc[k] = v; + return acc; + }, {}); +} +var DIRECTION = { + NONE: "NONE", + LEFT: "LEFT", + FORCE_LEFT: "FORCE_LEFT", + RIGHT: "RIGHT", + FORCE_RIGHT: "FORCE_RIGHT" +}; +function forceDirection(direction) { + switch (direction) { + case DIRECTION.LEFT: + return DIRECTION.FORCE_LEFT; + case DIRECTION.RIGHT: + return DIRECTION.FORCE_RIGHT; + default: + return direction; + } +} +function escapeRegExp(str) { + return str.replace(/([.*+?^=!:${}()|[\]/\\])/g, "\\$1"); +} +function objectIncludes(b, a) { + if (a === b) return true; + const arrA = Array.isArray(a), arrB = Array.isArray(b); + let i; + if (arrA && arrB) { + if (a.length != b.length) return false; + for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false; + return true; + } + if (arrA != arrB) return false; + if (a && b && typeof a === "object" && typeof b === "object") { + const dateA = a instanceof Date, dateB = b instanceof Date; + if (dateA && dateB) return a.getTime() == b.getTime(); + if (dateA != dateB) return false; + const regexpA = a instanceof RegExp, regexpB = b instanceof RegExp; + if (regexpA && regexpB) return a.toString() == b.toString(); + if (regexpA != regexpB) return false; + const keys = Object.keys(a); + for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; + for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false; + return true; + } else if (a && b && typeof a === "function" && typeof b === "function") { + return a.toString() === b.toString(); + } + return false; +} + +// ../node_modules/imask/esm/core/action-details.js +var ActionDetails = class { + /** Current input value */ + /** Current cursor position */ + /** Old input value */ + /** Old selection */ + constructor(opts) { + Object.assign(this, opts); + while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) { + --this.oldSelection.start; + } + if (this.insertedCount) { + while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) { + if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end; + else ++this.cursorPos; + } + } + } + /** Start changing position */ + get startChangePos() { + return Math.min(this.cursorPos, this.oldSelection.start); + } + /** Inserted symbols count */ + get insertedCount() { + return this.cursorPos - this.startChangePos; + } + /** Inserted symbols */ + get inserted() { + return this.value.substr(this.startChangePos, this.insertedCount); + } + /** Removed symbols count */ + get removedCount() { + return Math.max(this.oldSelection.end - this.startChangePos || // for Delete + this.oldValue.length - this.value.length, 0); + } + /** Removed symbols */ + get removed() { + return this.oldValue.substr(this.startChangePos, this.removedCount); + } + /** Unchanged head symbols */ + get head() { + return this.value.substring(0, this.startChangePos); + } + /** Unchanged tail symbols */ + get tail() { + return this.value.substring(this.startChangePos + this.insertedCount); + } + /** Remove direction */ + get removeDirection() { + if (!this.removedCount || this.insertedCount) return DIRECTION.NONE; + return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) && // if not range removed (event with backspace) + this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT; + } +}; + +// ../node_modules/imask/esm/core/holder.js +function IMask(el, opts) { + return new IMask.InputMask(el, opts); +} + +// ../node_modules/imask/esm/masked/factory.js +function maskedClass(mask) { + if (mask == null) throw new Error("mask property should be defined"); + if (mask instanceof RegExp) return IMask.MaskedRegExp; + if (isString(mask)) return IMask.MaskedPattern; + if (mask === Date) return IMask.MaskedDate; + if (mask === Number) return IMask.MaskedNumber; + if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic; + if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask; + if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor; + if (mask instanceof Function) return IMask.MaskedFunction; + console.warn("Mask not found for mask", mask); + return IMask.Masked; +} +function normalizeOpts(opts) { + if (!opts) throw new Error("Options in not defined"); + if (IMask.Masked) { + if (opts.prototype instanceof IMask.Masked) return { + mask: opts + }; + const { + mask = void 0, + ...instanceOpts + } = opts instanceof IMask.Masked ? { + mask: opts + } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {}; + if (mask) { + const _mask = mask.mask; + return { + ...pick(mask, (_, k) => !k.startsWith("_")), + mask: mask.constructor, + _mask, + ...instanceOpts + }; + } + } + if (!isObject(opts)) return { + mask: opts + }; + return { + ...opts + }; +} +function createMask(opts) { + if (IMask.Masked && opts instanceof IMask.Masked) return opts; + const nOpts = normalizeOpts(opts); + const MaskedClass = maskedClass(nOpts.mask); + if (!MaskedClass) throw new Error("Masked class is not found for provided mask " + nOpts.mask + ", appropriate module needs to be imported manually before creating mask."); + if (nOpts.mask === MaskedClass) delete nOpts.mask; + if (nOpts._mask) { + nOpts.mask = nOpts._mask; + delete nOpts._mask; + } + return new MaskedClass(nOpts); +} +IMask.createMask = createMask; + +// ../node_modules/imask/esm/controls/mask-element.js +var MaskElement = class { + /** */ + /** */ + /** */ + /** Safely returns selection start */ + get selectionStart() { + let start; + try { + start = this._unsafeSelectionStart; + } catch { + } + return start != null ? start : this.value.length; + } + /** Safely returns selection end */ + get selectionEnd() { + let end; + try { + end = this._unsafeSelectionEnd; + } catch { + } + return end != null ? end : this.value.length; + } + /** Safely sets element selection */ + select(start, end) { + if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return; + try { + this._unsafeSelect(start, end); + } catch { + } + } + /** */ + get isActive() { + return false; + } + /** */ + /** */ + /** */ +}; +IMask.MaskElement = MaskElement; + +// ../node_modules/imask/esm/controls/html-mask-element.js +var KEY_Z = 90; +var KEY_Y = 89; +var HTMLMaskElement = class extends MaskElement { + /** HTMLElement to use mask on */ + constructor(input) { + super(); + this.input = input; + this._onKeydown = this._onKeydown.bind(this); + this._onInput = this._onInput.bind(this); + this._onBeforeinput = this._onBeforeinput.bind(this); + this._onCompositionEnd = this._onCompositionEnd.bind(this); + } + get rootElement() { + var _this$input$getRootNo, _this$input$getRootNo2, _this$input; + 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; + } + /** Is element in focus */ + get isActive() { + return this.input === this.rootElement.activeElement; + } + /** Binds HTMLElement events to mask internal events */ + bindEvents(handlers) { + this.input.addEventListener("keydown", this._onKeydown); + this.input.addEventListener("input", this._onInput); + this.input.addEventListener("beforeinput", this._onBeforeinput); + this.input.addEventListener("compositionend", this._onCompositionEnd); + this.input.addEventListener("drop", handlers.drop); + this.input.addEventListener("click", handlers.click); + this.input.addEventListener("focus", handlers.focus); + this.input.addEventListener("blur", handlers.commit); + this._handlers = handlers; + } + _onKeydown(e) { + if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) { + e.preventDefault(); + return this._handlers.redo(e); + } + if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) { + e.preventDefault(); + return this._handlers.undo(e); + } + if (!e.isComposing) this._handlers.selectionChange(e); + } + _onBeforeinput(e) { + if (e.inputType === "historyUndo" && this._handlers.undo) { + e.preventDefault(); + return this._handlers.undo(e); + } + if (e.inputType === "historyRedo" && this._handlers.redo) { + e.preventDefault(); + return this._handlers.redo(e); + } + } + _onCompositionEnd(e) { + this._handlers.input(e); + } + _onInput(e) { + if (!e.isComposing) this._handlers.input(e); + } + /** Unbinds HTMLElement events to mask internal events */ + unbindEvents() { + this.input.removeEventListener("keydown", this._onKeydown); + this.input.removeEventListener("input", this._onInput); + this.input.removeEventListener("beforeinput", this._onBeforeinput); + this.input.removeEventListener("compositionend", this._onCompositionEnd); + this.input.removeEventListener("drop", this._handlers.drop); + this.input.removeEventListener("click", this._handlers.click); + this.input.removeEventListener("focus", this._handlers.focus); + this.input.removeEventListener("blur", this._handlers.commit); + this._handlers = {}; + } +}; +IMask.HTMLMaskElement = HTMLMaskElement; + +// ../node_modules/imask/esm/controls/html-input-mask-element.js +var HTMLInputMaskElement = class extends HTMLMaskElement { + /** InputElement to use mask on */ + constructor(input) { + super(input); + this.input = input; + } + /** Returns InputElement selection start */ + get _unsafeSelectionStart() { + return this.input.selectionStart != null ? this.input.selectionStart : this.value.length; + } + /** Returns InputElement selection end */ + get _unsafeSelectionEnd() { + return this.input.selectionEnd; + } + /** Sets InputElement selection */ + _unsafeSelect(start, end) { + this.input.setSelectionRange(start, end); + } + get value() { + return this.input.value; + } + set value(value) { + this.input.value = value; + } +}; +IMask.HTMLMaskElement = HTMLMaskElement; + +// ../node_modules/imask/esm/controls/html-contenteditable-mask-element.js +var HTMLContenteditableMaskElement = class extends HTMLMaskElement { + /** Returns HTMLElement selection start */ + get _unsafeSelectionStart() { + const root = this.rootElement; + const selection = root.getSelection && root.getSelection(); + const anchorOffset = selection && selection.anchorOffset; + const focusOffset = selection && selection.focusOffset; + if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) { + return anchorOffset; + } + return focusOffset; + } + /** Returns HTMLElement selection end */ + get _unsafeSelectionEnd() { + const root = this.rootElement; + const selection = root.getSelection && root.getSelection(); + const anchorOffset = selection && selection.anchorOffset; + const focusOffset = selection && selection.focusOffset; + if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) { + return anchorOffset; + } + return focusOffset; + } + /** Sets HTMLElement selection */ + _unsafeSelect(start, end) { + if (!this.rootElement.createRange) return; + const range = this.rootElement.createRange(); + range.setStart(this.input.firstChild || this.input, start); + range.setEnd(this.input.lastChild || this.input, end); + const root = this.rootElement; + const selection = root.getSelection && root.getSelection(); + if (selection) { + selection.removeAllRanges(); + selection.addRange(range); + } + } + /** HTMLElement value */ + get value() { + return this.input.textContent || ""; + } + set value(value) { + this.input.textContent = value; + } +}; +IMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement; + +// ../node_modules/imask/esm/controls/input-history.js +var InputHistory = class _InputHistory { + constructor() { + this.states = []; + this.currentIndex = 0; + } + get currentState() { + return this.states[this.currentIndex]; + } + get isEmpty() { + return this.states.length === 0; + } + push(state) { + if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1; + this.states.push(state); + if (this.states.length > _InputHistory.MAX_LENGTH) this.states.shift(); + this.currentIndex = this.states.length - 1; + } + go(steps) { + this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1); + return this.currentState; + } + undo() { + return this.go(-1); + } + redo() { + return this.go(1); + } + clear() { + this.states.length = 0; + this.currentIndex = 0; + } +}; +InputHistory.MAX_LENGTH = 100; + +// ../node_modules/imask/esm/controls/input.js +var InputMask = class { + /** + View element + */ + /** Internal {@link Masked} model */ + constructor(el, opts) { + this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== "INPUT" && el.tagName !== "TEXTAREA" ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el); + this.masked = createMask(opts); + this._listeners = {}; + this._value = ""; + this._unmaskedValue = ""; + this._rawInputValue = ""; + this.history = new InputHistory(); + 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._onUndo = this._onUndo.bind(this); + this._onRedo = this._onRedo.bind(this); + this.alignCursor = this.alignCursor.bind(this); + this.alignCursorFriendly = this.alignCursorFriendly.bind(this); + this._bindEvents(); + this.updateValue(); + this._onChange(); + } + maskEquals(mask) { + var _this$masked; + return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask)); + } + /** Masked */ + get mask() { + return this.masked.mask; + } + set mask(mask) { + if (this.maskEquals(mask)) return; + if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) { + this.masked.updateOptions({ + mask + }); + return; + } + const masked = mask instanceof IMask.Masked ? mask : createMask({ + mask + }); + masked.unmaskedValue = this.masked.unmaskedValue; + this.masked = masked; + } + /** Raw value */ + get value() { + return this._value; + } + set value(str) { + if (this.value === str) return; + this.masked.value = str; + this.updateControl("auto"); + } + /** Unmasked value */ + get unmaskedValue() { + return this._unmaskedValue; + } + set unmaskedValue(str) { + if (this.unmaskedValue === str) return; + this.masked.unmaskedValue = str; + this.updateControl("auto"); + } + /** Raw input value */ + get rawInputValue() { + return this._rawInputValue; + } + set rawInputValue(str) { + if (this.rawInputValue === str) return; + this.masked.rawInputValue = str; + this.updateControl(); + this.alignCursor(); + } + /** Typed unmasked value */ + get typedValue() { + return this.masked.typedValue; + } + set typedValue(val) { + if (this.masked.typedValueEquals(val)) return; + this.masked.typedValue = val; + this.updateControl("auto"); + } + /** Display value */ + get displayValue() { + return this.masked.displayValue; + } + /** Starts listening to element events */ + _bindEvents() { + this.el.bindEvents({ + selectionChange: this._saveSelection, + input: this._onInput, + drop: this._onDrop, + click: this._onClick, + focus: this._onFocus, + commit: this._onChange, + undo: this._onUndo, + redo: this._onRedo + }); + } + /** Stops listening to element events */ + _unbindEvents() { + if (this.el) this.el.unbindEvents(); + } + /** Fires custom event */ + _fireEvent(ev, e) { + const listeners = this._listeners[ev]; + if (!listeners) return; + listeners.forEach((l) => l(e)); + } + /** Current selection start */ + get selectionStart() { + return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart; + } + /** Current cursor position */ + get cursorPos() { + return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd; + } + set cursorPos(pos) { + if (!this.el || !this.el.isActive) return; + this.el.select(pos, pos); + this._saveSelection(); + } + /** Stores current selection */ + _saveSelection() { + if (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 + }; + } + /** Syncronizes model value from view */ + updateValue() { + this.masked.value = this.el.value; + this._value = this.masked.value; + this._unmaskedValue = this.masked.unmaskedValue; + this._rawInputValue = this.masked.rawInputValue; + } + /** Syncronizes view from model value, fires change events */ + updateControl(cursorPos) { + const newUnmaskedValue = this.masked.unmaskedValue; + const newValue = this.masked.value; + const newRawInputValue = this.masked.rawInputValue; + const newDisplayValue = this.displayValue; + const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue; + this._unmaskedValue = newUnmaskedValue; + this._value = newValue; + this._rawInputValue = newRawInputValue; + if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue; + if (cursorPos === "auto") this.alignCursor(); + else if (cursorPos != null) this.cursorPos = cursorPos; + if (isChanged) this._fireChangeEvents(); + if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({ + unmaskedValue: newUnmaskedValue, + selection: { + start: this.selectionStart, + end: this.cursorPos + } + }); + } + /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */ + updateOptions(opts) { + const { + mask, + ...restOpts + } = opts; + const updateMask = !this.maskEquals(mask); + const updateOpts = this.masked.optionsIsChanged(restOpts); + if (updateMask) this.mask = mask; + if (updateOpts) this.masked.updateOptions(restOpts); + if (updateMask || updateOpts) this.updateControl(); + } + /** Updates cursor */ + updateCursor(cursorPos) { + if (cursorPos == null) return; + this.cursorPos = cursorPos; + this._delayUpdateCursor(cursorPos); + } + /** Delays cursor update to support mobile browsers */ + _delayUpdateCursor(cursorPos) { + this._abortUpdateCursor(); + this._changingCursorPos = cursorPos; + this._cursorChanging = setTimeout(() => { + if (!this.el) return; + this.cursorPos = this._changingCursorPos; + this._abortUpdateCursor(); + }, 10); + } + /** Fires custom events */ + _fireChangeEvents() { + this._fireEvent("accept", this._inputEvent); + if (this.masked.isComplete) this._fireEvent("complete", this._inputEvent); + } + /** Aborts delayed cursor update */ + _abortUpdateCursor() { + if (this._cursorChanging) { + clearTimeout(this._cursorChanging); + delete this._cursorChanging; + } + } + /** Aligns cursor to nearest available position */ + alignCursor() { + this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT)); + } + /** Aligns cursor only if selection is empty */ + alignCursorFriendly() { + if (this.selectionStart !== this.cursorPos) return; + this.alignCursor(); + } + /** Adds listener on custom event */ + on(ev, handler) { + if (!this._listeners[ev]) this._listeners[ev] = []; + this._listeners[ev].push(handler); + return this; + } + /** Removes custom event listener */ + off(ev, handler) { + if (!this._listeners[ev]) return this; + if (!handler) { + delete this._listeners[ev]; + return this; + } + const hIndex = this._listeners[ev].indexOf(handler); + if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1); + return this; + } + /** Handles view input event */ + _onInput(e) { + this._inputEvent = e; + this._abortUpdateCursor(); + const details = new ActionDetails({ + // new state + value: this.el.value, + cursorPos: this.cursorPos, + // old state + oldValue: this.displayValue, + oldSelection: this._selection + }); + const oldRawValue = this.masked.rawInputValue; + const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, { + input: true, + raw: true + }).offset; + const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE; + let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection); + if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE); + this.updateControl(cursorPos); + delete this._inputEvent; + } + /** Handles view change event and commits model value */ + _onChange() { + if (this.displayValue !== this.el.value) this.updateValue(); + this.masked.doCommit(); + this.updateControl(); + this._saveSelection(); + } + /** Handles view drop event, prevents by default */ + _onDrop(ev) { + ev.preventDefault(); + ev.stopPropagation(); + } + /** Restore last selection on focus */ + _onFocus(ev) { + this.alignCursorFriendly(); + } + /** Restore last selection on focus */ + _onClick(ev) { + this.alignCursorFriendly(); + } + _onUndo() { + this._applyHistoryState(this.history.undo()); + } + _onRedo() { + this._applyHistoryState(this.history.redo()); + } + _applyHistoryState(state) { + if (!state) return; + this._historyChanging = true; + this.unmaskedValue = state.unmaskedValue; + this.el.select(state.selection.start, state.selection.end); + this._saveSelection(); + this._historyChanging = false; + } + /** Unbind view events and removes element reference */ + destroy() { + this._unbindEvents(); + this._listeners.length = 0; + delete this.el; + } +}; +IMask.InputMask = InputMask; + +// ../node_modules/imask/esm/core/change-details.js +var ChangeDetails = class _ChangeDetails { + /** Inserted symbols */ + /** Additional offset if any changes occurred before tail */ + /** Raw inserted is used by dynamic mask */ + /** Can skip chars */ + static normalize(prep) { + return Array.isArray(prep) ? prep : [prep, new _ChangeDetails()]; + } + constructor(details) { + Object.assign(this, { + inserted: "", + rawInserted: "", + tailShift: 0, + skip: false + }, details); + } + /** Aggregate changes */ + aggregate(details) { + this.inserted += details.inserted; + this.rawInserted += details.rawInserted; + this.tailShift += details.tailShift; + this.skip = this.skip || details.skip; + return this; + } + /** Total offset considering all changes */ + get offset() { + return this.tailShift + this.inserted.length; + } + get consumed() { + return Boolean(this.rawInserted) || this.skip; + } + equals(details) { + return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip; + } +}; +IMask.ChangeDetails = ChangeDetails; + +// ../node_modules/imask/esm/core/continuous-tail-details.js +var ContinuousTailDetails = class { + /** Tail value as string */ + /** Tail start position */ + /** Start position */ + constructor(value, from, stop) { + if (value === void 0) { + value = ""; + } + if (from === void 0) { + from = 0; + } + this.value = value; + this.from = from; + this.stop = stop; + } + toString() { + return this.value; + } + extend(tail) { + this.value += String(tail); + } + appendTo(masked) { + return masked.append(this.toString(), { + tail: true + }).aggregate(masked._appendPlaceholder()); + } + get state() { + return { + value: this.value, + from: this.from, + stop: this.stop + }; + } + set state(state) { + Object.assign(this, state); + } + unshift(beforePos) { + if (!this.value.length || beforePos != null && this.from >= beforePos) return ""; + const shiftChar = this.value[0]; + this.value = this.value.slice(1); + return shiftChar; + } + shift() { + if (!this.value.length) return ""; + const shiftChar = this.value[this.value.length - 1]; + this.value = this.value.slice(0, -1); + return shiftChar; + } +}; + +// ../node_modules/imask/esm/masked/base.js +var Masked = class _Masked { + /** */ + /** */ + /** Transforms value before mask processing */ + /** Transforms each char before mask processing */ + /** Validates if value is acceptable */ + /** Does additional processing at the end of editing */ + /** Format typed value to string */ + /** Parse string to get typed value */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + /** */ + constructor(opts) { + this._value = ""; + this._update({ + ..._Masked.DEFAULTS, + ...opts + }); + this._initialized = true; + } + /** Sets and applies new options */ + updateOptions(opts) { + if (!this.optionsIsChanged(opts)) return; + this.withValueRefresh(this._update.bind(this, opts)); + } + /** Sets new options */ + _update(opts) { + Object.assign(this, opts); + } + /** Mask state */ + get state() { + return { + _value: this.value, + _rawInputValue: this.rawInputValue + }; + } + set state(state) { + this._value = state._value; + } + /** Resets value */ + reset() { + this._value = ""; + } + get value() { + return this._value; + } + set value(value) { + this.resolve(value, { + input: true + }); + } + /** Resolve new value */ + resolve(value, flags) { + if (flags === void 0) { + flags = { + input: true + }; + } + this.reset(); + this.append(value, flags, ""); + this.doCommit(); + } + get unmaskedValue() { + return this.value; + } + set unmaskedValue(value) { + this.resolve(value, {}); + } + get typedValue() { + return this.parse ? this.parse(this.value, this) : this.unmaskedValue; + } + set typedValue(value) { + if (this.format) { + this.value = this.format(value, this); + } else { + this.unmaskedValue = String(value); + } + } + /** Value that includes raw user input */ + get rawInputValue() { + return this.extractInput(0, this.displayValue.length, { + raw: true + }); + } + set rawInputValue(value) { + this.resolve(value, { + raw: true + }); + } + get displayValue() { + return this.value; + } + get isComplete() { + return true; + } + get isFilled() { + return this.isComplete; + } + /** Finds nearest input position in direction */ + nearestInputPos(cursorPos, direction) { + return cursorPos; + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return Math.min(this.displayValue.length, toPos - fromPos); + } + /** Extracts value in range considering flags */ + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return this.displayValue.slice(fromPos, toPos); + } + /** Extracts tail in range */ + extractTail(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos); + } + /** Appends tail */ + appendTail(tail) { + if (isString(tail)) tail = new ContinuousTailDetails(String(tail)); + return tail.appendTo(this); + } + /** Appends char */ + _appendCharRaw(ch, flags) { + if (!ch) return new ChangeDetails(); + this._value += ch; + return new ChangeDetails({ + inserted: ch, + rawInserted: ch + }); + } + /** Appends char */ + _appendChar(ch, flags, checkTail) { + if (flags === void 0) { + flags = {}; + } + const consistentState = this.state; + let details; + [ch, details] = this.doPrepareChar(ch, flags); + if (ch) { + details = details.aggregate(this._appendCharRaw(ch, flags)); + if (!details.rawInserted && this.autofix === "pad") { + const noFixState = this.state; + this.state = consistentState; + let fixDetails = this.pad(flags); + const chDetails = this._appendCharRaw(ch, flags); + fixDetails = fixDetails.aggregate(chDetails); + if (chDetails.rawInserted || fixDetails.equals(details)) { + details = fixDetails; + } else { + this.state = noFixState; + } + } + } + if (details.inserted) { + let consistentTail; + let appended = this.doValidate(flags) !== false; + if (appended && checkTail != null) { + const beforeTailState = this.state; + if (this.overwrite === true) { + consistentTail = checkTail.state; + for (let i = 0; i < details.rawInserted.length; ++i) { + checkTail.unshift(this.displayValue.length - details.tailShift); + } + } + let tailDetails = this.appendTail(checkTail); + appended = tailDetails.rawInserted.length === checkTail.toString().length; + if (!(appended && tailDetails.inserted) && this.overwrite === "shift") { + this.state = beforeTailState; + consistentTail = checkTail.state; + for (let i = 0; i < details.rawInserted.length; ++i) { + checkTail.shift(); + } + tailDetails = this.appendTail(checkTail); + appended = tailDetails.rawInserted.length === checkTail.toString().length; + } + if (appended && tailDetails.inserted) this.state = beforeTailState; + } + if (!appended) { + details = new ChangeDetails(); + this.state = consistentState; + if (checkTail && consistentTail) checkTail.state = consistentTail; + } + } + return details; + } + /** Appends optional placeholder at the end */ + _appendPlaceholder() { + return new ChangeDetails(); + } + /** Appends optional eager placeholder at the end */ + _appendEager() { + return new ChangeDetails(); + } + /** Appends symbols considering flags */ + append(str, flags, tail) { + if (!isString(str)) throw new Error("value should be string"); + const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail; + if (flags != null && flags.tail) flags._beforeTailState = this.state; + let details; + [str, details] = this.doPrepare(str, flags); + for (let ci = 0; ci < str.length; ++ci) { + const d = this._appendChar(str[ci], flags, checkTail); + if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break; + details.aggregate(d); + } + if ((this.eager === true || this.eager === "append") && flags != null && flags.input && str) { + details.aggregate(this._appendEager()); + } + if (checkTail != null) { + details.tailShift += this.appendTail(checkTail).tailShift; + } + return details; + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos); + return new ChangeDetails(); + } + /** Calls function and reapplies current value */ + withValueRefresh(fn) { + if (this._refreshing || !this._initialized) return fn(); + this._refreshing = true; + const rawInput = this.rawInputValue; + const value = this.value; + const ret = fn(); + this.rawInputValue = rawInput; + if (this.value && this.value !== value && value.indexOf(this.value) === 0) { + this.append(value.slice(this.displayValue.length), {}, ""); + this.doCommit(); + } + delete this._refreshing; + return ret; + } + runIsolated(fn) { + if (this._isolated || !this._initialized) return fn(this); + this._isolated = true; + const state = this.state; + const ret = fn(this); + this.state = state; + delete this._isolated; + return ret; + } + doSkipInvalid(ch, flags, checkTail) { + return Boolean(this.skipInvalid); + } + /** Prepares string before mask processing */ + doPrepare(str, flags) { + if (flags === void 0) { + flags = {}; + } + return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str); + } + /** Prepares each char before mask processing */ + doPrepareChar(str, flags) { + if (flags === void 0) { + flags = {}; + } + return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str); + } + /** Validates if value is acceptable */ + doValidate(flags) { + return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags)); + } + /** Does additional processing at the end of editing */ + doCommit() { + if (this.commit) this.commit(this.value, this); + } + splice(start, deleteCount, inserted, removeDirection, flags) { + if (inserted === void 0) { + inserted = ""; + } + if (removeDirection === void 0) { + removeDirection = DIRECTION.NONE; + } + if (flags === void 0) { + flags = { + input: true + }; + } + const tailPos = start + deleteCount; + const tail = this.extractTail(tailPos); + const eagerRemove = this.eager === true || this.eager === "remove"; + let oldRawValue; + if (eagerRemove) { + removeDirection = forceDirection(removeDirection); + oldRawValue = this.extractInput(0, tailPos, { + raw: true + }); + } + let startChangePos = start; + const details = new ChangeDetails(); + if (removeDirection !== DIRECTION.NONE) { + startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection); + details.tailShift = startChangePos - start; + } + details.aggregate(this.remove(startChangePos)); + if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) { + if (removeDirection === DIRECTION.FORCE_LEFT) { + let valLength; + while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) { + details.aggregate(new ChangeDetails({ + tailShift: -1 + })).aggregate(this.remove(valLength - 1)); + } + } else if (removeDirection === DIRECTION.FORCE_RIGHT) { + tail.unshift(); + } + } + return details.aggregate(this.append(inserted, flags, tail)); + } + maskEquals(mask) { + return this.mask === mask; + } + optionsIsChanged(opts) { + return !objectIncludes(this, opts); + } + typedValueEquals(value) { + const tval = this.typedValue; + 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); + } + pad(flags) { + return new ChangeDetails(); + } +}; +Masked.DEFAULTS = { + skipInvalid: true +}; +Masked.EMPTY_VALUES = [void 0, null, ""]; +IMask.Masked = Masked; + +// ../node_modules/imask/esm/masked/pattern/chunk-tail-details.js +var ChunksTailDetails = class _ChunksTailDetails { + /** */ + constructor(chunks, from) { + if (chunks === void 0) { + chunks = []; + } + if (from === void 0) { + from = 0; + } + this.chunks = chunks; + this.from = from; + } + toString() { + return this.chunks.map(String).join(""); + } + extend(tailChunk) { + if (!String(tailChunk)) return; + tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk; + const lastChunk = this.chunks[this.chunks.length - 1]; + const extendLast = lastChunk && // if stops are same or tail has no stop + (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) && // if tail chunk goes just after last chunk + tailChunk.from === lastChunk.from + lastChunk.toString().length; + if (tailChunk instanceof ContinuousTailDetails) { + if (extendLast) { + lastChunk.extend(tailChunk.toString()); + } else { + this.chunks.push(tailChunk); + } + } else if (tailChunk instanceof _ChunksTailDetails) { + if (tailChunk.stop == null) { + let firstTailChunk; + while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) { + firstTailChunk = tailChunk.chunks.shift(); + firstTailChunk.from += tailChunk.from; + this.extend(firstTailChunk); + } + } + if (tailChunk.toString()) { + tailChunk.stop = tailChunk.blockIndex; + this.chunks.push(tailChunk); + } + } + } + appendTo(masked) { + if (!(masked instanceof IMask.MaskedPattern)) { + const tail = new ContinuousTailDetails(this.toString()); + return tail.appendTo(masked); + } + const details = new ChangeDetails(); + for (let ci = 0; ci < this.chunks.length; ++ci) { + const chunk = this.chunks[ci]; + const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length); + const stop = chunk.stop; + let chunkBlock; + if (stop != null && // if block not found or stop is behind lastBlock + (!lastBlockIter || lastBlockIter.index <= stop)) { + if (chunk instanceof _ChunksTailDetails || // for continuous block also check if stop is exist + masked._stops.indexOf(stop) >= 0) { + details.aggregate(masked._appendPlaceholder(stop)); + } + chunkBlock = chunk instanceof _ChunksTailDetails && masked._blocks[stop]; + } + if (chunkBlock) { + const tailDetails = chunkBlock.appendTail(chunk); + details.aggregate(tailDetails); + const remainChars = chunk.toString().slice(tailDetails.rawInserted.length); + if (remainChars) details.aggregate(masked.append(remainChars, { + tail: true + })); + } else { + details.aggregate(masked.append(chunk.toString(), { + tail: true + })); + } + } + return details; + } + get state() { + return { + chunks: this.chunks.map((c) => c.state), + from: this.from, + stop: this.stop, + blockIndex: this.blockIndex + }; + } + set state(state) { + const { + chunks, + ...props + } = state; + Object.assign(this, props); + this.chunks = chunks.map((cstate) => { + const chunk = "chunks" in cstate ? new _ChunksTailDetails() : new ContinuousTailDetails(); + chunk.state = cstate; + return chunk; + }); + } + unshift(beforePos) { + if (!this.chunks.length || beforePos != null && this.from >= beforePos) return ""; + const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos; + let ci = 0; + while (ci < this.chunks.length) { + const chunk = this.chunks[ci]; + const shiftChar = chunk.unshift(chunkShiftPos); + if (chunk.toString()) { + if (!shiftChar) break; + ++ci; + } else { + this.chunks.splice(ci, 1); + } + if (shiftChar) return shiftChar; + } + return ""; + } + shift() { + if (!this.chunks.length) return ""; + let ci = this.chunks.length - 1; + while (0 <= ci) { + const chunk = this.chunks[ci]; + const shiftChar = chunk.shift(); + if (chunk.toString()) { + if (!shiftChar) break; + --ci; + } else { + this.chunks.splice(ci, 1); + } + if (shiftChar) return shiftChar; + } + return ""; + } +}; + +// ../node_modules/imask/esm/masked/pattern/cursor.js +var PatternCursor = class { + constructor(masked, pos) { + this.masked = masked; + this._log = []; + const { + offset, + index + } = masked._mapPosToBlock(pos) || (pos < 0 ? ( + // first + { + index: 0, + offset: 0 + } + ) : ( + // last + { + index: this.masked._blocks.length, + offset: 0 + } + )); + this.offset = offset; + this.index = index; + this.ok = false; + } + 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(s) { + Object.assign(this, s); + } + pushState() { + this._log.push(this.state); + } + popState() { + const s = this._log.pop(); + if (s) this.state = s; + return s; + } + bindBlock() { + if (this.block) return; + if (this.index < 0) { + this.index = 0; + this.offset = 0; + } + if (this.index >= this.masked._blocks.length) { + this.index = this.masked._blocks.length - 1; + this.offset = this.block.displayValue.length; + } + } + _pushLeft(fn) { + this.pushState(); + for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) { + var _this$block; + if (fn()) return this.ok = true; + } + return this.ok = false; + } + _pushRight(fn) { + this.pushState(); + for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) { + if (fn()) return this.ok = true; + } + return this.ok = false; + } + pushLeftBeforeFilled() { + return this._pushLeft(() => { + if (this.block.isFixed || !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT); + if (this.offset !== 0) return true; + }); + } + pushLeftBeforeInput() { + return this._pushLeft(() => { + if (this.block.isFixed) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT); + return true; + }); + } + pushLeftBeforeRequired() { + return this._pushLeft(() => { + if (this.block.isFixed || this.block.isOptional && !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT); + return true; + }); + } + pushRightBeforeFilled() { + return this._pushRight(() => { + if (this.block.isFixed || !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT); + if (this.offset !== this.block.value.length) return true; + }); + } + pushRightBeforeInput() { + return this._pushRight(() => { + if (this.block.isFixed) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE); + return true; + }); + } + pushRightBeforeRequired() { + return this._pushRight(() => { + if (this.block.isFixed || this.block.isOptional && !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE); + return true; + }); + } +}; + +// ../node_modules/imask/esm/masked/pattern/fixed-definition.js +var PatternFixedDefinition = class { + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + constructor(opts) { + Object.assign(this, opts); + this._value = ""; + this.isFixed = true; + } + 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 = false; + this._value = ""; + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this._value.length; + } + this._value = this._value.slice(0, fromPos) + this._value.slice(toPos); + if (!this._value) this._isRawInput = false; + return new ChangeDetails(); + } + nearestInputPos(cursorPos, direction) { + if (direction === void 0) { + direction = DIRECTION.NONE; + } + const minPos = 0; + const maxPos = this._value.length; + switch (direction) { + case DIRECTION.LEFT: + case DIRECTION.FORCE_LEFT: + return minPos; + case DIRECTION.NONE: + case DIRECTION.RIGHT: + case DIRECTION.FORCE_RIGHT: + default: + return maxPos; + } + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this._value.length; + } + return this._isRawInput ? toPos - fromPos : 0; + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this._value.length; + } + if (flags === void 0) { + flags = {}; + } + return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || ""; + } + get isComplete() { + return true; + } + get isFilled() { + return Boolean(this._value); + } + _appendChar(ch, flags) { + if (flags === void 0) { + flags = {}; + } + if (this.isFilled) return new ChangeDetails(); + const appendEager = this.eager === true || this.eager === "append"; + const appended = this.char === ch; + const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail; + const details = new ChangeDetails({ + inserted: this.char, + rawInserted: isResolved ? this.char : "" + }); + this._value = this.char; + this._isRawInput = isResolved && (flags.raw || flags.input); + return details; + } + _appendEager() { + return this._appendChar(this.char, { + tail: true + }); + } + _appendPlaceholder() { + const details = new ChangeDetails(); + if (this.isFilled) return details; + this._value = details.inserted = this.char; + return details; + } + extractTail() { + return new ContinuousTailDetails(""); + } + appendTail(tail) { + if (isString(tail)) tail = new ContinuousTailDetails(String(tail)); + return tail.appendTo(this); + } + append(str, flags, tail) { + const details = this._appendChar(str[0], flags); + if (tail != null) { + details.tailShift += this.appendTail(tail).tailShift; + } + return details; + } + doCommit() { + } + get state() { + return { + _value: this._value, + _rawInputValue: this.rawInputValue + }; + } + set state(state) { + this._value = state._value; + this._isRawInput = Boolean(state._rawInputValue); + } + pad(flags) { + return this._appendPlaceholder(); + } +}; + +// ../node_modules/imask/esm/masked/pattern/input-definition.js +var PatternInputDefinition = class { + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + constructor(opts) { + const { + parent, + isOptional, + placeholderChar, + displayChar, + lazy, + eager, + ...maskOpts + } = opts; + this.masked = createMask(maskOpts); + Object.assign(this, { + parent, + isOptional, + placeholderChar, + displayChar, + lazy, + eager + }); + } + reset() { + this.isFilled = false; + this.masked.reset(); + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.value.length; + } + if (fromPos === 0 && toPos >= 1) { + this.isFilled = false; + return this.masked.remove(fromPos, toPos); + } + return new ChangeDetails(); + } + 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(ch, flags) { + if (flags === void 0) { + flags = {}; + } + if (this.isFilled) return new ChangeDetails(); + const state = this.masked.state; + let details = this.masked._appendChar(ch, this.currentMaskFlags(flags)); + if (details.inserted && this.doValidate(flags) === false) { + details = new ChangeDetails(); + this.masked.state = state; + } + if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) { + details.inserted = this.placeholderChar; + } + details.skip = !details.inserted && !this.isOptional; + this.isFilled = Boolean(details.inserted); + return details; + } + append(str, flags, tail) { + return this.masked.append(str, this.currentMaskFlags(flags), tail); + } + _appendPlaceholder() { + if (this.isFilled || this.isOptional) return new ChangeDetails(); + this.isFilled = true; + return new ChangeDetails({ + inserted: this.placeholderChar + }); + } + _appendEager() { + return new ChangeDetails(); + } + extractTail(fromPos, toPos) { + return this.masked.extractTail(fromPos, toPos); + } + appendTail(tail) { + return this.masked.appendTail(tail); + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.value.length; + } + return this.masked.extractInput(fromPos, toPos, flags); + } + nearestInputPos(cursorPos, direction) { + if (direction === void 0) { + direction = DIRECTION.NONE; + } + const minPos = 0; + const maxPos = this.value.length; + const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos); + switch (direction) { + case DIRECTION.LEFT: + case DIRECTION.FORCE_LEFT: + return this.isComplete ? boundPos : minPos; + case DIRECTION.RIGHT: + case DIRECTION.FORCE_RIGHT: + return this.isComplete ? boundPos : maxPos; + case DIRECTION.NONE: + default: + return boundPos; + } + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.value.length; + } + return this.value.slice(fromPos, toPos).length; + } + doValidate(flags) { + return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags))); + } + doCommit() { + this.masked.doCommit(); + } + get state() { + return { + _value: this.value, + _rawInputValue: this.rawInputValue, + masked: this.masked.state, + isFilled: this.isFilled + }; + } + set state(state) { + this.masked.state = state.masked; + this.isFilled = state.isFilled; + } + currentMaskFlags(flags) { + var _flags$_beforeTailSta; + return { + ...flags, + _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState) + }; + } + pad(flags) { + return new ChangeDetails(); + } +}; +PatternInputDefinition.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]/, + // http://stackoverflow.com/a/22075070 + "*": /./ +}; + +// ../node_modules/imask/esm/masked/regexp.js +var MaskedRegExp = class extends Masked { + /** */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const mask = opts.mask; + if (mask) opts.validate = (value) => value.search(mask) >= 0; + super._update(opts); + } +}; +IMask.MaskedRegExp = MaskedRegExp; + +// ../node_modules/imask/esm/masked/pattern.js +var MaskedPattern = class _MaskedPattern extends Masked { + /** */ + /** */ + /** Single char for empty input */ + /** Single char for filled input */ + /** Show placeholder only when needed */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + constructor(opts) { + super({ + ..._MaskedPattern.DEFAULTS, + ...opts, + definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions) + }); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + opts.definitions = Object.assign({}, this.definitions, opts.definitions); + super._update(opts); + this._rebuildMask(); + } + _rebuildMask() { + const defs = this.definitions; + this._blocks = []; + this.exposeBlock = void 0; + this._stops = []; + this._maskedBlocks = {}; + const pattern = this.mask; + if (!pattern || !defs) return; + let unmaskingBlock = false; + let optionalBlock = false; + for (let i = 0; i < pattern.length; ++i) { + if (this.blocks) { + const p = pattern.slice(i); + const bNames = Object.keys(this.blocks).filter((bName2) => p.indexOf(bName2) === 0); + bNames.sort((a, b) => b.length - a.length); + const bName = bNames[0]; + if (bName) { + const { + expose, + repeat, + ...bOpts + } = normalizeOpts(this.blocks[bName]); + const blockOpts = { + lazy: this.lazy, + eager: this.eager, + placeholderChar: this.placeholderChar, + displayChar: this.displayChar, + overwrite: this.overwrite, + autofix: this.autofix, + ...bOpts, + repeat, + parent: this + }; + const maskedBlock = repeat != null ? new IMask.RepeatBlock( + blockOpts + /* TODO */ + ) : createMask(blockOpts); + if (maskedBlock) { + this._blocks.push(maskedBlock); + if (expose) this.exposeBlock = maskedBlock; + if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = []; + this._maskedBlocks[bName].push(this._blocks.length - 1); + } + i += bName.length - 1; + continue; + } + } + let char = pattern[i]; + let isInput = char in defs; + if (char === _MaskedPattern.STOP_CHAR) { + this._stops.push(this._blocks.length); + continue; + } + if (char === "{" || char === "}") { + unmaskingBlock = !unmaskingBlock; + continue; + } + if (char === "[" || char === "]") { + optionalBlock = !optionalBlock; + continue; + } + if (char === _MaskedPattern.ESCAPE_CHAR) { + ++i; + char = pattern[i]; + if (!char) break; + isInput = false; + } + const def = isInput ? new PatternInputDefinition({ + isOptional: optionalBlock, + lazy: this.lazy, + eager: this.eager, + placeholderChar: this.placeholderChar, + displayChar: this.displayChar, + ...normalizeOpts(defs[char]), + parent: this + }) : new PatternFixedDefinition({ + char, + eager: this.eager, + isUnmasking: unmaskingBlock + }); + this._blocks.push(def); + } + } + get state() { + return { + ...super.state, + _blocks: this._blocks.map((b) => b.state) + }; + } + set state(state) { + if (!state) { + this.reset(); + return; + } + const { + _blocks, + ...maskedState + } = state; + this._blocks.forEach((b, bi) => b.state = _blocks[bi]); + super.state = maskedState; + } + reset() { + super.reset(); + this._blocks.forEach((b) => b.reset()); + } + get isComplete() { + return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every((b) => b.isComplete); + } + get isFilled() { + return this._blocks.every((b) => b.isFilled); + } + get isFixed() { + return this._blocks.every((b) => b.isFixed); + } + get isOptional() { + return this._blocks.every((b) => b.isOptional); + } + doCommit() { + this._blocks.forEach((b) => b.doCommit()); + super.doCommit(); + } + get unmaskedValue() { + return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, ""); + } + set unmaskedValue(unmaskedValue) { + if (this.exposeBlock) { + const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length); + this.exposeBlock.unmaskedValue = unmaskedValue; + this.appendTail(tail); + this.doCommit(); + } else super.unmaskedValue = unmaskedValue; + } + get value() { + return this.exposeBlock ? this.exposeBlock.value : ( + // TODO return _value when not in change? + this._blocks.reduce((str, b) => str += b.value, "") + ); + } + set value(value) { + if (this.exposeBlock) { + const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length); + this.exposeBlock.value = value; + this.appendTail(tail); + this.doCommit(); + } else super.value = value; + } + get typedValue() { + return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue; + } + set typedValue(value) { + if (this.exposeBlock) { + const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length); + this.exposeBlock.typedValue = value; + this.appendTail(tail); + this.doCommit(); + } else super.typedValue = value; + } + get displayValue() { + return this._blocks.reduce((str, b) => str += b.displayValue, ""); + } + appendTail(tail) { + return super.appendTail(tail).aggregate(this._appendPlaceholder()); + } + _appendEager() { + var _this$_mapPosToBlock; + const details = new ChangeDetails(); + let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index; + if (startBlockIndex == null) return details; + if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex; + for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) { + const d = this._blocks[bi]._appendEager(); + if (!d.inserted) break; + details.aggregate(d); + } + return details; + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const blockIter = this._mapPosToBlock(this.displayValue.length); + const details = new ChangeDetails(); + if (!blockIter) return details; + for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) { + var _flags$_beforeTailSta; + const blockDetails = block._appendChar(ch, { + ...flags, + _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi] + }); + details.aggregate(blockDetails); + if (blockDetails.consumed) break; + } + return details; + } + extractTail(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const chunkTail = new ChunksTailDetails(); + if (fromPos === toPos) return chunkTail; + this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => { + const blockChunk = b.extractTail(bFromPos, bToPos); + blockChunk.stop = this._findStopBefore(bi); + blockChunk.from = this._blockStartPos(bi); + if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi; + chunkTail.extend(blockChunk); + }); + return chunkTail; + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + if (flags === void 0) { + flags = {}; + } + if (fromPos === toPos) return ""; + let input = ""; + this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos2, toPos2) => { + input += b.extractInput(fromPos2, toPos2, flags); + }); + return input; + } + _findStopBefore(blockIndex) { + let stopBefore; + for (let si = 0; si < this._stops.length; ++si) { + const stop = this._stops[si]; + if (stop <= blockIndex) stopBefore = stop; + else break; + } + return stopBefore; + } + /** Appends placeholder depending on laziness */ + _appendPlaceholder(toBlockIndex) { + const details = new ChangeDetails(); + if (this.lazy && toBlockIndex == null) return details; + const startBlockIter = this._mapPosToBlock(this.displayValue.length); + if (!startBlockIter) return details; + const startBlockIndex = startBlockIter.index; + const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length; + this._blocks.slice(startBlockIndex, endBlockIndex).forEach((b) => { + if (!b.lazy || toBlockIndex != null) { + var _blocks2; + details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length)); + } + }); + return details; + } + /** Finds block in pos */ + _mapPosToBlock(pos) { + let accVal = ""; + for (let bi = 0; bi < this._blocks.length; ++bi) { + const block = this._blocks[bi]; + const blockStartPos = accVal.length; + accVal += block.displayValue; + if (pos <= accVal.length) { + return { + index: bi, + offset: pos - blockStartPos + }; + } + } + } + _blockStartPos(blockIndex) { + return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0); + } + _forEachBlocksInRange(fromPos, toPos, fn) { + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const fromBlockIter = this._mapPosToBlock(fromPos); + if (fromBlockIter) { + const toBlockIter = this._mapPosToBlock(toPos); + const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index; + const fromBlockStartPos = fromBlockIter.offset; + const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length; + fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos); + if (toBlockIter && !isSameBlock) { + for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) { + fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length); + } + fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset); + } + } + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const removeDetails = super.remove(fromPos, toPos); + this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => { + removeDetails.aggregate(b.remove(bFromPos, bToPos)); + }); + return removeDetails; + } + nearestInputPos(cursorPos, direction) { + if (direction === void 0) { + direction = DIRECTION.NONE; + } + if (!this._blocks.length) return 0; + const cursor = new PatternCursor(this, cursorPos); + if (direction === DIRECTION.NONE) { + if (cursor.pushRightBeforeInput()) return cursor.pos; + cursor.popState(); + if (cursor.pushLeftBeforeInput()) return cursor.pos; + return this.displayValue.length; + } + if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) { + if (direction === DIRECTION.LEFT) { + cursor.pushRightBeforeFilled(); + if (cursor.ok && cursor.pos === cursorPos) return cursorPos; + cursor.popState(); + } + cursor.pushLeftBeforeInput(); + cursor.pushLeftBeforeRequired(); + cursor.pushLeftBeforeFilled(); + if (direction === DIRECTION.LEFT) { + cursor.pushRightBeforeInput(); + cursor.pushRightBeforeRequired(); + if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos; + cursor.popState(); + if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos; + cursor.popState(); + } + if (cursor.ok) return cursor.pos; + if (direction === DIRECTION.FORCE_LEFT) return 0; + cursor.popState(); + if (cursor.ok) return cursor.pos; + cursor.popState(); + if (cursor.ok) return cursor.pos; + return 0; + } + if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) { + cursor.pushRightBeforeInput(); + cursor.pushRightBeforeRequired(); + if (cursor.pushRightBeforeFilled()) return cursor.pos; + if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length; + cursor.popState(); + if (cursor.ok) return cursor.pos; + cursor.popState(); + if (cursor.ok) return cursor.pos; + return this.nearestInputPos(cursorPos, DIRECTION.LEFT); + } + return cursorPos; + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + let total = 0; + this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => { + total += b.totalInputPositions(bFromPos, bToPos); + }); + return total; + } + /** Get block by name */ + maskedBlock(name) { + return this.maskedBlocks(name)[0]; + } + /** Get all blocks by name */ + maskedBlocks(name) { + const indices = this._maskedBlocks[name]; + if (!indices) return []; + return indices.map((gi) => this._blocks[gi]); + } + pad(flags) { + const details = new ChangeDetails(); + this._forEachBlocksInRange(0, this.displayValue.length, (b) => details.aggregate(b.pad(flags))); + return details; + } +}; +MaskedPattern.DEFAULTS = { + ...Masked.DEFAULTS, + lazy: true, + placeholderChar: "_" +}; +MaskedPattern.STOP_CHAR = "`"; +MaskedPattern.ESCAPE_CHAR = "\\"; +MaskedPattern.InputDefinition = PatternInputDefinition; +MaskedPattern.FixedDefinition = PatternFixedDefinition; +IMask.MaskedPattern = MaskedPattern; + +// ../node_modules/imask/esm/masked/range.js +var MaskedRange = class extends MaskedPattern { + /** + Optionally sets max length of pattern. + Used when pattern length is longer then `to` param length. Pads zeros at start in this case. + */ + /** Min bound */ + /** Max bound */ + get _matchFrom() { + return this.maxLength - String(this.from).length; + } + constructor(opts) { + super(opts); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const { + to = this.to || 0, + from = this.from || 0, + maxLength = this.maxLength || 0, + autofix = this.autofix, + ...patternOpts + } = opts; + this.to = to; + this.from = from; + this.maxLength = Math.max(String(to).length, maxLength); + this.autofix = autofix; + const fromStr = String(this.from).padStart(this.maxLength, "0"); + const toStr = String(this.to).padStart(this.maxLength, "0"); + let sameCharsCount = 0; + while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount; + patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, "\\0") + "0".repeat(this.maxLength - sameCharsCount); + super._update(patternOpts); + } + get isComplete() { + return super.isComplete && Boolean(this.value); + } + boundaries(str) { + let minstr = ""; + let maxstr = ""; + const [, placeholder, num] = str.match(/^(\D*)(\d*)(\D*)/) || []; + if (num) { + minstr = "0".repeat(placeholder.length) + num; + maxstr = "9".repeat(placeholder.length) + num; + } + minstr = minstr.padEnd(this.maxLength, "0"); + maxstr = maxstr.padEnd(this.maxLength, "9"); + return [minstr, maxstr]; + } + doPrepareChar(ch, flags) { + if (flags === void 0) { + flags = {}; + } + let details; + [ch, details] = super.doPrepareChar(ch.replace(/\D/g, ""), flags); + if (!ch) details.skip = !this.isComplete; + return [ch, details]; + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags); + const fromStr = String(this.from).padStart(this.maxLength, "0"); + const toStr = String(this.to).padStart(this.maxLength, "0"); + const [minstr, maxstr] = this.boundaries(this.value + ch); + if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags); + if (Number(minstr) > this.to) { + if (!flags.tail && this.autofix === "pad" && this.value.length + 1 < this.maxLength) { + return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags)); + } + return super._appendCharRaw(toStr[this.value.length], flags); + } + return super._appendCharRaw(ch, flags); + } + doValidate(flags) { + const str = this.value; + const firstNonZero = str.search(/[^0]/); + if (firstNonZero === -1 && str.length <= this._matchFrom) return true; + const [minstr, maxstr] = this.boundaries(str); + return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags); + } + pad(flags) { + const details = new ChangeDetails(); + if (this.value.length === this.maxLength) return details; + const value = this.value; + const padLength = this.maxLength - this.value.length; + if (padLength) { + this.reset(); + for (let i = 0; i < padLength; ++i) { + details.aggregate(super._appendCharRaw("0", flags)); + } + value.split("").forEach((ch) => this._appendCharRaw(ch)); + } + return details; + } +}; +IMask.MaskedRange = MaskedRange; + +// ../node_modules/imask/esm/masked/date.js +var DefaultPattern = "d{.}`m{.}`Y"; +var MaskedDate = class _MaskedDate extends MaskedPattern { + static extractPatternOptions(opts) { + const { + mask, + pattern, + ...patternOpts + } = opts; + return { + ...patternOpts, + mask: isString(mask) ? mask : pattern + }; + } + /** Pattern mask for date according to {@link MaskedDate#format} */ + /** Start date */ + /** End date */ + /** Format typed value to string */ + /** Parse string to get typed value */ + constructor(opts) { + super(_MaskedDate.extractPatternOptions({ + ..._MaskedDate.DEFAULTS, + ...opts + })); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const { + mask, + pattern, + blocks, + ...patternOpts + } = { + ..._MaskedDate.DEFAULTS, + ...opts + }; + const patternBlocks = Object.assign({}, _MaskedDate.GET_DEFAULT_BLOCKS()); + if (opts.min) patternBlocks.Y.from = opts.min.getFullYear(); + if (opts.max) patternBlocks.Y.to = opts.max.getFullYear(); + if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) { + patternBlocks.m.from = opts.min.getMonth() + 1; + patternBlocks.m.to = opts.max.getMonth() + 1; + if (patternBlocks.m.from === patternBlocks.m.to) { + patternBlocks.d.from = opts.min.getDate(); + patternBlocks.d.to = opts.max.getDate(); + } + } + Object.assign(patternBlocks, this.blocks, blocks); + super._update({ + ...patternOpts, + mask: isString(mask) ? mask : pattern, + blocks: patternBlocks + }); + } + doValidate(flags) { + const date = this.date; + return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max)); + } + /** Checks if date is exists */ + isDateExist(str) { + return this.format(this.parse(str, this), this).indexOf(str) >= 0; + } + /** Parsed Date */ + get date() { + return this.typedValue; + } + set date(date) { + this.typedValue = date; + } + get typedValue() { + return this.isComplete ? super.typedValue : null; + } + set typedValue(value) { + super.typedValue = value; + } + maskEquals(mask) { + return mask === Date || super.maskEquals(mask); + } + optionsIsChanged(opts) { + return super.optionsIsChanged(_MaskedDate.extractPatternOptions(opts)); + } +}; +MaskedDate.GET_DEFAULT_BLOCKS = () => ({ + d: { + mask: MaskedRange, + from: 1, + to: 31, + maxLength: 2 + }, + m: { + mask: MaskedRange, + from: 1, + to: 12, + maxLength: 2 + }, + Y: { + mask: MaskedRange, + from: 1900, + to: 9999 + } +}); +MaskedDate.DEFAULTS = { + ...MaskedPattern.DEFAULTS, + mask: Date, + pattern: DefaultPattern, + format: (date, masked) => { + if (!date) return ""; + const day = String(date.getDate()).padStart(2, "0"); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const year = date.getFullYear(); + return [day, month, year].join("."); + }, + parse: (str, masked) => { + const [day, month, year] = str.split(".").map(Number); + return new Date(year, month - 1, day); + } +}; +IMask.MaskedDate = MaskedDate; + +// ../node_modules/imask/esm/masked/dynamic.js +var MaskedDynamic = class _MaskedDynamic extends Masked { + constructor(opts) { + super({ + ..._MaskedDynamic.DEFAULTS, + ...opts + }); + this.currentMask = void 0; + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + super._update(opts); + if ("mask" in opts) { + this.exposeMask = void 0; + this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map((m) => { + const { + expose, + ...maskOpts + } = normalizeOpts(m); + const masked = createMask({ + overwrite: this._overwrite, + eager: this._eager, + skipInvalid: this._skipInvalid, + ...maskOpts + }); + if (expose) this.exposeMask = masked; + return masked; + }) : []; + } + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const details = this._applyDispatch(ch, flags); + if (this.currentMask) { + details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags))); + } + return details; + } + _applyDispatch(appended, flags, tail) { + if (appended === void 0) { + appended = ""; + } + if (flags === void 0) { + flags = {}; + } + if (tail === void 0) { + tail = ""; + } + const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value; + const inputValue = this.rawInputValue; + const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue; + const tailValue = inputValue.slice(insertValue.length); + const prevMask = this.currentMask; + const details = new ChangeDetails(); + const prevMaskState = prevMask == null ? void 0 : prevMask.state; + this.currentMask = this.doDispatch(appended, { + ...flags + }, tail); + if (this.currentMask) { + if (this.currentMask !== prevMask) { + this.currentMask.reset(); + if (insertValue) { + this.currentMask.append(insertValue, { + raw: true + }); + details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length; + } + if (tailValue) { + details.tailShift += this.currentMask.append(tailValue, { + raw: true, + tail: true + }).tailShift; + } + } else if (prevMaskState) { + this.currentMask.state = prevMaskState; + } + } + return details; + } + _appendPlaceholder() { + const details = this._applyDispatch(); + if (this.currentMask) { + details.aggregate(this.currentMask._appendPlaceholder()); + } + return details; + } + _appendEager() { + const details = this._applyDispatch(); + if (this.currentMask) { + details.aggregate(this.currentMask._appendEager()); + } + return details; + } + appendTail(tail) { + const details = new ChangeDetails(); + if (tail) details.aggregate(this._applyDispatch("", {}, tail)); + return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail)); + } + currentMaskFlags(flags) { + var _flags$_beforeTailSta, _flags$_beforeTailSta2; + return { + ...flags, + _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 + }; + } + doDispatch(appended, flags, tail) { + if (flags === void 0) { + flags = {}; + } + if (tail === void 0) { + tail = ""; + } + return this.dispatch(appended, this, flags, tail); + } + doValidate(flags) { + return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags))); + } + doPrepare(str, flags) { + if (flags === void 0) { + flags = {}; + } + let [s, details] = super.doPrepare(str, flags); + if (this.currentMask) { + let currentDetails; + [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags)); + details = details.aggregate(currentDetails); + } + return [s, details]; + } + doPrepareChar(str, flags) { + if (flags === void 0) { + flags = {}; + } + let [s, details] = super.doPrepareChar(str, flags); + if (this.currentMask) { + let currentDetails; + [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags)); + details = details.aggregate(currentDetails); + } + return [s, details]; + } + reset() { + var _this$currentMask; + (_this$currentMask = this.currentMask) == null || _this$currentMask.reset(); + this.compiledMasks.forEach((m) => m.reset()); + } + get value() { + return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : ""; + } + set value(value) { + if (this.exposeMask) { + this.exposeMask.value = value; + this.currentMask = this.exposeMask; + this._applyDispatch(); + } else super.value = value; + } + get unmaskedValue() { + return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : ""; + } + set unmaskedValue(unmaskedValue) { + if (this.exposeMask) { + this.exposeMask.unmaskedValue = unmaskedValue; + this.currentMask = this.exposeMask; + this._applyDispatch(); + } else super.unmaskedValue = unmaskedValue; + } + get typedValue() { + return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : ""; + } + set typedValue(typedValue) { + if (this.exposeMask) { + this.exposeMask.typedValue = typedValue; + this.currentMask = this.exposeMask; + this._applyDispatch(); + return; + } + let unmaskedValue = String(typedValue); + if (this.currentMask) { + this.currentMask.typedValue = typedValue; + unmaskedValue = this.currentMask.unmaskedValue; + } + this.unmaskedValue = unmaskedValue; + } + get displayValue() { + return this.currentMask ? this.currentMask.displayValue : ""; + } + get isComplete() { + var _this$currentMask2; + return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete); + } + get isFilled() { + var _this$currentMask3; + return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled); + } + remove(fromPos, toPos) { + const details = new ChangeDetails(); + if (this.currentMask) { + details.aggregate(this.currentMask.remove(fromPos, toPos)).aggregate(this._applyDispatch()); + } + return details; + } + get state() { + var _this$currentMask4; + return { + ...super.state, + _rawInputValue: this.rawInputValue, + compiledMasks: this.compiledMasks.map((m) => m.state), + currentMaskRef: this.currentMask, + currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state + }; + } + set state(state) { + const { + compiledMasks, + currentMaskRef, + currentMask, + ...maskedState + } = state; + if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]); + if (currentMaskRef != null) { + this.currentMask = currentMaskRef; + this.currentMask.state = currentMask; + } + super.state = maskedState; + } + extractInput(fromPos, toPos, flags) { + return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : ""; + } + extractTail(fromPos, toPos) { + return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos); + } + doCommit() { + if (this.currentMask) this.currentMask.doCommit(); + super.doCommit(); + } + nearestInputPos(cursorPos, direction) { + return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction); + } + get overwrite() { + return this.currentMask ? this.currentMask.overwrite : this._overwrite; + } + set overwrite(overwrite) { + this._overwrite = overwrite; + } + get eager() { + return this.currentMask ? this.currentMask.eager : this._eager; + } + set eager(eager) { + this._eager = eager; + } + get skipInvalid() { + return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid; + } + set skipInvalid(skipInvalid) { + this._skipInvalid = skipInvalid; + } + get autofix() { + return this.currentMask ? this.currentMask.autofix : this._autofix; + } + set autofix(autofix) { + this._autofix = autofix; + } + maskEquals(mask) { + return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => { + if (!mask[mi]) return; + const { + mask: oldMask, + ...restOpts + } = mask[mi]; + return objectIncludes(m, restOpts) && m.maskEquals(oldMask); + }) : super.maskEquals(mask); + } + typedValueEquals(value) { + var _this$currentMask5; + return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value)); + } +}; +MaskedDynamic.DEFAULTS = { + ...Masked.DEFAULTS, + dispatch: (appended, masked, flags, tail) => { + if (!masked.compiledMasks.length) return; + const inputValue = masked.rawInputValue; + const inputs = masked.compiledMasks.map((m, index) => { + const isCurrent = masked.currentMask === m; + const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT); + if (m.rawInputValue !== inputValue) { + m.reset(); + m.append(inputValue, { + raw: true + }); + } else if (!isCurrent) { + m.remove(startInputPos); + } + m.append(appended, masked.currentMaskFlags(flags)); + m.appendTail(tail); + return { + index, + weight: m.rawInputValue.length, + totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT))) + }; + }); + inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions); + return masked.compiledMasks[inputs[0].index]; + } +}; +IMask.MaskedDynamic = MaskedDynamic; + +// ../node_modules/imask/esm/masked/enum.js +var MaskedEnum = class _MaskedEnum extends MaskedPattern { + constructor(opts) { + super({ + ..._MaskedEnum.DEFAULTS, + ...opts + }); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const { + enum: enum_, + ...eopts + } = opts; + if (enum_) { + const lengths = enum_.map((e) => e.length); + const requiredLength = Math.min(...lengths); + const optionalLength = Math.max(...lengths) - requiredLength; + eopts.mask = "*".repeat(requiredLength); + if (optionalLength) eopts.mask += "[" + "*".repeat(optionalLength) + "]"; + this.enum = enum_; + } + super._update(eopts); + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length); + const matches = this.enum.filter((e) => this.matchValue(e, this.unmaskedValue + ch, matchFrom)); + if (matches.length) { + if (matches.length === 1) { + this._forEachBlocksInRange(0, this.value.length, (b, bi) => { + const mch = matches[0][bi]; + if (bi >= this.value.length || mch === b.value) return; + b.reset(); + b._appendChar(mch, flags); + }); + } + const d = super._appendCharRaw(matches[0][this.value.length], flags); + if (matches.length === 1) { + matches[0].slice(this.unmaskedValue.length).split("").forEach((mch) => d.aggregate(super._appendCharRaw(mch))); + } + return d; + } + return new ChangeDetails({ + skip: !this.isComplete + }); + } + extractTail(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return new ContinuousTailDetails("", fromPos); + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + if (fromPos === toPos) return new ChangeDetails(); + const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length); + let pos; + for (pos = fromPos; pos >= 0; --pos) { + const matches = this.enum.filter((e) => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom)); + if (matches.length > 1) break; + } + const details = super.remove(pos, toPos); + details.tailShift += pos - fromPos; + return details; + } + get isComplete() { + return this.enum.indexOf(this.value) >= 0; + } +}; +MaskedEnum.DEFAULTS = { + ...MaskedPattern.DEFAULTS, + matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom +}; +IMask.MaskedEnum = MaskedEnum; + +// ../node_modules/imask/esm/masked/function.js +var MaskedFunction = class extends Masked { + /** */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + super._update({ + ...opts, + validate: opts.mask + }); + } +}; +IMask.MaskedFunction = MaskedFunction; + +// ../node_modules/imask/esm/masked/number.js +var _MaskedNumber; +var MaskedNumber = class _MaskedNumber2 extends Masked { + /** Single char */ + /** Single char */ + /** Array of single chars */ + /** */ + /** */ + /** Digits after point */ + /** Flag to remove leading and trailing zeros in the end of editing */ + /** Flag to pad trailing zeros after point in the end of editing */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + /** Format typed value to string */ + /** Parse string to get typed value */ + constructor(opts) { + super({ + ..._MaskedNumber2.DEFAULTS, + ...opts + }); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + super._update(opts); + this._updateRegExps(); + } + _updateRegExps() { + const start = "^" + (this.allowNegative ? "[+|\\-]?" : ""); + const mid = "\\d*"; + const end = (this.scale ? "(" + escapeRegExp(this.radix) + "\\d{0," + this.scale + "})?" : "") + "$"; + this._numberRegExp = new RegExp(start + mid + end); + this._mapToRadixRegExp = new RegExp("[" + this.mapToRadix.map(escapeRegExp).join("") + "]", "g"); + this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), "g"); + } + _removeThousandsSeparators(value) { + return value.replace(this._thousandsSeparatorRegExp, ""); + } + _insertThousandsSeparators(value) { + const parts = value.split(this.radix); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, this.thousandsSeparator); + return parts.join(this.radix); + } + doPrepareChar(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && /* + radix should be mapped when + 1) input is done from keyboard = flags.input && flags.raw + 2) unmasked value is set = !flags.input && !flags.raw + and should not be mapped when + 1) value is set = flags.input && !flags.raw + 2) raw value is set = !flags.input && flags.raw + */ + (flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags); + if (ch && !prepCh) details.skip = true; + if (prepCh && !this.allowPositive && !this.value && prepCh !== "-") details.aggregate(this._appendChar("-")); + return [prepCh, details]; + } + _separatorsCount(to, extendOnSeparators) { + if (extendOnSeparators === void 0) { + extendOnSeparators = false; + } + let count = 0; + for (let pos = 0; pos < to; ++pos) { + if (this._value.indexOf(this.thousandsSeparator, pos) === pos) { + ++count; + if (extendOnSeparators) to += this.thousandsSeparator.length; + } + } + return count; + } + _separatorsCountFromSlice(slice) { + if (slice === void 0) { + slice = this._value; + } + return this._separatorsCount(this._removeThousandsSeparators(slice).length, true); + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos); + return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags)); + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value; + const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue); + this._value = this._removeThousandsSeparators(this.value); + const oldValue = this._value; + this._value += ch; + const num = this.number; + let accepted = !isNaN(num); + let skip = false; + if (accepted) { + let fixedNum; + if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min; + if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max; + if (fixedNum != null) { + if (this.autofix) { + this._value = this.format(fixedNum, this).replace(_MaskedNumber2.UNMASKED_RADIX, this.radix); + skip || (skip = oldValue === this._value && !flags.tail); + } else { + accepted = false; + } + } + accepted && (accepted = Boolean(this._value.match(this._numberRegExp))); + } + let appendDetails; + if (!accepted) { + this._value = oldValue; + appendDetails = new ChangeDetails(); + } else { + appendDetails = new ChangeDetails({ + inserted: this._value.slice(oldValue.length), + rawInserted: skip ? "" : ch, + skip + }); + } + this._value = this._insertThousandsSeparators(this._value); + const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value; + const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue); + appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length; + return appendDetails; + } + _findSeparatorAround(pos) { + if (this.thousandsSeparator) { + const searchFrom = pos - this.thousandsSeparator.length + 1; + const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom); + if (separatorPos <= pos) return separatorPos; + } + return -1; + } + _adjustRangeWithSeparators(from, to) { + const separatorAroundFromPos = this._findSeparatorAround(from); + if (separatorAroundFromPos >= 0) from = separatorAroundFromPos; + const separatorAroundToPos = this._findSeparatorAround(to); + if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length; + return [from, to]; + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos); + const valueBeforePos = this.value.slice(0, fromPos); + const valueAfterPos = this.value.slice(toPos); + const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length); + this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos)); + const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos); + return new ChangeDetails({ + tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length + }); + } + nearestInputPos(cursorPos, direction) { + if (!this.thousandsSeparator) return cursorPos; + switch (direction) { + case DIRECTION.NONE: + case DIRECTION.LEFT: + case DIRECTION.FORCE_LEFT: { + const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1); + if (separatorAtLeftPos >= 0) { + const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length; + if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) { + return separatorAtLeftPos; + } + } + break; + } + case DIRECTION.RIGHT: + case DIRECTION.FORCE_RIGHT: { + const separatorAtRightPos = this._findSeparatorAround(cursorPos); + if (separatorAtRightPos >= 0) { + return separatorAtRightPos + this.thousandsSeparator.length; + } + } + } + return cursorPos; + } + doCommit() { + if (this.value) { + const number = this.number; + let validnum = number; + if (this.min != null) validnum = Math.max(validnum, this.min); + if (this.max != null) validnum = Math.min(validnum, this.max); + if (validnum !== number) this.unmaskedValue = this.format(validnum, this); + let formatted = this.value; + if (this.normalizeZeros) formatted = this._normalizeZeros(formatted); + if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted); + this._value = formatted; + } + super.doCommit(); + } + _normalizeZeros(value) { + const parts = this._removeThousandsSeparators(value).split(this.radix); + parts[0] = parts[0].replace(/^(\D*)(0*)(\d*)/, (match, sign, zeros, num) => sign + num); + if (value.length && !/\d$/.test(parts[0])) parts[0] = parts[0] + "0"; + if (parts.length > 1) { + parts[1] = parts[1].replace(/0*$/, ""); + if (!parts[1].length) parts.length = 1; + } + return this._insertThousandsSeparators(parts.join(this.radix)); + } + _padFractionalZeros(value) { + if (!value) return value; + const parts = value.split(this.radix); + if (parts.length < 2) parts.push(""); + parts[1] = parts[1].padEnd(this.scale, "0"); + return parts.join(this.radix); + } + doSkipInvalid(ch, flags, checkTail) { + if (flags === void 0) { + flags = {}; + } + const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === _MaskedNumber2.UNMASKED_RADIX || this.mapToRadix.includes(ch)); + return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional; + } + get unmaskedValue() { + return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, _MaskedNumber2.UNMASKED_RADIX); + } + set unmaskedValue(unmaskedValue) { + super.unmaskedValue = unmaskedValue; + } + get typedValue() { + return this.parse(this.unmaskedValue, this); + } + set typedValue(n) { + this.rawInputValue = this.format(n, this).replace(_MaskedNumber2.UNMASKED_RADIX, this.radix); + } + /** Parsed Number */ + get number() { + return this.typedValue; + } + set number(number) { + this.typedValue = number; + } + get allowNegative() { + return this.min != null && this.min < 0 || this.max != null && this.max < 0; + } + get allowPositive() { + return this.min != null && this.min > 0 || this.max != null && this.max > 0; + } + typedValueEquals(value) { + return (super.typedValueEquals(value) || _MaskedNumber2.EMPTY_VALUES.includes(value) && _MaskedNumber2.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === ""); + } +}; +_MaskedNumber = MaskedNumber; +MaskedNumber.UNMASKED_RADIX = "."; +MaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0]; +MaskedNumber.DEFAULTS = { + ...Masked.DEFAULTS, + mask: Number, + radix: ",", + thousandsSeparator: "", + mapToRadix: [_MaskedNumber.UNMASKED_RADIX], + min: Number.MIN_SAFE_INTEGER, + max: Number.MAX_SAFE_INTEGER, + scale: 2, + normalizeZeros: true, + padFractionalZeros: false, + parse: Number, + format: (n) => n.toLocaleString("en-US", { + useGrouping: false, + maximumFractionDigits: 20 + }) +}; +IMask.MaskedNumber = MaskedNumber; + +// ../node_modules/imask/esm/masked/pipe.js +var PIPE_TYPE = { + MASKED: "value", + UNMASKED: "unmaskedValue", + TYPED: "typedValue" +}; +function createPipe(arg, from, to) { + if (from === void 0) { + from = PIPE_TYPE.MASKED; + } + if (to === void 0) { + to = PIPE_TYPE.MASKED; + } + const masked = createMask(arg); + return (value) => masked.runIsolated((m) => { + m[from] = value; + return m[to]; + }); +} +function pipe(value, mask, from, to) { + return createPipe(mask, from, to)(value); +} +IMask.PIPE_TYPE = PIPE_TYPE; +IMask.createPipe = createPipe; +IMask.pipe = pipe; + +// ../node_modules/imask/esm/masked/repeat.js +var RepeatBlock = class extends MaskedPattern { + get repeatFrom() { + var _ref; + return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0; + } + get repeatTo() { + var _ref2; + return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity; + } + constructor(opts) { + super(opts); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + var _ref3, _ref4, _this$_blocks; + const { + repeat, + ...blockOpts + } = normalizeOpts(opts); + this._blockOpts = Object.assign({}, this._blockOpts, blockOpts); + const block = createMask(this._blockOpts); + this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; + super._update({ + mask: "m".repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)), + blocks: { + m: block + }, + eager: block.eager, + overwrite: block.overwrite, + skipInvalid: block.skipInvalid, + lazy: block.lazy, + placeholderChar: block.placeholderChar, + displayChar: block.displayChar + }); + } + _allocateBlock(bi) { + if (bi < this._blocks.length) return this._blocks[bi]; + if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) { + this._blocks.push(createMask(this._blockOpts)); + this.mask += "m"; + return this._blocks[this._blocks.length - 1]; + } + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const details = new ChangeDetails(); + for ( + let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated; + // try to get a block or + // try to allocate a new block if not allocated already + block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); + ++bi + ) { + var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta; + const blockDetails = block._appendChar(ch, { + ...flags, + _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi] + }); + if (blockDetails.skip && allocated) { + this._blocks.pop(); + this.mask = this.mask.slice(1); + break; + } + details.aggregate(blockDetails); + if (blockDetails.consumed) break; + } + return details; + } + _trimEmptyTail(fromPos, toPos) { + var _this$_mapPosToBlock2, _this$_mapPosToBlock3; + if (fromPos === void 0) { + fromPos = 0; + } + const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0); + let lastBlockIndex; + if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index; + if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1; + let removeCount = 0; + for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) { + if (this._blocks[blockIndex].unmaskedValue) break; + } + if (removeCount) { + this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount); + this.mask = this.mask.slice(removeCount); + } + } + reset() { + super.reset(); + this._trimEmptyTail(); + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const removeDetails = super.remove(fromPos, toPos); + this._trimEmptyTail(fromPos, toPos); + return removeDetails; + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos == null && this.repeatTo === Infinity) return Infinity; + return super.totalInputPositions(fromPos, toPos); + } + get state() { + return super.state; + } + set state(state) { + this._blocks.length = state._blocks.length; + this.mask = this.mask.slice(0, this._blocks.length); + super.state = state; + } +}; +IMask.RepeatBlock = RepeatBlock; + +// ../node_modules/imask/esm/index.js +try { + globalThis.IMask = IMask; +} catch { +} + +// js/hooks/_masked_input.js +var masked_input_default = { + mounted() { + this.maskedInput = this.el.querySelector("[data-masked-input]"); + this.hiddenInput = this.el.querySelector("[data-hidden-input]"); + this.initializeMask(); + }, + initializeMask() { + const maskPattern = this.el.dataset.maskPattern; + console.log("Mask pattern:", maskPattern); + if (!maskPattern) { + console.error("You must provide a mask pattern in the data-masked-pattern attribute."); + return; + } + this.maskOptions = { + mask: maskPattern, + lazy: false, + blocks: { + num: { + mask: Number, + thousandsSeparator: this.el.dataset.thousandsSeparator, + radix: this.el.dataset.radix + } + } + }; + this.mask = IMask(this.maskedInput, this.maskOptions); + this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value); + this.mask.on("accept", this.handleMaskChange.bind(this)); + }, + updated() { + this.handleMaskChange.bind(this); + }, + handleMaskChange() { + this.hiddenInput.value = this.rawValue(this.mask.value); + this.hiddenInput.dispatchEvent(new Event("input", { bubbles: true })); + }, + rawValue(value) { + return value.replace(this.el.dataset.unit || "", "").trim().replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, "g"), ""); + }, + destroyed() { + this.mask.destroy(); + } +}; //# sourceMappingURL=backpex.cjs.js.map diff --git a/priv/static/js/backpex.cjs.js.map b/priv/static/js/backpex.cjs.js.map index 3724e7dfb..5d0c389e3 100644 --- a/priv/static/js/backpex.cjs.js.map +++ b/priv/static/js/backpex.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js"], - "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n"], - "mappings": "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", - "names": [] + "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_input.js"], + "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedInput } from './_masked_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], + "mappings": "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", + "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } diff --git a/priv/static/js/backpex.esm.js b/priv/static/js/backpex.esm.js index 6a524d4f8..7d4ef6742 100644 --- a/priv/static/js/backpex.esm.js +++ b/priv/static/js/backpex.esm.js @@ -9,6 +9,7 @@ var hooks_exports = {}; __export(hooks_exports, { BackpexCancelEntry: () => cancel_entry_default, BackpexDragHover: () => drag_hover_default, + BackpexMaskedInput: () => masked_input_default, BackpexSidebarSections: () => sidebar_sections_default, BackpexStickyActions: () => sticky_actions_default, BackpexThemeSelector: () => theme_selector_default, @@ -233,6 +234,3277 @@ var tooltip_default = { this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`; } }; + +// ../node_modules/imask/esm/core/utils.js +function isString(str) { + return typeof str === "string" || str instanceof String; +} +function isObject(obj) { + var _obj$constructor; + return typeof obj === "object" && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === "Object"; +} +function pick(obj, keys) { + if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k)); + return Object.entries(obj).reduce((acc, _ref) => { + let [k, v] = _ref; + if (keys(v, k)) acc[k] = v; + return acc; + }, {}); +} +var DIRECTION = { + NONE: "NONE", + LEFT: "LEFT", + FORCE_LEFT: "FORCE_LEFT", + RIGHT: "RIGHT", + FORCE_RIGHT: "FORCE_RIGHT" +}; +function forceDirection(direction) { + switch (direction) { + case DIRECTION.LEFT: + return DIRECTION.FORCE_LEFT; + case DIRECTION.RIGHT: + return DIRECTION.FORCE_RIGHT; + default: + return direction; + } +} +function escapeRegExp(str) { + return str.replace(/([.*+?^=!:${}()|[\]/\\])/g, "\\$1"); +} +function objectIncludes(b, a) { + if (a === b) return true; + const arrA = Array.isArray(a), arrB = Array.isArray(b); + let i; + if (arrA && arrB) { + if (a.length != b.length) return false; + for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false; + return true; + } + if (arrA != arrB) return false; + if (a && b && typeof a === "object" && typeof b === "object") { + const dateA = a instanceof Date, dateB = b instanceof Date; + if (dateA && dateB) return a.getTime() == b.getTime(); + if (dateA != dateB) return false; + const regexpA = a instanceof RegExp, regexpB = b instanceof RegExp; + if (regexpA && regexpB) return a.toString() == b.toString(); + if (regexpA != regexpB) return false; + const keys = Object.keys(a); + for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; + for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false; + return true; + } else if (a && b && typeof a === "function" && typeof b === "function") { + return a.toString() === b.toString(); + } + return false; +} + +// ../node_modules/imask/esm/core/action-details.js +var ActionDetails = class { + /** Current input value */ + /** Current cursor position */ + /** Old input value */ + /** Old selection */ + constructor(opts) { + Object.assign(this, opts); + while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) { + --this.oldSelection.start; + } + if (this.insertedCount) { + while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) { + if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end; + else ++this.cursorPos; + } + } + } + /** Start changing position */ + get startChangePos() { + return Math.min(this.cursorPos, this.oldSelection.start); + } + /** Inserted symbols count */ + get insertedCount() { + return this.cursorPos - this.startChangePos; + } + /** Inserted symbols */ + get inserted() { + return this.value.substr(this.startChangePos, this.insertedCount); + } + /** Removed symbols count */ + get removedCount() { + return Math.max(this.oldSelection.end - this.startChangePos || // for Delete + this.oldValue.length - this.value.length, 0); + } + /** Removed symbols */ + get removed() { + return this.oldValue.substr(this.startChangePos, this.removedCount); + } + /** Unchanged head symbols */ + get head() { + return this.value.substring(0, this.startChangePos); + } + /** Unchanged tail symbols */ + get tail() { + return this.value.substring(this.startChangePos + this.insertedCount); + } + /** Remove direction */ + get removeDirection() { + if (!this.removedCount || this.insertedCount) return DIRECTION.NONE; + return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) && // if not range removed (event with backspace) + this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT; + } +}; + +// ../node_modules/imask/esm/core/holder.js +function IMask(el, opts) { + return new IMask.InputMask(el, opts); +} + +// ../node_modules/imask/esm/masked/factory.js +function maskedClass(mask) { + if (mask == null) throw new Error("mask property should be defined"); + if (mask instanceof RegExp) return IMask.MaskedRegExp; + if (isString(mask)) return IMask.MaskedPattern; + if (mask === Date) return IMask.MaskedDate; + if (mask === Number) return IMask.MaskedNumber; + if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic; + if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask; + if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor; + if (mask instanceof Function) return IMask.MaskedFunction; + console.warn("Mask not found for mask", mask); + return IMask.Masked; +} +function normalizeOpts(opts) { + if (!opts) throw new Error("Options in not defined"); + if (IMask.Masked) { + if (opts.prototype instanceof IMask.Masked) return { + mask: opts + }; + const { + mask = void 0, + ...instanceOpts + } = opts instanceof IMask.Masked ? { + mask: opts + } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {}; + if (mask) { + const _mask = mask.mask; + return { + ...pick(mask, (_, k) => !k.startsWith("_")), + mask: mask.constructor, + _mask, + ...instanceOpts + }; + } + } + if (!isObject(opts)) return { + mask: opts + }; + return { + ...opts + }; +} +function createMask(opts) { + if (IMask.Masked && opts instanceof IMask.Masked) return opts; + const nOpts = normalizeOpts(opts); + const MaskedClass = maskedClass(nOpts.mask); + if (!MaskedClass) throw new Error("Masked class is not found for provided mask " + nOpts.mask + ", appropriate module needs to be imported manually before creating mask."); + if (nOpts.mask === MaskedClass) delete nOpts.mask; + if (nOpts._mask) { + nOpts.mask = nOpts._mask; + delete nOpts._mask; + } + return new MaskedClass(nOpts); +} +IMask.createMask = createMask; + +// ../node_modules/imask/esm/controls/mask-element.js +var MaskElement = class { + /** */ + /** */ + /** */ + /** Safely returns selection start */ + get selectionStart() { + let start; + try { + start = this._unsafeSelectionStart; + } catch { + } + return start != null ? start : this.value.length; + } + /** Safely returns selection end */ + get selectionEnd() { + let end; + try { + end = this._unsafeSelectionEnd; + } catch { + } + return end != null ? end : this.value.length; + } + /** Safely sets element selection */ + select(start, end) { + if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return; + try { + this._unsafeSelect(start, end); + } catch { + } + } + /** */ + get isActive() { + return false; + } + /** */ + /** */ + /** */ +}; +IMask.MaskElement = MaskElement; + +// ../node_modules/imask/esm/controls/html-mask-element.js +var KEY_Z = 90; +var KEY_Y = 89; +var HTMLMaskElement = class extends MaskElement { + /** HTMLElement to use mask on */ + constructor(input) { + super(); + this.input = input; + this._onKeydown = this._onKeydown.bind(this); + this._onInput = this._onInput.bind(this); + this._onBeforeinput = this._onBeforeinput.bind(this); + this._onCompositionEnd = this._onCompositionEnd.bind(this); + } + get rootElement() { + var _this$input$getRootNo, _this$input$getRootNo2, _this$input; + 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; + } + /** Is element in focus */ + get isActive() { + return this.input === this.rootElement.activeElement; + } + /** Binds HTMLElement events to mask internal events */ + bindEvents(handlers) { + this.input.addEventListener("keydown", this._onKeydown); + this.input.addEventListener("input", this._onInput); + this.input.addEventListener("beforeinput", this._onBeforeinput); + this.input.addEventListener("compositionend", this._onCompositionEnd); + this.input.addEventListener("drop", handlers.drop); + this.input.addEventListener("click", handlers.click); + this.input.addEventListener("focus", handlers.focus); + this.input.addEventListener("blur", handlers.commit); + this._handlers = handlers; + } + _onKeydown(e) { + if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) { + e.preventDefault(); + return this._handlers.redo(e); + } + if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) { + e.preventDefault(); + return this._handlers.undo(e); + } + if (!e.isComposing) this._handlers.selectionChange(e); + } + _onBeforeinput(e) { + if (e.inputType === "historyUndo" && this._handlers.undo) { + e.preventDefault(); + return this._handlers.undo(e); + } + if (e.inputType === "historyRedo" && this._handlers.redo) { + e.preventDefault(); + return this._handlers.redo(e); + } + } + _onCompositionEnd(e) { + this._handlers.input(e); + } + _onInput(e) { + if (!e.isComposing) this._handlers.input(e); + } + /** Unbinds HTMLElement events to mask internal events */ + unbindEvents() { + this.input.removeEventListener("keydown", this._onKeydown); + this.input.removeEventListener("input", this._onInput); + this.input.removeEventListener("beforeinput", this._onBeforeinput); + this.input.removeEventListener("compositionend", this._onCompositionEnd); + this.input.removeEventListener("drop", this._handlers.drop); + this.input.removeEventListener("click", this._handlers.click); + this.input.removeEventListener("focus", this._handlers.focus); + this.input.removeEventListener("blur", this._handlers.commit); + this._handlers = {}; + } +}; +IMask.HTMLMaskElement = HTMLMaskElement; + +// ../node_modules/imask/esm/controls/html-input-mask-element.js +var HTMLInputMaskElement = class extends HTMLMaskElement { + /** InputElement to use mask on */ + constructor(input) { + super(input); + this.input = input; + } + /** Returns InputElement selection start */ + get _unsafeSelectionStart() { + return this.input.selectionStart != null ? this.input.selectionStart : this.value.length; + } + /** Returns InputElement selection end */ + get _unsafeSelectionEnd() { + return this.input.selectionEnd; + } + /** Sets InputElement selection */ + _unsafeSelect(start, end) { + this.input.setSelectionRange(start, end); + } + get value() { + return this.input.value; + } + set value(value) { + this.input.value = value; + } +}; +IMask.HTMLMaskElement = HTMLMaskElement; + +// ../node_modules/imask/esm/controls/html-contenteditable-mask-element.js +var HTMLContenteditableMaskElement = class extends HTMLMaskElement { + /** Returns HTMLElement selection start */ + get _unsafeSelectionStart() { + const root = this.rootElement; + const selection = root.getSelection && root.getSelection(); + const anchorOffset = selection && selection.anchorOffset; + const focusOffset = selection && selection.focusOffset; + if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) { + return anchorOffset; + } + return focusOffset; + } + /** Returns HTMLElement selection end */ + get _unsafeSelectionEnd() { + const root = this.rootElement; + const selection = root.getSelection && root.getSelection(); + const anchorOffset = selection && selection.anchorOffset; + const focusOffset = selection && selection.focusOffset; + if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) { + return anchorOffset; + } + return focusOffset; + } + /** Sets HTMLElement selection */ + _unsafeSelect(start, end) { + if (!this.rootElement.createRange) return; + const range = this.rootElement.createRange(); + range.setStart(this.input.firstChild || this.input, start); + range.setEnd(this.input.lastChild || this.input, end); + const root = this.rootElement; + const selection = root.getSelection && root.getSelection(); + if (selection) { + selection.removeAllRanges(); + selection.addRange(range); + } + } + /** HTMLElement value */ + get value() { + return this.input.textContent || ""; + } + set value(value) { + this.input.textContent = value; + } +}; +IMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement; + +// ../node_modules/imask/esm/controls/input-history.js +var InputHistory = class _InputHistory { + constructor() { + this.states = []; + this.currentIndex = 0; + } + get currentState() { + return this.states[this.currentIndex]; + } + get isEmpty() { + return this.states.length === 0; + } + push(state) { + if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1; + this.states.push(state); + if (this.states.length > _InputHistory.MAX_LENGTH) this.states.shift(); + this.currentIndex = this.states.length - 1; + } + go(steps) { + this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1); + return this.currentState; + } + undo() { + return this.go(-1); + } + redo() { + return this.go(1); + } + clear() { + this.states.length = 0; + this.currentIndex = 0; + } +}; +InputHistory.MAX_LENGTH = 100; + +// ../node_modules/imask/esm/controls/input.js +var InputMask = class { + /** + View element + */ + /** Internal {@link Masked} model */ + constructor(el, opts) { + this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== "INPUT" && el.tagName !== "TEXTAREA" ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el); + this.masked = createMask(opts); + this._listeners = {}; + this._value = ""; + this._unmaskedValue = ""; + this._rawInputValue = ""; + this.history = new InputHistory(); + 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._onUndo = this._onUndo.bind(this); + this._onRedo = this._onRedo.bind(this); + this.alignCursor = this.alignCursor.bind(this); + this.alignCursorFriendly = this.alignCursorFriendly.bind(this); + this._bindEvents(); + this.updateValue(); + this._onChange(); + } + maskEquals(mask) { + var _this$masked; + return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask)); + } + /** Masked */ + get mask() { + return this.masked.mask; + } + set mask(mask) { + if (this.maskEquals(mask)) return; + if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) { + this.masked.updateOptions({ + mask + }); + return; + } + const masked = mask instanceof IMask.Masked ? mask : createMask({ + mask + }); + masked.unmaskedValue = this.masked.unmaskedValue; + this.masked = masked; + } + /** Raw value */ + get value() { + return this._value; + } + set value(str) { + if (this.value === str) return; + this.masked.value = str; + this.updateControl("auto"); + } + /** Unmasked value */ + get unmaskedValue() { + return this._unmaskedValue; + } + set unmaskedValue(str) { + if (this.unmaskedValue === str) return; + this.masked.unmaskedValue = str; + this.updateControl("auto"); + } + /** Raw input value */ + get rawInputValue() { + return this._rawInputValue; + } + set rawInputValue(str) { + if (this.rawInputValue === str) return; + this.masked.rawInputValue = str; + this.updateControl(); + this.alignCursor(); + } + /** Typed unmasked value */ + get typedValue() { + return this.masked.typedValue; + } + set typedValue(val) { + if (this.masked.typedValueEquals(val)) return; + this.masked.typedValue = val; + this.updateControl("auto"); + } + /** Display value */ + get displayValue() { + return this.masked.displayValue; + } + /** Starts listening to element events */ + _bindEvents() { + this.el.bindEvents({ + selectionChange: this._saveSelection, + input: this._onInput, + drop: this._onDrop, + click: this._onClick, + focus: this._onFocus, + commit: this._onChange, + undo: this._onUndo, + redo: this._onRedo + }); + } + /** Stops listening to element events */ + _unbindEvents() { + if (this.el) this.el.unbindEvents(); + } + /** Fires custom event */ + _fireEvent(ev, e) { + const listeners = this._listeners[ev]; + if (!listeners) return; + listeners.forEach((l) => l(e)); + } + /** Current selection start */ + get selectionStart() { + return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart; + } + /** Current cursor position */ + get cursorPos() { + return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd; + } + set cursorPos(pos) { + if (!this.el || !this.el.isActive) return; + this.el.select(pos, pos); + this._saveSelection(); + } + /** Stores current selection */ + _saveSelection() { + if (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 + }; + } + /** Syncronizes model value from view */ + updateValue() { + this.masked.value = this.el.value; + this._value = this.masked.value; + this._unmaskedValue = this.masked.unmaskedValue; + this._rawInputValue = this.masked.rawInputValue; + } + /** Syncronizes view from model value, fires change events */ + updateControl(cursorPos) { + const newUnmaskedValue = this.masked.unmaskedValue; + const newValue = this.masked.value; + const newRawInputValue = this.masked.rawInputValue; + const newDisplayValue = this.displayValue; + const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue; + this._unmaskedValue = newUnmaskedValue; + this._value = newValue; + this._rawInputValue = newRawInputValue; + if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue; + if (cursorPos === "auto") this.alignCursor(); + else if (cursorPos != null) this.cursorPos = cursorPos; + if (isChanged) this._fireChangeEvents(); + if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({ + unmaskedValue: newUnmaskedValue, + selection: { + start: this.selectionStart, + end: this.cursorPos + } + }); + } + /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */ + updateOptions(opts) { + const { + mask, + ...restOpts + } = opts; + const updateMask = !this.maskEquals(mask); + const updateOpts = this.masked.optionsIsChanged(restOpts); + if (updateMask) this.mask = mask; + if (updateOpts) this.masked.updateOptions(restOpts); + if (updateMask || updateOpts) this.updateControl(); + } + /** Updates cursor */ + updateCursor(cursorPos) { + if (cursorPos == null) return; + this.cursorPos = cursorPos; + this._delayUpdateCursor(cursorPos); + } + /** Delays cursor update to support mobile browsers */ + _delayUpdateCursor(cursorPos) { + this._abortUpdateCursor(); + this._changingCursorPos = cursorPos; + this._cursorChanging = setTimeout(() => { + if (!this.el) return; + this.cursorPos = this._changingCursorPos; + this._abortUpdateCursor(); + }, 10); + } + /** Fires custom events */ + _fireChangeEvents() { + this._fireEvent("accept", this._inputEvent); + if (this.masked.isComplete) this._fireEvent("complete", this._inputEvent); + } + /** Aborts delayed cursor update */ + _abortUpdateCursor() { + if (this._cursorChanging) { + clearTimeout(this._cursorChanging); + delete this._cursorChanging; + } + } + /** Aligns cursor to nearest available position */ + alignCursor() { + this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT)); + } + /** Aligns cursor only if selection is empty */ + alignCursorFriendly() { + if (this.selectionStart !== this.cursorPos) return; + this.alignCursor(); + } + /** Adds listener on custom event */ + on(ev, handler) { + if (!this._listeners[ev]) this._listeners[ev] = []; + this._listeners[ev].push(handler); + return this; + } + /** Removes custom event listener */ + off(ev, handler) { + if (!this._listeners[ev]) return this; + if (!handler) { + delete this._listeners[ev]; + return this; + } + const hIndex = this._listeners[ev].indexOf(handler); + if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1); + return this; + } + /** Handles view input event */ + _onInput(e) { + this._inputEvent = e; + this._abortUpdateCursor(); + const details = new ActionDetails({ + // new state + value: this.el.value, + cursorPos: this.cursorPos, + // old state + oldValue: this.displayValue, + oldSelection: this._selection + }); + const oldRawValue = this.masked.rawInputValue; + const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, { + input: true, + raw: true + }).offset; + const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE; + let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection); + if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE); + this.updateControl(cursorPos); + delete this._inputEvent; + } + /** Handles view change event and commits model value */ + _onChange() { + if (this.displayValue !== this.el.value) this.updateValue(); + this.masked.doCommit(); + this.updateControl(); + this._saveSelection(); + } + /** Handles view drop event, prevents by default */ + _onDrop(ev) { + ev.preventDefault(); + ev.stopPropagation(); + } + /** Restore last selection on focus */ + _onFocus(ev) { + this.alignCursorFriendly(); + } + /** Restore last selection on focus */ + _onClick(ev) { + this.alignCursorFriendly(); + } + _onUndo() { + this._applyHistoryState(this.history.undo()); + } + _onRedo() { + this._applyHistoryState(this.history.redo()); + } + _applyHistoryState(state) { + if (!state) return; + this._historyChanging = true; + this.unmaskedValue = state.unmaskedValue; + this.el.select(state.selection.start, state.selection.end); + this._saveSelection(); + this._historyChanging = false; + } + /** Unbind view events and removes element reference */ + destroy() { + this._unbindEvents(); + this._listeners.length = 0; + delete this.el; + } +}; +IMask.InputMask = InputMask; + +// ../node_modules/imask/esm/core/change-details.js +var ChangeDetails = class _ChangeDetails { + /** Inserted symbols */ + /** Additional offset if any changes occurred before tail */ + /** Raw inserted is used by dynamic mask */ + /** Can skip chars */ + static normalize(prep) { + return Array.isArray(prep) ? prep : [prep, new _ChangeDetails()]; + } + constructor(details) { + Object.assign(this, { + inserted: "", + rawInserted: "", + tailShift: 0, + skip: false + }, details); + } + /** Aggregate changes */ + aggregate(details) { + this.inserted += details.inserted; + this.rawInserted += details.rawInserted; + this.tailShift += details.tailShift; + this.skip = this.skip || details.skip; + return this; + } + /** Total offset considering all changes */ + get offset() { + return this.tailShift + this.inserted.length; + } + get consumed() { + return Boolean(this.rawInserted) || this.skip; + } + equals(details) { + return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip; + } +}; +IMask.ChangeDetails = ChangeDetails; + +// ../node_modules/imask/esm/core/continuous-tail-details.js +var ContinuousTailDetails = class { + /** Tail value as string */ + /** Tail start position */ + /** Start position */ + constructor(value, from, stop) { + if (value === void 0) { + value = ""; + } + if (from === void 0) { + from = 0; + } + this.value = value; + this.from = from; + this.stop = stop; + } + toString() { + return this.value; + } + extend(tail) { + this.value += String(tail); + } + appendTo(masked) { + return masked.append(this.toString(), { + tail: true + }).aggregate(masked._appendPlaceholder()); + } + get state() { + return { + value: this.value, + from: this.from, + stop: this.stop + }; + } + set state(state) { + Object.assign(this, state); + } + unshift(beforePos) { + if (!this.value.length || beforePos != null && this.from >= beforePos) return ""; + const shiftChar = this.value[0]; + this.value = this.value.slice(1); + return shiftChar; + } + shift() { + if (!this.value.length) return ""; + const shiftChar = this.value[this.value.length - 1]; + this.value = this.value.slice(0, -1); + return shiftChar; + } +}; + +// ../node_modules/imask/esm/masked/base.js +var Masked = class _Masked { + /** */ + /** */ + /** Transforms value before mask processing */ + /** Transforms each char before mask processing */ + /** Validates if value is acceptable */ + /** Does additional processing at the end of editing */ + /** Format typed value to string */ + /** Parse string to get typed value */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + /** */ + constructor(opts) { + this._value = ""; + this._update({ + ..._Masked.DEFAULTS, + ...opts + }); + this._initialized = true; + } + /** Sets and applies new options */ + updateOptions(opts) { + if (!this.optionsIsChanged(opts)) return; + this.withValueRefresh(this._update.bind(this, opts)); + } + /** Sets new options */ + _update(opts) { + Object.assign(this, opts); + } + /** Mask state */ + get state() { + return { + _value: this.value, + _rawInputValue: this.rawInputValue + }; + } + set state(state) { + this._value = state._value; + } + /** Resets value */ + reset() { + this._value = ""; + } + get value() { + return this._value; + } + set value(value) { + this.resolve(value, { + input: true + }); + } + /** Resolve new value */ + resolve(value, flags) { + if (flags === void 0) { + flags = { + input: true + }; + } + this.reset(); + this.append(value, flags, ""); + this.doCommit(); + } + get unmaskedValue() { + return this.value; + } + set unmaskedValue(value) { + this.resolve(value, {}); + } + get typedValue() { + return this.parse ? this.parse(this.value, this) : this.unmaskedValue; + } + set typedValue(value) { + if (this.format) { + this.value = this.format(value, this); + } else { + this.unmaskedValue = String(value); + } + } + /** Value that includes raw user input */ + get rawInputValue() { + return this.extractInput(0, this.displayValue.length, { + raw: true + }); + } + set rawInputValue(value) { + this.resolve(value, { + raw: true + }); + } + get displayValue() { + return this.value; + } + get isComplete() { + return true; + } + get isFilled() { + return this.isComplete; + } + /** Finds nearest input position in direction */ + nearestInputPos(cursorPos, direction) { + return cursorPos; + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return Math.min(this.displayValue.length, toPos - fromPos); + } + /** Extracts value in range considering flags */ + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return this.displayValue.slice(fromPos, toPos); + } + /** Extracts tail in range */ + extractTail(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos); + } + /** Appends tail */ + appendTail(tail) { + if (isString(tail)) tail = new ContinuousTailDetails(String(tail)); + return tail.appendTo(this); + } + /** Appends char */ + _appendCharRaw(ch, flags) { + if (!ch) return new ChangeDetails(); + this._value += ch; + return new ChangeDetails({ + inserted: ch, + rawInserted: ch + }); + } + /** Appends char */ + _appendChar(ch, flags, checkTail) { + if (flags === void 0) { + flags = {}; + } + const consistentState = this.state; + let details; + [ch, details] = this.doPrepareChar(ch, flags); + if (ch) { + details = details.aggregate(this._appendCharRaw(ch, flags)); + if (!details.rawInserted && this.autofix === "pad") { + const noFixState = this.state; + this.state = consistentState; + let fixDetails = this.pad(flags); + const chDetails = this._appendCharRaw(ch, flags); + fixDetails = fixDetails.aggregate(chDetails); + if (chDetails.rawInserted || fixDetails.equals(details)) { + details = fixDetails; + } else { + this.state = noFixState; + } + } + } + if (details.inserted) { + let consistentTail; + let appended = this.doValidate(flags) !== false; + if (appended && checkTail != null) { + const beforeTailState = this.state; + if (this.overwrite === true) { + consistentTail = checkTail.state; + for (let i = 0; i < details.rawInserted.length; ++i) { + checkTail.unshift(this.displayValue.length - details.tailShift); + } + } + let tailDetails = this.appendTail(checkTail); + appended = tailDetails.rawInserted.length === checkTail.toString().length; + if (!(appended && tailDetails.inserted) && this.overwrite === "shift") { + this.state = beforeTailState; + consistentTail = checkTail.state; + for (let i = 0; i < details.rawInserted.length; ++i) { + checkTail.shift(); + } + tailDetails = this.appendTail(checkTail); + appended = tailDetails.rawInserted.length === checkTail.toString().length; + } + if (appended && tailDetails.inserted) this.state = beforeTailState; + } + if (!appended) { + details = new ChangeDetails(); + this.state = consistentState; + if (checkTail && consistentTail) checkTail.state = consistentTail; + } + } + return details; + } + /** Appends optional placeholder at the end */ + _appendPlaceholder() { + return new ChangeDetails(); + } + /** Appends optional eager placeholder at the end */ + _appendEager() { + return new ChangeDetails(); + } + /** Appends symbols considering flags */ + append(str, flags, tail) { + if (!isString(str)) throw new Error("value should be string"); + const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail; + if (flags != null && flags.tail) flags._beforeTailState = this.state; + let details; + [str, details] = this.doPrepare(str, flags); + for (let ci = 0; ci < str.length; ++ci) { + const d = this._appendChar(str[ci], flags, checkTail); + if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break; + details.aggregate(d); + } + if ((this.eager === true || this.eager === "append") && flags != null && flags.input && str) { + details.aggregate(this._appendEager()); + } + if (checkTail != null) { + details.tailShift += this.appendTail(checkTail).tailShift; + } + return details; + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos); + return new ChangeDetails(); + } + /** Calls function and reapplies current value */ + withValueRefresh(fn) { + if (this._refreshing || !this._initialized) return fn(); + this._refreshing = true; + const rawInput = this.rawInputValue; + const value = this.value; + const ret = fn(); + this.rawInputValue = rawInput; + if (this.value && this.value !== value && value.indexOf(this.value) === 0) { + this.append(value.slice(this.displayValue.length), {}, ""); + this.doCommit(); + } + delete this._refreshing; + return ret; + } + runIsolated(fn) { + if (this._isolated || !this._initialized) return fn(this); + this._isolated = true; + const state = this.state; + const ret = fn(this); + this.state = state; + delete this._isolated; + return ret; + } + doSkipInvalid(ch, flags, checkTail) { + return Boolean(this.skipInvalid); + } + /** Prepares string before mask processing */ + doPrepare(str, flags) { + if (flags === void 0) { + flags = {}; + } + return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str); + } + /** Prepares each char before mask processing */ + doPrepareChar(str, flags) { + if (flags === void 0) { + flags = {}; + } + return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str); + } + /** Validates if value is acceptable */ + doValidate(flags) { + return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags)); + } + /** Does additional processing at the end of editing */ + doCommit() { + if (this.commit) this.commit(this.value, this); + } + splice(start, deleteCount, inserted, removeDirection, flags) { + if (inserted === void 0) { + inserted = ""; + } + if (removeDirection === void 0) { + removeDirection = DIRECTION.NONE; + } + if (flags === void 0) { + flags = { + input: true + }; + } + const tailPos = start + deleteCount; + const tail = this.extractTail(tailPos); + const eagerRemove = this.eager === true || this.eager === "remove"; + let oldRawValue; + if (eagerRemove) { + removeDirection = forceDirection(removeDirection); + oldRawValue = this.extractInput(0, tailPos, { + raw: true + }); + } + let startChangePos = start; + const details = new ChangeDetails(); + if (removeDirection !== DIRECTION.NONE) { + startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection); + details.tailShift = startChangePos - start; + } + details.aggregate(this.remove(startChangePos)); + if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) { + if (removeDirection === DIRECTION.FORCE_LEFT) { + let valLength; + while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) { + details.aggregate(new ChangeDetails({ + tailShift: -1 + })).aggregate(this.remove(valLength - 1)); + } + } else if (removeDirection === DIRECTION.FORCE_RIGHT) { + tail.unshift(); + } + } + return details.aggregate(this.append(inserted, flags, tail)); + } + maskEquals(mask) { + return this.mask === mask; + } + optionsIsChanged(opts) { + return !objectIncludes(this, opts); + } + typedValueEquals(value) { + const tval = this.typedValue; + 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); + } + pad(flags) { + return new ChangeDetails(); + } +}; +Masked.DEFAULTS = { + skipInvalid: true +}; +Masked.EMPTY_VALUES = [void 0, null, ""]; +IMask.Masked = Masked; + +// ../node_modules/imask/esm/masked/pattern/chunk-tail-details.js +var ChunksTailDetails = class _ChunksTailDetails { + /** */ + constructor(chunks, from) { + if (chunks === void 0) { + chunks = []; + } + if (from === void 0) { + from = 0; + } + this.chunks = chunks; + this.from = from; + } + toString() { + return this.chunks.map(String).join(""); + } + extend(tailChunk) { + if (!String(tailChunk)) return; + tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk; + const lastChunk = this.chunks[this.chunks.length - 1]; + const extendLast = lastChunk && // if stops are same or tail has no stop + (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) && // if tail chunk goes just after last chunk + tailChunk.from === lastChunk.from + lastChunk.toString().length; + if (tailChunk instanceof ContinuousTailDetails) { + if (extendLast) { + lastChunk.extend(tailChunk.toString()); + } else { + this.chunks.push(tailChunk); + } + } else if (tailChunk instanceof _ChunksTailDetails) { + if (tailChunk.stop == null) { + let firstTailChunk; + while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) { + firstTailChunk = tailChunk.chunks.shift(); + firstTailChunk.from += tailChunk.from; + this.extend(firstTailChunk); + } + } + if (tailChunk.toString()) { + tailChunk.stop = tailChunk.blockIndex; + this.chunks.push(tailChunk); + } + } + } + appendTo(masked) { + if (!(masked instanceof IMask.MaskedPattern)) { + const tail = new ContinuousTailDetails(this.toString()); + return tail.appendTo(masked); + } + const details = new ChangeDetails(); + for (let ci = 0; ci < this.chunks.length; ++ci) { + const chunk = this.chunks[ci]; + const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length); + const stop = chunk.stop; + let chunkBlock; + if (stop != null && // if block not found or stop is behind lastBlock + (!lastBlockIter || lastBlockIter.index <= stop)) { + if (chunk instanceof _ChunksTailDetails || // for continuous block also check if stop is exist + masked._stops.indexOf(stop) >= 0) { + details.aggregate(masked._appendPlaceholder(stop)); + } + chunkBlock = chunk instanceof _ChunksTailDetails && masked._blocks[stop]; + } + if (chunkBlock) { + const tailDetails = chunkBlock.appendTail(chunk); + details.aggregate(tailDetails); + const remainChars = chunk.toString().slice(tailDetails.rawInserted.length); + if (remainChars) details.aggregate(masked.append(remainChars, { + tail: true + })); + } else { + details.aggregate(masked.append(chunk.toString(), { + tail: true + })); + } + } + return details; + } + get state() { + return { + chunks: this.chunks.map((c) => c.state), + from: this.from, + stop: this.stop, + blockIndex: this.blockIndex + }; + } + set state(state) { + const { + chunks, + ...props + } = state; + Object.assign(this, props); + this.chunks = chunks.map((cstate) => { + const chunk = "chunks" in cstate ? new _ChunksTailDetails() : new ContinuousTailDetails(); + chunk.state = cstate; + return chunk; + }); + } + unshift(beforePos) { + if (!this.chunks.length || beforePos != null && this.from >= beforePos) return ""; + const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos; + let ci = 0; + while (ci < this.chunks.length) { + const chunk = this.chunks[ci]; + const shiftChar = chunk.unshift(chunkShiftPos); + if (chunk.toString()) { + if (!shiftChar) break; + ++ci; + } else { + this.chunks.splice(ci, 1); + } + if (shiftChar) return shiftChar; + } + return ""; + } + shift() { + if (!this.chunks.length) return ""; + let ci = this.chunks.length - 1; + while (0 <= ci) { + const chunk = this.chunks[ci]; + const shiftChar = chunk.shift(); + if (chunk.toString()) { + if (!shiftChar) break; + --ci; + } else { + this.chunks.splice(ci, 1); + } + if (shiftChar) return shiftChar; + } + return ""; + } +}; + +// ../node_modules/imask/esm/masked/pattern/cursor.js +var PatternCursor = class { + constructor(masked, pos) { + this.masked = masked; + this._log = []; + const { + offset, + index + } = masked._mapPosToBlock(pos) || (pos < 0 ? ( + // first + { + index: 0, + offset: 0 + } + ) : ( + // last + { + index: this.masked._blocks.length, + offset: 0 + } + )); + this.offset = offset; + this.index = index; + this.ok = false; + } + 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(s) { + Object.assign(this, s); + } + pushState() { + this._log.push(this.state); + } + popState() { + const s = this._log.pop(); + if (s) this.state = s; + return s; + } + bindBlock() { + if (this.block) return; + if (this.index < 0) { + this.index = 0; + this.offset = 0; + } + if (this.index >= this.masked._blocks.length) { + this.index = this.masked._blocks.length - 1; + this.offset = this.block.displayValue.length; + } + } + _pushLeft(fn) { + this.pushState(); + for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) { + var _this$block; + if (fn()) return this.ok = true; + } + return this.ok = false; + } + _pushRight(fn) { + this.pushState(); + for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) { + if (fn()) return this.ok = true; + } + return this.ok = false; + } + pushLeftBeforeFilled() { + return this._pushLeft(() => { + if (this.block.isFixed || !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT); + if (this.offset !== 0) return true; + }); + } + pushLeftBeforeInput() { + return this._pushLeft(() => { + if (this.block.isFixed) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT); + return true; + }); + } + pushLeftBeforeRequired() { + return this._pushLeft(() => { + if (this.block.isFixed || this.block.isOptional && !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT); + return true; + }); + } + pushRightBeforeFilled() { + return this._pushRight(() => { + if (this.block.isFixed || !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT); + if (this.offset !== this.block.value.length) return true; + }); + } + pushRightBeforeInput() { + return this._pushRight(() => { + if (this.block.isFixed) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE); + return true; + }); + } + pushRightBeforeRequired() { + return this._pushRight(() => { + if (this.block.isFixed || this.block.isOptional && !this.block.value) return; + this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE); + return true; + }); + } +}; + +// ../node_modules/imask/esm/masked/pattern/fixed-definition.js +var PatternFixedDefinition = class { + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + constructor(opts) { + Object.assign(this, opts); + this._value = ""; + this.isFixed = true; + } + 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 = false; + this._value = ""; + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this._value.length; + } + this._value = this._value.slice(0, fromPos) + this._value.slice(toPos); + if (!this._value) this._isRawInput = false; + return new ChangeDetails(); + } + nearestInputPos(cursorPos, direction) { + if (direction === void 0) { + direction = DIRECTION.NONE; + } + const minPos = 0; + const maxPos = this._value.length; + switch (direction) { + case DIRECTION.LEFT: + case DIRECTION.FORCE_LEFT: + return minPos; + case DIRECTION.NONE: + case DIRECTION.RIGHT: + case DIRECTION.FORCE_RIGHT: + default: + return maxPos; + } + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this._value.length; + } + return this._isRawInput ? toPos - fromPos : 0; + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this._value.length; + } + if (flags === void 0) { + flags = {}; + } + return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || ""; + } + get isComplete() { + return true; + } + get isFilled() { + return Boolean(this._value); + } + _appendChar(ch, flags) { + if (flags === void 0) { + flags = {}; + } + if (this.isFilled) return new ChangeDetails(); + const appendEager = this.eager === true || this.eager === "append"; + const appended = this.char === ch; + const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail; + const details = new ChangeDetails({ + inserted: this.char, + rawInserted: isResolved ? this.char : "" + }); + this._value = this.char; + this._isRawInput = isResolved && (flags.raw || flags.input); + return details; + } + _appendEager() { + return this._appendChar(this.char, { + tail: true + }); + } + _appendPlaceholder() { + const details = new ChangeDetails(); + if (this.isFilled) return details; + this._value = details.inserted = this.char; + return details; + } + extractTail() { + return new ContinuousTailDetails(""); + } + appendTail(tail) { + if (isString(tail)) tail = new ContinuousTailDetails(String(tail)); + return tail.appendTo(this); + } + append(str, flags, tail) { + const details = this._appendChar(str[0], flags); + if (tail != null) { + details.tailShift += this.appendTail(tail).tailShift; + } + return details; + } + doCommit() { + } + get state() { + return { + _value: this._value, + _rawInputValue: this.rawInputValue + }; + } + set state(state) { + this._value = state._value; + this._isRawInput = Boolean(state._rawInputValue); + } + pad(flags) { + return this._appendPlaceholder(); + } +}; + +// ../node_modules/imask/esm/masked/pattern/input-definition.js +var PatternInputDefinition = class { + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + /** */ + constructor(opts) { + const { + parent, + isOptional, + placeholderChar, + displayChar, + lazy, + eager, + ...maskOpts + } = opts; + this.masked = createMask(maskOpts); + Object.assign(this, { + parent, + isOptional, + placeholderChar, + displayChar, + lazy, + eager + }); + } + reset() { + this.isFilled = false; + this.masked.reset(); + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.value.length; + } + if (fromPos === 0 && toPos >= 1) { + this.isFilled = false; + return this.masked.remove(fromPos, toPos); + } + return new ChangeDetails(); + } + 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(ch, flags) { + if (flags === void 0) { + flags = {}; + } + if (this.isFilled) return new ChangeDetails(); + const state = this.masked.state; + let details = this.masked._appendChar(ch, this.currentMaskFlags(flags)); + if (details.inserted && this.doValidate(flags) === false) { + details = new ChangeDetails(); + this.masked.state = state; + } + if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) { + details.inserted = this.placeholderChar; + } + details.skip = !details.inserted && !this.isOptional; + this.isFilled = Boolean(details.inserted); + return details; + } + append(str, flags, tail) { + return this.masked.append(str, this.currentMaskFlags(flags), tail); + } + _appendPlaceholder() { + if (this.isFilled || this.isOptional) return new ChangeDetails(); + this.isFilled = true; + return new ChangeDetails({ + inserted: this.placeholderChar + }); + } + _appendEager() { + return new ChangeDetails(); + } + extractTail(fromPos, toPos) { + return this.masked.extractTail(fromPos, toPos); + } + appendTail(tail) { + return this.masked.appendTail(tail); + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.value.length; + } + return this.masked.extractInput(fromPos, toPos, flags); + } + nearestInputPos(cursorPos, direction) { + if (direction === void 0) { + direction = DIRECTION.NONE; + } + const minPos = 0; + const maxPos = this.value.length; + const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos); + switch (direction) { + case DIRECTION.LEFT: + case DIRECTION.FORCE_LEFT: + return this.isComplete ? boundPos : minPos; + case DIRECTION.RIGHT: + case DIRECTION.FORCE_RIGHT: + return this.isComplete ? boundPos : maxPos; + case DIRECTION.NONE: + default: + return boundPos; + } + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.value.length; + } + return this.value.slice(fromPos, toPos).length; + } + doValidate(flags) { + return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags))); + } + doCommit() { + this.masked.doCommit(); + } + get state() { + return { + _value: this.value, + _rawInputValue: this.rawInputValue, + masked: this.masked.state, + isFilled: this.isFilled + }; + } + set state(state) { + this.masked.state = state.masked; + this.isFilled = state.isFilled; + } + currentMaskFlags(flags) { + var _flags$_beforeTailSta; + return { + ...flags, + _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState) + }; + } + pad(flags) { + return new ChangeDetails(); + } +}; +PatternInputDefinition.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]/, + // http://stackoverflow.com/a/22075070 + "*": /./ +}; + +// ../node_modules/imask/esm/masked/regexp.js +var MaskedRegExp = class extends Masked { + /** */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const mask = opts.mask; + if (mask) opts.validate = (value) => value.search(mask) >= 0; + super._update(opts); + } +}; +IMask.MaskedRegExp = MaskedRegExp; + +// ../node_modules/imask/esm/masked/pattern.js +var MaskedPattern = class _MaskedPattern extends Masked { + /** */ + /** */ + /** Single char for empty input */ + /** Single char for filled input */ + /** Show placeholder only when needed */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + constructor(opts) { + super({ + ..._MaskedPattern.DEFAULTS, + ...opts, + definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions) + }); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + opts.definitions = Object.assign({}, this.definitions, opts.definitions); + super._update(opts); + this._rebuildMask(); + } + _rebuildMask() { + const defs = this.definitions; + this._blocks = []; + this.exposeBlock = void 0; + this._stops = []; + this._maskedBlocks = {}; + const pattern = this.mask; + if (!pattern || !defs) return; + let unmaskingBlock = false; + let optionalBlock = false; + for (let i = 0; i < pattern.length; ++i) { + if (this.blocks) { + const p = pattern.slice(i); + const bNames = Object.keys(this.blocks).filter((bName2) => p.indexOf(bName2) === 0); + bNames.sort((a, b) => b.length - a.length); + const bName = bNames[0]; + if (bName) { + const { + expose, + repeat, + ...bOpts + } = normalizeOpts(this.blocks[bName]); + const blockOpts = { + lazy: this.lazy, + eager: this.eager, + placeholderChar: this.placeholderChar, + displayChar: this.displayChar, + overwrite: this.overwrite, + autofix: this.autofix, + ...bOpts, + repeat, + parent: this + }; + const maskedBlock = repeat != null ? new IMask.RepeatBlock( + blockOpts + /* TODO */ + ) : createMask(blockOpts); + if (maskedBlock) { + this._blocks.push(maskedBlock); + if (expose) this.exposeBlock = maskedBlock; + if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = []; + this._maskedBlocks[bName].push(this._blocks.length - 1); + } + i += bName.length - 1; + continue; + } + } + let char = pattern[i]; + let isInput = char in defs; + if (char === _MaskedPattern.STOP_CHAR) { + this._stops.push(this._blocks.length); + continue; + } + if (char === "{" || char === "}") { + unmaskingBlock = !unmaskingBlock; + continue; + } + if (char === "[" || char === "]") { + optionalBlock = !optionalBlock; + continue; + } + if (char === _MaskedPattern.ESCAPE_CHAR) { + ++i; + char = pattern[i]; + if (!char) break; + isInput = false; + } + const def = isInput ? new PatternInputDefinition({ + isOptional: optionalBlock, + lazy: this.lazy, + eager: this.eager, + placeholderChar: this.placeholderChar, + displayChar: this.displayChar, + ...normalizeOpts(defs[char]), + parent: this + }) : new PatternFixedDefinition({ + char, + eager: this.eager, + isUnmasking: unmaskingBlock + }); + this._blocks.push(def); + } + } + get state() { + return { + ...super.state, + _blocks: this._blocks.map((b) => b.state) + }; + } + set state(state) { + if (!state) { + this.reset(); + return; + } + const { + _blocks, + ...maskedState + } = state; + this._blocks.forEach((b, bi) => b.state = _blocks[bi]); + super.state = maskedState; + } + reset() { + super.reset(); + this._blocks.forEach((b) => b.reset()); + } + get isComplete() { + return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every((b) => b.isComplete); + } + get isFilled() { + return this._blocks.every((b) => b.isFilled); + } + get isFixed() { + return this._blocks.every((b) => b.isFixed); + } + get isOptional() { + return this._blocks.every((b) => b.isOptional); + } + doCommit() { + this._blocks.forEach((b) => b.doCommit()); + super.doCommit(); + } + get unmaskedValue() { + return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, ""); + } + set unmaskedValue(unmaskedValue) { + if (this.exposeBlock) { + const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length); + this.exposeBlock.unmaskedValue = unmaskedValue; + this.appendTail(tail); + this.doCommit(); + } else super.unmaskedValue = unmaskedValue; + } + get value() { + return this.exposeBlock ? this.exposeBlock.value : ( + // TODO return _value when not in change? + this._blocks.reduce((str, b) => str += b.value, "") + ); + } + set value(value) { + if (this.exposeBlock) { + const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length); + this.exposeBlock.value = value; + this.appendTail(tail); + this.doCommit(); + } else super.value = value; + } + get typedValue() { + return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue; + } + set typedValue(value) { + if (this.exposeBlock) { + const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length); + this.exposeBlock.typedValue = value; + this.appendTail(tail); + this.doCommit(); + } else super.typedValue = value; + } + get displayValue() { + return this._blocks.reduce((str, b) => str += b.displayValue, ""); + } + appendTail(tail) { + return super.appendTail(tail).aggregate(this._appendPlaceholder()); + } + _appendEager() { + var _this$_mapPosToBlock; + const details = new ChangeDetails(); + let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index; + if (startBlockIndex == null) return details; + if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex; + for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) { + const d = this._blocks[bi]._appendEager(); + if (!d.inserted) break; + details.aggregate(d); + } + return details; + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const blockIter = this._mapPosToBlock(this.displayValue.length); + const details = new ChangeDetails(); + if (!blockIter) return details; + for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) { + var _flags$_beforeTailSta; + const blockDetails = block._appendChar(ch, { + ...flags, + _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi] + }); + details.aggregate(blockDetails); + if (blockDetails.consumed) break; + } + return details; + } + extractTail(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const chunkTail = new ChunksTailDetails(); + if (fromPos === toPos) return chunkTail; + this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => { + const blockChunk = b.extractTail(bFromPos, bToPos); + blockChunk.stop = this._findStopBefore(bi); + blockChunk.from = this._blockStartPos(bi); + if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi; + chunkTail.extend(blockChunk); + }); + return chunkTail; + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + if (flags === void 0) { + flags = {}; + } + if (fromPos === toPos) return ""; + let input = ""; + this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos2, toPos2) => { + input += b.extractInput(fromPos2, toPos2, flags); + }); + return input; + } + _findStopBefore(blockIndex) { + let stopBefore; + for (let si = 0; si < this._stops.length; ++si) { + const stop = this._stops[si]; + if (stop <= blockIndex) stopBefore = stop; + else break; + } + return stopBefore; + } + /** Appends placeholder depending on laziness */ + _appendPlaceholder(toBlockIndex) { + const details = new ChangeDetails(); + if (this.lazy && toBlockIndex == null) return details; + const startBlockIter = this._mapPosToBlock(this.displayValue.length); + if (!startBlockIter) return details; + const startBlockIndex = startBlockIter.index; + const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length; + this._blocks.slice(startBlockIndex, endBlockIndex).forEach((b) => { + if (!b.lazy || toBlockIndex != null) { + var _blocks2; + details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length)); + } + }); + return details; + } + /** Finds block in pos */ + _mapPosToBlock(pos) { + let accVal = ""; + for (let bi = 0; bi < this._blocks.length; ++bi) { + const block = this._blocks[bi]; + const blockStartPos = accVal.length; + accVal += block.displayValue; + if (pos <= accVal.length) { + return { + index: bi, + offset: pos - blockStartPos + }; + } + } + } + _blockStartPos(blockIndex) { + return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0); + } + _forEachBlocksInRange(fromPos, toPos, fn) { + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const fromBlockIter = this._mapPosToBlock(fromPos); + if (fromBlockIter) { + const toBlockIter = this._mapPosToBlock(toPos); + const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index; + const fromBlockStartPos = fromBlockIter.offset; + const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length; + fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos); + if (toBlockIter && !isSameBlock) { + for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) { + fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length); + } + fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset); + } + } + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const removeDetails = super.remove(fromPos, toPos); + this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => { + removeDetails.aggregate(b.remove(bFromPos, bToPos)); + }); + return removeDetails; + } + nearestInputPos(cursorPos, direction) { + if (direction === void 0) { + direction = DIRECTION.NONE; + } + if (!this._blocks.length) return 0; + const cursor = new PatternCursor(this, cursorPos); + if (direction === DIRECTION.NONE) { + if (cursor.pushRightBeforeInput()) return cursor.pos; + cursor.popState(); + if (cursor.pushLeftBeforeInput()) return cursor.pos; + return this.displayValue.length; + } + if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) { + if (direction === DIRECTION.LEFT) { + cursor.pushRightBeforeFilled(); + if (cursor.ok && cursor.pos === cursorPos) return cursorPos; + cursor.popState(); + } + cursor.pushLeftBeforeInput(); + cursor.pushLeftBeforeRequired(); + cursor.pushLeftBeforeFilled(); + if (direction === DIRECTION.LEFT) { + cursor.pushRightBeforeInput(); + cursor.pushRightBeforeRequired(); + if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos; + cursor.popState(); + if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos; + cursor.popState(); + } + if (cursor.ok) return cursor.pos; + if (direction === DIRECTION.FORCE_LEFT) return 0; + cursor.popState(); + if (cursor.ok) return cursor.pos; + cursor.popState(); + if (cursor.ok) return cursor.pos; + return 0; + } + if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) { + cursor.pushRightBeforeInput(); + cursor.pushRightBeforeRequired(); + if (cursor.pushRightBeforeFilled()) return cursor.pos; + if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length; + cursor.popState(); + if (cursor.ok) return cursor.pos; + cursor.popState(); + if (cursor.ok) return cursor.pos; + return this.nearestInputPos(cursorPos, DIRECTION.LEFT); + } + return cursorPos; + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + let total = 0; + this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => { + total += b.totalInputPositions(bFromPos, bToPos); + }); + return total; + } + /** Get block by name */ + maskedBlock(name) { + return this.maskedBlocks(name)[0]; + } + /** Get all blocks by name */ + maskedBlocks(name) { + const indices = this._maskedBlocks[name]; + if (!indices) return []; + return indices.map((gi) => this._blocks[gi]); + } + pad(flags) { + const details = new ChangeDetails(); + this._forEachBlocksInRange(0, this.displayValue.length, (b) => details.aggregate(b.pad(flags))); + return details; + } +}; +MaskedPattern.DEFAULTS = { + ...Masked.DEFAULTS, + lazy: true, + placeholderChar: "_" +}; +MaskedPattern.STOP_CHAR = "`"; +MaskedPattern.ESCAPE_CHAR = "\\"; +MaskedPattern.InputDefinition = PatternInputDefinition; +MaskedPattern.FixedDefinition = PatternFixedDefinition; +IMask.MaskedPattern = MaskedPattern; + +// ../node_modules/imask/esm/masked/range.js +var MaskedRange = class extends MaskedPattern { + /** + Optionally sets max length of pattern. + Used when pattern length is longer then `to` param length. Pads zeros at start in this case. + */ + /** Min bound */ + /** Max bound */ + get _matchFrom() { + return this.maxLength - String(this.from).length; + } + constructor(opts) { + super(opts); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const { + to = this.to || 0, + from = this.from || 0, + maxLength = this.maxLength || 0, + autofix = this.autofix, + ...patternOpts + } = opts; + this.to = to; + this.from = from; + this.maxLength = Math.max(String(to).length, maxLength); + this.autofix = autofix; + const fromStr = String(this.from).padStart(this.maxLength, "0"); + const toStr = String(this.to).padStart(this.maxLength, "0"); + let sameCharsCount = 0; + while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount; + patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, "\\0") + "0".repeat(this.maxLength - sameCharsCount); + super._update(patternOpts); + } + get isComplete() { + return super.isComplete && Boolean(this.value); + } + boundaries(str) { + let minstr = ""; + let maxstr = ""; + const [, placeholder, num] = str.match(/^(\D*)(\d*)(\D*)/) || []; + if (num) { + minstr = "0".repeat(placeholder.length) + num; + maxstr = "9".repeat(placeholder.length) + num; + } + minstr = minstr.padEnd(this.maxLength, "0"); + maxstr = maxstr.padEnd(this.maxLength, "9"); + return [minstr, maxstr]; + } + doPrepareChar(ch, flags) { + if (flags === void 0) { + flags = {}; + } + let details; + [ch, details] = super.doPrepareChar(ch.replace(/\D/g, ""), flags); + if (!ch) details.skip = !this.isComplete; + return [ch, details]; + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags); + const fromStr = String(this.from).padStart(this.maxLength, "0"); + const toStr = String(this.to).padStart(this.maxLength, "0"); + const [minstr, maxstr] = this.boundaries(this.value + ch); + if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags); + if (Number(minstr) > this.to) { + if (!flags.tail && this.autofix === "pad" && this.value.length + 1 < this.maxLength) { + return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags)); + } + return super._appendCharRaw(toStr[this.value.length], flags); + } + return super._appendCharRaw(ch, flags); + } + doValidate(flags) { + const str = this.value; + const firstNonZero = str.search(/[^0]/); + if (firstNonZero === -1 && str.length <= this._matchFrom) return true; + const [minstr, maxstr] = this.boundaries(str); + return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags); + } + pad(flags) { + const details = new ChangeDetails(); + if (this.value.length === this.maxLength) return details; + const value = this.value; + const padLength = this.maxLength - this.value.length; + if (padLength) { + this.reset(); + for (let i = 0; i < padLength; ++i) { + details.aggregate(super._appendCharRaw("0", flags)); + } + value.split("").forEach((ch) => this._appendCharRaw(ch)); + } + return details; + } +}; +IMask.MaskedRange = MaskedRange; + +// ../node_modules/imask/esm/masked/date.js +var DefaultPattern = "d{.}`m{.}`Y"; +var MaskedDate = class _MaskedDate extends MaskedPattern { + static extractPatternOptions(opts) { + const { + mask, + pattern, + ...patternOpts + } = opts; + return { + ...patternOpts, + mask: isString(mask) ? mask : pattern + }; + } + /** Pattern mask for date according to {@link MaskedDate#format} */ + /** Start date */ + /** End date */ + /** Format typed value to string */ + /** Parse string to get typed value */ + constructor(opts) { + super(_MaskedDate.extractPatternOptions({ + ..._MaskedDate.DEFAULTS, + ...opts + })); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const { + mask, + pattern, + blocks, + ...patternOpts + } = { + ..._MaskedDate.DEFAULTS, + ...opts + }; + const patternBlocks = Object.assign({}, _MaskedDate.GET_DEFAULT_BLOCKS()); + if (opts.min) patternBlocks.Y.from = opts.min.getFullYear(); + if (opts.max) patternBlocks.Y.to = opts.max.getFullYear(); + if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) { + patternBlocks.m.from = opts.min.getMonth() + 1; + patternBlocks.m.to = opts.max.getMonth() + 1; + if (patternBlocks.m.from === patternBlocks.m.to) { + patternBlocks.d.from = opts.min.getDate(); + patternBlocks.d.to = opts.max.getDate(); + } + } + Object.assign(patternBlocks, this.blocks, blocks); + super._update({ + ...patternOpts, + mask: isString(mask) ? mask : pattern, + blocks: patternBlocks + }); + } + doValidate(flags) { + const date = this.date; + return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max)); + } + /** Checks if date is exists */ + isDateExist(str) { + return this.format(this.parse(str, this), this).indexOf(str) >= 0; + } + /** Parsed Date */ + get date() { + return this.typedValue; + } + set date(date) { + this.typedValue = date; + } + get typedValue() { + return this.isComplete ? super.typedValue : null; + } + set typedValue(value) { + super.typedValue = value; + } + maskEquals(mask) { + return mask === Date || super.maskEquals(mask); + } + optionsIsChanged(opts) { + return super.optionsIsChanged(_MaskedDate.extractPatternOptions(opts)); + } +}; +MaskedDate.GET_DEFAULT_BLOCKS = () => ({ + d: { + mask: MaskedRange, + from: 1, + to: 31, + maxLength: 2 + }, + m: { + mask: MaskedRange, + from: 1, + to: 12, + maxLength: 2 + }, + Y: { + mask: MaskedRange, + from: 1900, + to: 9999 + } +}); +MaskedDate.DEFAULTS = { + ...MaskedPattern.DEFAULTS, + mask: Date, + pattern: DefaultPattern, + format: (date, masked) => { + if (!date) return ""; + const day = String(date.getDate()).padStart(2, "0"); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const year = date.getFullYear(); + return [day, month, year].join("."); + }, + parse: (str, masked) => { + const [day, month, year] = str.split(".").map(Number); + return new Date(year, month - 1, day); + } +}; +IMask.MaskedDate = MaskedDate; + +// ../node_modules/imask/esm/masked/dynamic.js +var MaskedDynamic = class _MaskedDynamic extends Masked { + constructor(opts) { + super({ + ..._MaskedDynamic.DEFAULTS, + ...opts + }); + this.currentMask = void 0; + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + super._update(opts); + if ("mask" in opts) { + this.exposeMask = void 0; + this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map((m) => { + const { + expose, + ...maskOpts + } = normalizeOpts(m); + const masked = createMask({ + overwrite: this._overwrite, + eager: this._eager, + skipInvalid: this._skipInvalid, + ...maskOpts + }); + if (expose) this.exposeMask = masked; + return masked; + }) : []; + } + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const details = this._applyDispatch(ch, flags); + if (this.currentMask) { + details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags))); + } + return details; + } + _applyDispatch(appended, flags, tail) { + if (appended === void 0) { + appended = ""; + } + if (flags === void 0) { + flags = {}; + } + if (tail === void 0) { + tail = ""; + } + const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value; + const inputValue = this.rawInputValue; + const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue; + const tailValue = inputValue.slice(insertValue.length); + const prevMask = this.currentMask; + const details = new ChangeDetails(); + const prevMaskState = prevMask == null ? void 0 : prevMask.state; + this.currentMask = this.doDispatch(appended, { + ...flags + }, tail); + if (this.currentMask) { + if (this.currentMask !== prevMask) { + this.currentMask.reset(); + if (insertValue) { + this.currentMask.append(insertValue, { + raw: true + }); + details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length; + } + if (tailValue) { + details.tailShift += this.currentMask.append(tailValue, { + raw: true, + tail: true + }).tailShift; + } + } else if (prevMaskState) { + this.currentMask.state = prevMaskState; + } + } + return details; + } + _appendPlaceholder() { + const details = this._applyDispatch(); + if (this.currentMask) { + details.aggregate(this.currentMask._appendPlaceholder()); + } + return details; + } + _appendEager() { + const details = this._applyDispatch(); + if (this.currentMask) { + details.aggregate(this.currentMask._appendEager()); + } + return details; + } + appendTail(tail) { + const details = new ChangeDetails(); + if (tail) details.aggregate(this._applyDispatch("", {}, tail)); + return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail)); + } + currentMaskFlags(flags) { + var _flags$_beforeTailSta, _flags$_beforeTailSta2; + return { + ...flags, + _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 + }; + } + doDispatch(appended, flags, tail) { + if (flags === void 0) { + flags = {}; + } + if (tail === void 0) { + tail = ""; + } + return this.dispatch(appended, this, flags, tail); + } + doValidate(flags) { + return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags))); + } + doPrepare(str, flags) { + if (flags === void 0) { + flags = {}; + } + let [s, details] = super.doPrepare(str, flags); + if (this.currentMask) { + let currentDetails; + [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags)); + details = details.aggregate(currentDetails); + } + return [s, details]; + } + doPrepareChar(str, flags) { + if (flags === void 0) { + flags = {}; + } + let [s, details] = super.doPrepareChar(str, flags); + if (this.currentMask) { + let currentDetails; + [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags)); + details = details.aggregate(currentDetails); + } + return [s, details]; + } + reset() { + var _this$currentMask; + (_this$currentMask = this.currentMask) == null || _this$currentMask.reset(); + this.compiledMasks.forEach((m) => m.reset()); + } + get value() { + return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : ""; + } + set value(value) { + if (this.exposeMask) { + this.exposeMask.value = value; + this.currentMask = this.exposeMask; + this._applyDispatch(); + } else super.value = value; + } + get unmaskedValue() { + return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : ""; + } + set unmaskedValue(unmaskedValue) { + if (this.exposeMask) { + this.exposeMask.unmaskedValue = unmaskedValue; + this.currentMask = this.exposeMask; + this._applyDispatch(); + } else super.unmaskedValue = unmaskedValue; + } + get typedValue() { + return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : ""; + } + set typedValue(typedValue) { + if (this.exposeMask) { + this.exposeMask.typedValue = typedValue; + this.currentMask = this.exposeMask; + this._applyDispatch(); + return; + } + let unmaskedValue = String(typedValue); + if (this.currentMask) { + this.currentMask.typedValue = typedValue; + unmaskedValue = this.currentMask.unmaskedValue; + } + this.unmaskedValue = unmaskedValue; + } + get displayValue() { + return this.currentMask ? this.currentMask.displayValue : ""; + } + get isComplete() { + var _this$currentMask2; + return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete); + } + get isFilled() { + var _this$currentMask3; + return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled); + } + remove(fromPos, toPos) { + const details = new ChangeDetails(); + if (this.currentMask) { + details.aggregate(this.currentMask.remove(fromPos, toPos)).aggregate(this._applyDispatch()); + } + return details; + } + get state() { + var _this$currentMask4; + return { + ...super.state, + _rawInputValue: this.rawInputValue, + compiledMasks: this.compiledMasks.map((m) => m.state), + currentMaskRef: this.currentMask, + currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state + }; + } + set state(state) { + const { + compiledMasks, + currentMaskRef, + currentMask, + ...maskedState + } = state; + if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]); + if (currentMaskRef != null) { + this.currentMask = currentMaskRef; + this.currentMask.state = currentMask; + } + super.state = maskedState; + } + extractInput(fromPos, toPos, flags) { + return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : ""; + } + extractTail(fromPos, toPos) { + return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos); + } + doCommit() { + if (this.currentMask) this.currentMask.doCommit(); + super.doCommit(); + } + nearestInputPos(cursorPos, direction) { + return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction); + } + get overwrite() { + return this.currentMask ? this.currentMask.overwrite : this._overwrite; + } + set overwrite(overwrite) { + this._overwrite = overwrite; + } + get eager() { + return this.currentMask ? this.currentMask.eager : this._eager; + } + set eager(eager) { + this._eager = eager; + } + get skipInvalid() { + return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid; + } + set skipInvalid(skipInvalid) { + this._skipInvalid = skipInvalid; + } + get autofix() { + return this.currentMask ? this.currentMask.autofix : this._autofix; + } + set autofix(autofix) { + this._autofix = autofix; + } + maskEquals(mask) { + return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => { + if (!mask[mi]) return; + const { + mask: oldMask, + ...restOpts + } = mask[mi]; + return objectIncludes(m, restOpts) && m.maskEquals(oldMask); + }) : super.maskEquals(mask); + } + typedValueEquals(value) { + var _this$currentMask5; + return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value)); + } +}; +MaskedDynamic.DEFAULTS = { + ...Masked.DEFAULTS, + dispatch: (appended, masked, flags, tail) => { + if (!masked.compiledMasks.length) return; + const inputValue = masked.rawInputValue; + const inputs = masked.compiledMasks.map((m, index) => { + const isCurrent = masked.currentMask === m; + const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT); + if (m.rawInputValue !== inputValue) { + m.reset(); + m.append(inputValue, { + raw: true + }); + } else if (!isCurrent) { + m.remove(startInputPos); + } + m.append(appended, masked.currentMaskFlags(flags)); + m.appendTail(tail); + return { + index, + weight: m.rawInputValue.length, + totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT))) + }; + }); + inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions); + return masked.compiledMasks[inputs[0].index]; + } +}; +IMask.MaskedDynamic = MaskedDynamic; + +// ../node_modules/imask/esm/masked/enum.js +var MaskedEnum = class _MaskedEnum extends MaskedPattern { + constructor(opts) { + super({ + ..._MaskedEnum.DEFAULTS, + ...opts + }); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + const { + enum: enum_, + ...eopts + } = opts; + if (enum_) { + const lengths = enum_.map((e) => e.length); + const requiredLength = Math.min(...lengths); + const optionalLength = Math.max(...lengths) - requiredLength; + eopts.mask = "*".repeat(requiredLength); + if (optionalLength) eopts.mask += "[" + "*".repeat(optionalLength) + "]"; + this.enum = enum_; + } + super._update(eopts); + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length); + const matches = this.enum.filter((e) => this.matchValue(e, this.unmaskedValue + ch, matchFrom)); + if (matches.length) { + if (matches.length === 1) { + this._forEachBlocksInRange(0, this.value.length, (b, bi) => { + const mch = matches[0][bi]; + if (bi >= this.value.length || mch === b.value) return; + b.reset(); + b._appendChar(mch, flags); + }); + } + const d = super._appendCharRaw(matches[0][this.value.length], flags); + if (matches.length === 1) { + matches[0].slice(this.unmaskedValue.length).split("").forEach((mch) => d.aggregate(super._appendCharRaw(mch))); + } + return d; + } + return new ChangeDetails({ + skip: !this.isComplete + }); + } + extractTail(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + return new ContinuousTailDetails("", fromPos); + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + if (fromPos === toPos) return new ChangeDetails(); + const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length); + let pos; + for (pos = fromPos; pos >= 0; --pos) { + const matches = this.enum.filter((e) => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom)); + if (matches.length > 1) break; + } + const details = super.remove(pos, toPos); + details.tailShift += pos - fromPos; + return details; + } + get isComplete() { + return this.enum.indexOf(this.value) >= 0; + } +}; +MaskedEnum.DEFAULTS = { + ...MaskedPattern.DEFAULTS, + matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom +}; +IMask.MaskedEnum = MaskedEnum; + +// ../node_modules/imask/esm/masked/function.js +var MaskedFunction = class extends Masked { + /** */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + super._update({ + ...opts, + validate: opts.mask + }); + } +}; +IMask.MaskedFunction = MaskedFunction; + +// ../node_modules/imask/esm/masked/number.js +var _MaskedNumber; +var MaskedNumber = class _MaskedNumber2 extends Masked { + /** Single char */ + /** Single char */ + /** Array of single chars */ + /** */ + /** */ + /** Digits after point */ + /** Flag to remove leading and trailing zeros in the end of editing */ + /** Flag to pad trailing zeros after point in the end of editing */ + /** Enable characters overwriting */ + /** */ + /** */ + /** */ + /** Format typed value to string */ + /** Parse string to get typed value */ + constructor(opts) { + super({ + ..._MaskedNumber2.DEFAULTS, + ...opts + }); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + super._update(opts); + this._updateRegExps(); + } + _updateRegExps() { + const start = "^" + (this.allowNegative ? "[+|\\-]?" : ""); + const mid = "\\d*"; + const end = (this.scale ? "(" + escapeRegExp(this.radix) + "\\d{0," + this.scale + "})?" : "") + "$"; + this._numberRegExp = new RegExp(start + mid + end); + this._mapToRadixRegExp = new RegExp("[" + this.mapToRadix.map(escapeRegExp).join("") + "]", "g"); + this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), "g"); + } + _removeThousandsSeparators(value) { + return value.replace(this._thousandsSeparatorRegExp, ""); + } + _insertThousandsSeparators(value) { + const parts = value.split(this.radix); + parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, this.thousandsSeparator); + return parts.join(this.radix); + } + doPrepareChar(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && /* + radix should be mapped when + 1) input is done from keyboard = flags.input && flags.raw + 2) unmasked value is set = !flags.input && !flags.raw + and should not be mapped when + 1) value is set = flags.input && !flags.raw + 2) raw value is set = !flags.input && flags.raw + */ + (flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags); + if (ch && !prepCh) details.skip = true; + if (prepCh && !this.allowPositive && !this.value && prepCh !== "-") details.aggregate(this._appendChar("-")); + return [prepCh, details]; + } + _separatorsCount(to, extendOnSeparators) { + if (extendOnSeparators === void 0) { + extendOnSeparators = false; + } + let count = 0; + for (let pos = 0; pos < to; ++pos) { + if (this._value.indexOf(this.thousandsSeparator, pos) === pos) { + ++count; + if (extendOnSeparators) to += this.thousandsSeparator.length; + } + } + return count; + } + _separatorsCountFromSlice(slice) { + if (slice === void 0) { + slice = this._value; + } + return this._separatorsCount(this._removeThousandsSeparators(slice).length, true); + } + extractInput(fromPos, toPos, flags) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos); + return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags)); + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value; + const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue); + this._value = this._removeThousandsSeparators(this.value); + const oldValue = this._value; + this._value += ch; + const num = this.number; + let accepted = !isNaN(num); + let skip = false; + if (accepted) { + let fixedNum; + if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min; + if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max; + if (fixedNum != null) { + if (this.autofix) { + this._value = this.format(fixedNum, this).replace(_MaskedNumber2.UNMASKED_RADIX, this.radix); + skip || (skip = oldValue === this._value && !flags.tail); + } else { + accepted = false; + } + } + accepted && (accepted = Boolean(this._value.match(this._numberRegExp))); + } + let appendDetails; + if (!accepted) { + this._value = oldValue; + appendDetails = new ChangeDetails(); + } else { + appendDetails = new ChangeDetails({ + inserted: this._value.slice(oldValue.length), + rawInserted: skip ? "" : ch, + skip + }); + } + this._value = this._insertThousandsSeparators(this._value); + const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value; + const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue); + appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length; + return appendDetails; + } + _findSeparatorAround(pos) { + if (this.thousandsSeparator) { + const searchFrom = pos - this.thousandsSeparator.length + 1; + const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom); + if (separatorPos <= pos) return separatorPos; + } + return -1; + } + _adjustRangeWithSeparators(from, to) { + const separatorAroundFromPos = this._findSeparatorAround(from); + if (separatorAroundFromPos >= 0) from = separatorAroundFromPos; + const separatorAroundToPos = this._findSeparatorAround(to); + if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length; + return [from, to]; + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos); + const valueBeforePos = this.value.slice(0, fromPos); + const valueAfterPos = this.value.slice(toPos); + const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length); + this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos)); + const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos); + return new ChangeDetails({ + tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length + }); + } + nearestInputPos(cursorPos, direction) { + if (!this.thousandsSeparator) return cursorPos; + switch (direction) { + case DIRECTION.NONE: + case DIRECTION.LEFT: + case DIRECTION.FORCE_LEFT: { + const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1); + if (separatorAtLeftPos >= 0) { + const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length; + if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) { + return separatorAtLeftPos; + } + } + break; + } + case DIRECTION.RIGHT: + case DIRECTION.FORCE_RIGHT: { + const separatorAtRightPos = this._findSeparatorAround(cursorPos); + if (separatorAtRightPos >= 0) { + return separatorAtRightPos + this.thousandsSeparator.length; + } + } + } + return cursorPos; + } + doCommit() { + if (this.value) { + const number = this.number; + let validnum = number; + if (this.min != null) validnum = Math.max(validnum, this.min); + if (this.max != null) validnum = Math.min(validnum, this.max); + if (validnum !== number) this.unmaskedValue = this.format(validnum, this); + let formatted = this.value; + if (this.normalizeZeros) formatted = this._normalizeZeros(formatted); + if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted); + this._value = formatted; + } + super.doCommit(); + } + _normalizeZeros(value) { + const parts = this._removeThousandsSeparators(value).split(this.radix); + parts[0] = parts[0].replace(/^(\D*)(0*)(\d*)/, (match, sign, zeros, num) => sign + num); + if (value.length && !/\d$/.test(parts[0])) parts[0] = parts[0] + "0"; + if (parts.length > 1) { + parts[1] = parts[1].replace(/0*$/, ""); + if (!parts[1].length) parts.length = 1; + } + return this._insertThousandsSeparators(parts.join(this.radix)); + } + _padFractionalZeros(value) { + if (!value) return value; + const parts = value.split(this.radix); + if (parts.length < 2) parts.push(""); + parts[1] = parts[1].padEnd(this.scale, "0"); + return parts.join(this.radix); + } + doSkipInvalid(ch, flags, checkTail) { + if (flags === void 0) { + flags = {}; + } + const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === _MaskedNumber2.UNMASKED_RADIX || this.mapToRadix.includes(ch)); + return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional; + } + get unmaskedValue() { + return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, _MaskedNumber2.UNMASKED_RADIX); + } + set unmaskedValue(unmaskedValue) { + super.unmaskedValue = unmaskedValue; + } + get typedValue() { + return this.parse(this.unmaskedValue, this); + } + set typedValue(n) { + this.rawInputValue = this.format(n, this).replace(_MaskedNumber2.UNMASKED_RADIX, this.radix); + } + /** Parsed Number */ + get number() { + return this.typedValue; + } + set number(number) { + this.typedValue = number; + } + get allowNegative() { + return this.min != null && this.min < 0 || this.max != null && this.max < 0; + } + get allowPositive() { + return this.min != null && this.min > 0 || this.max != null && this.max > 0; + } + typedValueEquals(value) { + return (super.typedValueEquals(value) || _MaskedNumber2.EMPTY_VALUES.includes(value) && _MaskedNumber2.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === ""); + } +}; +_MaskedNumber = MaskedNumber; +MaskedNumber.UNMASKED_RADIX = "."; +MaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0]; +MaskedNumber.DEFAULTS = { + ...Masked.DEFAULTS, + mask: Number, + radix: ",", + thousandsSeparator: "", + mapToRadix: [_MaskedNumber.UNMASKED_RADIX], + min: Number.MIN_SAFE_INTEGER, + max: Number.MAX_SAFE_INTEGER, + scale: 2, + normalizeZeros: true, + padFractionalZeros: false, + parse: Number, + format: (n) => n.toLocaleString("en-US", { + useGrouping: false, + maximumFractionDigits: 20 + }) +}; +IMask.MaskedNumber = MaskedNumber; + +// ../node_modules/imask/esm/masked/pipe.js +var PIPE_TYPE = { + MASKED: "value", + UNMASKED: "unmaskedValue", + TYPED: "typedValue" +}; +function createPipe(arg, from, to) { + if (from === void 0) { + from = PIPE_TYPE.MASKED; + } + if (to === void 0) { + to = PIPE_TYPE.MASKED; + } + const masked = createMask(arg); + return (value) => masked.runIsolated((m) => { + m[from] = value; + return m[to]; + }); +} +function pipe(value, mask, from, to) { + return createPipe(mask, from, to)(value); +} +IMask.PIPE_TYPE = PIPE_TYPE; +IMask.createPipe = createPipe; +IMask.pipe = pipe; + +// ../node_modules/imask/esm/masked/repeat.js +var RepeatBlock = class extends MaskedPattern { + get repeatFrom() { + var _ref; + return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0; + } + get repeatTo() { + var _ref2; + return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity; + } + constructor(opts) { + super(opts); + } + updateOptions(opts) { + super.updateOptions(opts); + } + _update(opts) { + var _ref3, _ref4, _this$_blocks; + const { + repeat, + ...blockOpts + } = normalizeOpts(opts); + this._blockOpts = Object.assign({}, this._blockOpts, blockOpts); + const block = createMask(this._blockOpts); + this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; + super._update({ + mask: "m".repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)), + blocks: { + m: block + }, + eager: block.eager, + overwrite: block.overwrite, + skipInvalid: block.skipInvalid, + lazy: block.lazy, + placeholderChar: block.placeholderChar, + displayChar: block.displayChar + }); + } + _allocateBlock(bi) { + if (bi < this._blocks.length) return this._blocks[bi]; + if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) { + this._blocks.push(createMask(this._blockOpts)); + this.mask += "m"; + return this._blocks[this._blocks.length - 1]; + } + } + _appendCharRaw(ch, flags) { + if (flags === void 0) { + flags = {}; + } + const details = new ChangeDetails(); + for ( + let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated; + // try to get a block or + // try to allocate a new block if not allocated already + block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); + ++bi + ) { + var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta; + const blockDetails = block._appendChar(ch, { + ...flags, + _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi] + }); + if (blockDetails.skip && allocated) { + this._blocks.pop(); + this.mask = this.mask.slice(1); + break; + } + details.aggregate(blockDetails); + if (blockDetails.consumed) break; + } + return details; + } + _trimEmptyTail(fromPos, toPos) { + var _this$_mapPosToBlock2, _this$_mapPosToBlock3; + if (fromPos === void 0) { + fromPos = 0; + } + const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0); + let lastBlockIndex; + if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index; + if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1; + let removeCount = 0; + for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) { + if (this._blocks[blockIndex].unmaskedValue) break; + } + if (removeCount) { + this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount); + this.mask = this.mask.slice(removeCount); + } + } + reset() { + super.reset(); + this._trimEmptyTail(); + } + remove(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos === void 0) { + toPos = this.displayValue.length; + } + const removeDetails = super.remove(fromPos, toPos); + this._trimEmptyTail(fromPos, toPos); + return removeDetails; + } + totalInputPositions(fromPos, toPos) { + if (fromPos === void 0) { + fromPos = 0; + } + if (toPos == null && this.repeatTo === Infinity) return Infinity; + return super.totalInputPositions(fromPos, toPos); + } + get state() { + return super.state; + } + set state(state) { + this._blocks.length = state._blocks.length; + this.mask = this.mask.slice(0, this._blocks.length); + super.state = state; + } +}; +IMask.RepeatBlock = RepeatBlock; + +// ../node_modules/imask/esm/index.js +try { + globalThis.IMask = IMask; +} catch { +} + +// js/hooks/_masked_input.js +var masked_input_default = { + mounted() { + this.maskedInput = this.el.querySelector("[data-masked-input]"); + this.hiddenInput = this.el.querySelector("[data-hidden-input]"); + this.initializeMask(); + }, + initializeMask() { + const maskPattern = this.el.dataset.maskPattern; + console.log("Mask pattern:", maskPattern); + if (!maskPattern) { + console.error("You must provide a mask pattern in the data-masked-pattern attribute."); + return; + } + this.maskOptions = { + mask: maskPattern, + lazy: false, + blocks: { + num: { + mask: Number, + thousandsSeparator: this.el.dataset.thousandsSeparator, + radix: this.el.dataset.radix + } + } + }; + this.mask = IMask(this.maskedInput, this.maskOptions); + this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value); + this.mask.on("accept", this.handleMaskChange.bind(this)); + }, + updated() { + this.handleMaskChange.bind(this); + }, + handleMaskChange() { + this.hiddenInput.value = this.rawValue(this.mask.value); + this.hiddenInput.dispatchEvent(new Event("input", { bubbles: true })); + }, + rawValue(value) { + return value.replace(this.el.dataset.unit || "", "").trim().replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, "g"), ""); + }, + destroyed() { + this.mask.destroy(); + } +}; export { hooks_exports as Hooks }; diff --git a/priv/static/js/backpex.esm.js.map b/priv/static/js/backpex.esm.js.map index 88977b08c..76495b2e4 100644 --- a/priv/static/js/backpex.esm.js.map +++ b/priv/static/js/backpex.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js"], - "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n"], - "mappings": "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", - "names": [] + "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_input.js"], + "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedInput } from './_masked_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], + "mappings": "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", + "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } From 1e6e4ef58724ebadc4dc0fb19cdfe4cd30fff382 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:33:31 +0200 Subject: [PATCH 09/24] Rename masked_input to masked_number_input --- .../{_masked_input.js => _masked_number_input.js} | 0 assets/js/hooks/index.js | 2 +- lib/backpex/fields/currency.ex | 2 +- lib/backpex/html/form.ex | 13 ++++++------- priv/static/js/backpex.cjs.js | 6 +++--- priv/static/js/backpex.cjs.js.map | 6 +++--- priv/static/js/backpex.esm.js | 6 +++--- priv/static/js/backpex.esm.js.map | 6 +++--- 8 files changed, 20 insertions(+), 21 deletions(-) rename assets/js/hooks/{_masked_input.js => _masked_number_input.js} (100%) diff --git a/assets/js/hooks/_masked_input.js b/assets/js/hooks/_masked_number_input.js similarity index 100% rename from assets/js/hooks/_masked_input.js rename to assets/js/hooks/_masked_number_input.js diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index e84c94edd..d54020988 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -4,4 +4,4 @@ export { default as BackpexSidebarSections } from './_sidebar_sections' export { default as BackpexStickyActions } from './_sticky_actions' export { default as BackpexThemeSelector } from './_theme_selector' export { default as BackpexTooltip } from './_tooltip' -export { default as BackpexMaskedInput } from './_masked_input' +export { default as BackpexMaskedNumberInput } from './_masked_number_input' diff --git a/lib/backpex/fields/currency.ex b/lib/backpex/fields/currency.ex index 58892c955..69aa16852 100644 --- a/lib/backpex/fields/currency.ex +++ b/lib/backpex/fields/currency.ex @@ -92,7 +92,7 @@ defmodule Backpex.Fields.Currency do <:label align={Backpex.Field.align_label(@field_options, assigns)}> - - <.masked_input id="amount-input" name="amount" value="20" unit="€" readonly /> + <.masked_number_input field={@form[:amount]} unit="€" /> + <.masked_number_input id="amount-input" name="amount" value="20" unit="€" readonly /> """ attr :id, :any, default: nil attr :name, :any @@ -204,7 +204,7 @@ defmodule Backpex.HTML.Form do attr :rest, :global, include: ~w(accept autocomplete capture cols disabled form list max maxlength min minlength multiple pattern placeholder readonly required rows size step) - def masked_input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do + def masked_number_input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do errors = if Phoenix.Component.used_input?(field), do: field.errors, else: [] assigns @@ -212,17 +212,16 @@ defmodule Backpex.HTML.Form do |> assign(:errors, translate_form_errors(errors, assigns.translate_error_fun)) |> assign_new(:name, fn -> field.name end) |> assign_new(:value, fn -> field.value end) - |> masked_input() + |> masked_number_input() end - def masked_input(assigns) do + def masked_number_input(assigns) do ~H""" -
{@label}
cancel_entry_default, BackpexDragHover: () => drag_hover_default, - BackpexMaskedInput: () => masked_input_default, + BackpexMaskedNumberInput: () => masked_number_input_default, BackpexSidebarSections: () => sidebar_sections_default, BackpexStickyActions: () => sticky_actions_default, BackpexThemeSelector: () => theme_selector_default, @@ -3481,8 +3481,8 @@ try { } catch { } -// js/hooks/_masked_input.js -var masked_input_default = { +// js/hooks/_masked_number_input.js +var masked_number_input_default = { mounted() { this.maskedInput = this.el.querySelector("[data-masked-input]"); this.hiddenInput = this.el.querySelector("[data-hidden-input]"); diff --git a/priv/static/js/backpex.cjs.js.map b/priv/static/js/backpex.cjs.js.map index 5d0c389e3..ef4085ae3 100644 --- a/priv/static/js/backpex.cjs.js.map +++ b/priv/static/js/backpex.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_input.js"], - "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedInput } from './_masked_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], - "mappings": "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", + "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_number_input.js"], + "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } diff --git a/priv/static/js/backpex.esm.js b/priv/static/js/backpex.esm.js index 7d4ef6742..5ef7f6980 100644 --- a/priv/static/js/backpex.esm.js +++ b/priv/static/js/backpex.esm.js @@ -9,7 +9,7 @@ var hooks_exports = {}; __export(hooks_exports, { BackpexCancelEntry: () => cancel_entry_default, BackpexDragHover: () => drag_hover_default, - BackpexMaskedInput: () => masked_input_default, + BackpexMaskedNumberInput: () => masked_number_input_default, BackpexSidebarSections: () => sidebar_sections_default, BackpexStickyActions: () => sticky_actions_default, BackpexThemeSelector: () => theme_selector_default, @@ -3462,8 +3462,8 @@ try { } catch { } -// js/hooks/_masked_input.js -var masked_input_default = { +// js/hooks/_masked_number_input.js +var masked_number_input_default = { mounted() { this.maskedInput = this.el.querySelector("[data-masked-input]"); this.hiddenInput = this.el.querySelector("[data-hidden-input]"); diff --git a/priv/static/js/backpex.esm.js.map b/priv/static/js/backpex.esm.js.map index 76495b2e4..a0b8f66c8 100644 --- a/priv/static/js/backpex.esm.js.map +++ b/priv/static/js/backpex.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_input.js"], - "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedInput } from './_masked_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], - "mappings": ";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIA,IAAO,uBAAQ;AAAA,EACb,UAAW;AACT,SAAK,OAAO,KAAK,GAAG,QAAQ,MAAM;AAElC,UAAM,YAAY,KAAK,GAAG,QAAQ;AAClC,SAAK,YAAY,gBAAgB,SAAS,IAAI,CAAC,MAAM;AAAE,WAAK,oBAAoB;AAAA,IAAE,CAAC;AACnF,SAAK,YAAY,yBAAyB,SAAS,IAAI,CAAC,MAAM;AAAE,WAAK,oBAAoB;AAAA,IAAE,CAAC;AAAA,EAC9F;AAAA,EACA,sBAAuB;AACrB,QAAI,KAAK,MAAM;AACb,WAAK,GAAG,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,IAC7D;AAAA,EACF;AACF;;;ACdA,IAAO,qBAAQ;AAAA,EACb,UAAW;AACT,SAAK,WAAW;AAChB,SAAK,aAAa,IAAI,gBAAgB;AACtC,UAAM,SAAS,KAAK,WAAW;AAE/B,SAAK,GAAG,iBAAiB,aAAa,MAAM,KAAK,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1F,SAAK,GAAG,iBAAiB,aAAa,MAAM,KAAK,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1F,SAAK,GAAG,iBAAiB,QAAQ,MAAM,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAAA,EACvE;AAAA,EACA,YAAa;AACX,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EACA,WAAY,OAAO;AACjB,SAAK,WAAW;AAChB,SAAK,GAAG,kBAAkB,UAAU,OAAO,kBAAkB,KAAK,WAAW,CAAC;AAAA,EAChF;AACF;;;ACjBA,IAAO,2BAAQ;AAAA,EACb,UAAW;AACT,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EACA,UAAW;AACT,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EACA,YAAa;AACX,UAAM,WAAW,KAAK,GAAG,iBAAiB,mBAAmB;AAE7D,aAAS,QAAQ,aAAW;AAC1B,YAAM,SAAS,QAAQ,cAAc,6BAA6B;AAClE,aAAO,oBAAoB,SAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,WAAY,SAAS;AACnB,QAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,GAAG;AAC7C,aAAO;AAAA,IACT;AAEA,eAAW,SAAS,QAAQ,UAAU;AACpC,YAAM,eAAe,MAAM,cAAc,8BAA8B;AAEvE,UAAI,cAAc;AAChB,YAAI,KAAK,WAAW,YAAY,GAAG;AACjC,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EACA,qBAAsB;AACpB,UAAM,WAAW,KAAK,GAAG,iBAAiB,mBAAmB;AAE7D,aAAS,QAAQ,aAAW;AAC1B,YAAM,YAAY,QAAQ,QAAQ;AAClC,YAAM,SAAS,QAAQ,cAAc,6BAA6B;AAClE,YAAM,UAAU,QAAQ,cAAc,8BAA8B;AAEpE,UAAI,CAAC,KAAK,WAAW,OAAO,GAAG;AAC7B,gBAAQ,MAAM,UAAU;AACxB;AAAA,MACF;AAEA,YAAM,SAAS,aAAa,QAAQ,mBAAmB,SAAS,EAAE,MAAM;AACxE,UAAI,CAAC,QAAQ;AACX,eAAO,UAAU,OAAO,oBAAoB;AAC5C,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAEA,cAAQ,UAAU,OAAO,QAAQ;AAEjC,aAAO,iBAAiB,SAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,aAAc,OAAO;AACnB,UAAM,UAAU,MAAM,cAAc,QAAQ,mBAAmB;AAC/D,UAAM,YAAY,QAAQ,QAAQ;AAClC,UAAM,SAAS,QAAQ,cAAc,6BAA6B;AAClE,UAAM,UAAU,QAAQ,cAAc,8BAA8B;AAEpE,WAAO,UAAU,OAAO,oBAAoB;AAC5C,YAAQ,MAAM,UAAU,QAAQ,MAAM,YAAY,SAAS,UAAU;AAErE,UAAM,YAAY,OAAO,UAAU,SAAS,oBAAoB;AAChE,iBAAa,QAAQ,mBAAmB,SAAS,IAAI,SAAS;AAAA,EAChE;AACF;;;ACpEA,IAAO,yBAAQ;AAAA,EACb,UAAW;AACT,SAAK,SAAS,KAAK,GAAG,cAAc,SAAS;AAE7C,SAAK,WAAW,IAAI;AAAA,MAClB,CAAC,CAAC,KAAK,MAAM;AACX,aAAK,QAAQ,MAAM,oBAAoB;AACvC,aAAK,qBAAqB;AAAA,MAC5B;AAAA,MACA,EAAE,WAAW,CAAC,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ,kBAAkB,EAAE;AAAA,IAC9D;AAEA,SAAK,SAAS,QAAQ,KAAK,EAAE;AAAA,EAC/B;AAAA,EACA,UAAW;AACT,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EACA,YAAa;AACX,SAAK,SAAS,WAAW;AAAA,EAC3B;AAAA,EACA,uBAAwB;AACtB,SAAK,OAAO,gBAAgB,SAAS,KAAK,KAAK;AAAA,EACjD;AACF;;;ACzBA,IAAO,yBAAQ;AAAA,EACb,UAAW;AACT,UAAM,OAAO,SAAS,cAAc,8BAA8B;AAClE,UAAM,cAAc,OAAO,aAAa,QAAQ,cAAc;AAG9D,QAAI,eAAe,MAAM;AACvB,YAAM,mBAAmB,KAAK;AAAA,QAC5B,uCAAuC,WAAW;AAAA,MACpD;AACA,uBAAiB,UAAU;AAAA,IAC7B;AAEA,WAAO,iBAAiB,wBAAwB,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA,EAGA,MAAM,oBAAqB;AACzB,UAAM,OAAO,SAAS,cAAc,8BAA8B;AAClE,UAAM,YAAY,SAAS,cAAc,yBAAyB,EAAE,aAAa,SAAS;AAC1F,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,gBAAgB,KAAK;AAAA,MACzB;AAAA,IACF;AAEA,QAAI,eAAe;AACjB,aAAO,aAAa,QAAQ,gBAAgB,cAAc,KAAK;AAC/D,eAAS,gBAAgB;AAAA,QACvB;AAAA,QACA,cAAc;AAAA,MAChB;AACA,YAAM,MAAM,YAAY;AAAA,QACtB,MAAM,gBAAgB,cAAc,KAAK;AAAA,QACzC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAEA,iBAAkB;AAChB,UAAM,cAAc,OAAO,aAAa,QAAQ,cAAc;AAE9D,QAAI,eAAe,MAAM;AACvB,eAAS,gBAAgB,aAAa,cAAc,WAAW;AAAA,IACjE;AAAA,EACF;AAAA,EACA,YAAa;AACX,WAAO,oBAAoB,wBAAwB,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACtF;AACF;;;ACpDA,IAAO,kBAAQ;AAAA,EACb,UAAW;AACT,SAAK,UAAU;AACf,SAAK,aAAa,IAAI,gBAAgB;AACtC,UAAM,SAAS,KAAK,WAAW;AAE/B,SAAK,GAAG,iBAAiB,cAAc,MAAM;AAC3C,YAAM,OAAO,KAAK,GAAG,aAAa,cAAc;AAChD,UAAI,CAAC,KAAM;AAEX,WAAK,UAAU,SAAS,cAAc,KAAK;AAC3C,WAAK,QAAQ,YAAY;AACzB,WAAK,QAAQ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzB,eAAS,KAAK,YAAY,KAAK,OAAO;AACtC,WAAK,sBAAsB;AAAA,IAC7B,GAAG,EAAE,OAAO,CAAC;AAEb,SAAK,GAAG,iBAAiB,cAAc,MAAM;AAC3C,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,OAAO;AACpB,aAAK,UAAU;AAAA,MACjB;AAAA,IACF,GAAG,EAAE,OAAO,CAAC;AAEb,WAAO,iBAAiB,UAAU,MAAM;AAAE,WAAK,sBAAsB;AAAA,IAAE,GAAG,EAAE,OAAO,CAAC;AAAA,EACtF;AAAA,EACA,YAAa;AACX,SAAK,WAAW,MAAM;AAEtB,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,EACF;AAAA,EACA,wBAAyB;AACvB,QAAI,CAAC,KAAK,QAAS;AAEnB,UAAM,OAAO,KAAK,GAAG,sBAAsB;AAC3C,SAAK,QAAQ,MAAM,OAAO,GAAG,KAAK,OAAO,KAAK,QAAQ,CAAC;AACvD,SAAK,QAAQ,MAAM,MAAM,GAAG,KAAK,MAAM,KAAK,QAAQ,eAAe,CAAC;AAAA,EACtE;AACF;;;ACjDA,SAAS,SAAS,KAAK;AACrB,SAAO,OAAO,QAAQ,YAAY,eAAe;AACnD;AAGA,SAAS,SAAS,KAAK;AACrB,MAAI;AACJ,SAAO,OAAO,QAAQ,YAAY,OAAO,SAAS,OAAO,SAAS,mBAAmB,IAAI,gBAAgB,OAAO,SAAS,iBAAiB,UAAU;AACtJ;AACA,SAAS,KAAK,KAAK,MAAM;AACvB,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC;AACpE,SAAO,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,KAAK,SAAS;AAC/C,QAAI,CAAC,GAAG,CAAC,IAAI;AACb,QAAI,KAAK,GAAG,CAAC,EAAG,KAAI,CAAC,IAAI;AACzB,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAGA,IAAM,YAAY;AAAA,EAChB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,aAAa;AACf;AAIA,SAAS,eAAe,WAAW;AACjC,UAAQ,WAAW;AAAA,IACjB,KAAK,UAAU;AACb,aAAO,UAAU;AAAA,IACnB,KAAK,UAAU;AACb,aAAO,UAAU;AAAA,IACnB;AACE,aAAO;AAAA,EACX;AACF;AAGA,SAAS,aAAa,KAAK;AACzB,SAAO,IAAI,QAAQ,6BAA6B,MAAM;AACxD;AAGA,SAAS,eAAe,GAAG,GAAG;AAC5B,MAAI,MAAM,EAAG,QAAO;AACpB,QAAM,OAAO,MAAM,QAAQ,CAAC,GAC1B,OAAO,MAAM,QAAQ,CAAC;AACxB,MAAI;AACJ,MAAI,QAAQ,MAAM;AAChB,QAAI,EAAE,UAAU,EAAE,OAAQ,QAAO;AACjC,SAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAK,KAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAG,QAAO;AACvE,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI,KAAK,KAAK,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAC5D,UAAM,QAAQ,aAAa,MACzB,QAAQ,aAAa;AACvB,QAAI,SAAS,MAAO,QAAO,EAAE,QAAQ,KAAK,EAAE,QAAQ;AACpD,QAAI,SAAS,MAAO,QAAO;AAC3B,UAAM,UAAU,aAAa,QAC3B,UAAU,aAAa;AACzB,QAAI,WAAW,QAAS,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;AAC1D,QAAI,WAAW,QAAS,QAAO;AAC/B,UAAM,OAAO,OAAO,KAAK,CAAC;AAG1B,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,KAAI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAG,KAAK,CAAC,CAAC,EAAG,QAAO;AAChG,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,KAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAG,QAAO;AACtF,WAAO;AAAA,EACT,WAAW,KAAK,KAAK,OAAO,MAAM,cAAc,OAAO,MAAM,YAAY;AACvE,WAAO,EAAE,SAAS,MAAM,EAAE,SAAS;AAAA,EACrC;AACA,SAAO;AACT;;;AC1EA,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EASlB,YAAY,MAAM;AAChB,WAAO,OAAO,MAAM,IAAI;AAGxB,WAAO,KAAK,MAAM,MAAM,GAAG,KAAK,cAAc,MAAM,KAAK,SAAS,MAAM,GAAG,KAAK,cAAc,GAAG;AAC/F,QAAE,KAAK,aAAa;AAAA,IACtB;AACA,QAAI,KAAK,eAAe;AAEtB,aAAO,KAAK,MAAM,MAAM,KAAK,SAAS,MAAM,KAAK,SAAS,MAAM,KAAK,aAAa,GAAG,GAAG;AACtF,YAAI,KAAK,MAAM,SAAS,KAAK,YAAY,KAAK,SAAS,SAAS,KAAK,aAAa,IAAK,GAAE,KAAK,aAAa;AAAA,YAAS,GAAE,KAAK;AAAA,MAC7H;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,iBAAiB;AACnB,WAAO,KAAK,IAAI,KAAK,WAAW,KAAK,aAAa,KAAK;AAAA,EACzD;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO,KAAK,MAAM,OAAO,KAAK,gBAAgB,KAAK,aAAa;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,eAAe;AAEjB,WAAO,KAAK,IAAI,KAAK,aAAa,MAAM,KAAK;AAAA,IAE7C,KAAK,SAAS,SAAS,KAAK,MAAM,QAAQ,CAAC;AAAA,EAC7C;AAAA;AAAA,EAGA,IAAI,UAAU;AACZ,WAAO,KAAK,SAAS,OAAO,KAAK,gBAAgB,KAAK,YAAY;AAAA,EACpE;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,UAAU,GAAG,KAAK,cAAc;AAAA,EACpD;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,UAAU,KAAK,iBAAiB,KAAK,aAAa;AAAA,EACtE;AAAA;AAAA,EAGA,IAAI,kBAAkB;AACpB,QAAI,CAAC,KAAK,gBAAgB,KAAK,cAAe,QAAO,UAAU;AAG/D,YAAQ,KAAK,aAAa,QAAQ,KAAK,aAAa,KAAK,aAAa,UAAU,KAAK;AAAA,IAErF,KAAK,aAAa,QAAQ,KAAK,aAAa,QAAQ,UAAU,QAAQ,UAAU;AAAA,EAClF;AACF;;;ACzEA,SAAS,MAAM,IAAI,MAAM;AAEvB,SAAO,IAAI,MAAM,UAAU,IAAI,IAAI;AACrC;;;AC2BA,SAAS,YAAY,MAAgB;AACnC,MAAI,QAAQ,KAAM,OAAM,IAAI,MAAM,iCAAiC;AACnE,MAAI,gBAAgB,OAAQ,QAAO,MAAM;AACzC,MAAI,SAAS,IAAI,EAAG,QAAO,MAAM;AACjC,MAAI,SAAS,KAAM,QAAO,MAAM;AAChC,MAAI,SAAS,OAAQ,QAAO,MAAM;AAClC,MAAI,MAAM,QAAQ,IAAI,KAAK,SAAS,MAAO,QAAO,MAAM;AACxD,MAAI,MAAM,UAAU,KAAK,qBAAqB,MAAM,OAAQ,QAAO;AACnE,MAAI,MAAM,UAAU,gBAAgB,MAAM,OAAQ,QAAO,KAAK;AAC9D,MAAI,gBAAgB,SAAU,QAAO,MAAM;AAC3C,UAAQ,KAAK,2BAA2B,IAAI;AAC5C,SAAO,MAAM;AACf;AACA,SAAS,cAAc,MAAM;AAC3B,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wBAAwB;AACnD,MAAI,MAAM,QAAQ;AAChB,QAAI,KAAK,qBAAqB,MAAM,OAAQ,QAAO;AAAA,MACjD,MAAM;AAAA,IACR;AAOA,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,GAAG;AAAA,IACL,IAAI,gBAAgB,MAAM,SAAS;AAAA,MACjC,MAAM;AAAA,IACR,IAAI,SAAS,IAAI,KAAK,KAAK,gBAAgB,MAAM,SAAS,OAAO,CAAC;AAClE,QAAI,MAAM;AACR,YAAM,QAAQ,KAAK;AACnB,aAAO;AAAA,QACL,GAAG,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC;AAAA,QAC1C,MAAM,KAAK;AAAA,QACX;AAAA,QACA,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,SAAS,IAAI,EAAG,QAAO;AAAA,IAC1B,MAAM;AAAA,EACR;AACA,SAAO;AAAA,IACL,GAAG;AAAA,EACL;AACF;AA4BA,SAAS,WAAW,MAAM;AACxB,MAAI,MAAM,UAAU,gBAAgB,MAAM,OAAQ,QAAO;AACzD,QAAM,QAAQ,cAAc,IAAI;AAChC,QAAM,cAAc,YAAY,MAAM,IAAI;AAC1C,MAAI,CAAC,YAAa,OAAM,IAAI,MAAM,iDAAiD,MAAM,OAAO,0EAA0E;AAC1K,MAAI,MAAM,SAAS,YAAa,QAAO,MAAM;AAC7C,MAAI,MAAM,OAAO;AACf,UAAM,OAAO,MAAM;AACnB,WAAO,MAAM;AAAA,EACf;AACA,SAAO,IAAI,YAAY,KAAK;AAC9B;AACA,MAAM,aAAa;;;ACnHnB,IAAM,cAAN,MAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAQhB,IAAI,iBAAiB;AACnB,QAAI;AACJ,QAAI;AACF,cAAQ,KAAK;AAAA,IACf,QAAQ;AAAA,IAAC;AACT,WAAO,SAAS,OAAO,QAAQ,KAAK,MAAM;AAAA,EAC5C;AAAA;AAAA,EAGA,IAAI,eAAe;AACjB,QAAI;AACJ,QAAI;AACF,YAAM,KAAK;AAAA,IACb,QAAQ;AAAA,IAAC;AACT,WAAO,OAAO,OAAO,MAAM,KAAK,MAAM;AAAA,EACxC;AAAA;AAAA,EAGA,OAAO,OAAO,KAAK;AACjB,QAAI,SAAS,QAAQ,OAAO,QAAQ,UAAU,KAAK,kBAAkB,QAAQ,KAAK,aAAc;AAChG,QAAI;AACF,WAAK,cAAc,OAAO,GAAG;AAAA,IAC/B,QAAQ;AAAA,IAAC;AAAA,EACX;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAMF;AACA,MAAM,cAAc;;;AC3CpB,IAAM,QAAQ;AACd,IAAM,QAAQ;AAGd,IAAM,kBAAN,cAA8B,YAAY;AAAA;AAAA,EAGxC,YAAY,OAAO;AACjB,UAAM;AACN,SAAK,QAAQ;AACb,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AAAA,EAC3D;AAAA,EACA,IAAI,cAAc;AAChB,QAAI,uBAAuB,wBAAwB;AACnD,YAAQ,yBAAyB,0BAA0B,cAAc,KAAK,OAAO,gBAAgB,OAAO,SAAS,uBAAuB,KAAK,WAAW,MAAM,OAAO,wBAAwB;AAAA,EACnM;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO,KAAK,UAAU,KAAK,YAAY;AAAA,EACzC;AAAA;AAAA,EAGA,WAAW,UAAU;AACnB,SAAK,MAAM,iBAAiB,WAAW,KAAK,UAAU;AACtD,SAAK,MAAM,iBAAiB,SAAS,KAAK,QAAQ;AAClD,SAAK,MAAM,iBAAiB,eAAe,KAAK,cAAc;AAC9D,SAAK,MAAM,iBAAiB,kBAAkB,KAAK,iBAAiB;AACpE,SAAK,MAAM,iBAAiB,QAAQ,SAAS,IAAI;AACjD,SAAK,MAAM,iBAAiB,SAAS,SAAS,KAAK;AACnD,SAAK,MAAM,iBAAiB,SAAS,SAAS,KAAK;AACnD,SAAK,MAAM,iBAAiB,QAAQ,SAAS,MAAM;AACnD,SAAK,YAAY;AAAA,EACnB;AAAA,EACA,WAAW,GAAG;AACZ,QAAI,KAAK,UAAU,SAAS,EAAE,YAAY,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,SAAS,EAAE,UAAU;AAC9H,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AACA,QAAI,KAAK,UAAU,QAAQ,EAAE,YAAY,UAAU,EAAE,WAAW,EAAE,UAAU;AAC1E,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AACA,QAAI,CAAC,EAAE,YAAa,MAAK,UAAU,gBAAgB,CAAC;AAAA,EACtD;AAAA,EACA,eAAe,GAAG;AAChB,QAAI,EAAE,cAAc,iBAAiB,KAAK,UAAU,MAAM;AACxD,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AACA,QAAI,EAAE,cAAc,iBAAiB,KAAK,UAAU,MAAM;AACxD,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,kBAAkB,GAAG;AACnB,SAAK,UAAU,MAAM,CAAC;AAAA,EACxB;AAAA,EACA,SAAS,GAAG;AACV,QAAI,CAAC,EAAE,YAAa,MAAK,UAAU,MAAM,CAAC;AAAA,EAC5C;AAAA;AAAA,EAGA,eAAe;AACb,SAAK,MAAM,oBAAoB,WAAW,KAAK,UAAU;AACzD,SAAK,MAAM,oBAAoB,SAAS,KAAK,QAAQ;AACrD,SAAK,MAAM,oBAAoB,eAAe,KAAK,cAAc;AACjE,SAAK,MAAM,oBAAoB,kBAAkB,KAAK,iBAAiB;AACvE,SAAK,MAAM,oBAAoB,QAAQ,KAAK,UAAU,IAAI;AAC1D,SAAK,MAAM,oBAAoB,SAAS,KAAK,UAAU,KAAK;AAC5D,SAAK,MAAM,oBAAoB,SAAS,KAAK,UAAU,KAAK;AAC5D,SAAK,MAAM,oBAAoB,QAAQ,KAAK,UAAU,MAAM;AAC5D,SAAK,YAAY,CAAC;AAAA,EACpB;AACF;AACA,MAAM,kBAAkB;;;AC5ExB,IAAM,uBAAN,cAAmC,gBAAgB;AAAA;AAAA,EAGjD,YAAY,OAAO;AACjB,UAAM,KAAK;AACX,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA,EAGA,IAAI,wBAAwB;AAC1B,WAAO,KAAK,MAAM,kBAAkB,OAAO,KAAK,MAAM,iBAAiB,KAAK,MAAM;AAAA,EACpF;AAAA;AAAA,EAGA,IAAI,sBAAsB;AACxB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,cAAc,OAAO,KAAK;AACxB,SAAK,MAAM,kBAAkB,OAAO,GAAG;AAAA,EACzC;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,MAAM,QAAQ;AAAA,EACrB;AACF;AACA,MAAM,kBAAkB;;;AC9BxB,IAAM,iCAAN,cAA6C,gBAAgB;AAAA;AAAA,EAE3D,IAAI,wBAAwB;AAC1B,UAAM,OAAO,KAAK;AAClB,UAAM,YAAY,KAAK,gBAAgB,KAAK,aAAa;AACzD,UAAM,eAAe,aAAa,UAAU;AAC5C,UAAM,cAAc,aAAa,UAAU;AAC3C,QAAI,eAAe,QAAQ,gBAAgB,QAAQ,eAAe,aAAa;AAC7E,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,sBAAsB;AACxB,UAAM,OAAO,KAAK;AAClB,UAAM,YAAY,KAAK,gBAAgB,KAAK,aAAa;AACzD,UAAM,eAAe,aAAa,UAAU;AAC5C,UAAM,cAAc,aAAa,UAAU;AAC3C,QAAI,eAAe,QAAQ,gBAAgB,QAAQ,eAAe,aAAa;AAC7E,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,cAAc,OAAO,KAAK;AACxB,QAAI,CAAC,KAAK,YAAY,YAAa;AACnC,UAAM,QAAQ,KAAK,YAAY,YAAY;AAC3C,UAAM,SAAS,KAAK,MAAM,cAAc,KAAK,OAAO,KAAK;AACzD,UAAM,OAAO,KAAK,MAAM,aAAa,KAAK,OAAO,GAAG;AACpD,UAAM,OAAO,KAAK;AAClB,UAAM,YAAY,KAAK,gBAAgB,KAAK,aAAa;AACzD,QAAI,WAAW;AACb,gBAAU,gBAAgB;AAC1B,gBAAU,SAAS,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK,MAAM,eAAe;AAAA,EACnC;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,MAAM,cAAc;AAAA,EAC3B;AACF;AACA,MAAM,iCAAiC;;;ACnDvC,IAAM,eAAN,MAAM,cAAa;AAAA,EACjB,cAAc;AACZ,SAAK,SAAS,CAAC;AACf,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,OAAO,KAAK,YAAY;AAAA,EACtC;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EACA,KAAK,OAAO;AAEV,QAAI,KAAK,eAAe,KAAK,OAAO,SAAS,EAAG,MAAK,OAAO,SAAS,KAAK,eAAe;AACzF,SAAK,OAAO,KAAK,KAAK;AACtB,QAAI,KAAK,OAAO,SAAS,cAAa,WAAY,MAAK,OAAO,MAAM;AACpE,SAAK,eAAe,KAAK,OAAO,SAAS;AAAA,EAC3C;AAAA,EACA,GAAG,OAAO;AACR,SAAK,eAAe,KAAK,IAAI,KAAK,IAAI,KAAK,eAAe,OAAO,CAAC,GAAG,KAAK,OAAO,SAAS,CAAC;AAC3F,WAAO,KAAK;AAAA,EACd;AAAA,EACA,OAAO;AACL,WAAO,KAAK,GAAG,EAAE;AAAA,EACnB;AAAA,EACA,OAAO;AACL,WAAO,KAAK,GAAG,CAAE;AAAA,EACnB;AAAA,EACA,QAAQ;AACN,SAAK,OAAO,SAAS;AACrB,SAAK,eAAe;AAAA,EACtB;AACF;AACA,aAAa,aAAa;;;ACtB1B,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,YAAY,IAAI,MAAM;AACpB,SAAK,KAAK,cAAc,cAAc,KAAK,GAAG,qBAAqB,GAAG,YAAY,WAAW,GAAG,YAAY,aAAa,IAAI,+BAA+B,EAAE,IAAI,IAAI,qBAAqB,EAAE;AAC7L,SAAK,SAAS,WAAW,IAAI;AAC7B,SAAK,aAAa,CAAC;AACnB,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,SAAK,iBAAiB;AACtB,SAAK,UAAU,IAAI,aAAa;AAChC,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAC7D,SAAK,YAAY;AAGjB,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AAAA,EACA,WAAW,MAAM;AACf,QAAI;AACJ,WAAO,QAAQ,UAAU,eAAe,KAAK,WAAW,OAAO,SAAS,aAAa,WAAW,IAAI;AAAA,EACtG;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,KAAK,MAAM;AACb,QAAI,KAAK,WAAW,IAAI,EAAG;AAC3B,QAAI,EAAE,gBAAgB,MAAM,WAAW,KAAK,OAAO,gBAAgB,YAAY,IAAI,GAAG;AAEpF,WAAK,OAAO,cAAc;AAAA,QACxB;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,UAAM,SAAS,gBAAgB,MAAM,SAAS,OAAO,WAAW;AAAA,MAC9D;AAAA,IACF,CAAC;AACD,WAAO,gBAAgB,KAAK,OAAO;AACnC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,MAAM,KAAK;AACb,QAAI,KAAK,UAAU,IAAK;AACxB,SAAK,OAAO,QAAQ;AACpB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc,KAAK;AACrB,QAAI,KAAK,kBAAkB,IAAK;AAChC,SAAK,OAAO,gBAAgB;AAC5B,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc,KAAK;AACrB,QAAI,KAAK,kBAAkB,IAAK;AAChC,SAAK,OAAO,gBAAgB;AAC5B,SAAK,cAAc;AACnB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGA,IAAI,aAAa;AACf,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,WAAW,KAAK;AAClB,QAAI,KAAK,OAAO,iBAAiB,GAAG,EAAG;AACvC,SAAK,OAAO,aAAa;AACzB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,IAAI,eAAe;AACjB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA,EAGA,cAAc;AACZ,SAAK,GAAG,WAAW;AAAA,MACjB,iBAAiB,KAAK;AAAA,MACtB,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,gBAAgB;AACd,QAAI,KAAK,GAAI,MAAK,GAAG,aAAa;AAAA,EACpC;AAAA;AAAA,EAGA,WAAW,IAAI,GAAG;AAChB,UAAM,YAAY,KAAK,WAAW,EAAE;AACpC,QAAI,CAAC,UAAW;AAChB,cAAU,QAAQ,OAAK,EAAE,CAAC,CAAC;AAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,iBAAiB;AACnB,WAAO,KAAK,kBAAkB,KAAK,qBAAqB,KAAK,GAAG;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,YAAY;AACd,WAAO,KAAK,kBAAkB,KAAK,qBAAqB,KAAK,GAAG;AAAA,EAClE;AAAA,EACA,IAAI,UAAU,KAAK;AACjB,QAAI,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,SAAU;AACnC,SAAK,GAAG,OAAO,KAAK,GAAG;AACvB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,iBACE;AACA,QAAI,KAAK,iBAAiB,KAAK,GAAG,OAAO;AACvC,cAAQ,KAAK,yGAAyG;AAAA,IACxH;AACA,SAAK,aAAa;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,KAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA;AAAA,EAGA,cAAc;AACZ,SAAK,OAAO,QAAQ,KAAK,GAAG;AAC5B,SAAK,SAAS,KAAK,OAAO;AAC1B,SAAK,iBAAiB,KAAK,OAAO;AAClC,SAAK,iBAAiB,KAAK,OAAO;AAAA,EACpC;AAAA;AAAA,EAGA,cAAc,WAAW;AACvB,UAAM,mBAAmB,KAAK,OAAO;AACrC,UAAM,WAAW,KAAK,OAAO;AAC7B,UAAM,mBAAmB,KAAK,OAAO;AACrC,UAAM,kBAAkB,KAAK;AAC7B,UAAM,YAAY,KAAK,kBAAkB,oBAAoB,KAAK,UAAU,YAAY,KAAK,mBAAmB;AAChH,SAAK,iBAAiB;AACtB,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,QAAI,KAAK,GAAG,UAAU,gBAAiB,MAAK,GAAG,QAAQ;AACvD,QAAI,cAAc,OAAQ,MAAK,YAAY;AAAA,aAAW,aAAa,KAAM,MAAK,YAAY;AAC1F,QAAI,UAAW,MAAK,kBAAkB;AACtC,QAAI,CAAC,KAAK,qBAAqB,aAAa,KAAK,QAAQ,SAAU,MAAK,QAAQ,KAAK;AAAA,MACnF,eAAe;AAAA,MACf,WAAW;AAAA,QACT,OAAO,KAAK;AAAA,QACZ,KAAK,KAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,cAAc,MAAM;AAClB,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,aAAa,CAAC,KAAK,WAAW,IAAI;AACxC,UAAM,aAAa,KAAK,OAAO,iBAAiB,QAAQ;AACxD,QAAI,WAAY,MAAK,OAAO;AAC5B,QAAI,WAAY,MAAK,OAAO,cAAc,QAAQ;AAElD,QAAI,cAAc,WAAY,MAAK,cAAc;AAAA,EACnD;AAAA;AAAA,EAGA,aAAa,WAAW;AACtB,QAAI,aAAa,KAAM;AACvB,SAAK,YAAY;AAGjB,SAAK,mBAAmB,SAAS;AAAA,EACnC;AAAA;AAAA,EAGA,mBAAmB,WAAW;AAC5B,SAAK,mBAAmB;AACxB,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB,WAAW,MAAM;AACtC,UAAI,CAAC,KAAK,GAAI;AACd,WAAK,YAAY,KAAK;AACtB,WAAK,mBAAmB;AAAA,IAC1B,GAAG,EAAE;AAAA,EACP;AAAA;AAAA,EAGA,oBAAoB;AAClB,SAAK,WAAW,UAAU,KAAK,WAAW;AAC1C,QAAI,KAAK,OAAO,WAAY,MAAK,WAAW,YAAY,KAAK,WAAW;AAAA,EAC1E;AAAA;AAAA,EAGA,qBAAqB;AACnB,QAAI,KAAK,iBAAiB;AACxB,mBAAa,KAAK,eAAe;AACjC,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA;AAAA,EAGA,cAAc;AACZ,SAAK,YAAY,KAAK,OAAO,gBAAgB,KAAK,OAAO,gBAAgB,KAAK,WAAW,UAAU,IAAI,CAAC;AAAA,EAC1G;AAAA;AAAA,EAGA,sBAAsB;AACpB,QAAI,KAAK,mBAAmB,KAAK,UAAW;AAC5C,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGA,GAAG,IAAI,SAAS;AACd,QAAI,CAAC,KAAK,WAAW,EAAE,EAAG,MAAK,WAAW,EAAE,IAAI,CAAC;AACjD,SAAK,WAAW,EAAE,EAAE,KAAK,OAAO;AAChC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,IAAI,SAAS;AACf,QAAI,CAAC,KAAK,WAAW,EAAE,EAAG,QAAO;AACjC,QAAI,CAAC,SAAS;AACZ,aAAO,KAAK,WAAW,EAAE;AACzB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,KAAK,WAAW,EAAE,EAAE,QAAQ,OAAO;AAClD,QAAI,UAAU,EAAG,MAAK,WAAW,EAAE,EAAE,OAAO,QAAQ,CAAC;AACrD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,GAAG;AACV,SAAK,cAAc;AACnB,SAAK,mBAAmB;AACxB,UAAM,UAAU,IAAI,cAAc;AAAA;AAAA,MAEhC,OAAO,KAAK,GAAG;AAAA,MACf,WAAW,KAAK;AAAA;AAAA,MAEhB,UAAU,KAAK;AAAA,MACf,cAAc,KAAK;AAAA,IACrB,CAAC;AACD,UAAM,cAAc,KAAK,OAAO;AAChC,UAAM,SAAS,KAAK,OAAO,OAAO,QAAQ,gBAAgB,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,iBAAiB;AAAA,MAC3H,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC,EAAE;AAIH,UAAM,kBAAkB,gBAAgB,KAAK,OAAO,gBAAgB,QAAQ,kBAAkB,UAAU;AACxG,QAAI,YAAY,KAAK,OAAO,gBAAgB,QAAQ,iBAAiB,QAAQ,eAAe;AAC5F,QAAI,oBAAoB,UAAU,KAAM,aAAY,KAAK,OAAO,gBAAgB,WAAW,UAAU,IAAI;AACzG,SAAK,cAAc,SAAS;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,YAAY;AACV,QAAI,KAAK,iBAAiB,KAAK,GAAG,MAAO,MAAK,YAAY;AAC1D,SAAK,OAAO,SAAS;AACrB,SAAK,cAAc;AACnB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ,IAAI;AACV,OAAG,eAAe;AAClB,OAAG,gBAAgB;AAAA,EACrB;AAAA;AAAA,EAGA,SAAS,IAAI;AACX,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA,EAGA,SAAS,IAAI;AACX,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EACA,UAAU;AACR,SAAK,mBAAmB,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC7C;AAAA,EACA,UAAU;AACR,SAAK,mBAAmB,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC7C;AAAA,EACA,mBAAmB,OAAO;AACxB,QAAI,CAAC,MAAO;AACZ,SAAK,mBAAmB;AACxB,SAAK,gBAAgB,MAAM;AAC3B,SAAK,GAAG,OAAO,MAAM,UAAU,OAAO,MAAM,UAAU,GAAG;AACzD,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA,EAGA,UAAU;AACR,SAAK,cAAc;AACnB,SAAK,WAAW,SAAS;AACzB,WAAO,KAAK;AAAA,EACd;AACF;AACA,MAAM,YAAY;;;ACxVlB,IAAM,gBAAN,MAAM,eAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EASlB,OAAO,UAAU,MAAM;AACrB,WAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,eAAc,CAAC;AAAA,EAChE;AAAA,EACA,YAAY,SAAS;AACnB,WAAO,OAAO,MAAM;AAAA,MAClB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW;AAAA,MACX,MAAM;AAAA,IACR,GAAG,OAAO;AAAA,EACZ;AAAA;AAAA,EAGA,UAAU,SAAS;AACjB,SAAK,YAAY,QAAQ;AACzB,SAAK,eAAe,QAAQ;AAC5B,SAAK,aAAa,QAAQ;AAC1B,SAAK,OAAO,KAAK,QAAQ,QAAQ;AACjC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,SAAS;AACX,WAAO,KAAK,YAAY,KAAK,SAAS;AAAA,EACxC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,QAAQ,KAAK,WAAW,KAAK,KAAK;AAAA,EAC3C;AAAA,EACA,OAAO,SAAS;AACd,WAAO,KAAK,aAAa,QAAQ,YAAY,KAAK,cAAc,QAAQ,aAAa,KAAK,gBAAgB,QAAQ,eAAe,KAAK,SAAS,QAAQ;AAAA,EACzJ;AACF;AACA,MAAM,gBAAgB;;;AC3CtB,IAAM,wBAAN,MAA4B;AAAA;AAAA;AAAA;AAAA,EAO1B,YAAY,OAAO,MAAM,MAAM;AAC7B,QAAI,UAAU,QAAQ;AACpB,cAAQ;AAAA,IACV;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AAAA,EACA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EACA,OAAO,MAAM;AACX,SAAK,SAAS,OAAO,IAAI;AAAA,EAC3B;AAAA,EACA,SAAS,QAAQ;AACf,WAAO,OAAO,OAAO,KAAK,SAAS,GAAG;AAAA,MACpC,MAAM;AAAA,IACR,CAAC,EAAE,UAAU,OAAO,mBAAmB,CAAC;AAAA,EAC1C;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,WAAO,OAAO,MAAM,KAAK;AAAA,EAC3B;AAAA,EACA,QAAQ,WAAW;AACjB,QAAI,CAAC,KAAK,MAAM,UAAU,aAAa,QAAQ,KAAK,QAAQ,UAAW,QAAO;AAC9E,UAAM,YAAY,KAAK,MAAM,CAAC;AAC9B,SAAK,QAAQ,KAAK,MAAM,MAAM,CAAC;AAC/B,WAAO;AAAA,EACT;AAAA,EACA,QAAQ;AACN,QAAI,CAAC,KAAK,MAAM,OAAQ,QAAO;AAC/B,UAAM,YAAY,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAClD,SAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,EAAE;AACnC,WAAO;AAAA,EACT;AACF;;;ACxCA,IAAM,SAAN,MAAM,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BX,YAAY,MAAM;AAChB,SAAK,SAAS;AACd,SAAK,QAAQ;AAAA,MACX,GAAG,QAAO;AAAA,MACV,GAAG;AAAA,IACL,CAAC;AACD,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,cAAc,MAAM;AAClB,QAAI,CAAC,KAAK,iBAAiB,IAAI,EAAG;AAClC,SAAK,iBAAiB,KAAK,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,EACrD;AAAA;AAAA,EAGA,QAAQ,MAAM;AACZ,WAAO,OAAO,MAAM,IAAI;AAAA,EAC1B;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ;AACN,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,QAAQ,OAAO;AAAA,MAClB,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,QAAQ,OAAO,OAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,cAAQ;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AACA,SAAK,MAAM;AACX,SAAK,OAAO,OAAO,OAAO,EAAE;AAC5B,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc,OAAO;AACvB,SAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACxB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK;AAAA,EAC1D;AAAA,EACA,IAAI,WAAW,OAAO;AACpB,QAAI,KAAK,QAAQ;AACf,WAAK,QAAQ,KAAK,OAAO,OAAO,IAAI;AAAA,IACtC,OAAO;AACL,WAAK,gBAAgB,OAAO,KAAK;AAAA,IACnC;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK,aAAa,GAAG,KAAK,aAAa,QAAQ;AAAA,MACpD,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EACA,IAAI,cAAc,OAAO;AACvB,SAAK,QAAQ,OAAO;AAAA,MAClB,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,aAAa;AACf,WAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,gBAAgB,WAAW,WAAW;AACpC,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,WAAO,KAAK,IAAI,KAAK,aAAa,QAAQ,QAAQ,OAAO;AAAA,EAC3D;AAAA;AAAA,EAGA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,WAAO,KAAK,aAAa,MAAM,SAAS,KAAK;AAAA,EAC/C;AAAA;AAAA,EAGA,YAAY,SAAS,OAAO;AAC1B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,WAAO,IAAI,sBAAsB,KAAK,aAAa,SAAS,KAAK,GAAG,OAAO;AAAA,EAC7E;AAAA;AAAA,EAGA,WAAW,MAAM;AACf,QAAI,SAAS,IAAI,EAAG,QAAO,IAAI,sBAAsB,OAAO,IAAI,CAAC;AACjE,WAAO,KAAK,SAAS,IAAI;AAAA,EAC3B;AAAA;AAAA,EAGA,eAAe,IAAI,OAAO;AACxB,QAAI,CAAC,GAAI,QAAO,IAAI,cAAc;AAClC,SAAK,UAAU;AACf,WAAO,IAAI,cAAc;AAAA,MACvB,UAAU;AAAA,MACV,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,YAAY,IAAI,OAAO,WAAW;AAChC,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,kBAAkB,KAAK;AAC7B,QAAI;AACJ,KAAC,IAAI,OAAO,IAAI,KAAK,cAAc,IAAI,KAAK;AAC5C,QAAI,IAAI;AACN,gBAAU,QAAQ,UAAU,KAAK,eAAe,IAAI,KAAK,CAAC;AAK1D,UAAI,CAAC,QAAQ,eAAe,KAAK,YAAY,OAAO;AAClD,cAAM,aAAa,KAAK;AACxB,aAAK,QAAQ;AACb,YAAI,aAAa,KAAK,IAAI,KAAK;AAC/B,cAAM,YAAY,KAAK,eAAe,IAAI,KAAK;AAC/C,qBAAa,WAAW,UAAU,SAAS;AAI3C,YAAI,UAAU,eAAe,WAAW,OAAO,OAAO,GAAG;AACvD,oBAAU;AAAA,QACZ,OAAO;AACL,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,UAAU;AACpB,UAAI;AACJ,UAAI,WAAW,KAAK,WAAW,KAAK,MAAM;AAC1C,UAAI,YAAY,aAAa,MAAM;AAEjC,cAAM,kBAAkB,KAAK;AAC7B,YAAI,KAAK,cAAc,MAAM;AAC3B,2BAAiB,UAAU;AAC3B,mBAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,QAAQ,EAAE,GAAG;AACnD,sBAAU,QAAQ,KAAK,aAAa,SAAS,QAAQ,SAAS;AAAA,UAChE;AAAA,QACF;AACA,YAAI,cAAc,KAAK,WAAW,SAAS;AAC3C,mBAAW,YAAY,YAAY,WAAW,UAAU,SAAS,EAAE;AAGnE,YAAI,EAAE,YAAY,YAAY,aAAa,KAAK,cAAc,SAAS;AACrE,eAAK,QAAQ;AACb,2BAAiB,UAAU;AAC3B,mBAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,QAAQ,EAAE,GAAG;AACnD,sBAAU,MAAM;AAAA,UAClB;AACA,wBAAc,KAAK,WAAW,SAAS;AACvC,qBAAW,YAAY,YAAY,WAAW,UAAU,SAAS,EAAE;AAAA,QACrE;AAGA,YAAI,YAAY,YAAY,SAAU,MAAK,QAAQ;AAAA,MACrD;AAGA,UAAI,CAAC,UAAU;AACb,kBAAU,IAAI,cAAc;AAC5B,aAAK,QAAQ;AACb,YAAI,aAAa,eAAgB,WAAU,QAAQ;AAAA,MACrD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB;AACnB,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA;AAAA,EAGA,eAAe;AACb,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,KAAK,OAAO,MAAM;AACvB,QAAI,CAAC,SAAS,GAAG,EAAG,OAAM,IAAI,MAAM,wBAAwB;AAC5D,UAAM,YAAY,SAAS,IAAI,IAAI,IAAI,sBAAsB,OAAO,IAAI,CAAC,IAAI;AAC7E,QAAI,SAAS,QAAQ,MAAM,KAAM,OAAM,mBAAmB,KAAK;AAC/D,QAAI;AACJ,KAAC,KAAK,OAAO,IAAI,KAAK,UAAU,KAAK,KAAK;AAC1C,aAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,EAAE,IAAI;AACtC,YAAM,IAAI,KAAK,YAAY,IAAI,EAAE,GAAG,OAAO,SAAS;AACpD,UAAI,CAAC,EAAE,eAAe,CAAC,KAAK,cAAc,IAAI,EAAE,GAAG,OAAO,SAAS,EAAG;AACtE,cAAQ,UAAU,CAAC;AAAA,IACrB;AACA,SAAK,KAAK,UAAU,QAAQ,KAAK,UAAU,aAAa,SAAS,QAAQ,MAAM,SAAS,KAAK;AAC3F,cAAQ,UAAU,KAAK,aAAa,CAAC;AAAA,IACvC;AAGA,QAAI,aAAa,MAAM;AACrB,cAAQ,aAAa,KAAK,WAAW,SAAS,EAAE;AAAA,IAIlD;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,SAAK,SAAS,KAAK,aAAa,MAAM,GAAG,OAAO,IAAI,KAAK,aAAa,MAAM,KAAK;AACjF,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA;AAAA,EAGA,iBAAiB,IAAI;AACnB,QAAI,KAAK,eAAe,CAAC,KAAK,aAAc,QAAO,GAAG;AACtD,SAAK,cAAc;AACnB,UAAM,WAAW,KAAK;AACtB,UAAM,QAAQ,KAAK;AACnB,UAAM,MAAM,GAAG;AACf,SAAK,gBAAgB;AAErB,QAAI,KAAK,SAAS,KAAK,UAAU,SAAS,MAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;AACzE,WAAK,OAAO,MAAM,MAAM,KAAK,aAAa,MAAM,GAAG,CAAC,GAAG,EAAE;AACzD,WAAK,SAAS;AAAA,IAChB;AACA,WAAO,KAAK;AACZ,WAAO;AAAA,EACT;AAAA,EACA,YAAY,IAAI;AACd,QAAI,KAAK,aAAa,CAAC,KAAK,aAAc,QAAO,GAAG,IAAI;AACxD,SAAK,YAAY;AACjB,UAAM,QAAQ,KAAK;AACnB,UAAM,MAAM,GAAG,IAAI;AACnB,SAAK,QAAQ;AACb,WAAO,KAAK;AACZ,WAAO;AAAA,EACT;AAAA,EACA,cAAc,IAAI,OAAO,WAAW;AAClC,WAAO,QAAQ,KAAK,WAAW;AAAA,EACjC;AAAA;AAAA,EAGA,UAAU,KAAK,OAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,WAAO,cAAc,UAAU,KAAK,UAAU,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,EACpF;AAAA;AAAA,EAGA,cAAc,KAAK,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,WAAO,cAAc,UAAU,KAAK,cAAc,KAAK,YAAY,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,EAC5F;AAAA;AAAA,EAGA,WAAW,OAAO;AAChB,YAAQ,CAAC,KAAK,YAAY,KAAK,SAAS,KAAK,OAAO,MAAM,KAAK,OAAO,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK;AAAA,EACpH;AAAA;AAAA,EAGA,WAAW;AACT,QAAI,KAAK,OAAQ,MAAK,OAAO,KAAK,OAAO,IAAI;AAAA,EAC/C;AAAA,EACA,OAAO,OAAO,aAAa,UAAU,iBAAiB,OAAO;AAC3D,QAAI,aAAa,QAAQ;AACvB,iBAAW;AAAA,IACb;AACA,QAAI,oBAAoB,QAAQ;AAC9B,wBAAkB,UAAU;AAAA,IAC9B;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,UAAU,QAAQ;AACxB,UAAM,OAAO,KAAK,YAAY,OAAO;AACrC,UAAM,cAAc,KAAK,UAAU,QAAQ,KAAK,UAAU;AAC1D,QAAI;AACJ,QAAI,aAAa;AACf,wBAAkB,eAAe,eAAe;AAChD,oBAAc,KAAK,aAAa,GAAG,SAAS;AAAA,QAC1C,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,QAAI,iBAAiB;AACrB,UAAM,UAAU,IAAI,cAAc;AAGlC,QAAI,oBAAoB,UAAU,MAAM;AACtC,uBAAiB,KAAK,gBAAgB,OAAO,cAAc,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,eAAe;AAG9H,cAAQ,YAAY,iBAAiB;AAAA,IACvC;AACA,YAAQ,UAAU,KAAK,OAAO,cAAc,CAAC;AAC7C,QAAI,eAAe,oBAAoB,UAAU,QAAQ,gBAAgB,KAAK,eAAe;AAC3F,UAAI,oBAAoB,UAAU,YAAY;AAC5C,YAAI;AACJ,eAAO,gBAAgB,KAAK,kBAAkB,YAAY,KAAK,aAAa,SAAS;AACnF,kBAAQ,UAAU,IAAI,cAAc;AAAA,YAClC,WAAW;AAAA,UACb,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC;AAAA,QAC1C;AAAA,MACF,WAAW,oBAAoB,UAAU,aAAa;AACpD,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AACA,WAAO,QAAQ,UAAU,KAAK,OAAO,UAAU,OAAO,IAAI,CAAC;AAAA,EAC7D;AAAA,EACA,WAAW,MAAM;AACf,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EACA,iBAAiB,MAAM;AACrB,WAAO,CAAC,eAAe,MAAM,IAAI;AAAA,EACnC;AAAA,EACA,iBAAiB,OAAO;AACtB,UAAM,OAAO,KAAK;AAClB,WAAO,UAAU,QAAQ,QAAO,aAAa,SAAS,KAAK,KAAK,QAAO,aAAa,SAAS,IAAI,MAAM,KAAK,SAAS,KAAK,OAAO,OAAO,IAAI,MAAM,KAAK,OAAO,KAAK,YAAY,IAAI,IAAI;AAAA,EACzL;AAAA,EACA,IAAI,OAAO;AACT,WAAO,IAAI,cAAc;AAAA,EAC3B;AACF;AACA,OAAO,WAAW;AAAA,EAChB,aAAa;AACf;AACA,OAAO,eAAe,CAAC,QAAW,MAAM,EAAE;AAC1C,MAAM,SAAS;;;AC9Zf,IAAM,oBAAN,MAAM,mBAAkB;AAAA;AAAA,EAGtB,YAAY,QAAQ,MAAM;AACxB,QAAI,WAAW,QAAQ;AACrB,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EACA,WAAW;AACT,WAAO,KAAK,OAAO,IAAI,MAAM,EAAE,KAAK,EAAE;AAAA,EACxC;AAAA,EACA,OAAO,WAAW;AAChB,QAAI,CAAC,OAAO,SAAS,EAAG;AACxB,gBAAY,SAAS,SAAS,IAAI,IAAI,sBAAsB,OAAO,SAAS,CAAC,IAAI;AACjF,UAAM,YAAY,KAAK,OAAO,KAAK,OAAO,SAAS,CAAC;AACpD,UAAM,aAAa;AAAA,KAEnB,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAQ;AAAA,IAEvD,UAAU,SAAS,UAAU,OAAO,UAAU,SAAS,EAAE;AACzD,QAAI,qBAAqB,uBAAuB;AAE9C,UAAI,YAAY;AAEd,kBAAU,OAAO,UAAU,SAAS,CAAC;AAAA,MACvC,OAAO;AAEL,aAAK,OAAO,KAAK,SAAS;AAAA,MAC5B;AAAA,IACF,WAAW,qBAAqB,oBAAmB;AACjD,UAAI,UAAU,QAAQ,MAAM;AAE1B,YAAI;AACJ,eAAO,UAAU,OAAO,UAAU,UAAU,OAAO,CAAC,EAAE,QAAQ,MAAM;AAClE,2BAAiB,UAAU,OAAO,MAAM;AACxC,yBAAe,QAAQ,UAAU;AACjC,eAAK,OAAO,cAAc;AAAA,QAC5B;AAAA,MACF;AAGA,UAAI,UAAU,SAAS,GAAG;AAExB,kBAAU,OAAO,UAAU;AAC3B,aAAK,OAAO,KAAK,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS,QAAQ;AACf,QAAI,EAAE,kBAAkB,MAAM,gBAAgB;AAC5C,YAAM,OAAO,IAAI,sBAAsB,KAAK,SAAS,CAAC;AACtD,aAAO,KAAK,SAAS,MAAM;AAAA,IAC7B;AACA,UAAM,UAAU,IAAI,cAAc;AAClC,aAAS,KAAK,GAAG,KAAK,KAAK,OAAO,QAAQ,EAAE,IAAI;AAC9C,YAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAM,gBAAgB,OAAO,eAAe,OAAO,aAAa,MAAM;AACtE,YAAM,OAAO,MAAM;AACnB,UAAI;AACJ,UAAI,QAAQ;AAAA,OAEZ,CAAC,iBAAiB,cAAc,SAAS,OAAO;AAC9C,YAAI,iBAAiB;AAAA,QAErB,OAAO,OAAO,QAAQ,IAAI,KAAK,GAAG;AAChC,kBAAQ,UAAU,OAAO,mBAAmB,IAAI,CAAC;AAAA,QACnD;AACA,qBAAa,iBAAiB,sBAAqB,OAAO,QAAQ,IAAI;AAAA,MACxE;AACA,UAAI,YAAY;AACd,cAAM,cAAc,WAAW,WAAW,KAAK;AAC/C,gBAAQ,UAAU,WAAW;AAG7B,cAAM,cAAc,MAAM,SAAS,EAAE,MAAM,YAAY,YAAY,MAAM;AACzE,YAAI,YAAa,SAAQ,UAAU,OAAO,OAAO,aAAa;AAAA,UAC5D,MAAM;AAAA,QACR,CAAC,CAAC;AAAA,MACJ,OAAO;AACL,gBAAQ,UAAU,OAAO,OAAO,MAAM,SAAS,GAAG;AAAA,UAChD,MAAM;AAAA,QACR,CAAC,CAAC;AAAA,MACJ;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK,OAAO,IAAI,OAAK,EAAE,KAAK;AAAA,MACpC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,WAAO,OAAO,MAAM,KAAK;AACzB,SAAK,SAAS,OAAO,IAAI,YAAU;AACjC,YAAM,QAAQ,YAAY,SAAS,IAAI,mBAAkB,IAAI,IAAI,sBAAsB;AACvF,YAAM,QAAQ;AACd,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,WAAW;AACjB,QAAI,CAAC,KAAK,OAAO,UAAU,aAAa,QAAQ,KAAK,QAAQ,UAAW,QAAO;AAC/E,UAAM,gBAAgB,aAAa,OAAO,YAAY,KAAK,OAAO;AAClE,QAAI,KAAK;AACT,WAAO,KAAK,KAAK,OAAO,QAAQ;AAC9B,YAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAM,YAAY,MAAM,QAAQ,aAAa;AAC7C,UAAI,MAAM,SAAS,GAAG;AAGpB,YAAI,CAAC,UAAW;AAChB,UAAE;AAAA,MACJ,OAAO;AAEL,aAAK,OAAO,OAAO,IAAI,CAAC;AAAA,MAC1B;AACA,UAAI,UAAW,QAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EACA,QAAQ;AACN,QAAI,CAAC,KAAK,OAAO,OAAQ,QAAO;AAChC,QAAI,KAAK,KAAK,OAAO,SAAS;AAC9B,WAAO,KAAK,IAAI;AACd,YAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAM,YAAY,MAAM,MAAM;AAC9B,UAAI,MAAM,SAAS,GAAG;AAGpB,YAAI,CAAC,UAAW;AAChB,UAAE;AAAA,MACJ,OAAO;AAEL,aAAK,OAAO,OAAO,IAAI,CAAC;AAAA,MAC1B;AACA,UAAI,UAAW,QAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AACF;;;ACzJA,IAAM,gBAAN,MAAoB;AAAA,EAClB,YAAY,QAAQ,KAAK;AACvB,SAAK,SAAS;AACd,SAAK,OAAO,CAAC;AACb,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,IAAI,OAAO,eAAe,GAAG,MAAM,MAAM;AAAA;AAAA,MAEzC;AAAA,QACE,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA;AAAA;AAAA,MAEA;AAAA,QACE,OAAO,KAAK,OAAO,QAAQ;AAAA,QAC3B,QAAQ;AAAA,MACV;AAAA;AACA,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,KAAK;AAAA,EACZ;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO,QAAQ,KAAK,KAAK;AAAA,EACvC;AAAA,EACA,IAAI,MAAM;AACR,WAAO,KAAK,OAAO,eAAe,KAAK,KAAK,IAAI,KAAK;AAAA,EACvD;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,IAAI,KAAK;AAAA,IACX;AAAA,EACF;AAAA,EACA,IAAI,MAAM,GAAG;AACX,WAAO,OAAO,MAAM,CAAC;AAAA,EACvB;AAAA,EACA,YAAY;AACV,SAAK,KAAK,KAAK,KAAK,KAAK;AAAA,EAC3B;AAAA,EACA,WAAW;AACT,UAAM,IAAI,KAAK,KAAK,IAAI;AACxB,QAAI,EAAG,MAAK,QAAQ;AACpB,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AACV,QAAI,KAAK,MAAO;AAChB,QAAI,KAAK,QAAQ,GAAG;AAClB,WAAK,QAAQ;AACb,WAAK,SAAS;AAAA,IAChB;AACA,QAAI,KAAK,SAAS,KAAK,OAAO,QAAQ,QAAQ;AAC5C,WAAK,QAAQ,KAAK,OAAO,QAAQ,SAAS;AAC1C,WAAK,SAAS,KAAK,MAAM,aAAa;AAAA,IACxC;AAAA,EACF;AAAA,EACA,UAAU,IAAI;AACZ,SAAK,UAAU;AACf,SAAK,KAAK,UAAU,GAAG,KAAK,KAAK,OAAO,EAAE,KAAK,OAAO,KAAK,WAAW,cAAc,KAAK,UAAU,OAAO,SAAS,YAAY,aAAa,WAAW,GAAG;AACxJ,UAAI;AACJ,UAAI,GAAG,EAAG,QAAO,KAAK,KAAK;AAAA,IAC7B;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EACA,WAAW,IAAI;AACb,SAAK,UAAU;AACf,SAAK,KAAK,UAAU,GAAG,KAAK,QAAQ,KAAK,OAAO,QAAQ,QAAQ,EAAE,KAAK,OAAO,KAAK,SAAS,GAAG;AAC7F,UAAI,GAAG,EAAG,QAAO,KAAK,KAAK;AAAA,IAC7B;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EACA,uBAAuB;AACrB,WAAO,KAAK,UAAU,MAAM;AAC1B,UAAI,KAAK,MAAM,WAAW,CAAC,KAAK,MAAM,MAAO;AAC7C,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,UAAU;AAC1E,UAAI,KAAK,WAAW,EAAG,QAAO;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EACA,sBAAsB;AAKpB,WAAO,KAAK,UAAU,MAAM;AAC1B,UAAI,KAAK,MAAM,QAAS;AACxB,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB;AACvB,WAAO,KAAK,UAAU,MAAM;AAC1B,UAAI,KAAK,MAAM,WAAW,KAAK,MAAM,cAAc,CAAC,KAAK,MAAM,MAAO;AACtE,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB;AACtB,WAAO,KAAK,WAAW,MAAM;AAC3B,UAAI,KAAK,MAAM,WAAW,CAAC,KAAK,MAAM,MAAO;AAC7C,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,WAAW;AAC3E,UAAI,KAAK,WAAW,KAAK,MAAM,MAAM,OAAQ,QAAO;AAAA,IACtD,CAAC;AAAA,EACH;AAAA,EACA,uBAAuB;AACrB,WAAO,KAAK,WAAW,MAAM;AAC3B,UAAI,KAAK,MAAM,QAAS;AAGxB,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AAKpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B;AACxB,WAAO,KAAK,WAAW,MAAM;AAC3B,UAAI,KAAK,MAAM,WAAW,KAAK,MAAM,cAAc,CAAC,KAAK,MAAM,MAAO;AAGtE,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;AC3HA,IAAM,yBAAN,MAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa3B,YAAY,MAAM;AAChB,WAAO,OAAO,MAAM,IAAI;AACxB,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAAc,KAAK,QAAQ;AAAA,EACzC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAAc,KAAK,QAAQ;AAAA,EACzC;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,QAAQ;AACN,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,SAAK,SAAS,KAAK,OAAO,MAAM,GAAG,OAAO,IAAI,KAAK,OAAO,MAAM,KAAK;AACrE,QAAI,CAAC,KAAK,OAAQ,MAAK,cAAc;AACrC,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,cAAc,QAAQ;AACxB,kBAAY,UAAU;AAAA,IACxB;AACA,UAAM,SAAS;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,YAAQ,WAAW;AAAA,MACjB,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACb,eAAO;AAAA,MACT,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,WAAO,KAAK,cAAc,QAAQ,UAAU;AAAA,EAC9C;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,WAAO,MAAM,OAAO,KAAK,eAAe,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK;AAAA,EAC/E;AAAA,EACA,IAAI,aAAa;AACf,WAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW;AACb,WAAO,QAAQ,KAAK,MAAM;AAAA,EAC5B;AAAA,EACA,YAAY,IAAI,OAAO;AACrB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,KAAK,SAAU,QAAO,IAAI,cAAc;AAC5C,UAAM,cAAc,KAAK,UAAU,QAAQ,KAAK,UAAU;AAC1D,UAAM,WAAW,KAAK,SAAS;AAC/B,UAAM,aAAa,aAAa,KAAK,eAAe,MAAM,SAAS,MAAM,SAAS,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM;AACxH,UAAM,UAAU,IAAI,cAAc;AAAA,MAChC,UAAU,KAAK;AAAA,MACf,aAAa,aAAa,KAAK,OAAO;AAAA,IACxC,CAAC;AACD,SAAK,SAAS,KAAK;AACnB,SAAK,cAAc,eAAe,MAAM,OAAO,MAAM;AACrD,WAAO;AAAA,EACT;AAAA,EACA,eAAe;AACb,WAAO,KAAK,YAAY,KAAK,MAAM;AAAA,MACjC,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB;AACnB,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,SAAU,QAAO;AAC1B,SAAK,SAAS,QAAQ,WAAW,KAAK;AACtC,WAAO;AAAA,EACT;AAAA,EACA,cAAc;AACZ,WAAO,IAAI,sBAAsB,EAAE;AAAA,EACrC;AAAA,EACA,WAAW,MAAM;AACf,QAAI,SAAS,IAAI,EAAG,QAAO,IAAI,sBAAsB,OAAO,IAAI,CAAC;AACjE,WAAO,KAAK,SAAS,IAAI;AAAA,EAC3B;AAAA,EACA,OAAO,KAAK,OAAO,MAAM;AACvB,UAAM,UAAU,KAAK,YAAY,IAAI,CAAC,GAAG,KAAK;AAC9C,QAAI,QAAQ,MAAM;AAChB,cAAQ,aAAa,KAAK,WAAW,IAAI,EAAE;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,EAAC;AAAA,EACZ,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,SAAS,MAAM;AACpB,SAAK,cAAc,QAAQ,MAAM,cAAc;AAAA,EACjD;AAAA,EACA,IAAI,OAAO;AACT,WAAO,KAAK,mBAAmB;AAAA,EACjC;AACF;;;AChJA,IAAM,yBAAN,MAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiB3B,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,SAAK,SAAS,WAAW,QAAQ;AACjC,WAAO,OAAO,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,QAAQ;AACN,SAAK,WAAW;AAChB,SAAK,OAAO,MAAM;AAAA,EACpB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,QAAI,YAAY,KAAK,SAAS,GAAG;AAC/B,WAAK,WAAW;AAChB,aAAO,KAAK,OAAO,OAAO,SAAS,KAAK;AAAA,IAC1C;AACA,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO,UAAU,KAAK,YAAY,CAAC,KAAK,aAAa,KAAK,kBAAkB;AAAA,EAC1F;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,OAAO,SAAS,KAAK,eAAe,KAAK;AAAA,EACvD;AAAA,EACA,IAAI,aAAa;AACf,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,KAAK;AAAA,EAC5C;AAAA,EACA,YAAY,IAAI,OAAO;AACrB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,KAAK,SAAU,QAAO,IAAI,cAAc;AAC5C,UAAM,QAAQ,KAAK,OAAO;AAE1B,QAAI,UAAU,KAAK,OAAO,YAAY,IAAI,KAAK,iBAAiB,KAAK,CAAC;AACtE,QAAI,QAAQ,YAAY,KAAK,WAAW,KAAK,MAAM,OAAO;AACxD,gBAAU,IAAI,cAAc;AAC5B,WAAK,OAAO,QAAQ;AAAA,IACtB;AACA,QAAI,CAAC,QAAQ,YAAY,CAAC,KAAK,cAAc,CAAC,KAAK,QAAQ,CAAC,MAAM,OAAO;AACvE,cAAQ,WAAW,KAAK;AAAA,IAC1B;AACA,YAAQ,OAAO,CAAC,QAAQ,YAAY,CAAC,KAAK;AAC1C,SAAK,WAAW,QAAQ,QAAQ,QAAQ;AACxC,WAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,OAAO,MAAM;AAEvB,WAAO,KAAK,OAAO,OAAO,KAAK,KAAK,iBAAiB,KAAK,GAAG,IAAI;AAAA,EACnE;AAAA,EACA,qBAAqB;AACnB,QAAI,KAAK,YAAY,KAAK,WAAY,QAAO,IAAI,cAAc;AAC/D,SAAK,WAAW;AAChB,WAAO,IAAI,cAAc;AAAA,MACvB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,eAAe;AACb,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,WAAO,KAAK,OAAO,YAAY,SAAS,KAAK;AAAA,EAC/C;AAAA,EACA,WAAW,MAAM;AACf,WAAO,KAAK,OAAO,WAAW,IAAI;AAAA,EACpC;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,WAAO,KAAK,OAAO,aAAa,SAAS,OAAO,KAAK;AAAA,EACvD;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,cAAc,QAAQ;AACxB,kBAAY,UAAU;AAAA,IACxB;AACA,UAAM,SAAS;AACf,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,WAAW,KAAK,IAAI,KAAK,IAAI,WAAW,MAAM,GAAG,MAAM;AAC7D,YAAQ,WAAW;AAAA,MACjB,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACb,eAAO,KAAK,aAAa,WAAW;AAAA,MACtC,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACb,eAAO,KAAK,aAAa,WAAW;AAAA,MACtC,KAAK,UAAU;AAAA,MACf;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,WAAO,KAAK,MAAM,MAAM,SAAS,KAAK,EAAE;AAAA,EAC1C;AAAA,EACA,WAAW,OAAO;AAChB,WAAO,KAAK,OAAO,WAAW,KAAK,iBAAiB,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK,iBAAiB,KAAK,CAAC;AAAA,EACrI;AAAA,EACA,WAAW;AACT,SAAK,OAAO,SAAS;AAAA,EACvB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,MACrB,QAAQ,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,OAAO,QAAQ,MAAM;AAC1B,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EACA,iBAAiB,OAAO;AACtB,QAAI;AACJ,WAAO;AAAA,MACL,GAAG;AAAA,MACH,mBAAmB,SAAS,SAAS,wBAAwB,MAAM,qBAAqB,OAAO,SAAS,sBAAsB,YAAY,SAAS,OAAO,SAAS,MAAM;AAAA,IAC3K;AAAA,EACF;AAAA,EACA,IAAI,OAAO;AACT,WAAO,IAAI,cAAc;AAAA,EAC3B;AACF;AACA,uBAAuB,sBAAsB;AAAA,EAC3C,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EAEL,KAAK;AACP;;;ACjLA,IAAM,eAAN,cAA2B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhC,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,OAAO,KAAK;AAClB,QAAI,KAAM,MAAK,WAAW,WAAS,MAAM,OAAO,IAAI,KAAK;AACzD,UAAM,QAAQ,IAAI;AAAA,EACpB;AACF;AACA,MAAM,eAAe;;;ACdrB,IAAM,gBAAN,MAAM,uBAAsB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBjC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAG,eAAc;AAAA,MACjB,GAAG;AAAA,MACH,aAAa,OAAO,OAAO,CAAC,GAAG,uBAAuB,qBAAqB,QAAQ,OAAO,SAAS,KAAK,WAAW;AAAA,IACrH,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,SAAK,cAAc,OAAO,OAAO,CAAC,GAAG,KAAK,aAAa,KAAK,WAAW;AACvE,UAAM,QAAQ,IAAI;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,eAAe;AACb,UAAM,OAAO,KAAK;AAClB,SAAK,UAAU,CAAC;AAChB,SAAK,cAAc;AACnB,SAAK,SAAS,CAAC;AACf,SAAK,gBAAgB,CAAC;AACtB,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,WAAW,CAAC,KAAM;AACvB,QAAI,iBAAiB;AACrB,QAAI,gBAAgB;AACpB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,UAAI,KAAK,QAAQ;AACf,cAAM,IAAI,QAAQ,MAAM,CAAC;AACzB,cAAM,SAAS,OAAO,KAAK,KAAK,MAAM,EAAE,OAAO,CAAAA,WAAS,EAAE,QAAQA,MAAK,MAAM,CAAC;AAE9E,eAAO,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AAEzC,cAAM,QAAQ,OAAO,CAAC;AACtB,YAAI,OAAO;AACT,gBAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA,GAAG;AAAA,UACL,IAAI,cAAc,KAAK,OAAO,KAAK,CAAC;AACpC,gBAAM,YAAY;AAAA,YAChB,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,iBAAiB,KAAK;AAAA,YACtB,aAAa,KAAK;AAAA,YAClB,WAAW,KAAK;AAAA,YAChB,SAAS,KAAK;AAAA,YACd,GAAG;AAAA,YACH;AAAA,YACA,QAAQ;AAAA,UACV;AACA,gBAAM,cAAc,UAAU,OAAO,IAAI,MAAM;AAAA,YAAY;AAAA;AAAA,UAAoB,IAAI,WAAW,SAAS;AACvG,cAAI,aAAa;AACf,iBAAK,QAAQ,KAAK,WAAW;AAC7B,gBAAI,OAAQ,MAAK,cAAc;AAG/B,gBAAI,CAAC,KAAK,cAAc,KAAK,EAAG,MAAK,cAAc,KAAK,IAAI,CAAC;AAC7D,iBAAK,cAAc,KAAK,EAAE,KAAK,KAAK,QAAQ,SAAS,CAAC;AAAA,UACxD;AACA,eAAK,MAAM,SAAS;AACpB;AAAA,QACF;AAAA,MACF;AACA,UAAI,OAAO,QAAQ,CAAC;AACpB,UAAI,UAAW,QAAQ;AACvB,UAAI,SAAS,eAAc,WAAW;AACpC,aAAK,OAAO,KAAK,KAAK,QAAQ,MAAM;AACpC;AAAA,MACF;AACA,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,yBAAiB,CAAC;AAClB;AAAA,MACF;AACA,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,wBAAgB,CAAC;AACjB;AAAA,MACF;AACA,UAAI,SAAS,eAAc,aAAa;AACtC,UAAE;AACF,eAAO,QAAQ,CAAC;AAChB,YAAI,CAAC,KAAM;AACX,kBAAU;AAAA,MACZ;AACA,YAAM,MAAM,UAAU,IAAI,uBAAuB;AAAA,QAC/C,YAAY;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,iBAAiB,KAAK;AAAA,QACtB,aAAa,KAAK;AAAA,QAClB,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAC3B,QAAQ;AAAA,MACV,CAAC,IAAI,IAAI,uBAAuB;AAAA,QAC9B;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,aAAa;AAAA,MACf,CAAC;AACD,WAAK,QAAQ,KAAK,GAAG;AAAA,IACvB;AAAA,EACF;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,GAAG,MAAM;AAAA,MACT,SAAS,KAAK,QAAQ,IAAI,OAAK,EAAE,KAAK;AAAA,IACxC;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,QAAI,CAAC,OAAO;AACV,WAAK,MAAM;AACX;AAAA,IACF;AACA,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,SAAK,QAAQ,QAAQ,CAAC,GAAG,OAAO,EAAE,QAAQ,QAAQ,EAAE,CAAC;AACrD,UAAM,QAAQ;AAAA,EAChB;AAAA,EACA,QAAQ;AACN,UAAM,MAAM;AACZ,SAAK,QAAQ,QAAQ,OAAK,EAAE,MAAM,CAAC;AAAA,EACrC;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,cAAc,KAAK,YAAY,aAAa,KAAK,QAAQ,MAAM,OAAK,EAAE,UAAU;AAAA,EAC9F;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,QAAQ,MAAM,OAAK,EAAE,QAAQ;AAAA,EAC3C;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK,QAAQ,MAAM,OAAK,EAAE,OAAO;AAAA,EAC1C;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,QAAQ,MAAM,OAAK,EAAE,UAAU;AAAA,EAC7C;AAAA,EACA,WAAW;AACT,SAAK,QAAQ,QAAQ,OAAK,EAAE,SAAS,CAAC;AACtC,UAAM,SAAS;AAAA,EACjB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAAc,KAAK,YAAY,gBAAgB,KAAK,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,eAAe,EAAE;AAAA,EACvH;AAAA,EACA,IAAI,cAAc,eAAe;AAC/B,QAAI,KAAK,aAAa;AACpB,YAAM,OAAO,KAAK,YAAY,KAAK,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,YAAY,aAAa,MAAM;AAChI,WAAK,YAAY,gBAAgB;AACjC,WAAK,WAAW,IAAI;AACpB,WAAK,SAAS;AAAA,IAChB,MAAO,OAAM,gBAAgB;AAAA,EAC/B;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,cAAc,KAAK,YAAY;AAAA;AAAA,MAE3C,KAAK,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE;AAAA;AAAA,EACpD;AAAA,EACA,IAAI,MAAM,OAAO;AACf,QAAI,KAAK,aAAa;AACpB,YAAM,OAAO,KAAK,YAAY,KAAK,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,YAAY,aAAa,MAAM;AAChI,WAAK,YAAY,QAAQ;AACzB,WAAK,WAAW,IAAI;AACpB,WAAK,SAAS;AAAA,IAChB,MAAO,OAAM,QAAQ;AAAA,EACvB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,cAAc,KAAK,YAAY,aAAa,MAAM;AAAA,EAChE;AAAA,EACA,IAAI,WAAW,OAAO;AACpB,QAAI,KAAK,aAAa;AACpB,YAAM,OAAO,KAAK,YAAY,KAAK,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,YAAY,aAAa,MAAM;AAChI,WAAK,YAAY,aAAa;AAC9B,WAAK,WAAW,IAAI;AACpB,WAAK,SAAS;AAAA,IAChB,MAAO,OAAM,aAAa;AAAA,EAC5B;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,cAAc,EAAE;AAAA,EAClE;AAAA,EACA,WAAW,MAAM;AACf,WAAO,MAAM,WAAW,IAAI,EAAE,UAAU,KAAK,mBAAmB,CAAC;AAAA,EACnE;AAAA,EACA,eAAe;AACb,QAAI;AACJ,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,mBAAmB,uBAAuB,KAAK,eAAe,KAAK,aAAa,MAAM,MAAM,OAAO,SAAS,qBAAqB;AACrI,QAAI,mBAAmB,KAAM,QAAO;AAGpC,QAAI,KAAK,QAAQ,eAAe,EAAE,SAAU,GAAE;AAC9C,aAAS,KAAK,iBAAiB,KAAK,KAAK,QAAQ,QAAQ,EAAE,IAAI;AAC7D,YAAM,IAAI,KAAK,QAAQ,EAAE,EAAE,aAAa;AACxC,UAAI,CAAC,EAAE,SAAU;AACjB,cAAQ,UAAU,CAAC;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,YAAY,KAAK,eAAe,KAAK,aAAa,MAAM;AAC9D,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,CAAC,UAAW,QAAO;AACvB,aAAS,KAAK,UAAU,OAAO,OAAO,QAAQ,KAAK,QAAQ,EAAE,GAAG,EAAE,IAAI;AACpE,UAAI;AACJ,YAAM,eAAe,MAAM,YAAY,IAAI;AAAA,QACzC,GAAG;AAAA,QACH,mBAAmB,wBAAwB,MAAM,qBAAqB,SAAS,wBAAwB,sBAAsB,YAAY,OAAO,SAAS,sBAAsB,EAAE;AAAA,MACnL,CAAC;AACD,cAAQ,UAAU,YAAY;AAC9B,UAAI,aAAa,SAAU;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,YAAY,IAAI,kBAAkB;AACxC,QAAI,YAAY,MAAO,QAAO;AAC9B,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,IAAI,UAAU,WAAW;AACtE,YAAM,aAAa,EAAE,YAAY,UAAU,MAAM;AACjD,iBAAW,OAAO,KAAK,gBAAgB,EAAE;AACzC,iBAAW,OAAO,KAAK,eAAe,EAAE;AACxC,UAAI,sBAAsB,kBAAmB,YAAW,aAAa;AACrE,gBAAU,OAAO,UAAU;AAAA,IAC7B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,YAAY,MAAO,QAAO;AAC9B,QAAI,QAAQ;AACZ,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,GAAGC,UAASC,WAAU;AACnE,eAAS,EAAE,aAAaD,UAASC,QAAO,KAAK;AAAA,IAC/C,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,YAAY;AAC1B,QAAI;AACJ,aAAS,KAAK,GAAG,KAAK,KAAK,OAAO,QAAQ,EAAE,IAAI;AAC9C,YAAM,OAAO,KAAK,OAAO,EAAE;AAC3B,UAAI,QAAQ,WAAY,cAAa;AAAA,UAAU;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,cAAc;AAC/B,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,QAAQ,gBAAgB,KAAM,QAAO;AAC9C,UAAM,iBAAiB,KAAK,eAAe,KAAK,aAAa,MAAM;AACnE,QAAI,CAAC,eAAgB,QAAO;AAC5B,UAAM,kBAAkB,eAAe;AACvC,UAAM,gBAAgB,gBAAgB,OAAO,eAAe,KAAK,QAAQ;AACzE,SAAK,QAAQ,MAAM,iBAAiB,aAAa,EAAE,QAAQ,OAAK;AAC9D,UAAI,CAAC,EAAE,QAAQ,gBAAgB,MAAM;AACnC,YAAI;AACJ,gBAAQ,UAAU,EAAE,oBAAoB,WAAW,EAAE,YAAY,OAAO,SAAS,SAAS,MAAM,CAAC;AAAA,MACnG;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,eAAe,KAAK;AAClB,QAAI,SAAS;AACb,aAAS,KAAK,GAAG,KAAK,KAAK,QAAQ,QAAQ,EAAE,IAAI;AAC/C,YAAM,QAAQ,KAAK,QAAQ,EAAE;AAC7B,YAAM,gBAAgB,OAAO;AAC7B,gBAAU,MAAM;AAChB,UAAI,OAAO,OAAO,QAAQ;AACxB,eAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ,MAAM;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe,YAAY;AACzB,WAAO,KAAK,QAAQ,MAAM,GAAG,UAAU,EAAE,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,aAAa,QAAQ,CAAC;AAAA,EAC7F;AAAA,EACA,sBAAsB,SAAS,OAAO,IAAI;AACxC,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,gBAAgB,KAAK,eAAe,OAAO;AACjD,QAAI,eAAe;AACjB,YAAM,cAAc,KAAK,eAAe,KAAK;AAE7C,YAAM,cAAc,eAAe,cAAc,UAAU,YAAY;AACvE,YAAM,oBAAoB,cAAc;AACxC,YAAM,kBAAkB,eAAe,cAAc,YAAY,SAAS,KAAK,QAAQ,cAAc,KAAK,EAAE,aAAa;AACzH,SAAG,KAAK,QAAQ,cAAc,KAAK,GAAG,cAAc,OAAO,mBAAmB,eAAe;AAC7F,UAAI,eAAe,CAAC,aAAa;AAE/B,iBAAS,KAAK,cAAc,QAAQ,GAAG,KAAK,YAAY,OAAO,EAAE,IAAI;AACnE,aAAG,KAAK,QAAQ,EAAE,GAAG,IAAI,GAAG,KAAK,QAAQ,EAAE,EAAE,aAAa,MAAM;AAAA,QAClE;AAGA,WAAG,KAAK,QAAQ,YAAY,KAAK,GAAG,YAAY,OAAO,GAAG,YAAY,MAAM;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,gBAAgB,MAAM,OAAO,SAAS,KAAK;AACjD,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,GAAG,UAAU,WAAW;AACrE,oBAAc,UAAU,EAAE,OAAO,UAAU,MAAM,CAAC;AAAA,IACpD,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,cAAc,QAAQ;AACxB,kBAAY,UAAU;AAAA,IACxB;AACA,QAAI,CAAC,KAAK,QAAQ,OAAQ,QAAO;AACjC,UAAM,SAAS,IAAI,cAAc,MAAM,SAAS;AAChD,QAAI,cAAc,UAAU,MAAM;AAIhC,UAAI,OAAO,qBAAqB,EAAG,QAAO,OAAO;AACjD,aAAO,SAAS;AAChB,UAAI,OAAO,oBAAoB,EAAG,QAAO,OAAO;AAChD,aAAO,KAAK,aAAa;AAAA,IAC3B;AAGA,QAAI,cAAc,UAAU,QAAQ,cAAc,UAAU,YAAY;AAEtE,UAAI,cAAc,UAAU,MAAM;AAChC,eAAO,sBAAsB;AAC7B,YAAI,OAAO,MAAM,OAAO,QAAQ,UAAW,QAAO;AAClD,eAAO,SAAS;AAAA,MAClB;AAGA,aAAO,oBAAoB;AAC3B,aAAO,uBAAuB;AAC9B,aAAO,qBAAqB;AAG5B,UAAI,cAAc,UAAU,MAAM;AAChC,eAAO,qBAAqB;AAC5B,eAAO,wBAAwB;AAC/B,YAAI,OAAO,MAAM,OAAO,OAAO,UAAW,QAAO,OAAO;AACxD,eAAO,SAAS;AAChB,YAAI,OAAO,MAAM,OAAO,OAAO,UAAW,QAAO,OAAO;AACxD,eAAO,SAAS;AAAA,MAClB;AACA,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,UAAI,cAAc,UAAU,WAAY,QAAO;AAC/C,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO;AAAA,IACT;AACA,QAAI,cAAc,UAAU,SAAS,cAAc,UAAU,aAAa;AAExE,aAAO,qBAAqB;AAC5B,aAAO,wBAAwB;AAC/B,UAAI,OAAO,sBAAsB,EAAG,QAAO,OAAO;AAClD,UAAI,cAAc,UAAU,YAAa,QAAO,KAAK,aAAa;AAGlE,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO,KAAK,gBAAgB,WAAW,UAAU,IAAI;AAAA,IACvD;AACA,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,QAAI,QAAQ;AACZ,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,GAAG,UAAU,WAAW;AACrE,eAAS,EAAE,oBAAoB,UAAU,MAAM;AAAA,IACjD,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,YAAY,MAAM;AAChB,WAAO,KAAK,aAAa,IAAI,EAAE,CAAC;AAAA,EAClC;AAAA;AAAA,EAGA,aAAa,MAAM;AACjB,UAAM,UAAU,KAAK,cAAc,IAAI;AACvC,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,WAAO,QAAQ,IAAI,QAAM,KAAK,QAAQ,EAAE,CAAC;AAAA,EAC3C;AAAA,EACA,IAAI,OAAO;AACT,UAAM,UAAU,IAAI,cAAc;AAClC,SAAK,sBAAsB,GAAG,KAAK,aAAa,QAAQ,OAAK,QAAQ,UAAU,EAAE,IAAI,KAAK,CAAC,CAAC;AAC5F,WAAO;AAAA,EACT;AACF;AACA,cAAc,WAAW;AAAA,EACvB,GAAG,OAAO;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AACnB;AACA,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,MAAM,gBAAgB;;;AC/btB,IAAM,cAAN,cAA0B,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtC,IAAI,aAAa;AACf,WAAO,KAAK,YAAY,OAAO,KAAK,IAAI,EAAE;AAAA,EAC5C;AAAA,EACA,YAAY,MAAM;AAChB,UAAM,IAAI;AAAA,EACZ;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM;AAAA,MACJ,KAAK,KAAK,MAAM;AAAA,MAChB,OAAO,KAAK,QAAQ;AAAA,MACpB,YAAY,KAAK,aAAa;AAAA,MAC9B,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,IAAI;AACJ,SAAK,KAAK;AACV,SAAK,OAAO;AACZ,SAAK,YAAY,KAAK,IAAI,OAAO,EAAE,EAAE,QAAQ,SAAS;AACtD,SAAK,UAAU;AACf,UAAM,UAAU,OAAO,KAAK,IAAI,EAAE,SAAS,KAAK,WAAW,GAAG;AAC9D,UAAM,QAAQ,OAAO,KAAK,EAAE,EAAE,SAAS,KAAK,WAAW,GAAG;AAC1D,QAAI,iBAAiB;AACrB,WAAO,iBAAiB,MAAM,UAAU,MAAM,cAAc,MAAM,QAAQ,cAAc,EAAG,GAAE;AAC7F,gBAAY,OAAO,MAAM,MAAM,GAAG,cAAc,EAAE,QAAQ,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,YAAY,cAAc;AACnH,UAAM,QAAQ,WAAW;AAAA,EAC3B;AAAA,EACA,IAAI,aAAa;AACf,WAAO,MAAM,cAAc,QAAQ,KAAK,KAAK;AAAA,EAC/C;AAAA,EACA,WAAW,KAAK;AACd,QAAI,SAAS;AACb,QAAI,SAAS;AACb,UAAM,CAAC,EAAE,aAAa,GAAG,IAAI,IAAI,MAAM,kBAAkB,KAAK,CAAC;AAC/D,QAAI,KAAK;AACP,eAAS,IAAI,OAAO,YAAY,MAAM,IAAI;AAC1C,eAAS,IAAI,OAAO,YAAY,MAAM,IAAI;AAAA,IAC5C;AACA,aAAS,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,aAAS,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,WAAO,CAAC,QAAQ,MAAM;AAAA,EACxB;AAAA,EACA,cAAc,IAAI,OAAO;AACvB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI;AACJ,KAAC,IAAI,OAAO,IAAI,MAAM,cAAc,GAAG,QAAQ,OAAO,EAAE,GAAG,KAAK;AAChE,QAAI,CAAC,GAAI,SAAQ,OAAO,CAAC,KAAK;AAC9B,WAAO,CAAC,IAAI,OAAO;AAAA,EACrB;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,CAAC,KAAK,WAAW,KAAK,MAAM,SAAS,IAAI,KAAK,UAAW,QAAO,MAAM,eAAe,IAAI,KAAK;AAClG,UAAM,UAAU,OAAO,KAAK,IAAI,EAAE,SAAS,KAAK,WAAW,GAAG;AAC9D,UAAM,QAAQ,OAAO,KAAK,EAAE,EAAE,SAAS,KAAK,WAAW,GAAG;AAC1D,UAAM,CAAC,QAAQ,MAAM,IAAI,KAAK,WAAW,KAAK,QAAQ,EAAE;AACxD,QAAI,OAAO,MAAM,IAAI,KAAK,KAAM,QAAO,MAAM,eAAe,QAAQ,KAAK,MAAM,MAAM,GAAG,KAAK;AAC7F,QAAI,OAAO,MAAM,IAAI,KAAK,IAAI;AAC5B,UAAI,CAAC,MAAM,QAAQ,KAAK,YAAY,SAAS,KAAK,MAAM,SAAS,IAAI,KAAK,WAAW;AACnF,eAAO,MAAM,eAAe,QAAQ,KAAK,MAAM,MAAM,GAAG,KAAK,EAAE,UAAU,KAAK,eAAe,IAAI,KAAK,CAAC;AAAA,MACzG;AACA,aAAO,MAAM,eAAe,MAAM,KAAK,MAAM,MAAM,GAAG,KAAK;AAAA,IAC7D;AACA,WAAO,MAAM,eAAe,IAAI,KAAK;AAAA,EACvC;AAAA,EACA,WAAW,OAAO;AAChB,UAAM,MAAM,KAAK;AACjB,UAAM,eAAe,IAAI,OAAO,MAAM;AACtC,QAAI,iBAAiB,MAAM,IAAI,UAAU,KAAK,WAAY,QAAO;AACjE,UAAM,CAAC,QAAQ,MAAM,IAAI,KAAK,WAAW,GAAG;AAC5C,WAAO,KAAK,QAAQ,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM,MAAM,WAAW,KAAK;AAAA,EAC3F;AAAA,EACA,IAAI,OAAO;AACT,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,MAAM,WAAW,KAAK,UAAW,QAAO;AACjD,UAAM,QAAQ,KAAK;AACnB,UAAM,YAAY,KAAK,YAAY,KAAK,MAAM;AAC9C,QAAI,WAAW;AACb,WAAK,MAAM;AACX,eAAS,IAAI,GAAG,IAAI,WAAW,EAAE,GAAG;AAClC,gBAAQ,UAAU,MAAM,eAAe,KAAK,KAAK,CAAC;AAAA,MACpD;AAGA,YAAM,MAAM,EAAE,EAAE,QAAQ,QAAM,KAAK,eAAe,EAAE,CAAC;AAAA,IACvD;AACA,WAAO;AAAA,EACT;AACF;AACA,MAAM,cAAc;;;ACvGpB,IAAM,iBAAiB;AAKvB,IAAM,aAAN,MAAM,oBAAmB,cAAc;AAAA,EACrC,OAAO,sBAAsB,MAAM;AACjC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM,SAAS,IAAI,IAAI,OAAO;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,YAAY,MAAM;AAChB,UAAM,YAAW,sBAAsB;AAAA,MACrC,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IACL,CAAC,CAAC;AAAA,EACJ;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAAA,MACF,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IACL;AACA,UAAM,gBAAgB,OAAO,OAAO,CAAC,GAAG,YAAW,mBAAmB,CAAC;AAEvE,QAAI,KAAK,IAAK,eAAc,EAAE,OAAO,KAAK,IAAI,YAAY;AAC1D,QAAI,KAAK,IAAK,eAAc,EAAE,KAAK,KAAK,IAAI,YAAY;AACxD,QAAI,KAAK,OAAO,KAAK,OAAO,cAAc,EAAE,SAAS,cAAc,EAAE,IAAI;AACvE,oBAAc,EAAE,OAAO,KAAK,IAAI,SAAS,IAAI;AAC7C,oBAAc,EAAE,KAAK,KAAK,IAAI,SAAS,IAAI;AAC3C,UAAI,cAAc,EAAE,SAAS,cAAc,EAAE,IAAI;AAC/C,sBAAc,EAAE,OAAO,KAAK,IAAI,QAAQ;AACxC,sBAAc,EAAE,KAAK,KAAK,IAAI,QAAQ;AAAA,MACxC;AAAA,IACF;AACA,WAAO,OAAO,eAAe,KAAK,QAAQ,MAAM;AAChD,UAAM,QAAQ;AAAA,MACZ,GAAG;AAAA,MACH,MAAM,SAAS,IAAI,IAAI,OAAO;AAAA,MAC9B,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EACA,WAAW,OAAO;AAChB,UAAM,OAAO,KAAK;AAClB,WAAO,MAAM,WAAW,KAAK,MAAM,CAAC,KAAK,cAAc,KAAK,YAAY,KAAK,KAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,QAAQ,KAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,QAAQ,KAAK;AAAA,EACrL;AAAA;AAAA,EAGA,YAAY,KAAK;AACf,WAAO,KAAK,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,KAAK,MAAM;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,aAAa,MAAM,aAAa;AAAA,EAC9C;AAAA,EACA,IAAI,WAAW,OAAO;AACpB,UAAM,aAAa;AAAA,EACrB;AAAA,EACA,WAAW,MAAM;AACf,WAAO,SAAS,QAAQ,MAAM,WAAW,IAAI;AAAA,EAC/C;AAAA,EACA,iBAAiB,MAAM;AACrB,WAAO,MAAM,iBAAiB,YAAW,sBAAsB,IAAI,CAAC;AAAA,EACtE;AACF;AACA,WAAW,qBAAqB,OAAO;AAAA,EACrC,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,EACN;AACF;AACA,WAAW,WAAW;AAAA,EACpB,GAAG,cAAc;AAAA,EACjB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ,CAAC,MAAM,WAAW;AACxB,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,UAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,UAAM,OAAO,KAAK,YAAY;AAC9B,WAAO,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,GAAG;AAAA,EACpC;AAAA,EACA,OAAO,CAAC,KAAK,WAAW;AACtB,UAAM,CAAC,KAAK,OAAO,IAAI,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACpD,WAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAAA,EACtC;AACF;AACA,MAAM,aAAa;;;ACzInB,IAAM,gBAAN,MAAM,uBAAsB,OAAO;AAAA,EACjC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAG,eAAc;AAAA,MACjB,GAAG;AAAA,IACL,CAAC;AACD,SAAK,cAAc;AAAA,EACrB;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ,IAAI;AAClB,QAAI,UAAU,MAAM;AAClB,WAAK,aAAa;AAElB,WAAK,gBAAgB,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,OAAK;AACjE,cAAM;AAAA,UACJ;AAAA,UACA,GAAG;AAAA,QACL,IAAI,cAAc,CAAC;AACnB,cAAM,SAAS,WAAW;AAAA,UACxB,WAAW,KAAK;AAAA,UAChB,OAAO,KAAK;AAAA,UACZ,aAAa,KAAK;AAAA,UAClB,GAAG;AAAA,QACL,CAAC;AACD,YAAI,OAAQ,MAAK,aAAa;AAC9B,eAAO;AAAA,MACT,CAAC,IAAI,CAAC;AAAA,IAGR;AAAA,EACF;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,UAAU,KAAK,eAAe,IAAI,KAAK;AAC7C,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,YAAY,IAAI,KAAK,iBAAiB,KAAK,CAAC,CAAC;AAAA,IAClF;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,UAAU,OAAO,MAAM;AACpC,QAAI,aAAa,QAAQ;AACvB,iBAAW;AAAA,IACb;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,UAAM,sBAAsB,MAAM,QAAQ,MAAM,oBAAoB,OAAO,MAAM,iBAAiB,SAAS,KAAK;AAChH,UAAM,aAAa,KAAK;AACxB,UAAM,cAAc,MAAM,QAAQ,MAAM,oBAAoB,OAAO,MAAM,iBAAiB,iBAAiB;AAC3G,UAAM,YAAY,WAAW,MAAM,YAAY,MAAM;AACrD,UAAM,WAAW,KAAK;AACtB,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,gBAAgB,YAAY,OAAO,SAAS,SAAS;AAG3D,SAAK,cAAc,KAAK,WAAW,UAAU;AAAA,MAC3C,GAAG;AAAA,IACL,GAAG,IAAI;AAGP,QAAI,KAAK,aAAa;AACpB,UAAI,KAAK,gBAAgB,UAAU;AAEjC,aAAK,YAAY,MAAM;AACvB,YAAI,aAAa;AACf,eAAK,YAAY,OAAO,aAAa;AAAA,YACnC,KAAK;AAAA,UACP,CAAC;AACD,kBAAQ,YAAY,KAAK,YAAY,MAAM,SAAS,oBAAoB;AAAA,QAC1E;AACA,YAAI,WAAW;AACb,kBAAQ,aAAa,KAAK,YAAY,OAAO,WAAW;AAAA,YACtD,KAAK;AAAA,YACL,MAAM;AAAA,UACR,CAAC,EAAE;AAAA,QACL;AAAA,MACF,WAAW,eAAe;AAGxB,aAAK,YAAY,QAAQ;AAAA,MAC3B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB;AACnB,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,mBAAmB,CAAC;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe;AACb,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,aAAa,CAAC;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW,MAAM;AACf,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAM,SAAQ,UAAU,KAAK,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC;AAC7D,WAAO,QAAQ,UAAU,KAAK,cAAc,KAAK,YAAY,WAAW,IAAI,IAAI,MAAM,WAAW,IAAI,CAAC;AAAA,EACxG;AAAA,EACA,iBAAiB,OAAO;AACtB,QAAI,uBAAuB;AAC3B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,oBAAoB,wBAAwB,MAAM,qBAAqB,OAAO,SAAS,sBAAsB,oBAAoB,KAAK,iBAAiB,yBAAyB,MAAM,qBAAqB,OAAO,SAAS,uBAAuB,gBAAgB,MAAM;AAAA,IAC1Q;AAAA,EACF;AAAA,EACA,WAAW,UAAU,OAAO,MAAM;AAChC,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,SAAS,UAAU,MAAM,OAAO,IAAI;AAAA,EAClD;AAAA,EACA,WAAW,OAAO;AAChB,WAAO,MAAM,WAAW,KAAK,MAAM,CAAC,KAAK,eAAe,KAAK,YAAY,WAAW,KAAK,iBAAiB,KAAK,CAAC;AAAA,EAClH;AAAA,EACA,UAAU,KAAK,OAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,CAAC,GAAG,OAAO,IAAI,MAAM,UAAU,KAAK,KAAK;AAC7C,QAAI,KAAK,aAAa;AACpB,UAAI;AACJ,OAAC,GAAG,cAAc,IAAI,MAAM,UAAU,GAAG,KAAK,iBAAiB,KAAK,CAAC;AACrE,gBAAU,QAAQ,UAAU,cAAc;AAAA,IAC5C;AACA,WAAO,CAAC,GAAG,OAAO;AAAA,EACpB;AAAA,EACA,cAAc,KAAK,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,CAAC,GAAG,OAAO,IAAI,MAAM,cAAc,KAAK,KAAK;AACjD,QAAI,KAAK,aAAa;AACpB,UAAI;AACJ,OAAC,GAAG,cAAc,IAAI,MAAM,cAAc,GAAG,KAAK,iBAAiB,KAAK,CAAC;AACzE,gBAAU,QAAQ,UAAU,cAAc;AAAA,IAC5C;AACA,WAAO,CAAC,GAAG,OAAO;AAAA,EACpB;AAAA,EACA,QAAQ;AACN,QAAI;AACJ,KAAC,oBAAoB,KAAK,gBAAgB,QAAQ,kBAAkB,MAAM;AAC1E,SAAK,cAAc,QAAQ,OAAK,EAAE,MAAM,CAAC;AAAA,EAC3C;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,KAAK,cAAc,KAAK,YAAY,QAAQ;AAAA,EAC/F;AAAA,EACA,IAAI,MAAM,OAAO;AACf,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,QAAQ;AACxB,WAAK,cAAc,KAAK;AACxB,WAAK,eAAe;AAAA,IACtB,MAAO,OAAM,QAAQ;AAAA,EACvB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,aAAa,KAAK,WAAW,gBAAgB,KAAK,cAAc,KAAK,YAAY,gBAAgB;AAAA,EAC/G;AAAA,EACA,IAAI,cAAc,eAAe;AAC/B,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,gBAAgB;AAChC,WAAK,cAAc,KAAK;AACxB,WAAK,eAAe;AAAA,IACtB,MAAO,OAAM,gBAAgB;AAAA,EAC/B;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,aAAa,KAAK,WAAW,aAAa,KAAK,cAAc,KAAK,YAAY,aAAa;AAAA,EACzG;AAAA,EACA,IAAI,WAAW,YAAY;AACzB,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,aAAa;AAC7B,WAAK,cAAc,KAAK;AACxB,WAAK,eAAe;AACpB;AAAA,IACF;AACA,QAAI,gBAAgB,OAAO,UAAU;AAGrC,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,aAAa;AAC9B,sBAAgB,KAAK,YAAY;AAAA,IACnC;AACA,SAAK,gBAAgB;AAAA,EACvB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,cAAc,KAAK,YAAY,eAAe;AAAA,EAC5D;AAAA,EACA,IAAI,aAAa;AACf,QAAI;AACJ,WAAO,SAAS,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB,UAAU;AAAA,EACzG;AAAA,EACA,IAAI,WAAW;AACb,QAAI;AACJ,WAAO,SAAS,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB,QAAQ;AAAA,EACvG;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,OAAO,SAAS,KAAK,CAAC,EAExD,UAAU,KAAK,eAAe,CAAC;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA,EACA,IAAI,QAAQ;AACV,QAAI;AACJ,WAAO;AAAA,MACL,GAAG,MAAM;AAAA,MACT,gBAAgB,KAAK;AAAA,MACrB,eAAe,KAAK,cAAc,IAAI,OAAK,EAAE,KAAK;AAAA,MAClD,gBAAgB,KAAK;AAAA,MACrB,cAAc,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB;AAAA,IAC7F;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,cAAe,MAAK,cAAc,QAAQ,CAAC,GAAG,OAAO,EAAE,QAAQ,cAAc,EAAE,CAAC;AACpF,QAAI,kBAAkB,MAAM;AAC1B,WAAK,cAAc;AACnB,WAAK,YAAY,QAAQ;AAAA,IAC3B;AACA,UAAM,QAAQ;AAAA,EAChB;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,WAAO,KAAK,cAAc,KAAK,YAAY,aAAa,SAAS,OAAO,KAAK,IAAI;AAAA,EACnF;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,WAAO,KAAK,cAAc,KAAK,YAAY,YAAY,SAAS,KAAK,IAAI,MAAM,YAAY,SAAS,KAAK;AAAA,EAC3G;AAAA,EACA,WAAW;AACT,QAAI,KAAK,YAAa,MAAK,YAAY,SAAS;AAChD,UAAM,SAAS;AAAA,EACjB;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,WAAO,KAAK,cAAc,KAAK,YAAY,gBAAgB,WAAW,SAAS,IAAI,MAAM,gBAAgB,WAAW,SAAS;AAAA,EAC/H;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK,cAAc,KAAK,YAAY,YAAY,KAAK;AAAA,EAC9D;AAAA,EACA,IAAI,UAAU,WAAW;AACvB,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,cAAc,KAAK,YAAY,QAAQ,KAAK;AAAA,EAC1D;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK,cAAc,KAAK,YAAY,cAAc,KAAK;AAAA,EAChE;AAAA,EACA,IAAI,YAAY,aAAa;AAC3B,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK,cAAc,KAAK,YAAY,UAAU,KAAK;AAAA,EAC5D;AAAA,EACA,IAAI,QAAQ,SAAS;AACnB,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,WAAW,MAAM;AACf,WAAO,MAAM,QAAQ,IAAI,IAAI,KAAK,cAAc,MAAM,CAAC,GAAG,OAAO;AAC/D,UAAI,CAAC,KAAK,EAAE,EAAG;AACf,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,GAAG;AAAA,MACL,IAAI,KAAK,EAAE;AACX,aAAO,eAAe,GAAG,QAAQ,KAAK,EAAE,WAAW,OAAO;AAAA,IAC5D,CAAC,IAAI,MAAM,WAAW,IAAI;AAAA,EAC5B;AAAA,EACA,iBAAiB,OAAO;AACtB,QAAI;AACJ,WAAO,SAAS,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB,iBAAiB,KAAK,CAAC;AAAA,EACtH;AACF;AAKA,cAAc,WAAW;AAAA,EACvB,GAAG,OAAO;AAAA,EACV,UAAU,CAAC,UAAU,QAAQ,OAAO,SAAS;AAC3C,QAAI,CAAC,OAAO,cAAc,OAAQ;AAClC,UAAM,aAAa,OAAO;AAG1B,UAAM,SAAS,OAAO,cAAc,IAAI,CAAC,GAAG,UAAU;AACpD,YAAM,YAAY,OAAO,gBAAgB;AACzC,YAAM,gBAAgB,YAAY,EAAE,aAAa,SAAS,EAAE,gBAAgB,EAAE,aAAa,QAAQ,UAAU,UAAU;AACvH,UAAI,EAAE,kBAAkB,YAAY;AAClC,UAAE,MAAM;AACR,UAAE,OAAO,YAAY;AAAA,UACnB,KAAK;AAAA,QACP,CAAC;AAAA,MACH,WAAW,CAAC,WAAW;AACrB,UAAE,OAAO,aAAa;AAAA,MACxB;AACA,QAAE,OAAO,UAAU,OAAO,iBAAiB,KAAK,CAAC;AACjD,QAAE,WAAW,IAAI;AACjB,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,EAAE,cAAc;AAAA,QACxB,qBAAqB,EAAE,oBAAoB,GAAG,KAAK,IAAI,eAAe,EAAE,gBAAgB,EAAE,aAAa,QAAQ,UAAU,UAAU,CAAC,CAAC;AAAA,MACvI;AAAA,IACF,CAAC;AAGD,WAAO,KAAK,CAAC,IAAI,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,sBAAsB,GAAG,mBAAmB;AAChG,WAAO,OAAO,cAAc,OAAO,CAAC,EAAE,KAAK;AAAA,EAC7C;AACF;AACA,MAAM,gBAAgB;;;ACpUtB,IAAM,aAAN,MAAM,oBAAmB,cAAc;AAAA,EACrC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,OAAO;AACT,YAAM,UAAU,MAAM,IAAI,OAAK,EAAE,MAAM;AACvC,YAAM,iBAAiB,KAAK,IAAI,GAAG,OAAO;AAC1C,YAAM,iBAAiB,KAAK,IAAI,GAAG,OAAO,IAAI;AAC9C,YAAM,OAAO,IAAI,OAAO,cAAc;AACtC,UAAI,eAAgB,OAAM,QAAQ,MAAM,IAAI,OAAO,cAAc,IAAI;AACrE,WAAK,OAAO;AAAA,IACd;AACA,UAAM,QAAQ,KAAK;AAAA,EACrB;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,YAAY,KAAK,IAAI,KAAK,gBAAgB,GAAG,UAAU,WAAW,GAAG,KAAK,MAAM,MAAM;AAC5F,UAAM,UAAU,KAAK,KAAK,OAAO,OAAK,KAAK,WAAW,GAAG,KAAK,gBAAgB,IAAI,SAAS,CAAC;AAC5F,QAAI,QAAQ,QAAQ;AAClB,UAAI,QAAQ,WAAW,GAAG;AACxB,aAAK,sBAAsB,GAAG,KAAK,MAAM,QAAQ,CAAC,GAAG,OAAO;AAC1D,gBAAM,MAAM,QAAQ,CAAC,EAAE,EAAE;AACzB,cAAI,MAAM,KAAK,MAAM,UAAU,QAAQ,EAAE,MAAO;AAChD,YAAE,MAAM;AACR,YAAE,YAAY,KAAK,KAAK;AAAA,QAC1B,CAAC;AAAA,MACH;AACA,YAAM,IAAI,MAAM,eAAe,QAAQ,CAAC,EAAE,KAAK,MAAM,MAAM,GAAG,KAAK;AACnE,UAAI,QAAQ,WAAW,GAAG;AACxB,gBAAQ,CAAC,EAAE,MAAM,KAAK,cAAc,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,SAAO,EAAE,UAAU,MAAM,eAAe,GAAG,CAAC,CAAC;AAAA,MAC7G;AACA,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,MAAM,CAAC,KAAK;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AAEA,WAAO,IAAI,sBAAsB,IAAI,OAAO;AAAA,EAC9C;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,QAAI,YAAY,MAAO,QAAO,IAAI,cAAc;AAChD,UAAM,YAAY,KAAK,IAAI,MAAM,gBAAgB,GAAG,UAAU,WAAW,GAAG,KAAK,MAAM,MAAM;AAC7F,QAAI;AACJ,SAAK,MAAM,SAAS,OAAO,GAAG,EAAE,KAAK;AACnC,YAAM,UAAU,KAAK,KAAK,OAAO,OAAK,KAAK,WAAW,GAAG,KAAK,MAAM,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC;AACrG,UAAI,QAAQ,SAAS,EAAG;AAAA,IAC1B;AACA,UAAM,UAAU,MAAM,OAAO,KAAK,KAAK;AACvC,YAAQ,aAAa,MAAM;AAC3B,WAAO;AAAA,EACT;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,EAC1C;AACF;AAEA,WAAW,WAAW;AAAA,EACpB,GAAG,cAAc;AAAA,EACjB,YAAY,CAAC,MAAM,MAAM,cAAc,KAAK,QAAQ,MAAM,SAAS,MAAM;AAC3E;AACA,MAAM,aAAa;;;AC9FnB,IAAM,iBAAN,cAA6B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlC,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ;AAAA,MACZ,GAAG;AAAA,MACH,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AACF;AACA,MAAM,iBAAiB;;;ACtBvB,IAAI;AAEJ,IAAM,eAAN,MAAMC,uBAAqB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BhC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAGA,eAAa;AAAA,MAChB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ,IAAI;AAClB,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,iBAAiB;AACf,UAAM,QAAQ,OAAO,KAAK,gBAAgB,aAAa;AACvD,UAAM,MAAM;AACZ,UAAM,OAAO,KAAK,QAAQ,MAAM,aAAa,KAAK,KAAK,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM;AACjG,SAAK,gBAAgB,IAAI,OAAO,QAAQ,MAAM,GAAG;AACjD,SAAK,oBAAoB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,KAAK,GAAG;AAC/F,SAAK,4BAA4B,IAAI,OAAO,aAAa,KAAK,kBAAkB,GAAG,GAAG;AAAA,EACxF;AAAA,EACA,2BAA2B,OAAO;AAChC,WAAO,MAAM,QAAQ,KAAK,2BAA2B,EAAE;AAAA,EACzD;AAAA,EACA,2BAA2B,OAAO;AAEhC,UAAM,QAAQ,MAAM,MAAM,KAAK,KAAK;AACpC,UAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,yBAAyB,KAAK,kBAAkB;AAC5E,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,cAAc,IAAI,OAAO;AACvB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,cAAc,KAAK,2BAA2B,KAAK,SAAS,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAS5G,MAAM,SAAS,MAAM,OAAO,CAAC,MAAM,SAAS,CAAC,MAAM,OAAO,GAAG,QAAQ,KAAK,mBAAmB,KAAK,KAAK,IAAI,EAAE,GAAG,KAAK;AACrH,QAAI,MAAM,CAAC,OAAQ,SAAQ,OAAO;AAClC,QAAI,UAAU,CAAC,KAAK,iBAAiB,CAAC,KAAK,SAAS,WAAW,IAAK,SAAQ,UAAU,KAAK,YAAY,GAAG,CAAC;AAC3G,WAAO,CAAC,QAAQ,OAAO;AAAA,EACzB;AAAA,EACA,iBAAiB,IAAI,oBAAoB;AACvC,QAAI,uBAAuB,QAAQ;AACjC,2BAAqB;AAAA,IACvB;AACA,QAAI,QAAQ;AACZ,aAAS,MAAM,GAAG,MAAM,IAAI,EAAE,KAAK;AACjC,UAAI,KAAK,OAAO,QAAQ,KAAK,oBAAoB,GAAG,MAAM,KAAK;AAC7D,UAAE;AACF,YAAI,mBAAoB,OAAM,KAAK,mBAAmB;AAAA,MACxD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,0BAA0B,OAAO;AAC/B,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK;AAAA,IACf;AACA,WAAO,KAAK,iBAAiB,KAAK,2BAA2B,KAAK,EAAE,QAAQ,IAAI;AAAA,EAClF;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,KAAC,SAAS,KAAK,IAAI,KAAK,2BAA2B,SAAS,KAAK;AACjE,WAAO,KAAK,2BAA2B,MAAM,aAAa,SAAS,OAAO,KAAK,CAAC;AAAA,EAClF;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,sBAAsB,MAAM,QAAQ,MAAM,mBAAmB,MAAM,iBAAiB,SAAS,KAAK;AACxG,UAAM,gCAAgC,KAAK,0BAA0B,mBAAmB;AACxF,SAAK,SAAS,KAAK,2BAA2B,KAAK,KAAK;AACxD,UAAM,WAAW,KAAK;AACtB,SAAK,UAAU;AACf,UAAM,MAAM,KAAK;AACjB,QAAI,WAAW,CAAC,MAAM,GAAG;AACzB,QAAI,OAAO;AACX,QAAI,UAAU;AACZ,UAAI;AACJ,UAAI,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,SAAS,KAAK,IAAK,YAAW,KAAK;AAChF,UAAI,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,SAAS,KAAK,IAAK,YAAW,KAAK;AAChF,UAAI,YAAY,MAAM;AACpB,YAAI,KAAK,SAAS;AAChB,eAAK,SAAS,KAAK,OAAO,UAAU,IAAI,EAAE,QAAQA,eAAa,gBAAgB,KAAK,KAAK;AACzF,mBAAS,OAAO,aAAa,KAAK,UAAU,CAAC,MAAM;AAAA,QACrD,OAAO;AACL,qBAAW;AAAA,QACb;AAAA,MACF;AACA,mBAAa,WAAW,QAAQ,KAAK,OAAO,MAAM,KAAK,aAAa,CAAC;AAAA,IACvE;AACA,QAAI;AACJ,QAAI,CAAC,UAAU;AACb,WAAK,SAAS;AACd,sBAAgB,IAAI,cAAc;AAAA,IACpC,OAAO;AACL,sBAAgB,IAAI,cAAc;AAAA,QAChC,UAAU,KAAK,OAAO,MAAM,SAAS,MAAM;AAAA,QAC3C,aAAa,OAAO,KAAK;AAAA,QACzB;AAAA,MACF,CAAC;AAAA,IACH;AACA,SAAK,SAAS,KAAK,2BAA2B,KAAK,MAAM;AACzD,UAAM,kBAAkB,MAAM,QAAQ,MAAM,mBAAmB,MAAM,iBAAiB,SAAS,KAAK;AACpG,UAAM,4BAA4B,KAAK,0BAA0B,eAAe;AAChF,kBAAc,cAAc,4BAA4B,iCAAiC,KAAK,mBAAmB;AACjH,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,KAAK;AACxB,QAAI,KAAK,oBAAoB;AAC3B,YAAM,aAAa,MAAM,KAAK,mBAAmB,SAAS;AAC1D,YAAM,eAAe,KAAK,MAAM,QAAQ,KAAK,oBAAoB,UAAU;AAC3E,UAAI,gBAAgB,IAAK,QAAO;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA,EACA,2BAA2B,MAAM,IAAI;AACnC,UAAM,yBAAyB,KAAK,qBAAqB,IAAI;AAC7D,QAAI,0BAA0B,EAAG,QAAO;AACxC,UAAM,uBAAuB,KAAK,qBAAqB,EAAE;AACzD,QAAI,wBAAwB,EAAG,MAAK,uBAAuB,KAAK,mBAAmB;AACnF,WAAO,CAAC,MAAM,EAAE;AAAA,EAClB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,KAAC,SAAS,KAAK,IAAI,KAAK,2BAA2B,SAAS,KAAK;AACjE,UAAM,iBAAiB,KAAK,MAAM,MAAM,GAAG,OAAO;AAClD,UAAM,gBAAgB,KAAK,MAAM,MAAM,KAAK;AAC5C,UAAM,gCAAgC,KAAK,iBAAiB,eAAe,MAAM;AACjF,SAAK,SAAS,KAAK,2BAA2B,KAAK,2BAA2B,iBAAiB,aAAa,CAAC;AAC7G,UAAM,4BAA4B,KAAK,0BAA0B,cAAc;AAC/E,WAAO,IAAI,cAAc;AAAA,MACvB,YAAY,4BAA4B,iCAAiC,KAAK,mBAAmB;AAAA,IACnG,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,CAAC,KAAK,mBAAoB,QAAO;AACrC,YAAQ,WAAW;AAAA,MACjB,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU,YACb;AACE,cAAM,qBAAqB,KAAK,qBAAqB,YAAY,CAAC;AAClE,YAAI,sBAAsB,GAAG;AAC3B,gBAAM,wBAAwB,qBAAqB,KAAK,mBAAmB;AAC3E,cAAI,YAAY,yBAAyB,KAAK,MAAM,UAAU,yBAAyB,cAAc,UAAU,YAAY;AACzH,mBAAO;AAAA,UACT;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACF,KAAK,UAAU;AAAA,MACf,KAAK,UAAU,aACb;AACE,cAAM,sBAAsB,KAAK,qBAAqB,SAAS;AAC/D,YAAI,uBAAuB,GAAG;AAC5B,iBAAO,sBAAsB,KAAK,mBAAmB;AAAA,QACvD;AAAA,MACF;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW;AACT,QAAI,KAAK,OAAO;AACd,YAAM,SAAS,KAAK;AACpB,UAAI,WAAW;AAGf,UAAI,KAAK,OAAO,KAAM,YAAW,KAAK,IAAI,UAAU,KAAK,GAAG;AAC5D,UAAI,KAAK,OAAO,KAAM,YAAW,KAAK,IAAI,UAAU,KAAK,GAAG;AAC5D,UAAI,aAAa,OAAQ,MAAK,gBAAgB,KAAK,OAAO,UAAU,IAAI;AACxE,UAAI,YAAY,KAAK;AACrB,UAAI,KAAK,eAAgB,aAAY,KAAK,gBAAgB,SAAS;AACnE,UAAI,KAAK,sBAAsB,KAAK,QAAQ,EAAG,aAAY,KAAK,oBAAoB,SAAS;AAC7F,WAAK,SAAS;AAAA,IAChB;AACA,UAAM,SAAS;AAAA,EACjB;AAAA,EACA,gBAAgB,OAAO;AACrB,UAAM,QAAQ,KAAK,2BAA2B,KAAK,EAAE,MAAM,KAAK,KAAK;AAGrE,UAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,mBAAmB,CAAC,OAAO,MAAM,OAAO,QAAQ,OAAO,GAAG;AAEtF,QAAI,MAAM,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,EAAG,OAAM,CAAC,IAAI,MAAM,CAAC,IAAI;AACjE,QAAI,MAAM,SAAS,GAAG;AACpB,YAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,OAAO,EAAE;AACrC,UAAI,CAAC,MAAM,CAAC,EAAE,OAAQ,OAAM,SAAS;AAAA,IACvC;AACA,WAAO,KAAK,2BAA2B,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,EAC/D;AAAA,EACA,oBAAoB,OAAO;AACzB,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,QAAQ,MAAM,MAAM,KAAK,KAAK;AACpC,QAAI,MAAM,SAAS,EAAG,OAAM,KAAK,EAAE;AACnC,UAAM,CAAC,IAAI,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,GAAG;AAC1C,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,cAAc,IAAI,OAAO,WAAW;AAClC,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,iBAAiB,KAAK,UAAU,KAAK,OAAO,KAAK,uBAAuB,OAAO,KAAK,SAAS,OAAOA,eAAa,kBAAkB,KAAK,WAAW,SAAS,EAAE;AACpK,WAAO,MAAM,cAAc,IAAI,OAAO,SAAS,KAAK,CAAC;AAAA,EACvD;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,2BAA2B,KAAK,gBAAgB,KAAK,KAAK,CAAC,EAAE,QAAQ,KAAK,OAAOA,eAAa,cAAc;AAAA,EAC1H;AAAA,EACA,IAAI,cAAc,eAAe;AAC/B,UAAM,gBAAgB;AAAA,EACxB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,MAAM,KAAK,eAAe,IAAI;AAAA,EAC5C;AAAA,EACA,IAAI,WAAW,GAAG;AAChB,SAAK,gBAAgB,KAAK,OAAO,GAAG,IAAI,EAAE,QAAQA,eAAa,gBAAgB,KAAK,KAAK;AAAA,EAC3F;AAAA;AAAA,EAGA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,OAAO,QAAQ;AACjB,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM;AAAA,EAC5E;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM;AAAA,EAC5E;AAAA,EACA,iBAAiB,OAAO;AAGtB,YAAQ,MAAM,iBAAiB,KAAK,KAAKA,eAAa,aAAa,SAAS,KAAK,KAAKA,eAAa,aAAa,SAAS,KAAK,UAAU,MAAM,EAAE,UAAU,KAAK,KAAK,UAAU;AAAA,EAChL;AACF;AACA,gBAAgB;AAChB,aAAa,iBAAiB;AAC9B,aAAa,eAAe,CAAC,GAAG,OAAO,cAAc,CAAC;AACtD,aAAa,WAAW;AAAA,EACtB,GAAG,OAAO;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,oBAAoB;AAAA,EACpB,YAAY,CAAC,cAAc,cAAc;AAAA,EACzC,KAAK,OAAO;AAAA,EACZ,KAAK,OAAO;AAAA,EACZ,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ,OAAK,EAAE,eAAe,SAAS;AAAA,IACrC,aAAa;AAAA,IACb,uBAAuB;AAAA,EACzB,CAAC;AACH;AACA,MAAM,eAAe;;;AClTrB,IAAM,YAAY;AAAA,EAChB,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT;AAEA,SAAS,WAAW,KAAK,MAAM,IAAI;AACjC,MAAI,SAAS,QAAQ;AACnB,WAAO,UAAU;AAAA,EACnB;AACA,MAAI,OAAO,QAAQ;AACjB,SAAK,UAAU;AAAA,EACjB;AACA,QAAM,SAAS,WAAW,GAAG;AAC7B,SAAO,WAAS,OAAO,YAAY,OAAK;AACtC,MAAE,IAAI,IAAI;AACV,WAAO,EAAE,EAAE;AAAA,EACb,CAAC;AACH;AAGA,SAAS,KAAK,OAAO,MAAM,MAAM,IAAI;AACnC,SAAO,WAAW,MAAM,MAAM,EAAE,EAAE,KAAK;AACzC;AACA,MAAM,YAAY;AAClB,MAAM,aAAa;AACnB,MAAM,OAAO;;;ACjBb,IAAM,cAAN,cAA0B,cAAc;AAAA,EACtC,IAAI,aAAa;AACf,QAAI;AACJ,YAAQ,OAAO,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,WAAW,IAAI,KAAK,WAAW,OAAO,OAAO;AAAA,EAC5H;AAAA,EACA,IAAI,WAAW;AACb,QAAI;AACJ,YAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,OAAO,QAAQ;AAAA,EAC/F;AAAA,EACA,YAAY,MAAM;AAChB,UAAM,IAAI;AAAA,EACZ;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,QAAI,OAAO,OAAO;AAClB,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI,cAAc,IAAI;AACtB,SAAK,aAAa,OAAO,OAAO,CAAC,GAAG,KAAK,YAAY,SAAS;AAC9D,UAAM,QAAQ,WAAW,KAAK,UAAU;AACxC,SAAK,UAAU,SAAS,QAAQ,UAAU,OAAO,SAAS,MAAM,WAAW,OAAO,QAAQ,KAAK,WAAW,OAAO,QAAQ;AAEzH,UAAM,QAAQ;AAAA,MACZ,MAAM,IAAI,OAAO,KAAK,IAAI,KAAK,aAAa,cAAc,gBAAgB,KAAK,YAAY,OAAO,SAAS,cAAc,WAAW,GAAG,KAAK,UAAU,CAAC;AAAA,MACvJ,QAAQ;AAAA,QACN,GAAG;AAAA,MACL;AAAA,MACA,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,iBAAiB,MAAM;AAAA,MACvB,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EACA,eAAe,IAAI;AACjB,QAAI,KAAK,KAAK,QAAQ,OAAQ,QAAO,KAAK,QAAQ,EAAE;AACpD,QAAI,KAAK,aAAa,YAAY,KAAK,QAAQ,SAAS,KAAK,UAAU;AACrE,WAAK,QAAQ,KAAK,WAAW,KAAK,UAAU,CAAC;AAC7C,WAAK,QAAQ;AACb,aAAO,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,UAAU,IAAI,cAAc;AAClC;AAAA,UAAS,MAAM,yBAAyB,uBAAuB,KAAK,eAAe,KAAK,aAAa,MAAM,MAAM,OAAO,SAAS,qBAAqB,UAAU,OAAO,wBAAwB,KAAK,IAAI,KAAK,QAAQ,SAAS,GAAG,CAAC,GAAG,OAAO;AAAA;AAAA;AAAA,MAG5O,SAAS,mBAAmB,KAAK,QAAQ,EAAE,MAAM,OAAO,mBAAmB,YAAY,CAAC,aAAa,KAAK,eAAe,EAAE;AAAA,MAAG,EAAE;AAAA,MAAI;AAClI,UAAI,uBAAuB,sBAAsB,kBAAkB;AACnE,YAAM,eAAe,MAAM,YAAY,IAAI;AAAA,QACzC,GAAG;AAAA,QACH,mBAAmB,wBAAwB,MAAM,qBAAqB,SAAS,wBAAwB,sBAAsB,YAAY,OAAO,SAAS,sBAAsB,EAAE;AAAA,MACnL,CAAC;AACD,UAAI,aAAa,QAAQ,WAAW;AAElC,aAAK,QAAQ,IAAI;AACjB,aAAK,OAAO,KAAK,KAAK,MAAM,CAAC;AAC7B;AAAA,MACF;AACA,cAAQ,UAAU,YAAY;AAC9B,UAAI,aAAa,SAAU;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,SAAS,OAAO;AAC7B,QAAI,uBAAuB;AAC3B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,UAAM,kBAAkB,KAAK,MAAM,wBAAwB,KAAK,eAAe,OAAO,MAAM,OAAO,SAAS,sBAAsB,UAAU,GAAG,KAAK,YAAY,CAAC;AACjK,QAAI;AACJ,QAAI,SAAS,KAAM,mBAAkB,wBAAwB,KAAK,eAAe,KAAK,MAAM,OAAO,SAAS,sBAAsB;AAClI,QAAI,kBAAkB,KAAM,kBAAiB,KAAK,QAAQ,SAAS;AACnE,QAAI,cAAc;AAClB,aAAS,aAAa,gBAAgB,mBAAmB,YAAY,EAAE,YAAY,EAAE,aAAa;AAChG,UAAI,KAAK,QAAQ,UAAU,EAAE,cAAe;AAAA,IAC9C;AACA,QAAI,aAAa;AACf,WAAK,QAAQ,OAAO,iBAAiB,cAAc,GAAG,WAAW;AACjE,WAAK,OAAO,KAAK,KAAK,MAAM,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA,QAAQ;AACN,UAAM,MAAM;AACZ,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,gBAAgB,MAAM,OAAO,SAAS,KAAK;AACjD,SAAK,eAAe,SAAS,KAAK;AAClC,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,SAAS,QAAQ,KAAK,aAAa,SAAU,QAAO;AACxD,WAAO,MAAM,oBAAoB,SAAS,KAAK;AAAA,EACjD;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,MAAM;AAAA,EACf;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,QAAQ,SAAS,MAAM,QAAQ;AACpC,SAAK,OAAO,KAAK,KAAK,MAAM,GAAG,KAAK,QAAQ,MAAM;AAClD,UAAM,QAAQ;AAAA,EAChB;AACF;AACA,MAAM,cAAc;;;AC1GpB,IAAI;AACF,aAAW,QAAQ;AACrB,QAAQ;AAAC;;;AC5BT,IAAO,uBAAQ;AAAA,EACb,UAAW;AACT,SAAK,cAAc,KAAK,GAAG,cAAc,qBAAqB;AAC9D,SAAK,cAAc,KAAK,GAAG,cAAc,qBAAqB;AAE9D,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,iBAAkB;AAChB,UAAM,cAAc,KAAK,GAAG,QAAQ;AAEpC,YAAQ,IAAI,iBAAiB,WAAW;AAExC,QAAI,CAAC,aAAa;AAChB,cAAQ,MAAM,uEAAuE;AACrF;AAAA,IACF;AAEA,SAAK,cAAc;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,KAAK;AAAA,UACH,MAAM;AAAA,UACN,oBAAoB,KAAK,GAAG,QAAQ;AAAA,UACpC,OAAO,KAAK,GAAG,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,OAAO,MAAM,KAAK,aAAa,KAAK,WAAW;AACpD,SAAK,KAAK,gBAAgB,KAAK,SAAS,KAAK,YAAY,KAAK;AAC9D,SAAK,KAAK,GAAG,UAAU,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,EACzD;AAAA,EACA,UAAW;AACT,SAAK,iBAAiB,KAAK,IAAI;AAAA,EACjC;AAAA,EACA,mBAAoB;AAClB,SAAK,YAAY,QAAQ,KAAK,SAAS,KAAK,KAAK,KAAK;AACtD,SAAK,YAAY,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,EACtE;AAAA,EACA,SAAU,OAAO;AACf,WAAO,MACJ,QAAQ,KAAK,GAAG,QAAQ,QAAQ,IAAI,EAAE,EACtC,KAAK,EACL,QAAQ,IAAI,OAAO,KAAK,KAAK,GAAG,QAAQ,kBAAkB,IAAI,GAAG,GAAG,EAAE;AAAA,EAC3E;AAAA,EACA,YAAa;AACX,SAAK,KAAK,QAAQ;AAAA,EACpB;AACF;", + "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_number_input.js"], + "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } From 3d03c2d1ced65e894a4e0d31f26b81b5a5e73770 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:36:52 +0200 Subject: [PATCH 10/24] Remove debug message --- assets/js/hooks/_masked_number_input.js | 2 -- priv/static/js/backpex.cjs.js | 1 - priv/static/js/backpex.cjs.js.map | 4 ++-- priv/static/js/backpex.esm.js | 1 - priv/static/js/backpex.esm.js.map | 4 ++-- 5 files changed, 4 insertions(+), 8 deletions(-) diff --git a/assets/js/hooks/_masked_number_input.js b/assets/js/hooks/_masked_number_input.js index 63b4aa37c..e38069dc4 100644 --- a/assets/js/hooks/_masked_number_input.js +++ b/assets/js/hooks/_masked_number_input.js @@ -10,8 +10,6 @@ export default { initializeMask () { const maskPattern = this.el.dataset.maskPattern - console.log('Mask pattern:', maskPattern) - if (!maskPattern) { console.error('You must provide a mask pattern in the data-masked-pattern attribute.') return diff --git a/priv/static/js/backpex.cjs.js b/priv/static/js/backpex.cjs.js index 4d87b038b..9d1300ef8 100644 --- a/priv/static/js/backpex.cjs.js +++ b/priv/static/js/backpex.cjs.js @@ -3490,7 +3490,6 @@ var masked_number_input_default = { }, initializeMask() { const maskPattern = this.el.dataset.maskPattern; - console.log("Mask pattern:", maskPattern); if (!maskPattern) { console.error("You must provide a mask pattern in the data-masked-pattern attribute."); return; diff --git a/priv/static/js/backpex.cjs.js.map b/priv/static/js/backpex.cjs.js.map index ef4085ae3..2d052eaf1 100644 --- a/priv/static/js/backpex.cjs.js.map +++ b/priv/static/js/backpex.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_number_input.js"], - "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], - "mappings": "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", + "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACIA,IAAO,uBAAQ;AAAA,EACb,UAAW;AACT,SAAK,OAAO,KAAK,GAAG,QAAQ,MAAM;AAElC,UAAM,YAAY,KAAK,GAAG,QAAQ;AAClC,SAAK,YAAY,gBAAgB,SAAS,IAAI,CAAC,MAAM;AAAE,WAAK,oBAAoB;AAAA,IAAE,CAAC;AACnF,SAAK,YAAY,yBAAyB,SAAS,IAAI,CAAC,MAAM;AAAE,WAAK,oBAAoB;AAAA,IAAE,CAAC;AAAA,EAC9F;AAAA,EACA,sBAAuB;AACrB,QAAI,KAAK,MAAM;AACb,WAAK,GAAG,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,IAC7D;AAAA,EACF;AACF;;;ACdA,IAAO,qBAAQ;AAAA,EACb,UAAW;AACT,SAAK,WAAW;AAChB,SAAK,aAAa,IAAI,gBAAgB;AACtC,UAAM,SAAS,KAAK,WAAW;AAE/B,SAAK,GAAG,iBAAiB,aAAa,MAAM,KAAK,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1F,SAAK,GAAG,iBAAiB,aAAa,MAAM,KAAK,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAC1F,SAAK,GAAG,iBAAiB,QAAQ,MAAM,KAAK,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAAA,EACvE;AAAA,EACA,YAAa;AACX,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EACA,WAAY,OAAO;AACjB,SAAK,WAAW;AAChB,SAAK,GAAG,kBAAkB,UAAU,OAAO,kBAAkB,KAAK,WAAW,CAAC;AAAA,EAChF;AACF;;;ACjBA,IAAO,2BAAQ;AAAA,EACb,UAAW;AACT,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EACA,UAAW;AACT,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EACA,YAAa;AACX,UAAM,WAAW,KAAK,GAAG,iBAAiB,mBAAmB;AAE7D,aAAS,QAAQ,aAAW;AAC1B,YAAM,SAAS,QAAQ,cAAc,6BAA6B;AAClE,aAAO,oBAAoB,SAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,WAAY,SAAS;AACnB,QAAI,CAAC,WAAW,QAAQ,SAAS,WAAW,GAAG;AAC7C,aAAO;AAAA,IACT;AAEA,eAAW,SAAS,QAAQ,UAAU;AACpC,YAAM,eAAe,MAAM,cAAc,8BAA8B;AAEvE,UAAI,cAAc;AAChB,YAAI,KAAK,WAAW,YAAY,GAAG;AACjC,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EACA,qBAAsB;AACpB,UAAM,WAAW,KAAK,GAAG,iBAAiB,mBAAmB;AAE7D,aAAS,QAAQ,aAAW;AAC1B,YAAM,YAAY,QAAQ,QAAQ;AAClC,YAAM,SAAS,QAAQ,cAAc,6BAA6B;AAClE,YAAM,UAAU,QAAQ,cAAc,8BAA8B;AAEpE,UAAI,CAAC,KAAK,WAAW,OAAO,GAAG;AAC7B,gBAAQ,MAAM,UAAU;AACxB;AAAA,MACF;AAEA,YAAM,SAAS,aAAa,QAAQ,mBAAmB,SAAS,EAAE,MAAM;AACxE,UAAI,CAAC,QAAQ;AACX,eAAO,UAAU,OAAO,oBAAoB;AAC5C,gBAAQ,MAAM,UAAU;AAAA,MAC1B;AAEA,cAAQ,UAAU,OAAO,QAAQ;AAEjC,aAAO,iBAAiB,SAAS,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,IAC/D,CAAC;AAAA,EACH;AAAA,EACA,aAAc,OAAO;AACnB,UAAM,UAAU,MAAM,cAAc,QAAQ,mBAAmB;AAC/D,UAAM,YAAY,QAAQ,QAAQ;AAClC,UAAM,SAAS,QAAQ,cAAc,6BAA6B;AAClE,UAAM,UAAU,QAAQ,cAAc,8BAA8B;AAEpE,WAAO,UAAU,OAAO,oBAAoB;AAC5C,YAAQ,MAAM,UAAU,QAAQ,MAAM,YAAY,SAAS,UAAU;AAErE,UAAM,YAAY,OAAO,UAAU,SAAS,oBAAoB;AAChE,iBAAa,QAAQ,mBAAmB,SAAS,IAAI,SAAS;AAAA,EAChE;AACF;;;ACpEA,IAAO,yBAAQ;AAAA,EACb,UAAW;AACT,SAAK,SAAS,KAAK,GAAG,cAAc,SAAS;AAE7C,SAAK,WAAW,IAAI;AAAA,MAClB,CAAC,CAAC,KAAK,MAAM;AACX,aAAK,QAAQ,MAAM,oBAAoB;AACvC,aAAK,qBAAqB;AAAA,MAC5B;AAAA,MACA,EAAE,WAAW,CAAC,CAAC,GAAG,MAAM,KAAK,GAAG,QAAQ,kBAAkB,EAAE;AAAA,IAC9D;AAEA,SAAK,SAAS,QAAQ,KAAK,EAAE;AAAA,EAC/B;AAAA,EACA,UAAW;AACT,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EACA,YAAa;AACX,SAAK,SAAS,WAAW;AAAA,EAC3B;AAAA,EACA,uBAAwB;AACtB,SAAK,OAAO,gBAAgB,SAAS,KAAK,KAAK;AAAA,EACjD;AACF;;;ACzBA,IAAO,yBAAQ;AAAA,EACb,UAAW;AACT,UAAM,OAAO,SAAS,cAAc,8BAA8B;AAClE,UAAM,cAAc,OAAO,aAAa,QAAQ,cAAc;AAG9D,QAAI,eAAe,MAAM;AACvB,YAAM,mBAAmB,KAAK;AAAA,QAC5B,uCAAuC,WAAW;AAAA,MACpD;AACA,uBAAiB,UAAU;AAAA,IAC7B;AAEA,WAAO,iBAAiB,wBAAwB,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACnF;AAAA;AAAA;AAAA,EAGA,MAAM,oBAAqB;AACzB,UAAM,OAAO,SAAS,cAAc,8BAA8B;AAClE,UAAM,YAAY,SAAS,cAAc,yBAAyB,EAAE,aAAa,SAAS;AAC1F,UAAM,aAAa,KAAK,QAAQ;AAChC,UAAM,gBAAgB,KAAK;AAAA,MACzB;AAAA,IACF;AAEA,QAAI,eAAe;AACjB,aAAO,aAAa,QAAQ,gBAAgB,cAAc,KAAK;AAC/D,eAAS,gBAAgB;AAAA,QACvB;AAAA,QACA,cAAc;AAAA,MAChB;AACA,YAAM,MAAM,YAAY;AAAA,QACtB,MAAM,gBAAgB,cAAc,KAAK;AAAA,QACzC,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,gBAAgB;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA,EAEA,iBAAkB;AAChB,UAAM,cAAc,OAAO,aAAa,QAAQ,cAAc;AAE9D,QAAI,eAAe,MAAM;AACvB,eAAS,gBAAgB,aAAa,cAAc,WAAW;AAAA,IACjE;AAAA,EACF;AAAA,EACA,YAAa;AACX,WAAO,oBAAoB,wBAAwB,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA,EACtF;AACF;;;ACpDA,IAAO,kBAAQ;AAAA,EACb,UAAW;AACT,SAAK,UAAU;AACf,SAAK,aAAa,IAAI,gBAAgB;AACtC,UAAM,SAAS,KAAK,WAAW;AAE/B,SAAK,GAAG,iBAAiB,cAAc,MAAM;AAC3C,YAAM,OAAO,KAAK,GAAG,aAAa,cAAc;AAChD,UAAI,CAAC,KAAM;AAEX,WAAK,UAAU,SAAS,cAAc,KAAK;AAC3C,WAAK,QAAQ,YAAY;AACzB,WAAK,QAAQ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQzB,eAAS,KAAK,YAAY,KAAK,OAAO;AACtC,WAAK,sBAAsB;AAAA,IAC7B,GAAG,EAAE,OAAO,CAAC;AAEb,SAAK,GAAG,iBAAiB,cAAc,MAAM;AAC3C,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ,OAAO;AACpB,aAAK,UAAU;AAAA,MACjB;AAAA,IACF,GAAG,EAAE,OAAO,CAAC;AAEb,WAAO,iBAAiB,UAAU,MAAM;AAAE,WAAK,sBAAsB;AAAA,IAAE,GAAG,EAAE,OAAO,CAAC;AAAA,EACtF;AAAA,EACA,YAAa;AACX,SAAK,WAAW,MAAM;AAEtB,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,EACF;AAAA,EACA,wBAAyB;AACvB,QAAI,CAAC,KAAK,QAAS;AAEnB,UAAM,OAAO,KAAK,GAAG,sBAAsB;AAC3C,SAAK,QAAQ,MAAM,OAAO,GAAG,KAAK,OAAO,KAAK,QAAQ,CAAC;AACvD,SAAK,QAAQ,MAAM,MAAM,GAAG,KAAK,MAAM,KAAK,QAAQ,eAAe,CAAC;AAAA,EACtE;AACF;;;ACjDA,SAAS,SAAS,KAAK;AACrB,SAAO,OAAO,QAAQ,YAAY,eAAe;AACnD;AAGA,SAAS,SAAS,KAAK;AACrB,MAAI;AACJ,SAAO,OAAO,QAAQ,YAAY,OAAO,SAAS,OAAO,SAAS,mBAAmB,IAAI,gBAAgB,OAAO,SAAS,iBAAiB,UAAU;AACtJ;AACA,SAAS,KAAK,KAAK,MAAM;AACvB,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC;AACpE,SAAO,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,KAAK,SAAS;AAC/C,QAAI,CAAC,GAAG,CAAC,IAAI;AACb,QAAI,KAAK,GAAG,CAAC,EAAG,KAAI,CAAC,IAAI;AACzB,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;AAGA,IAAM,YAAY;AAAA,EAChB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,aAAa;AACf;AAIA,SAAS,eAAe,WAAW;AACjC,UAAQ,WAAW;AAAA,IACjB,KAAK,UAAU;AACb,aAAO,UAAU;AAAA,IACnB,KAAK,UAAU;AACb,aAAO,UAAU;AAAA,IACnB;AACE,aAAO;AAAA,EACX;AACF;AAGA,SAAS,aAAa,KAAK;AACzB,SAAO,IAAI,QAAQ,6BAA6B,MAAM;AACxD;AAGA,SAAS,eAAe,GAAG,GAAG;AAC5B,MAAI,MAAM,EAAG,QAAO;AACpB,QAAM,OAAO,MAAM,QAAQ,CAAC,GAC1B,OAAO,MAAM,QAAQ,CAAC;AACxB,MAAI;AACJ,MAAI,QAAQ,MAAM;AAChB,QAAI,EAAE,UAAU,EAAE,OAAQ,QAAO;AACjC,SAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,IAAK,KAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EAAG,QAAO;AACvE,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI,KAAK,KAAK,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAC5D,UAAM,QAAQ,aAAa,MACzB,QAAQ,aAAa;AACvB,QAAI,SAAS,MAAO,QAAO,EAAE,QAAQ,KAAK,EAAE,QAAQ;AACpD,QAAI,SAAS,MAAO,QAAO;AAC3B,UAAM,UAAU,aAAa,QAC3B,UAAU,aAAa;AACzB,QAAI,WAAW,QAAS,QAAO,EAAE,SAAS,KAAK,EAAE,SAAS;AAC1D,QAAI,WAAW,QAAS,QAAO;AAC/B,UAAM,OAAO,OAAO,KAAK,CAAC;AAG1B,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,KAAI,CAAC,OAAO,UAAU,eAAe,KAAK,GAAG,KAAK,CAAC,CAAC,EAAG,QAAO;AAChG,SAAK,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,KAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAG,QAAO;AACtF,WAAO;AAAA,EACT,WAAW,KAAK,KAAK,OAAO,MAAM,cAAc,OAAO,MAAM,YAAY;AACvE,WAAO,EAAE,SAAS,MAAM,EAAE,SAAS;AAAA,EACrC;AACA,SAAO;AACT;;;AC1EA,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EASlB,YAAY,MAAM;AAChB,WAAO,OAAO,MAAM,IAAI;AAGxB,WAAO,KAAK,MAAM,MAAM,GAAG,KAAK,cAAc,MAAM,KAAK,SAAS,MAAM,GAAG,KAAK,cAAc,GAAG;AAC/F,QAAE,KAAK,aAAa;AAAA,IACtB;AACA,QAAI,KAAK,eAAe;AAEtB,aAAO,KAAK,MAAM,MAAM,KAAK,SAAS,MAAM,KAAK,SAAS,MAAM,KAAK,aAAa,GAAG,GAAG;AACtF,YAAI,KAAK,MAAM,SAAS,KAAK,YAAY,KAAK,SAAS,SAAS,KAAK,aAAa,IAAK,GAAE,KAAK,aAAa;AAAA,YAAS,GAAE,KAAK;AAAA,MAC7H;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,iBAAiB;AACnB,WAAO,KAAK,IAAI,KAAK,WAAW,KAAK,aAAa,KAAK;AAAA,EACzD;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO,KAAK,MAAM,OAAO,KAAK,gBAAgB,KAAK,aAAa;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,eAAe;AAEjB,WAAO,KAAK,IAAI,KAAK,aAAa,MAAM,KAAK;AAAA,IAE7C,KAAK,SAAS,SAAS,KAAK,MAAM,QAAQ,CAAC;AAAA,EAC7C;AAAA;AAAA,EAGA,IAAI,UAAU;AACZ,WAAO,KAAK,SAAS,OAAO,KAAK,gBAAgB,KAAK,YAAY;AAAA,EACpE;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,UAAU,GAAG,KAAK,cAAc;AAAA,EACpD;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,MAAM,UAAU,KAAK,iBAAiB,KAAK,aAAa;AAAA,EACtE;AAAA;AAAA,EAGA,IAAI,kBAAkB;AACpB,QAAI,CAAC,KAAK,gBAAgB,KAAK,cAAe,QAAO,UAAU;AAG/D,YAAQ,KAAK,aAAa,QAAQ,KAAK,aAAa,KAAK,aAAa,UAAU,KAAK;AAAA,IAErF,KAAK,aAAa,QAAQ,KAAK,aAAa,QAAQ,UAAU,QAAQ,UAAU;AAAA,EAClF;AACF;;;ACzEA,SAAS,MAAM,IAAI,MAAM;AAEvB,SAAO,IAAI,MAAM,UAAU,IAAI,IAAI;AACrC;;;AC2BA,SAAS,YAAY,MAAgB;AACnC,MAAI,QAAQ,KAAM,OAAM,IAAI,MAAM,iCAAiC;AACnE,MAAI,gBAAgB,OAAQ,QAAO,MAAM;AACzC,MAAI,SAAS,IAAI,EAAG,QAAO,MAAM;AACjC,MAAI,SAAS,KAAM,QAAO,MAAM;AAChC,MAAI,SAAS,OAAQ,QAAO,MAAM;AAClC,MAAI,MAAM,QAAQ,IAAI,KAAK,SAAS,MAAO,QAAO,MAAM;AACxD,MAAI,MAAM,UAAU,KAAK,qBAAqB,MAAM,OAAQ,QAAO;AACnE,MAAI,MAAM,UAAU,gBAAgB,MAAM,OAAQ,QAAO,KAAK;AAC9D,MAAI,gBAAgB,SAAU,QAAO,MAAM;AAC3C,UAAQ,KAAK,2BAA2B,IAAI;AAC5C,SAAO,MAAM;AACf;AACA,SAAS,cAAc,MAAM;AAC3B,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,wBAAwB;AACnD,MAAI,MAAM,QAAQ;AAChB,QAAI,KAAK,qBAAqB,MAAM,OAAQ,QAAO;AAAA,MACjD,MAAM;AAAA,IACR;AAOA,UAAM;AAAA,MACJ,OAAO;AAAA,MACP,GAAG;AAAA,IACL,IAAI,gBAAgB,MAAM,SAAS;AAAA,MACjC,MAAM;AAAA,IACR,IAAI,SAAS,IAAI,KAAK,KAAK,gBAAgB,MAAM,SAAS,OAAO,CAAC;AAClE,QAAI,MAAM;AACR,YAAM,QAAQ,KAAK;AACnB,aAAO;AAAA,QACL,GAAG,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC;AAAA,QAC1C,MAAM,KAAK;AAAA,QACX;AAAA,QACA,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,SAAS,IAAI,EAAG,QAAO;AAAA,IAC1B,MAAM;AAAA,EACR;AACA,SAAO;AAAA,IACL,GAAG;AAAA,EACL;AACF;AA4BA,SAAS,WAAW,MAAM;AACxB,MAAI,MAAM,UAAU,gBAAgB,MAAM,OAAQ,QAAO;AACzD,QAAM,QAAQ,cAAc,IAAI;AAChC,QAAM,cAAc,YAAY,MAAM,IAAI;AAC1C,MAAI,CAAC,YAAa,OAAM,IAAI,MAAM,iDAAiD,MAAM,OAAO,0EAA0E;AAC1K,MAAI,MAAM,SAAS,YAAa,QAAO,MAAM;AAC7C,MAAI,MAAM,OAAO;AACf,UAAM,OAAO,MAAM;AACnB,WAAO,MAAM;AAAA,EACf;AACA,SAAO,IAAI,YAAY,KAAK;AAC9B;AACA,MAAM,aAAa;;;ACnHnB,IAAM,cAAN,MAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAQhB,IAAI,iBAAiB;AACnB,QAAI;AACJ,QAAI;AACF,cAAQ,KAAK;AAAA,IACf,QAAQ;AAAA,IAAC;AACT,WAAO,SAAS,OAAO,QAAQ,KAAK,MAAM;AAAA,EAC5C;AAAA;AAAA,EAGA,IAAI,eAAe;AACjB,QAAI;AACJ,QAAI;AACF,YAAM,KAAK;AAAA,IACb,QAAQ;AAAA,IAAC;AACT,WAAO,OAAO,OAAO,MAAM,KAAK,MAAM;AAAA,EACxC;AAAA;AAAA,EAGA,OAAO,OAAO,KAAK;AACjB,QAAI,SAAS,QAAQ,OAAO,QAAQ,UAAU,KAAK,kBAAkB,QAAQ,KAAK,aAAc;AAChG,QAAI;AACF,WAAK,cAAc,OAAO,GAAG;AAAA,IAC/B,QAAQ;AAAA,IAAC;AAAA,EACX;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAMF;AACA,MAAM,cAAc;;;AC3CpB,IAAM,QAAQ;AACd,IAAM,QAAQ;AAGd,IAAM,kBAAN,cAA8B,YAAY;AAAA;AAAA,EAGxC,YAAY,OAAO;AACjB,UAAM;AACN,SAAK,QAAQ;AACb,SAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AAAA,EAC3D;AAAA,EACA,IAAI,cAAc;AAChB,QAAI,uBAAuB,wBAAwB;AACnD,YAAQ,yBAAyB,0BAA0B,cAAc,KAAK,OAAO,gBAAgB,OAAO,SAAS,uBAAuB,KAAK,WAAW,MAAM,OAAO,wBAAwB;AAAA,EACnM;AAAA;AAAA,EAGA,IAAI,WAAW;AACb,WAAO,KAAK,UAAU,KAAK,YAAY;AAAA,EACzC;AAAA;AAAA,EAGA,WAAW,UAAU;AACnB,SAAK,MAAM,iBAAiB,WAAW,KAAK,UAAU;AACtD,SAAK,MAAM,iBAAiB,SAAS,KAAK,QAAQ;AAClD,SAAK,MAAM,iBAAiB,eAAe,KAAK,cAAc;AAC9D,SAAK,MAAM,iBAAiB,kBAAkB,KAAK,iBAAiB;AACpE,SAAK,MAAM,iBAAiB,QAAQ,SAAS,IAAI;AACjD,SAAK,MAAM,iBAAiB,SAAS,SAAS,KAAK;AACnD,SAAK,MAAM,iBAAiB,SAAS,SAAS,KAAK;AACnD,SAAK,MAAM,iBAAiB,QAAQ,SAAS,MAAM;AACnD,SAAK,YAAY;AAAA,EACnB;AAAA,EACA,WAAW,GAAG;AACZ,QAAI,KAAK,UAAU,SAAS,EAAE,YAAY,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,SAAS,EAAE,UAAU;AAC9H,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AACA,QAAI,KAAK,UAAU,QAAQ,EAAE,YAAY,UAAU,EAAE,WAAW,EAAE,UAAU;AAC1E,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AACA,QAAI,CAAC,EAAE,YAAa,MAAK,UAAU,gBAAgB,CAAC;AAAA,EACtD;AAAA,EACA,eAAe,GAAG;AAChB,QAAI,EAAE,cAAc,iBAAiB,KAAK,UAAU,MAAM;AACxD,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AACA,QAAI,EAAE,cAAc,iBAAiB,KAAK,UAAU,MAAM;AACxD,QAAE,eAAe;AACjB,aAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,kBAAkB,GAAG;AACnB,SAAK,UAAU,MAAM,CAAC;AAAA,EACxB;AAAA,EACA,SAAS,GAAG;AACV,QAAI,CAAC,EAAE,YAAa,MAAK,UAAU,MAAM,CAAC;AAAA,EAC5C;AAAA;AAAA,EAGA,eAAe;AACb,SAAK,MAAM,oBAAoB,WAAW,KAAK,UAAU;AACzD,SAAK,MAAM,oBAAoB,SAAS,KAAK,QAAQ;AACrD,SAAK,MAAM,oBAAoB,eAAe,KAAK,cAAc;AACjE,SAAK,MAAM,oBAAoB,kBAAkB,KAAK,iBAAiB;AACvE,SAAK,MAAM,oBAAoB,QAAQ,KAAK,UAAU,IAAI;AAC1D,SAAK,MAAM,oBAAoB,SAAS,KAAK,UAAU,KAAK;AAC5D,SAAK,MAAM,oBAAoB,SAAS,KAAK,UAAU,KAAK;AAC5D,SAAK,MAAM,oBAAoB,QAAQ,KAAK,UAAU,MAAM;AAC5D,SAAK,YAAY,CAAC;AAAA,EACpB;AACF;AACA,MAAM,kBAAkB;;;AC5ExB,IAAM,uBAAN,cAAmC,gBAAgB;AAAA;AAAA,EAGjD,YAAY,OAAO;AACjB,UAAM,KAAK;AACX,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA,EAGA,IAAI,wBAAwB;AAC1B,WAAO,KAAK,MAAM,kBAAkB,OAAO,KAAK,MAAM,iBAAiB,KAAK,MAAM;AAAA,EACpF;AAAA;AAAA,EAGA,IAAI,sBAAsB;AACxB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,cAAc,OAAO,KAAK;AACxB,SAAK,MAAM,kBAAkB,OAAO,GAAG;AAAA,EACzC;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,MAAM,QAAQ;AAAA,EACrB;AACF;AACA,MAAM,kBAAkB;;;AC9BxB,IAAM,iCAAN,cAA6C,gBAAgB;AAAA;AAAA,EAE3D,IAAI,wBAAwB;AAC1B,UAAM,OAAO,KAAK;AAClB,UAAM,YAAY,KAAK,gBAAgB,KAAK,aAAa;AACzD,UAAM,eAAe,aAAa,UAAU;AAC5C,UAAM,cAAc,aAAa,UAAU;AAC3C,QAAI,eAAe,QAAQ,gBAAgB,QAAQ,eAAe,aAAa;AAC7E,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,sBAAsB;AACxB,UAAM,OAAO,KAAK;AAClB,UAAM,YAAY,KAAK,gBAAgB,KAAK,aAAa;AACzD,UAAM,eAAe,aAAa,UAAU;AAC5C,UAAM,cAAc,aAAa,UAAU;AAC3C,QAAI,eAAe,QAAQ,gBAAgB,QAAQ,eAAe,aAAa;AAC7E,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,cAAc,OAAO,KAAK;AACxB,QAAI,CAAC,KAAK,YAAY,YAAa;AACnC,UAAM,QAAQ,KAAK,YAAY,YAAY;AAC3C,UAAM,SAAS,KAAK,MAAM,cAAc,KAAK,OAAO,KAAK;AACzD,UAAM,OAAO,KAAK,MAAM,aAAa,KAAK,OAAO,GAAG;AACpD,UAAM,OAAO,KAAK;AAClB,UAAM,YAAY,KAAK,gBAAgB,KAAK,aAAa;AACzD,QAAI,WAAW;AACb,gBAAU,gBAAgB;AAC1B,gBAAU,SAAS,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK,MAAM,eAAe;AAAA,EACnC;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,MAAM,cAAc;AAAA,EAC3B;AACF;AACA,MAAM,iCAAiC;;;ACnDvC,IAAM,eAAN,MAAM,cAAa;AAAA,EACjB,cAAc;AACZ,SAAK,SAAS,CAAC;AACf,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,OAAO,KAAK,YAAY;AAAA,EACtC;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA,EACA,KAAK,OAAO;AAEV,QAAI,KAAK,eAAe,KAAK,OAAO,SAAS,EAAG,MAAK,OAAO,SAAS,KAAK,eAAe;AACzF,SAAK,OAAO,KAAK,KAAK;AACtB,QAAI,KAAK,OAAO,SAAS,cAAa,WAAY,MAAK,OAAO,MAAM;AACpE,SAAK,eAAe,KAAK,OAAO,SAAS;AAAA,EAC3C;AAAA,EACA,GAAG,OAAO;AACR,SAAK,eAAe,KAAK,IAAI,KAAK,IAAI,KAAK,eAAe,OAAO,CAAC,GAAG,KAAK,OAAO,SAAS,CAAC;AAC3F,WAAO,KAAK;AAAA,EACd;AAAA,EACA,OAAO;AACL,WAAO,KAAK,GAAG,EAAE;AAAA,EACnB;AAAA,EACA,OAAO;AACL,WAAO,KAAK,GAAG,CAAE;AAAA,EACnB;AAAA,EACA,QAAQ;AACN,SAAK,OAAO,SAAS;AACrB,SAAK,eAAe;AAAA,EACtB;AACF;AACA,aAAa,aAAa;;;ACtB1B,IAAM,YAAN,MAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,YAAY,IAAI,MAAM;AACpB,SAAK,KAAK,cAAc,cAAc,KAAK,GAAG,qBAAqB,GAAG,YAAY,WAAW,GAAG,YAAY,aAAa,IAAI,+BAA+B,EAAE,IAAI,IAAI,qBAAqB,EAAE;AAC7L,SAAK,SAAS,WAAW,IAAI;AAC7B,SAAK,aAAa,CAAC;AACnB,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,SAAK,iBAAiB;AACtB,SAAK,UAAU,IAAI,aAAa;AAChC,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AACzC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,UAAU,KAAK,QAAQ,KAAK,IAAI;AACrC,SAAK,cAAc,KAAK,YAAY,KAAK,IAAI;AAC7C,SAAK,sBAAsB,KAAK,oBAAoB,KAAK,IAAI;AAC7D,SAAK,YAAY;AAGjB,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AAAA,EACA,WAAW,MAAM;AACf,QAAI;AACJ,WAAO,QAAQ,UAAU,eAAe,KAAK,WAAW,OAAO,SAAS,aAAa,WAAW,IAAI;AAAA,EACtG;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,KAAK,MAAM;AACb,QAAI,KAAK,WAAW,IAAI,EAAG;AAC3B,QAAI,EAAE,gBAAgB,MAAM,WAAW,KAAK,OAAO,gBAAgB,YAAY,IAAI,GAAG;AAEpF,WAAK,OAAO,cAAc;AAAA,QACxB;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,UAAM,SAAS,gBAAgB,MAAM,SAAS,OAAO,WAAW;AAAA,MAC9D;AAAA,IACF,CAAC;AACD,WAAO,gBAAgB,KAAK,OAAO;AACnC,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,MAAM,KAAK;AACb,QAAI,KAAK,UAAU,IAAK;AACxB,SAAK,OAAO,QAAQ;AACpB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc,KAAK;AACrB,QAAI,KAAK,kBAAkB,IAAK;AAChC,SAAK,OAAO,gBAAgB;AAC5B,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc,KAAK;AACrB,QAAI,KAAK,kBAAkB,IAAK;AAChC,SAAK,OAAO,gBAAgB;AAC5B,SAAK,cAAc;AACnB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGA,IAAI,aAAa;AACf,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,WAAW,KAAK;AAClB,QAAI,KAAK,OAAO,iBAAiB,GAAG,EAAG;AACvC,SAAK,OAAO,aAAa;AACzB,SAAK,cAAc,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,IAAI,eAAe;AACjB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA;AAAA,EAGA,cAAc;AACZ,SAAK,GAAG,WAAW;AAAA,MACjB,iBAAiB,KAAK;AAAA,MACtB,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IACb,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,gBAAgB;AACd,QAAI,KAAK,GAAI,MAAK,GAAG,aAAa;AAAA,EACpC;AAAA;AAAA,EAGA,WAAW,IAAI,GAAG;AAChB,UAAM,YAAY,KAAK,WAAW,EAAE;AACpC,QAAI,CAAC,UAAW;AAChB,cAAU,QAAQ,OAAK,EAAE,CAAC,CAAC;AAAA,EAC7B;AAAA;AAAA,EAGA,IAAI,iBAAiB;AACnB,WAAO,KAAK,kBAAkB,KAAK,qBAAqB,KAAK,GAAG;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,YAAY;AACd,WAAO,KAAK,kBAAkB,KAAK,qBAAqB,KAAK,GAAG;AAAA,EAClE;AAAA,EACA,IAAI,UAAU,KAAK;AACjB,QAAI,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,SAAU;AACnC,SAAK,GAAG,OAAO,KAAK,GAAG;AACvB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,iBACE;AACA,QAAI,KAAK,iBAAiB,KAAK,GAAG,OAAO;AACvC,cAAQ,KAAK,yGAAyG;AAAA,IACxH;AACA,SAAK,aAAa;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,KAAK,KAAK;AAAA,IACZ;AAAA,EACF;AAAA;AAAA,EAGA,cAAc;AACZ,SAAK,OAAO,QAAQ,KAAK,GAAG;AAC5B,SAAK,SAAS,KAAK,OAAO;AAC1B,SAAK,iBAAiB,KAAK,OAAO;AAClC,SAAK,iBAAiB,KAAK,OAAO;AAAA,EACpC;AAAA;AAAA,EAGA,cAAc,WAAW;AACvB,UAAM,mBAAmB,KAAK,OAAO;AACrC,UAAM,WAAW,KAAK,OAAO;AAC7B,UAAM,mBAAmB,KAAK,OAAO;AACrC,UAAM,kBAAkB,KAAK;AAC7B,UAAM,YAAY,KAAK,kBAAkB,oBAAoB,KAAK,UAAU,YAAY,KAAK,mBAAmB;AAChH,SAAK,iBAAiB;AACtB,SAAK,SAAS;AACd,SAAK,iBAAiB;AACtB,QAAI,KAAK,GAAG,UAAU,gBAAiB,MAAK,GAAG,QAAQ;AACvD,QAAI,cAAc,OAAQ,MAAK,YAAY;AAAA,aAAW,aAAa,KAAM,MAAK,YAAY;AAC1F,QAAI,UAAW,MAAK,kBAAkB;AACtC,QAAI,CAAC,KAAK,qBAAqB,aAAa,KAAK,QAAQ,SAAU,MAAK,QAAQ,KAAK;AAAA,MACnF,eAAe;AAAA,MACf,WAAW;AAAA,QACT,OAAO,KAAK;AAAA,QACZ,KAAK,KAAK;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,cAAc,MAAM;AAClB,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAEJ,UAAM,aAAa,CAAC,KAAK,WAAW,IAAI;AACxC,UAAM,aAAa,KAAK,OAAO,iBAAiB,QAAQ;AACxD,QAAI,WAAY,MAAK,OAAO;AAC5B,QAAI,WAAY,MAAK,OAAO,cAAc,QAAQ;AAElD,QAAI,cAAc,WAAY,MAAK,cAAc;AAAA,EACnD;AAAA;AAAA,EAGA,aAAa,WAAW;AACtB,QAAI,aAAa,KAAM;AACvB,SAAK,YAAY;AAGjB,SAAK,mBAAmB,SAAS;AAAA,EACnC;AAAA;AAAA,EAGA,mBAAmB,WAAW;AAC5B,SAAK,mBAAmB;AACxB,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB,WAAW,MAAM;AACtC,UAAI,CAAC,KAAK,GAAI;AACd,WAAK,YAAY,KAAK;AACtB,WAAK,mBAAmB;AAAA,IAC1B,GAAG,EAAE;AAAA,EACP;AAAA;AAAA,EAGA,oBAAoB;AAClB,SAAK,WAAW,UAAU,KAAK,WAAW;AAC1C,QAAI,KAAK,OAAO,WAAY,MAAK,WAAW,YAAY,KAAK,WAAW;AAAA,EAC1E;AAAA;AAAA,EAGA,qBAAqB;AACnB,QAAI,KAAK,iBAAiB;AACxB,mBAAa,KAAK,eAAe;AACjC,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA;AAAA,EAGA,cAAc;AACZ,SAAK,YAAY,KAAK,OAAO,gBAAgB,KAAK,OAAO,gBAAgB,KAAK,WAAW,UAAU,IAAI,CAAC;AAAA,EAC1G;AAAA;AAAA,EAGA,sBAAsB;AACpB,QAAI,KAAK,mBAAmB,KAAK,UAAW;AAC5C,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGA,GAAG,IAAI,SAAS;AACd,QAAI,CAAC,KAAK,WAAW,EAAE,EAAG,MAAK,WAAW,EAAE,IAAI,CAAC;AACjD,SAAK,WAAW,EAAE,EAAE,KAAK,OAAO;AAChC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,IAAI,SAAS;AACf,QAAI,CAAC,KAAK,WAAW,EAAE,EAAG,QAAO;AACjC,QAAI,CAAC,SAAS;AACZ,aAAO,KAAK,WAAW,EAAE;AACzB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,KAAK,WAAW,EAAE,EAAE,QAAQ,OAAO;AAClD,QAAI,UAAU,EAAG,MAAK,WAAW,EAAE,EAAE,OAAO,QAAQ,CAAC;AACrD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,GAAG;AACV,SAAK,cAAc;AACnB,SAAK,mBAAmB;AACxB,UAAM,UAAU,IAAI,cAAc;AAAA;AAAA,MAEhC,OAAO,KAAK,GAAG;AAAA,MACf,WAAW,KAAK;AAAA;AAAA,MAEhB,UAAU,KAAK;AAAA,MACf,cAAc,KAAK;AAAA,IACrB,CAAC;AACD,UAAM,cAAc,KAAK,OAAO;AAChC,UAAM,SAAS,KAAK,OAAO,OAAO,QAAQ,gBAAgB,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,iBAAiB;AAAA,MAC3H,OAAO;AAAA,MACP,KAAK;AAAA,IACP,CAAC,EAAE;AAIH,UAAM,kBAAkB,gBAAgB,KAAK,OAAO,gBAAgB,QAAQ,kBAAkB,UAAU;AACxG,QAAI,YAAY,KAAK,OAAO,gBAAgB,QAAQ,iBAAiB,QAAQ,eAAe;AAC5F,QAAI,oBAAoB,UAAU,KAAM,aAAY,KAAK,OAAO,gBAAgB,WAAW,UAAU,IAAI;AACzG,SAAK,cAAc,SAAS;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,YAAY;AACV,QAAI,KAAK,iBAAiB,KAAK,GAAG,MAAO,MAAK,YAAY;AAC1D,SAAK,OAAO,SAAS;AACrB,SAAK,cAAc;AACnB,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ,IAAI;AACV,OAAG,eAAe;AAClB,OAAG,gBAAgB;AAAA,EACrB;AAAA;AAAA,EAGA,SAAS,IAAI;AACX,SAAK,oBAAoB;AAAA,EAC3B;AAAA;AAAA,EAGA,SAAS,IAAI;AACX,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EACA,UAAU;AACR,SAAK,mBAAmB,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC7C;AAAA,EACA,UAAU;AACR,SAAK,mBAAmB,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC7C;AAAA,EACA,mBAAmB,OAAO;AACxB,QAAI,CAAC,MAAO;AACZ,SAAK,mBAAmB;AACxB,SAAK,gBAAgB,MAAM;AAC3B,SAAK,GAAG,OAAO,MAAM,UAAU,OAAO,MAAM,UAAU,GAAG;AACzD,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAAA,EAC1B;AAAA;AAAA,EAGA,UAAU;AACR,SAAK,cAAc;AACnB,SAAK,WAAW,SAAS;AACzB,WAAO,KAAK;AAAA,EACd;AACF;AACA,MAAM,YAAY;;;ACxVlB,IAAM,gBAAN,MAAM,eAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EASlB,OAAO,UAAU,MAAM;AACrB,WAAO,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,eAAc,CAAC;AAAA,EAChE;AAAA,EACA,YAAY,SAAS;AACnB,WAAO,OAAO,MAAM;AAAA,MAClB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW;AAAA,MACX,MAAM;AAAA,IACR,GAAG,OAAO;AAAA,EACZ;AAAA;AAAA,EAGA,UAAU,SAAS;AACjB,SAAK,YAAY,QAAQ;AACzB,SAAK,eAAe,QAAQ;AAC5B,SAAK,aAAa,QAAQ;AAC1B,SAAK,OAAO,KAAK,QAAQ,QAAQ;AACjC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAI,SAAS;AACX,WAAO,KAAK,YAAY,KAAK,SAAS;AAAA,EACxC;AAAA,EACA,IAAI,WAAW;AACb,WAAO,QAAQ,KAAK,WAAW,KAAK,KAAK;AAAA,EAC3C;AAAA,EACA,OAAO,SAAS;AACd,WAAO,KAAK,aAAa,QAAQ,YAAY,KAAK,cAAc,QAAQ,aAAa,KAAK,gBAAgB,QAAQ,eAAe,KAAK,SAAS,QAAQ;AAAA,EACzJ;AACF;AACA,MAAM,gBAAgB;;;AC3CtB,IAAM,wBAAN,MAA4B;AAAA;AAAA;AAAA;AAAA,EAO1B,YAAY,OAAO,MAAM,MAAM;AAC7B,QAAI,UAAU,QAAQ;AACpB,cAAQ;AAAA,IACV;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AAAA,EACA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EACA,OAAO,MAAM;AACX,SAAK,SAAS,OAAO,IAAI;AAAA,EAC3B;AAAA,EACA,SAAS,QAAQ;AACf,WAAO,OAAO,OAAO,KAAK,SAAS,GAAG;AAAA,MACpC,MAAM;AAAA,IACR,CAAC,EAAE,UAAU,OAAO,mBAAmB,CAAC;AAAA,EAC1C;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IACb;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,WAAO,OAAO,MAAM,KAAK;AAAA,EAC3B;AAAA,EACA,QAAQ,WAAW;AACjB,QAAI,CAAC,KAAK,MAAM,UAAU,aAAa,QAAQ,KAAK,QAAQ,UAAW,QAAO;AAC9E,UAAM,YAAY,KAAK,MAAM,CAAC;AAC9B,SAAK,QAAQ,KAAK,MAAM,MAAM,CAAC;AAC/B,WAAO;AAAA,EACT;AAAA,EACA,QAAQ;AACN,QAAI,CAAC,KAAK,MAAM,OAAQ,QAAO;AAC/B,UAAM,YAAY,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC;AAClD,SAAK,QAAQ,KAAK,MAAM,MAAM,GAAG,EAAE;AACnC,WAAO;AAAA,EACT;AACF;;;ACxCA,IAAM,SAAN,MAAM,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BX,YAAY,MAAM;AAChB,SAAK,SAAS;AACd,SAAK,QAAQ;AAAA,MACX,GAAG,QAAO;AAAA,MACV,GAAG;AAAA,IACL,CAAC;AACD,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA,EAGA,cAAc,MAAM;AAClB,QAAI,CAAC,KAAK,iBAAiB,IAAI,EAAG;AAClC,SAAK,iBAAiB,KAAK,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,EACrD;AAAA;AAAA,EAGA,QAAQ,MAAM;AACZ,WAAO,OAAO,MAAM,IAAI;AAAA,EAC1B;AAAA;AAAA,EAGA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA,EAGA,QAAQ;AACN,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,QAAQ,OAAO;AAAA,MAClB,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,QAAQ,OAAO,OAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,cAAQ;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AACA,SAAK,MAAM;AACX,SAAK,OAAO,OAAO,OAAO,EAAE;AAC5B,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,cAAc,OAAO;AACvB,SAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACxB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK;AAAA,EAC1D;AAAA,EACA,IAAI,WAAW,OAAO;AACpB,QAAI,KAAK,QAAQ;AACf,WAAK,QAAQ,KAAK,OAAO,OAAO,IAAI;AAAA,IACtC,OAAO;AACL,WAAK,gBAAgB,OAAO,KAAK;AAAA,IACnC;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,gBAAgB;AAClB,WAAO,KAAK,aAAa,GAAG,KAAK,aAAa,QAAQ;AAAA,MACpD,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EACA,IAAI,cAAc,OAAO;AACvB,SAAK,QAAQ,OAAO;AAAA,MAClB,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,aAAa;AACf,WAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,gBAAgB,WAAW,WAAW;AACpC,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,WAAO,KAAK,IAAI,KAAK,aAAa,QAAQ,QAAQ,OAAO;AAAA,EAC3D;AAAA;AAAA,EAGA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,WAAO,KAAK,aAAa,MAAM,SAAS,KAAK;AAAA,EAC/C;AAAA;AAAA,EAGA,YAAY,SAAS,OAAO;AAC1B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,WAAO,IAAI,sBAAsB,KAAK,aAAa,SAAS,KAAK,GAAG,OAAO;AAAA,EAC7E;AAAA;AAAA,EAGA,WAAW,MAAM;AACf,QAAI,SAAS,IAAI,EAAG,QAAO,IAAI,sBAAsB,OAAO,IAAI,CAAC;AACjE,WAAO,KAAK,SAAS,IAAI;AAAA,EAC3B;AAAA;AAAA,EAGA,eAAe,IAAI,OAAO;AACxB,QAAI,CAAC,GAAI,QAAO,IAAI,cAAc;AAClC,SAAK,UAAU;AACf,WAAO,IAAI,cAAc;AAAA,MACvB,UAAU;AAAA,MACV,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,YAAY,IAAI,OAAO,WAAW;AAChC,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,kBAAkB,KAAK;AAC7B,QAAI;AACJ,KAAC,IAAI,OAAO,IAAI,KAAK,cAAc,IAAI,KAAK;AAC5C,QAAI,IAAI;AACN,gBAAU,QAAQ,UAAU,KAAK,eAAe,IAAI,KAAK,CAAC;AAK1D,UAAI,CAAC,QAAQ,eAAe,KAAK,YAAY,OAAO;AAClD,cAAM,aAAa,KAAK;AACxB,aAAK,QAAQ;AACb,YAAI,aAAa,KAAK,IAAI,KAAK;AAC/B,cAAM,YAAY,KAAK,eAAe,IAAI,KAAK;AAC/C,qBAAa,WAAW,UAAU,SAAS;AAI3C,YAAI,UAAU,eAAe,WAAW,OAAO,OAAO,GAAG;AACvD,oBAAU;AAAA,QACZ,OAAO;AACL,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,UAAU;AACpB,UAAI;AACJ,UAAI,WAAW,KAAK,WAAW,KAAK,MAAM;AAC1C,UAAI,YAAY,aAAa,MAAM;AAEjC,cAAM,kBAAkB,KAAK;AAC7B,YAAI,KAAK,cAAc,MAAM;AAC3B,2BAAiB,UAAU;AAC3B,mBAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,QAAQ,EAAE,GAAG;AACnD,sBAAU,QAAQ,KAAK,aAAa,SAAS,QAAQ,SAAS;AAAA,UAChE;AAAA,QACF;AACA,YAAI,cAAc,KAAK,WAAW,SAAS;AAC3C,mBAAW,YAAY,YAAY,WAAW,UAAU,SAAS,EAAE;AAGnE,YAAI,EAAE,YAAY,YAAY,aAAa,KAAK,cAAc,SAAS;AACrE,eAAK,QAAQ;AACb,2BAAiB,UAAU;AAC3B,mBAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,QAAQ,EAAE,GAAG;AACnD,sBAAU,MAAM;AAAA,UAClB;AACA,wBAAc,KAAK,WAAW,SAAS;AACvC,qBAAW,YAAY,YAAY,WAAW,UAAU,SAAS,EAAE;AAAA,QACrE;AAGA,YAAI,YAAY,YAAY,SAAU,MAAK,QAAQ;AAAA,MACrD;AAGA,UAAI,CAAC,UAAU;AACb,kBAAU,IAAI,cAAc;AAC5B,aAAK,QAAQ;AACb,YAAI,aAAa,eAAgB,WAAU,QAAQ;AAAA,MACrD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB;AACnB,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA;AAAA,EAGA,eAAe;AACb,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA;AAAA,EAGA,OAAO,KAAK,OAAO,MAAM;AACvB,QAAI,CAAC,SAAS,GAAG,EAAG,OAAM,IAAI,MAAM,wBAAwB;AAC5D,UAAM,YAAY,SAAS,IAAI,IAAI,IAAI,sBAAsB,OAAO,IAAI,CAAC,IAAI;AAC7E,QAAI,SAAS,QAAQ,MAAM,KAAM,OAAM,mBAAmB,KAAK;AAC/D,QAAI;AACJ,KAAC,KAAK,OAAO,IAAI,KAAK,UAAU,KAAK,KAAK;AAC1C,aAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,EAAE,IAAI;AACtC,YAAM,IAAI,KAAK,YAAY,IAAI,EAAE,GAAG,OAAO,SAAS;AACpD,UAAI,CAAC,EAAE,eAAe,CAAC,KAAK,cAAc,IAAI,EAAE,GAAG,OAAO,SAAS,EAAG;AACtE,cAAQ,UAAU,CAAC;AAAA,IACrB;AACA,SAAK,KAAK,UAAU,QAAQ,KAAK,UAAU,aAAa,SAAS,QAAQ,MAAM,SAAS,KAAK;AAC3F,cAAQ,UAAU,KAAK,aAAa,CAAC;AAAA,IACvC;AAGA,QAAI,aAAa,MAAM;AACrB,cAAQ,aAAa,KAAK,WAAW,SAAS,EAAE;AAAA,IAIlD;AACA,WAAO;AAAA,EACT;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,SAAK,SAAS,KAAK,aAAa,MAAM,GAAG,OAAO,IAAI,KAAK,aAAa,MAAM,KAAK;AACjF,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA;AAAA,EAGA,iBAAiB,IAAI;AACnB,QAAI,KAAK,eAAe,CAAC,KAAK,aAAc,QAAO,GAAG;AACtD,SAAK,cAAc;AACnB,UAAM,WAAW,KAAK;AACtB,UAAM,QAAQ,KAAK;AACnB,UAAM,MAAM,GAAG;AACf,SAAK,gBAAgB;AAErB,QAAI,KAAK,SAAS,KAAK,UAAU,SAAS,MAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;AACzE,WAAK,OAAO,MAAM,MAAM,KAAK,aAAa,MAAM,GAAG,CAAC,GAAG,EAAE;AACzD,WAAK,SAAS;AAAA,IAChB;AACA,WAAO,KAAK;AACZ,WAAO;AAAA,EACT;AAAA,EACA,YAAY,IAAI;AACd,QAAI,KAAK,aAAa,CAAC,KAAK,aAAc,QAAO,GAAG,IAAI;AACxD,SAAK,YAAY;AACjB,UAAM,QAAQ,KAAK;AACnB,UAAM,MAAM,GAAG,IAAI;AACnB,SAAK,QAAQ;AACb,WAAO,KAAK;AACZ,WAAO;AAAA,EACT;AAAA,EACA,cAAc,IAAI,OAAO,WAAW;AAClC,WAAO,QAAQ,KAAK,WAAW;AAAA,EACjC;AAAA;AAAA,EAGA,UAAU,KAAK,OAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,WAAO,cAAc,UAAU,KAAK,UAAU,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,EACpF;AAAA;AAAA,EAGA,cAAc,KAAK,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,WAAO,cAAc,UAAU,KAAK,cAAc,KAAK,YAAY,KAAK,MAAM,KAAK,IAAI,GAAG;AAAA,EAC5F;AAAA;AAAA,EAGA,WAAW,OAAO;AAChB,YAAQ,CAAC,KAAK,YAAY,KAAK,SAAS,KAAK,OAAO,MAAM,KAAK,OAAO,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK;AAAA,EACpH;AAAA;AAAA,EAGA,WAAW;AACT,QAAI,KAAK,OAAQ,MAAK,OAAO,KAAK,OAAO,IAAI;AAAA,EAC/C;AAAA,EACA,OAAO,OAAO,aAAa,UAAU,iBAAiB,OAAO;AAC3D,QAAI,aAAa,QAAQ;AACvB,iBAAW;AAAA,IACb;AACA,QAAI,oBAAoB,QAAQ;AAC9B,wBAAkB,UAAU;AAAA,IAC9B;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,UAAU,QAAQ;AACxB,UAAM,OAAO,KAAK,YAAY,OAAO;AACrC,UAAM,cAAc,KAAK,UAAU,QAAQ,KAAK,UAAU;AAC1D,QAAI;AACJ,QAAI,aAAa;AACf,wBAAkB,eAAe,eAAe;AAChD,oBAAc,KAAK,aAAa,GAAG,SAAS;AAAA,QAC1C,KAAK;AAAA,MACP,CAAC;AAAA,IACH;AACA,QAAI,iBAAiB;AACrB,UAAM,UAAU,IAAI,cAAc;AAGlC,QAAI,oBAAoB,UAAU,MAAM;AACtC,uBAAiB,KAAK,gBAAgB,OAAO,cAAc,KAAK,UAAU,KAAK,CAAC,cAAc,UAAU,OAAO,eAAe;AAG9H,cAAQ,YAAY,iBAAiB;AAAA,IACvC;AACA,YAAQ,UAAU,KAAK,OAAO,cAAc,CAAC;AAC7C,QAAI,eAAe,oBAAoB,UAAU,QAAQ,gBAAgB,KAAK,eAAe;AAC3F,UAAI,oBAAoB,UAAU,YAAY;AAC5C,YAAI;AACJ,eAAO,gBAAgB,KAAK,kBAAkB,YAAY,KAAK,aAAa,SAAS;AACnF,kBAAQ,UAAU,IAAI,cAAc;AAAA,YAClC,WAAW;AAAA,UACb,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,YAAY,CAAC,CAAC;AAAA,QAC1C;AAAA,MACF,WAAW,oBAAoB,UAAU,aAAa;AACpD,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AACA,WAAO,QAAQ,UAAU,KAAK,OAAO,UAAU,OAAO,IAAI,CAAC;AAAA,EAC7D;AAAA,EACA,WAAW,MAAM;AACf,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EACA,iBAAiB,MAAM;AACrB,WAAO,CAAC,eAAe,MAAM,IAAI;AAAA,EACnC;AAAA,EACA,iBAAiB,OAAO;AACtB,UAAM,OAAO,KAAK;AAClB,WAAO,UAAU,QAAQ,QAAO,aAAa,SAAS,KAAK,KAAK,QAAO,aAAa,SAAS,IAAI,MAAM,KAAK,SAAS,KAAK,OAAO,OAAO,IAAI,MAAM,KAAK,OAAO,KAAK,YAAY,IAAI,IAAI;AAAA,EACzL;AAAA,EACA,IAAI,OAAO;AACT,WAAO,IAAI,cAAc;AAAA,EAC3B;AACF;AACA,OAAO,WAAW;AAAA,EAChB,aAAa;AACf;AACA,OAAO,eAAe,CAAC,QAAW,MAAM,EAAE;AAC1C,MAAM,SAAS;;;AC9Zf,IAAM,oBAAN,MAAM,mBAAkB;AAAA;AAAA,EAGtB,YAAY,QAAQ,MAAM;AACxB,QAAI,WAAW,QAAQ;AACrB,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EACd;AAAA,EACA,WAAW;AACT,WAAO,KAAK,OAAO,IAAI,MAAM,EAAE,KAAK,EAAE;AAAA,EACxC;AAAA,EACA,OAAO,WAAW;AAChB,QAAI,CAAC,OAAO,SAAS,EAAG;AACxB,gBAAY,SAAS,SAAS,IAAI,IAAI,sBAAsB,OAAO,SAAS,CAAC,IAAI;AACjF,UAAM,YAAY,KAAK,OAAO,KAAK,OAAO,SAAS,CAAC;AACpD,UAAM,aAAa;AAAA,KAEnB,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAQ;AAAA,IAEvD,UAAU,SAAS,UAAU,OAAO,UAAU,SAAS,EAAE;AACzD,QAAI,qBAAqB,uBAAuB;AAE9C,UAAI,YAAY;AAEd,kBAAU,OAAO,UAAU,SAAS,CAAC;AAAA,MACvC,OAAO;AAEL,aAAK,OAAO,KAAK,SAAS;AAAA,MAC5B;AAAA,IACF,WAAW,qBAAqB,oBAAmB;AACjD,UAAI,UAAU,QAAQ,MAAM;AAE1B,YAAI;AACJ,eAAO,UAAU,OAAO,UAAU,UAAU,OAAO,CAAC,EAAE,QAAQ,MAAM;AAClE,2BAAiB,UAAU,OAAO,MAAM;AACxC,yBAAe,QAAQ,UAAU;AACjC,eAAK,OAAO,cAAc;AAAA,QAC5B;AAAA,MACF;AAGA,UAAI,UAAU,SAAS,GAAG;AAExB,kBAAU,OAAO,UAAU;AAC3B,aAAK,OAAO,KAAK,SAAS;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS,QAAQ;AACf,QAAI,EAAE,kBAAkB,MAAM,gBAAgB;AAC5C,YAAM,OAAO,IAAI,sBAAsB,KAAK,SAAS,CAAC;AACtD,aAAO,KAAK,SAAS,MAAM;AAAA,IAC7B;AACA,UAAM,UAAU,IAAI,cAAc;AAClC,aAAS,KAAK,GAAG,KAAK,KAAK,OAAO,QAAQ,EAAE,IAAI;AAC9C,YAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAM,gBAAgB,OAAO,eAAe,OAAO,aAAa,MAAM;AACtE,YAAM,OAAO,MAAM;AACnB,UAAI;AACJ,UAAI,QAAQ;AAAA,OAEZ,CAAC,iBAAiB,cAAc,SAAS,OAAO;AAC9C,YAAI,iBAAiB;AAAA,QAErB,OAAO,OAAO,QAAQ,IAAI,KAAK,GAAG;AAChC,kBAAQ,UAAU,OAAO,mBAAmB,IAAI,CAAC;AAAA,QACnD;AACA,qBAAa,iBAAiB,sBAAqB,OAAO,QAAQ,IAAI;AAAA,MACxE;AACA,UAAI,YAAY;AACd,cAAM,cAAc,WAAW,WAAW,KAAK;AAC/C,gBAAQ,UAAU,WAAW;AAG7B,cAAM,cAAc,MAAM,SAAS,EAAE,MAAM,YAAY,YAAY,MAAM;AACzE,YAAI,YAAa,SAAQ,UAAU,OAAO,OAAO,aAAa;AAAA,UAC5D,MAAM;AAAA,QACR,CAAC,CAAC;AAAA,MACJ,OAAO;AACL,gBAAQ,UAAU,OAAO,OAAO,MAAM,SAAS,GAAG;AAAA,UAChD,MAAM;AAAA,QACR,CAAC,CAAC;AAAA,MACJ;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK,OAAO,IAAI,OAAK,EAAE,KAAK;AAAA,MACpC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,IACnB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,WAAO,OAAO,MAAM,KAAK;AACzB,SAAK,SAAS,OAAO,IAAI,YAAU;AACjC,YAAM,QAAQ,YAAY,SAAS,IAAI,mBAAkB,IAAI,IAAI,sBAAsB;AACvF,YAAM,QAAQ;AACd,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,QAAQ,WAAW;AACjB,QAAI,CAAC,KAAK,OAAO,UAAU,aAAa,QAAQ,KAAK,QAAQ,UAAW,QAAO;AAC/E,UAAM,gBAAgB,aAAa,OAAO,YAAY,KAAK,OAAO;AAClE,QAAI,KAAK;AACT,WAAO,KAAK,KAAK,OAAO,QAAQ;AAC9B,YAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAM,YAAY,MAAM,QAAQ,aAAa;AAC7C,UAAI,MAAM,SAAS,GAAG;AAGpB,YAAI,CAAC,UAAW;AAChB,UAAE;AAAA,MACJ,OAAO;AAEL,aAAK,OAAO,OAAO,IAAI,CAAC;AAAA,MAC1B;AACA,UAAI,UAAW,QAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EACA,QAAQ;AACN,QAAI,CAAC,KAAK,OAAO,OAAQ,QAAO;AAChC,QAAI,KAAK,KAAK,OAAO,SAAS;AAC9B,WAAO,KAAK,IAAI;AACd,YAAM,QAAQ,KAAK,OAAO,EAAE;AAC5B,YAAM,YAAY,MAAM,MAAM;AAC9B,UAAI,MAAM,SAAS,GAAG;AAGpB,YAAI,CAAC,UAAW;AAChB,UAAE;AAAA,MACJ,OAAO;AAEL,aAAK,OAAO,OAAO,IAAI,CAAC;AAAA,MAC1B;AACA,UAAI,UAAW,QAAO;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AACF;;;ACzJA,IAAM,gBAAN,MAAoB;AAAA,EAClB,YAAY,QAAQ,KAAK;AACvB,SAAK,SAAS;AACd,SAAK,OAAO,CAAC;AACb,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,IAAI,OAAO,eAAe,GAAG,MAAM,MAAM;AAAA;AAAA,MAEzC;AAAA,QACE,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA;AAAA;AAAA,MAEA;AAAA,QACE,OAAO,KAAK,OAAO,QAAQ;AAAA,QAC3B,QAAQ;AAAA,MACV;AAAA;AACA,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,KAAK;AAAA,EACZ;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO,QAAQ,KAAK,KAAK;AAAA,EACvC;AAAA,EACA,IAAI,MAAM;AACR,WAAO,KAAK,OAAO,eAAe,KAAK,KAAK,IAAI,KAAK;AAAA,EACvD;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,IAAI,KAAK;AAAA,IACX;AAAA,EACF;AAAA,EACA,IAAI,MAAM,GAAG;AACX,WAAO,OAAO,MAAM,CAAC;AAAA,EACvB;AAAA,EACA,YAAY;AACV,SAAK,KAAK,KAAK,KAAK,KAAK;AAAA,EAC3B;AAAA,EACA,WAAW;AACT,UAAM,IAAI,KAAK,KAAK,IAAI;AACxB,QAAI,EAAG,MAAK,QAAQ;AACpB,WAAO;AAAA,EACT;AAAA,EACA,YAAY;AACV,QAAI,KAAK,MAAO;AAChB,QAAI,KAAK,QAAQ,GAAG;AAClB,WAAK,QAAQ;AACb,WAAK,SAAS;AAAA,IAChB;AACA,QAAI,KAAK,SAAS,KAAK,OAAO,QAAQ,QAAQ;AAC5C,WAAK,QAAQ,KAAK,OAAO,QAAQ,SAAS;AAC1C,WAAK,SAAS,KAAK,MAAM,aAAa;AAAA,IACxC;AAAA,EACF;AAAA,EACA,UAAU,IAAI;AACZ,SAAK,UAAU;AACf,SAAK,KAAK,UAAU,GAAG,KAAK,KAAK,OAAO,EAAE,KAAK,OAAO,KAAK,WAAW,cAAc,KAAK,UAAU,OAAO,SAAS,YAAY,aAAa,WAAW,GAAG;AACxJ,UAAI;AACJ,UAAI,GAAG,EAAG,QAAO,KAAK,KAAK;AAAA,IAC7B;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EACA,WAAW,IAAI;AACb,SAAK,UAAU;AACf,SAAK,KAAK,UAAU,GAAG,KAAK,QAAQ,KAAK,OAAO,QAAQ,QAAQ,EAAE,KAAK,OAAO,KAAK,SAAS,GAAG;AAC7F,UAAI,GAAG,EAAG,QAAO,KAAK,KAAK;AAAA,IAC7B;AACA,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EACA,uBAAuB;AACrB,WAAO,KAAK,UAAU,MAAM;AAC1B,UAAI,KAAK,MAAM,WAAW,CAAC,KAAK,MAAM,MAAO;AAC7C,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,UAAU;AAC1E,UAAI,KAAK,WAAW,EAAG,QAAO;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EACA,sBAAsB;AAKpB,WAAO,KAAK,UAAU,MAAM;AAC1B,UAAI,KAAK,MAAM,QAAS;AACxB,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,yBAAyB;AACvB,WAAO,KAAK,UAAU,MAAM;AAC1B,UAAI,KAAK,MAAM,WAAW,KAAK,MAAM,cAAc,CAAC,KAAK,MAAM,MAAO;AACtE,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,wBAAwB;AACtB,WAAO,KAAK,WAAW,MAAM;AAC3B,UAAI,KAAK,MAAM,WAAW,CAAC,KAAK,MAAM,MAAO;AAC7C,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,WAAW;AAC3E,UAAI,KAAK,WAAW,KAAK,MAAM,MAAM,OAAQ,QAAO;AAAA,IACtD,CAAC;AAAA,EACH;AAAA,EACA,uBAAuB;AACrB,WAAO,KAAK,WAAW,MAAM;AAC3B,UAAI,KAAK,MAAM,QAAS;AAGxB,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AAKpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EACA,0BAA0B;AACxB,WAAO,KAAK,WAAW,MAAM;AAC3B,UAAI,KAAK,MAAM,WAAW,KAAK,MAAM,cAAc,CAAC,KAAK,MAAM,MAAO;AAGtE,WAAK,SAAS,KAAK,MAAM,gBAAgB,KAAK,QAAQ,UAAU,IAAI;AACpE,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;AC3HA,IAAM,yBAAN,MAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa3B,YAAY,MAAM;AAChB,WAAO,OAAO,MAAM,IAAI;AACxB,SAAK,SAAS;AACd,SAAK,UAAU;AAAA,EACjB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAAc,KAAK,QAAQ;AAAA,EACzC;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAAc,KAAK,QAAQ;AAAA,EACzC;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,QAAQ;AACN,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,SAAK,SAAS,KAAK,OAAO,MAAM,GAAG,OAAO,IAAI,KAAK,OAAO,MAAM,KAAK;AACrE,QAAI,CAAC,KAAK,OAAQ,MAAK,cAAc;AACrC,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,cAAc,QAAQ;AACxB,kBAAY,UAAU;AAAA,IACxB;AACA,UAAM,SAAS;AACf,UAAM,SAAS,KAAK,OAAO;AAC3B,YAAQ,WAAW;AAAA,MACjB,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACb,eAAO;AAAA,MACT,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,WAAO,KAAK,cAAc,QAAQ,UAAU;AAAA,EAC9C;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,OAAO;AAAA,IACtB;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,WAAO,MAAM,OAAO,KAAK,eAAe,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK;AAAA,EAC/E;AAAA,EACA,IAAI,aAAa;AACf,WAAO;AAAA,EACT;AAAA,EACA,IAAI,WAAW;AACb,WAAO,QAAQ,KAAK,MAAM;AAAA,EAC5B;AAAA,EACA,YAAY,IAAI,OAAO;AACrB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,KAAK,SAAU,QAAO,IAAI,cAAc;AAC5C,UAAM,cAAc,KAAK,UAAU,QAAQ,KAAK,UAAU;AAC1D,UAAM,WAAW,KAAK,SAAS;AAC/B,UAAM,aAAa,aAAa,KAAK,eAAe,MAAM,SAAS,MAAM,SAAS,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC,MAAM;AACxH,UAAM,UAAU,IAAI,cAAc;AAAA,MAChC,UAAU,KAAK;AAAA,MACf,aAAa,aAAa,KAAK,OAAO;AAAA,IACxC,CAAC;AACD,SAAK,SAAS,KAAK;AACnB,SAAK,cAAc,eAAe,MAAM,OAAO,MAAM;AACrD,WAAO;AAAA,EACT;AAAA,EACA,eAAe;AACb,WAAO,KAAK,YAAY,KAAK,MAAM;AAAA,MACjC,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EACA,qBAAqB;AACnB,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,SAAU,QAAO;AAC1B,SAAK,SAAS,QAAQ,WAAW,KAAK;AACtC,WAAO;AAAA,EACT;AAAA,EACA,cAAc;AACZ,WAAO,IAAI,sBAAsB,EAAE;AAAA,EACrC;AAAA,EACA,WAAW,MAAM;AACf,QAAI,SAAS,IAAI,EAAG,QAAO,IAAI,sBAAsB,OAAO,IAAI,CAAC;AACjE,WAAO,KAAK,SAAS,IAAI;AAAA,EAC3B;AAAA,EACA,OAAO,KAAK,OAAO,MAAM;AACvB,UAAM,UAAU,KAAK,YAAY,IAAI,CAAC,GAAG,KAAK;AAC9C,QAAI,QAAQ,MAAM;AAChB,cAAQ,aAAa,KAAK,WAAW,IAAI,EAAE;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,EAAC;AAAA,EACZ,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,SAAS,MAAM;AACpB,SAAK,cAAc,QAAQ,MAAM,cAAc;AAAA,EACjD;AAAA,EACA,IAAI,OAAO;AACT,WAAO,KAAK,mBAAmB;AAAA,EACjC;AACF;;;AChJA,IAAM,yBAAN,MAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiB3B,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,SAAK,SAAS,WAAW,QAAQ;AACjC,WAAO,OAAO,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,QAAQ;AACN,SAAK,WAAW;AAChB,SAAK,OAAO,MAAM;AAAA,EACpB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,QAAI,YAAY,KAAK,SAAS,GAAG;AAC/B,WAAK,WAAW;AAChB,aAAO,KAAK,OAAO,OAAO,SAAS,KAAK;AAAA,IAC1C;AACA,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,OAAO,UAAU,KAAK,YAAY,CAAC,KAAK,aAAa,KAAK,kBAAkB;AAAA,EAC1F;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,OAAO,SAAS,KAAK,eAAe,KAAK;AAAA,EACvD;AAAA,EACA,IAAI,aAAa;AACf,WAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,KAAK;AAAA,EAC5C;AAAA,EACA,YAAY,IAAI,OAAO;AACrB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,KAAK,SAAU,QAAO,IAAI,cAAc;AAC5C,UAAM,QAAQ,KAAK,OAAO;AAE1B,QAAI,UAAU,KAAK,OAAO,YAAY,IAAI,KAAK,iBAAiB,KAAK,CAAC;AACtE,QAAI,QAAQ,YAAY,KAAK,WAAW,KAAK,MAAM,OAAO;AACxD,gBAAU,IAAI,cAAc;AAC5B,WAAK,OAAO,QAAQ;AAAA,IACtB;AACA,QAAI,CAAC,QAAQ,YAAY,CAAC,KAAK,cAAc,CAAC,KAAK,QAAQ,CAAC,MAAM,OAAO;AACvE,cAAQ,WAAW,KAAK;AAAA,IAC1B;AACA,YAAQ,OAAO,CAAC,QAAQ,YAAY,CAAC,KAAK;AAC1C,SAAK,WAAW,QAAQ,QAAQ,QAAQ;AACxC,WAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,OAAO,MAAM;AAEvB,WAAO,KAAK,OAAO,OAAO,KAAK,KAAK,iBAAiB,KAAK,GAAG,IAAI;AAAA,EACnE;AAAA,EACA,qBAAqB;AACnB,QAAI,KAAK,YAAY,KAAK,WAAY,QAAO,IAAI,cAAc;AAC/D,SAAK,WAAW;AAChB,WAAO,IAAI,cAAc;AAAA,MACvB,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EACA,eAAe;AACb,WAAO,IAAI,cAAc;AAAA,EAC3B;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,WAAO,KAAK,OAAO,YAAY,SAAS,KAAK;AAAA,EAC/C;AAAA,EACA,WAAW,MAAM;AACf,WAAO,KAAK,OAAO,WAAW,IAAI;AAAA,EACpC;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,WAAO,KAAK,OAAO,aAAa,SAAS,OAAO,KAAK;AAAA,EACvD;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,cAAc,QAAQ;AACxB,kBAAY,UAAU;AAAA,IACxB;AACA,UAAM,SAAS;AACf,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,WAAW,KAAK,IAAI,KAAK,IAAI,WAAW,MAAM,GAAG,MAAM;AAC7D,YAAQ,WAAW;AAAA,MACjB,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACb,eAAO,KAAK,aAAa,WAAW;AAAA,MACtC,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AACb,eAAO,KAAK,aAAa,WAAW;AAAA,MACtC,KAAK,UAAU;AAAA,MACf;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,MAAM;AAAA,IACrB;AACA,WAAO,KAAK,MAAM,MAAM,SAAS,KAAK,EAAE;AAAA,EAC1C;AAAA,EACA,WAAW,OAAO;AAChB,WAAO,KAAK,OAAO,WAAW,KAAK,iBAAiB,KAAK,CAAC,MAAM,CAAC,KAAK,UAAU,KAAK,OAAO,WAAW,KAAK,iBAAiB,KAAK,CAAC;AAAA,EACrI;AAAA,EACA,WAAW;AACT,SAAK,OAAO,SAAS;AAAA,EACvB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,gBAAgB,KAAK;AAAA,MACrB,QAAQ,KAAK,OAAO;AAAA,MACpB,UAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,OAAO,QAAQ,MAAM;AAC1B,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EACA,iBAAiB,OAAO;AACtB,QAAI;AACJ,WAAO;AAAA,MACL,GAAG;AAAA,MACH,mBAAmB,SAAS,SAAS,wBAAwB,MAAM,qBAAqB,OAAO,SAAS,sBAAsB,YAAY,SAAS,OAAO,SAAS,MAAM;AAAA,IAC3K;AAAA,EACF;AAAA,EACA,IAAI,OAAO;AACT,WAAO,IAAI,cAAc;AAAA,EAC3B;AACF;AACA,uBAAuB,sBAAsB;AAAA,EAC3C,KAAK;AAAA,EACL,KAAK;AAAA;AAAA,EAEL,KAAK;AACP;;;ACjLA,IAAM,eAAN,cAA2B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhC,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,OAAO,KAAK;AAClB,QAAI,KAAM,MAAK,WAAW,WAAS,MAAM,OAAO,IAAI,KAAK;AACzD,UAAM,QAAQ,IAAI;AAAA,EACpB;AACF;AACA,MAAM,eAAe;;;ACdrB,IAAM,gBAAN,MAAM,uBAAsB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBjC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAG,eAAc;AAAA,MACjB,GAAG;AAAA,MACH,aAAa,OAAO,OAAO,CAAC,GAAG,uBAAuB,qBAAqB,QAAQ,OAAO,SAAS,KAAK,WAAW;AAAA,IACrH,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,SAAK,cAAc,OAAO,OAAO,CAAC,GAAG,KAAK,aAAa,KAAK,WAAW;AACvE,UAAM,QAAQ,IAAI;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,eAAe;AACb,UAAM,OAAO,KAAK;AAClB,SAAK,UAAU,CAAC;AAChB,SAAK,cAAc;AACnB,SAAK,SAAS,CAAC;AACf,SAAK,gBAAgB,CAAC;AACtB,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,WAAW,CAAC,KAAM;AACvB,QAAI,iBAAiB;AACrB,QAAI,gBAAgB;AACpB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,UAAI,KAAK,QAAQ;AACf,cAAM,IAAI,QAAQ,MAAM,CAAC;AACzB,cAAM,SAAS,OAAO,KAAK,KAAK,MAAM,EAAE,OAAO,CAAAA,WAAS,EAAE,QAAQA,MAAK,MAAM,CAAC;AAE9E,eAAO,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AAEzC,cAAM,QAAQ,OAAO,CAAC;AACtB,YAAI,OAAO;AACT,gBAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA,GAAG;AAAA,UACL,IAAI,cAAc,KAAK,OAAO,KAAK,CAAC;AACpC,gBAAM,YAAY;AAAA,YAChB,MAAM,KAAK;AAAA,YACX,OAAO,KAAK;AAAA,YACZ,iBAAiB,KAAK;AAAA,YACtB,aAAa,KAAK;AAAA,YAClB,WAAW,KAAK;AAAA,YAChB,SAAS,KAAK;AAAA,YACd,GAAG;AAAA,YACH;AAAA,YACA,QAAQ;AAAA,UACV;AACA,gBAAM,cAAc,UAAU,OAAO,IAAI,MAAM;AAAA,YAAY;AAAA;AAAA,UAAoB,IAAI,WAAW,SAAS;AACvG,cAAI,aAAa;AACf,iBAAK,QAAQ,KAAK,WAAW;AAC7B,gBAAI,OAAQ,MAAK,cAAc;AAG/B,gBAAI,CAAC,KAAK,cAAc,KAAK,EAAG,MAAK,cAAc,KAAK,IAAI,CAAC;AAC7D,iBAAK,cAAc,KAAK,EAAE,KAAK,KAAK,QAAQ,SAAS,CAAC;AAAA,UACxD;AACA,eAAK,MAAM,SAAS;AACpB;AAAA,QACF;AAAA,MACF;AACA,UAAI,OAAO,QAAQ,CAAC;AACpB,UAAI,UAAW,QAAQ;AACvB,UAAI,SAAS,eAAc,WAAW;AACpC,aAAK,OAAO,KAAK,KAAK,QAAQ,MAAM;AACpC;AAAA,MACF;AACA,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,yBAAiB,CAAC;AAClB;AAAA,MACF;AACA,UAAI,SAAS,OAAO,SAAS,KAAK;AAChC,wBAAgB,CAAC;AACjB;AAAA,MACF;AACA,UAAI,SAAS,eAAc,aAAa;AACtC,UAAE;AACF,eAAO,QAAQ,CAAC;AAChB,YAAI,CAAC,KAAM;AACX,kBAAU;AAAA,MACZ;AACA,YAAM,MAAM,UAAU,IAAI,uBAAuB;AAAA,QAC/C,YAAY;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,iBAAiB,KAAK;AAAA,QACtB,aAAa,KAAK;AAAA,QAClB,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,QAC3B,QAAQ;AAAA,MACV,CAAC,IAAI,IAAI,uBAAuB;AAAA,QAC9B;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,aAAa;AAAA,MACf,CAAC;AACD,WAAK,QAAQ,KAAK,GAAG;AAAA,IACvB;AAAA,EACF;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,MACL,GAAG,MAAM;AAAA,MACT,SAAS,KAAK,QAAQ,IAAI,OAAK,EAAE,KAAK;AAAA,IACxC;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,QAAI,CAAC,OAAO;AACV,WAAK,MAAM;AACX;AAAA,IACF;AACA,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,SAAK,QAAQ,QAAQ,CAAC,GAAG,OAAO,EAAE,QAAQ,QAAQ,EAAE,CAAC;AACrD,UAAM,QAAQ;AAAA,EAChB;AAAA,EACA,QAAQ;AACN,UAAM,MAAM;AACZ,SAAK,QAAQ,QAAQ,OAAK,EAAE,MAAM,CAAC;AAAA,EACrC;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,cAAc,KAAK,YAAY,aAAa,KAAK,QAAQ,MAAM,OAAK,EAAE,UAAU;AAAA,EAC9F;AAAA,EACA,IAAI,WAAW;AACb,WAAO,KAAK,QAAQ,MAAM,OAAK,EAAE,QAAQ;AAAA,EAC3C;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK,QAAQ,MAAM,OAAK,EAAE,OAAO;AAAA,EAC1C;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,QAAQ,MAAM,OAAK,EAAE,UAAU;AAAA,EAC7C;AAAA,EACA,WAAW;AACT,SAAK,QAAQ,QAAQ,OAAK,EAAE,SAAS,CAAC;AACtC,UAAM,SAAS;AAAA,EACjB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,cAAc,KAAK,YAAY,gBAAgB,KAAK,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,eAAe,EAAE;AAAA,EACvH;AAAA,EACA,IAAI,cAAc,eAAe;AAC/B,QAAI,KAAK,aAAa;AACpB,YAAM,OAAO,KAAK,YAAY,KAAK,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,YAAY,aAAa,MAAM;AAChI,WAAK,YAAY,gBAAgB;AACjC,WAAK,WAAW,IAAI;AACpB,WAAK,SAAS;AAAA,IAChB,MAAO,OAAM,gBAAgB;AAAA,EAC/B;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,cAAc,KAAK,YAAY;AAAA;AAAA,MAE3C,KAAK,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,OAAO,EAAE;AAAA;AAAA,EACpD;AAAA,EACA,IAAI,MAAM,OAAO;AACf,QAAI,KAAK,aAAa;AACpB,YAAM,OAAO,KAAK,YAAY,KAAK,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,YAAY,aAAa,MAAM;AAChI,WAAK,YAAY,QAAQ;AACzB,WAAK,WAAW,IAAI;AACpB,WAAK,SAAS;AAAA,IAChB,MAAO,OAAM,QAAQ;AAAA,EACvB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,cAAc,KAAK,YAAY,aAAa,MAAM;AAAA,EAChE;AAAA,EACA,IAAI,WAAW,OAAO;AACpB,QAAI,KAAK,aAAa;AACpB,YAAM,OAAO,KAAK,YAAY,KAAK,eAAe,KAAK,QAAQ,QAAQ,KAAK,WAAW,CAAC,IAAI,KAAK,YAAY,aAAa,MAAM;AAChI,WAAK,YAAY,aAAa;AAC9B,WAAK,WAAW,IAAI;AACpB,WAAK,SAAS;AAAA,IAChB,MAAO,OAAM,aAAa;AAAA,EAC5B;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,QAAQ,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,cAAc,EAAE;AAAA,EAClE;AAAA,EACA,WAAW,MAAM;AACf,WAAO,MAAM,WAAW,IAAI,EAAE,UAAU,KAAK,mBAAmB,CAAC;AAAA,EACnE;AAAA,EACA,eAAe;AACb,QAAI;AACJ,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,mBAAmB,uBAAuB,KAAK,eAAe,KAAK,aAAa,MAAM,MAAM,OAAO,SAAS,qBAAqB;AACrI,QAAI,mBAAmB,KAAM,QAAO;AAGpC,QAAI,KAAK,QAAQ,eAAe,EAAE,SAAU,GAAE;AAC9C,aAAS,KAAK,iBAAiB,KAAK,KAAK,QAAQ,QAAQ,EAAE,IAAI;AAC7D,YAAM,IAAI,KAAK,QAAQ,EAAE,EAAE,aAAa;AACxC,UAAI,CAAC,EAAE,SAAU;AACjB,cAAQ,UAAU,CAAC;AAAA,IACrB;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,YAAY,KAAK,eAAe,KAAK,aAAa,MAAM;AAC9D,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,CAAC,UAAW,QAAO;AACvB,aAAS,KAAK,UAAU,OAAO,OAAO,QAAQ,KAAK,QAAQ,EAAE,GAAG,EAAE,IAAI;AACpE,UAAI;AACJ,YAAM,eAAe,MAAM,YAAY,IAAI;AAAA,QACzC,GAAG;AAAA,QACH,mBAAmB,wBAAwB,MAAM,qBAAqB,SAAS,wBAAwB,sBAAsB,YAAY,OAAO,SAAS,sBAAsB,EAAE;AAAA,MACnL,CAAC;AACD,cAAQ,UAAU,YAAY;AAC9B,UAAI,aAAa,SAAU;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,YAAY,IAAI,kBAAkB;AACxC,QAAI,YAAY,MAAO,QAAO;AAC9B,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,IAAI,UAAU,WAAW;AACtE,YAAM,aAAa,EAAE,YAAY,UAAU,MAAM;AACjD,iBAAW,OAAO,KAAK,gBAAgB,EAAE;AACzC,iBAAW,OAAO,KAAK,eAAe,EAAE;AACxC,UAAI,sBAAsB,kBAAmB,YAAW,aAAa;AACrE,gBAAU,OAAO,UAAU;AAAA,IAC7B,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,YAAY,MAAO,QAAO;AAC9B,QAAI,QAAQ;AACZ,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,GAAGC,UAASC,WAAU;AACnE,eAAS,EAAE,aAAaD,UAASC,QAAO,KAAK;AAAA,IAC/C,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,YAAY;AAC1B,QAAI;AACJ,aAAS,KAAK,GAAG,KAAK,KAAK,OAAO,QAAQ,EAAE,IAAI;AAC9C,YAAM,OAAO,KAAK,OAAO,EAAE;AAC3B,UAAI,QAAQ,WAAY,cAAa;AAAA,UAAU;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,cAAc;AAC/B,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,QAAQ,gBAAgB,KAAM,QAAO;AAC9C,UAAM,iBAAiB,KAAK,eAAe,KAAK,aAAa,MAAM;AACnE,QAAI,CAAC,eAAgB,QAAO;AAC5B,UAAM,kBAAkB,eAAe;AACvC,UAAM,gBAAgB,gBAAgB,OAAO,eAAe,KAAK,QAAQ;AACzE,SAAK,QAAQ,MAAM,iBAAiB,aAAa,EAAE,QAAQ,OAAK;AAC9D,UAAI,CAAC,EAAE,QAAQ,gBAAgB,MAAM;AACnC,YAAI;AACJ,gBAAQ,UAAU,EAAE,oBAAoB,WAAW,EAAE,YAAY,OAAO,SAAS,SAAS,MAAM,CAAC;AAAA,MACnG;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,eAAe,KAAK;AAClB,QAAI,SAAS;AACb,aAAS,KAAK,GAAG,KAAK,KAAK,QAAQ,QAAQ,EAAE,IAAI;AAC/C,YAAM,QAAQ,KAAK,QAAQ,EAAE;AAC7B,YAAM,gBAAgB,OAAO;AAC7B,gBAAU,MAAM;AAChB,UAAI,OAAO,OAAO,QAAQ;AACxB,eAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ,MAAM;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe,YAAY;AACzB,WAAO,KAAK,QAAQ,MAAM,GAAG,UAAU,EAAE,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,aAAa,QAAQ,CAAC;AAAA,EAC7F;AAAA,EACA,sBAAsB,SAAS,OAAO,IAAI;AACxC,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,gBAAgB,KAAK,eAAe,OAAO;AACjD,QAAI,eAAe;AACjB,YAAM,cAAc,KAAK,eAAe,KAAK;AAE7C,YAAM,cAAc,eAAe,cAAc,UAAU,YAAY;AACvE,YAAM,oBAAoB,cAAc;AACxC,YAAM,kBAAkB,eAAe,cAAc,YAAY,SAAS,KAAK,QAAQ,cAAc,KAAK,EAAE,aAAa;AACzH,SAAG,KAAK,QAAQ,cAAc,KAAK,GAAG,cAAc,OAAO,mBAAmB,eAAe;AAC7F,UAAI,eAAe,CAAC,aAAa;AAE/B,iBAAS,KAAK,cAAc,QAAQ,GAAG,KAAK,YAAY,OAAO,EAAE,IAAI;AACnE,aAAG,KAAK,QAAQ,EAAE,GAAG,IAAI,GAAG,KAAK,QAAQ,EAAE,EAAE,aAAa,MAAM;AAAA,QAClE;AAGA,WAAG,KAAK,QAAQ,YAAY,KAAK,GAAG,YAAY,OAAO,GAAG,YAAY,MAAM;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,gBAAgB,MAAM,OAAO,SAAS,KAAK;AACjD,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,GAAG,UAAU,WAAW;AACrE,oBAAc,UAAU,EAAE,OAAO,UAAU,MAAM,CAAC;AAAA,IACpD,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,cAAc,QAAQ;AACxB,kBAAY,UAAU;AAAA,IACxB;AACA,QAAI,CAAC,KAAK,QAAQ,OAAQ,QAAO;AACjC,UAAM,SAAS,IAAI,cAAc,MAAM,SAAS;AAChD,QAAI,cAAc,UAAU,MAAM;AAIhC,UAAI,OAAO,qBAAqB,EAAG,QAAO,OAAO;AACjD,aAAO,SAAS;AAChB,UAAI,OAAO,oBAAoB,EAAG,QAAO,OAAO;AAChD,aAAO,KAAK,aAAa;AAAA,IAC3B;AAGA,QAAI,cAAc,UAAU,QAAQ,cAAc,UAAU,YAAY;AAEtE,UAAI,cAAc,UAAU,MAAM;AAChC,eAAO,sBAAsB;AAC7B,YAAI,OAAO,MAAM,OAAO,QAAQ,UAAW,QAAO;AAClD,eAAO,SAAS;AAAA,MAClB;AAGA,aAAO,oBAAoB;AAC3B,aAAO,uBAAuB;AAC9B,aAAO,qBAAqB;AAG5B,UAAI,cAAc,UAAU,MAAM;AAChC,eAAO,qBAAqB;AAC5B,eAAO,wBAAwB;AAC/B,YAAI,OAAO,MAAM,OAAO,OAAO,UAAW,QAAO,OAAO;AACxD,eAAO,SAAS;AAChB,YAAI,OAAO,MAAM,OAAO,OAAO,UAAW,QAAO,OAAO;AACxD,eAAO,SAAS;AAAA,MAClB;AACA,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,UAAI,cAAc,UAAU,WAAY,QAAO;AAC/C,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO;AAAA,IACT;AACA,QAAI,cAAc,UAAU,SAAS,cAAc,UAAU,aAAa;AAExE,aAAO,qBAAqB;AAC5B,aAAO,wBAAwB;AAC/B,UAAI,OAAO,sBAAsB,EAAG,QAAO,OAAO;AAClD,UAAI,cAAc,UAAU,YAAa,QAAO,KAAK,aAAa;AAGlE,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO,SAAS;AAChB,UAAI,OAAO,GAAI,QAAO,OAAO;AAC7B,aAAO,KAAK,gBAAgB,WAAW,UAAU,IAAI;AAAA,IACvD;AACA,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,QAAI,QAAQ;AACZ,SAAK,sBAAsB,SAAS,OAAO,CAAC,GAAG,GAAG,UAAU,WAAW;AACrE,eAAS,EAAE,oBAAoB,UAAU,MAAM;AAAA,IACjD,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,YAAY,MAAM;AAChB,WAAO,KAAK,aAAa,IAAI,EAAE,CAAC;AAAA,EAClC;AAAA;AAAA,EAGA,aAAa,MAAM;AACjB,UAAM,UAAU,KAAK,cAAc,IAAI;AACvC,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,WAAO,QAAQ,IAAI,QAAM,KAAK,QAAQ,EAAE,CAAC;AAAA,EAC3C;AAAA,EACA,IAAI,OAAO;AACT,UAAM,UAAU,IAAI,cAAc;AAClC,SAAK,sBAAsB,GAAG,KAAK,aAAa,QAAQ,OAAK,QAAQ,UAAU,EAAE,IAAI,KAAK,CAAC,CAAC;AAC5F,WAAO;AAAA,EACT;AACF;AACA,cAAc,WAAW;AAAA,EACvB,GAAG,OAAO;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AACnB;AACA,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,MAAM,gBAAgB;;;AC/btB,IAAM,cAAN,cAA0B,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtC,IAAI,aAAa;AACf,WAAO,KAAK,YAAY,OAAO,KAAK,IAAI,EAAE;AAAA,EAC5C;AAAA,EACA,YAAY,MAAM;AAChB,UAAM,IAAI;AAAA,EACZ;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM;AAAA,MACJ,KAAK,KAAK,MAAM;AAAA,MAChB,OAAO,KAAK,QAAQ;AAAA,MACpB,YAAY,KAAK,aAAa;AAAA,MAC9B,UAAU,KAAK;AAAA,MACf,GAAG;AAAA,IACL,IAAI;AACJ,SAAK,KAAK;AACV,SAAK,OAAO;AACZ,SAAK,YAAY,KAAK,IAAI,OAAO,EAAE,EAAE,QAAQ,SAAS;AACtD,SAAK,UAAU;AACf,UAAM,UAAU,OAAO,KAAK,IAAI,EAAE,SAAS,KAAK,WAAW,GAAG;AAC9D,UAAM,QAAQ,OAAO,KAAK,EAAE,EAAE,SAAS,KAAK,WAAW,GAAG;AAC1D,QAAI,iBAAiB;AACrB,WAAO,iBAAiB,MAAM,UAAU,MAAM,cAAc,MAAM,QAAQ,cAAc,EAAG,GAAE;AAC7F,gBAAY,OAAO,MAAM,MAAM,GAAG,cAAc,EAAE,QAAQ,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,YAAY,cAAc;AACnH,UAAM,QAAQ,WAAW;AAAA,EAC3B;AAAA,EACA,IAAI,aAAa;AACf,WAAO,MAAM,cAAc,QAAQ,KAAK,KAAK;AAAA,EAC/C;AAAA,EACA,WAAW,KAAK;AACd,QAAI,SAAS;AACb,QAAI,SAAS;AACb,UAAM,CAAC,EAAE,aAAa,GAAG,IAAI,IAAI,MAAM,kBAAkB,KAAK,CAAC;AAC/D,QAAI,KAAK;AACP,eAAS,IAAI,OAAO,YAAY,MAAM,IAAI;AAC1C,eAAS,IAAI,OAAO,YAAY,MAAM,IAAI;AAAA,IAC5C;AACA,aAAS,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,aAAS,OAAO,OAAO,KAAK,WAAW,GAAG;AAC1C,WAAO,CAAC,QAAQ,MAAM;AAAA,EACxB;AAAA,EACA,cAAc,IAAI,OAAO;AACvB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI;AACJ,KAAC,IAAI,OAAO,IAAI,MAAM,cAAc,GAAG,QAAQ,OAAO,EAAE,GAAG,KAAK;AAChE,QAAI,CAAC,GAAI,SAAQ,OAAO,CAAC,KAAK;AAC9B,WAAO,CAAC,IAAI,OAAO;AAAA,EACrB;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,CAAC,KAAK,WAAW,KAAK,MAAM,SAAS,IAAI,KAAK,UAAW,QAAO,MAAM,eAAe,IAAI,KAAK;AAClG,UAAM,UAAU,OAAO,KAAK,IAAI,EAAE,SAAS,KAAK,WAAW,GAAG;AAC9D,UAAM,QAAQ,OAAO,KAAK,EAAE,EAAE,SAAS,KAAK,WAAW,GAAG;AAC1D,UAAM,CAAC,QAAQ,MAAM,IAAI,KAAK,WAAW,KAAK,QAAQ,EAAE;AACxD,QAAI,OAAO,MAAM,IAAI,KAAK,KAAM,QAAO,MAAM,eAAe,QAAQ,KAAK,MAAM,MAAM,GAAG,KAAK;AAC7F,QAAI,OAAO,MAAM,IAAI,KAAK,IAAI;AAC5B,UAAI,CAAC,MAAM,QAAQ,KAAK,YAAY,SAAS,KAAK,MAAM,SAAS,IAAI,KAAK,WAAW;AACnF,eAAO,MAAM,eAAe,QAAQ,KAAK,MAAM,MAAM,GAAG,KAAK,EAAE,UAAU,KAAK,eAAe,IAAI,KAAK,CAAC;AAAA,MACzG;AACA,aAAO,MAAM,eAAe,MAAM,KAAK,MAAM,MAAM,GAAG,KAAK;AAAA,IAC7D;AACA,WAAO,MAAM,eAAe,IAAI,KAAK;AAAA,EACvC;AAAA,EACA,WAAW,OAAO;AAChB,UAAM,MAAM,KAAK;AACjB,UAAM,eAAe,IAAI,OAAO,MAAM;AACtC,QAAI,iBAAiB,MAAM,IAAI,UAAU,KAAK,WAAY,QAAO;AACjE,UAAM,CAAC,QAAQ,MAAM,IAAI,KAAK,WAAW,GAAG;AAC5C,WAAO,KAAK,QAAQ,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM,MAAM,WAAW,KAAK;AAAA,EAC3F;AAAA,EACA,IAAI,OAAO;AACT,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,MAAM,WAAW,KAAK,UAAW,QAAO;AACjD,UAAM,QAAQ,KAAK;AACnB,UAAM,YAAY,KAAK,YAAY,KAAK,MAAM;AAC9C,QAAI,WAAW;AACb,WAAK,MAAM;AACX,eAAS,IAAI,GAAG,IAAI,WAAW,EAAE,GAAG;AAClC,gBAAQ,UAAU,MAAM,eAAe,KAAK,KAAK,CAAC;AAAA,MACpD;AAGA,YAAM,MAAM,EAAE,EAAE,QAAQ,QAAM,KAAK,eAAe,EAAE,CAAC;AAAA,IACvD;AACA,WAAO;AAAA,EACT;AACF;AACA,MAAM,cAAc;;;ACvGpB,IAAM,iBAAiB;AAKvB,IAAM,aAAN,MAAM,oBAAmB,cAAc;AAAA,EACrC,OAAO,sBAAsB,MAAM;AACjC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM,SAAS,IAAI,IAAI,OAAO;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,YAAY,MAAM;AAChB,UAAM,YAAW,sBAAsB;AAAA,MACrC,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IACL,CAAC,CAAC;AAAA,EACJ;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AAAA,MACF,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IACL;AACA,UAAM,gBAAgB,OAAO,OAAO,CAAC,GAAG,YAAW,mBAAmB,CAAC;AAEvE,QAAI,KAAK,IAAK,eAAc,EAAE,OAAO,KAAK,IAAI,YAAY;AAC1D,QAAI,KAAK,IAAK,eAAc,EAAE,KAAK,KAAK,IAAI,YAAY;AACxD,QAAI,KAAK,OAAO,KAAK,OAAO,cAAc,EAAE,SAAS,cAAc,EAAE,IAAI;AACvE,oBAAc,EAAE,OAAO,KAAK,IAAI,SAAS,IAAI;AAC7C,oBAAc,EAAE,KAAK,KAAK,IAAI,SAAS,IAAI;AAC3C,UAAI,cAAc,EAAE,SAAS,cAAc,EAAE,IAAI;AAC/C,sBAAc,EAAE,OAAO,KAAK,IAAI,QAAQ;AACxC,sBAAc,EAAE,KAAK,KAAK,IAAI,QAAQ;AAAA,MACxC;AAAA,IACF;AACA,WAAO,OAAO,eAAe,KAAK,QAAQ,MAAM;AAChD,UAAM,QAAQ;AAAA,MACZ,GAAG;AAAA,MACH,MAAM,SAAS,IAAI,IAAI,OAAO;AAAA,MAC9B,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EACA,WAAW,OAAO;AAChB,UAAM,OAAO,KAAK;AAClB,WAAO,MAAM,WAAW,KAAK,MAAM,CAAC,KAAK,cAAc,KAAK,YAAY,KAAK,KAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,QAAQ,KAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,QAAQ,KAAK;AAAA,EACrL;AAAA;AAAA,EAGA,YAAY,KAAK;AACf,WAAO,KAAK,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,OAAO;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,KAAK,MAAM;AACb,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,aAAa,MAAM,aAAa;AAAA,EAC9C;AAAA,EACA,IAAI,WAAW,OAAO;AACpB,UAAM,aAAa;AAAA,EACrB;AAAA,EACA,WAAW,MAAM;AACf,WAAO,SAAS,QAAQ,MAAM,WAAW,IAAI;AAAA,EAC/C;AAAA,EACA,iBAAiB,MAAM;AACrB,WAAO,MAAM,iBAAiB,YAAW,sBAAsB,IAAI,CAAC;AAAA,EACtE;AACF;AACA,WAAW,qBAAqB,OAAO;AAAA,EACrC,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,EACN;AACF;AACA,WAAW,WAAW;AAAA,EACpB,GAAG,cAAc;AAAA,EACjB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,QAAQ,CAAC,MAAM,WAAW;AACxB,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,MAAM,OAAO,KAAK,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAClD,UAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,UAAM,OAAO,KAAK,YAAY;AAC9B,WAAO,CAAC,KAAK,OAAO,IAAI,EAAE,KAAK,GAAG;AAAA,EACpC;AAAA,EACA,OAAO,CAAC,KAAK,WAAW;AACtB,UAAM,CAAC,KAAK,OAAO,IAAI,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AACpD,WAAO,IAAI,KAAK,MAAM,QAAQ,GAAG,GAAG;AAAA,EACtC;AACF;AACA,MAAM,aAAa;;;ACzInB,IAAM,gBAAN,MAAM,uBAAsB,OAAO;AAAA,EACjC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAG,eAAc;AAAA,MACjB,GAAG;AAAA,IACL,CAAC;AACD,SAAK,cAAc;AAAA,EACrB;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ,IAAI;AAClB,QAAI,UAAU,MAAM;AAClB,WAAK,aAAa;AAElB,WAAK,gBAAgB,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,OAAK;AACjE,cAAM;AAAA,UACJ;AAAA,UACA,GAAG;AAAA,QACL,IAAI,cAAc,CAAC;AACnB,cAAM,SAAS,WAAW;AAAA,UACxB,WAAW,KAAK;AAAA,UAChB,OAAO,KAAK;AAAA,UACZ,aAAa,KAAK;AAAA,UAClB,GAAG;AAAA,QACL,CAAC;AACD,YAAI,OAAQ,MAAK,aAAa;AAC9B,eAAO;AAAA,MACT,CAAC,IAAI,CAAC;AAAA,IAGR;AAAA,EACF;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,UAAU,KAAK,eAAe,IAAI,KAAK;AAC7C,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,YAAY,IAAI,KAAK,iBAAiB,KAAK,CAAC,CAAC;AAAA,IAClF;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,UAAU,OAAO,MAAM;AACpC,QAAI,aAAa,QAAQ;AACvB,iBAAW;AAAA,IACb;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,UAAM,sBAAsB,MAAM,QAAQ,MAAM,oBAAoB,OAAO,MAAM,iBAAiB,SAAS,KAAK;AAChH,UAAM,aAAa,KAAK;AACxB,UAAM,cAAc,MAAM,QAAQ,MAAM,oBAAoB,OAAO,MAAM,iBAAiB,iBAAiB;AAC3G,UAAM,YAAY,WAAW,MAAM,YAAY,MAAM;AACrD,UAAM,WAAW,KAAK;AACtB,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,gBAAgB,YAAY,OAAO,SAAS,SAAS;AAG3D,SAAK,cAAc,KAAK,WAAW,UAAU;AAAA,MAC3C,GAAG;AAAA,IACL,GAAG,IAAI;AAGP,QAAI,KAAK,aAAa;AACpB,UAAI,KAAK,gBAAgB,UAAU;AAEjC,aAAK,YAAY,MAAM;AACvB,YAAI,aAAa;AACf,eAAK,YAAY,OAAO,aAAa;AAAA,YACnC,KAAK;AAAA,UACP,CAAC;AACD,kBAAQ,YAAY,KAAK,YAAY,MAAM,SAAS,oBAAoB;AAAA,QAC1E;AACA,YAAI,WAAW;AACb,kBAAQ,aAAa,KAAK,YAAY,OAAO,WAAW;AAAA,YACtD,KAAK;AAAA,YACL,MAAM;AAAA,UACR,CAAC,EAAE;AAAA,QACL;AAAA,MACF,WAAW,eAAe;AAGxB,aAAK,YAAY,QAAQ;AAAA,MAC3B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB;AACnB,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,mBAAmB,CAAC;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe;AACb,UAAM,UAAU,KAAK,eAAe;AACpC,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,aAAa,CAAC;AAAA,IACnD;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW,MAAM;AACf,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAM,SAAQ,UAAU,KAAK,eAAe,IAAI,CAAC,GAAG,IAAI,CAAC;AAC7D,WAAO,QAAQ,UAAU,KAAK,cAAc,KAAK,YAAY,WAAW,IAAI,IAAI,MAAM,WAAW,IAAI,CAAC;AAAA,EACxG;AAAA,EACA,iBAAiB,OAAO;AACtB,QAAI,uBAAuB;AAC3B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,oBAAoB,wBAAwB,MAAM,qBAAqB,OAAO,SAAS,sBAAsB,oBAAoB,KAAK,iBAAiB,yBAAyB,MAAM,qBAAqB,OAAO,SAAS,uBAAuB,gBAAgB,MAAM;AAAA,IAC1Q;AAAA,EACF;AAAA,EACA,WAAW,UAAU,OAAO,MAAM;AAChC,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,SAAS,UAAU,MAAM,OAAO,IAAI;AAAA,EAClD;AAAA,EACA,WAAW,OAAO;AAChB,WAAO,MAAM,WAAW,KAAK,MAAM,CAAC,KAAK,eAAe,KAAK,YAAY,WAAW,KAAK,iBAAiB,KAAK,CAAC;AAAA,EAClH;AAAA,EACA,UAAU,KAAK,OAAO;AACpB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,CAAC,GAAG,OAAO,IAAI,MAAM,UAAU,KAAK,KAAK;AAC7C,QAAI,KAAK,aAAa;AACpB,UAAI;AACJ,OAAC,GAAG,cAAc,IAAI,MAAM,UAAU,GAAG,KAAK,iBAAiB,KAAK,CAAC;AACrE,gBAAU,QAAQ,UAAU,cAAc;AAAA,IAC5C;AACA,WAAO,CAAC,GAAG,OAAO;AAAA,EACpB;AAAA,EACA,cAAc,KAAK,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,QAAI,CAAC,GAAG,OAAO,IAAI,MAAM,cAAc,KAAK,KAAK;AACjD,QAAI,KAAK,aAAa;AACpB,UAAI;AACJ,OAAC,GAAG,cAAc,IAAI,MAAM,cAAc,GAAG,KAAK,iBAAiB,KAAK,CAAC;AACzE,gBAAU,QAAQ,UAAU,cAAc;AAAA,IAC5C;AACA,WAAO,CAAC,GAAG,OAAO;AAAA,EACpB;AAAA,EACA,QAAQ;AACN,QAAI;AACJ,KAAC,oBAAoB,KAAK,gBAAgB,QAAQ,kBAAkB,MAAM;AAC1E,SAAK,cAAc,QAAQ,OAAK,EAAE,MAAM,CAAC;AAAA,EAC3C;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,aAAa,KAAK,WAAW,QAAQ,KAAK,cAAc,KAAK,YAAY,QAAQ;AAAA,EAC/F;AAAA,EACA,IAAI,MAAM,OAAO;AACf,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,QAAQ;AACxB,WAAK,cAAc,KAAK;AACxB,WAAK,eAAe;AAAA,IACtB,MAAO,OAAM,QAAQ;AAAA,EACvB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,aAAa,KAAK,WAAW,gBAAgB,KAAK,cAAc,KAAK,YAAY,gBAAgB;AAAA,EAC/G;AAAA,EACA,IAAI,cAAc,eAAe;AAC/B,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,gBAAgB;AAChC,WAAK,cAAc,KAAK;AACxB,WAAK,eAAe;AAAA,IACtB,MAAO,OAAM,gBAAgB;AAAA,EAC/B;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,aAAa,KAAK,WAAW,aAAa,KAAK,cAAc,KAAK,YAAY,aAAa;AAAA,EACzG;AAAA,EACA,IAAI,WAAW,YAAY;AACzB,QAAI,KAAK,YAAY;AACnB,WAAK,WAAW,aAAa;AAC7B,WAAK,cAAc,KAAK;AACxB,WAAK,eAAe;AACpB;AAAA,IACF;AACA,QAAI,gBAAgB,OAAO,UAAU;AAGrC,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,aAAa;AAC9B,sBAAgB,KAAK,YAAY;AAAA,IACnC;AACA,SAAK,gBAAgB;AAAA,EACvB;AAAA,EACA,IAAI,eAAe;AACjB,WAAO,KAAK,cAAc,KAAK,YAAY,eAAe;AAAA,EAC5D;AAAA,EACA,IAAI,aAAa;AACf,QAAI;AACJ,WAAO,SAAS,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB,UAAU;AAAA,EACzG;AAAA,EACA,IAAI,WAAW;AACb,QAAI;AACJ,WAAO,SAAS,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB,QAAQ;AAAA,EACvG;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,UAAM,UAAU,IAAI,cAAc;AAClC,QAAI,KAAK,aAAa;AACpB,cAAQ,UAAU,KAAK,YAAY,OAAO,SAAS,KAAK,CAAC,EAExD,UAAU,KAAK,eAAe,CAAC;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA,EACA,IAAI,QAAQ;AACV,QAAI;AACJ,WAAO;AAAA,MACL,GAAG,MAAM;AAAA,MACT,gBAAgB,KAAK;AAAA,MACrB,eAAe,KAAK,cAAc,IAAI,OAAK,EAAE,KAAK;AAAA,MAClD,gBAAgB,KAAK;AAAA,MACrB,cAAc,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB;AAAA,IAC7F;AAAA,EACF;AAAA,EACA,IAAI,MAAM,OAAO;AACf,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,cAAe,MAAK,cAAc,QAAQ,CAAC,GAAG,OAAO,EAAE,QAAQ,cAAc,EAAE,CAAC;AACpF,QAAI,kBAAkB,MAAM;AAC1B,WAAK,cAAc;AACnB,WAAK,YAAY,QAAQ;AAAA,IAC3B;AACA,UAAM,QAAQ;AAAA,EAChB;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,WAAO,KAAK,cAAc,KAAK,YAAY,aAAa,SAAS,OAAO,KAAK,IAAI;AAAA,EACnF;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,WAAO,KAAK,cAAc,KAAK,YAAY,YAAY,SAAS,KAAK,IAAI,MAAM,YAAY,SAAS,KAAK;AAAA,EAC3G;AAAA,EACA,WAAW;AACT,QAAI,KAAK,YAAa,MAAK,YAAY,SAAS;AAChD,UAAM,SAAS;AAAA,EACjB;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,WAAO,KAAK,cAAc,KAAK,YAAY,gBAAgB,WAAW,SAAS,IAAI,MAAM,gBAAgB,WAAW,SAAS;AAAA,EAC/H;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK,cAAc,KAAK,YAAY,YAAY,KAAK;AAAA,EAC9D;AAAA,EACA,IAAI,UAAU,WAAW;AACvB,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,cAAc,KAAK,YAAY,QAAQ,KAAK;AAAA,EAC1D;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,SAAS;AAAA,EAChB;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK,cAAc,KAAK,YAAY,cAAc,KAAK;AAAA,EAChE;AAAA,EACA,IAAI,YAAY,aAAa;AAC3B,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,IAAI,UAAU;AACZ,WAAO,KAAK,cAAc,KAAK,YAAY,UAAU,KAAK;AAAA,EAC5D;AAAA,EACA,IAAI,QAAQ,SAAS;AACnB,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,WAAW,MAAM;AACf,WAAO,MAAM,QAAQ,IAAI,IAAI,KAAK,cAAc,MAAM,CAAC,GAAG,OAAO;AAC/D,UAAI,CAAC,KAAK,EAAE,EAAG;AACf,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,GAAG;AAAA,MACL,IAAI,KAAK,EAAE;AACX,aAAO,eAAe,GAAG,QAAQ,KAAK,EAAE,WAAW,OAAO;AAAA,IAC5D,CAAC,IAAI,MAAM,WAAW,IAAI;AAAA,EAC5B;AAAA,EACA,iBAAiB,OAAO;AACtB,QAAI;AACJ,WAAO,SAAS,qBAAqB,KAAK,gBAAgB,OAAO,SAAS,mBAAmB,iBAAiB,KAAK,CAAC;AAAA,EACtH;AACF;AAKA,cAAc,WAAW;AAAA,EACvB,GAAG,OAAO;AAAA,EACV,UAAU,CAAC,UAAU,QAAQ,OAAO,SAAS;AAC3C,QAAI,CAAC,OAAO,cAAc,OAAQ;AAClC,UAAM,aAAa,OAAO;AAG1B,UAAM,SAAS,OAAO,cAAc,IAAI,CAAC,GAAG,UAAU;AACpD,YAAM,YAAY,OAAO,gBAAgB;AACzC,YAAM,gBAAgB,YAAY,EAAE,aAAa,SAAS,EAAE,gBAAgB,EAAE,aAAa,QAAQ,UAAU,UAAU;AACvH,UAAI,EAAE,kBAAkB,YAAY;AAClC,UAAE,MAAM;AACR,UAAE,OAAO,YAAY;AAAA,UACnB,KAAK;AAAA,QACP,CAAC;AAAA,MACH,WAAW,CAAC,WAAW;AACrB,UAAE,OAAO,aAAa;AAAA,MACxB;AACA,QAAE,OAAO,UAAU,OAAO,iBAAiB,KAAK,CAAC;AACjD,QAAE,WAAW,IAAI;AACjB,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,EAAE,cAAc;AAAA,QACxB,qBAAqB,EAAE,oBAAoB,GAAG,KAAK,IAAI,eAAe,EAAE,gBAAgB,EAAE,aAAa,QAAQ,UAAU,UAAU,CAAC,CAAC;AAAA,MACvI;AAAA,IACF,CAAC;AAGD,WAAO,KAAK,CAAC,IAAI,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,sBAAsB,GAAG,mBAAmB;AAChG,WAAO,OAAO,cAAc,OAAO,CAAC,EAAE,KAAK;AAAA,EAC7C;AACF;AACA,MAAM,gBAAgB;;;ACpUtB,IAAM,aAAN,MAAM,oBAAmB,cAAc;AAAA,EACrC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAG,YAAW;AAAA,MACd,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,OAAO;AACT,YAAM,UAAU,MAAM,IAAI,OAAK,EAAE,MAAM;AACvC,YAAM,iBAAiB,KAAK,IAAI,GAAG,OAAO;AAC1C,YAAM,iBAAiB,KAAK,IAAI,GAAG,OAAO,IAAI;AAC9C,YAAM,OAAO,IAAI,OAAO,cAAc;AACtC,UAAI,eAAgB,OAAM,QAAQ,MAAM,IAAI,OAAO,cAAc,IAAI;AACrE,WAAK,OAAO;AAAA,IACd;AACA,UAAM,QAAQ,KAAK;AAAA,EACrB;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,YAAY,KAAK,IAAI,KAAK,gBAAgB,GAAG,UAAU,WAAW,GAAG,KAAK,MAAM,MAAM;AAC5F,UAAM,UAAU,KAAK,KAAK,OAAO,OAAK,KAAK,WAAW,GAAG,KAAK,gBAAgB,IAAI,SAAS,CAAC;AAC5F,QAAI,QAAQ,QAAQ;AAClB,UAAI,QAAQ,WAAW,GAAG;AACxB,aAAK,sBAAsB,GAAG,KAAK,MAAM,QAAQ,CAAC,GAAG,OAAO;AAC1D,gBAAM,MAAM,QAAQ,CAAC,EAAE,EAAE;AACzB,cAAI,MAAM,KAAK,MAAM,UAAU,QAAQ,EAAE,MAAO;AAChD,YAAE,MAAM;AACR,YAAE,YAAY,KAAK,KAAK;AAAA,QAC1B,CAAC;AAAA,MACH;AACA,YAAM,IAAI,MAAM,eAAe,QAAQ,CAAC,EAAE,KAAK,MAAM,MAAM,GAAG,KAAK;AACnE,UAAI,QAAQ,WAAW,GAAG;AACxB,gBAAQ,CAAC,EAAE,MAAM,KAAK,cAAc,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,SAAO,EAAE,UAAU,MAAM,eAAe,GAAG,CAAC,CAAC;AAAA,MAC7G;AACA,aAAO;AAAA,IACT;AACA,WAAO,IAAI,cAAc;AAAA,MACvB,MAAM,CAAC,KAAK;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,YAAY,SAAS,OAAO;AAC1B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AAEA,WAAO,IAAI,sBAAsB,IAAI,OAAO;AAAA,EAC9C;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,QAAI,YAAY,MAAO,QAAO,IAAI,cAAc;AAChD,UAAM,YAAY,KAAK,IAAI,MAAM,gBAAgB,GAAG,UAAU,WAAW,GAAG,KAAK,MAAM,MAAM;AAC7F,QAAI;AACJ,SAAK,MAAM,SAAS,OAAO,GAAG,EAAE,KAAK;AACnC,YAAM,UAAU,KAAK,KAAK,OAAO,OAAK,KAAK,WAAW,GAAG,KAAK,MAAM,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC;AACrG,UAAI,QAAQ,SAAS,EAAG;AAAA,IAC1B;AACA,UAAM,UAAU,MAAM,OAAO,KAAK,KAAK;AACvC,YAAQ,aAAa,MAAM;AAC3B,WAAO;AAAA,EACT;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,EAC1C;AACF;AAEA,WAAW,WAAW;AAAA,EACpB,GAAG,cAAc;AAAA,EACjB,YAAY,CAAC,MAAM,MAAM,cAAc,KAAK,QAAQ,MAAM,SAAS,MAAM;AAC3E;AACA,MAAM,aAAa;;;AC9FnB,IAAM,iBAAN,cAA6B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWlC,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ;AAAA,MACZ,GAAG;AAAA,MACH,UAAU,KAAK;AAAA,IACjB,CAAC;AAAA,EACH;AACF;AACA,MAAM,iBAAiB;;;ACtBvB,IAAI;AAEJ,IAAM,eAAN,MAAMC,uBAAqB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BhC,YAAY,MAAM;AAChB,UAAM;AAAA,MACJ,GAAGA,eAAa;AAAA,MAChB,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,UAAM,QAAQ,IAAI;AAClB,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,iBAAiB;AACf,UAAM,QAAQ,OAAO,KAAK,gBAAgB,aAAa;AACvD,UAAM,MAAM;AACZ,UAAM,OAAO,KAAK,QAAQ,MAAM,aAAa,KAAK,KAAK,IAAI,WAAW,KAAK,QAAQ,QAAQ,MAAM;AACjG,SAAK,gBAAgB,IAAI,OAAO,QAAQ,MAAM,GAAG;AACjD,SAAK,oBAAoB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,EAAE,KAAK,EAAE,IAAI,KAAK,GAAG;AAC/F,SAAK,4BAA4B,IAAI,OAAO,aAAa,KAAK,kBAAkB,GAAG,GAAG;AAAA,EACxF;AAAA,EACA,2BAA2B,OAAO;AAChC,WAAO,MAAM,QAAQ,KAAK,2BAA2B,EAAE;AAAA,EACzD;AAAA,EACA,2BAA2B,OAAO;AAEhC,UAAM,QAAQ,MAAM,MAAM,KAAK,KAAK;AACpC,UAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,yBAAyB,KAAK,kBAAkB;AAC5E,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,cAAc,IAAI,OAAO;AACvB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,cAAc,KAAK,2BAA2B,KAAK,SAAS,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAS5G,MAAM,SAAS,MAAM,OAAO,CAAC,MAAM,SAAS,CAAC,MAAM,OAAO,GAAG,QAAQ,KAAK,mBAAmB,KAAK,KAAK,IAAI,EAAE,GAAG,KAAK;AACrH,QAAI,MAAM,CAAC,OAAQ,SAAQ,OAAO;AAClC,QAAI,UAAU,CAAC,KAAK,iBAAiB,CAAC,KAAK,SAAS,WAAW,IAAK,SAAQ,UAAU,KAAK,YAAY,GAAG,CAAC;AAC3G,WAAO,CAAC,QAAQ,OAAO;AAAA,EACzB;AAAA,EACA,iBAAiB,IAAI,oBAAoB;AACvC,QAAI,uBAAuB,QAAQ;AACjC,2BAAqB;AAAA,IACvB;AACA,QAAI,QAAQ;AACZ,aAAS,MAAM,GAAG,MAAM,IAAI,EAAE,KAAK;AACjC,UAAI,KAAK,OAAO,QAAQ,KAAK,oBAAoB,GAAG,MAAM,KAAK;AAC7D,UAAE;AACF,YAAI,mBAAoB,OAAM,KAAK,mBAAmB;AAAA,MACxD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,0BAA0B,OAAO;AAC/B,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK;AAAA,IACf;AACA,WAAO,KAAK,iBAAiB,KAAK,2BAA2B,KAAK,EAAE,QAAQ,IAAI;AAAA,EAClF;AAAA,EACA,aAAa,SAAS,OAAO,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,KAAC,SAAS,KAAK,IAAI,KAAK,2BAA2B,SAAS,KAAK;AACjE,WAAO,KAAK,2BAA2B,MAAM,aAAa,SAAS,OAAO,KAAK,CAAC;AAAA,EAClF;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,sBAAsB,MAAM,QAAQ,MAAM,mBAAmB,MAAM,iBAAiB,SAAS,KAAK;AACxG,UAAM,gCAAgC,KAAK,0BAA0B,mBAAmB;AACxF,SAAK,SAAS,KAAK,2BAA2B,KAAK,KAAK;AACxD,UAAM,WAAW,KAAK;AACtB,SAAK,UAAU;AACf,UAAM,MAAM,KAAK;AACjB,QAAI,WAAW,CAAC,MAAM,GAAG;AACzB,QAAI,OAAO;AACX,QAAI,UAAU;AACZ,UAAI;AACJ,UAAI,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,SAAS,KAAK,IAAK,YAAW,KAAK;AAChF,UAAI,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,SAAS,KAAK,IAAK,YAAW,KAAK;AAChF,UAAI,YAAY,MAAM;AACpB,YAAI,KAAK,SAAS;AAChB,eAAK,SAAS,KAAK,OAAO,UAAU,IAAI,EAAE,QAAQA,eAAa,gBAAgB,KAAK,KAAK;AACzF,mBAAS,OAAO,aAAa,KAAK,UAAU,CAAC,MAAM;AAAA,QACrD,OAAO;AACL,qBAAW;AAAA,QACb;AAAA,MACF;AACA,mBAAa,WAAW,QAAQ,KAAK,OAAO,MAAM,KAAK,aAAa,CAAC;AAAA,IACvE;AACA,QAAI;AACJ,QAAI,CAAC,UAAU;AACb,WAAK,SAAS;AACd,sBAAgB,IAAI,cAAc;AAAA,IACpC,OAAO;AACL,sBAAgB,IAAI,cAAc;AAAA,QAChC,UAAU,KAAK,OAAO,MAAM,SAAS,MAAM;AAAA,QAC3C,aAAa,OAAO,KAAK;AAAA,QACzB;AAAA,MACF,CAAC;AAAA,IACH;AACA,SAAK,SAAS,KAAK,2BAA2B,KAAK,MAAM;AACzD,UAAM,kBAAkB,MAAM,QAAQ,MAAM,mBAAmB,MAAM,iBAAiB,SAAS,KAAK;AACpG,UAAM,4BAA4B,KAAK,0BAA0B,eAAe;AAChF,kBAAc,cAAc,4BAA4B,iCAAiC,KAAK,mBAAmB;AACjH,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,KAAK;AACxB,QAAI,KAAK,oBAAoB;AAC3B,YAAM,aAAa,MAAM,KAAK,mBAAmB,SAAS;AAC1D,YAAM,eAAe,KAAK,MAAM,QAAQ,KAAK,oBAAoB,UAAU;AAC3E,UAAI,gBAAgB,IAAK,QAAO;AAAA,IAClC;AACA,WAAO;AAAA,EACT;AAAA,EACA,2BAA2B,MAAM,IAAI;AACnC,UAAM,yBAAyB,KAAK,qBAAqB,IAAI;AAC7D,QAAI,0BAA0B,EAAG,QAAO;AACxC,UAAM,uBAAuB,KAAK,qBAAqB,EAAE;AACzD,QAAI,wBAAwB,EAAG,MAAK,uBAAuB,KAAK,mBAAmB;AACnF,WAAO,CAAC,MAAM,EAAE;AAAA,EAClB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,KAAC,SAAS,KAAK,IAAI,KAAK,2BAA2B,SAAS,KAAK;AACjE,UAAM,iBAAiB,KAAK,MAAM,MAAM,GAAG,OAAO;AAClD,UAAM,gBAAgB,KAAK,MAAM,MAAM,KAAK;AAC5C,UAAM,gCAAgC,KAAK,iBAAiB,eAAe,MAAM;AACjF,SAAK,SAAS,KAAK,2BAA2B,KAAK,2BAA2B,iBAAiB,aAAa,CAAC;AAC7G,UAAM,4BAA4B,KAAK,0BAA0B,cAAc;AAC/E,WAAO,IAAI,cAAc;AAAA,MACvB,YAAY,4BAA4B,iCAAiC,KAAK,mBAAmB;AAAA,IACnG,CAAC;AAAA,EACH;AAAA,EACA,gBAAgB,WAAW,WAAW;AACpC,QAAI,CAAC,KAAK,mBAAoB,QAAO;AACrC,YAAQ,WAAW;AAAA,MACjB,KAAK,UAAU;AAAA,MACf,KAAK,UAAU;AAAA,MACf,KAAK,UAAU,YACb;AACE,cAAM,qBAAqB,KAAK,qBAAqB,YAAY,CAAC;AAClE,YAAI,sBAAsB,GAAG;AAC3B,gBAAM,wBAAwB,qBAAqB,KAAK,mBAAmB;AAC3E,cAAI,YAAY,yBAAyB,KAAK,MAAM,UAAU,yBAAyB,cAAc,UAAU,YAAY;AACzH,mBAAO;AAAA,UACT;AAAA,QACF;AACA;AAAA,MACF;AAAA,MACF,KAAK,UAAU;AAAA,MACf,KAAK,UAAU,aACb;AACE,cAAM,sBAAsB,KAAK,qBAAqB,SAAS;AAC/D,YAAI,uBAAuB,GAAG;AAC5B,iBAAO,sBAAsB,KAAK,mBAAmB;AAAA,QACvD;AAAA,MACF;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW;AACT,QAAI,KAAK,OAAO;AACd,YAAM,SAAS,KAAK;AACpB,UAAI,WAAW;AAGf,UAAI,KAAK,OAAO,KAAM,YAAW,KAAK,IAAI,UAAU,KAAK,GAAG;AAC5D,UAAI,KAAK,OAAO,KAAM,YAAW,KAAK,IAAI,UAAU,KAAK,GAAG;AAC5D,UAAI,aAAa,OAAQ,MAAK,gBAAgB,KAAK,OAAO,UAAU,IAAI;AACxE,UAAI,YAAY,KAAK;AACrB,UAAI,KAAK,eAAgB,aAAY,KAAK,gBAAgB,SAAS;AACnE,UAAI,KAAK,sBAAsB,KAAK,QAAQ,EAAG,aAAY,KAAK,oBAAoB,SAAS;AAC7F,WAAK,SAAS;AAAA,IAChB;AACA,UAAM,SAAS;AAAA,EACjB;AAAA,EACA,gBAAgB,OAAO;AACrB,UAAM,QAAQ,KAAK,2BAA2B,KAAK,EAAE,MAAM,KAAK,KAAK;AAGrE,UAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,mBAAmB,CAAC,OAAO,MAAM,OAAO,QAAQ,OAAO,GAAG;AAEtF,QAAI,MAAM,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,EAAG,OAAM,CAAC,IAAI,MAAM,CAAC,IAAI;AACjE,QAAI,MAAM,SAAS,GAAG;AACpB,YAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,OAAO,EAAE;AACrC,UAAI,CAAC,MAAM,CAAC,EAAE,OAAQ,OAAM,SAAS;AAAA,IACvC;AACA,WAAO,KAAK,2BAA2B,MAAM,KAAK,KAAK,KAAK,CAAC;AAAA,EAC/D;AAAA,EACA,oBAAoB,OAAO;AACzB,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,QAAQ,MAAM,MAAM,KAAK,KAAK;AACpC,QAAI,MAAM,SAAS,EAAG,OAAM,KAAK,EAAE;AACnC,UAAM,CAAC,IAAI,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,GAAG;AAC1C,WAAO,MAAM,KAAK,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,cAAc,IAAI,OAAO,WAAW;AAClC,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,iBAAiB,KAAK,UAAU,KAAK,OAAO,KAAK,uBAAuB,OAAO,KAAK,SAAS,OAAOA,eAAa,kBAAkB,KAAK,WAAW,SAAS,EAAE;AACpK,WAAO,MAAM,cAAc,IAAI,OAAO,SAAS,KAAK,CAAC;AAAA,EACvD;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,2BAA2B,KAAK,gBAAgB,KAAK,KAAK,CAAC,EAAE,QAAQ,KAAK,OAAOA,eAAa,cAAc;AAAA,EAC1H;AAAA,EACA,IAAI,cAAc,eAAe;AAC/B,UAAM,gBAAgB;AAAA,EACxB;AAAA,EACA,IAAI,aAAa;AACf,WAAO,KAAK,MAAM,KAAK,eAAe,IAAI;AAAA,EAC5C;AAAA,EACA,IAAI,WAAW,GAAG;AAChB,SAAK,gBAAgB,KAAK,OAAO,GAAG,IAAI,EAAE,QAAQA,eAAa,gBAAgB,KAAK,KAAK;AAAA,EAC3F;AAAA;AAAA,EAGA,IAAI,SAAS;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,OAAO,QAAQ;AACjB,SAAK,aAAa;AAAA,EACpB;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM;AAAA,EAC5E;AAAA,EACA,IAAI,gBAAgB;AAClB,WAAO,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM;AAAA,EAC5E;AAAA,EACA,iBAAiB,OAAO;AAGtB,YAAQ,MAAM,iBAAiB,KAAK,KAAKA,eAAa,aAAa,SAAS,KAAK,KAAKA,eAAa,aAAa,SAAS,KAAK,UAAU,MAAM,EAAE,UAAU,KAAK,KAAK,UAAU;AAAA,EAChL;AACF;AACA,gBAAgB;AAChB,aAAa,iBAAiB;AAC9B,aAAa,eAAe,CAAC,GAAG,OAAO,cAAc,CAAC;AACtD,aAAa,WAAW;AAAA,EACtB,GAAG,OAAO;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,oBAAoB;AAAA,EACpB,YAAY,CAAC,cAAc,cAAc;AAAA,EACzC,KAAK,OAAO;AAAA,EACZ,KAAK,OAAO;AAAA,EACZ,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ,OAAK,EAAE,eAAe,SAAS;AAAA,IACrC,aAAa;AAAA,IACb,uBAAuB;AAAA,EACzB,CAAC;AACH;AACA,MAAM,eAAe;;;AClTrB,IAAM,YAAY;AAAA,EAChB,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AACT;AAEA,SAAS,WAAW,KAAK,MAAM,IAAI;AACjC,MAAI,SAAS,QAAQ;AACnB,WAAO,UAAU;AAAA,EACnB;AACA,MAAI,OAAO,QAAQ;AACjB,SAAK,UAAU;AAAA,EACjB;AACA,QAAM,SAAS,WAAW,GAAG;AAC7B,SAAO,WAAS,OAAO,YAAY,OAAK;AACtC,MAAE,IAAI,IAAI;AACV,WAAO,EAAE,EAAE;AAAA,EACb,CAAC;AACH;AAGA,SAAS,KAAK,OAAO,MAAM,MAAM,IAAI;AACnC,SAAO,WAAW,MAAM,MAAM,EAAE,EAAE,KAAK;AACzC;AACA,MAAM,YAAY;AAClB,MAAM,aAAa;AACnB,MAAM,OAAO;;;ACjBb,IAAM,cAAN,cAA0B,cAAc;AAAA,EACtC,IAAI,aAAa;AACf,QAAI;AACJ,YAAQ,OAAO,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,WAAW,IAAI,KAAK,WAAW,OAAO,OAAO;AAAA,EAC5H;AAAA,EACA,IAAI,WAAW;AACb,QAAI;AACJ,YAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,OAAO,QAAQ;AAAA,EAC/F;AAAA,EACA,YAAY,MAAM;AAChB,UAAM,IAAI;AAAA,EACZ;AAAA,EACA,cAAc,MAAM;AAClB,UAAM,cAAc,IAAI;AAAA,EAC1B;AAAA,EACA,QAAQ,MAAM;AACZ,QAAI,OAAO,OAAO;AAClB,UAAM;AAAA,MACJ;AAAA,MACA,GAAG;AAAA,IACL,IAAI,cAAc,IAAI;AACtB,SAAK,aAAa,OAAO,OAAO,CAAC,GAAG,KAAK,YAAY,SAAS;AAC9D,UAAM,QAAQ,WAAW,KAAK,UAAU;AACxC,SAAK,UAAU,SAAS,QAAQ,UAAU,OAAO,SAAS,MAAM,WAAW,OAAO,QAAQ,KAAK,WAAW,OAAO,QAAQ;AAEzH,UAAM,QAAQ;AAAA,MACZ,MAAM,IAAI,OAAO,KAAK,IAAI,KAAK,aAAa,cAAc,gBAAgB,KAAK,YAAY,OAAO,SAAS,cAAc,WAAW,GAAG,KAAK,UAAU,CAAC;AAAA,MACvJ,QAAQ;AAAA,QACN,GAAG;AAAA,MACL;AAAA,MACA,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,iBAAiB,MAAM;AAAA,MACvB,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EACA,eAAe,IAAI;AACjB,QAAI,KAAK,KAAK,QAAQ,OAAQ,QAAO,KAAK,QAAQ,EAAE;AACpD,QAAI,KAAK,aAAa,YAAY,KAAK,QAAQ,SAAS,KAAK,UAAU;AACrE,WAAK,QAAQ,KAAK,WAAW,KAAK,UAAU,CAAC;AAC7C,WAAK,QAAQ;AACb,aAAO,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA,EACA,eAAe,IAAI,OAAO;AACxB,QAAI,UAAU,QAAQ;AACpB,cAAQ,CAAC;AAAA,IACX;AACA,UAAM,UAAU,IAAI,cAAc;AAClC;AAAA,UAAS,MAAM,yBAAyB,uBAAuB,KAAK,eAAe,KAAK,aAAa,MAAM,MAAM,OAAO,SAAS,qBAAqB,UAAU,OAAO,wBAAwB,KAAK,IAAI,KAAK,QAAQ,SAAS,GAAG,CAAC,GAAG,OAAO;AAAA;AAAA;AAAA,MAG5O,SAAS,mBAAmB,KAAK,QAAQ,EAAE,MAAM,OAAO,mBAAmB,YAAY,CAAC,aAAa,KAAK,eAAe,EAAE;AAAA,MAAG,EAAE;AAAA,MAAI;AAClI,UAAI,uBAAuB,sBAAsB,kBAAkB;AACnE,YAAM,eAAe,MAAM,YAAY,IAAI;AAAA,QACzC,GAAG;AAAA,QACH,mBAAmB,wBAAwB,MAAM,qBAAqB,SAAS,wBAAwB,sBAAsB,YAAY,OAAO,SAAS,sBAAsB,EAAE;AAAA,MACnL,CAAC;AACD,UAAI,aAAa,QAAQ,WAAW;AAElC,aAAK,QAAQ,IAAI;AACjB,aAAK,OAAO,KAAK,KAAK,MAAM,CAAC;AAC7B;AAAA,MACF;AACA,cAAQ,UAAU,YAAY;AAC9B,UAAI,aAAa,SAAU;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AAAA,EACA,eAAe,SAAS,OAAO;AAC7B,QAAI,uBAAuB;AAC3B,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,UAAM,kBAAkB,KAAK,MAAM,wBAAwB,KAAK,eAAe,OAAO,MAAM,OAAO,SAAS,sBAAsB,UAAU,GAAG,KAAK,YAAY,CAAC;AACjK,QAAI;AACJ,QAAI,SAAS,KAAM,mBAAkB,wBAAwB,KAAK,eAAe,KAAK,MAAM,OAAO,SAAS,sBAAsB;AAClI,QAAI,kBAAkB,KAAM,kBAAiB,KAAK,QAAQ,SAAS;AACnE,QAAI,cAAc;AAClB,aAAS,aAAa,gBAAgB,mBAAmB,YAAY,EAAE,YAAY,EAAE,aAAa;AAChG,UAAI,KAAK,QAAQ,UAAU,EAAE,cAAe;AAAA,IAC9C;AACA,QAAI,aAAa;AACf,WAAK,QAAQ,OAAO,iBAAiB,cAAc,GAAG,WAAW;AACjE,WAAK,OAAO,KAAK,KAAK,MAAM,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA,QAAQ;AACN,UAAM,MAAM;AACZ,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,OAAO,SAAS,OAAO;AACrB,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU,QAAQ;AACpB,cAAQ,KAAK,aAAa;AAAA,IAC5B;AACA,UAAM,gBAAgB,MAAM,OAAO,SAAS,KAAK;AACjD,SAAK,eAAe,SAAS,KAAK;AAClC,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB,SAAS,OAAO;AAClC,QAAI,YAAY,QAAQ;AACtB,gBAAU;AAAA,IACZ;AACA,QAAI,SAAS,QAAQ,KAAK,aAAa,SAAU,QAAO;AACxD,WAAO,MAAM,oBAAoB,SAAS,KAAK;AAAA,EACjD;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,MAAM;AAAA,EACf;AAAA,EACA,IAAI,MAAM,OAAO;AACf,SAAK,QAAQ,SAAS,MAAM,QAAQ;AACpC,SAAK,OAAO,KAAK,KAAK,MAAM,GAAG,KAAK,QAAQ,MAAM;AAClD,UAAM,QAAQ;AAAA,EAChB;AACF;AACA,MAAM,cAAc;;;AC1GpB,IAAI;AACF,aAAW,QAAQ;AACrB,QAAQ;AAAC;;;AC5BT,IAAO,8BAAQ;AAAA,EACb,UAAW;AACT,SAAK,cAAc,KAAK,GAAG,cAAc,qBAAqB;AAC9D,SAAK,cAAc,KAAK,GAAG,cAAc,qBAAqB;AAE9D,SAAK,eAAe;AAAA,EACtB;AAAA,EACA,iBAAkB;AAChB,UAAM,cAAc,KAAK,GAAG,QAAQ;AAEpC,QAAI,CAAC,aAAa;AAChB,cAAQ,MAAM,uEAAuE;AACrF;AAAA,IACF;AAEA,SAAK,cAAc;AAAA,MACjB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,KAAK;AAAA,UACH,MAAM;AAAA,UACN,oBAAoB,KAAK,GAAG,QAAQ;AAAA,UACpC,OAAO,KAAK,GAAG,QAAQ;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,OAAO,MAAM,KAAK,aAAa,KAAK,WAAW;AACpD,SAAK,KAAK,gBAAgB,KAAK,SAAS,KAAK,YAAY,KAAK;AAC9D,SAAK,KAAK,GAAG,UAAU,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAAA,EACzD;AAAA,EACA,UAAW;AACT,SAAK,iBAAiB,KAAK,IAAI;AAAA,EACjC;AAAA,EACA,mBAAoB;AAClB,SAAK,YAAY,QAAQ,KAAK,SAAS,KAAK,KAAK,KAAK;AACtD,SAAK,YAAY,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,EACtE;AAAA,EACA,SAAU,OAAO;AACf,WAAO,MACJ,QAAQ,KAAK,GAAG,QAAQ,QAAQ,IAAI,EAAE,EACtC,KAAK,EACL,QAAQ,IAAI,OAAO,KAAK,KAAK,GAAG,QAAQ,kBAAkB,IAAI,GAAG,GAAG,EAAE;AAAA,EAC3E;AAAA,EACA,YAAa;AACX,SAAK,KAAK,QAAQ;AAAA,EACpB;AACF;", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } diff --git a/priv/static/js/backpex.esm.js b/priv/static/js/backpex.esm.js index 5ef7f6980..244b331cf 100644 --- a/priv/static/js/backpex.esm.js +++ b/priv/static/js/backpex.esm.js @@ -3471,7 +3471,6 @@ var masked_number_input_default = { }, initializeMask() { const maskPattern = this.el.dataset.maskPattern; - console.log("Mask pattern:", maskPattern); if (!maskPattern) { console.error("You must provide a mask pattern in the data-masked-pattern attribute."); return; diff --git a/priv/static/js/backpex.esm.js.map b/priv/static/js/backpex.esm.js.map index a0b8f66c8..689f20543 100644 --- a/priv/static/js/backpex.esm.js.map +++ b/priv/static/js/backpex.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_number_input.js"], - "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n console.log('Mask pattern:', maskPattern)\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], - "mappings": "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", + "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } From 90f039dba330f7ee6dabe135de66ac18acd0b0e3 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:51:27 +0200 Subject: [PATCH 11/24] Remove binding --- assets/js/hooks/_masked_number_input.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/hooks/_masked_number_input.js b/assets/js/hooks/_masked_number_input.js index e38069dc4..e516573e3 100644 --- a/assets/js/hooks/_masked_number_input.js +++ b/assets/js/hooks/_masked_number_input.js @@ -32,7 +32,7 @@ export default { this.mask.on('accept', this.handleMaskChange.bind(this)) }, updated () { - this.handleMaskChange.bind(this) + this.handleMaskChange() }, handleMaskChange () { this.hiddenInput.value = this.rawValue(this.mask.value) From 5b80804a799013fbfe1c111969c5ece96b925d60 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 8 Aug 2025 14:52:36 +0200 Subject: [PATCH 12/24] Update default for `unit_position` --- lib/backpex/fields/currency.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/backpex/fields/currency.ex b/lib/backpex/fields/currency.ex index 69aa16852..933688ff1 100644 --- a/lib/backpex/fields/currency.ex +++ b/lib/backpex/fields/currency.ex @@ -16,7 +16,7 @@ defmodule Backpex.Fields.Currency do unit_position: [ doc: "Position of the unit relative to the value, either `:before` or `:after`.", type: {:in, [:before, :after]}, - default: :before + default: :after ], radix: [ doc: From 4a56ecf756fe149bf73d39a5d824ac3c7e921ade Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 15 Aug 2025 14:53:43 +0200 Subject: [PATCH 13/24] Refactor number input to currency input --- ...ked_number_input.js => _currency_input.js} | 7 +++---- assets/js/hooks/index.js | 2 +- lib/backpex/fields/currency.ex | 10 +++------ lib/backpex/html/form.ex | 21 ++++++++++++------- priv/static/js/backpex.cjs.js | 15 +++++++------ priv/static/js/backpex.cjs.js.map | 6 +++--- priv/static/js/backpex.esm.js | 15 +++++++------ priv/static/js/backpex.esm.js.map | 6 +++--- 8 files changed, 41 insertions(+), 41 deletions(-) rename assets/js/hooks/{_masked_number_input.js => _currency_input.js} (94%) diff --git a/assets/js/hooks/_masked_number_input.js b/assets/js/hooks/_currency_input.js similarity index 94% rename from assets/js/hooks/_masked_number_input.js rename to assets/js/hooks/_currency_input.js index e516573e3..1f7a67bb3 100644 --- a/assets/js/hooks/_masked_number_input.js +++ b/assets/js/hooks/_currency_input.js @@ -36,15 +36,14 @@ export default { }, handleMaskChange () { this.hiddenInput.value = this.rawValue(this.mask.value) - this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true })) + }, + destroyed () { + this.mask.destroy() }, rawValue (value) { return value .replace(this.el.dataset.unit || '', '') .trim() .replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, 'g'), '') - }, - destroyed () { - this.mask.destroy() } } diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index d54020988..bd98dbe14 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -4,4 +4,4 @@ export { default as BackpexSidebarSections } from './_sidebar_sections' export { default as BackpexStickyActions } from './_sticky_actions' export { default as BackpexThemeSelector } from './_theme_selector' export { default as BackpexTooltip } from './_tooltip' -export { default as BackpexMaskedNumberInput } from './_masked_number_input' +export { default as BackpexCurrencyInput } from './_currency_input' diff --git a/lib/backpex/fields/currency.ex b/lib/backpex/fields/currency.ex index 933688ff1..d2a1c375f 100644 --- a/lib/backpex/fields/currency.ex +++ b/lib/backpex/fields/currency.ex @@ -84,15 +84,13 @@ defmodule Backpex.Fields.Currency do @impl Backpex.Field def render_form(assigns) do - assigns = assign(assigns, :mask_pattern, build_mask_pattern(assigns.field_options)) - ~H"""
<:label align={Backpex.Field.align_label(@field_options, assigns)}> -
@@ -115,7 +114,4 @@ defmodule Backpex.Fields.Currency do ilike(fragment("CAST(? AS TEXT)", field(schema_name, ^field_name)), ^search_string) ) end - - defp build_mask_pattern(%{unit_position: :before} = field_option), do: "#{field_option.unit} num" - defp build_mask_pattern(%{unit_position: :after} = field_option), do: "num #{field_option.unit}" end diff --git a/lib/backpex/html/form.ex b/lib/backpex/html/form.ex index 989a5458d..c50918072 100644 --- a/lib/backpex/html/form.ex +++ b/lib/backpex/html/form.ex @@ -172,8 +172,8 @@ defmodule Backpex.HTML.Form do ## Examples - <.masked_number_input field={@form[:amount]} unit="€" /> - <.masked_number_input id="amount-input" name="amount" value="20" unit="€" readonly /> + <.currency_input field={@form[:amount]} unit="€" unit_position={:after} /> + <.currency_input id="amount-input" name="amount" value="20" unit="$" unit_position={:before} readonly /> """ attr :id, :any, default: nil attr :name, :any @@ -197,14 +197,15 @@ defmodule Backpex.HTML.Form do attr :translate_error_fun, :any, default: &Function.identity/1, doc: "a custom function to map form errors" attr :hide_errors, :boolean, default: false, doc: "if errors should be hidden" + attr :unit, :string, required: true + attr :unit_position, :atom, required: true, values: ~w(before after)a attr :radix, :string, default: "." attr :thousands_separator, :string, default: "," - attr :mask_pattern, :string, default: "num" attr :rest, :global, include: ~w(accept autocomplete capture cols disabled form list max maxlength min minlength multiple pattern placeholder readonly required rows size step) - def masked_number_input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do + def currency_input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do errors = if Phoenix.Component.used_input?(field), do: field.errors, else: [] assigns @@ -212,18 +213,21 @@ defmodule Backpex.HTML.Form do |> assign(:errors, translate_form_errors(errors, assigns.translate_error_fun)) |> assign_new(:name, fn -> field.name end) |> assign_new(:value, fn -> field.value end) - |> masked_number_input() + |> currency_input() end - def masked_number_input(assigns) do + def currency_input(assigns) do + assigns = assign(assigns, :mask_pattern, build_mask_pattern(assigns.unit_position, assigns.unit)) + ~H"""
{@label}
<%!-- As the input ignores updates, we need to wrap it in a span to apply the styles correctly --%> @@ -241,6 +245,9 @@ defmodule Backpex.HTML.Form do """ end + defp build_mask_pattern(:before = _unit_position, unit), do: "#{unit} num" + defp build_mask_pattern(:after = _unit_position, unit), do: "num #{unit}" + @doc """ Generates a generic error message. """ diff --git a/priv/static/js/backpex.cjs.js b/priv/static/js/backpex.cjs.js index 9d1300ef8..0acd21c46 100644 --- a/priv/static/js/backpex.cjs.js +++ b/priv/static/js/backpex.cjs.js @@ -27,8 +27,8 @@ module.exports = __toCommonJS(backpex_exports); var hooks_exports = {}; __export(hooks_exports, { BackpexCancelEntry: () => cancel_entry_default, + BackpexCurrencyInput: () => currency_input_default, BackpexDragHover: () => drag_hover_default, - BackpexMaskedNumberInput: () => masked_number_input_default, BackpexSidebarSections: () => sidebar_sections_default, BackpexStickyActions: () => sticky_actions_default, BackpexThemeSelector: () => theme_selector_default, @@ -3481,8 +3481,8 @@ try { } catch { } -// js/hooks/_masked_number_input.js -var masked_number_input_default = { +// js/hooks/_currency_input.js +var currency_input_default = { mounted() { this.maskedInput = this.el.querySelector("[data-masked-input]"); this.hiddenInput = this.el.querySelector("[data-hidden-input]"); @@ -3510,17 +3510,16 @@ var masked_number_input_default = { this.mask.on("accept", this.handleMaskChange.bind(this)); }, updated() { - this.handleMaskChange.bind(this); + this.handleMaskChange(); }, handleMaskChange() { this.hiddenInput.value = this.rawValue(this.mask.value); - this.hiddenInput.dispatchEvent(new Event("input", { bubbles: true })); - }, - rawValue(value) { - return value.replace(this.el.dataset.unit || "", "").trim().replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, "g"), ""); }, destroyed() { this.mask.destroy(); + }, + rawValue(value) { + return value.replace(this.el.dataset.unit || "", "").trim().replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, "g"), ""); } }; //# sourceMappingURL=backpex.cjs.js.map diff --git a/priv/static/js/backpex.cjs.js.map b/priv/static/js/backpex.cjs.js.map index 2d052eaf1..134c26b25 100644 --- a/priv/static/js/backpex.cjs.js.map +++ b/priv/static/js/backpex.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_number_input.js"], - "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], - "mappings": "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", + "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_currency_input.js"], + "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexCurrencyInput } from './_currency_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange()\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n },\n destroyed () {\n this.mask.destroy()\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } diff --git a/priv/static/js/backpex.esm.js b/priv/static/js/backpex.esm.js index 244b331cf..409772106 100644 --- a/priv/static/js/backpex.esm.js +++ b/priv/static/js/backpex.esm.js @@ -8,8 +8,8 @@ var __export = (target, all) => { var hooks_exports = {}; __export(hooks_exports, { BackpexCancelEntry: () => cancel_entry_default, + BackpexCurrencyInput: () => currency_input_default, BackpexDragHover: () => drag_hover_default, - BackpexMaskedNumberInput: () => masked_number_input_default, BackpexSidebarSections: () => sidebar_sections_default, BackpexStickyActions: () => sticky_actions_default, BackpexThemeSelector: () => theme_selector_default, @@ -3462,8 +3462,8 @@ try { } catch { } -// js/hooks/_masked_number_input.js -var masked_number_input_default = { +// js/hooks/_currency_input.js +var currency_input_default = { mounted() { this.maskedInput = this.el.querySelector("[data-masked-input]"); this.hiddenInput = this.el.querySelector("[data-hidden-input]"); @@ -3491,17 +3491,16 @@ var masked_number_input_default = { this.mask.on("accept", this.handleMaskChange.bind(this)); }, updated() { - this.handleMaskChange.bind(this); + this.handleMaskChange(); }, handleMaskChange() { this.hiddenInput.value = this.rawValue(this.mask.value); - this.hiddenInput.dispatchEvent(new Event("input", { bubbles: true })); - }, - rawValue(value) { - return value.replace(this.el.dataset.unit || "", "").trim().replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, "g"), ""); }, destroyed() { this.mask.destroy(); + }, + rawValue(value) { + return value.replace(this.el.dataset.unit || "", "").trim().replace(new RegExp(`\\${this.el.dataset.thousandsSeparator}`, "g"), ""); } }; export { diff --git a/priv/static/js/backpex.esm.js.map b/priv/static/js/backpex.esm.js.map index 689f20543..a5ef88f39 100644 --- a/priv/static/js/backpex.esm.js.map +++ b/priv/static/js/backpex.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_masked_number_input.js"], - "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexMaskedNumberInput } from './_masked_number_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange.bind(this)\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n this.hiddenInput.dispatchEvent(new Event('input', { bubbles: true }))\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n destroyed () {\n this.mask.destroy()\n }\n}\n"], - "mappings": "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", + "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_currency_input.js"], + "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexCurrencyInput } from './_currency_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange()\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n },\n destroyed () {\n this.mask.destroy()\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } From ba1bf968459ace576003818f768639d41f2e98c1 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:21:38 +0200 Subject: [PATCH 14/24] Update lib/backpex/html/form.ex Co-authored-by: Simon Hansen --- lib/backpex/html/form.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/backpex/html/form.ex b/lib/backpex/html/form.ex index c50918072..5bcf44608 100644 --- a/lib/backpex/html/form.ex +++ b/lib/backpex/html/form.ex @@ -165,7 +165,7 @@ defmodule Backpex.HTML.Form do end @doc """ - Renders a masked input. + Renders a masked input for currencies. A `Phoenix.HTML.FormField` may be passed as argument, which is used to retrieve the input name, id, and values. Otherwise all attributes may be passed explicitly. From 1c81961de109c4547df408d2600d8058dea47580 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Aug 2025 00:00:17 +0000 Subject: [PATCH 15/24] Update dependency igniter to v0.6.28 (#1428) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 48ac2273fa5a0d607dac71458bf8569c2c251726 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:29:57 +0200 Subject: [PATCH 16/24] Update assets --- priv/static/js/backpex.cjs.js.map | 4 ++-- priv/static/js/backpex.esm.js.map | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/priv/static/js/backpex.cjs.js.map b/priv/static/js/backpex.cjs.js.map index 134c26b25..c7b1ed15d 100644 --- a/priv/static/js/backpex.cjs.js.map +++ b/priv/static/js/backpex.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../assets/js/backpex.js", "../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_currency_input.js"], - "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexCurrencyInput } from './_currency_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange()\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n },\n destroyed () {\n this.mask.destroy()\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n}\n"], - "mappings": "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", + "sourcesContent": ["import * as Hooks from './hooks'\n\nexport { Hooks }\n", "export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexCurrencyInput } from './_currency_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange()\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n },\n destroyed () {\n this.mask.destroy()\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n }\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } diff --git a/priv/static/js/backpex.esm.js.map b/priv/static/js/backpex.esm.js.map index a5ef88f39..817aeca5a 100644 --- a/priv/static/js/backpex.esm.js.map +++ b/priv/static/js/backpex.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../assets/js/hooks/index.js", "../../../assets/js/hooks/_cancel_entry.js", "../../../assets/js/hooks/_drag_hover.js", "../../../assets/js/hooks/_sidebar_sections.js", "../../../assets/js/hooks/_sticky_actions.js", "../../../assets/js/hooks/_theme_selector.js", "../../../assets/js/hooks/_tooltip.js", "../../../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-history.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/masked/repeat.js", "../../../node_modules/imask/esm/index.js", "../../../assets/js/hooks/_currency_input.js"], - "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexCurrencyInput } from './_currency_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange()\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n },\n destroyed () {\n this.mask.destroy()\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n },\n}\n"], - "mappings": "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", + "sourcesContent": ["export { default as BackpexCancelEntry } from './_cancel_entry'\nexport { default as BackpexDragHover } from './_drag_hover'\nexport { default as BackpexSidebarSections } from './_sidebar_sections'\nexport { default as BackpexStickyActions } from './_sticky_actions'\nexport { default as BackpexThemeSelector } from './_theme_selector'\nexport { default as BackpexTooltip } from './_tooltip'\nexport { default as BackpexCurrencyInput } from './_currency_input'\n", "/**\n * This hook dispatches a form change/input event on the hidden upload field when cancelling an entry.\n * This makes errors validation on upload fields work.\n */\nexport default {\n mounted () {\n this.form = this.el.closest('form')\n\n const uploadKey = this.el.dataset.uploadKey\n this.handleEvent(`cancel-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n this.handleEvent(`cancel-existing-entry:${uploadKey}`, (e) => { this.dispatchChangeEvent() })\n },\n dispatchChangeEvent () {\n if (this.form) {\n this.el.dispatchEvent(new Event('input', { bubbles: true }))\n }\n }\n}\n", "/**\n * This hook adds hover styles on the upload dropzone when dragging a file over it.\n */\nexport default {\n mounted () {\n this.dragging = 0\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('dragenter', () => this.dragChange(this.dragging + 1), { signal })\n this.el.addEventListener('dragleave', () => this.dragChange(this.dragging - 1), { signal })\n this.el.addEventListener('drop', () => this.dragChange(0), { signal })\n },\n destroyed () {\n this.controller.abort()\n },\n dragChange (value) {\n this.dragging = value\n this.el.firstElementChild.classList.toggle('border-primary', this.dragging > 0)\n }\n}\n", "/**\n * Handles the initial state of all sidebar sections and saves the state to localstorage on toggle.\n */\nexport default {\n mounted () {\n this.initializeSections()\n },\n updated () {\n this.initializeSections()\n },\n destroyed () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n toggle.removeEventListener('click', this.handleToggle.bind(this))\n })\n },\n hasContent (element) {\n if (!element || element.children.length === 0) {\n return false\n }\n\n for (const child of element.children) {\n const childContent = child.querySelector('[data-menu-dropdown-content]')\n\n if (childContent) {\n if (this.hasContent(childContent)) {\n return true\n }\n } else {\n return true\n }\n }\n\n return false\n },\n initializeSections () {\n const sections = this.el.querySelectorAll('[data-section-id]')\n\n sections.forEach(section => {\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n if (!this.hasContent(content)) {\n content.style.display = 'none'\n return\n }\n\n const isOpen = localStorage.getItem(`sidebar-section-${sectionId}`) === 'true'\n if (!isOpen) {\n toggle.classList.remove('menu-dropdown-show')\n content.style.display = 'none'\n }\n\n section.classList.remove('hidden')\n\n toggle.addEventListener('click', this.handleToggle.bind(this))\n })\n },\n handleToggle (event) {\n const section = event.currentTarget.closest('[data-section-id]')\n const sectionId = section.dataset.sectionId\n const toggle = section.querySelector('[data-menu-dropdown-toggle]')\n const content = section.querySelector('[data-menu-dropdown-content]')\n\n toggle.classList.toggle('menu-dropdown-show')\n content.style.display = content.style.display === 'none' ? 'block' : 'none'\n\n const isNowOpen = toggle.classList.contains('menu-dropdown-show')\n localStorage.setItem(`sidebar-section-${sectionId}`, isNowOpen)\n }\n}\n", "/**\n * Hook to determine if a table row is horizontally scrollable (=> actions are sticky).\n *\n * Adds a 'stuck' attribute to the sticky element which can then be used for styling.\n */\nexport default {\n mounted () {\n this.sticky = this.el.querySelector('.sticky')\n\n this.observer = new IntersectionObserver(\n ([entry]) => {\n this.stuck = entry.intersectionRatio < 1\n this.toggleStuckAttribute()\n },\n { threshold: [1], root: this.el.closest('.overflow-x-auto') }\n )\n\n this.observer.observe(this.el)\n },\n updated () {\n this.toggleStuckAttribute()\n },\n destroyed () {\n this.observer.disconnect()\n },\n toggleStuckAttribute () {\n this.sticky.toggleAttribute('stuck', this.stuck)\n }\n}\n", "/**\n * Hook for selecting a theme.\n */\nexport default {\n mounted () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n // Marking current theme as active\n if (storedTheme != null) {\n const activeThemeRadio = form.querySelector(\n `input[name='theme-selector'][value='${storedTheme}']`\n )\n activeThemeRadio.checked = true\n }\n\n window.addEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n },\n // Event listener that handles the theme changes and store\n // the selected theme in the session and also in localStorage\n async handleThemeChange () {\n const form = document.querySelector('#backpex-theme-selector-form')\n const csrfToken = document.querySelector(\"meta[name='csrf-token']\").getAttribute('content')\n const cookiePath = form.dataset.cookiePath\n const selectedTheme = form.querySelector(\n 'input[name=\"theme-selector\"]:checked'\n )\n\n if (selectedTheme) {\n window.localStorage.setItem('backpexTheme', selectedTheme.value)\n document.documentElement.setAttribute(\n 'data-theme',\n selectedTheme.value\n )\n await fetch(cookiePath, {\n body: `select_theme=${selectedTheme.value}`,\n method: 'POST',\n headers: {\n 'Content-type': 'application/x-www-form-urlencoded',\n 'x-csrf-token': csrfToken\n }\n })\n }\n },\n // Call this from your app.js as soon as possible to minimize flashes with the old theme in some situations.\n setStoredTheme () {\n const storedTheme = window.localStorage.getItem('backpexTheme')\n\n if (storedTheme != null) {\n document.documentElement.setAttribute('data-theme', storedTheme)\n }\n },\n destroyed () {\n window.removeEventListener('backpex:theme-change', this.handleThemeChange.bind(this))\n }\n}\n", "/**\n * This hooks displays a statically positioned tooltip which is not affected by parent elements and their overflow.\n */\nexport default {\n mounted () {\n this.tooltip = null\n this.controller = new AbortController()\n const signal = this.controller.signal\n\n this.el.addEventListener('mouseenter', () => {\n const text = this.el.getAttribute('data-tooltip')\n if (!text) return\n\n this.tooltip = document.createElement('div')\n this.tooltip.innerText = text\n this.tooltip.className = `\n fixed z-50 -translate-x-1/2 px-2 py-1 bg-neutral rounded-field\n text-neutral-content text-sm shadow-sm whitespace-nowrap\n before:content-['']\n before:absolute before:w-0 before:h-0 before:left-1/2 before:-translate-x-1/2 before:top-full\n before:border-l-4 before:border-r-4 before:border-t-4 before:border-transparent before:border-t-neutral\n `\n\n document.body.appendChild(this.tooltip)\n this.updateTooltipPosition()\n }, { signal })\n\n this.el.addEventListener('mouseleave', () => {\n if (this.tooltip) {\n this.tooltip.remove()\n this.tooltip = null\n }\n }, { signal })\n\n window.addEventListener('scroll', () => { this.updateTooltipPosition() }, { signal })\n },\n destroyed () {\n this.controller.abort()\n\n if (this.tooltip) {\n this.tooltip.remove()\n }\n },\n updateTooltipPosition () {\n if (!this.tooltip) return\n\n const rect = this.el.getBoundingClientRect()\n this.tooltip.style.left = `${rect.left + rect.width / 2}px`\n this.tooltip.style.top = `${rect.top - this.tooltip.offsetHeight - 6}px`\n }\n}\n", "/** 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 if (this.insertedCount) {\n // double check right part\n while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n }\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 | 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: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\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: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask, ReturnMasked extends Masked=InstanceType> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDate=MaskedDate> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedNumber=MaskedNumber> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedEnum=MaskedEnum> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRange=MaskedRange> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedPattern=MaskedPattern> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedDynamic=MaskedDynamic> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask, ReturnMasked=Opts extends MaskedOptions ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedRegExp=MaskedRegExp> (opts: Opts): ReturnMasked;\n// export default function createMask, ReturnMasked extends MaskedFunction=MaskedFunction> (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 \" + nOpts.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}\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n", "import MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\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._onKeydown = this._onKeydown.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onBeforeinput = this._onBeforeinput.bind(this);\n this._onCompositionEnd = this._onCompositionEnd.bind(this);\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 /** Is element in focus */\n get isActive() {\n return this.input === this.rootElement.activeElement;\n }\n\n /** Binds HTMLElement events to mask internal events */\n bindEvents(handlers) {\n this.input.addEventListener('keydown', this._onKeydown);\n this.input.addEventListener('input', this._onInput);\n this.input.addEventListener('beforeinput', this._onBeforeinput);\n this.input.addEventListener('compositionend', this._onCompositionEnd);\n this.input.addEventListener('drop', handlers.drop);\n this.input.addEventListener('click', handlers.click);\n this.input.addEventListener('focus', handlers.focus);\n this.input.addEventListener('blur', handlers.commit);\n this._handlers = handlers;\n }\n _onKeydown(e) {\n if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (!e.isComposing) this._handlers.selectionChange(e);\n }\n _onBeforeinput(e) {\n if (e.inputType === 'historyUndo' && this._handlers.undo) {\n e.preventDefault();\n return this._handlers.undo(e);\n }\n if (e.inputType === 'historyRedo' && this._handlers.redo) {\n e.preventDefault();\n return this._handlers.redo(e);\n }\n }\n _onCompositionEnd(e) {\n this._handlers.input(e);\n }\n _onInput(e) {\n if (!e.isComposing) this._handlers.input(e);\n }\n\n /** Unbinds HTMLElement events to mask internal events */\n unbindEvents() {\n this.input.removeEventListener('keydown', this._onKeydown);\n this.input.removeEventListener('input', this._onInput);\n this.input.removeEventListener('beforeinput', this._onBeforeinput);\n this.input.removeEventListener('compositionend', this._onCompositionEnd);\n this.input.removeEventListener('drop', this._handlers.drop);\n this.input.removeEventListener('click', this._handlers.click);\n this.input.removeEventListener('focus', this._handlers.focus);\n this.input.removeEventListener('blur', this._handlers.commit);\n this._handlers = {};\n }\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 }\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", "class InputHistory {\n constructor() {\n this.states = [];\n this.currentIndex = 0;\n }\n get currentState() {\n return this.states[this.currentIndex];\n }\n get isEmpty() {\n return this.states.length === 0;\n }\n push(state) {\n // if current index points before the last element then remove the future\n if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n this.states.push(state);\n if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n this.currentIndex = this.states.length - 1;\n }\n go(steps) {\n this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n return this.currentState;\n }\n undo() {\n return this.go(-1);\n }\n redo() {\n return this.go(+1);\n }\n clear() {\n this.states.length = 0;\n this.currentIndex = 0;\n }\n}\nInputHistory.MAX_LENGTH = 100;\n\nexport { InputHistory as default };\n", "import { 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 InputHistory from './input-history.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._rawInputValue = '';\n this.history = new InputHistory();\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._onUndo = this._onUndo.bind(this);\n this._onRedo = this._onRedo.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('auto');\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('auto');\n }\n\n /** Raw input value */\n get rawInputValue() {\n return this._rawInputValue;\n }\n set rawInputValue(str) {\n if (this.rawInputValue === str) return;\n this.masked.rawInputValue = 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('auto');\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 undo: this._onUndo,\n redo: this._onRedo\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 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 this._unmaskedValue = this.masked.unmaskedValue;\n this._rawInputValue = this.masked.rawInputValue;\n }\n\n /** Syncronizes view from model value, fires change events */\n updateControl(cursorPos) {\n const newUnmaskedValue = this.masked.unmaskedValue;\n const newValue = this.masked.value;\n const newRawInputValue = this.masked.rawInputValue;\n const newDisplayValue = this.displayValue;\n const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n this._rawInputValue = newRawInputValue;\n if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n if (isChanged) this._fireChangeEvents();\n if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n unmaskedValue: newUnmaskedValue,\n selection: {\n start: this.selectionStart,\n end: this.cursorPos\n }\n });\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; // TODO types, yes, mask is optional\n\n const updateMask = !this.maskEquals(mask);\n const updateOpts = this.masked.optionsIsChanged(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 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(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) this.updateValue();\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 _onUndo() {\n this._applyHistoryState(this.history.undo());\n }\n _onRedo() {\n this._applyHistoryState(this.history.redo());\n }\n _applyHistoryState(state) {\n if (!state) return;\n this._historyChanging = true;\n this.unmaskedValue = state.unmaskedValue;\n this.el.select(state.selection.start, state.selection.end);\n this._saveSelection();\n this._historyChanging = false;\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 /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n\n /** Can skip chars */\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 tailShift: 0,\n skip: false\n }, details);\n }\n\n /** Aggregate changes */\n aggregate(details) {\n this.inserted += details.inserted;\n this.rawInserted += details.rawInserted;\n this.tailShift += details.tailShift;\n this.skip = this.skip || details.skip;\n return this;\n }\n\n /** Total offset considering all changes */\n get offset() {\n return this.tailShift + this.inserted.length;\n }\n get consumed() {\n return Boolean(this.rawInserted) || this.skip;\n }\n equals(details) {\n return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\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, objectIncludes, 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 /** */\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 (!this.optionsIsChanged(opts)) 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 if (ch) {\n details = details.aggregate(this._appendCharRaw(ch, flags));\n\n // TODO handle `skip`?\n\n // try `autofix` lookahead\n if (!details.rawInserted && this.autofix === 'pad') {\n const noFixState = this.state;\n this.state = consistentState;\n let fixDetails = this.pad(flags);\n const chDetails = this._appendCharRaw(ch, flags);\n fixDetails = fixDetails.aggregate(chDetails);\n\n // if fix was applied or\n // if details are equal use skip restoring state optimization\n if (chDetails.rawInserted || fixDetails.equals(details)) {\n details = fixDetails;\n } else {\n this.state = noFixState;\n }\n }\n }\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 for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.unshift(this.displayValue.length - details.tailShift);\n }\n }\n let tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n // not ok, try shift\n if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n this.state = beforeTailState;\n consistentTail = checkTail.state;\n for (let i = 0; i < details.rawInserted.length; ++i) {\n checkTail.shift();\n }\n tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted.length === checkTail.toString().length;\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 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 this.doCommit();\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 (inserted === void 0) {\n inserted = '';\n }\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 optionsIsChanged(opts) {\n return !objectIncludes(this, opts);\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 pad(flags) {\n return new ChangeDetails();\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; ++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 details.aggregate(masked._appendPlaceholder(stop));\n }\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n if (chunkBlock) {\n const tailDetails = chunkBlock.appendTail(chunk);\n details.aggregate(tailDetails);\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 _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 // aaX_ - 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 if (this.isFilled) return new ChangeDetails();\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 const details = new ChangeDetails({\n inserted: this.char,\n rawInserted: isResolved ? this.char : ''\n });\n this._value = 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 pad(flags) {\n return this._appendPlaceholder();\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 let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n if (details.inserted && this.doValidate(flags) === false) {\n details = new ChangeDetails();\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 if (this.isFilled || this.isOptional) return new ChangeDetails();\n this.isFilled = true;\n return new ChangeDetails({\n inserted: this.placeholderChar\n });\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 pad(flags) {\n return new ChangeDetails();\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 /** */\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 /** */\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 repeat,\n ...bOpts\n } = normalizeOpts(this.blocks[bName]); // TODO type Opts\n const blockOpts = {\n lazy: this.lazy,\n eager: this.eager,\n placeholderChar: this.placeholderChar,\n displayChar: this.displayChar,\n overwrite: this.overwrite,\n autofix: this.autofix,\n ...bOpts,\n repeat,\n parent: this\n };\n const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\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 if (!state) {\n this.reset();\n return;\n }\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, block; block = this._blocks[bi]; ++bi) {\n var _flags$_beforeTailSta;\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 details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\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 details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\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 pad(flags) {\n const details = new ChangeDetails();\n this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n return details;\n }\n}\nMaskedPattern.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport MaskedPattern from './pattern.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 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 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 (!ch) details.skip = !this.isComplete;\n return [ch, details];\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n const fromStr = String(this.from).padStart(this.maxLength, '0');\n const toStr = String(this.to).padStart(this.maxLength, '0');\n const [minstr, maxstr] = this.boundaries(this.value + ch);\n if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n if (Number(minstr) > this.to) {\n if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n }\n return super._appendCharRaw(toStr[this.value.length], flags);\n }\n return super._appendCharRaw(ch, flags);\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 pad(flags) {\n const details = new ChangeDetails();\n if (this.value.length === this.maxLength) return details;\n const value = this.value;\n const padLength = this.maxLength - this.value.length;\n if (padLength) {\n this.reset();\n for (let i = 0; i < padLength; ++i) {\n details.aggregate(super._appendCharRaw('0', flags));\n }\n\n // append tail\n value.split('').forEach(ch => this._appendCharRaw(ch));\n }\n return details;\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\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n static extractPatternOptions(opts) {\n const {\n mask,\n pattern,\n ...patternOpts\n } = opts;\n return {\n ...patternOpts,\n mask: isString(mask) ? mask : pattern\n };\n }\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** Format typed value to string */\n\n /** Parse string to get typed value */\n\n constructor(opts) {\n super(MaskedDate.extractPatternOptions({\n ...MaskedDate.DEFAULTS,\n ...opts\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 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 optionsIsChanged(opts) {\n return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\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 ...MaskedPattern.DEFAULTS,\n mask: Date,\n pattern: DefaultPattern,\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 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 _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 this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = this.currentMask.value.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 || _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 get autofix() {\n return this.currentMask ? this.currentMask.autofix : this._autofix;\n }\n set autofix(autofix) {\n this._autofix = autofix;\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}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n ...Masked.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 ChangeDetails from '../core/change-details.js';\nimport { DIRECTION } from '../core/utils.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport './base.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({\n ...MaskedEnum.DEFAULTS,\n ...opts\n }); // mask will be created in _update\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 _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n if (matches.length) {\n if (matches.length === 1) {\n this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n const mch = matches[0][bi];\n if (bi >= this.value.length || mch === b.value) return;\n b.reset();\n b._appendChar(mch, flags);\n });\n }\n const d = super._appendCharRaw(matches[0][this.value.length], flags);\n if (matches.length === 1) {\n matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n }\n return d;\n }\n return new ChangeDetails({\n skip: !this.isComplete\n });\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 // just drop tail\n return new ContinuousTailDetails('', fromPos);\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 if (fromPos === toPos) return new ChangeDetails();\n const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n let pos;\n for (pos = fromPos; pos >= 0; --pos) {\n const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n if (matches.length > 1) break;\n }\n const details = super.remove(pos, toPos);\n details.tailShift += pos - fromPos;\n return details;\n }\n get isComplete() {\n return this.enum.indexOf(this.value) >= 0;\n }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n ...MaskedPattern.DEFAULTS,\n matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\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 /** */\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\nvar _MaskedNumber;\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 /** */\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 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 oldValue = this._value;\n this._value += ch;\n const num = this.number;\n let accepted = !isNaN(num);\n let skip = false;\n if (accepted) {\n let fixedNum;\n if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n if (fixedNum != null) {\n if (this.autofix) {\n this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n } else {\n accepted = false;\n }\n }\n accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n }\n let appendDetails;\n if (!accepted) {\n this._value = oldValue;\n appendDetails = new ChangeDetails();\n } else {\n appendDetails = new ChangeDetails({\n inserted: this._value.slice(oldValue.length),\n rawInserted: skip ? '' : ch,\n skip\n });\n }\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 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 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 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 get allowNegative() {\n return this.min != null && this.min < 0 || this.max != null && this.max < 0;\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}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n ...Masked.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", "import ChangeDetails from '../core/change-details.js';\nimport IMask from '../core/holder.js';\nimport createMask, { normalizeOpts } from './factory.js';\nimport MaskedPattern from './pattern.js';\nimport '../core/utils.js';\nimport './base.js';\nimport '../core/continuous-tail-details.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 mask */\nclass RepeatBlock extends MaskedPattern {\n get repeatFrom() {\n var _ref;\n return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n }\n get repeatTo() {\n var _ref2;\n return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n }\n constructor(opts) {\n super(opts);\n }\n updateOptions(opts) {\n super.updateOptions(opts);\n }\n _update(opts) {\n var _ref3, _ref4, _this$_blocks;\n const {\n repeat,\n ...blockOpts\n } = normalizeOpts(opts); // TODO type\n this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n const block = createMask(this._blockOpts);\n this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n super._update({\n mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n blocks: {\n m: block\n },\n eager: block.eager,\n overwrite: block.overwrite,\n skipInvalid: block.skipInvalid,\n lazy: block.lazy,\n placeholderChar: block.placeholderChar,\n displayChar: block.displayChar\n });\n }\n _allocateBlock(bi) {\n if (bi < this._blocks.length) return this._blocks[bi];\n if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n this._blocks.push(createMask(this._blockOpts));\n this.mask += 'm';\n return this._blocks[this._blocks.length - 1];\n }\n }\n _appendCharRaw(ch, flags) {\n if (flags === void 0) {\n flags = {};\n }\n const details = new ChangeDetails();\n for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n // try to get a block or\n // try to allocate a new block if not allocated already\n block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\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 if (blockDetails.skip && allocated) {\n // remove the last allocated block and break\n this._blocks.pop();\n this.mask = this.mask.slice(1);\n break;\n }\n details.aggregate(blockDetails);\n if (blockDetails.consumed) break; // go next char\n }\n return details;\n }\n _trimEmptyTail(fromPos, toPos) {\n var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n if (fromPos === void 0) {\n fromPos = 0;\n }\n const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n let lastBlockIndex;\n if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n let removeCount = 0;\n for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n if (this._blocks[blockIndex].unmaskedValue) break;\n }\n if (removeCount) {\n this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n this.mask = this.mask.slice(removeCount);\n }\n }\n reset() {\n super.reset();\n this._trimEmptyTail();\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._trimEmptyTail(fromPos, toPos);\n return removeDetails;\n }\n totalInputPositions(fromPos, toPos) {\n if (fromPos === void 0) {\n fromPos = 0;\n }\n if (toPos == null && this.repeatTo === Infinity) return Infinity;\n return super.totalInputPositions(fromPos, toPos);\n }\n get state() {\n return super.state;\n }\n set state(state) {\n this._blocks.length = state._blocks.length;\n this.mask = this.mask.slice(0, this._blocks.length);\n super.state = state;\n }\n}\nIMask.RepeatBlock = RepeatBlock;\n\nexport { RepeatBlock as default };\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';\nexport { default as RepeatBlock } from './masked/repeat.js';\nimport './core/action-details.js';\nimport './controls/input-history.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", "import IMask from 'imask'\n\nexport default {\n mounted () {\n this.maskedInput = this.el.querySelector('[data-masked-input]')\n this.hiddenInput = this.el.querySelector('[data-hidden-input]')\n\n this.initializeMask()\n },\n initializeMask () {\n const maskPattern = this.el.dataset.maskPattern\n\n if (!maskPattern) {\n console.error('You must provide a mask pattern in the data-masked-pattern attribute.')\n return\n }\n\n this.maskOptions = {\n mask: maskPattern,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n thousandsSeparator: this.el.dataset.thousandsSeparator,\n radix: this.el.dataset.radix\n }\n }\n }\n\n this.mask = IMask(this.maskedInput, this.maskOptions)\n this.mask.unmaskedValue = this.rawValue(this.hiddenInput.value)\n this.mask.on('accept', this.handleMaskChange.bind(this))\n },\n updated () {\n this.handleMaskChange()\n },\n handleMaskChange () {\n this.hiddenInput.value = this.rawValue(this.mask.value)\n },\n destroyed () {\n this.mask.destroy()\n },\n rawValue (value) {\n return value\n .replace(this.el.dataset.unit || '', '')\n .trim()\n .replace(new RegExp(`\\\\${this.el.dataset.thousandsSeparator}`, 'g'), '')\n }\n}\n"], + "mappings": "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", "names": ["bName", "fromPos", "toPos", "_MaskedNumber"] } From caefd4b302674986e122224a05cdf61c41e37c90 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:47:21 +0200 Subject: [PATCH 17/24] Install backpex node dependencies --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index b485152bc..9663cf77f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,6 +41,8 @@ ENV PATH=/opt/scripts/:/opt/app/_build/prod/rel/demo/bin:$PATH ARG MIX_ENV=prod ENV MIX_ENV=$MIX_ENV +RUN yarn install --pure-lockfile + RUN mkdir demo WORKDIR $APP_HOME/demo From 5ca315e03f6469784d462c63478ccb82e6a4accd Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:21:35 +0200 Subject: [PATCH 18/24] Run `mix format` --- demo/config/config.exs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/demo/config/config.exs b/demo/config/config.exs index 0f5f9d2df..7d38394ab 100644 --- a/demo/config/config.exs +++ b/demo/config/config.exs @@ -45,6 +45,13 @@ config :logger, :default_formatter, format: "$time $metadata[$level] $message\n", metadata: [:request_id] +config :money, + default_currency: :EUR, + separator: ".", + delimiter: ",", + symbol_on_right: true, + symbol_space: true + config :phoenix, :json_library, Jason config :sentry, @@ -86,11 +93,4 @@ config :tailwind, cd: Path.expand("..", __DIR__) ] -config :money, - default_currency: :EUR, - separator: ".", - delimiter: ",", - symbol_on_right: true, - symbol_space: true - import_config "#{config_env()}.exs" From 1b5c97960f8359d8677fc9e4b1e260cf19322b96 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 19 Sep 2025 09:34:21 +0200 Subject: [PATCH 19/24] Fix imask cannot be resolved --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index c7570d1ef..fa0e28976 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,6 +41,8 @@ ENV PATH=/opt/scripts/:/opt/app/_build/prod/rel/demo/bin:$PATH ARG MIX_ENV=prod ENV MIX_ENV=$MIX_ENV +# Install root-level (Backpex) dependencies +COPY package.json yarn.lock ./ RUN yarn install --pure-lockfile RUN mkdir demo From 07cc07705c66ec0e71f1a7434ef6b97402c23221 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:46:57 +0200 Subject: [PATCH 20/24] Use USD as currency default --- demo/config/config.exs | 8 ++++---- lib/backpex/fields/currency.ex | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/demo/config/config.exs b/demo/config/config.exs index 7d38394ab..ce16994b4 100644 --- a/demo/config/config.exs +++ b/demo/config/config.exs @@ -46,10 +46,10 @@ config :logger, :default_formatter, metadata: [:request_id] config :money, - default_currency: :EUR, - separator: ".", - delimiter: ",", - symbol_on_right: true, + default_currency: :USD, + separator: ",", + delimiter: ".", + symbol_on_right: false, symbol_space: true config :phoenix, :json_library, Jason diff --git a/lib/backpex/fields/currency.ex b/lib/backpex/fields/currency.ex index d2a1c375f..ac703ef3c 100644 --- a/lib/backpex/fields/currency.ex +++ b/lib/backpex/fields/currency.ex @@ -11,24 +11,24 @@ defmodule Backpex.Fields.Currency do unit: [ doc: "Unit to display with the currency value, e.g. '€'.", type: :string, - default: "€" + default: "$" ], unit_position: [ doc: "Position of the unit relative to the value, either `:before` or `:after`.", type: {:in, [:before, :after]}, - default: :after + default: :before ], radix: [ doc: "Character used as the decimal separator, e.g. ',' or '.'. Make sure this value matches the one you've configured in your Money library.", type: :string, - default: "," + default: "." ], thousands_separator: [ doc: "Character used as the thousands separator, e.g. '.' or ','. Make sure this value matches the one you've configured in your Money library.", type: :string, - default: "." + default: "," ] ] From 7e81909123a73bf19f59f409a36aeaa90bec9fc5 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:47:22 +0200 Subject: [PATCH 21/24] Remove unused NODE_PATH env --- demo/config/config.exs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/demo/config/config.exs b/demo/config/config.exs index ce16994b4..56d4978f2 100644 --- a/demo/config/config.exs +++ b/demo/config/config.exs @@ -37,8 +37,7 @@ config :esbuild, ], backpex: [ args: ~w(../assets/js/backpex.js --bundle --format=esm --sourcemap --outfile=priv/static/js/backpex.esm.js), - cd: Path.expand("..", __DIR__), - env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)} + cd: Path.expand("..", __DIR__) ] config :logger, :default_formatter, From 79c2ad0f887512e0be3cfc9399fde6bc5117050d Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 19 Sep 2025 10:47:33 +0200 Subject: [PATCH 22/24] Install backpex deps --- compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/compose.yml b/compose.yml index 875a1b97e..349f3ad2b 100644 --- a/compose.yml +++ b/compose.yml @@ -11,6 +11,7 @@ services: - STARTUP_COMMAND_2=yarn install --pure-lockfile - STARTUP_COMMAND_3=yarn playwright install chromium --with-deps - STARTUP_COMMAND_4=mix assets.setup + - STARTUP_COMMAND_5=cd .. && mix deps.get && yarn install --pure-lockfile && cd demo volumes: - .:/opt/app ports: From f5f2118194e7cd15a384c0812714afd307310783 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 19 Sep 2025 11:11:23 +0200 Subject: [PATCH 23/24] Add v0.16 upgrade guide --- guides/upgrading/v0.16.md | 74 +++++++++++++++++++++++++++++++++++++++ mix.exs | 1 + 2 files changed, 75 insertions(+) create mode 100644 guides/upgrading/v0.16.md diff --git a/guides/upgrading/v0.16.md b/guides/upgrading/v0.16.md new file mode 100644 index 000000000..f8a0dfbc3 --- /dev/null +++ b/guides/upgrading/v0.16.md @@ -0,0 +1,74 @@ +# Upgrading to v0.16 + +## Bump Your Deps + +Update Backpex to the latest version: + +```elixir +defp deps do + [ + {:backpex, "~> 0.16.0"} + ] +end +``` + +## `Backpex.Fields.Currency` has been updated + +The appearance of the currency field has changed completely. We now use a custom masked input instead of a number input which improves UX a lot. +In addition we've removed the `money` dependency from Backpex so you can use whatever library you want to use for currencies in your app. +The removal of `money` includes our custom [`Backpex.Ecto.AmountType`]() ecto type. + +If you used the `money` library before, these are the changes you have to make: + +1. Configure `unit`, `unit_position`, `radix` and `thousands_separator` for `Backpex.Fields.Currency` + +```elixir +def fields do + [ + price: %{ + module: Backpex.Fields.Currency, + label: "Price", + unit: "€", + unit_position: :after, + radix: ",", + thousands_separator: "." + }, + ... + ] +end +``` + +See [field-specific options](`Backpex.Fields.Currency`) for default values. + +2. Configure defaults for `money` in your `config/config.exs` + +```elixir +config :money, + default_currency: :EUR, + separator: ".", + delimiter: ",", + symbol_on_right: true, + symbol_space: true +``` + +The default values should ideally match the field options from step 1. + +3. Replace [`Backpex.Ecto.AmountType`]() with [`Backpex.Ecto.AmountType`]() + +```elixir +schema "products" do + field :price, Money.Ecto.Amount.Type + ... +end +``` + +4. Add money dependency to your app + +```elixir +def deps do + [ + {:money, "~> 1.14"}, + ... + ] +end +``` diff --git a/mix.exs b/mix.exs index 5972be24b..07679440f 100644 --- a/mix.exs +++ b/mix.exs @@ -194,6 +194,7 @@ defmodule Backpex.MixProject do "guides/translations/translations.md", # Upgrade Guides + "guides/upgrading/v0.16.md", "guides/upgrading/v0.15.md", "guides/upgrading/v0.14.md", "guides/upgrading/v0.13.md", From fbd5d606784834d58a8c8ce829fb032b3c36b643 Mon Sep 17 00:00:00 2001 From: Florian Arens <60519307+Flo0807@users.noreply.github.com> Date: Fri, 26 Sep 2025 08:12:19 +0200 Subject: [PATCH 24/24] Fix spelling mistake Co-authored-by: Phil-Bastian Berndt --- guides/upgrading/v0.16.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/upgrading/v0.16.md b/guides/upgrading/v0.16.md index f8a0dfbc3..9015f6f6f 100644 --- a/guides/upgrading/v0.16.md +++ b/guides/upgrading/v0.16.md @@ -53,7 +53,7 @@ config :money, The default values should ideally match the field options from step 1. -3. Replace [`Backpex.Ecto.AmountType`]() with [`Backpex.Ecto.AmountType`]() +3. Replace [`Backpex.Ecto.AmountType`]() with [`Money.Ecto.Amount.Type`]() ```elixir schema "products" do