{
  "version": 3,
  "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/channels/consumer.js", "../../javascript/show_submit_buttons.js", "../../javascript/window_manager.js", "../../javascript/show_toast_message.js", "../../../node_modules/tom-select/src/contrib/microevent.ts", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/regex.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/strings.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/index.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/utils.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/sifter.js", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/contrib/highlight.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/defaults.ts", "../../../node_modules/tom-select/src/getSettings.ts", "../../../node_modules/tom-select/src/tom-select.ts", "../../../node_modules/tom-select/src/contrib/microplugin.ts", "../../../node_modules/tom-select/src/tom-select.complete.ts", "../../../node_modules/tom-select/src/plugins/change_listener/plugin.ts", "../../../node_modules/tom-select/src/plugins/checkbox_options/plugin.ts", "../../../node_modules/tom-select/src/plugins/clear_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/drag_drop/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_header/plugin.ts", "../../../node_modules/tom-select/src/plugins/caret_position/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_input/plugin.ts", "../../../node_modules/tom-select/src/plugins/input_autogrow/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_backspace_delete/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_active_items/plugin.ts", "../../../node_modules/tom-select/src/plugins/optgroup_columns/plugin.ts", "../../../node_modules/tom-select/src/plugins/remove_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/restore_on_backspace/plugin.ts", "../../../node_modules/tom-select/src/plugins/virtual_scroll/plugin.ts", "../../javascript/make_request.js", "../../javascript/tom_select.js", "../../../node_modules/@babel/runtime/helpers/esm/extends.js", "../../../node_modules/mathjs/lib/esm/core/config.js", "../../../node_modules/mathjs/lib/esm/utils/is.js", "../../../node_modules/mathjs/lib/esm/utils/object.js", "../../../node_modules/mathjs/lib/esm/core/function/config.js", "../../../node_modules/mathjs/lib/esm/entry/configReadonly.js", "../../../node_modules/mathjs/lib/esm/utils/number.js", "../../../node_modules/mathjs/lib/esm/plain/number/arithmetic.js", "../../../node_modules/mathjs/lib/esm/plain/number/bitwise.js", "../../../node_modules/mathjs/lib/esm/utils/product.js", "../../../node_modules/mathjs/lib/esm/plain/number/combinations.js", "../../../node_modules/mathjs/lib/esm/plain/number/constants.js", "../../../node_modules/mathjs/lib/esm/plain/number/logical.js", "../../../node_modules/mathjs/lib/esm/plain/number/relational.js", "../../../node_modules/mathjs/lib/esm/plain/number/probability.js", "../../../node_modules/mathjs/lib/esm/plain/number/trigonometry.js", "../../../node_modules/mathjs/lib/esm/plain/number/utils.js", "../../../node_modules/mathjs/lib/esm/plain/number/index.js", "../../../node_modules/mathjs/lib/esm/utils/bignumber/formatter.js", "../../../node_modules/mathjs/lib/esm/utils/string.js", "../../../node_modules/mathjs/lib/esm/error/IndexError.js", "../../../node_modules/mathjs/lib/esm/utils/array.js", "../../../node_modules/mathjs/lib/esm/utils/factory.js", "../../../node_modules/mathjs/lib/esm/utils/noop.js", "../../../node_modules/typed-function/typed-function.js", "../../../node_modules/mathjs/lib/esm/utils/customs.js", "../../../node_modules/mathjs/lib/esm/utils/map.js", "../../../node_modules/mathjs/lib/esm/core/function/typed.js", "../../../node_modules/mathjs/lib/esm/type/resultset/ResultSet.js", "../../../node_modules/mathjs/lib/esm/type/matrix/Range.js", "../../../node_modules/mathjs/lib/esm/expression/Help.js", "../../../node_modules/mathjs/lib/esm/type/chain/Chain.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/e.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/false.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/i.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/Infinity.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/LN10.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/LN2.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/LOG10E.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/LOG2E.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/NaN.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/null.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/phi.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/pi.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/SQRT1_2.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/SQRT2.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/tau.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/true.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/constants/version.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/bignumber.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/boolean.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/complex.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/createUnit.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/fraction.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/index.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/matrix.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/number.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/sparse.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/splitUnit.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/string.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/construction/unit.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/core/config.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/core/import.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/core/typed.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/derivative.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/leafCount.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/lsolve.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/lsolveAll.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/lup.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/lusolve.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/qr.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/rationalize.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/resolve.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/simplify.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/simplifyCore.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/slu.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/symbolicEqual.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/usolve.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/algebra/usolveAll.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/abs.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/add.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/cbrt.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/ceil.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/cube.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/divide.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/dotDivide.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/dotMultiply.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/dotPow.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/exp.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/expm.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/expm1.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/fix.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/floor.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/gcd.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/hypot.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/invmod.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/lcm.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/log.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/log10.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/log1p.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/log2.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/mod.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/multiply.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/norm.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/nthRoot.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/nthRoots.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/pow.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/round.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/sign.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/sqrt.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/sqrtm.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/square.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/subtract.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/unaryMinus.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/unaryPlus.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/arithmetic/xgcd.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/bitAnd.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/bitNot.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/bitOr.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/bitXor.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/leftShift.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/rightArithShift.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/bitwise/rightLogShift.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/combinatorics/bellNumbers.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/combinatorics/catalan.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/combinatorics/composition.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/combinatorics/stirlingS2.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/complex/arg.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/complex/conj.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/complex/im.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/complex/re.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/expression/evaluate.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/expression/help.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/geometry/distance.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/geometry/intersect.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/logical/and.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/logical/not.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/logical/or.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/logical/xor.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/column.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/concat.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/count.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/cross.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/ctranspose.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/det.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/diag.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/diff.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/dot.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/eigs.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/filter.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/flatten.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/forEach.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/getMatrixDataType.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/identity.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/inv.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/pinv.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/kron.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/map.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/matrixFromColumns.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/matrixFromFunction.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/matrixFromRows.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/ones.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/partitionSelect.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/range.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/reshape.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/resize.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/rotate.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/rotationMatrix.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/row.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/size.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/sort.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/squeeze.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/subset.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/trace.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/transpose.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/zeros.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/fft.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/matrix/ifft.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/combinations.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/combinationsWithRep.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/factorial.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/gamma.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/lgamma.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/kldivergence.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/multinomial.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/permutations.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/pickRandom.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/random.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/probability/randomInt.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/compare.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/compareNatural.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/compareText.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/deepEqual.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/equal.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/equalText.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/larger.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/largerEq.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/smaller.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/smallerEq.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/relational/unequal.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setCartesian.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setDifference.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setDistinct.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setIntersect.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setIsSubset.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setMultiplicity.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setPowerset.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setSize.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setSymDifference.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/set/setUnion.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/special/erf.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/mad.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/max.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/mean.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/median.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/min.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/mode.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/prod.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/quantileSeq.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/std.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/cumsum.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/sum.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/statistics/variance.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/acos.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/acosh.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/acot.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/acoth.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/acsc.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/acsch.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/asec.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/asech.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/asin.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/asinh.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/atan.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/atan2.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/atanh.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/cos.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/cosh.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/cot.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/coth.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/csc.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/csch.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/sec.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/sech.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/sin.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/sinh.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/tan.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/trigonometry/tanh.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/units/to.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/bin.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/clone.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/format.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/hasNumericValue.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/hex.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isInteger.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isNaN.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isNegative.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isNumeric.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isPositive.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isPrime.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/isZero.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/numeric.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/oct.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/print.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/function/utils/typeOf.js", "../../../node_modules/mathjs/lib/esm/expression/embeddedDocs/embeddedDocs.js", "../../../node_modules/mathjs/lib/esm/expression/function/help.js", "../../../node_modules/mathjs/lib/esm/type/chain/function/chain.js", "../../../node_modules/mathjs/lib/esm/function/algebra/resolve.js", "../../../node_modules/@babel/runtime/helpers/esm/typeof.js", "../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js", "../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js", "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js", "../../../node_modules/mathjs/lib/esm/function/algebra/simplify/util.js", "../../../node_modules/mathjs/lib/esm/function/algebra/simplify/simplifyConstant.js", "../../../node_modules/mathjs/lib/esm/function/algebra/simplify.js", "../../../node_modules/mathjs/lib/esm/function/algebra/simplifyCore.js", "../../../node_modules/mathjs/lib/esm/function/algebra/derivative.js", "../../../node_modules/mathjs/lib/esm/function/algebra/rationalize.js", "../../../node_modules/decimal.js/decimal.mjs", "../../../node_modules/mathjs/lib/esm/utils/switch.js", "../../../node_modules/mathjs/lib/esm/utils/collection.js", "../../../node_modules/mathjs/lib/esm/function/arithmetic/ceil.js", "../../../node_modules/mathjs/lib/esm/function/arithmetic/fix.js", "../../../node_modules/mathjs/lib/esm/function/arithmetic/floor.js", "../../../node_modules/mathjs/lib/esm/function/arithmetic/hypot.js", "../../../node_modules/mathjs/lib/esm/function/combinatorics/stirlingS2.js", "../../../node_modules/mathjs/lib/esm/function/combinatorics/bellNumbers.js", "../../../node_modules/mathjs/lib/esm/function/combinatorics/catalan.js", "../../../node_modules/mathjs/lib/esm/function/combinatorics/composition.js", "../../../node_modules/mathjs/lib/esm/version.js", "../../../node_modules/mathjs/lib/esm/utils/lruQueue.js", "../../../node_modules/mathjs/lib/esm/utils/function.js", "../../../node_modules/mathjs/lib/esm/utils/bignumber/constants.js", "../../../node_modules/mathjs/lib/esm/constants.js", "../../../node_modules/mathjs/lib/esm/type/number.js", "../../../node_modules/mathjs/lib/esm/type/string.js", "../../../node_modules/mathjs/lib/esm/type/boolean.js", "../../../node_modules/mathjs/lib/esm/expression/function/parser.js", "../../../node_modules/mathjs/lib/esm/expression/keywords.js", "../../../node_modules/mathjs/lib/esm/expression/node/Node.js", "../../../node_modules/mathjs/lib/esm/expression/transform/utils/errorTransform.js", "../../../node_modules/mathjs/lib/esm/expression/node/utils/access.js", "../../../node_modules/mathjs/lib/esm/expression/node/AccessorNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/ArrayNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/utils/assign.js", "../../../node_modules/mathjs/lib/esm/expression/operators.js", "../../../node_modules/mathjs/lib/esm/expression/node/AssignmentNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/BlockNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/ConditionalNode.js", "../../../node_modules/escape-latex/dist/index.js", "../../../node_modules/mathjs/lib/esm/utils/latex.js", "../../../node_modules/mathjs/lib/esm/expression/node/ConstantNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/FunctionAssignmentNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/IndexNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/ObjectNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/OperatorNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/ParenthesisNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/RangeNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/RelationalNode.js", "../../../node_modules/mathjs/lib/esm/expression/node/SymbolNode.js", "../../../node_modules/mathjs/lib/esm/utils/scope.js", "../../../node_modules/mathjs/lib/esm/expression/node/FunctionNode.js", "../../../node_modules/mathjs/lib/esm/expression/parse.js", "../../../node_modules/mathjs/lib/esm/expression/function/compile.js", "../../../node_modules/mathjs/lib/esm/expression/function/evaluate.js", "../../../node_modules/mathjs/lib/esm/expression/Parser.js", "../../../node_modules/mathjs/lib/esm/function/matrix/apply.js", "../../../node_modules/mathjs/lib/esm/function/matrix/filter.js", "../../../node_modules/mathjs/lib/esm/function/matrix/forEach.js", "../../../node_modules/mathjs/lib/esm/function/matrix/map.js", "../../../node_modules/mathjs/lib/esm/function/matrix/range.js", "../../../node_modules/mathjs/lib/esm/function/matrix/size.js", "../../../node_modules/mathjs/lib/esm/function/matrix/partitionSelect.js", "../../../node_modules/mathjs/lib/esm/function/probability/combinationsWithRep.js", "../../../node_modules/mathjs/lib/esm/function/probability/factorial.js", "../../../node_modules/mathjs/lib/esm/function/probability/multinomial.js", "../../../node_modules/mathjs/lib/esm/function/probability/permutations.js", "../../../node_modules/seedrandom/lib/alea.js", "../../../node_modules/seedrandom/lib/xor128.js", "../../../node_modules/seedrandom/lib/xorwow.js", "../../../node_modules/seedrandom/lib/xorshift7.js", "../../../node_modules/seedrandom/lib/xor4096.js", "../../../node_modules/seedrandom/lib/tychei.js", "(disabled):crypto", "../../../node_modules/seedrandom/seedrandom.js", "../../../node_modules/seedrandom/index.js", "../../../node_modules/mathjs/lib/esm/function/probability/util/seededRNG.js", "../../../node_modules/mathjs/lib/esm/function/probability/pickRandom.js", "../../../node_modules/mathjs/lib/esm/function/probability/util/randomMatrix.js", "../../../node_modules/mathjs/lib/esm/function/probability/random.js", "../../../node_modules/mathjs/lib/esm/function/probability/randomInt.js", "../../../node_modules/mathjs/lib/esm/function/relational/equalScalar.js", "../../../node_modules/mathjs/lib/esm/function/relational/compare.js", "../../../node_modules/javascript-natural-sort/naturalSort.js", "../../../node_modules/mathjs/lib/esm/function/relational/compareNatural.js", "../../../node_modules/mathjs/lib/esm/function/relational/compareText.js", "../../../node_modules/mathjs/lib/esm/function/relational/equal.js", "../../../node_modules/mathjs/lib/esm/function/relational/equalText.js", "../../../node_modules/mathjs/lib/esm/function/relational/smaller.js", "../../../node_modules/mathjs/lib/esm/function/relational/smallerEq.js", "../../../node_modules/mathjs/lib/esm/function/relational/larger.js", "../../../node_modules/mathjs/lib/esm/function/relational/largerEq.js", "../../../node_modules/mathjs/lib/esm/function/relational/deepEqual.js", "../../../node_modules/mathjs/lib/esm/function/relational/unequal.js", "../../../node_modules/mathjs/lib/esm/function/special/erf.js", "../../../node_modules/mathjs/lib/esm/function/statistics/mode.js", "../../../node_modules/mathjs/lib/esm/function/statistics/utils/improveErrorMessage.js", "../../../node_modules/mathjs/lib/esm/function/statistics/prod.js", "../../../node_modules/mathjs/lib/esm/function/statistics/max.js", "../../../node_modules/mathjs/lib/esm/function/statistics/min.js", "../../../node_modules/mathjs/lib/esm/function/statistics/sum.js", "../../../node_modules/mathjs/lib/esm/function/statistics/cumsum.js", "../../../node_modules/mathjs/lib/esm/function/statistics/mean.js", "../../../node_modules/mathjs/lib/esm/function/statistics/median.js", "../../../node_modules/mathjs/lib/esm/function/statistics/mad.js", "../../../node_modules/mathjs/lib/esm/function/statistics/variance.js", "../../../node_modules/mathjs/lib/esm/function/statistics/quantileSeq.js", "../../../node_modules/mathjs/lib/esm/function/statistics/std.js", "../../../node_modules/mathjs/lib/esm/function/string/format.js", "../../../node_modules/mathjs/lib/esm/function/string/print.js", "../../../node_modules/mathjs/lib/esm/expression/transform/apply.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/utils/compileInlineExpression.js", "../../../node_modules/mathjs/lib/esm/expression/transform/filter.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/forEach.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/map.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/utils/lastDimToZeroBase.js", "../../../node_modules/mathjs/lib/esm/expression/transform/max.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/mean.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/min.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/range.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/std.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/sum.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/cumsum.transform.js", "../../../node_modules/mathjs/lib/esm/expression/transform/variance.transform.js", "../../../node_modules/mathjs/lib/esm/function/utils/clone.js", "../../../node_modules/mathjs/lib/esm/function/utils/isNumeric.js", "../../../node_modules/mathjs/lib/esm/function/utils/hasNumericValue.js", "../../../node_modules/mathjs/lib/esm/function/utils/typeOf.js", "../../../node_modules/mathjs/lib/esm/function/utils/isPrime.js", "../../../node_modules/mathjs/lib/esm/function/utils/numeric.js", "../../../node_modules/mathjs/lib/esm/json/reviver.js", "../../../node_modules/mathjs/lib/esm/json/replacer.js", "../../../node_modules/mathjs/lib/esm/factoriesNumber.js", "../../../node_modules/mathjs/lib/esm/entry/pureFunctionsNumber.generated.js", "../../../node_modules/mathjs/lib/esm/entry/impureFunctionsNumber.generated.js", "../../../node_modules/mathjs/lib/esm/entry/typeChecks.js", "../../../node_modules/mathjs/lib/esm/entry/dependenciesNumber.generated.js", "../../../node_modules/mathjs/lib/esm/entry/mainNumber.js", "../../../node_modules/mathjs/lib/esm/number.js", "../../javascript/utils.js", "../../javascript/channels/targets/indices.js", "../../javascript/channels/targets/shows.js", "../../javascript/channels/targets/show_news.js", "../../javascript/channels/properties/filters.js", "../../javascript/channels/properties/typs.js", "../../javascript/channels/notifications_channel.js", "../../../node_modules/filepond/dist/filepond.js", "../../javascript/update_additional_info.js", "../../../node_modules/dayjs/dayjs.min.js", "../../../node_modules/dayjs/plugin/customParseFormat.js", "../../javascript/add.js", "../../javascript/delete.js", "../../javascript/update_pozicia.js", "../../../node_modules/html5sortable/dist/html5sortable.es.js", "../../javascript/df_polozkas.js", "../../../node_modules/@interactjs/utils/isWindow.ts", "../../../node_modules/@interactjs/utils/window.ts", "../../../node_modules/@interactjs/utils/is.ts", "../../../node_modules/@interactjs/actions/drag/plugin.ts", "../../../node_modules/@interactjs/utils/domObjects.ts", "../../../node_modules/@interactjs/utils/browser.ts", "../../../node_modules/@interactjs/utils/domUtils.ts", "../../../node_modules/@interactjs/utils/extend.ts", "../../../node_modules/@interactjs/utils/rect.ts", "../../../node_modules/@interactjs/utils/getOriginXY.ts", "../../../node_modules/@interactjs/utils/normalizeListeners.ts", "../../../node_modules/@interactjs/utils/hypot.ts", "../../../node_modules/@interactjs/utils/pointerExtend.ts", "../../../node_modules/@interactjs/utils/pointerUtils.ts", "../../../node_modules/@interactjs/core/BaseEvent.ts", "../../../node_modules/@interactjs/utils/arr.ts", "../../../node_modules/@interactjs/actions/drop/DropEvent.ts", "../../../node_modules/@interactjs/actions/drop/plugin.ts", "../../../node_modules/@interactjs/actions/gesture/plugin.ts", "../../../node_modules/@interactjs/actions/resize/plugin.ts", "../../../node_modules/@interactjs/utils/raf.ts", "../../../node_modules/@interactjs/actions/plugin.ts", "../../../node_modules/@interactjs/auto-scroll/plugin.ts", "../../../node_modules/@interactjs/utils/misc.ts", "../../../node_modules/@interactjs/auto-start/InteractableMethods.ts", "../../../node_modules/@interactjs/auto-start/base.ts", "../../../node_modules/@interactjs/auto-start/dragAxis.ts", "../../../node_modules/@interactjs/auto-start/hold.ts", "../../../node_modules/@interactjs/auto-start/plugin.ts", "../../../node_modules/@interactjs/core/interactablePreventDefault.ts", "../../../node_modules/@interactjs/utils/isNonNativeEvent.ts", "../../../node_modules/@interactjs/utils/clone.ts", "../../../node_modules/@interactjs/modifiers/Modification.ts", "../../../node_modules/@interactjs/modifiers/base.ts", "../../../node_modules/@interactjs/core/options.ts", "../../../node_modules/@interactjs/core/InteractEvent.ts", "../../../node_modules/@interactjs/core/PointerInfo.ts", "../../../node_modules/@interactjs/core/Interaction.ts", "../../../node_modules/@interactjs/offset/plugin.ts", "../../../node_modules/@interactjs/inertia/plugin.ts", "../../../node_modules/@interactjs/core/Eventable.ts", "../../../node_modules/@interactjs/core/events.ts", "../../../node_modules/@interactjs/core/interactionFinder.ts", "../../../node_modules/@interactjs/core/interactions.ts", "../../../node_modules/@interactjs/core/Interactable.ts", "../../../node_modules/@interactjs/core/InteractableSet.ts", "../../../node_modules/@interactjs/core/scope.ts", "../../../node_modules/@interactjs/core/InteractStatic.ts", "../../../node_modules/@interactjs/interact/index.ts", "../../../node_modules/@interactjs/snappers/edgeTarget.ts", "../../../node_modules/@interactjs/snappers/elements.ts", "../../../node_modules/@interactjs/snappers/grid.ts", "../../../node_modules/@interactjs/snappers/plugin.ts", "../../../node_modules/@interactjs/modifiers/aspectRatio.ts", "../../../node_modules/@interactjs/modifiers/noop.ts", "../../../node_modules/@interactjs/modifiers/restrict/pointer.ts", "../../../node_modules/@interactjs/modifiers/restrict/edges.ts", "../../../node_modules/@interactjs/modifiers/restrict/rect.ts", "../../../node_modules/@interactjs/modifiers/restrict/size.ts", "../../../node_modules/@interactjs/modifiers/snap/pointer.ts", "../../../node_modules/@interactjs/modifiers/snap/size.ts", "../../../node_modules/@interactjs/modifiers/snap/edges.ts", "../../../node_modules/@interactjs/modifiers/all.ts", "../../../node_modules/@interactjs/modifiers/plugin.ts", "../../../node_modules/@interactjs/pointer-events/PointerEvent.ts", "../../../node_modules/@interactjs/pointer-events/base.ts", "../../../node_modules/@interactjs/pointer-events/holdRepeat.ts", "../../../node_modules/@interactjs/pointer-events/interactableTargets.ts", "../../../node_modules/@interactjs/pointer-events/plugin.ts", "../../../node_modules/@interactjs/reflow/plugin.ts", "../../../node_modules/interactjs/index.ts", "../../../node_modules/@interactjs/interactjs/index.ts", "../../javascript/delay.js", "../../javascript/form_serializer.js", "../../../node_modules/dayjs/plugin/quarterOfYear.js", "../../../node_modules/file-saver/src/FileSaver.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../javascript/channels/index.js", "../../javascript/channels/reloader_channel.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/account_assignments_index_controller.ts", "../../javascript/controllers/agent_global_prompts_index_controller.ts", "../../javascript/controllers/agent_local_prompts_controller.ts", "../../javascript/controllers/ai_accounting_wrapper_controller.ts", "../../javascript/controllers/attachment_controller.ts", "../../javascript/filepond.js", "../../../node_modules/filepond/locale/sk-sk.js", "../../javascript/controllers/bank_ucets_controller.js", "../../javascript/controllers/bank_vypises_controller.js", "../../javascript/controllers/bank_vypises_index_controller.js", "../../javascript/controllers/canvas_controller.js", "../../javascript/controllers/close_offcanvas_controller.js", "../../javascript/controllers/danovy_pomer_selectbox_controller.ts", "../../javascript/controllers/danovy_pomers_index_controller.ts", "../../javascript/controllers/df_polozkas_controller.ts", "../../javascript/controllers/differences_controller.js", "../../javascript/controllers/dodaci_lists_controller.ts", "../../javascript/fill_ciselny_rad_on_evid_change.js", "../../javascript/controllers/dodaci_lists_index_controller.ts", "../../javascript/controllers/dodaci_lists_new_controller.ts", "../../javascript/controllers/form_changes_controller.ts", "../../javascript/controllers/dodaci_lists_show_controller.ts", "../../javascript/controllers/dodavatels_controller.js", "../../../node_modules/vanillajs-datepicker/js/lib/utils.js", "../../../node_modules/vanillajs-datepicker/js/lib/date.js", "../../../node_modules/vanillajs-datepicker/js/lib/date-format.js", "../../../node_modules/vanillajs-datepicker/js/lib/dom.js", "../../../node_modules/vanillajs-datepicker/js/lib/event.js", "../../../node_modules/vanillajs-datepicker/js/i18n/base-locales.js", "../../../node_modules/vanillajs-datepicker/js/options/defaultOptions.js", "../../../node_modules/vanillajs-datepicker/js/options/processOptions.js", "../../../node_modules/vanillajs-datepicker/js/options/shortcutKeys.js", "../../../node_modules/vanillajs-datepicker/js/picker/templates/pickerTemplate.js", "../../../node_modules/vanillajs-datepicker/js/picker/templates/daysTemplate.js", "../../../node_modules/vanillajs-datepicker/js/picker/templates/weekNumbersTemplate.js", "../../../node_modules/vanillajs-datepicker/js/picker/views/View.js", "../../../node_modules/vanillajs-datepicker/js/picker/views/DaysView.js", "../../../node_modules/vanillajs-datepicker/js/picker/views/MonthsView.js", "../../../node_modules/vanillajs-datepicker/js/picker/views/YearsView.js", "../../../node_modules/vanillajs-datepicker/js/events/functions.js", "../../../node_modules/vanillajs-datepicker/js/events/pickerListeners.js", "../../../node_modules/vanillajs-datepicker/js/picker/Picker.js", "../../../node_modules/vanillajs-datepicker/js/events/elementListeners.js", "../../../node_modules/vanillajs-datepicker/js/events/otherListeners.js", "../../../node_modules/vanillajs-datepicker/js/Datepicker.js", "../../javascript/datepicker/sk.js", "../../javascript/vanillajs_datepicker.js", "../../javascript/controllers/dodavatels_index_controller.js", "../../javascript/controllers/dodavatels_show_controller.js", "../../javascript/controllers/dosla_fakturas_controller.js", "../../javascript/controllers/dosla_fakturas_index_controller.js", "../../javascript/controllers/dosla_fakturas_new_controller.js", "../../javascript/controllers/dosla_fakturas_show_controller.js", "../../javascript/controllers/dosla_zalohova_fakturas_controller.ts", "../../javascript/controllers/dosla_zalohova_fakturas_index_controller.js", "../../javascript/controllers/dosla_zalohova_fakturas_new_controller.ts", "../../javascript/controllers/dp_mvs_controller.js", "../../javascript/controllers/dp_mvs_show_controller.js", "../../javascript/reader.js", "../../javascript/controllers/dp_ppos_index_controller.ts", "../../javascript/controllers/statements_index_controller.ts", "../../javascript/controllers/evidencia_dphs_index_controller.js", "../../javascript/controllers/fakt_polozkies_controller.ts", "../../javascript/controllers/fakt_sklad_polozkies_controller.ts", "../../javascript/controllers/filters_controller.js", "../../javascript/controllers/filters_new_controller.js", "../../javascript/controllers/filters_show_controller.js", "../../javascript/controllers/firma_public_invoicing_controller.ts", "../../javascript/controllers/firma_publics_new_controller.js", "../../javascript/controllers/firmas_controller.ts", "../../../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", "../../javascript/controllers/firmas_show_controller.js", "../../javascript/controllers/fsp_container_controller.ts", "../../javascript/controllers/hk_filters_controller.js", "../../javascript/controllers/hk_filters_new_controller.js", "../../javascript/controllers/hk_filters_show_controller.js", "../../javascript/controllers/hlavna_knihas_import_controller.ts", "../../javascript/controllers/hlavna_knihas_index_controller.js", "../../javascript/controllers/home_index_controller.ts", "../../javascript/controllers/kontrolny_vykaz_dphs_index_controller.js", "../../javascript/controllers/lists_controller.js", "../../javascript/fill_evid_on_okruh_change.js", "../../javascript/next_until.js", "../../javascript/controllers/make_vykaz_polozkas_sortable_controller.ts", "../../javascript/controllers/mass_changes_numbering_controller.ts", "../../javascript/controllers/mass_changes_type_controller.ts", "../../javascript/controllers/messages_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/motorove_vozidlos_controller.js", "../../javascript/controllers/motorove_vozidlos_index_controller.js", "../../javascript/controllers/motorove_vozidlos_show_controller.js", "../../javascript/controllers/objednavkas_controller.ts", "../../javascript/controllers/objednavkas_fakt_sklad_polozkies_index_controller.ts", "../../javascript/fakt_sklad_polozkies_utils.ts", "../../javascript/controllers/objednavkas_index_controller.ts", "../../javascript/controllers/objednavkas_new_controller.ts", "../../javascript/controllers/objednavkas_show_controller.ts", "../../javascript/controllers/odoslana_fakturas_assigned_advances_controller.js", "../../javascript/controllers/odoslana_fakturas_assigned_invoices_controller.js", "../../javascript/controllers/odoslana_fakturas_controller.js", "../../javascript/controllers/odoslana_fakturas_index_controller.js", "../../javascript/controllers/odoslana_fakturas_new_controller.ts", "../../javascript/controllers/odoslana_fakturas_show_controller.js", "../../javascript/controllers/odoslana_zalohova_fakturas_controller.js", "../../javascript/controllers/stock_with_calc_pop_up_controller.js", "../../javascript/controllers/odoslana_zalohova_fakturas_index_controller.js", "../../javascript/controllers/odoslana_zalohova_fakturas_new_controller.ts", "../../javascript/controllers/odoslana_zalohova_fakturas_show_controller.js", "../../javascript/controllers/of_davkas_controller.js", "../../javascript/controllers/of_davkas_index_controller.js", "../../javascript/controllers/of_davkas_show_controller.js", "../../javascript/controllers/of_emails_show_controller.ts", "../../javascript/controllers/of_fakt_polozkies_controller.ts", "../../javascript/controllers/opf_emails_show_controller.ts", "../../javascript/controllers/opf_fakt_polozkies_controller.ts", "../../javascript/controllers/paginations_controller.js", "../../javascript/controllers/partners_controller.ts", "../../javascript/controllers/partners_index_controller.js", "../../javascript/controllers/partners_merge_partners_controller.js", "../../javascript/controllers/partners_new_controller.js", "../../javascript/controllers/partners_show_controller.js", "../../javascript/controllers/pokladnicny_doklads_controller.js", "../../javascript/controllers/pokladnicny_doklads_index_controller.js", "../../javascript/controllers/pokladnicny_doklads_new_controller.js", "../../javascript/controllers/pokladnicny_doklads_show_controller.js", "../../javascript/controllers/pop_up_controller.js", "../../javascript/controllers/predajkas_controller.ts", "../../javascript/controllers/predajkas_new_controller.ts", "../../javascript/controllers/predajkas_show_controller.ts", "../../javascript/controllers/prev_prikazs_controller.js", "../../javascript/controllers/prev_prikazs_index_controller.js", "../../javascript/controllers/prijemka_vydajka_polozkas_controller.ts", "../../javascript/controllers/prijemka_vydajkas_controller.ts", "../../javascript/controllers/prijemka_vydajkas_fakt_sklad_polozkies_index_controller.ts", "../../javascript/controllers/prijemka_vydajkas_index_controller.ts", "../../javascript/controllers/prijemka_vydajkas_new_controller.ts", "../../javascript/controllers/prijemka_vydajkas_show_controller.ts", "../../javascript/controllers/print_settings_controller.ts", "../../javascript/controllers/pvp_container_controller.ts", "../../javascript/controllers/recaptcha_controller.js", "../../javascript/controllers/record_counting_controller.ts", "../../javascript/controllers/remote_document_controller.ts", "../../javascript/controllers/saldokontos_index_controller.js", "../../javascript/controllers/sk_kategs_index_controller.ts", "../../javascript/controllers/sk_quick_search_controller.ts", "../../javascript/controllers/skladova_kartas_controller.ts", "../../javascript/controllers/skladova_kartas_index_controller.ts", "../../javascript/controllers/skladova_kartas_show_controller.ts", "../../javascript/controllers/sklads_controller.ts", "../../javascript/controllers/sklads_index_controller.ts", "../../javascript/controllers/sklads_show_controller.js", "../../javascript/controllers/stock_pop_up_controller.js", "../../javascript/controllers/switch_active_company_controller.ts", "../../javascript/controllers/tax_liability_controller.js", "../../javascript/controllers/toasts_controller.js", "../../javascript/controllers/tom_select_controller.js", "../../javascript/controllers/uctovny_denniks_index_controller.js", "../../javascript/controllers/uctovny_doklads_change_accounts_window_controller.js", "../../javascript/controllers/uctovny_doklads_change_flags_window_controller.js", "../../javascript/controllers/uctovny_doklads_change_numbering_controller.ts", "../../javascript/controllers/uctovny_doklads_change_szcp_window_controller.ts", "../../javascript/controllers/uctovny_doklads_controller.js", "../../javascript/controllers/uctovny_doklads_index_controller.js", "../../javascript/controllers/uctovny_doklads_show_controller.js", "../../javascript/controllers/ud_mass_changes_anchor_handler_controller.ts", "../../javascript/controllers/unasigned_controller.js", "../../javascript/controllers/up_emails_controller.js", "../../javascript/controllers/upomienkas_controller.ts", "../../javascript/controllers/upomienkas_index_controller.js", "../../javascript/controllers/upomienkas_show_controller.ts", "../../javascript/controllers/users_controller.js", "../../javascript/controllers/users_index_controller.js", "../../javascript/controllers/users_show_controller.js", "../../javascript/controllers/vanillajs_datepicker_controller.js", "../../javascript/controllers/vykaz_polozkas_controller.ts", "../../javascript/controllers/vykaz_polozkas_show_controller.ts", "../../javascript/controllers/vykaz_statement_export_controller.ts", "../../javascript/controllers/vykazs_index_controller.ts", "../../javascript/controllers/vykazs_list_controller.ts", "../../javascript/controllers/zap_emails_controller.js", "../../javascript/controllers/zapocets_controller.js", "../../javascript/controllers/zapocets_index_controller.js", "../../javascript/controllers/zapocets_new_controller.js", "../../javascript/controllers/zapocets_refresher_controller.js", "../../javascript/controllers/zapocets_show_controller.js", "../../javascript/controllers/zav_emails_controller.js", "../../javascript/controllers/zav_filters_controller.js", "../../javascript/controllers/zav_filters_new_controller.js", "../../javascript/controllers/zav_filters_show_controller.js", "../../javascript/controllers/zav_prijatie_fakturs_index_controller.js", "../../javascript/controllers/zavazoks_controller.js", "../../javascript/controllers/zavazoks_index_controller.js", "../../javascript/controllers/zavazoks_new_controller.js", "../../javascript/controllers/zavazoks_parse_commands_window_controller.ts", "../../javascript/controllers/zavazoks_show_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js", "../../javascript/application.js"],
  "sourcesContent": ["export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        return this.subscriptions.notify(identifier, \"connected\")\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "var adapters = {\n  logger: self.console,\n  WebSocket: self.WebSocket\n};\n\nvar logger = {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now());\n      adapters.logger.log(\"[ActionCable]\", ...messages);\n    }\n  }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this);\n    this.connection = connection;\n    this.reconnectAttempts = 0;\n  }\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now();\n      delete this.stoppedAt;\n      this.startPolling();\n      addEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);\n    }\n  }\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now();\n      this.stopPolling();\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n      logger.log(\"ConnectionMonitor stopped\");\n    }\n  }\n  isRunning() {\n    return this.startedAt && !this.stoppedAt;\n  }\n  recordPing() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\n    this.recordPing();\n    delete this.disconnectedAt;\n    logger.log(\"ConnectionMonitor recorded connect\");\n  }\n  recordDisconnect() {\n    this.disconnectedAt = now();\n    logger.log(\"ConnectionMonitor recorded disconnect\");\n  }\n  startPolling() {\n    this.stopPolling();\n    this.poll();\n  }\n  stopPolling() {\n    clearTimeout(this.pollTimeout);\n  }\n  poll() {\n    this.pollTimeout = setTimeout((() => {\n      this.reconnectIfStale();\n      this.poll();\n    }), this.getPollInterval());\n  }\n  getPollInterval() {\n    const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n    const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n    const jitter = jitterMax * Math.random();\n    return staleThreshold * 1e3 * backoff * (1 + jitter);\n  }\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);\n      this.reconnectAttempts++;\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);\n      } else {\n        logger.log(\"ConnectionMonitor reopening\");\n        this.connection.reopen();\n      }\n    }\n  }\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt;\n  }\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n  }\n  disconnectedRecently() {\n    return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n  }\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout((() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);\n          this.connection.reopen();\n        }\n      }), 200);\n    }\n  }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\n  message_types: {\n    welcome: \"welcome\",\n    disconnect: \"disconnect\",\n    ping: \"ping\",\n    confirmation: \"confirm_subscription\",\n    rejection: \"reject_subscription\"\n  },\n  disconnect_reasons: {\n    unauthorized: \"unauthorized\",\n    invalid_request: \"invalid_request\",\n    server_restart: \"server_restart\"\n  },\n  default_mount_path: \"/cable\",\n  protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\nconst supportedProtocols = protocols.slice(0, protocols.length - 1);\n\nconst indexOf = [].indexOf;\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this);\n    this.consumer = consumer;\n    this.subscriptions = this.consumer.subscriptions;\n    this.monitor = new ConnectionMonitor(this);\n    this.disconnected = true;\n  }\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data));\n      return true;\n    } else {\n      return false;\n    }\n  }\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);\n      return false;\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`);\n      if (this.webSocket) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n      this.installEventHandlers();\n      this.monitor.start();\n      return true;\n    }\n  }\n  close({allowReconnect: allowReconnect} = {\n    allowReconnect: true\n  }) {\n    if (!allowReconnect) {\n      this.monitor.stop();\n    }\n    if (this.isOpen()) {\n      return this.webSocket.close();\n    }\n  }\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`);\n    if (this.isActive()) {\n      try {\n        return this.close();\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error);\n      } finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);\n        setTimeout(this.open, this.constructor.reopenDelay);\n      }\n    } else {\n      return this.open();\n    }\n  }\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol;\n    }\n  }\n  isOpen() {\n    return this.isState(\"open\");\n  }\n  isActive() {\n    return this.isState(\"open\", \"connecting\");\n  }\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n  }\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0;\n  }\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase();\n        }\n      }\n    }\n    return null;\n  }\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this);\n      this.webSocket[`on${eventName}`] = handler;\n    }\n  }\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {};\n    }\n  }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) {\n      return;\n    }\n    const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n    switch (type) {\n     case message_types.welcome:\n      this.monitor.recordConnect();\n      return this.subscriptions.reload();\n\n     case message_types.disconnect:\n      logger.log(`Disconnecting. Reason: ${reason}`);\n      return this.close({\n        allowReconnect: reconnect\n      });\n\n     case message_types.ping:\n      return this.monitor.recordPing();\n\n     case message_types.confirmation:\n      this.subscriptions.confirmSubscription(identifier);\n      return this.subscriptions.notify(identifier, \"connected\");\n\n     case message_types.rejection:\n      return this.subscriptions.reject(identifier);\n\n     default:\n      return this.subscriptions.notify(identifier, \"received\", message);\n    }\n  },\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);\n    this.disconnected = false;\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n      return this.close({\n        allowReconnect: false\n      });\n    }\n  },\n  close(event) {\n    logger.log(\"WebSocket onclose event\");\n    if (this.disconnected) {\n      return;\n    }\n    this.disconnected = true;\n    this.monitor.recordDisconnect();\n    return this.subscriptions.notifyAll(\"disconnected\", {\n      willAttemptReconnect: this.monitor.isRunning()\n    });\n  },\n  error() {\n    logger.log(\"WebSocket onerror event\");\n  }\n};\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key];\n      object[key] = value;\n    }\n  }\n  return object;\n};\n\nclass Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer;\n    this.identifier = JSON.stringify(params);\n    extend(this, mixin);\n  }\n  perform(action, data = {}) {\n    data.action = action;\n    return this.send(data);\n  }\n  send(data) {\n    return this.consumer.send({\n      command: \"message\",\n      identifier: this.identifier,\n      data: JSON.stringify(data)\n    });\n  }\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this);\n  }\n}\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions;\n    this.pendingSubscriptions = [];\n  }\n  guarantee(subscription) {\n    if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n      this.pendingSubscriptions.push(subscription);\n    } else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n    }\n    this.startGuaranteeing();\n  }\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n    this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n  }\n  startGuaranteeing() {\n    this.stopGuaranteeing();\n    this.retrySubscribing();\n  }\n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout);\n  }\n  retrySubscribing() {\n    this.retryTimeout = setTimeout((() => {\n      if (this.subscriptions && typeof this.subscriptions.subscribe === \"function\") {\n        this.pendingSubscriptions.map((subscription => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);\n          this.subscriptions.subscribe(subscription);\n        }));\n      }\n    }), 500);\n  }\n}\n\nclass Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer;\n    this.guarantor = new SubscriptionGuarantor(this);\n    this.subscriptions = [];\n  }\n  create(channelName, mixin) {\n    const channel = channelName;\n    const params = typeof channel === \"object\" ? channel : {\n      channel: channel\n    };\n    const subscription = new Subscription(this.consumer, params, mixin);\n    return this.add(subscription);\n  }\n  add(subscription) {\n    this.subscriptions.push(subscription);\n    this.consumer.ensureActiveConnection();\n    this.notify(subscription, \"initialized\");\n    this.subscribe(subscription);\n    return subscription;\n  }\n  remove(subscription) {\n    this.forget(subscription);\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\");\n    }\n    return subscription;\n  }\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription => {\n      this.forget(subscription);\n      this.notify(subscription, \"rejected\");\n      return subscription;\n    }));\n  }\n  forget(subscription) {\n    this.guarantor.forget(subscription);\n    this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n    return subscription;\n  }\n  findAll(identifier) {\n    return this.subscriptions.filter((s => s.identifier === identifier));\n  }\n  reload() {\n    return this.subscriptions.map((subscription => this.subscribe(subscription)));\n  }\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\n  }\n  notify(subscription, callbackName, ...args) {\n    let subscriptions;\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription);\n    } else {\n      subscriptions = [ subscription ];\n    }\n    return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n  }\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription);\n    }\n  }\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`);\n    this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n  }\n  sendCommand(subscription, command) {\n    const {identifier: identifier} = subscription;\n    return this.consumer.send({\n      command: command,\n      identifier: identifier\n    });\n  }\n}\n\nclass Consumer {\n  constructor(url) {\n    this._url = url;\n    this.subscriptions = new Subscriptions(this);\n    this.connection = new Connection(this);\n  }\n  get url() {\n    return createWebSocketURL(this._url);\n  }\n  send(data) {\n    return this.connection.send(data);\n  }\n  connect() {\n    return this.connection.open();\n  }\n  disconnect() {\n    return this.connection.close({\n      allowReconnect: false\n    });\n  }\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open();\n    }\n  }\n}\n\nfunction createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url();\n  }\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.href = a.href;\n    a.protocol = a.protocol.replace(\"http\", \"ws\");\n    return a.href;\n  } else {\n    return url;\n  }\n}\n\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url);\n}\n\nfunction getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n", "// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n", "export function registerKeyupToShowSubmitButton(e) {\n  if (\n    (e.target.nodeName === 'INPUT' &&\n      !e.target.classList.contains('vanillajs-datepicker')) ||\n    e.target.nodeName === 'TEXTAREA'\n  ) {\n    showSubmitButton(e.target);\n  }\n}\n\nexport function registerChangeToShowSubmitButton(e) {\n  if (\n    e.target.nodeName === 'SELECT' ||\n    (e.target.nodeName === 'INPUT' && e.target.type === 'checkbox') ||\n    e.target.classList.contains('vanillajs-datepicker')\n  ) {\n    showSubmitButton(e.target);\n  }\n}\n\nexport function showSubmitButton(target) {\n  if (\n    target.closest('.modal.show[role=\"dialog\"]') ||\n    target.closest('.attachment')\n  )\n    return;\n\n  if (!document.querySelector('[type=\"submit\"]').classList.contains('hidden'))\n    return;\n\n  if (!target.closest('form[class^=\"new_\"]')) {\n    const visibleButtons = document.querySelectorAll(\n      '.card-header button:not(.hidden):not(.do-not-hide), .card-header a.btn:not(.hidden):not(.do-not-hide), legend a.btn:not(.hidden):not(.do-not-hide), legend button:not(.hidden):not(.do-not-hide), .header__buttons a.btn:not(.hidden):not(.do-not-hide), .header__buttons button:not(.hidden):not(.do-not-hide)'\n    );\n    const hiddenButtons = document.querySelectorAll(\n      '.card-header button.hidden, .card-header a.btn.hidden, legend button.hidden, legend a.btn.hidden, .header__buttons button.hidden, .header__buttons a.btn.hidden'\n    );\n\n    visibleButtons.forEach(button => {\n      if (\n        button.classList.contains('d-none') &&\n        (button.classList.contains('d-sm-block') ||\n          button.classList.contains('d-lg-block') ||\n          button.classList.contains('d-md-block'))\n      ) {\n        button.classList.remove(\n          'd-none',\n          'd-sm-block',\n          'd-lg-block',\n          'd-md-block'\n        );\n      }\n\n      button.classList.add('hidden');\n      button.setAttribute('hidden', 'hidden');\n    });\n\n    hiddenButtons.forEach(button => {\n      button.classList.remove('hidden');\n      button.removeAttribute('hidden');\n    });\n  }\n\n  window.onbeforeunload = function (e) {\n    e = e || window.event;\n\n    if (e) {\n      e.returnValue = 'Sure?';\n    }\n\n    // For Safari\n    return 'Sure?';\n  };\n\n  document.removeEventListener('keyup', registerKeyupToShowSubmitButton, false);\n  document.removeEventListener(\n    'change',\n    registerChangeToShowSubmitButton,\n    false\n  );\n}\n", "/**\n@param {String} url \"/something/:some_id\"\n@param {Object} options\n {\n target: \"target\" // default: \"_blank\"\n parentUrl: \"/parent/url\" // needed to calc where to open new window, default: 700\n fullsreen: true // resize window to fullscreen, default: false\n tab: true // open as a tab next to current ( not as a window ), default: false\n }\n */\nexport function openURL(url, options = {}) {\n  if (\n    window.windowObjectReference != null &&\n    window.windowObjectReference.closed\n  ) {\n    window.windowObjectReference = null;\n  }\n\n  if (window.windowObjectReference == null) {\n    window.windowObjectReference = window.open(\n      url,\n      options.target ? options.target : '_blank',\n      options.tab\n        ? null\n        : `${setWindowDimensions(windowWidth(url), options.fullscreen)},left=${\n            window.screenX + parentWidth(options.parentUrl)\n          },top=${window.screenY === 0 ? 200 : window.screenY - 29}`\n    );\n  } else {\n    if (`/${url}` !== window.windowObjectReference.location.pathname) {\n      window.windowObjectReference.location.href = url;\n      window.windowObjectReference.resizeTo(windowWidth(url), 829);\n      window.windowObjectReference.moveTo(\n        window.screenX + parentWidth(options.parentUrl),\n        window.screenY === 0 ? 200 : window.screenY - 29\n      );\n    }\n\n    window.windowObjectReference.focus();\n  }\n\n  window.windowObjectReference.parent = window;\n\n  // if window should not be referenced, always opened and never be replaced\n  if (options.dereference) window.windowObjectReference = null;\n\n  const button = document.querySelector('#fixed_menu_opened_window');\n  if (button) {\n    button.removeAttribute('hidden');\n  }\n}\n\nfunction setWindowDimensions(width = 700, fullscreen = false, height = 800) {\n  return fullscreen\n    ? `width=${screen.availWidth},height=${screen.availHeight}`\n    : `width=${width},height=${height}`;\n}\n\nfunction windowWidth(url) {\n  let width;\n\n  if (/partners{1}(\\/\\d+|\\/new)?/.test(url)) {\n    width = 730;\n  } else if (\n    /^\\/evids\\/\\d+$/.test(url) ||\n    /^\\/evids\\/\\d+\\/false$/.test(url) ||\n    /uctovne-zaradenies{1}(\\/\\d+|\\/new)?/.test(url)\n  ) {\n    width = 600;\n  } else if (/^\\/evids\\/\\d+\\/true$/.test(url)) {\n    width = 1200;\n  } else if (/(analyt_ucets|synt_ucets){1}(\\/\\d+|\\/new)?/.test(url)) {\n    width = 576;\n  } else if (/(ciselny_rads){1}(\\/\\d+|\\/new)?/.test(url)) {\n    width = 650;\n  } else if (\n    /[a-z]+_filters[\\/\\d]?[\\/new]?/.test(url) ||\n    /zavierkas/.test(url)\n  ) {\n    width = 800;\n  } else if (\n    /(odoslana|dosla|odoslana_zalohova|dosla_zalohova)-fakturas\\/assigned-(invoices|advances)\\/\\d+/.test(\n      url\n    ) ||\n    /(bank-vypises|pokladnicny-doklads)\\/assigned/.test(url) ||\n    /dp_mvs|zav_prijatie_fakturs|prijemka_vydajkas|danovy_pomers/.test(url)\n  ) {\n    width = 1080;\n  } else if (\n    /(dodaci_lists|predajkas|uctovny_doklads|objednavkas|upomienkas|zapocets|zavazoks\\/parse-commands-window){1}(\\/\\d+|\\/new)?/.test(\n      url\n    )\n  ) {\n    width = 1380;\n  } else if (\n    /motorove_vozidlos{1}(\\/\\d+|\\/new)?/.test(url) ||\n    /of_davkas{1}(\\/\\d+|\\/new)?/.test(url)\n  ) {\n    width = 760;\n  } else {\n    width = 700;\n  }\n\n  return width;\n}\n\nfunction parentWidth(parentUrl) {\n  const pathname = parentUrl ? parentUrl.pathname : '';\n  let width;\n\n  if (\n    /(odoslana_fakturas|odoslana_zalohova_fakturas|dosla_fakturas|dosla_zalohova_fakturas|uctovny_rozvrhs|bank_vypises|bank_ucets|pokladnicny_doklads|mass-changes|bv_typs|pd_typs|of_emails|zavazoks|skladova_kartas){1}(\\/\\d+|\\/new)?/.test(\n      pathname\n    )\n  ) {\n    width = 700;\n  } else if (\n    /(dodaci_lists|predajkas|uctovny_doklads|objednavkas|upomienkas|zapocets){1}(\\/\\d+|\\/new)?/.test(\n      pathname\n    )\n  ) {\n    width = 1380;\n  } else if (\n    /dp_mvs|prijemka_vydajkas|zav_prijatie_fakturs{1}(\\/\\d+|\\/new)?/.test(\n      pathname\n    )\n  ) {\n    width = 1080;\n  } else if (/motorove_vozidlos{1}(\\/\\d+|\\/new)?/.test(pathname)) {\n    width = 1080;\n  } else if (/of_davkas{1}(\\/\\d+|\\/new)?/.test(pathname)) {\n    width = 760;\n  } else {\n    width = 200;\n  }\n\n  return width;\n}\n", "export function showToastMessage(message, args = {}) {\n  if (\n    args.type &&\n    !['bg-success', 'bg-warning', 'bg-danger'].includes(args.type)\n  ) {\n    throw `Unsupported toast type (${args.type})`;\n  }\n\n  const parent = document.querySelector('#alert_toasts');\n\n  let toast;\n  if (\n    typeof args.autohide === 'undefined' ||\n    (typeof args.autohide === 'boolean' && args.autohide === true) ||\n    [...parent.querySelectorAll('.toast[data-bs-autohide=false]')].length === 0\n  ) {\n    toast = document.createElement('div');\n    toast.innerHTML = parent.dataset.template;\n    parent.appendChild(toast);\n    toast.replaceWith(...toast.childNodes); // drop div wrapper\n    toast = [...parent.querySelectorAll('.toast')].pop();\n  } else {\n    toast = [\n      ...parent.querySelectorAll('.toast[data-bs-autohide=false]')\n    ].pop();\n  }\n\n  toast.querySelector('.toast-header .time').innerHTML =\n    new Date().toLocaleTimeString();\n  toast.querySelector('.toast-body').innerHTML = message;\n\n  toast.classList.forEach(_class => {\n    if (_class.startsWith('bg-')) {\n      toast.classList.remove(_class);\n    }\n  });\n\n  toast.classList.add(args.type || 'bg-success');\n\n  console.log('argts.type: ', args.type);\n\n  if (args.type && args.type == 'bg-warning') {\n    toast.classList.remove('text-white');\n    toast.classList.add('text-grey');\n  }\n\n  toast.dataset.bsAutohide = args.autohide ?? true;\n\n  const myToast = window.bootstrap.Toast.getOrCreateInstance(toast);\n\n  if (myToast._element.classList.contains('d-none')) {\n    myToast._element.classList.remove('d-none');\n  }\n\n  if (!myToast.isShown()) {\n    myToast.show();\n  }\n\n  hideIfProgressed(args, message, myToast);\n}\n\nconst hideIfProgressed = (args, message, myToast) => {\n  const { autohide } = args;\n\n  if (autohide !== false || !message.includes('progress-bar')) return;\n\n  const progress = document.createElement('div');\n  progress.innerHTML = message;\n\n  const progressBar = progress.querySelector('.progress-bar');\n  const values = new Set(\n    progressBar.textContent.split(' / ').map(i => i.trim())\n  );\n\n  // if x / x + y   leave open\n  // if x / x       hide\n  if (values.size === 1) myToast.hide();\n};\n", "/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = this._events[event] || [];\n\t\t\tevent_array.push(fct);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1){\n\t\t\t\tdelete this._events[event];\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst event_array = this._events[event];\n\t\t\tif( event_array === undefined ) return;\n\n\t\t\tevent_array.splice(event_array.indexOf(fct), 1);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = self._events[event];\n\t\t\tif( event_array === undefined ) return;\n\t\t\tevent_array.forEach(fct => {\n\t\t\t\tfct.apply(self, args );\n\t\t\t});\n\n\t\t});\n\t}\n};\n", "/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n */\nexport const arrayToPattern = (chars) => {\n    chars = chars.filter(Boolean);\n    if (chars.length < 2) {\n        return chars[0] || '';\n    }\n    return (maxValueLength(chars) == 1) ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n};\nexport const sequencePattern = (array) => {\n    if (!hasDuplicates(array)) {\n        return array.join('');\n    }\n    let pattern = '';\n    let prev_char_count = 0;\n    const prev_pattern = () => {\n        if (prev_char_count > 1) {\n            pattern += '{' + prev_char_count + '}';\n        }\n    };\n    array.forEach((char, i) => {\n        if (char === array[i - 1]) {\n            prev_char_count++;\n            return;\n        }\n        prev_pattern();\n        pattern += char;\n        prev_char_count = 1;\n    });\n    prev_pattern();\n    return pattern;\n};\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n */\nexport const setToPattern = (chars) => {\n    let array = Array.from(chars);\n    return arrayToPattern(array);\n};\n/**\n * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n */\nexport const hasDuplicates = (array) => {\n    return (new Set(array)).size !== array.length;\n};\n/**\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n */\nexport const escape_regex = (str) => {\n    return (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n/**\n * Return the max length of array values\n */\nexport const maxValueLength = (array) => {\n    return array.reduce((longest, value) => Math.max(longest, unicodeLength(value)), 0);\n};\nexport const unicodeLength = (str) => {\n    return Array.from(str).length;\n};\n//# sourceMappingURL=regex.js.map", "/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n */\nexport const allSubstrings = (input) => {\n    if (input.length === 1)\n        return [[input]];\n    let result = [];\n    const start = input.substring(1);\n    const suba = allSubstrings(start);\n    suba.forEach(function (subresult) {\n        let tmp = subresult.slice(0);\n        tmp[0] = input.charAt(0) + tmp[0];\n        result.push(tmp);\n        tmp = subresult.slice(0);\n        tmp.unshift(input.charAt(0));\n        result.push(tmp);\n    });\n    return result;\n};\n//# sourceMappingURL=strings.js.map", "import { setToPattern, arrayToPattern, escape_regex, sequencePattern } from \"./regex.js\";\nimport { allSubstrings } from \"./strings.js\";\nexport const code_points = [[0, 65535]];\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\nexport let unicode_map;\nlet multi_char_reg;\nconst max_char_length = 3;\nconst latin_convert = {};\nconst latin_condensed = {\n    '/': '\u2044\u2215',\n    '0': '\u07C0',\n    \"a\": \"\u2C65\u0250\u0251\",\n    \"aa\": \"\uA733\",\n    \"ae\": \"\u00E6\u01FD\u01E3\",\n    \"ao\": \"\uA735\",\n    \"au\": \"\uA737\",\n    \"av\": \"\uA739\uA73B\",\n    \"ay\": \"\uA73D\",\n    \"b\": \"\u0180\u0253\u0183\",\n    \"c\": \"\uA73F\u0188\u023C\u2184\",\n    \"d\": \"\u0111\u0257\u0256\u1D05\u018C\uABB7\u0501\u0266\",\n    \"e\": \"\u025B\u01DD\u1D07\u0247\",\n    \"f\": \"\uA77C\u0192\",\n    \"g\": \"\u01E5\u0260\uA7A1\u1D79\uA77F\u0262\",\n    \"h\": \"\u0127\u2C68\u2C76\u0265\",\n    \"i\": \"\u0268\u0131\",\n    \"j\": \"\u0249\u0237\",\n    \"k\": \"\u0199\u2C6A\uA741\uA743\uA745\uA7A3\",\n    \"l\": \"\u0142\u019A\u026B\u2C61\uA749\uA747\uA781\u026D\",\n    \"m\": \"\u0271\u026F\u03FB\",\n    \"n\": \"\uA7A5\u019E\u0272\uA791\u1D0E\u043B\u0509\",\n    \"o\": \"\u00F8\u01FF\u0254\u0275\uA74B\uA74D\u1D11\",\n    \"oe\": \"\u0153\",\n    \"oi\": \"\u01A3\",\n    \"oo\": \"\uA74F\",\n    \"ou\": \"\u0223\",\n    \"p\": \"\u01A5\u1D7D\uA751\uA753\uA755\u03C1\",\n    \"q\": \"\uA757\uA759\u024B\",\n    \"r\": \"\u024D\u027D\uA75B\uA7A7\uA783\",\n    \"s\": \"\u00DF\u023F\uA7A9\uA785\u0282\",\n    \"t\": \"\u0167\u01AD\u0288\u2C66\uA787\",\n    \"th\": \"\u00FE\",\n    \"tz\": \"\uA729\",\n    \"u\": \"\u0289\",\n    \"v\": \"\u028B\uA75F\u028C\",\n    \"vy\": \"\uA761\",\n    \"w\": \"\u2C73\",\n    \"y\": \"\u01B4\u024F\u1EFF\",\n    \"z\": \"\u01B6\u0225\u0240\u2C6C\uA763\",\n    \"hv\": \"\u0195\"\n};\nfor (let latin in latin_condensed) {\n    let unicode = latin_condensed[latin] || '';\n    for (let i = 0; i < unicode.length; i++) {\n        let char = unicode.substring(i, i + 1);\n        latin_convert[char] = latin;\n    }\n}\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n/**\n * Initialize the unicode_map from the give code point ranges\n */\nexport const initialize = (_code_points) => {\n    if (unicode_map !== undefined)\n        return;\n    unicode_map = generateMap(_code_points || code_points);\n};\n/**\n * Helper method for normalize a string\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n */\nexport const normalize = (str, form = 'NFKD') => str.normalize(form);\n/**\n * Remove accents without reordering string\n * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n */\nexport const asciifold = (str) => {\n    return Array.from(str).reduce(\n    /**\n     * @param {string} result\n     * @param {string} char\n     */\n    (result, char) => {\n        return result + _asciifold(char);\n    }, '');\n};\nexport const _asciifold = (str) => {\n    str = normalize(str)\n        .toLowerCase()\n        .replace(convert_pat, (/** @type {string} */ char) => {\n        return latin_convert[char] || '';\n    });\n    //return str;\n    return normalize(str, 'NFC');\n};\n/**\n * Generate a list of unicode variants from the list of code points\n */\nexport function* generator(code_points) {\n    for (const [code_point_min, code_point_max] of code_points) {\n        for (let i = code_point_min; i <= code_point_max; i++) {\n            let composed = String.fromCharCode(i);\n            let folded = asciifold(composed);\n            if (folded == composed.toLowerCase()) {\n                continue;\n            }\n            // skip when folded is a string longer than 3 characters long\n            // bc the resulting regex patterns will be long\n            // eg:\n            // folded \u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645 length 18 code point 65018\n            // folded \u062C\u0644 \u062C\u0644\u0627\u0644\u0647 length 8 code point 65019\n            if (folded.length > max_char_length) {\n                continue;\n            }\n            if (folded.length == 0) {\n                continue;\n            }\n            yield { folded: folded, composed: composed, code_point: i };\n        }\n    }\n}\n/**\n * Generate a unicode map from the list of code points\n */\nexport const generateSets = (code_points) => {\n    const unicode_sets = {};\n    const addMatching = (folded, to_add) => {\n        /** @type {Set<string>} */\n        const folded_set = unicode_sets[folded] || new Set();\n        const patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n        if (to_add.match(patt)) {\n            return;\n        }\n        folded_set.add(escape_regex(to_add));\n        unicode_sets[folded] = folded_set;\n    };\n    for (let value of generator(code_points)) {\n        addMatching(value.folded, value.folded);\n        addMatching(value.folded, value.composed);\n    }\n    return unicode_sets;\n};\n/**\n * Generate a unicode map from the list of code points\n * ae => (?:(?:ae|\u00C6|\u01FC|\u01E2)|(?:A|\u24B6|\uFF21...)(?:E|\u025B|\u24BA...))\n */\nexport const generateMap = (code_points) => {\n    const unicode_sets = generateSets(code_points);\n    const unicode_map = {};\n    let multi_char = [];\n    for (let folded in unicode_sets) {\n        let set = unicode_sets[folded];\n        if (set) {\n            unicode_map[folded] = setToPattern(set);\n        }\n        if (folded.length > 1) {\n            multi_char.push(escape_regex(folded));\n        }\n    }\n    multi_char.sort((a, b) => b.length - a.length);\n    const multi_char_patt = arrayToPattern(multi_char);\n    multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n    return unicode_map;\n};\n/**\n * Map each element of an array from its folded value to all possible unicode matches\n */\nexport const mapSequence = (strings, min_replacement = 1) => {\n    let chars_replaced = 0;\n    strings = strings.map((str) => {\n        if (unicode_map[str]) {\n            chars_replaced += str.length;\n        }\n        return unicode_map[str] || str;\n    });\n    if (chars_replaced >= min_replacement) {\n        return sequencePattern(strings);\n    }\n    return '';\n};\n/**\n * Convert a short string and split it into all possible patterns\n * Keep a pattern only if min_replacement is met\n *\n * 'abc'\n * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n *\t\t=> ['abc-pattern','ab-c-pattern'...]\n */\nexport const substringsToPattern = (str, min_replacement = 1) => {\n    min_replacement = Math.max(min_replacement, str.length - 1);\n    return arrayToPattern(allSubstrings(str).map((sub_pat) => {\n        return mapSequence(sub_pat, min_replacement);\n    }));\n};\n/**\n * Convert an array of sequences into a pattern\n * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n */\nconst sequencesToPattern = (sequences, all = true) => {\n    let min_replacement = sequences.length > 1 ? 1 : 0;\n    return arrayToPattern(sequences.map((sequence) => {\n        let seq = [];\n        const len = all ? sequence.length() : sequence.length() - 1;\n        for (let j = 0; j < len; j++) {\n            seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n        }\n        return sequencePattern(seq);\n    }));\n};\n/**\n * Return true if the sequence is already in the sequences\n */\nconst inSequences = (needle_seq, sequences) => {\n    for (const seq of sequences) {\n        if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n            continue;\n        }\n        if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n            continue;\n        }\n        let needle_parts = needle_seq.parts;\n        const filter = (part) => {\n            for (const needle_part of needle_parts) {\n                if (needle_part.start === part.start && needle_part.substr === part.substr) {\n                    return false;\n                }\n                if (part.length == 1 || needle_part.length == 1) {\n                    continue;\n                }\n                // check for overlapping parts\n                // a = ['::=','==']\n                // b = ['::','===']\n                // a = ['r','sm']\n                // b = ['rs','m']\n                if (part.start < needle_part.start && part.end > needle_part.start) {\n                    return true;\n                }\n                if (needle_part.start < part.start && needle_part.end > part.start) {\n                    return true;\n                }\n            }\n            return false;\n        };\n        let filtered = seq.parts.filter(filter);\n        if (filtered.length > 0) {\n            continue;\n        }\n        return true;\n    }\n    return false;\n};\nclass Sequence {\n    parts;\n    substrs;\n    start;\n    end;\n    constructor() {\n        this.parts = [];\n        this.substrs = [];\n        this.start = 0;\n        this.end = 0;\n    }\n    add(part) {\n        if (part) {\n            this.parts.push(part);\n            this.substrs.push(part.substr);\n            this.start = Math.min(part.start, this.start);\n            this.end = Math.max(part.end, this.end);\n        }\n    }\n    last() {\n        return this.parts[this.parts.length - 1];\n    }\n    length() {\n        return this.parts.length;\n    }\n    clone(position, last_piece) {\n        let clone = new Sequence();\n        let parts = JSON.parse(JSON.stringify(this.parts));\n        let last_part = parts.pop();\n        for (const part of parts) {\n            clone.add(part);\n        }\n        let last_substr = last_piece.substr.substring(0, position - last_part.start);\n        let clone_last_len = last_substr.length;\n        clone.add({ start: last_part.start, end: last_part.start + clone_last_len, length: clone_last_len, substr: last_substr });\n        return clone;\n    }\n}\n/**\n * Expand a regular expression pattern to include unicode variants\n * \teg /a/ becomes /a\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251A\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F/\n *\n * Issue:\n *  \uFE8A\uFE8B [ '\uFE8A = \\\\u{fe8a}', '\uFE8B = \\\\u{fe8b}' ]\n *\tbecomes:\t\u064A\u0654\u064A\u0654 [ '\u064A = \\\\u{64a}', '\u0654 = \\\\u{654}', '\u064A = \\\\u{64a}', '\u0654 = \\\\u{654}' ]\n *\n *\t\u0130\u0132 = IIJ = \u2161J\n *\n * \t1/2/4\n */\nexport const getPattern = (str) => {\n    initialize();\n    str = asciifold(str);\n    let pattern = '';\n    let sequences = [new Sequence()];\n    for (let i = 0; i < str.length; i++) {\n        let substr = str.substring(i);\n        let match = substr.match(multi_char_reg);\n        const char = str.substring(i, i + 1);\n        const match_str = match ? match[0] : null;\n        // loop through sequences\n        // add either the char or multi_match\n        let overlapping = [];\n        let added_types = new Set();\n        for (const sequence of sequences) {\n            const last_piece = sequence.last();\n            if (!last_piece || last_piece.length == 1 || last_piece.end <= i) {\n                // if we have a multi match\n                if (match_str) {\n                    const len = match_str.length;\n                    sequence.add({ start: i, end: i + len, length: len, substr: match_str });\n                    added_types.add('1');\n                }\n                else {\n                    sequence.add({ start: i, end: i + 1, length: 1, substr: char });\n                    added_types.add('2');\n                }\n            }\n            else if (match_str) {\n                let clone = sequence.clone(i, last_piece);\n                const len = match_str.length;\n                clone.add({ start: i, end: i + len, length: len, substr: match_str });\n                overlapping.push(clone);\n            }\n            else {\n                // don't add char\n                // adding would create invalid patterns: 234 => [2,34,4]\n                added_types.add('3');\n            }\n        }\n        // if we have overlapping\n        if (overlapping.length > 0) {\n            // ['ii','iii'] before ['i','i','iii']\n            overlapping = overlapping.sort((a, b) => {\n                return a.length() - b.length();\n            });\n            for (let clone of overlapping) {\n                // don't add if we already have an equivalent sequence\n                if (inSequences(clone, sequences)) {\n                    continue;\n                }\n                sequences.push(clone);\n            }\n            continue;\n        }\n        // if we haven't done anything unique\n        // clean up the patterns\n        // helps keep patterns smaller\n        // if str = 'r\u20A8\u33A7aarss', pattern will be 446 instead of 655\n        if (i > 0 && added_types.size == 1 && !added_types.has('3')) {\n            pattern += sequencesToPattern(sequences, false);\n            let new_seq = new Sequence();\n            const old_seq = sequences[0];\n            if (old_seq) {\n                new_seq.add(old_seq.last());\n            }\n            sequences = [new_seq];\n        }\n    }\n    pattern += sequencesToPattern(sequences, true);\n    return pattern;\n};\nexport { escape_regex };\n//# sourceMappingURL=index.js.map", "import { asciifold } from '@orchidjs/unicode-variants';\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttr = (obj, name) => {\n    if (!obj)\n        return;\n    return obj[name];\n};\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttrNesting = (obj, name) => {\n    if (!obj)\n        return;\n    var part, names = name.split(\".\");\n    while ((part = names.shift()) && (obj = obj[part]))\n        ;\n    return obj;\n};\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value, token, weight) => {\n    var score, pos;\n    if (!value)\n        return 0;\n    value = value + '';\n    if (token.regex == null)\n        return 0;\n    pos = value.search(token.regex);\n    if (pos === -1)\n        return 0;\n    score = token.string.length / value.length;\n    if (pos === 0)\n        score += 0.5;\n    return score * weight;\n};\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj, key) => {\n    var value = obj[key];\n    if (typeof value == 'function')\n        return value;\n    if (value && !Array.isArray(value)) {\n        obj[key] = [value];\n    }\n};\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object, callback) => {\n    if (Array.isArray(object)) {\n        object.forEach(callback);\n    }\n    else {\n        for (var key in object) {\n            if (object.hasOwnProperty(key)) {\n                callback(object[key], key);\n            }\n        }\n    }\n};\nexport const cmp = (a, b) => {\n    if (typeof a === 'number' && typeof b === 'number') {\n        return a > b ? 1 : (a < b ? -1 : 0);\n    }\n    a = asciifold(a + '').toLowerCase();\n    b = asciifold(b + '').toLowerCase();\n    if (a > b)\n        return 1;\n    if (b > a)\n        return -1;\n    return 0;\n};\n//# sourceMappingURL=utils.js.map", "/**\n * sifter.js\n * Copyright (c) 2013\u20132020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\nimport { scoreValue, getAttr, getAttrNesting, propToArray, iterate, cmp } from \"./utils.js\";\nimport { getPattern, escape_regex } from '@orchidjs/unicode-variants';\nclass Sifter {\n    items; // []|{};\n    settings;\n    /**\n     * Textually searches arrays and hashes of objects\n     * by property (or multiple properties). Designed\n     * specifically for autocomplete.\n     *\n     */\n    constructor(items, settings) {\n        this.items = items;\n        this.settings = settings || { diacritics: true };\n    }\n    ;\n    /**\n     * Splits a search string into an array of individual\n     * regexps to be used to match results.\n     *\n     */\n    tokenize(query, respect_word_boundaries, weights) {\n        if (!query || !query.length)\n            return [];\n        const tokens = [];\n        const words = query.split(/\\s+/);\n        var field_regex;\n        if (weights) {\n            field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n        }\n        words.forEach((word) => {\n            let field_match;\n            let field = null;\n            let regex = null;\n            // look for \"field:query\" tokens\n            if (field_regex && (field_match = word.match(field_regex))) {\n                field = field_match[1];\n                word = field_match[2];\n            }\n            if (word.length > 0) {\n                if (this.settings.diacritics) {\n                    regex = getPattern(word) || null;\n                }\n                else {\n                    regex = escape_regex(word);\n                }\n                if (regex && respect_word_boundaries)\n                    regex = \"\\\\b\" + regex;\n            }\n            tokens.push({\n                string: word,\n                regex: regex ? new RegExp(regex, 'iu') : null,\n                field: field,\n            });\n        });\n        return tokens;\n    }\n    ;\n    /**\n     * Returns a function to be used to score individual results.\n     *\n     * Good matches will have a higher score than poor matches.\n     * If an item is not a match, 0 will be returned by the function.\n     *\n     * @returns {T.ScoreFn}\n     */\n    getScoreFunction(query, options) {\n        var search = this.prepareSearch(query, options);\n        return this._getScoreFunction(search);\n    }\n    /**\n     * @returns {T.ScoreFn}\n     *\n     */\n    _getScoreFunction(search) {\n        const tokens = search.tokens, token_count = tokens.length;\n        if (!token_count) {\n            return function () { return 0; };\n        }\n        const fields = search.options.fields, weights = search.weights, field_count = fields.length, getAttrFn = search.getAttrFn;\n        if (!field_count) {\n            return function () { return 1; };\n        }\n        /**\n         * Calculates the score of an object\n         * against the search query.\n         *\n         */\n        const scoreObject = (function () {\n            if (field_count === 1) {\n                return function (token, data) {\n                    const field = fields[0].field;\n                    return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n                };\n            }\n            return function (token, data) {\n                var sum = 0;\n                // is the token specific to a field?\n                if (token.field) {\n                    const value = getAttrFn(data, token.field);\n                    if (!token.regex && value) {\n                        sum += (1 / field_count);\n                    }\n                    else {\n                        sum += scoreValue(value, token, 1);\n                    }\n                }\n                else {\n                    iterate(weights, (weight, field) => {\n                        sum += scoreValue(getAttrFn(data, field), token, weight);\n                    });\n                }\n                return sum / field_count;\n            };\n        })();\n        if (token_count === 1) {\n            return function (data) {\n                return scoreObject(tokens[0], data);\n            };\n        }\n        if (search.options.conjunction === 'and') {\n            return function (data) {\n                var score, sum = 0;\n                for (let token of tokens) {\n                    score = scoreObject(token, data);\n                    if (score <= 0)\n                        return 0;\n                    sum += score;\n                }\n                return sum / token_count;\n            };\n        }\n        else {\n            return function (data) {\n                var sum = 0;\n                iterate(tokens, (token) => {\n                    sum += scoreObject(token, data);\n                });\n                return sum / token_count;\n            };\n        }\n    }\n    ;\n    /**\n     * Returns a function that can be used to compare two\n     * results, for sorting purposes. If no sorting should\n     * be performed, `null` will be returned.\n     *\n     * @return function(a,b)\n     */\n    getSortFunction(query, options) {\n        var search = this.prepareSearch(query, options);\n        return this._getSortFunction(search);\n    }\n    _getSortFunction(search) {\n        var implicit_score, sort_flds = [];\n        const self = this, options = search.options, sort = (!search.query && options.sort_empty) ? options.sort_empty : options.sort;\n        if (typeof sort == 'function') {\n            return sort.bind(this);\n        }\n        /**\n         * Fetches the specified sort field value\n         * from a search result item.\n         *\n         */\n        const get_field = function (name, result) {\n            if (name === '$score')\n                return result.score;\n            return search.getAttrFn(self.items[result.id], name);\n        };\n        // parse options\n        if (sort) {\n            for (let s of sort) {\n                if (search.query || s.field !== '$score') {\n                    sort_flds.push(s);\n                }\n            }\n        }\n        // the \"$score\" field is implied to be the primary\n        // sort field, unless it's manually specified\n        if (search.query) {\n            implicit_score = true;\n            for (let fld of sort_flds) {\n                if (fld.field === '$score') {\n                    implicit_score = false;\n                    break;\n                }\n            }\n            if (implicit_score) {\n                sort_flds.unshift({ field: '$score', direction: 'desc' });\n            }\n            // without a search.query, all items will have the same score\n        }\n        else {\n            sort_flds = sort_flds.filter((fld) => fld.field !== '$score');\n        }\n        // build function\n        const sort_flds_count = sort_flds.length;\n        if (!sort_flds_count) {\n            return null;\n        }\n        return function (a, b) {\n            var result, field;\n            for (let sort_fld of sort_flds) {\n                field = sort_fld.field;\n                let multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n                result = multiplier * cmp(get_field(field, a), get_field(field, b));\n                if (result)\n                    return result;\n            }\n            return 0;\n        };\n    }\n    ;\n    /**\n     * Parses a search query and returns an object\n     * with tokens and fields ready to be populated\n     * with results.\n     *\n     */\n    prepareSearch(query, optsUser) {\n        const weights = {};\n        var options = Object.assign({}, optsUser);\n        propToArray(options, 'sort');\n        propToArray(options, 'sort_empty');\n        // convert fields to new format\n        if (options.fields) {\n            propToArray(options, 'fields');\n            const fields = [];\n            options.fields.forEach((field) => {\n                if (typeof field == 'string') {\n                    field = { field: field, weight: 1 };\n                }\n                fields.push(field);\n                weights[field.field] = ('weight' in field) ? field.weight : 1;\n            });\n            options.fields = fields;\n        }\n        return {\n            options: options,\n            query: query.toLowerCase().trim(),\n            tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n            total: 0,\n            items: [],\n            weights: weights,\n            getAttrFn: (options.nesting) ? getAttrNesting : getAttr,\n        };\n    }\n    ;\n    /**\n     * Searches through all items and returns a sorted array of matches.\n     *\n     */\n    search(query, options) {\n        var self = this, score, search;\n        search = this.prepareSearch(query, options);\n        options = search.options;\n        query = search.query;\n        // generate result scoring function\n        const fn_score = options.score || self._getScoreFunction(search);\n        // perform search and sort\n        if (query.length) {\n            iterate(self.items, (item, id) => {\n                score = fn_score(item);\n                if (options.filter === false || score > 0) {\n                    search.items.push({ 'score': score, 'id': id });\n                }\n            });\n        }\n        else {\n            iterate(self.items, (_, id) => {\n                search.items.push({ 'score': 1, 'id': id });\n            });\n        }\n        const fn_sort = self._getSortFunction(search);\n        if (fn_sort)\n            search.items.sort(fn_sort);\n        // apply limits\n        search.total = search.items.length;\n        if (typeof options.limit === 'number') {\n            search.items = search.items.slice(0, options.limit);\n        }\n        return search;\n    }\n    ;\n}\nexport { Sifter, scoreValue, getAttr, getAttrNesting, propToArray, iterate, cmp, getPattern };\nexport * from \"./types.js\";\n//# sourceMappingURL=sifter.js.map", "\nimport type TomSelect from './tom-select.ts';\nimport { TomLoadCallback } from './types/index.ts';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n *   'str'     -> 'str'\n *   null      -> ''\n *   undefined -> ''\n *   true      -> '1'\n *   false     -> '0'\n *   0         -> '0'\n *   1         -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number): number | null => {\n\tif( timeout > 0 ){\n\t\treturn window.setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n *   - start\n *   - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n", "\nimport { iterate } from './utils.ts';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\t\\n\\f\\r\\s]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla.ts';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0]!.length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tArray.from(node.childNodes).forEach(element => {\n\t\t\t\thighlightRecursive(element);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC      \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\tclearAfterSelect: false,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\trefreshThrottle: 300,\n\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload                 : null, // function(query, callback) { ... }\n\tscore                : null, // function(search) { ... }\n\tonInitialize         : null, // function() { ... }\n\tonChange             : null, // function(value) { ... }\n\tonItemAdd            : null, // function(value, $item) { ... }\n\tonItemRemove         : null, // function(value) { ... }\n\tonClear              : null, // function() { ... }\n\tonOptionAdd          : null, // function(value, data) { ... }\n\tonOptionRemove       : null, // function(value) { ... }\n\tonOptionClear        : null, // function() { ... }\n\tonOptionGroupAdd     : null, // function(id, data) { ... }\n\tonOptionGroupRemove  : null, // function(id) { ... }\n\tonOptionGroupClear   : null, // function() { ... }\n\tonDropdownOpen       : null, // function(dropdown) { ... }\n\tonDropdownClose      : null, // function(dropdown) { ... }\n\tonType               : null, // function(str) { ... }\n\tonDelete             : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n", "import defaults from './defaults.ts';\nimport { hash_key, iterate } from './utils.ts';\nimport { TomOption, TomSettings, RecursivePartial } from './types/index.ts';\nimport { TomInput } from './types/index.ts';\n\n\nexport default function getSettings( input:TomInput, settings_user:RecursivePartial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\t\tlet $order = 0;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data             = readData(option);\n\t\t\t\toption_data[field_label]    = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value]    = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\t\t\t\toption_data.$order\t\t\t= option_data.$order || ++$order;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\toptgroup_data.$order\t\t\t\t\t= optgroup_data.$order || ++$order;\n\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input?.value?.trim() ?? '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n", "\nimport MicroEvent from './contrib/microevent.ts';\nimport MicroPlugin from './contrib/microplugin.ts';\nimport { Sifter } from '@orchidjs/sifter';\nimport { escape_regex } from '@orchidjs/unicode-variants';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames, TomClearFilter, RecursivePartial } from './types/index.ts';\nimport {highlight, removeHighlight} from './contrib/highlight.ts';\nimport * as constants from './constants.ts';\nimport getSettings from './getSettings.ts';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\ttimeout,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend,\n\titerate\n} from './utils.ts';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla.ts';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isReadOnly\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic isDropdownContentStale\t: boolean = true;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic ignoreHover\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\tprivate refreshTimeout\t\t\t: null|number = null;\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:RecursivePartial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\t\tinput.tomselect\t\t\t= this;\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input: string) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value: string) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete','spellcheck','aria-label'];\n\t\t\titerate(attrs,(attr:string) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n        wrapper.style.minWidth = input.style.minWidth;\n        wrapper.style.maxWidth = input.style.maxWidth;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\taddEvent(dropdown,'mousemove', () => {\n\t\t\tself.ignoreHover = false;\n\t\t});\n\n\t\taddEvent(dropdown,'mouseenter', (e) => {\n\n\t\t\tvar target_match = parentMatch(e.target as HTMLElement, '[data-selectable]', dropdown);\n\t\t\tif( target_match ) self.onOptionHover( e as MouseEvent, target_match );\n\n\t\t}, {capture:true});\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(control_input,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tconst win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\t\tconst input_invalid = () => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t}\n\n\t\taddEvent(input,'invalid', input_invalid);\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tinput.removeEventListener('invalid',input_invalid);\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup:TomOption) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize'      : 'onInitialize',\n\t\t\t'change'          : 'onChange',\n\t\t\t'item_add'        : 'onItemAdd',\n\t\t\t'item_remove'     : 'onItemRemove',\n\t\t\t'item_select'     : 'onItemSelect',\n\t\t\t'clear'           : 'onClear',\n\t\t\t'option_add'      : 'onOptionAdd',\n\t\t\t'option_remove'   : 'onOptionRemove',\n\t\t\t'option_clear'    : 'onOptionClear',\n\t\t\t'optgroup_add'    : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear'  : 'onOptionGroupClear',\n\t\t\t'dropdown_open'   : 'onDropdownOpen',\n\t\t\t'dropdown_close'  : 'onDropdownClose',\n\t\t\t'type'            : 'onType',\n\t\t\t'load'            : 'onLoad',\n\t\t\t'focus'           : 'onFocus',\n\t\t\t'blur'            : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter,allowEmptyOption:self.settings.allowEmptyOption} as RecursivePartial<TomSettings> ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tif( self.input.disabled ){\n\t\t\tself.disable();\n\t\t}else if( self.input.readOnly ){\n\t\t\tself.setReadOnly(true);\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif( !self.settings.splitOn ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for pasted text to be recognized in value\n\t\tsetTimeout(() => {\n\t\t\tvar pastedText = self.inputValue();\n\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\titerate( splitInput, (piece:string) => {\n\n\t\t\t\tconst hash = hash_key(piece);\n\t\t\t\tif( hash ){\n\t\t\t\t\tif( this.options[piece] ){\n\t\t\t\t\t\tself.addItem(piece);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tself.createItem(piece);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tself.ignoreHover = true;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// don't submit form when searching for a value\n\t\t\t\t}else if( document.activeElement == self.control_input && self.isOpen ){\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\telse if(self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\n\t\tif( this.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.inputValue();\n\t\tif( this.lastValue === value ) return;\n\t\tthis.lastValue = value;\n\n\t\tif( value == '' ){\n\t\t\tthis._onInput();\n\t\t\treturn;\n\t\t}\n\n\t\tif( this.refreshTimeout ){\n\t\t\twindow.clearTimeout(this.refreshTimeout);\n\t\t}\n\n\t\tthis.refreshTimeout = timeout(()=> {\n\t\t\tthis.refreshTimeout = null;\n\t\t\tthis._onInput();\n\t\t}, this.settings.refreshThrottle);\n\t}\n\n\t_onInput():void {\n\t\tconst value = this.lastValue;\n\n\t\tif( this.settings.shouldLoad.call(this,value) ){\n\t\t\tthis.load(value);\n\t\t}\n\n\t\tthis.refreshOptions();\n\t\tthis.trigger('type', value);\n\t}\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionHover( evt:MouseEvent|KeyboardEvent, option:HTMLElement ):void{\n\t\tif( this.ignoreHover ) return;\n\t\tthis.setActiveOption(option, false);\n\t}\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif( self.isDisabled || self.isReadOnly ){\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.inputState();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t} else if(self.settings.clearAfterSelect) {\n\t\t\t\t\tself.setTextboxValue();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.isDropdownContentStale = self.settings.hideSelected;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t} else if(self.settings.clearAfterSelect) {\n\t\t\t\t\tself.setTextboxValue();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.isDropdownContentStale = true;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap  = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend   = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.inputState();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement,scroll:boolean=true ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tif( scroll ) this.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.inputState();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item:TomItem) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif( self.isDisabled || self.isReadOnly) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tconst focusTarget = this.control_input.offsetWidth ? this.control_input : this.focus_node;\n    \tfocusTarget.focus();\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\t// Fix https://github.com/orchidjs/tom-select/issues/806\n\t\t\t// Only proceed if this instance's element is still the active element. If Edge autofill\n\t\t\t// (or anything else) has moved focus to a different element in the interim, calling\n\t\t\t// onFocus() here would steal focus back and restart the cascade loop.\n\t\t\tconst root = focusTarget.getRootNode() as Document | ShadowRoot;\n\t\t\tif (root.activeElement !== focusTarget) {\n        \t\treturn;\n      \t\t}\n\n\t\t\tthis.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields      : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort        : sort,\n\t\t\tnesting     : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar result, calculateScore;\n\t\tvar self     = this;\n\t\tvar options  = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (self.isDropdownContentStale || query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\t// temp fix for https://github.com/orchidjs/tom-select/issues/987\n\t\t\t// UI crashed when more than 30 same chars in a row, prevent search and return empt result\n\t\t\tif (/(.)\\1{15,}/.test(query)) {\n\t\t\t\tquery \t\t\t\t= '';\n\t\t\t}\n\t\t\tresult \t\t\t\t\t= self.sifter.search(query, Object.assign(options, { score: calculateScore }));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tresult.items = result.items.filter((item) => {\n\t\t\t\tlet hashed = hash_key(item.id);\n\t\t\t\treturn !(hashed !== null && self.items.indexOf(hashed) !== -1 );\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_group;\n\t\tvar create;\n\n\t\ttype Group = {fragment:DocumentFragment,order:number,optgroup:string}\n\t\tconst groups: {[key:string]:number} = {};\n\t\tconst groups_order:Group[]\t= [];\n\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tconst same_query\t\t\t= query === self.lastQuery || (query == '' && self.lastQuery == null);\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option:HTMLElement|null = null;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\n\t\tif( same_query ){\n\t\t\tactive_option\t\t\t= self.activeOption;\n\n\t\t\tif( active_option ){\n\t\t\t\tactive_group = active_option.closest('[data-group]') as HTMLElement;\n\t\t\t}\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// get fragment for group and the position of the group in group_order\n\t\tconst getGroupFragment = (optgroup:string,order:number):[number,DocumentFragment] => {\n\n\t\t\tlet group_order_i = groups[optgroup];\n\n\t\t\tif( group_order_i !== undefined ){\n\t\t\t\tlet order_group = groups_order[group_order_i];\n\t\t\t\tif( order_group !== undefined ){\n\t\t\t\t\treturn [group_order_i,order_group.fragment];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet group_fragment = document.createDocumentFragment();\n\t\t\tgroup_order_i = groups_order.length;\n\t\t\tgroups_order.push({fragment:group_fragment,order,optgroup});\n\n\t\t\treturn [group_order_i,group_fragment]\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet item\t\t\t= results.items[i];\n\t\t\tif( !item ) continue;\n\n\t\t\tlet opt_value\t\t= item.id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\n\t\t\tif( option === undefined ) continue;\n\n\t\t\tlet opt_hash\t\t= get_hash(opt_value);\n\t\t\tlet option_el\t\t= self.getOption(opt_hash,true) as HTMLElement;\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_hash) );\n\t\t\t}\n\n\t\t\toptgroup    = option[self.settings.optgroupField] || '';\n\t\t\toptgroups   = Array.isArray(optgroup) ? optgroup : [optgroup];\n\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\n\t\t\t\tlet order = option.$order;\n\t\t\t\tlet self_optgroup = self.optgroups[optgroup];\n\t\t\t\tif (self_optgroup === undefined && typeof self.settings.optionGroupRegister === 'function') {\n\t          \t\tvar regGroup;\n\t\t\t\t\tif (regGroup = self.settings.optionGroupRegister.apply(self, [optgroup])) {\n\t\t\t\t\t\tself.registerOptionGroup(regGroup);\n\t\t\t\t\t}\n\t        \t}\n\t\t\t\tself_optgroup = self.optgroups[optgroup];\n\t\t\t\tif( self_optgroup === undefined ){\t\t\t\t\t\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}else{\n\t\t\t\t\torder = self_optgroup.$order;\n\t\t\t\t}\n\n\t\t\t\tconst [group_order_i,group_fragment] = getGroupFragment(optgroup,order);\n\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\n\n\t\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\t\tif( self.activeOption && self.activeOption.dataset.value == opt_value ){\n\t\t\t\t\t\tif( active_group && active_group.dataset.group === optgroup.toString() ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tgroup_fragment.appendChild(option_el);\n\t\t\t\tif( optgroup != '' ){\n\t\t\t\t\tgroups[optgroup] = group_order_i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif( self.settings.lockOptgroupOrder ){\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\treturn a.order - b.order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (group_order:Group) => {\n\n\t\t\tlet group_fragment = group_order.fragment;\n\t\t\tlet optgroup = group_order.optgroup\n\n\t\t\tif( !group_fragment || !group_fragment.children.length ) return;\n\n\t\t\tlet group_heading = self.optgroups[optgroup];\n\n\t\t\tif( group_heading !== undefined ){\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', group_heading);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, group_fragment );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:group_heading,options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, group_fragment );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\t\tself.isDropdownContentStale = false;\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items[0] != undefined ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option)  ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t *   this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\tself.updateOption(data[self.settings.valueField], data);\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t\t\t= data;\n\t\tself.isDropdownContentStale\t= true;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat:TomOption) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\n\t\tconst data_old\t\t= self.options[value_old];\n\n\t\tif( data_old == undefined ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || data_old.$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// we might have updated the sortField\n\t\tself.isDropdownContentStale = true;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.isDropdownContentStale = true;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions(filter?:TomClearFilter ) {\n\n\t\tconst boundFilter = (filter || this.clearFilter).bind(this);\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\n\t\tconst selected:TomOptions\t= {};\n\t\titerate(this.options,(option:TomOption,key:string)=>{\n\t\t\tif( boundFilter(option,key as string) ){\n\t\t\t\tselected[key] = option;\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.isDropdownContentStale = true;\n\t\tthis.trigger('option_clear');\n\t}\n\n\t/**\n\t * Used by clearOptions() to decide whether or not an option should be removed\n\t * Return true to keep an option, false to remove\n\t *\n\t */\n\tclearFilter(option:TomOption,value:string){\n\t\tif( this.items.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:undefined|null|boolean|string|number, create:boolean=false):null|HTMLElement {\n\n\t\tconst hashed = hash_key(value);\n\t\tif( hashed === null ) return null;\n\n\t\tconst option = this.options[hashed];\n\t\tif( option != undefined ){\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tconst last_item = items[items.length - 1];\n\t\titems.forEach(item => {\n\t\t\tself.isPending = (item !== last_item);\n\t\t\tself.addItem(item, silent);\n\t\t});\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//remove input value when enabled\n\t\t\t\tif(self.settings.clearAfterSelect) {\n\t\t\t\t\tself.setTextboxValue();\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.isDropdownContentStale = true;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, callback:TomCreateCallback = ()=>{} ):boolean{\n\n\t\t// triggerDropdown parameter @deprecated 2.1.1\n\t\tif( arguments.length === 3 ){\n\t\t\tcallback = arguments[2];\n\t\t}\n\t\tif( typeof callback != 'function' ){\n\t\t\tcallback = () => {};\n\t\t}\n\n\t\tvar self  = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tconst hash = hash_key(input);\n\t\t\t\tif( hash ){\n\t\t\t\t\tif( this.options[input] ){\n\t\t\t\t\t\tself.addItem(input);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.isDropdownContentStale = true;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self     = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('readonly', self.isReadOnly)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\t}\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.validity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.validity.valid;\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 || self.settings.mode == 'multi' ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value]!;\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top  + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop   : top + 'px',\n\t\t\tleft  : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item:TomItem)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.inputState();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret] || null);\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item:TomItem) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tlet rm_item;\n\t\t\tif( direction < 0 && selection.start === 0 && selection.length === 0 ){\n\t\t\t\trm_item = items[self.caretPos - 1];\n\n\t\t\t}else if( direction > 0 && selection.start === self.inputValue().length ){\n\t\t\t\trm_item = items[self.caretPos];\n\t\t\t}\n\n\t\t\tif( rm_item !== undefined ){\n\t\t\t\trm_items.push( rm_item );\n\t\t\t}\n\t\t}\n\n\t\tif( !self.shouldDelete(rm_items,e) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.inputState();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Return true if the items should be deleted\n\t */\n\tshouldDelete(items:TomItem[],evt:MouseEvent|KeyboardEvent){\n\n\t\tconst values = items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif( !values.length || (typeof this.settings.onDelete === 'function' && this.settings.onDelete.call(this,values,evt) === false) ){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.setLocked(true);\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.setLocked(false);\n\t}\n\n\t/**\n\t * Disable or enable user input on the control\n\t */\n\tsetLocked( lock:boolean = this.isReadOnly || this.isDisabled ){\n\t\tthis.isLocked = lock;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tthis.setDisabled(true);\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tthis.setDisabled(false);\n\t}\n\n\tsetDisabled(disabled:boolean){\n\t\tthis.focus_node.tabIndex\t\t= disabled ? -1 : this.tabIndex;\n\t\tthis.isDisabled\t\t\t\t\t= disabled;\n\t\tthis.input.disabled\t\t\t\t= disabled;\n\t\tthis.control_input.disabled\t\t= disabled;\n\t\tthis.setLocked();\n\t}\n\n\tsetReadOnly(isReadOnly:boolean){\n\t\tthis.isReadOnly\t\t\t\t\t= isReadOnly;\n\t\tthis.input.readOnly\t\t\t\t= isReadOnly;\n\t\tthis.control_input.readOnly\t\t= isReadOnly;\n\t\tthis.setLocked();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\t\tvar id, html;\n\t\tconst self = this;\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( !html ){\n\t\t\treturn null;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tconst value\t= get_hash(data[self.settings.valueField]);\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tdata.$div = html;\n\t\t\t\tself.options[value] = data;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\n\t}\n\n\n\t/**\n\t * Type guarded rendering\n\t *\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tconst html = this.render(templateName, data);\n\n\t\tif( html == null ){\n\t\t\tthrow 'HTMLElement expected';\n\t\t}\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option:TomOption)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n", "/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames     : [],\n\t\t\tsettings  : {},\n\t\t\trequested : {},\n\t\t\tloaded    : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn'   : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t *   ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self  = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self    = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin  = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' +  name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n", "import TomSelect from './tom-select.ts';\n\nimport change_listener from './plugins/change_listener/plugin.ts';\nimport checkbox_options from './plugins/checkbox_options/plugin.ts';\nimport clear_button from './plugins/clear_button/plugin.ts';\nimport drag_drop from './plugins/drag_drop/plugin.ts';\nimport dropdown_header from './plugins/dropdown_header/plugin.ts';\nimport caret_position from './plugins/caret_position/plugin.ts';\nimport dropdown_input from './plugins/dropdown_input/plugin.ts';\nimport input_autogrow from './plugins/input_autogrow/plugin.ts';\nimport no_backspace_delete from './plugins/no_backspace_delete/plugin.ts';\nimport no_active_items from './plugins/no_active_items/plugin.ts';\nimport optgroup_columns from './plugins/optgroup_columns/plugin.ts';\nimport remove_button from './plugins/remove_button/plugin.ts';\nimport restore_on_backspace from './plugins/restore_on_backspace/plugin.ts';\nimport virtual_scroll from './plugins/virtual_scroll/plugin.ts';\n\nTomSelect.define('change_listener', change_listener);\nTomSelect.define('checkbox_options', checkbox_options);\nTomSelect.define('clear_button', clear_button);\nTomSelect.define('drag_drop', drag_drop);\nTomSelect.define('dropdown_header', dropdown_header);\nTomSelect.define('caret_position', caret_position);\nTomSelect.define('dropdown_input', dropdown_input);\nTomSelect.define('input_autogrow', input_autogrow);\nTomSelect.define('no_backspace_delete', no_backspace_delete);\nTomSelect.define('no_active_items', no_active_items);\nTomSelect.define('optgroup_columns', optgroup_columns);\nTomSelect.define('remove_button', remove_button);\nTomSelect.define('restore_on_backspace', restore_on_backspace);\nTomSelect.define('virtual_scroll', virtual_scroll);\n\nexport default TomSelect;\n", "/**\n * Plugin: \"change_listener\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { addEvent } from '../../utils.ts';\n\nexport default function(this:TomSelect) {\n\taddEvent(this.input,'change',()=>{\n\t\tthis.sync();\n\t});\n};\n", "/**\n * Plugin: \"checkbox_options\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { TomTemplate } from '../../types/index.ts';\nimport { preventDefault, hash_key } from '../../utils.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { CBOptions } from './types.ts';\n\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tvar self = this;\n\tvar orig_onOptionSelect = self.onOptionSelect;\n\n\tself.settings.hideSelected = false;\n\n\tconst cbOptions : CBOptions = Object.assign({\n\t\t// so that the user may add different ones as well\n\t\tclassName             : \"tomselect-checkbox\",\n\n\t\t// the following default to the historic plugin's values\n\t\tcheckedClassNames     : undefined,\n\t\tuncheckedClassNames   : undefined,\n\t}, userOptions);\n\n\n\tvar UpdateChecked = function(checkbox:HTMLInputElement, toCheck : boolean) {\n\t\tif( toCheck ){\n\t\t\tcheckbox.checked = true;\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t}else{\n\t\t\tcheckbox.checked = false;\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t}\n\t}\n\n\t// update the checkbox for an option\n\tvar UpdateCheckbox = function(option:HTMLElement){\n\t\tsetTimeout(()=>{\n\t\t\tvar checkbox = option.querySelector('input.' + cbOptions.className);\n\t\t\tif( checkbox instanceof HTMLInputElement ){\n\t\t\t\tUpdateChecked(checkbox, option.classList.contains('selected'));\n\t\t\t}\n\t\t},1);\n\t};\n\n\t// add checkbox to option template\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_option = self.settings.render.option;\n\n\t\tself.settings.render.option = ((data, escape_html) => {\n\t\t\tvar rendered = getDom(orig_render_option.call(self, data, escape_html));\n\t\t\tvar checkbox = document.createElement('input');\n\t\t\tif (cbOptions.className) {\n\t\t\t\tcheckbox.classList.add(cbOptions.className);\n\t\t\t}\n\t\t\tcheckbox.addEventListener('click',function(evt){\n\t\t\t\tpreventDefault(evt);\n\t\t\t});\n\n\t\t\tcheckbox.type = 'checkbox';\n\t\t\tconst hashed = hash_key(data[self.settings.valueField]);\n\n\t\t\tUpdateChecked(checkbox, !!(hashed && self.items.indexOf(hashed) > -1) );\n\n\t\t\trendered.prepend(checkbox);\n\t\t\treturn rendered;\n\t\t}) satisfies TomTemplate;\n\t});\n\n\t// uncheck when item removed\n\tself.on('item_remove',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\toption.classList.remove('selected'); // selected class won't be removed yet\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\t// check when item added\n\tself.on('item_add',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\n\t// remove items when selected option is clicked\n\tself.hook('instead','onOptionSelect',( evt:KeyboardEvent, option:HTMLElement )=>{\n\n\t\tif( option.classList.contains('selected') ){\n\t\t\toption.classList.remove('selected')\n\t\t\tself.removeItem(option.dataset.value);\n\t\t\tself.refreshOptions();\n\t\t\tpreventDefault(evt,true);\n\t\t\treturn;\n        }\n\n\t\torig_onOptionSelect.call(self, evt, option);\n\n\t\tUpdateCheckbox(option);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { CBOptions } from './types.ts';\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\tclassName: 'clear-button',\n\t\ttitle: 'Clear All',\n\t\trole: 'button',\n\t\ttabindex: 0,\n\t\thtml: (data:CBOptions) => {\n\n\t\treturn `<div class=\"${data.className}\" title=\"${data.title}\" role=\"${data.role}\" tabindex=\"${data.tabindex}\">&times;</div>`;\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar button = getDom(options.html(options));\n\t\tbutton.addEventListener('click',(evt)=>{\n\n\t\t\tif( self.isLocked ) return;\n\n\t\t\tself.clear();\n\n\t\t\tif( self.settings.mode === 'single' && self.settings.allowEmptyOption ){\n\t\t\t\tself.addItem('');\n\t\t\t}\n\t\t\t\n\t\t\tself.refreshOptions(false);\n\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t});\n\t\tself.control.appendChild(button);\n\t});\n\n};\n", "/**\n * Plugin: \"drag_drop\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { TomOption, TomItem } from '../../types/index.ts';\nimport { escape_html, preventDefault, addEvent } from '../../utils.ts';\nimport { getDom, setAttr } from '../../vanilla.ts';\n\n\nconst insertAfter = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\n}\n\nconst insertBefore = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode);\n}\n\nconst isBefore = (referenceNode:Element|undefined|null, newNode:Element|undefined|null) =>{\n\t\n\tdo{\n\t\tnewNode = newNode?.previousElementSibling;\n\n\t\tif( referenceNode == newNode ){\n\t\t\treturn true;\n\t\t}\n\n\t}while( newNode && newNode.previousElementSibling );\n\n\treturn false;\n}\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tif (self.settings.mode !== 'multi') return;\n\n\tvar orig_lock\t\t= self.lock;\n\tvar orig_unlock\t\t= self.unlock;\n\tlet sortable = true;\n\t\tlet drag_item:TomItem|undefined;\n\n\n\t/**\n\t * Add draggable attribute to item\n\t */\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\t\t\tconst item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\t\t\tsetAttr(item,{'draggable':'true'});\n\n\n\t\t\t// prevent doc_mousedown (see tom-select.ts)\n\t\t\tconst mousedown = (evt:Event) => {\n\t\t\t\tif( !sortable ) preventDefault(evt);\n\t\t\t\tevt.stopPropagation();\n\t\t\t}\n\n\t\t\tconst dragStart = (evt:Event) => {\n\t\t\t\tdrag_item = item;\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\titem.classList.add('ts-dragging');\n\t\t\t\t}, 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\tconst dragOver = (evt:Event) =>{\n\t\t\t\tevt.preventDefault();\n\t\t\t\titem.classList.add('ts-drag-over');\n\t\t\t\tmoveitem(item,drag_item);\n\t\t\t}\n\n\t\t\tconst dragLeave = () => {\n\t\t\t\titem.classList.remove('ts-drag-over');\n\t\t\t}\n\n\t\t\tconst moveitem = (targetitem:TomItem, dragitem:TomItem|undefined) => {\n\t\t\t\tif( dragitem === undefined ) return;\n\t\t\t\t\n\t\t\t\tif( isBefore(dragitem,item) ){\n\t\t\t\t\tinsertAfter(targetitem,dragitem);\n\t\t\t\t}else{\n\t\t\t\t\tinsertBefore(targetitem,dragitem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst dragend = () => {\n\t\t\t\tdocument.querySelectorAll('.ts-drag-over').forEach(el=> el.classList.remove('ts-drag-over'));\n\t\t\t\tdrag_item?.classList.remove('ts-dragging');\n\t\t\t\tdrag_item = undefined;\n\n\t\t\t\tvar values:string[] = [];\n\t\t\t\tself.control.querySelectorAll(`[data-value]`).forEach((el:Element)=> {\n\t\t\t\t\tif( (<HTMLOptionElement>el).dataset.value ){\n\t\t\t\t\t\tlet value = (<HTMLOptionElement>el).dataset.value;\n\t\t\t\t\t\tif( value ){\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tself.setValue(values);\n\t\t\t}\t\n\n\n\t\t\taddEvent(item,'mousedown', mousedown);\n\t\t\taddEvent(item,'dragstart', dragStart);\n\t\t\taddEvent(item,'dragenter', dragOver)\n\t\t\taddEvent(item,'dragover', dragOver);\n\t\t\taddEvent(item,'dragleave', dragLeave);\n\t\t\taddEvent(item,'dragend', dragend);\n\t\t\t\t\n\t\t\treturn item;\n\t\t}\t\n\t});\n\n\n\n\tself.hook('instead','lock',()=>{\n\t\tsortable = false;\n\t\treturn orig_lock.call(self);\n\t});\n\n\tself.hook('instead','unlock',()=>{\n\t\tsortable = true;\n\t\treturn orig_unlock.call(self);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { preventDefault } from '../../utils.ts';\nimport { DHOptions } from './types.ts';\n\nexport default function(this:TomSelect, userOptions:DHOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttitle         : 'Untitled',\n\t\theaderClass   : 'dropdown-header',\n\t\ttitleRowClass : 'dropdown-header-title',\n\t\tlabelClass    : 'dropdown-header-label',\n\t\tcloseClass    : 'dropdown-header-close',\n\n\t\thtml: (data:DHOptions) => {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar header = getDom(options.html(options));\n\n\t\tvar close_link = header.querySelector('.'+options.closeClass);\n\t\tif( close_link ){\n\t\t\tclose_link.addEventListener('click',(evt)=>{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\tself.close();\n\t\t\t});\n\t\t}\n\n\t\tself.dropdown.insertBefore(header, self.dropdown.firstChild);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { nodeIndex, removeClasses } from '../../vanilla.ts';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tself.hook('instead','setCaret',(new_pos:number) => {\n\n\t\tif( self.settings.mode === 'single' || !self.control.contains(self.control_input) ) {\n\t\t\tnew_pos = self.items.length;\n\t\t} else {\n\t\t\tnew_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n\t\t\tif( new_pos != self.caretPos && !self.isPending ){\n\n\t\t\t\tself.controlChildren().forEach((child,j) => {\n\t\t\t\t\tif( j < new_pos ){\n\t\t\t\t\t\tself.control_input.insertAdjacentElement('beforebegin', child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.control.appendChild( child );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = new_pos;\n\t});\n\n\tself.hook('instead','moveCaret',(direction:number) => {\n\n\t\tif( !self.isFocused ) return;\n\n\t\t// move caret before or after selected items\n\t\tconst last_active\t\t= self.getLastActive(direction);\n\t\tif( last_active ){\n\t\t\tconst idx = nodeIndex(last_active);\n\t\t\tself.setCaret(direction > 0 ? idx + 1: idx);\n\t\t\tself.setActiveItem();\n\t\t\tremoveClasses(last_active as HTMLElement,'last-active');\n\n\t\t// move caret left or right of current position\n\t\t}else{\n\t\t\tself.setCaret(self.caretPos + direction);\n\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport * as constants from '../../constants.ts';\nimport { getDom, addClasses } from '../../vanilla.ts';\nimport { addEvent, preventDefault } from '../../utils.ts';\n\n\nexport default function(this:TomSelect) {\n\tconst self = this;\n\n\tself.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n\tself.hook('before','setup',()=>{\n\t\tself.focus_node\t\t= self.control;\n\n\t\taddClasses( self.control_input, 'dropdown-input');\n\n\t \tconst div = getDom('<div class=\"dropdown-input-wrap\">');\n\t\tdiv.append(self.control_input);\n\t\tself.dropdown.insertBefore(div, self.dropdown.firstChild);\n\n\t\t// set a placeholder in the select control\n\t\tconst placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />') as HTMLInputElement;\n\t\tplaceholder.placeholder = self.settings.placeholder ||'';\n\t\tself.control.append(placeholder);\n\t\t/**\n\t\t * TomSelect renders a custom control with a focusable <input class=\"items-placeholder\">.\n\t\t * The source <select>'s aria-label is not automatically propagated to that input,\n\t\t * which triggers \"Missing form label\" accessibility warnings.\n\t\t * This helper copies the label from the <select> onto the generated input.\n\t\t */\n\t\tconst label = self.input?.getAttribute('aria-label');\n\t\tif (!label) return;\n\t\tplaceholder.setAttribute('aria-label', label);\n\t});\n\n\tself.on('initialize',()=>{\n\t\t// set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n\t\tself.control_input.addEventListener('keydown',(evt:KeyboardEvent) =>{\n\t\t//addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n\t\t\tswitch( evt.keyCode ){\n\t\t\t\tcase constants.KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\tpreventDefault(evt,true);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\t\t\t\tcase constants.KEY_TAB:\n\t\t\t\t\tself.focus_node.tabIndex = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn self.onKeyDown.call(self,evt);\n\t\t});\n\n\t\tself.on('blur',()=>{\n\t\t\tself.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n\t\t});\n\n\n\t\t// give the control_input focus when the dropdown is open\n\t\tself.on('dropdown_open',() =>{\n\t\t\tself.control_input.focus();\n\t\t});\n\n\t\t// prevent onBlur from closing when focus is on the control_input\n\t\tconst orig_onBlur = self.onBlur;\n\t\tself.hook('instead','onBlur',(evt?:FocusEvent)=>{\n\t\t\tif( evt && evt.relatedTarget == self.control_input ) return;\n\t\t\treturn orig_onBlur.call(self);\n\t\t});\n\n\t\taddEvent(self.control_input,'blur', () => self.onBlur() );\n\n\t\t// return focus to control to allow further keyboard input\n\t\tself.hook('before','close',() =>{\n\n\t\t\tif( !self.isOpen ) return;\n\t\t\tself.focus_node.focus({preventScroll: true});\n\t\t});\n\n\t});\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { addEvent } from '../../utils.ts';\n\nexport default function(this:TomSelect) {\n\tvar self\t\t\t\t\t= this;\n\n\tself.on('initialize',()=>{\n\n\n\t\tvar test_input\t\t\t\t= document.createElement('span');\n\t\tvar control\t\t\t\t\t= self.control_input;\n\t\ttest_input.style.cssText\t= 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n\n\t\tself.wrapper.appendChild(test_input);\n\n\n\t\tvar transfer_styles\t\t\t= [ 'letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform' ];\n\n\t\tfor( const style_name of transfer_styles ){\n\t\t\t// @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n\t\t\ttest_input.style[style_name] = control.style[style_name];\n\t\t}\n\n\n\t\t/**\n\t\t * Set the control width\n\t\t *\n\t\t */\n\t\tvar resize = ()=>{\n\t\t\ttest_input.textContent\t= control.value;\n\t\t\tcontrol.style.width\t\t= test_input.clientWidth+'px';\n\t\t};\n\n\t\tresize();\n\t\tself.on('update item_add item_remove',resize);\n\t\taddEvent(control,'input', resize );\n\t\taddEvent(control,'keyup', resize );\n\t\taddEvent(control,'blur', resize );\n\t\taddEvent(control,'update', resize );\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_deleteSelection = self.deleteSelection;\n\n\tthis.hook('instead','deleteSelection',(evt:KeyboardEvent) => {\n\n\t\tif( self.activeItems.length ){\n\t\t\treturn orig_deleteSelection.call(self, evt);\n\t\t}\n\n\t\treturn false;\n\t});\n\n};\n", "/**\n * Plugin: \"no_active_items\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\n\nexport default function(this:TomSelect) {\n\tthis.hook('instead','setActiveItem',() => {});\n\tthis.hook('instead','selectAll',() => {});\n};\n", "/**\n * Plugin: \"optgroup_columns\" (Tom Select.js)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport * as constants from '../../constants.ts';\nimport { parentMatch, nodeIndex } from '../../vanilla.ts';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\tvar orig_keydown = self.onKeyDown;\n\n\tself.hook('instead','onKeyDown',(evt:KeyboardEvent)=>{\n\t\tvar index, option, options, optgroup;\n\n\t\tif( !self.isOpen || !(evt.keyCode === constants.KEY_LEFT || evt.keyCode === constants.KEY_RIGHT)) {\n\t\t\treturn orig_keydown.call(self,evt);\n\t\t}\n\n\t\tself.ignoreHover\t= true;\n\t\toptgroup\t\t\t= parentMatch(self.activeOption,'[data-group]');\n\t\tindex\t\t\t\t= nodeIndex(self.activeOption,'[data-selectable]');\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( evt.keyCode === constants.KEY_LEFT ){\n\t\t\toptgroup = optgroup.previousSibling;\n\t\t} else {\n\t\t\toptgroup = optgroup.nextSibling;\n\t\t}\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\toptions\t\t\t\t= (<HTMLOptGroupElement>optgroup).querySelectorAll('[data-selectable]');\n\t\toption\t\t\t\t= options[ Math.min(options.length - 1, index) ] as HTMLElement;\n\n\t\tif( option ){\n\t\t\tself.setActiveOption(option);\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"remove_button\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { getDom } from '../../vanilla.ts';\nimport { escape_html, preventDefault, addEvent } from '../../utils.ts';\nimport { TomOption, TomItem } from '../../types/index.ts';\nimport { RBOptions } from './types.ts';\n\nexport default function(this:TomSelect, userOptions:RBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\t\tlabel     : '\u00D7',\n\t\t\ttitle     : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\ttabindex  : -1,\n\t\t\trole      : 'button',\n\t\t\thtml      : (data:RBOptions) => {\n\t\t\t\tconst el = document.createElement('div');\n\n\t\t\t\tel.className = data.className || '';\n\t\t\t\tel.title = data.title || '';\n\t\t\t\tel.setAttribute('role', data.role || 'button');\n\t\t\t\tel.tabIndex = data.tabindex ?? -1;\n\t\t\t\tel.textContent = data.label || '';\n\n\t\t\t\treturn el;\n\t\t\t}\n\t\t}, userOptions);\n\n\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\n\t\t\tvar item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\n\t\t\tvar close_button = getDom(options.html(options));\n\t\t\titem.appendChild(close_button);\n\n\t\t\taddEvent(close_button,'mousedown',(evt) => {\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t});\n\n\t\t\taddEvent(close_button,'click',(evt) => {\n\n\t\t\t\tif( self.isLocked ) return;\n\n\t\t\t\t// propagating will trigger the dropdown to show for single mode\n\t\t\t\tpreventDefault(evt,true);\n\n\t\t\t\tif( self.isLocked ) return;\n\t\t\t\tif( !self.shouldDelete([item],evt as MouseEvent) ) return;\n\n\t\t\t\tself.removeItem(item);\n\t\t\t\tself.refreshOptions(false);\n\t\t\t\tself.inputState();\n\t\t\t});\n\n\t\t\treturn item;\n\t\t};\n\n\t});\n\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\nimport type TomSelect from '../../tom-select.ts';\nimport { TomOption } from '../../types/index.ts';\n\ntype TPluginOptions = {\n\ttext?:(option:TomOption)=>string,\n};\n\nexport default function(this:TomSelect, userOptions:TPluginOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttext: (option:TomOption) => {\n\t\t\treturn option[self.settings.labelField];\n\t\t}\n\t},userOptions);\n\n\tself.on('item_remove',function(value:string){\n\t\tif( !self.isFocused ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.control_input.value.trim() === '' ){\n\t\t\tvar option = self.options[value];\n\t\t\tif( option ){\n\t\t\t\tself.setTextboxValue(options.text.call(self, option));\n\t\t\t}\n\t\t}\n\t});\n\n};\n", "/**\n * Plugin: \"virtual_scroll\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport type TomSelect from '../../tom-select.ts';\nimport { TomOption } from '../../types/index.ts';\nimport { addClasses } from '../../vanilla.ts';\n\nexport default function(this:TomSelect) {\n\tconst self\t\t\t\t\t\t\t= this;\n\tconst orig_canLoad\t\t\t\t\t= self.canLoad;\n\tconst orig_clearActiveOption\t\t= self.clearActiveOption;\n\tconst orig_loadCallback\t\t\t\t= self.loadCallback;\n\n\tvar pagination:{[key:string]:any}\t= {};\n\tvar dropdown_content:HTMLElement;\n\tvar loading_more\t\t\t\t\t= false;\n\tvar load_more_opt:HTMLElement;\n\tvar default_values: string[]\t\t= [];\n\tvar default_values_loaded\t\t\t= false;\n\tvar default_pagination:any;\n\tvar default_options: TomOption[]\t= [];\n\tvar html_values: string[]\t\t\t= [];\n\n\tif( !self.settings.shouldLoadMore ){\n\n\t\t// return true if additional results should be loaded\n\t\tself.settings.shouldLoadMore = ():boolean=>{\n\n\t\t\tconst scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\t\t\tif( scroll_percent > 0.9 ){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif( self.activeOption ){\n\t\t\t\tvar selectable\t= self.selectable();\n\t\t\t\tvar index\t\t= Array.from(selectable).indexOf(self.activeOption);\n\t\t\t\tif( index >= (selectable.length-2) ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\tif( !self.settings.firstUrl ){\n\t\tthrow 'virtual_scroll plugin requires a firstUrl() method';\n\t}\n\n\n\t// in order for virtual scrolling to work,\n\t// options need to be ordered the same way they're returned from the remote data source\n\tself.settings.sortField\t\t\t= [{field:'$order'},{field:'$score'}];\n\n\n\t// can we load more results for given query?\n\tconst canLoadMore = (query:string):boolean => {\n\n\t\tif( self.settings.maxOptions !== null\n\t\t\t&& typeof self.settings.maxOptions === 'number'\n\t\t\t&& dropdown_content.children.length >= self.settings.maxOptions\n\t\t){\n\t\t\treturn false;\n\t\t}\n\n\t\tif( (query in pagination) && pagination[query] ){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst clearFilter = (option:TomOption, value:string):boolean => {\n\t\tif( self.items.indexOf(value) >= 0 || default_values.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\n\t// set the next url that will be\n\tself.setNextUrl = (value:string,next_url:any):void => {\n\t\tpagination[value] = next_url;\n\t};\n\n\t// getUrl() to be used in settings.load()\n\tself.getUrl = (query:string):any =>{\n\n\t\tif( query in pagination ){\n\t\t\tconst next_url = pagination[query];\n\t\t\tpagination[query] = false;\n\t\t\treturn next_url;\n\t\t}\n\n\t\t// if the user goes back to a previous query\n\t\t// we need to load the first page again\n\t\tself.clearPagination();\n\n\t\treturn self.settings.firstUrl.call(self,query);\n\t};\n\n\t// clear pagination\n\tself.clearPagination = ():void =>{\n\t\tpagination = {};\n\t};\n\n\t// don't clear the active option (and cause unwanted dropdown scroll)\n\t// while loading more results\n\tself.hook('instead','clearActiveOption',()=>{\n\n\t\tif( loading_more ){\n\t\t\treturn;\n\t\t}\n\n\t\treturn orig_clearActiveOption.call(self);\n\t});\n\n\t// override the canLoad method\n\tself.hook('instead','canLoad',(query:string)=>{\n\n\t\t// first time the query has been seen\n\t\tif( !(query in pagination) ){\n\t\t\treturn orig_canLoad.call(self,query);\n\t\t}\n\n\t\treturn canLoadMore(query);\n\t});\n\n\n\t// wrap the load\n\tself.hook('instead','loadCallback',( options:TomOption[], optgroups:TomOption[])=>{\n\n\t\tif( !loading_more ){\n\t\t\t// When searching (non-empty query), keep selected items and HTML default options,\n\t\t\t// but remove preloaded remote options so they don't bleed into search results.\n\t\t\t// For empty query, use clearFilter (keeps default_values + items).\n\t\t\tconst activeFilter = self.lastValue !== ''\n\t\t\t\t? (_option: TomOption, value: string) => self.items.indexOf(value) >= 0 || html_values.indexOf(value) >= 0\n\t\t\t\t: clearFilter;\n\t\t\tself.clearOptions(activeFilter);\n\t\t}else if( load_more_opt ){\n\t\t\tconst first_option = options[0];\n\t\t\tif( first_option !== undefined ){\n\t\t\t\tload_more_opt.dataset.value\t\t= first_option[self.settings.valueField];\n\t\t\t}\n\t\t}\n\n\t\torig_loadCallback.call( self, options, optgroups);\n\n\t\t// After the initial preload (empty query), snapshot default_values and option objects\n\t\t// so they can be restored when the user clears their search.\n\t\tif( !loading_more && !default_values_loaded ){\n\t\t\tdefault_values_loaded = true;\n\t\t\tif( self.lastValue === '' ){\n\t\t\t\tdefault_values = Object.keys(self.options);\n\t\t\t\tdefault_pagination = pagination[''];\n\t\t\t\tdefault_options = Object.values(self.options);\n\t\t\t}\n\t\t}\n\n\t\tloading_more = false;\n\t});\n\n\n\t// as the \u201Cloading_more\u201D element will be removed from the dropdown,\n\t// we activate the previous option if needed\n\t// to avoid the dropdown being scrolled back to the first one\n\tself.hook('before','refreshOptions',()=>{\n\n\t\tif (self.activeOption && \"option\" !== self.activeOption.getAttribute(\"role\")) {\n\t\t\tself.setActiveOption(self.activeOption.previousElementSibling as HTMLElement);\n\t\t}\n\n\t});\n\n\n\t// add templates to dropdown\n\t//\tloading_more if we have another url in the queue\n\t//\tno_more_results if we don't have another url in the queue\n\tself.hook('after','refreshOptions',()=>{\n\n\t\tconst query\t\t= self.lastValue;\n\t\tvar option;\n\n\t\tif( canLoadMore(query) ){\n\n\t\t\toption = self.render('loading_more',{query:query});\n\t\t\tif( option ){\n\t\t\t\toption.setAttribute('data-selectable',''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\t\t\t\tload_more_opt = option;\n\t\t\t}\n\n\t\t}else if( (query in pagination) && !dropdown_content.querySelector('.no-results') ){\n\t\t\toption = self.render('no_more_results',{query:query});\n\t\t}\n\n\t\tif( option ){\n\t\t\taddClasses(option,self.settings.optionClass);\n\t\t\tdropdown_content.append( option );\n\t\t}\n\n\t});\n\n\n\t// Restore preloaded options and pagination when clearing search\n\tconst restoreDefaults = ():void => {\n\t\tif( !default_values_loaded ) {\n\t\t\treturn;\n\t\t}\n\t\t// Re-add preloaded option objects (clearOptions can only remove, not restore)\n\t\tself.addOptions(default_options);\n\t\t// Remove any search results that are not part of the preloaded defaults\n\t\tself.clearOptions(clearFilter);\n\t\tif( default_pagination ) {\n\t\t\tpagination[''] = default_pagination;\n\t\t}\n\t};\n\n\tself.on('type',(query:string) => {\n\t\tif( query === '' ){\n\t\t\trestoreDefaults();\n\t\t\tself.refreshOptions(false);\n\t\t}\n\t});\n\n\tself.on('dropdown_close', restoreDefaults);\n\n\t// add scroll listener and default templates\n\tself.on('initialize',()=>{\n\t\thtml_values = Object.keys(self.options);\n\t\tdefault_values = Object.keys(self.options);\n\t\tdropdown_content = self.dropdown_content;\n\n\t\t// default templates\n\t\tself.settings.render = Object.assign({}, {\n\t\t\tloading_more:() => {\n\t\t\t\treturn `<div class=\"loading-more-results\">Loading more results ... </div>`;\n\t\t\t},\n\t\t\tno_more_results:() =>{\n\t\t\t\treturn `<div class=\"no-more-results\">No more results</div>`;\n\t\t\t}\n\t\t},self.settings.render);\n\n\n\t\t// watch dropdown content scroll position\n\t\tdropdown_content.addEventListener('scroll',()=>{\n\n\t\t\tif( !self.settings.shouldLoadMore.call(self) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\t\t\tif( !canLoadMore(self.lastValue) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// don't call load() too much\n\t\t\tif( loading_more ) return;\n\n\n\t\t\tloading_more = true;\n\t\t\tself.load.call(self,self.lastValue);\n\t\t});\n\t});\n\n};\n", "/**\n * @description default values method: \"GET\", accept: \"application/json, text/plain, *\\/*\", data: {}\n * @param {String|*} url\n * @param {Object} params\n * @property\n */\nexport default function (url = '', params = {}) {\n  if (url.toString().length === 0) {\n    return null;\n  }\n\n  params.method ||= 'GET';\n  params.accept ||= 'application/json, text/plain, */*';\n  params.data ||= {};\n\n  if (!Object.keys(params).includes('fillContentType')) {\n    params.fillContentType = true;\n  }\n\n  const csrf = document.querySelector(\"[name='csrf-token']\");\n  let parameters = {\n    method: params.method.toUpperCase(),\n    headers: {\n      Accept: params.accept,\n      'X-CSRF-Token': csrf ? csrf.content : '',\n      'X-Requested-With': 'XMLHttpRequest',\n    },\n  };\n\n  if (params.fillContentType) {\n    // when sending multipart/form-data\n    parameters.headers['Content-Type'] = 'application/json';\n  }\n\n  if (\n    ['POST', 'PATCH'].includes(parameters.method) &&\n    (Object.keys(params.data).length > 0 || params.data instanceof FormData)\n  ) {\n    if (params.fillContentType) {\n      params.data = JSON.stringify(params.data);\n    }\n\n    parameters.body = params.data;\n  }\n\n  return fetch(url, parameters).then(response => {\n    if (params.accept === 'application/json, text/plain, */*') {\n      return response.json();\n    } else {\n      return response;\n    }\n  });\n}\n", "import TomSelect from 'tom-select/dist/js/tom-select.complete.min.js';\nimport makeRequest from './make_request';\n\nexport const initializeTomSelect = function (nodeList) {\n  nodeList.forEach(select => {\n    // if already initialized for a given element\n    if (select.tomselect) return;\n\n    // TomSelect re-appends the currently selected <option> to the end of\n    // the underlying <select> element (see updateOriginalInput in the\n    // tom-select source). This corrupts the DOM order that \"$order\" relies\n    // on, so on any later re-initialization (e.g. after a Turbo cache\n    // restore) the previously selected option ends up last. To keep the\n    // original order stable, store it once as a data attribute that stays\n    // attached to the option regardless of where TomSelect moves it.\n    Array.from(select.options).forEach((option, index) => {\n      if (option.dataset.order === undefined) {\n        option.dataset.order = String(index).padStart(6, '0');\n      }\n    });\n\n    let options = {\n      plugins: ['change_listener', 'dropdown_input', 'no_backspace_delete'],\n      render: {},\n      maxOptions: null,\n      sortField: [{ field: 'order' }, { field: '$score' }],\n      dropdownParent:\n        select.closest('#canvas') || select.closest('.offcanvas')\n          ? select.closest('.form-control')\n          : 'body',\n      onInitialize: function () {\n        let placeholder = document.createElement('div');\n        placeholder.className = 'ts-placeholder';\n        placeholder.innerText = this.input.dataset.placeholder;\n        this.control.append(placeholder);\n        const defaultPlaceholder =\n          this.control.querySelector('.items-placeholder');\n        if (defaultPlaceholder) {\n          defaultPlaceholder.remove();\n        }\n      },\n      onDropdownOpen: function (dropdown) {\n        const selectElement = this.input;\n        selectElement.dispatchEvent(\n          new CustomEvent('tom-select:dropdownOpen', { bubbles: false })\n        );\n        const bounding = dropdown.getBoundingClientRect();\n        if (\n          bounding.bottom >\n            (window.innerHeight || document.documentElement.clientHeight) ||\n          bounding.right >\n            (window.innerWidth || document.documentElement.clientWidth)\n        ) {\n          dropdown.scrollIntoView(true);\n        }\n        // TomSelect internally re-highlights an option right after \"open\"\n        // fires (sometimes the stale/first option, depending on how the\n        // previous selection was made). Deferring to a macrotask lets that\n        // internal logic finish first, so our correction to the currently\n        // selected option always wins.\n        if (this.settings.mode === 'single' && this.items.length) {\n          const selectedOption = this.getOption(this.items[0]);\n          if (selectedOption) {\n            setTimeout(() => {\n              if (this.isOpen) {\n                this.setActiveOption(selectedOption);\n              }\n            }, 0);\n          }\n        }\n      },\n      onDropdownClose: function () {\n        const selectElement = this.input;\n        selectElement.dispatchEvent(\n          new CustomEvent('tom-select:dropdownClose', { bubbles: false })\n        );\n      }\n    };\n\n    const {\n      allowClear,\n      sort,\n      loadingDataZoznam,\n      loadingData,\n      loadingDataSkladovaKarta,\n      text,\n      loadingDataCisStat,\n      loadSyntUcet,\n      loadAnalytUcet,\n      loadVykazPolozka,\n      szcp\n    } = select.dataset;\n\n    if (sort) {\n      options.sortField = sort === 'desc' ? descendingSort : ascendingSort;\n    }\n\n    if (select.hasAttribute('multiple')) {\n      options.plugins.push('remove_button');\n    }\n\n    if (allowClear === 'true') {\n      options.plugins.push('clear_button');\n    }\n\n    if (szcp === 'true') {\n      options.render.option = function (data, escape) {\n        return `<div>${escape(data.text)}</div>`;\n      };\n      options.render.item = function (data, escape) {\n        const option = Array.from(select.options).find(\n          item => item.value === String(data.value)\n        );\n\n        return `<div title=\"${escape(data.text)}\">${escape(\n          option?.dataset.kod || data.text\n        )}</div>`;\n      };\n    }\n\n    if (select.id === 'kod_firmy') {\n      options.sortField = [{ field: 'order' }, { field: '$score' }];\n      options.plugins.push('no_backspace_delete');\n    }\n\n    if (loadingDataZoznam === 'true') {\n      options.sortField = [{ field: 'obchodne_meno' }, { field: '$score' }];\n      options.valueField = 'obchodne_meno';\n      options.labelField = 'obchodne_meno';\n      options.searchField = 'obchodne_meno';\n      options.load = function (query, callback) {\n        makeRequest(\n          `/partners/podla-obchodneho-mena?str=${encodeURIComponent(query)}`\n        )\n          .then(json => {\n            this.clearOptions();\n            callback(json.items);\n          })\n          .catch(() => callback());\n      };\n      options.render = {\n        option: function (data, escape) {\n          return setLabel(data, escape);\n        },\n        item: function (data, escape) {\n          return setLabel(data, escape);\n        },\n        no_results: function (data, escape) {\n          return (\n            '<div class=\"no-results\">No results found for \"' +\n            escape(data.input) +\n            '\"</div>'\n          );\n        }\n      };\n    }\n\n    if (loadingData === 'true') {\n      options.sortField = [{ field: 'obchodne_meno' }, { field: '$score' }];\n      options.valueField = 'id';\n      options.searchField = ['interny_nazov', 'obchodne_meno', 'id', 'kod'];\n      options.load = function (query, callback) {\n        let editForm = document.querySelector('form[id^=\"edit_\"]');\n        makeRequest(\n          `/partners/podla-mena?str=${encodeURIComponent(query)}${\n            editForm ? `&id=${editForm.id.split('_').pop()}` : ''\n          }`\n        )\n          .then(json => {\n            this.clearOptions();\n            callback(json.items);\n          })\n          .catch(() => callback());\n      };\n\n      options.render = {\n        option: function (data, escape) {\n          return setPartnerLabel(data, escape);\n        },\n        item: function (data, escape) {\n          return setPartnerLabel(data, escape);\n        }\n      };\n\n      options.onChange = function () {\n        let tsOption = this.options[this.items[0]];\n        let desirableOption = this.input.querySelector(\n          `option[value=\"${this.items[0]}\"]`\n        );\n\n        if (desirableOption) {\n          desirableOption.dataset.zeroVat =\n            tsOption.zeroVat ?? tsOption.zero_vat ?? false;\n          desirableOption.dataset.obchodneMeno = tsOption.obchodne_meno;\n        }\n      };\n    }\n\n    if (loadingDataSkladovaKarta === 'true') {\n      let okruh = document.getElementById('okruh_id');\n      okruh = okruh ? parseInt(okruh.value) : null;\n      let model_id;\n\n      switch (okruh) {\n        case 4:\n          model_id = document.getElementById(\n            'pokladnicny_doklad_pokladna_id'\n          ).value;\n          break;\n        default:\n          let dodavatel = document.querySelector('[name$=\"[dodavatel_id]\"]');\n          model_id = dodavatel ? dodavatel.value : '';\n          break;\n      }\n\n      options.sortField = [{ field: 'nazov_sb' }, { field: '$score' }];\n      options.valueField = 'id';\n      options.labelField = 'nazov_sb';\n      options.searchField = 'nazov_sb';\n\n      options.load = function (query, callback) {\n        let item = select.closest('.stock-item');\n        let evidencia = item\n          ? select\n              .closest('.stock-item')\n              .querySelector('#' + select.id.replace('id', 'evidencia_id'))\n          : null;\n\n        makeRequest(\n          `/skladova_kartas/list-podla-mena?str=${encodeURIComponent(\n            query\n          )}&id=${\n            evidencia ? evidencia.value : null\n          }&okruh_id=${okruh}&model_id=${model_id}&evidencia_id=${\n            evidencia ? evidencia.value : null\n          }`\n        )\n          .then(json => callback(json))\n          .catch(() => callback());\n      };\n\n      options.onItemAdd = function (value, $item) {\n        this.input\n          .querySelectorAll('option:not([value=\"\"])')\n          .forEach(option => {\n            option.remove();\n          });\n      };\n\n      options.onChange = function () {\n        let tsOption = this.options[this.items[0]];\n        let desirableOption = this.input.querySelector(\n          `option[value=\"${this.items[0]}\"]`\n        );\n\n        if (desirableOption) {\n          desirableOption.dataset.nazov = tsOption.nazov;\n          desirableOption.dataset.popis = tsOption.popis;\n          desirableOption.dataset.aktualnaCena = tsOption.aktualnaCena;\n          desirableOption.dataset.predajnaCena = tsOption.predajnaCena;\n          desirableOption.dataset.nakupnaCena = tsOption.nakupnaCena;\n          desirableOption.dataset.jednotky = tsOption.jednotky\n            ? tsOption.jednotky.split(',')\n            : '';\n          desirableOption.dataset.jednotkyKoef = tsOption.jednotkyKoef\n            ? tsOption.jednotkyKoef.split(',')\n            : '';\n          desirableOption.dataset.aktualneMnozstvo = tsOption.aktualneMnozstvo;\n          desirableOption.dataset.stredisko = tsOption.stredisko || '';\n          desirableOption.dataset.zakazka = tsOption.zakazka ?? '';\n          desirableOption.dataset.cinnost = tsOption.cinnost ?? '';\n          desirableOption.dataset.pracovnik = tsOption.pracovnik ?? '';\n          desirableOption.dataset.dphPerc = tsOption.dphPerc ?? '';\n          desirableOption.dataset.mernaJednotka = tsOption.mernaJednotka;\n        }\n      };\n\n      if (okruh) {\n        options.render['item'] = function (data, escape) {\n          return `<div title=\"${escape(data.nazov_sb)}\"\n    \t\t\t\tdata-nazov=\"${escape(data.nazov) ?? ''}\"\n    \t\t\t\tdata-popis=\"${escape(data.popis) ?? ''}\"\n    \t\t\t\tdata-aktualna-cena=\"${escape(data.aktualnaCena) ?? ''}\"\n    \t\t\t\tdata-predajna-cena=\"${escape(data.predajnaCena) ?? ''}\"\n    \t\t\t\tdata-nakupna-cena=\"${escape(data.nakupnaCena) ?? ''}\"\n    \t\t\t\tdata-jednotky=\"${escape(data.jednotky) ?? ''}\"\n    \t\t\t\tdata-jednotky-koef=\"${escape(data.jednotkyKoef) ?? ''}\"\n    \t\t\t\tdata-aktualne-mnozstvo=\"${escape(data.aktualneMnozstvo) ?? ''}\"\n    \t\t\t\tdata-stredisko=\"${escape(data.stredisko) || ''}\"\n    \t\t\t\tdata-zakazka=\"${escape(data.zakazka) ?? ''}\"\n    \t\t\t\tdata-cinnost=\"${escape(data.cinnost) ?? ''}\"\n    \t\t\t\tdata-pracovnik=\"${escape(data.pracovnik) ?? ''}\"\n    \t\t\t\tdata-dphPerc=\"${escape(data.dphPerc) ?? ''}\"\n    \t\t\t\tdata-merna-jednotka=\"${escape(data.mernaJednotka) ?? ''}\"\n    \t\t\t>${escape(data.nazov)}</div>`;\n        };\n      }\n    }\n\n    if (loadingDataCisStat === 'true') {\n      options.sortField = [{ field: 'nazov' }, { field: '$score' }];\n      options.valueField = 'id';\n      options.labelField = 'nazov';\n      options.searchField = 'nazov';\n\n      options.load = function (query, callback) {\n        makeRequest(`/cis_stats?str=${encodeURIComponent(query)}`)\n          .then(json => callback(json.items))\n          .catch(() => callback());\n      };\n    }\n\n    const SU_AU_TEXT_LENGTH = 35;\n\n    if (loadSyntUcet === 'true') {\n      options.sortField = [{ field: 'kod' }, { field: '$score' }];\n      options.valueField = 'id';\n      options.labelField = 'concated';\n      options.searchField = 'concated';\n\n      options.load = function (query, callback) {\n        makeRequest(`/synt-ucets/get-by-name?str=${encodeURIComponent(query)}`)\n          .then(json => callback(json.items))\n          .catch(callback());\n      };\n\n      options.render['item'] = function (data, escape) {\n        select.innerHTML += `<option ${\n          data.$order === 1 ? 'selected=\"selected\"' : ''\n        } data-kod=\"${data.kod}\" data-concated=\"${data.concated}\" value=\"${\n          data.id\n        }\">${data.kod}</option>`;\n\n        return `<div title=\"${escape(data.concated)}\">${escape(\n          text\n            ? data[text].slice(0, SU_AU_TEXT_LENGTH) +\n                (data[text].length > SU_AU_TEXT_LENGTH ? '...' : '')\n            : data.kod\n        )}</div>`;\n      };\n    }\n\n    if (loadAnalytUcet === 'true') {\n      options.sortField = [{ field: 'kod' }, { field: '$score' }];\n      options.labelField = 'concated';\n      options.searchField = 'concated';\n\n      options.render['item'] = function (data, escape) {\n        return `<div title=\"${escape(data.concated)}\">${escape(\n          text && data[text]\n            ? data[text].slice(0, SU_AU_TEXT_LENGTH) +\n                (data[text].length > SU_AU_TEXT_LENGTH ? '...' : '')\n            : data.kod\n        )}</div>`;\n      };\n    }\n\n    if (loadVykazPolozka === 'true') {\n      options.sortField = [{ field: 'concated' }, { field: '$score' }];\n      options.valueField = 'id';\n      options.labelField = 'concated';\n      options.searchField = 'concated';\n\n      const parent =\n        select.closest('.vykaz-polozka-ucet') ||\n        select.closest('.ucet-def-vykaz');\n\n      options.load = function (query, callback) {\n        makeRequest(\n          `/vykazs/get-item/${\n            parent.querySelector('[id*=\"_vykaz_id\"]').value\n          }?str=${encodeURIComponent(query)}`\n        )\n          .then(json => callback(json.items))\n          .catch(() => callback());\n      };\n\n      options.render['item'] = function (data, escape) {\n        return `<div title=\"${escape(data.concated)}\">${escape(\n          data.concated\n        )}</div>`;\n      };\n    }\n\n    options.render['no_results'] = function (data, escape) {\n      return (\n        '<div class=\"no-results\">Pre \"' +\n        escape(data.input) +\n        '\" sa nena\u0161li \u017Eiadne z\u00E1znamy</div>'\n      );\n    };\n\n    new TomSelect(select, options);\n  });\n};\n\nfunction setLabel(data, escape) {\n  let label = data.obchodne_meno;\n\n  if (data.interny_nazov) {\n    label = `${data.interny_nazov} - ${label}, k\u00F3d: ${\n      data.kod && data.kod !== '' ? data.kod : data.id\n    }`;\n  }\n\n  return `<div title=\"${escape(label)}\">${escape(label)}</div>`;\n}\n\nfunction setPartnerLabel(data, escape) {\n  return `<div title=\"${escape(data.text)}\" data-zero-vat=\"${\n    data.zeroVat ?? data.zero_vat ?? false\n  }\" data-obchodne-meno=${data.obchodne_meno}>${escape(data.text)}</div>`;\n}\n\nconst descendingSort = function (a, b) {\n  return this.items[b.id].text.localeCompare(this.items[a.id].text);\n};\n\nconst ascendingSort = function (a, b) {\n  return this.items[a.id].text.localeCompare(this.items[b.id].text);\n};\n", "function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };", "export var DEFAULT_CONFIG = {\n  // minimum relative difference between two compared values,\n  // used by all comparison functions\n  epsilon: 1e-12,\n  // type of default matrix output. Choose 'matrix' (default) or 'array'\n  matrix: 'Matrix',\n  // type of default number output. Choose 'number' (default) 'BigNumber', or 'Fraction\n  number: 'number',\n  // number of significant digits in BigNumbers\n  precision: 64,\n  // predictable output type of functions. When true, output type depends only\n  // on the input types. When false (default), output type can vary depending\n  // on input values. For example `math.sqrt(-4)` returns `complex('2i')` when\n  // predictable is false, and returns `NaN` when true.\n  predictable: false,\n  // random seed for seeded pseudo random number generation\n  // null = randomly seed\n  randomSeed: null\n};", "// type checks for all known types\n//\n// note that:\n//\n// - check by duck-typing on a property like `isUnit`, instead of checking instanceof.\n//   instanceof cannot be used because that would not allow to pass data from\n//   one instance of math.js to another since each has it's own instance of Unit.\n// - check the `isUnit` property via the constructor, so there will be no\n//   matches for \"fake\" instances like plain objects with a property `isUnit`.\n//   That is important for security reasons.\n// - It must not be possible to override the type checks used internally,\n//   for security reasons, so these functions are not exposed in the expression\n//   parser.\nexport function isNumber(x) {\n  return typeof x === 'number';\n}\nexport function isBigNumber(x) {\n  if (!x || typeof x !== 'object' || typeof x.constructor !== 'function') {\n    return false;\n  }\n\n  if (x.isBigNumber === true && typeof x.constructor.prototype === 'object' && x.constructor.prototype.isBigNumber === true) {\n    return true;\n  }\n\n  if (typeof x.constructor.isDecimal === 'function' && x.constructor.isDecimal(x) === true) {\n    return true;\n  }\n\n  return false;\n}\nexport function isComplex(x) {\n  return x && typeof x === 'object' && Object.getPrototypeOf(x).isComplex === true || false;\n}\nexport function isFraction(x) {\n  return x && typeof x === 'object' && Object.getPrototypeOf(x).isFraction === true || false;\n}\nexport function isUnit(x) {\n  return x && x.constructor.prototype.isUnit === true || false;\n}\nexport function isString(x) {\n  return typeof x === 'string';\n}\nexport var isArray = Array.isArray;\nexport function isMatrix(x) {\n  return x && x.constructor.prototype.isMatrix === true || false;\n}\n/**\n * Test whether a value is a collection: an Array or Matrix\n * @param {*} x\n * @returns {boolean} isCollection\n */\n\nexport function isCollection(x) {\n  return Array.isArray(x) || isMatrix(x);\n}\nexport function isDenseMatrix(x) {\n  return x && x.isDenseMatrix && x.constructor.prototype.isMatrix === true || false;\n}\nexport function isSparseMatrix(x) {\n  return x && x.isSparseMatrix && x.constructor.prototype.isMatrix === true || false;\n}\nexport function isRange(x) {\n  return x && x.constructor.prototype.isRange === true || false;\n}\nexport function isIndex(x) {\n  return x && x.constructor.prototype.isIndex === true || false;\n}\nexport function isBoolean(x) {\n  return typeof x === 'boolean';\n}\nexport function isResultSet(x) {\n  return x && x.constructor.prototype.isResultSet === true || false;\n}\nexport function isHelp(x) {\n  return x && x.constructor.prototype.isHelp === true || false;\n}\nexport function isFunction(x) {\n  return typeof x === 'function';\n}\nexport function isDate(x) {\n  return x instanceof Date;\n}\nexport function isRegExp(x) {\n  return x instanceof RegExp;\n}\nexport function isObject(x) {\n  return !!(x && typeof x === 'object' && x.constructor === Object && !isComplex(x) && !isFraction(x));\n}\nexport function isNull(x) {\n  return x === null;\n}\nexport function isUndefined(x) {\n  return x === undefined;\n}\nexport function isAccessorNode(x) {\n  return x && x.isAccessorNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isArrayNode(x) {\n  return x && x.isArrayNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isAssignmentNode(x) {\n  return x && x.isAssignmentNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isBlockNode(x) {\n  return x && x.isBlockNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isConditionalNode(x) {\n  return x && x.isConditionalNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isConstantNode(x) {\n  return x && x.isConstantNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isFunctionAssignmentNode(x) {\n  return x && x.isFunctionAssignmentNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isFunctionNode(x) {\n  return x && x.isFunctionNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isIndexNode(x) {\n  return x && x.isIndexNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isNode(x) {\n  return x && x.isNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isObjectNode(x) {\n  return x && x.isObjectNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isOperatorNode(x) {\n  return x && x.isOperatorNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isParenthesisNode(x) {\n  return x && x.isParenthesisNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isRangeNode(x) {\n  return x && x.isRangeNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isSymbolNode(x) {\n  return x && x.isSymbolNode === true && x.constructor.prototype.isNode === true || false;\n}\nexport function isChain(x) {\n  return x && x.constructor.prototype.isChain === true || false;\n}\nexport function typeOf(x) {\n  var t = typeof x;\n\n  if (t === 'object') {\n    // JavaScript types\n    if (x === null) return 'null';\n    if (Array.isArray(x)) return 'Array';\n    if (x instanceof Date) return 'Date';\n    if (x instanceof RegExp) return 'RegExp'; // math.js types\n\n    if (isBigNumber(x)) return 'BigNumber';\n    if (isComplex(x)) return 'Complex';\n    if (isFraction(x)) return 'Fraction';\n    if (isMatrix(x)) return 'Matrix';\n    if (isUnit(x)) return 'Unit';\n    if (isIndex(x)) return 'Index';\n    if (isRange(x)) return 'Range';\n    if (isResultSet(x)) return 'ResultSet';\n    if (isNode(x)) return x.type;\n    if (isChain(x)) return 'Chain';\n    if (isHelp(x)) return 'Help';\n    return 'Object';\n  }\n\n  if (t === 'function') return 'Function';\n  return t; // can be 'string', 'number', 'boolean', ...\n}", "import { isBigNumber } from './is.js';\n/**\n * Clone an object\n *\n *     clone(x)\n *\n * Can clone any primitive type, array, and object.\n * If x has a function clone, this function will be invoked to clone the object.\n *\n * @param {*} x\n * @return {*} clone\n */\n\nexport function clone(x) {\n  var type = typeof x; // immutable primitive types\n\n  if (type === 'number' || type === 'string' || type === 'boolean' || x === null || x === undefined) {\n    return x;\n  } // use clone function of the object when available\n\n\n  if (typeof x.clone === 'function') {\n    return x.clone();\n  } // array\n\n\n  if (Array.isArray(x)) {\n    return x.map(function (value) {\n      return clone(value);\n    });\n  }\n\n  if (x instanceof Date) return new Date(x.valueOf());\n  if (isBigNumber(x)) return x; // bignumbers are immutable\n\n  if (x instanceof RegExp) throw new TypeError('Cannot clone ' + x); // TODO: clone a RegExp\n  // object\n\n  return mapObject(x, clone);\n}\n/**\n * Apply map to all properties of an object\n * @param {Object} object\n * @param {function} callback\n * @return {Object} Returns a copy of the object with mapped properties\n */\n\nexport function mapObject(object, callback) {\n  var clone = {};\n\n  for (var key in object) {\n    if (hasOwnProperty(object, key)) {\n      clone[key] = callback(object[key]);\n    }\n  }\n\n  return clone;\n}\n/**\n * Extend object a with the properties of object b\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\n\nexport function extend(a, b) {\n  for (var prop in b) {\n    if (hasOwnProperty(b, prop)) {\n      a[prop] = b[prop];\n    }\n  }\n\n  return a;\n}\n/**\n * Deep extend an object a with the properties of object b\n * @param {Object} a\n * @param {Object} b\n * @returns {Object}\n */\n\nexport function deepExtend(a, b) {\n  // TODO: add support for Arrays to deepExtend\n  if (Array.isArray(b)) {\n    throw new TypeError('Arrays are not supported by deepExtend');\n  }\n\n  for (var prop in b) {\n    // We check against prop not being in Object.prototype or Function.prototype\n    // to prevent polluting for example Object.__proto__.\n    if (hasOwnProperty(b, prop) && !(prop in Object.prototype) && !(prop in Function.prototype)) {\n      if (b[prop] && b[prop].constructor === Object) {\n        if (a[prop] === undefined) {\n          a[prop] = {};\n        }\n\n        if (a[prop] && a[prop].constructor === Object) {\n          deepExtend(a[prop], b[prop]);\n        } else {\n          a[prop] = b[prop];\n        }\n      } else if (Array.isArray(b[prop])) {\n        throw new TypeError('Arrays are not supported by deepExtend');\n      } else {\n        a[prop] = b[prop];\n      }\n    }\n  }\n\n  return a;\n}\n/**\n * Deep test equality of all fields in two pairs of arrays or objects.\n * Compares values and functions strictly (ie. 2 is not the same as '2').\n * @param {Array | Object} a\n * @param {Array | Object} b\n * @returns {boolean}\n */\n\nexport function deepStrictEqual(a, b) {\n  var prop, i, len;\n\n  if (Array.isArray(a)) {\n    if (!Array.isArray(b)) {\n      return false;\n    }\n\n    if (a.length !== b.length) {\n      return false;\n    }\n\n    for (i = 0, len = a.length; i < len; i++) {\n      if (!deepStrictEqual(a[i], b[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  } else if (typeof a === 'function') {\n    return a === b;\n  } else if (a instanceof Object) {\n    if (Array.isArray(b) || !(b instanceof Object)) {\n      return false;\n    }\n\n    for (prop in a) {\n      // noinspection JSUnfilteredForInLoop\n      if (!(prop in b) || !deepStrictEqual(a[prop], b[prop])) {\n        return false;\n      }\n    }\n\n    for (prop in b) {\n      // noinspection JSUnfilteredForInLoop\n      if (!(prop in a)) {\n        return false;\n      }\n    }\n\n    return true;\n  } else {\n    return a === b;\n  }\n}\n/**\n * Recursively flatten a nested object.\n * @param {Object} nestedObject\n * @return {Object} Returns the flattened object\n */\n\nexport function deepFlatten(nestedObject) {\n  var flattenedObject = {};\n\n  _deepFlatten(nestedObject, flattenedObject);\n\n  return flattenedObject;\n} // helper function used by deepFlatten\n\nfunction _deepFlatten(nestedObject, flattenedObject) {\n  for (var prop in nestedObject) {\n    if (hasOwnProperty(nestedObject, prop)) {\n      var value = nestedObject[prop];\n\n      if (typeof value === 'object' && value !== null) {\n        _deepFlatten(value, flattenedObject);\n      } else {\n        flattenedObject[prop] = value;\n      }\n    }\n  }\n}\n/**\n * Test whether the current JavaScript engine supports Object.defineProperty\n * @returns {boolean} returns true if supported\n */\n\n\nexport function canDefineProperty() {\n  // test needed for broken IE8 implementation\n  try {\n    if (Object.defineProperty) {\n      Object.defineProperty({}, 'x', {\n        get: function get() {\n          return null;\n        }\n      });\n      return true;\n    }\n  } catch (e) {}\n\n  return false;\n}\n/**\n * Attach a lazy loading property to a constant.\n * The given function `fn` is called once when the property is first requested.\n *\n * @param {Object} object         Object where to add the property\n * @param {string} prop           Property name\n * @param {Function} valueResolver Function returning the property value. Called\n *                                without arguments.\n */\n\nexport function lazy(object, prop, valueResolver) {\n  var _uninitialized = true;\n\n  var _value;\n\n  Object.defineProperty(object, prop, {\n    get: function get() {\n      if (_uninitialized) {\n        _value = valueResolver();\n        _uninitialized = false;\n      }\n\n      return _value;\n    },\n    set: function set(value) {\n      _value = value;\n      _uninitialized = false;\n    },\n    configurable: true,\n    enumerable: true\n  });\n}\n/**\n * Traverse a path into an object.\n * When a namespace is missing, it will be created\n * @param {Object} object\n * @param {string | string[]} path   A dot separated string like 'name.space'\n * @return {Object} Returns the object at the end of the path\n */\n\nexport function traverse(object, path) {\n  if (path && typeof path === 'string') {\n    return traverse(object, path.split('.'));\n  }\n\n  var obj = object;\n\n  if (path) {\n    for (var i = 0; i < path.length; i++) {\n      var key = path[i];\n\n      if (!(key in obj)) {\n        obj[key] = {};\n      }\n\n      obj = obj[key];\n    }\n  }\n\n  return obj;\n}\n/**\n * A safe hasOwnProperty\n * @param {Object} object\n * @param {string} property\n */\n\nexport function hasOwnProperty(object, property) {\n  return object && Object.hasOwnProperty.call(object, property);\n}\n/**\n * Test whether an object is a factory. a factory has fields:\n *\n * - factory: function (type: Object, config: Object, load: function, typed: function [, math: Object])   (required)\n * - name: string (optional)\n * - path: string    A dot separated path (optional)\n * - math: boolean   If true (false by default), the math namespace is passed\n *                   as fifth argument of the factory function\n *\n * @param {*} object\n * @returns {boolean}\n */\n\nexport function isLegacyFactory(object) {\n  return object && typeof object.factory === 'function';\n}\n/**\n * Get a nested property from an object\n * @param {Object} object\n * @param {string | string[]} path\n * @returns {Object}\n */\n\nexport function get(object, path) {\n  if (typeof path === 'string') {\n    if (isPath(path)) {\n      return get(object, path.split('.'));\n    } else {\n      return object[path];\n    }\n  }\n\n  var child = object;\n\n  for (var i = 0; i < path.length; i++) {\n    var key = path[i];\n    child = child ? child[key] : undefined;\n  }\n\n  return child;\n}\n/**\n * Set a nested property in an object\n * Mutates the object itself\n * If the path doesn't exist, it will be created\n * @param {Object} object\n * @param {string | string[]} path\n * @param {*} value\n * @returns {Object}\n */\n\nexport function set(object, path, value) {\n  if (typeof path === 'string') {\n    if (isPath(path)) {\n      return set(object, path.split('.'), value);\n    } else {\n      object[path] = value;\n      return object;\n    }\n  }\n\n  var child = object;\n\n  for (var i = 0; i < path.length - 1; i++) {\n    var key = path[i];\n\n    if (child[key] === undefined) {\n      child[key] = {};\n    }\n\n    child = child[key];\n  }\n\n  if (path.length > 0) {\n    var lastKey = path[path.length - 1];\n    child[lastKey] = value;\n  }\n\n  return object;\n}\n/**\n * Create an object composed of the picked object properties\n * @param {Object} object\n * @param {string[]} properties\n * @param {function} [transform] Optional value to transform a value when picking it\n * @return {Object}\n */\n\nexport function pick(object, properties, transform) {\n  var copy = {};\n\n  for (var i = 0; i < properties.length; i++) {\n    var key = properties[i];\n    var value = get(object, key);\n\n    if (value !== undefined) {\n      set(copy, key, transform ? transform(value, key) : value);\n    }\n  }\n\n  return copy;\n}\n/**\n * Shallow version of pick, creating an object composed of the picked object properties\n * but not for nested properties\n * @param {Object} object\n * @param {string[]} properties\n * @return {Object}\n */\n\nexport function pickShallow(object, properties) {\n  var copy = {};\n\n  for (var i = 0; i < properties.length; i++) {\n    var key = properties[i];\n    var value = object[key];\n\n    if (value !== undefined) {\n      copy[key] = value;\n    }\n  }\n\n  return copy;\n}\nexport function values(object) {\n  return Object.keys(object).map(key => object[key]);\n} // helper function to test whether a string contains a path like 'user.name'\n\nfunction isPath(str) {\n  return str.indexOf('.') !== -1;\n}", "import { clone, mapObject, deepExtend } from '../../utils/object.js';\nimport { DEFAULT_CONFIG } from '../config.js';\nexport var MATRIX_OPTIONS = ['Matrix', 'Array']; // valid values for option matrix\n\nexport var NUMBER_OPTIONS = ['number', 'BigNumber', 'Fraction']; // valid values for option number\n\nexport function configFactory(config, emit) {\n  /**\n   * Set configuration options for math.js, and get current options.\n   * Will emit a 'config' event, with arguments (curr, prev, changes).\n   *\n   * This function is only available on a mathjs instance created using `create`.\n   *\n   * Syntax:\n   *\n   *     math.config(config: Object): Object\n   *\n   * Examples:\n   *\n   *\n   *     import { create, all } from 'mathjs'\n   *\n   *     // create a mathjs instance\n   *     const math = create(all)\n   *\n   *     math.config().number                // outputs 'number'\n   *     math.evaluate('0.4')                // outputs number 0.4\n   *     math.config({number: 'Fraction'})\n   *     math.evaluate('0.4')                // outputs Fraction 2/5\n   *\n   * @param {Object} [options] Available options:\n   *                            {number} epsilon\n   *                              Minimum relative difference between two\n   *                              compared values, used by all comparison functions.\n   *                            {string} matrix\n   *                              A string 'Matrix' (default) or 'Array'.\n   *                            {string} number\n   *                              A string 'number' (default), 'BigNumber', or 'Fraction'\n   *                            {number} precision\n   *                              The number of significant digits for BigNumbers.\n   *                              Not applicable for Numbers.\n   *                            {string} parenthesis\n   *                              How to display parentheses in LaTeX and string\n   *                              output.\n   *                            {string} randomSeed\n   *                              Random seed for seeded pseudo random number generator.\n   *                              Set to null to randomly seed.\n   * @return {Object} Returns the current configuration\n   */\n  function _config(options) {\n    if (options) {\n      var prev = mapObject(config, clone); // validate some of the options\n\n      validateOption(options, 'matrix', MATRIX_OPTIONS);\n      validateOption(options, 'number', NUMBER_OPTIONS); // merge options\n\n      deepExtend(config, options);\n      var curr = mapObject(config, clone);\n      var changes = mapObject(options, clone); // emit 'config' event\n\n      emit('config', curr, prev, changes);\n      return curr;\n    } else {\n      return mapObject(config, clone);\n    }\n  } // attach the valid options to the function so they can be extended\n\n\n  _config.MATRIX_OPTIONS = MATRIX_OPTIONS;\n  _config.NUMBER_OPTIONS = NUMBER_OPTIONS; // attach the config properties as readonly properties to the config function\n\n  Object.keys(DEFAULT_CONFIG).forEach(key => {\n    Object.defineProperty(_config, key, {\n      get: () => config[key],\n      enumerable: true,\n      configurable: true\n    });\n  });\n  return _config;\n}\n/**\n * Test whether an Array contains a specific item.\n * @param {Array.<string>} array\n * @param {string} item\n * @return {boolean}\n */\n\nfunction contains(array, item) {\n  return array.indexOf(item) !== -1;\n}\n/**\n * Validate an option\n * @param {Object} options         Object with options\n * @param {string} name            Name of the option to validate\n * @param {Array.<string>} values  Array with valid values for this option\n */\n\n\nfunction validateOption(options, name, values) {\n  if (options[name] !== undefined && !contains(values, options[name])) {\n    // unknown value\n    console.warn('Warning: Unknown value \"' + options[name] + '\" for configuration option \"' + name + '\". ' + 'Available options: ' + values.map(value => JSON.stringify(value)).join(', ') + '.');\n  }\n}", "import _extends from \"@babel/runtime/helpers/extends\";\nimport { DEFAULT_CONFIG } from '../core/config.js';\nimport { MATRIX_OPTIONS, NUMBER_OPTIONS } from '../core/function/config.js'; // create a read-only version of config\n\nexport var config = /* #__PURE__ */function config(options) {\n  if (options) {\n    throw new Error('The global config is readonly. \\n' + 'Please create a mathjs instance if you want to change the default configuration. \\n' + 'Example:\\n' + '\\n' + '  import { create, all } from \\'mathjs\\';\\n' + '  const mathjs = create(all);\\n' + '  mathjs.config({ number: \\'BigNumber\\' });\\n');\n  }\n\n  return Object.freeze(DEFAULT_CONFIG);\n};\n\n_extends(config, DEFAULT_CONFIG, {\n  MATRIX_OPTIONS,\n  NUMBER_OPTIONS\n});", "import { isNumber } from './is.js';\n/**\n * @typedef {{sign: '+' | '-' | '', coefficients: number[], exponent: number}} SplitValue\n */\n\n/**\n * Check if a number is integer\n * @param {number | boolean} value\n * @return {boolean} isInteger\n */\n\nexport function isInteger(value) {\n  if (typeof value === 'boolean') {\n    return true;\n  }\n\n  return isFinite(value) ? value === Math.round(value) : false;\n}\n/**\n * Calculate the sign of a number\n * @param {number} x\n * @returns {number}\n */\n\nexport var sign = /* #__PURE__ */Math.sign || function (x) {\n  if (x > 0) {\n    return 1;\n  } else if (x < 0) {\n    return -1;\n  } else {\n    return 0;\n  }\n};\n/**\n * Calculate the base-2 logarithm of a number\n * @param {number} x\n * @returns {number}\n */\n\nexport var log2 = /* #__PURE__ */Math.log2 || function log2(x) {\n  return Math.log(x) / Math.LN2;\n};\n/**\n * Calculate the base-10 logarithm of a number\n * @param {number} x\n * @returns {number}\n */\n\nexport var log10 = /* #__PURE__ */Math.log10 || function log10(x) {\n  return Math.log(x) / Math.LN10;\n};\n/**\n * Calculate the natural logarithm of a number + 1\n * @param {number} x\n * @returns {number}\n */\n\nexport var log1p = /* #__PURE__ */Math.log1p || function (x) {\n  return Math.log(x + 1);\n};\n/**\n * Calculate cubic root for a number\n *\n * Code from es6-shim.js:\n *   https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js#L1564-L1577\n *\n * @param {number} x\n * @returns {number} Returns the cubic root of x\n */\n\nexport var cbrt = /* #__PURE__ */Math.cbrt || function cbrt(x) {\n  if (x === 0) {\n    return x;\n  }\n\n  var negate = x < 0;\n  var result;\n\n  if (negate) {\n    x = -x;\n  }\n\n  if (isFinite(x)) {\n    result = Math.exp(Math.log(x) / 3); // from https://en.wikipedia.org/wiki/Cube_root#Numerical_methods\n\n    result = (x / (result * result) + 2 * result) / 3;\n  } else {\n    result = x;\n  }\n\n  return negate ? -result : result;\n};\n/**\n * Calculates exponentiation minus 1\n * @param {number} x\n * @return {number} res\n */\n\nexport var expm1 = /* #__PURE__ */Math.expm1 || function expm1(x) {\n  return x >= 2e-4 || x <= -2e-4 ? Math.exp(x) - 1 : x + x * x / 2 + x * x * x / 6;\n};\n/**\n * Formats a number in a given base\n * @param {number} n\n * @param {number} base\n * @param {number} size\n * @returns {string}\n */\n\nfunction formatNumberToBase(n, base, size) {\n  var prefixes = {\n    2: '0b',\n    8: '0o',\n    16: '0x'\n  };\n  var prefix = prefixes[base];\n  var suffix = '';\n\n  if (size) {\n    if (size < 1) {\n      throw new Error('size must be in greater than 0');\n    }\n\n    if (!isInteger(size)) {\n      throw new Error('size must be an integer');\n    }\n\n    if (n > 2 ** (size - 1) - 1 || n < -(2 ** (size - 1))) {\n      throw new Error(\"Value must be in range [-2^\".concat(size - 1, \", 2^\").concat(size - 1, \"-1]\"));\n    }\n\n    if (!isInteger(n)) {\n      throw new Error('Value must be an integer');\n    }\n\n    if (n < 0) {\n      n = n + 2 ** size;\n    }\n\n    suffix = \"i\".concat(size);\n  }\n\n  var sign = '';\n\n  if (n < 0) {\n    n = -n;\n    sign = '-';\n  }\n\n  return \"\".concat(sign).concat(prefix).concat(n.toString(base)).concat(suffix);\n}\n/**\n * Convert a number to a formatted string representation.\n *\n * Syntax:\n *\n *    format(value)\n *    format(value, options)\n *    format(value, precision)\n *    format(value, fn)\n *\n * Where:\n *\n *    {number} value   The value to be formatted\n *    {Object} options An object with formatting options. Available options:\n *                     {string} notation\n *                         Number notation. Choose from:\n *                         'fixed'          Always use regular number notation.\n *                                          For example '123.40' and '14000000'\n *                         'exponential'    Always use exponential notation.\n *                                          For example '1.234e+2' and '1.4e+7'\n *                         'engineering'    Always use engineering notation.\n *                                          For example '123.4e+0' and '14.0e+6'\n *                         'auto' (default) Regular number notation for numbers\n *                                          having an absolute value between\n *                                          `lowerExp` and `upperExp` bounds, and\n *                                          uses exponential notation elsewhere.\n *                                          Lower bound is included, upper bound\n *                                          is excluded.\n *                                          For example '123.4' and '1.4e7'.\n *                         'bin', 'oct, or\n *                         'hex'            Format the number using binary, octal,\n *                                          or hexadecimal notation.\n *                                          For example '0b1101' and '0x10fe'.\n *                     {number} wordSize    The word size in bits to use for formatting\n *                                          in binary, octal, or hexadecimal notation.\n *                                          To be used only with 'bin', 'oct', or 'hex'\n *                                          values for 'notation' option. When this option\n *                                          is defined the value is formatted as a signed\n *                                          twos complement integer of the given word size\n *                                          and the size suffix is appended to the output.\n *                                          For example\n *                                          format(-1, {notation: 'hex', wordSize: 8}) === '0xffi8'.\n *                                          Default value is undefined.\n *                     {number} precision   A number between 0 and 16 to round\n *                                          the digits of the number.\n *                                          In case of notations 'exponential',\n *                                          'engineering', and 'auto',\n *                                          `precision` defines the total\n *                                          number of significant digits returned.\n *                                          In case of notation 'fixed',\n *                                          `precision` defines the number of\n *                                          significant digits after the decimal\n *                                          point.\n *                                          `precision` is undefined by default,\n *                                          not rounding any digits.\n *                     {number} lowerExp    Exponent determining the lower boundary\n *                                          for formatting a value with an exponent\n *                                          when `notation='auto`.\n *                                          Default value is `-3`.\n *                     {number} upperExp    Exponent determining the upper boundary\n *                                          for formatting a value with an exponent\n *                                          when `notation='auto`.\n *                                          Default value is `5`.\n *    {Function} fn    A custom formatting function. Can be used to override the\n *                     built-in notations. Function `fn` is called with `value` as\n *                     parameter and must return a string. Is useful for example to\n *                     format all values inside a matrix in a particular way.\n *\n * Examples:\n *\n *    format(6.4)                                        // '6.4'\n *    format(1240000)                                    // '1.24e6'\n *    format(1/3)                                        // '0.3333333333333333'\n *    format(1/3, 3)                                     // '0.333'\n *    format(21385, 2)                                   // '21000'\n *    format(12.071, {notation: 'fixed'})                // '12'\n *    format(2.3,    {notation: 'fixed', precision: 2})  // '2.30'\n *    format(52.8,   {notation: 'exponential'})          // '5.28e+1'\n *    format(12345678, {notation: 'engineering'})        // '12.345678e+6'\n *\n * @param {number} value\n * @param {Object | Function | number} [options]\n * @return {string} str The formatted value\n */\n\n\nexport function format(value, options) {\n  if (typeof options === 'function') {\n    // handle format(value, fn)\n    return options(value);\n  } // handle special cases\n\n\n  if (value === Infinity) {\n    return 'Infinity';\n  } else if (value === -Infinity) {\n    return '-Infinity';\n  } else if (isNaN(value)) {\n    return 'NaN';\n  } // default values for options\n\n\n  var notation = 'auto';\n  var precision;\n  var wordSize;\n\n  if (options) {\n    // determine notation from options\n    if (options.notation) {\n      notation = options.notation;\n    } // determine precision from options\n\n\n    if (isNumber(options)) {\n      precision = options;\n    } else if (isNumber(options.precision)) {\n      precision = options.precision;\n    }\n\n    if (options.wordSize) {\n      wordSize = options.wordSize;\n\n      if (typeof wordSize !== 'number') {\n        throw new Error('Option \"wordSize\" must be a number');\n      }\n    }\n  } // handle the various notations\n\n\n  switch (notation) {\n    case 'fixed':\n      return toFixed(value, precision);\n\n    case 'exponential':\n      return toExponential(value, precision);\n\n    case 'engineering':\n      return toEngineering(value, precision);\n\n    case 'bin':\n      return formatNumberToBase(value, 2, wordSize);\n\n    case 'oct':\n      return formatNumberToBase(value, 8, wordSize);\n\n    case 'hex':\n      return formatNumberToBase(value, 16, wordSize);\n\n    case 'auto':\n      // remove trailing zeros after the decimal point\n      return toPrecision(value, precision, options && options).replace(/((\\.\\d*?)(0+))($|e)/, function () {\n        var digits = arguments[2];\n        var e = arguments[4];\n        return digits !== '.' ? digits + e : e;\n      });\n\n    default:\n      throw new Error('Unknown notation \"' + notation + '\". ' + 'Choose \"auto\", \"exponential\", \"fixed\", \"bin\", \"oct\", or \"hex.');\n  }\n}\n/**\n * Split a number into sign, coefficients, and exponent\n * @param {number | string} value\n * @return {SplitValue}\n *              Returns an object containing sign, coefficients, and exponent\n */\n\nexport function splitNumber(value) {\n  // parse the input value\n  var match = String(value).toLowerCase().match(/^(-?)(\\d+\\.?\\d*)(e([+-]?\\d+))?$/);\n\n  if (!match) {\n    throw new SyntaxError('Invalid number ' + value);\n  }\n\n  var sign = match[1];\n  var digits = match[2];\n  var exponent = parseFloat(match[4] || '0');\n  var dot = digits.indexOf('.');\n  exponent += dot !== -1 ? dot - 1 : digits.length - 1;\n  var coefficients = digits.replace('.', '') // remove the dot (must be removed before removing leading zeros)\n  .replace(/^0*/, function (zeros) {\n    // remove leading zeros, add their count to the exponent\n    exponent -= zeros.length;\n    return '';\n  }).replace(/0*$/, '') // remove trailing zeros\n  .split('').map(function (d) {\n    return parseInt(d);\n  });\n\n  if (coefficients.length === 0) {\n    coefficients.push(0);\n    exponent++;\n  }\n\n  return {\n    sign,\n    coefficients,\n    exponent\n  };\n}\n/**\n * Format a number in engineering notation. Like '1.23e+6', '2.3e+0', '3.500e-3'\n * @param {number | string} value\n * @param {number} [precision]        Optional number of significant figures to return.\n */\n\nexport function toEngineering(value, precision) {\n  if (isNaN(value) || !isFinite(value)) {\n    return String(value);\n  }\n\n  var split = splitNumber(value);\n  var rounded = roundDigits(split, precision);\n  var e = rounded.exponent;\n  var c = rounded.coefficients; // find nearest lower multiple of 3 for exponent\n\n  var newExp = e % 3 === 0 ? e : e < 0 ? e - 3 - e % 3 : e - e % 3;\n\n  if (isNumber(precision)) {\n    // add zeroes to give correct sig figs\n    while (precision > c.length || e - newExp + 1 > c.length) {\n      c.push(0);\n    }\n  } else {\n    // concatenate coefficients with necessary zeros\n    // add zeros if necessary (for example: 1e+8 -> 100e+6)\n    var missingZeros = Math.abs(e - newExp) - (c.length - 1);\n\n    for (var i = 0; i < missingZeros; i++) {\n      c.push(0);\n    }\n  } // find difference in exponents\n\n\n  var expDiff = Math.abs(e - newExp);\n  var decimalIdx = 1; // push decimal index over by expDiff times\n\n  while (expDiff > 0) {\n    decimalIdx++;\n    expDiff--;\n  } // if all coefficient values are zero after the decimal point and precision is unset, don't add a decimal value.\n  // otherwise concat with the rest of the coefficients\n\n\n  var decimals = c.slice(decimalIdx).join('');\n  var decimalVal = isNumber(precision) && decimals.length || decimals.match(/[1-9]/) ? '.' + decimals : '';\n  var str = c.slice(0, decimalIdx).join('') + decimalVal + 'e' + (e >= 0 ? '+' : '') + newExp.toString();\n  return rounded.sign + str;\n}\n/**\n * Format a number with fixed notation.\n * @param {number | string} value\n * @param {number} [precision=undefined]  Optional number of decimals after the\n *                                        decimal point. null by default.\n */\n\nexport function toFixed(value, precision) {\n  if (isNaN(value) || !isFinite(value)) {\n    return String(value);\n  }\n\n  var splitValue = splitNumber(value);\n  var rounded = typeof precision === 'number' ? roundDigits(splitValue, splitValue.exponent + 1 + precision) : splitValue;\n  var c = rounded.coefficients;\n  var p = rounded.exponent + 1; // exponent may have changed\n  // append zeros if needed\n\n  var pp = p + (precision || 0);\n\n  if (c.length < pp) {\n    c = c.concat(zeros(pp - c.length));\n  } // prepend zeros if needed\n\n\n  if (p < 0) {\n    c = zeros(-p + 1).concat(c);\n    p = 1;\n  } // insert a dot if needed\n\n\n  if (p < c.length) {\n    c.splice(p, 0, p === 0 ? '0.' : '.');\n  }\n\n  return rounded.sign + c.join('');\n}\n/**\n * Format a number in exponential notation. Like '1.23e+5', '2.3e+0', '3.500e-3'\n * @param {number | string} value\n * @param {number} [precision]  Number of digits in formatted output.\n *                              If not provided, the maximum available digits\n *                              is used.\n */\n\nexport function toExponential(value, precision) {\n  if (isNaN(value) || !isFinite(value)) {\n    return String(value);\n  } // round if needed, else create a clone\n\n\n  var split = splitNumber(value);\n  var rounded = precision ? roundDigits(split, precision) : split;\n  var c = rounded.coefficients;\n  var e = rounded.exponent; // append zeros if needed\n\n  if (c.length < precision) {\n    c = c.concat(zeros(precision - c.length));\n  } // format as `C.CCCe+EEE` or `C.CCCe-EEE`\n\n\n  var first = c.shift();\n  return rounded.sign + first + (c.length > 0 ? '.' + c.join('') : '') + 'e' + (e >= 0 ? '+' : '') + e;\n}\n/**\n * Format a number with a certain precision\n * @param {number | string} value\n * @param {number} [precision=undefined] Optional number of digits.\n * @param {{lowerExp: number | undefined, upperExp: number | undefined}} [options]\n *                                       By default:\n *                                         lowerExp = -3 (incl)\n *                                         upper = +5 (excl)\n * @return {string}\n */\n\nexport function toPrecision(value, precision, options) {\n  if (isNaN(value) || !isFinite(value)) {\n    return String(value);\n  } // determine lower and upper bound for exponential notation.\n\n\n  var lowerExp = options && options.lowerExp !== undefined ? options.lowerExp : -3;\n  var upperExp = options && options.upperExp !== undefined ? options.upperExp : 5;\n  var split = splitNumber(value);\n  var rounded = precision ? roundDigits(split, precision) : split;\n\n  if (rounded.exponent < lowerExp || rounded.exponent >= upperExp) {\n    // exponential notation\n    return toExponential(value, precision);\n  } else {\n    var c = rounded.coefficients;\n    var e = rounded.exponent; // append trailing zeros\n\n    if (c.length < precision) {\n      c = c.concat(zeros(precision - c.length));\n    } // append trailing zeros\n    // TODO: simplify the next statement\n\n\n    c = c.concat(zeros(e - c.length + 1 + (c.length < precision ? precision - c.length : 0))); // prepend zeros\n\n    c = zeros(-e).concat(c);\n    var dot = e > 0 ? e : 0;\n\n    if (dot < c.length - 1) {\n      c.splice(dot + 1, 0, '.');\n    }\n\n    return rounded.sign + c.join('');\n  }\n}\n/**\n * Round the number of digits of a number *\n * @param {SplitValue} split       A value split with .splitNumber(value)\n * @param {number} precision  A positive integer\n * @return {SplitValue}\n *              Returns an object containing sign, coefficients, and exponent\n *              with rounded digits\n */\n\nexport function roundDigits(split, precision) {\n  // create a clone\n  var rounded = {\n    sign: split.sign,\n    coefficients: split.coefficients,\n    exponent: split.exponent\n  };\n  var c = rounded.coefficients; // prepend zeros if needed\n\n  while (precision <= 0) {\n    c.unshift(0);\n    rounded.exponent++;\n    precision++;\n  }\n\n  if (c.length > precision) {\n    var removed = c.splice(precision, c.length - precision);\n\n    if (removed[0] >= 5) {\n      var i = precision - 1;\n      c[i]++;\n\n      while (c[i] === 10) {\n        c.pop();\n\n        if (i === 0) {\n          c.unshift(0);\n          rounded.exponent++;\n          i++;\n        }\n\n        i--;\n        c[i]++;\n      }\n    }\n  }\n\n  return rounded;\n}\n/**\n * Create an array filled with zeros.\n * @param {number} length\n * @return {Array}\n */\n\nfunction zeros(length) {\n  var arr = [];\n\n  for (var i = 0; i < length; i++) {\n    arr.push(0);\n  }\n\n  return arr;\n}\n/**\n * Count the number of significant digits of a number.\n *\n * For example:\n *   2.34 returns 3\n *   0.0034 returns 2\n *   120.5e+30 returns 4\n *\n * @param {number} value\n * @return {number} digits   Number of significant digits\n */\n\n\nexport function digits(value) {\n  return value.toExponential().replace(/e.*$/, '') // remove exponential notation\n  .replace(/^0\\.?0*|\\./, '') // remove decimal point and leading zeros\n  .length;\n}\n/**\n * Minimum number added to one that makes the result different than one\n */\n\nexport var DBL_EPSILON = Number.EPSILON || 2.2204460492503130808472633361816E-16;\n/**\n * Compares two floating point numbers.\n * @param {number} x          First value to compare\n * @param {number} y          Second value to compare\n * @param {number} [epsilon]  The maximum relative difference between x and y\n *                            If epsilon is undefined or null, the function will\n *                            test whether x and y are exactly equal.\n * @return {boolean} whether the two numbers are nearly equal\n*/\n\nexport function nearlyEqual(x, y, epsilon) {\n  // if epsilon is null or undefined, test whether x and y are exactly equal\n  if (epsilon === null || epsilon === undefined) {\n    return x === y;\n  }\n\n  if (x === y) {\n    return true;\n  } // NaN\n\n\n  if (isNaN(x) || isNaN(y)) {\n    return false;\n  } // at this point x and y should be finite\n\n\n  if (isFinite(x) && isFinite(y)) {\n    // check numbers are very close, needed when comparing numbers near zero\n    var diff = Math.abs(x - y);\n\n    if (diff < DBL_EPSILON) {\n      return true;\n    } else {\n      // use relative error\n      return diff <= Math.max(Math.abs(x), Math.abs(y)) * epsilon;\n    }\n  } // Infinite and Number or negative Infinite and positive Infinite cases\n\n\n  return false;\n}\n/**\n * Calculate the hyperbolic arccos of a number\n * @param {number} x\n * @return {number}\n */\n\nexport var acosh = Math.acosh || function (x) {\n  return Math.log(Math.sqrt(x * x - 1) + x);\n};\nexport var asinh = Math.asinh || function (x) {\n  return Math.log(Math.sqrt(x * x + 1) + x);\n};\n/**\n * Calculate the hyperbolic arctangent of a number\n * @param {number} x\n * @return {number}\n */\n\nexport var atanh = Math.atanh || function (x) {\n  return Math.log((1 + x) / (1 - x)) / 2;\n};\n/**\n * Calculate the hyperbolic cosine of a number\n * @param {number} x\n * @returns {number}\n */\n\nexport var cosh = Math.cosh || function (x) {\n  return (Math.exp(x) + Math.exp(-x)) / 2;\n};\n/**\n * Calculate the hyperbolic sine of a number\n * @param {number} x\n * @returns {number}\n */\n\nexport var sinh = Math.sinh || function (x) {\n  return (Math.exp(x) - Math.exp(-x)) / 2;\n};\n/**\n * Calculate the hyperbolic tangent of a number\n * @param {number} x\n * @returns {number}\n */\n\nexport var tanh = Math.tanh || function (x) {\n  var e = Math.exp(2 * x);\n  return (e - 1) / (e + 1);\n};\n/**\n * Returns a value with the magnitude of x and the sign of y.\n * @param {number} x\n * @param {number} y\n * @returns {number}\n */\n\nexport function copysign(x, y) {\n  var signx = x > 0 ? true : x < 0 ? false : 1 / x === Infinity;\n  var signy = y > 0 ? true : y < 0 ? false : 1 / y === Infinity;\n  return signx ^ signy ? -x : x;\n}", "import { cbrt, expm1, isInteger, log10, log1p, log2, sign, toFixed } from '../../utils/number.js';\nvar n1 = 'number';\nvar n2 = 'number, number';\nexport function absNumber(a) {\n  return Math.abs(a);\n}\nabsNumber.signature = n1;\nexport function addNumber(a, b) {\n  return a + b;\n}\naddNumber.signature = n2;\nexport function subtractNumber(a, b) {\n  return a - b;\n}\nsubtractNumber.signature = n2;\nexport function multiplyNumber(a, b) {\n  return a * b;\n}\nmultiplyNumber.signature = n2;\nexport function divideNumber(a, b) {\n  return a / b;\n}\ndivideNumber.signature = n2;\nexport function unaryMinusNumber(x) {\n  return -x;\n}\nunaryMinusNumber.signature = n1;\nexport function unaryPlusNumber(x) {\n  return x;\n}\nunaryPlusNumber.signature = n1;\nexport function cbrtNumber(x) {\n  return cbrt(x);\n}\ncbrtNumber.signature = n1;\nexport function cubeNumber(x) {\n  return x * x * x;\n}\ncubeNumber.signature = n1;\nexport function expNumber(x) {\n  return Math.exp(x);\n}\nexpNumber.signature = n1;\nexport function expm1Number(x) {\n  return expm1(x);\n}\nexpm1Number.signature = n1;\n/**\n * Calculate gcd for numbers\n * @param {number} a\n * @param {number} b\n * @returns {number} Returns the greatest common denominator of a and b\n */\n\nexport function gcdNumber(a, b) {\n  if (!isInteger(a) || !isInteger(b)) {\n    throw new Error('Parameters in function gcd must be integer numbers');\n  } // https://en.wikipedia.org/wiki/Euclidean_algorithm\n\n\n  var r;\n\n  while (b !== 0) {\n    r = a % b;\n    a = b;\n    b = r;\n  }\n\n  return a < 0 ? -a : a;\n}\ngcdNumber.signature = n2;\n/**\n * Calculate lcm for two numbers\n * @param {number} a\n * @param {number} b\n * @returns {number} Returns the least common multiple of a and b\n */\n\nexport function lcmNumber(a, b) {\n  if (!isInteger(a) || !isInteger(b)) {\n    throw new Error('Parameters in function lcm must be integer numbers');\n  }\n\n  if (a === 0 || b === 0) {\n    return 0;\n  } // https://en.wikipedia.org/wiki/Euclidean_algorithm\n  // evaluate lcm here inline to reduce overhead\n\n\n  var t;\n  var prod = a * b;\n\n  while (b !== 0) {\n    t = b;\n    b = a % t;\n    a = t;\n  }\n\n  return Math.abs(prod / a);\n}\nlcmNumber.signature = n2;\n/**\n * Calculate the logarithm of a value, optionally to a given base.\n * @param {number} x\n * @param {number | null | undefined} base\n * @return {number}\n */\n\nexport function logNumber(x, y) {\n  if (y) {\n    return Math.log(x) / Math.log(y);\n  }\n\n  return Math.log(x);\n}\n/**\n * Calculate the 10-base logarithm of a number\n * @param {number} x\n * @return {number}\n */\n\nexport function log10Number(x) {\n  return log10(x);\n}\nlog10Number.signature = n1;\n/**\n * Calculate the 2-base logarithm of a number\n * @param {number} x\n * @return {number}\n */\n\nexport function log2Number(x) {\n  return log2(x);\n}\nlog2Number.signature = n1;\n/**\n * Calculate the natural logarithm of a `number+1`\n * @param {number} x\n * @returns {number}\n */\n\nexport function log1pNumber(x) {\n  return log1p(x);\n}\nlog1pNumber.signature = n1;\n/**\n * Calculate the modulus of two numbers\n * @param {number} x\n * @param {number} y\n * @returns {number} res\n * @private\n */\n\nexport function modNumber(x, y) {\n  if (y > 0) {\n    // We don't use JavaScript's % operator here as this doesn't work\n    // correctly for x < 0 and x === 0\n    // see https://en.wikipedia.org/wiki/Modulo_operation\n    return x - y * Math.floor(x / y);\n  } else if (y === 0) {\n    return x;\n  } else {\n    // y < 0\n    // TODO: implement mod for a negative divisor\n    throw new Error('Cannot calculate mod for a negative divisor');\n  }\n}\nmodNumber.signature = n2;\n/**\n * Calculate the nth root of a, solve x^root == a\n * http://rosettacode.org/wiki/Nth_root#JavaScript\n * @param {number} a\n * @param {number} [2] root\n * @private\n */\n\nexport function nthRootNumber(a) {\n  var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n  var inv = root < 0;\n\n  if (inv) {\n    root = -root;\n  }\n\n  if (root === 0) {\n    throw new Error('Root must be non-zero');\n  }\n\n  if (a < 0 && Math.abs(root) % 2 !== 1) {\n    throw new Error('Root must be odd when a is negative.');\n  } // edge cases zero and infinity\n\n\n  if (a === 0) {\n    return inv ? Infinity : 0;\n  }\n\n  if (!isFinite(a)) {\n    return inv ? 0 : a;\n  }\n\n  var x = Math.pow(Math.abs(a), 1 / root); // If a < 0, we require that root is an odd integer,\n  // so (-1) ^ (1/root) = -1\n\n  x = a < 0 ? -x : x;\n  return inv ? 1 / x : x; // Very nice algorithm, but fails with nthRoot(-2, 3).\n  // Newton's method has some well-known problems at times:\n  // https://en.wikipedia.org/wiki/Newton%27s_method#Failure_analysis\n\n  /*\n  let x = 1 // Initial guess\n  let xPrev = 1\n  let i = 0\n  const iMax = 10000\n  do {\n    const delta = (a / Math.pow(x, root - 1) - x) / root\n    xPrev = x\n    x = x + delta\n    i++\n  }\n  while (xPrev !== x && i < iMax)\n   if (xPrev !== x) {\n    throw new Error('Function nthRoot failed to converge')\n  }\n   return inv ? 1 / x : x\n  */\n}\nexport function signNumber(x) {\n  return sign(x);\n}\nsignNumber.signature = n1;\nexport function sqrtNumber(x) {\n  return Math.sqrt(x);\n}\nsqrtNumber.signature = n1;\nexport function squareNumber(x) {\n  return x * x;\n}\nsquareNumber.signature = n1;\n/**\n * Calculate xgcd for two numbers\n * @param {number} a\n * @param {number} b\n * @return {number} result\n * @private\n */\n\nexport function xgcdNumber(a, b) {\n  // source: https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm\n  var t; // used to swap two variables\n\n  var q; // quotient\n\n  var r; // remainder\n\n  var x = 0;\n  var lastx = 1;\n  var y = 1;\n  var lasty = 0;\n\n  if (!isInteger(a) || !isInteger(b)) {\n    throw new Error('Parameters in function xgcd must be integer numbers');\n  }\n\n  while (b) {\n    q = Math.floor(a / b);\n    r = a - q * b;\n    t = x;\n    x = lastx - q * x;\n    lastx = t;\n    t = y;\n    y = lasty - q * y;\n    lasty = t;\n    a = b;\n    b = r;\n  }\n\n  var res;\n\n  if (a < 0) {\n    res = [-a, -lastx, -lasty];\n  } else {\n    res = [a, a ? lastx : 0, lasty];\n  }\n\n  return res;\n}\nxgcdNumber.signature = n2;\n/**\n * Calculates the power of x to y, x^y, for two numbers.\n * @param {number} x\n * @param {number} y\n * @return {number} res\n */\n\nexport function powNumber(x, y) {\n  // x^Infinity === 0 if -1 < x < 1\n  // A real number 0 is returned instead of complex(0)\n  if (x * x < 1 && y === Infinity || x * x > 1 && y === -Infinity) {\n    return 0;\n  }\n\n  return Math.pow(x, y);\n}\npowNumber.signature = n2;\n/**\n * round a number to the given number of decimals, or to zero if decimals is\n * not provided\n * @param {number} value\n * @param {number} decimals       number of decimals, between 0 and 15 (0 by default)\n * @return {number} roundedValue\n */\n\nexport function roundNumber(value) {\n  var decimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  if (!isInteger(decimals) || decimals < 0 || decimals > 15) {\n    throw new Error('Number of decimals in function round must be an integer from 0 to 15 inclusive');\n  }\n\n  return parseFloat(toFixed(value, decimals));\n}\n/**\n * Calculate the norm of a number, the absolute value.\n * @param {number} x\n * @return {number}\n */\n\nexport function normNumber(x) {\n  return Math.abs(x);\n}\nnormNumber.signature = n1;", "import { isInteger } from '../../utils/number.js';\nvar n1 = 'number';\nvar n2 = 'number, number';\nexport function bitAndNumber(x, y) {\n  if (!isInteger(x) || !isInteger(y)) {\n    throw new Error('Integers expected in function bitAnd');\n  }\n\n  return x & y;\n}\nbitAndNumber.signature = n2;\nexport function bitNotNumber(x) {\n  if (!isInteger(x)) {\n    throw new Error('Integer expected in function bitNot');\n  }\n\n  return ~x;\n}\nbitNotNumber.signature = n1;\nexport function bitOrNumber(x, y) {\n  if (!isInteger(x) || !isInteger(y)) {\n    throw new Error('Integers expected in function bitOr');\n  }\n\n  return x | y;\n}\nbitOrNumber.signature = n2;\nexport function bitXorNumber(x, y) {\n  if (!isInteger(x) || !isInteger(y)) {\n    throw new Error('Integers expected in function bitXor');\n  }\n\n  return x ^ y;\n}\nbitXorNumber.signature = n2;\nexport function leftShiftNumber(x, y) {\n  if (!isInteger(x) || !isInteger(y)) {\n    throw new Error('Integers expected in function leftShift');\n  }\n\n  return x << y;\n}\nleftShiftNumber.signature = n2;\nexport function rightArithShiftNumber(x, y) {\n  if (!isInteger(x) || !isInteger(y)) {\n    throw new Error('Integers expected in function rightArithShift');\n  }\n\n  return x >> y;\n}\nrightArithShiftNumber.signature = n2;\nexport function rightLogShiftNumber(x, y) {\n  if (!isInteger(x) || !isInteger(y)) {\n    throw new Error('Integers expected in function rightLogShift');\n  }\n\n  return x >>> y;\n}\nrightLogShiftNumber.signature = n2;", "/** @param {number} i\n *  @param {number} n\n *  @returns {number} product of i to n\n */\nexport function product(i, n) {\n  if (n < i) {\n    return 1;\n  }\n\n  if (n === i) {\n    return n;\n  }\n\n  var half = n + i >> 1; // divide (n + i) by 2 and truncate to integer\n\n  return product(i, half) * product(half + 1, n);\n}", "import { isInteger } from '../../utils/number.js';\nimport { product } from '../../utils/product.js';\nexport function combinationsNumber(n, k) {\n  if (!isInteger(n) || n < 0) {\n    throw new TypeError('Positive integer value expected in function combinations');\n  }\n\n  if (!isInteger(k) || k < 0) {\n    throw new TypeError('Positive integer value expected in function combinations');\n  }\n\n  if (k > n) {\n    throw new TypeError('k must be less than or equal to n');\n  }\n\n  var nMinusk = n - k;\n  var answer = 1;\n  var firstnumerator = k < nMinusk ? nMinusk + 1 : k + 1;\n  var nextdivisor = 2;\n  var lastdivisor = k < nMinusk ? k : nMinusk; // balance multiplications and divisions to try to keep intermediate values\n  // in exact-integer range as long as possible\n\n  for (var nextnumerator = firstnumerator; nextnumerator <= n; ++nextnumerator) {\n    answer *= nextnumerator;\n\n    while (nextdivisor <= lastdivisor && answer % nextdivisor === 0) {\n      answer /= nextdivisor;\n      ++nextdivisor;\n    }\n  } // for big n, k, floating point may have caused weirdness in remainder\n\n\n  if (nextdivisor <= lastdivisor) {\n    answer /= product(nextdivisor, lastdivisor);\n  }\n\n  return answer;\n}\ncombinationsNumber.signature = 'number, number';", "export var pi = Math.PI;\nexport var tau = 2 * Math.PI;\nexport var e = Math.E;\nexport var phi = 1.6180339887498948; // eslint-disable-line no-loss-of-precision", "var n1 = 'number';\nvar n2 = 'number, number';\nexport function notNumber(x) {\n  return !x;\n}\nnotNumber.signature = n1;\nexport function orNumber(x, y) {\n  return !!(x || y);\n}\norNumber.signature = n2;\nexport function xorNumber(x, y) {\n  return !!x !== !!y;\n}\nxorNumber.signature = n2;\nexport function andNumber(x, y) {\n  return !!(x && y);\n}\nandNumber.signature = n2;", "", "/* eslint-disable no-loss-of-precision */\nimport { isInteger } from '../../utils/number.js';\nimport { product } from '../../utils/product.js';\nexport function gammaNumber(n) {\n  var x;\n\n  if (isInteger(n)) {\n    if (n <= 0) {\n      return isFinite(n) ? Infinity : NaN;\n    }\n\n    if (n > 171) {\n      return Infinity; // Will overflow\n    }\n\n    return product(1, n - 1);\n  }\n\n  if (n < 0.5) {\n    return Math.PI / (Math.sin(Math.PI * n) * gammaNumber(1 - n));\n  }\n\n  if (n >= 171.35) {\n    return Infinity; // will overflow\n  }\n\n  if (n > 85.0) {\n    // Extended Stirling Approx\n    var twoN = n * n;\n    var threeN = twoN * n;\n    var fourN = threeN * n;\n    var fiveN = fourN * n;\n    return Math.sqrt(2 * Math.PI / n) * Math.pow(n / Math.E, n) * (1 + 1 / (12 * n) + 1 / (288 * twoN) - 139 / (51840 * threeN) - 571 / (2488320 * fourN) + 163879 / (209018880 * fiveN) + 5246819 / (75246796800 * fiveN * n));\n  }\n\n  --n;\n  x = gammaP[0];\n\n  for (var i = 1; i < gammaP.length; ++i) {\n    x += gammaP[i] / (n + i);\n  }\n\n  var t = n + gammaG + 0.5;\n  return Math.sqrt(2 * Math.PI) * Math.pow(t, n + 0.5) * Math.exp(-t) * x;\n}\ngammaNumber.signature = 'number'; // TODO: comment on the variables g and p\n\nexport var gammaG = 4.7421875;\nexport var gammaP = [0.99999999999999709182, 57.156235665862923517, -59.597960355475491248, 14.136097974741747174, -0.49191381609762019978, 0.33994649984811888699e-4, 0.46523628927048575665e-4, -0.98374475304879564677e-4, 0.15808870322491248884e-3, -0.21026444172410488319e-3, 0.21743961811521264320e-3, -0.16431810653676389022e-3, 0.84418223983852743293e-4, -0.26190838401581408670e-4, 0.36899182659531622704e-5]; // lgamma implementation ref: https://mrob.com/pub/ries/lanczos-gamma.html#code\n// log(2 * pi) / 2\n\nexport var lnSqrt2PI = 0.91893853320467274178;\nexport var lgammaG = 5; // Lanczos parameter \"g\"\n\nexport var lgammaN = 7; // Range of coefficients \"n\"\n\nexport var lgammaSeries = [1.000000000190015, 76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5];\nexport function lgammaNumber(n) {\n  if (n < 0) return NaN;\n  if (n === 0) return Infinity;\n  if (!isFinite(n)) return n;\n\n  if (n < 0.5) {\n    // Use Euler's reflection formula:\n    // gamma(z) = PI / (sin(PI * z) * gamma(1 - z))\n    return Math.log(Math.PI / Math.sin(Math.PI * n)) - lgammaNumber(1 - n);\n  } // Compute the logarithm of the Gamma function using the Lanczos method\n\n\n  n = n - 1;\n  var base = n + lgammaG + 0.5; // Base of the Lanczos exponential\n\n  var sum = lgammaSeries[0]; // We start with the terms that have the smallest coefficients and largest denominator\n\n  for (var i = lgammaN - 1; i >= 1; i--) {\n    sum += lgammaSeries[i] / (n + i);\n  }\n\n  return lnSqrt2PI + (n + 0.5) * Math.log(base) - base + Math.log(sum);\n}\nlgammaNumber.signature = 'number';", "import { acosh, asinh, atanh, cosh, sign, sinh, tanh } from '../../utils/number.js';\nvar n1 = 'number';\nvar n2 = 'number, number';\nexport function acosNumber(x) {\n  return Math.acos(x);\n}\nacosNumber.signature = n1;\nexport function acoshNumber(x) {\n  return acosh(x);\n}\nacoshNumber.signature = n1;\nexport function acotNumber(x) {\n  return Math.atan(1 / x);\n}\nacotNumber.signature = n1;\nexport function acothNumber(x) {\n  return isFinite(x) ? (Math.log((x + 1) / x) + Math.log(x / (x - 1))) / 2 : 0;\n}\nacothNumber.signature = n1;\nexport function acscNumber(x) {\n  return Math.asin(1 / x);\n}\nacscNumber.signature = n1;\nexport function acschNumber(x) {\n  var xInv = 1 / x;\n  return Math.log(xInv + Math.sqrt(xInv * xInv + 1));\n}\nacschNumber.signature = n1;\nexport function asecNumber(x) {\n  return Math.acos(1 / x);\n}\nasecNumber.signature = n1;\nexport function asechNumber(x) {\n  var xInv = 1 / x;\n  var ret = Math.sqrt(xInv * xInv - 1);\n  return Math.log(ret + xInv);\n}\nasechNumber.signature = n1;\nexport function asinNumber(x) {\n  return Math.asin(x);\n}\nasinNumber.signature = n1;\nexport function asinhNumber(x) {\n  return asinh(x);\n}\nasinhNumber.signature = n1;\nexport function atanNumber(x) {\n  return Math.atan(x);\n}\natanNumber.signature = n1;\nexport function atan2Number(y, x) {\n  return Math.atan2(y, x);\n}\natan2Number.signature = n2;\nexport function atanhNumber(x) {\n  return atanh(x);\n}\natanhNumber.signature = n1;\nexport function cosNumber(x) {\n  return Math.cos(x);\n}\ncosNumber.signature = n1;\nexport function coshNumber(x) {\n  return cosh(x);\n}\ncoshNumber.signature = n1;\nexport function cotNumber(x) {\n  return 1 / Math.tan(x);\n}\ncotNumber.signature = n1;\nexport function cothNumber(x) {\n  var e = Math.exp(2 * x);\n  return (e + 1) / (e - 1);\n}\ncothNumber.signature = n1;\nexport function cscNumber(x) {\n  return 1 / Math.sin(x);\n}\ncscNumber.signature = n1;\nexport function cschNumber(x) {\n  // consider values close to zero (+/-)\n  if (x === 0) {\n    return Number.POSITIVE_INFINITY;\n  } else {\n    return Math.abs(2 / (Math.exp(x) - Math.exp(-x))) * sign(x);\n  }\n}\ncschNumber.signature = n1;\nexport function secNumber(x) {\n  return 1 / Math.cos(x);\n}\nsecNumber.signature = n1;\nexport function sechNumber(x) {\n  return 2 / (Math.exp(x) + Math.exp(-x));\n}\nsechNumber.signature = n1;\nexport function sinNumber(x) {\n  return Math.sin(x);\n}\nsinNumber.signature = n1;\nexport function sinhNumber(x) {\n  return sinh(x);\n}\nsinhNumber.signature = n1;\nexport function tanNumber(x) {\n  return Math.tan(x);\n}\ntanNumber.signature = n1;\nexport function tanhNumber(x) {\n  return tanh(x);\n}\ntanhNumber.signature = n1;", "import { isInteger } from '../../utils/number.js';\nvar n1 = 'number';\nexport function isIntegerNumber(x) {\n  return isInteger(x);\n}\nisIntegerNumber.signature = n1;\nexport function isNegativeNumber(x) {\n  return x < 0;\n}\nisNegativeNumber.signature = n1;\nexport function isPositiveNumber(x) {\n  return x > 0;\n}\nisPositiveNumber.signature = n1;\nexport function isZeroNumber(x) {\n  return x === 0;\n}\nisZeroNumber.signature = n1;\nexport function isNaNNumber(x) {\n  return Number.isNaN(x);\n}\nisNaNNumber.signature = n1;", "export * from './arithmetic.js';\nexport * from './bitwise.js';\nexport * from './combinations.js';\nexport * from './constants.js';\nexport * from './logical.js';\nexport * from './relational.js';\nexport * from './probability.js';\nexport * from './trigonometry.js';\nexport * from './utils.js';", "import { isInteger } from '../number.js';\n/**\n * Formats a BigNumber in a given base\n * @param {BigNumber} n\n * @param {number} base\n * @param {number} size\n * @returns {string}\n */\n\nfunction formatBigNumberToBase(n, base, size) {\n  var BigNumberCtor = n.constructor;\n  var big2 = new BigNumberCtor(2);\n  var suffix = '';\n\n  if (size) {\n    if (size < 1) {\n      throw new Error('size must be in greater than 0');\n    }\n\n    if (!isInteger(size)) {\n      throw new Error('size must be an integer');\n    }\n\n    if (n.greaterThan(big2.pow(size - 1).sub(1)) || n.lessThan(big2.pow(size - 1).mul(-1))) {\n      throw new Error(\"Value must be in range [-2^\".concat(size - 1, \", 2^\").concat(size - 1, \"-1]\"));\n    }\n\n    if (!n.isInteger()) {\n      throw new Error('Value must be an integer');\n    }\n\n    if (n.lessThan(0)) {\n      n = n.add(big2.pow(size));\n    }\n\n    suffix = \"i\".concat(size);\n  }\n\n  switch (base) {\n    case 2:\n      return \"\".concat(n.toBinary()).concat(suffix);\n\n    case 8:\n      return \"\".concat(n.toOctal()).concat(suffix);\n\n    case 16:\n      return \"\".concat(n.toHexadecimal()).concat(suffix);\n\n    default:\n      throw new Error(\"Base \".concat(base, \" not supported \"));\n  }\n}\n/**\n * Convert a BigNumber to a formatted string representation.\n *\n * Syntax:\n *\n *    format(value)\n *    format(value, options)\n *    format(value, precision)\n *    format(value, fn)\n *\n * Where:\n *\n *    {number} value   The value to be formatted\n *    {Object} options An object with formatting options. Available options:\n *                     {string} notation\n *                         Number notation. Choose from:\n *                         'fixed'          Always use regular number notation.\n *                                          For example '123.40' and '14000000'\n *                         'exponential'    Always use exponential notation.\n *                                          For example '1.234e+2' and '1.4e+7'\n *                         'auto' (default) Regular number notation for numbers\n *                                          having an absolute value between\n *                                          `lower` and `upper` bounds, and uses\n *                                          exponential notation elsewhere.\n *                                          Lower bound is included, upper bound\n *                                          is excluded.\n *                                          For example '123.4' and '1.4e7'.\n *                         'bin', 'oct, or\n *                         'hex'            Format the number using binary, octal,\n *                                          or hexadecimal notation.\n *                                          For example '0b1101' and '0x10fe'.\n *                     {number} wordSize    The word size in bits to use for formatting\n *                                          in binary, octal, or hexadecimal notation.\n *                                          To be used only with 'bin', 'oct', or 'hex'\n *                                          values for 'notation' option. When this option\n *                                          is defined the value is formatted as a signed\n *                                          twos complement integer of the given word size\n *                                          and the size suffix is appended to the output.\n *                                          For example\n *                                          format(-1, {notation: 'hex', wordSize: 8}) === '0xffi8'.\n *                                          Default value is undefined.\n *                     {number} precision   A number between 0 and 16 to round\n *                                          the digits of the number.\n *                                          In case of notations 'exponential',\n *                                          'engineering', and 'auto',\n *                                          `precision` defines the total\n *                                          number of significant digits returned.\n *                                          In case of notation 'fixed',\n *                                          `precision` defines the number of\n *                                          significant digits after the decimal\n *                                          point.\n *                                          `precision` is undefined by default.\n *                     {number} lowerExp    Exponent determining the lower boundary\n *                                          for formatting a value with an exponent\n *                                          when `notation='auto`.\n *                                          Default value is `-3`.\n *                     {number} upperExp    Exponent determining the upper boundary\n *                                          for formatting a value with an exponent\n *                                          when `notation='auto`.\n *                                          Default value is `5`.\n *    {Function} fn    A custom formatting function. Can be used to override the\n *                     built-in notations. Function `fn` is called with `value` as\n *                     parameter and must return a string. Is useful for example to\n *                     format all values inside a matrix in a particular way.\n *\n * Examples:\n *\n *    format(6.4)                                        // '6.4'\n *    format(1240000)                                    // '1.24e6'\n *    format(1/3)                                        // '0.3333333333333333'\n *    format(1/3, 3)                                     // '0.333'\n *    format(21385, 2)                                   // '21000'\n *    format(12e8, {notation: 'fixed'})                  // returns '1200000000'\n *    format(2.3,    {notation: 'fixed', precision: 4})  // returns '2.3000'\n *    format(52.8,   {notation: 'exponential'})          // returns '5.28e+1'\n *    format(12400,  {notation: 'engineering'})          // returns '12.400e+3'\n *\n * @param {BigNumber} value\n * @param {Object | Function | number} [options]\n * @return {string} str The formatted value\n */\n\n\nexport function format(value, options) {\n  if (typeof options === 'function') {\n    // handle format(value, fn)\n    return options(value);\n  } // handle special cases\n\n\n  if (!value.isFinite()) {\n    return value.isNaN() ? 'NaN' : value.gt(0) ? 'Infinity' : '-Infinity';\n  } // default values for options\n\n\n  var notation = 'auto';\n  var precision;\n  var wordSize;\n\n  if (options !== undefined) {\n    // determine notation from options\n    if (options.notation) {\n      notation = options.notation;\n    } // determine precision from options\n\n\n    if (typeof options === 'number') {\n      precision = options;\n    } else if (options.precision) {\n      precision = options.precision;\n    }\n\n    if (options.wordSize) {\n      wordSize = options.wordSize;\n\n      if (typeof wordSize !== 'number') {\n        throw new Error('Option \"wordSize\" must be a number');\n      }\n    }\n  } // handle the various notations\n\n\n  switch (notation) {\n    case 'fixed':\n      return toFixed(value, precision);\n\n    case 'exponential':\n      return toExponential(value, precision);\n\n    case 'engineering':\n      return toEngineering(value, precision);\n\n    case 'bin':\n      return formatBigNumberToBase(value, 2, wordSize);\n\n    case 'oct':\n      return formatBigNumberToBase(value, 8, wordSize);\n\n    case 'hex':\n      return formatBigNumberToBase(value, 16, wordSize);\n\n    case 'auto':\n      {\n        // determine lower and upper bound for exponential notation.\n        // TODO: implement support for upper and lower to be BigNumbers themselves\n        var lowerExp = options && options.lowerExp !== undefined ? options.lowerExp : -3;\n        var upperExp = options && options.upperExp !== undefined ? options.upperExp : 5; // handle special case zero\n\n        if (value.isZero()) return '0'; // determine whether or not to output exponential notation\n\n        var str;\n        var rounded = value.toSignificantDigits(precision);\n        var exp = rounded.e;\n\n        if (exp >= lowerExp && exp < upperExp) {\n          // normal number notation\n          str = rounded.toFixed();\n        } else {\n          // exponential notation\n          str = toExponential(value, precision);\n        } // remove trailing zeros after the decimal point\n\n\n        return str.replace(/((\\.\\d*?)(0+))($|e)/, function () {\n          var digits = arguments[2];\n          var e = arguments[4];\n          return digits !== '.' ? digits + e : e;\n        });\n      }\n\n    default:\n      throw new Error('Unknown notation \"' + notation + '\". ' + 'Choose \"auto\", \"exponential\", \"fixed\", \"bin\", \"oct\", or \"hex.');\n  }\n}\n/**\n * Format a BigNumber in engineering notation. Like '1.23e+6', '2.3e+0', '3.500e-3'\n * @param {BigNumber | string} value\n * @param {number} [precision]        Optional number of significant figures to return.\n */\n\nexport function toEngineering(value, precision) {\n  // find nearest lower multiple of 3 for exponent\n  var e = value.e;\n  var newExp = e % 3 === 0 ? e : e < 0 ? e - 3 - e % 3 : e - e % 3; // find difference in exponents, and calculate the value without exponent\n\n  var valueWithoutExp = value.mul(Math.pow(10, -newExp));\n  var valueStr = valueWithoutExp.toPrecision(precision);\n\n  if (valueStr.indexOf('e') !== -1) {\n    valueStr = valueWithoutExp.toString();\n  }\n\n  return valueStr + 'e' + (e >= 0 ? '+' : '') + newExp.toString();\n}\n/**\n * Format a number in exponential notation. Like '1.23e+5', '2.3e+0', '3.500e-3'\n * @param {BigNumber} value\n * @param {number} [precision]  Number of digits in formatted output.\n *                              If not provided, the maximum available digits\n *                              is used.\n * @returns {string} str\n */\n\nexport function toExponential(value, precision) {\n  if (precision !== undefined) {\n    return value.toExponential(precision - 1); // Note the offset of one\n  } else {\n    return value.toExponential();\n  }\n}\n/**\n * Format a number with fixed notation.\n * @param {BigNumber} value\n * @param {number} [precision=undefined] Optional number of decimals after the\n *                                       decimal point. Undefined by default.\n */\n\nexport function toFixed(value, precision) {\n  return value.toFixed(precision);\n}", "import { isBigNumber, isString, typeOf } from './is.js';\nimport { format as formatNumber } from './number.js';\nimport { format as formatBigNumber } from './bignumber/formatter.js';\n/**\n * Check if a text ends with a certain string.\n * @param {string} text\n * @param {string} search\n */\n\nexport function endsWith(text, search) {\n  var start = text.length - search.length;\n  var end = text.length;\n  return text.substring(start, end) === search;\n}\n/**\n * Format a value of any type into a string.\n *\n * Usage:\n *     math.format(value)\n *     math.format(value, precision)\n *     math.format(value, options)\n *\n * When value is a function:\n *\n * - When the function has a property `syntax`, it returns this\n *   syntax description.\n * - In other cases, a string `'function'` is returned.\n *\n * When `value` is an Object:\n *\n * - When the object contains a property `format` being a function, this\n *   function is invoked as `value.format(options)` and the result is returned.\n * - When the object has its own `toString` method, this method is invoked\n *   and the result is returned.\n * - In other cases the function will loop over all object properties and\n *   return JSON object notation like '{\"a\": 2, \"b\": 3}'.\n *\n * Example usage:\n *     math.format(2/7)                // '0.2857142857142857'\n *     math.format(math.pi, 3)         // '3.14'\n *     math.format(new Complex(2, 3))  // '2 + 3i'\n *     math.format('hello')            // '\"hello\"'\n *\n * @param {*} value             Value to be stringified\n * @param {Object | number | Function} [options]\n *     Formatting options. See src/utils/number.js:format for a\n *     description of the available options controlling number output.\n *     This generic \"format\" also supports the option property `truncate: NN`\n *     giving the maximum number NN of characters to return (if there would\n *     have been more, they are deleted and replaced by an ellipsis).\n * @return {string} str\n */\n\nexport function format(value, options) {\n  var result = _format(value, options);\n\n  if (options && typeof options === 'object' && 'truncate' in options && result.length > options.truncate) {\n    return result.substring(0, options.truncate - 3) + '...';\n  }\n\n  return result;\n}\n\nfunction _format(value, options) {\n  if (typeof value === 'number') {\n    return formatNumber(value, options);\n  }\n\n  if (isBigNumber(value)) {\n    return formatBigNumber(value, options);\n  } // note: we use unsafe duck-typing here to check for Fractions, this is\n  // ok here since we're only invoking toString or concatenating its values\n\n\n  if (looksLikeFraction(value)) {\n    if (!options || options.fraction !== 'decimal') {\n      // output as ratio, like '1/3'\n      return value.s * value.n + '/' + value.d;\n    } else {\n      // output as decimal, like '0.(3)'\n      return value.toString();\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return formatArray(value, options);\n  }\n\n  if (isString(value)) {\n    return '\"' + value + '\"';\n  }\n\n  if (typeof value === 'function') {\n    return value.syntax ? String(value.syntax) : 'function';\n  }\n\n  if (value && typeof value === 'object') {\n    if (typeof value.format === 'function') {\n      return value.format(options);\n    } else if (value && value.toString(options) !== {}.toString()) {\n      // this object has a non-native toString method, use that one\n      return value.toString(options);\n    } else {\n      var entries = Object.keys(value).map(key => {\n        return '\"' + key + '\": ' + format(value[key], options);\n      });\n      return '{' + entries.join(', ') + '}';\n    }\n  }\n\n  return String(value);\n}\n/**\n * Stringify a value into a string enclosed in double quotes.\n * Unescaped double quotes and backslashes inside the value are escaped.\n * @param {*} value\n * @return {string}\n */\n\n\nexport function stringify(value) {\n  var text = String(value);\n  var escaped = '';\n  var i = 0;\n\n  while (i < text.length) {\n    var c = text.charAt(i);\n\n    if (c === '\\\\') {\n      escaped += c;\n      i++;\n      c = text.charAt(i);\n\n      if (c === '' || '\"\\\\/bfnrtu'.indexOf(c) === -1) {\n        escaped += '\\\\'; // no valid escape character -> escape it\n      }\n\n      escaped += c;\n    } else if (c === '\"') {\n      escaped += '\\\\\"';\n    } else {\n      escaped += c;\n    }\n\n    i++;\n  }\n\n  return '\"' + escaped + '\"';\n}\n/**\n * Escape special HTML characters\n * @param {*} value\n * @return {string}\n */\n\nexport function escape(value) {\n  var text = String(value);\n  text = text.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  return text;\n}\n/**\n * Recursively format an n-dimensional matrix\n * Example output: \"[[1, 2], [3, 4]]\"\n * @param {Array} array\n * @param {Object | number | Function} [options]  Formatting options. See\n *                                                lib/utils/number:format for a\n *                                                description of the available\n *                                                options.\n * @returns {string} str\n */\n\nfunction formatArray(array, options) {\n  if (Array.isArray(array)) {\n    var str = '[';\n    var len = array.length;\n\n    for (var i = 0; i < len; i++) {\n      if (i !== 0) {\n        str += ', ';\n      }\n\n      str += formatArray(array[i], options);\n    }\n\n    str += ']';\n    return str;\n  } else {\n    return format(array, options);\n  }\n}\n/**\n * Check whether a value looks like a Fraction (unsafe duck-type check)\n * @param {*} value\n * @return {boolean}\n */\n\n\nfunction looksLikeFraction(value) {\n  return value && typeof value === 'object' && typeof value.s === 'number' && typeof value.n === 'number' && typeof value.d === 'number' || false;\n}\n/**\n * Compare two strings\n * @param {string} x\n * @param {string} y\n * @returns {number}\n */\n\n\nexport function compareText(x, y) {\n  // we don't want to convert numbers to string, only accept string input\n  if (!isString(x)) {\n    throw new TypeError('Unexpected type of argument in function compareText ' + '(expected: string or Array or Matrix, actual: ' + typeOf(x) + ', index: 0)');\n  }\n\n  if (!isString(y)) {\n    throw new TypeError('Unexpected type of argument in function compareText ' + '(expected: string or Array or Matrix, actual: ' + typeOf(y) + ', index: 1)');\n  }\n\n  return x === y ? 0 : x > y ? 1 : -1;\n}", "/**\n * Create a range error with the message:\n *     'Index out of range (index < min)'\n *     'Index out of range (index < max)'\n *\n * @param {number} index     The actual index\n * @param {number} [min=0]   Minimum index (included)\n * @param {number} [max]     Maximum index (excluded)\n * @extends RangeError\n */\nexport function IndexError(index, min, max) {\n  if (!(this instanceof IndexError)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  this.index = index;\n\n  if (arguments.length < 3) {\n    this.min = 0;\n    this.max = min;\n  } else {\n    this.min = min;\n    this.max = max;\n  }\n\n  if (this.min !== undefined && this.index < this.min) {\n    this.message = 'Index out of range (' + this.index + ' < ' + this.min + ')';\n  } else if (this.max !== undefined && this.index >= this.max) {\n    this.message = 'Index out of range (' + this.index + ' > ' + (this.max - 1) + ')';\n  } else {\n    this.message = 'Index out of range (' + this.index + ')';\n  }\n\n  this.stack = new Error().stack;\n}\nIndexError.prototype = new RangeError();\nIndexError.prototype.constructor = RangeError;\nIndexError.prototype.name = 'IndexError';\nIndexError.prototype.isIndexError = true;", "import { isInteger } from './number.js';\nimport { isNumber } from './is.js';\nimport { format } from './string.js';\nimport { DimensionError } from '../error/DimensionError.js';\nimport { IndexError } from '../error/IndexError.js';\n/**\n * Calculate the size of a multi dimensional array.\n * This function checks the size of the first entry, it does not validate\n * whether all dimensions match. (use function `validate` for that)\n * @param {Array} x\n * @Return {Number[]} size\n */\n\nexport function arraySize(x) {\n  var s = [];\n\n  while (Array.isArray(x)) {\n    s.push(x.length);\n    x = x[0];\n  }\n\n  return s;\n}\n/**\n * Recursively validate whether each element in a multi dimensional array\n * has a size corresponding to the provided size array.\n * @param {Array} array    Array to be validated\n * @param {number[]} size  Array with the size of each dimension\n * @param {number} dim   Current dimension\n * @throws DimensionError\n * @private\n */\n\nfunction _validate(array, size, dim) {\n  var i;\n  var len = array.length;\n\n  if (len !== size[dim]) {\n    throw new DimensionError(len, size[dim]);\n  }\n\n  if (dim < size.length - 1) {\n    // recursively validate each child array\n    var dimNext = dim + 1;\n\n    for (i = 0; i < len; i++) {\n      var child = array[i];\n\n      if (!Array.isArray(child)) {\n        throw new DimensionError(size.length - 1, size.length, '<');\n      }\n\n      _validate(array[i], size, dimNext);\n    }\n  } else {\n    // last dimension. none of the childs may be an array\n    for (i = 0; i < len; i++) {\n      if (Array.isArray(array[i])) {\n        throw new DimensionError(size.length + 1, size.length, '>');\n      }\n    }\n  }\n}\n/**\n * Validate whether each element in a multi dimensional array has\n * a size corresponding to the provided size array.\n * @param {Array} array    Array to be validated\n * @param {number[]} size  Array with the size of each dimension\n * @throws DimensionError\n */\n\n\nexport function validate(array, size) {\n  var isScalar = size.length === 0;\n\n  if (isScalar) {\n    // scalar\n    if (Array.isArray(array)) {\n      throw new DimensionError(array.length, 0);\n    }\n  } else {\n    // array\n    _validate(array, size, 0);\n  }\n}\n/**\n * Test whether index is an integer number with index >= 0 and index < length\n * when length is provided\n * @param {number} index    Zero-based index\n * @param {number} [length] Length of the array\n */\n\nexport function validateIndex(index, length) {\n  if (!isNumber(index) || !isInteger(index)) {\n    throw new TypeError('Index must be an integer (value: ' + index + ')');\n  }\n\n  if (index < 0 || typeof length === 'number' && index >= length) {\n    throw new IndexError(index, length);\n  }\n}\n/**\n * Resize a multi dimensional array. The resized array is returned.\n * @param {Array} array         Array to be resized\n * @param {Array.<number>} size Array with the size of each dimension\n * @param {*} [defaultValue=0]  Value to be filled in in new entries,\n *                              zero by default. Specify for example `null`,\n *                              to clearly see entries that are not explicitly\n *                              set.\n * @return {Array} array         The resized array\n */\n\nexport function resize(array, size, defaultValue) {\n  // TODO: add support for scalars, having size=[] ?\n  // check the type of the arguments\n  if (!Array.isArray(array) || !Array.isArray(size)) {\n    throw new TypeError('Array expected');\n  }\n\n  if (size.length === 0) {\n    throw new Error('Resizing to scalar is not supported');\n  } // check whether size contains positive integers\n\n\n  size.forEach(function (value) {\n    if (!isNumber(value) || !isInteger(value) || value < 0) {\n      throw new TypeError('Invalid size, must contain positive integers ' + '(size: ' + format(size) + ')');\n    }\n  }); // recursively resize the array\n\n  var _defaultValue = defaultValue !== undefined ? defaultValue : 0;\n\n  _resize(array, size, 0, _defaultValue);\n\n  return array;\n}\n/**\n * Recursively resize a multi dimensional array\n * @param {Array} array         Array to be resized\n * @param {number[]} size       Array with the size of each dimension\n * @param {number} dim          Current dimension\n * @param {*} [defaultValue]    Value to be filled in in new entries,\n *                              undefined by default.\n * @private\n */\n\nfunction _resize(array, size, dim, defaultValue) {\n  var i;\n  var elem;\n  var oldLen = array.length;\n  var newLen = size[dim];\n  var minLen = Math.min(oldLen, newLen); // apply new length\n\n  array.length = newLen;\n\n  if (dim < size.length - 1) {\n    // non-last dimension\n    var dimNext = dim + 1; // resize existing child arrays\n\n    for (i = 0; i < minLen; i++) {\n      // resize child array\n      elem = array[i];\n\n      if (!Array.isArray(elem)) {\n        elem = [elem]; // add a dimension\n\n        array[i] = elem;\n      }\n\n      _resize(elem, size, dimNext, defaultValue);\n    } // create new child arrays\n\n\n    for (i = minLen; i < newLen; i++) {\n      // get child array\n      elem = [];\n      array[i] = elem; // resize new child array\n\n      _resize(elem, size, dimNext, defaultValue);\n    }\n  } else {\n    // last dimension\n    // remove dimensions of existing values\n    for (i = 0; i < minLen; i++) {\n      while (Array.isArray(array[i])) {\n        array[i] = array[i][0];\n      }\n    } // fill new elements with the default value\n\n\n    for (i = minLen; i < newLen; i++) {\n      array[i] = defaultValue;\n    }\n  }\n}\n/**\n * Re-shape a multi dimensional array to fit the specified dimensions\n * @param {Array} array           Array to be reshaped\n * @param {Array.<number>} sizes  List of sizes for each dimension\n * @returns {Array}               Array whose data has been formatted to fit the\n *                                specified dimensions\n *\n * @throws {DimensionError}       If the product of the new dimension sizes does\n *                                not equal that of the old ones\n */\n\n\nexport function reshape(array, sizes) {\n  var flatArray = flatten(array);\n  var currentLength = flatArray.length;\n\n  if (!Array.isArray(array) || !Array.isArray(sizes)) {\n    throw new TypeError('Array expected');\n  }\n\n  if (sizes.length === 0) {\n    throw new DimensionError(0, currentLength, '!=');\n  }\n\n  sizes = processSizesWildcard(sizes, currentLength);\n  var newLength = product(sizes);\n\n  if (currentLength !== newLength) {\n    throw new DimensionError(newLength, currentLength, '!=');\n  }\n\n  try {\n    return _reshape(flatArray, sizes);\n  } catch (e) {\n    if (e instanceof DimensionError) {\n      throw new DimensionError(newLength, currentLength, '!=');\n    }\n\n    throw e;\n  }\n}\n/**\n * Replaces the wildcard -1 in the sizes array.\n * @param {Array.<number>} sizes  List of sizes for each dimension. At most on wildcard.\n * @param {number} currentLength  Number of elements in the array.\n * @throws {Error}                If more than one wildcard or unable to replace it.\n * @returns {Array.<number>}      The sizes array with wildcard replaced.\n */\n\nexport function processSizesWildcard(sizes, currentLength) {\n  var newLength = product(sizes);\n  var processedSizes = sizes.slice();\n  var WILDCARD = -1;\n  var wildCardIndex = sizes.indexOf(WILDCARD);\n  var isMoreThanOneWildcard = sizes.indexOf(WILDCARD, wildCardIndex + 1) >= 0;\n\n  if (isMoreThanOneWildcard) {\n    throw new Error('More than one wildcard in sizes');\n  }\n\n  var hasWildcard = wildCardIndex >= 0;\n  var canReplaceWildcard = currentLength % newLength === 0;\n\n  if (hasWildcard) {\n    if (canReplaceWildcard) {\n      processedSizes[wildCardIndex] = -currentLength / newLength;\n    } else {\n      throw new Error('Could not replace wildcard, since ' + currentLength + ' is no multiple of ' + -newLength);\n    }\n  }\n\n  return processedSizes;\n}\n/**\n * Computes the product of all array elements.\n * @param {Array<number>} array Array of factors\n * @returns {number}            Product of all elements\n */\n\nfunction product(array) {\n  return array.reduce((prev, curr) => prev * curr, 1);\n}\n/**\n * Iteratively re-shape a multi dimensional array to fit the specified dimensions\n * @param {Array} array           Array to be reshaped\n * @param {Array.<number>} sizes  List of sizes for each dimension\n * @returns {Array}               Array whose data has been formatted to fit the\n *                                specified dimensions\n */\n\n\nfunction _reshape(array, sizes) {\n  // testing if there are enough elements for the requested shape\n  var tmpArray = array;\n  var tmpArray2; // for each dimensions starting by the last one and ignoring the first one\n\n  for (var sizeIndex = sizes.length - 1; sizeIndex > 0; sizeIndex--) {\n    var size = sizes[sizeIndex];\n    tmpArray2 = []; // aggregate the elements of the current tmpArray in elements of the requested size\n\n    var length = tmpArray.length / size;\n\n    for (var i = 0; i < length; i++) {\n      tmpArray2.push(tmpArray.slice(i * size, (i + 1) * size));\n    } // set it as the new tmpArray for the next loop turn or for return\n\n\n    tmpArray = tmpArray2;\n  }\n\n  return tmpArray;\n}\n/**\n * Squeeze a multi dimensional array\n * @param {Array} array\n * @param {Array} [size]\n * @returns {Array} returns the array itself\n */\n\n\nexport function squeeze(array, size) {\n  var s = size || arraySize(array); // squeeze outer dimensions\n\n  while (Array.isArray(array) && array.length === 1) {\n    array = array[0];\n    s.shift();\n  } // find the first dimension to be squeezed\n\n\n  var dims = s.length;\n\n  while (s[dims - 1] === 1) {\n    dims--;\n  } // squeeze inner dimensions\n\n\n  if (dims < s.length) {\n    array = _squeeze(array, dims, 0);\n    s.length = dims;\n  }\n\n  return array;\n}\n/**\n * Recursively squeeze a multi dimensional array\n * @param {Array} array\n * @param {number} dims Required number of dimensions\n * @param {number} dim  Current dimension\n * @returns {Array | *} Returns the squeezed array\n * @private\n */\n\nfunction _squeeze(array, dims, dim) {\n  var i, ii;\n\n  if (dim < dims) {\n    var next = dim + 1;\n\n    for (i = 0, ii = array.length; i < ii; i++) {\n      array[i] = _squeeze(array[i], dims, next);\n    }\n  } else {\n    while (Array.isArray(array)) {\n      array = array[0];\n    }\n  }\n\n  return array;\n}\n/**\n * Unsqueeze a multi dimensional array: add dimensions when missing\n *\n * Paramter `size` will be mutated to match the new, unqueezed matrix size.\n *\n * @param {Array} array\n * @param {number} dims       Desired number of dimensions of the array\n * @param {number} [outer]    Number of outer dimensions to be added\n * @param {Array} [size] Current size of array.\n * @returns {Array} returns the array itself\n * @private\n */\n\n\nexport function unsqueeze(array, dims, outer, size) {\n  var s = size || arraySize(array); // unsqueeze outer dimensions\n\n  if (outer) {\n    for (var i = 0; i < outer; i++) {\n      array = [array];\n      s.unshift(1);\n    }\n  } // unsqueeze inner dimensions\n\n\n  array = _unsqueeze(array, dims, 0);\n\n  while (s.length < dims) {\n    s.push(1);\n  }\n\n  return array;\n}\n/**\n * Recursively unsqueeze a multi dimensional array\n * @param {Array} array\n * @param {number} dims Required number of dimensions\n * @param {number} dim  Current dimension\n * @returns {Array | *} Returns the squeezed array\n * @private\n */\n\nfunction _unsqueeze(array, dims, dim) {\n  var i, ii;\n\n  if (Array.isArray(array)) {\n    var next = dim + 1;\n\n    for (i = 0, ii = array.length; i < ii; i++) {\n      array[i] = _unsqueeze(array[i], dims, next);\n    }\n  } else {\n    for (var d = dim; d < dims; d++) {\n      array = [array];\n    }\n  }\n\n  return array;\n}\n/**\n * Flatten a multi dimensional array, put all elements in a one dimensional\n * array\n * @param {Array} array   A multi dimensional array\n * @return {Array}        The flattened array (1 dimensional)\n */\n\n\nexport function flatten(array) {\n  if (!Array.isArray(array)) {\n    // if not an array, return as is\n    return array;\n  }\n\n  var flat = [];\n  array.forEach(function callback(value) {\n    if (Array.isArray(value)) {\n      value.forEach(callback); // traverse through sub-arrays recursively\n    } else {\n      flat.push(value);\n    }\n  });\n  return flat;\n}\n/**\n * A safe map\n * @param {Array} array\n * @param {function} callback\n */\n\nexport function map(array, callback) {\n  return Array.prototype.map.call(array, callback);\n}\n/**\n * A safe forEach\n * @param {Array} array\n * @param {function} callback\n */\n\nexport function forEach(array, callback) {\n  Array.prototype.forEach.call(array, callback);\n}\n/**\n * A safe filter\n * @param {Array} array\n * @param {function} callback\n */\n\nexport function filter(array, callback) {\n  if (arraySize(array).length !== 1) {\n    throw new Error('Only one dimensional matrices supported');\n  }\n\n  return Array.prototype.filter.call(array, callback);\n}\n/**\n * Filter values in a callback given a regular expression\n * @param {Array} array\n * @param {RegExp} regexp\n * @return {Array} Returns the filtered array\n * @private\n */\n\nexport function filterRegExp(array, regexp) {\n  if (arraySize(array).length !== 1) {\n    throw new Error('Only one dimensional matrices supported');\n  }\n\n  return Array.prototype.filter.call(array, entry => regexp.test(entry));\n}\n/**\n * A safe join\n * @param {Array} array\n * @param {string} separator\n */\n\nexport function join(array, separator) {\n  return Array.prototype.join.call(array, separator);\n}\n/**\n * Assign a numeric identifier to every element of a sorted array\n * @param {Array} a  An array\n * @return {Array} An array of objects containing the original value and its identifier\n */\n\nexport function identify(a) {\n  if (!Array.isArray(a)) {\n    throw new TypeError('Array input expected');\n  }\n\n  if (a.length === 0) {\n    return a;\n  }\n\n  var b = [];\n  var count = 0;\n  b[0] = {\n    value: a[0],\n    identifier: 0\n  };\n\n  for (var i = 1; i < a.length; i++) {\n    if (a[i] === a[i - 1]) {\n      count++;\n    } else {\n      count = 0;\n    }\n\n    b.push({\n      value: a[i],\n      identifier: count\n    });\n  }\n\n  return b;\n}\n/**\n * Remove the numeric identifier from the elements\n * @param {array} a  An array\n * @return {array} An array of values without identifiers\n */\n\nexport function generalize(a) {\n  if (!Array.isArray(a)) {\n    throw new TypeError('Array input expected');\n  }\n\n  if (a.length === 0) {\n    return a;\n  }\n\n  var b = [];\n\n  for (var i = 0; i < a.length; i++) {\n    b.push(a[i].value);\n  }\n\n  return b;\n}\n/**\n * Check the datatype of a given object\n * This is a low level implementation that should only be used by\n * parent Matrix classes such as SparseMatrix or DenseMatrix\n * This method does not validate Array Matrix shape\n * @param {Array} array\n * @param {function} typeOf   Callback function to use to determine the type of a value\n * @return {string}\n */\n\nexport function getArrayDataType(array, typeOf) {\n  var type; // to hold type info\n\n  var length = 0; // to hold length value to ensure it has consistent sizes\n\n  for (var i = 0; i < array.length; i++) {\n    var item = array[i];\n    var isArray = Array.isArray(item); // Saving the target matrix row size\n\n    if (i === 0 && isArray) {\n      length = item.length;\n    } // If the current item is an array but the length does not equal the targetVectorSize\n\n\n    if (isArray && item.length !== length) {\n      return undefined;\n    }\n\n    var itemType = isArray ? getArrayDataType(item, typeOf) // recurse into a nested array\n    : typeOf(item);\n\n    if (type === undefined) {\n      type = itemType; // first item\n    } else if (type !== itemType) {\n      return 'mixed';\n    } else {// we're good, everything has the same type so far\n    }\n  }\n\n  return type;\n}\n/**\n * Return the last item from an array\n * @param array\n * @returns {*}\n */\n\nexport function last(array) {\n  return array[array.length - 1];\n}\n/**\n * Get all but the last element of array.\n */\n\nexport function initial(array) {\n  return array.slice(0, array.length - 1);\n}\n/**\n * Test whether an array or string contains an item\n * @param {Array | string} array\n * @param {*} item\n * @return {boolean}\n */\n\nexport function contains(array, item) {\n  return array.indexOf(item) !== -1;\n}", "import { contains } from './array.js';\nimport { pickShallow } from './object.js';\n/**\n * Create a factory function, which can be used to inject dependencies.\n *\n * The created functions are memoized, a consecutive call of the factory\n * with the exact same inputs will return the same function instance.\n * The memoized cache is exposed on `factory.cache` and can be cleared\n * if needed.\n *\n * Example:\n *\n *     const name = 'log'\n *     const dependencies = ['config', 'typed', 'divideScalar', 'Complex']\n *\n *     export const createLog = factory(name, dependencies, ({ typed, config, divideScalar, Complex }) => {\n *       // ... create the function log here and return it\n *     }\n *\n * @param {string} name           Name of the function to be created\n * @param {string[]} dependencies The names of all required dependencies\n * @param {function} create       Callback function called with an object with all dependencies\n * @param {Object} [meta]         Optional object with meta information that will be attached\n *                                to the created factory function as property `meta`.\n * @returns {function}\n */\n\nexport function factory(name, dependencies, create, meta) {\n  function assertAndCreate(scope) {\n    // we only pass the requested dependencies to the factory function\n    // to prevent functions to rely on dependencies that are not explicitly\n    // requested.\n    var deps = pickShallow(scope, dependencies.map(stripOptionalNotation));\n    assertDependencies(name, dependencies, scope);\n    return create(deps);\n  }\n\n  assertAndCreate.isFactory = true;\n  assertAndCreate.fn = name;\n  assertAndCreate.dependencies = dependencies.slice().sort();\n\n  if (meta) {\n    assertAndCreate.meta = meta;\n  }\n\n  return assertAndCreate;\n}\n/**\n * Sort all factories such that when loading in order, the dependencies are resolved.\n *\n * @param {Array} factories\n * @returns {Array} Returns a new array with the sorted factories.\n */\n\nexport function sortFactories(factories) {\n  var factoriesByName = {};\n  factories.forEach(factory => {\n    factoriesByName[factory.fn] = factory;\n  });\n\n  function containsDependency(factory, dependency) {\n    // TODO: detect circular references\n    if (isFactory(factory)) {\n      if (contains(factory.dependencies, dependency.fn || dependency.name)) {\n        return true;\n      }\n\n      if (factory.dependencies.some(d => containsDependency(factoriesByName[d], dependency))) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  var sorted = [];\n\n  function addFactory(factory) {\n    var index = 0;\n\n    while (index < sorted.length && !containsDependency(sorted[index], factory)) {\n      index++;\n    }\n\n    sorted.splice(index, 0, factory);\n  } // sort regular factory functions\n\n\n  factories.filter(isFactory).forEach(addFactory); // sort legacy factory functions AFTER the regular factory functions\n\n  factories.filter(factory => !isFactory(factory)).forEach(addFactory);\n  return sorted;\n} // TODO: comment or cleanup if unused in the end\n\nexport function create(factories) {\n  var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  sortFactories(factories).forEach(factory => factory(scope));\n  return scope;\n}\n/**\n * Test whether an object is a factory. This is the case when it has\n * properties name, dependencies, and a function create.\n * @param {*} obj\n * @returns {boolean}\n */\n\nexport function isFactory(obj) {\n  return typeof obj === 'function' && typeof obj.fn === 'string' && Array.isArray(obj.dependencies);\n}\n/**\n * Assert that all dependencies of a list with dependencies are available in the provided scope.\n *\n * Will throw an exception when there are dependencies missing.\n *\n * @param {string} name   Name for the function to be created. Used to generate a useful error message\n * @param {string[]} dependencies\n * @param {Object} scope\n */\n\nexport function assertDependencies(name, dependencies, scope) {\n  var allDefined = dependencies.filter(dependency => !isOptionalDependency(dependency)) // filter optionals\n  .every(dependency => scope[dependency] !== undefined);\n\n  if (!allDefined) {\n    var missingDependencies = dependencies.filter(dependency => scope[dependency] === undefined); // TODO: create a custom error class for this, a MathjsError or something like that\n\n    throw new Error(\"Cannot create function \\\"\".concat(name, \"\\\", \") + \"some dependencies are missing: \".concat(missingDependencies.map(d => \"\\\"\".concat(d, \"\\\"\")).join(', '), \".\"));\n  }\n}\nexport function isOptionalDependency(dependency) {\n  return dependency && dependency[0] === '?';\n}\nexport function stripOptionalNotation(dependency) {\n  return dependency && dependency[0] === '?' ? dependency.slice(1) : dependency;\n}", "export function noBignumber() {\n  throw new Error('No \"bignumber\" implementation available');\n}\nexport function noFraction() {\n  throw new Error('No \"fraction\" implementation available');\n}\nexport function noMatrix() {\n  throw new Error('No \"matrix\" implementation available');\n}\nexport function noIndex() {\n  throw new Error('No \"index\" implementation available');\n}\nexport function noSubset() {\n  throw new Error('No \"matrix\" implementation available');\n}", "/**\n * typed-function\n *\n * Type checking for JavaScript functions\n *\n * https://github.com/josdejong/typed-function\n */\n'use strict';\n\n(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    // OldNode. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like OldNode.\n    module.exports = factory();\n  } else {\n    // Browser globals (root is window)\n    root.typed = factory();\n  }\n}(this, function () {\n\n  function ok () {\n    return true;\n  }\n\n  function notOk () {\n    return false;\n  }\n\n  function undef () {\n    return undefined;\n  }\n\n  /**\n   * @typedef {{\n   *   params: Param[],\n   *   fn: function\n   * }} Signature\n   *\n   * @typedef {{\n   *   types: Type[],\n   *   restParam: boolean\n   * }} Param\n   *\n   * @typedef {{\n   *   name: string,\n   *   typeIndex: number,\n   *   test: function,\n   *   conversion?: ConversionDef,\n   *   conversionIndex: number,\n   * }} Type\n   *\n   * @typedef {{\n   *   from: string,\n   *   to: string,\n   *   convert: function (*) : *\n   * }} ConversionDef\n   *\n   * @typedef {{\n   *   name: string,\n   *   test: function(*) : boolean\n   * }} TypeDef\n   */\n\n  // create a new instance of typed-function\n  function create () {\n    // data type tests\n    var _types = [\n      { name: 'number',    test: function (x) { return typeof x === 'number' } },\n      { name: 'string',    test: function (x) { return typeof x === 'string' } },\n      { name: 'boolean',   test: function (x) { return typeof x === 'boolean' } },\n      { name: 'Function',  test: function (x) { return typeof x === 'function'} },\n      { name: 'Array',     test: Array.isArray },\n      { name: 'Date',      test: function (x) { return x instanceof Date } },\n      { name: 'RegExp',    test: function (x) { return x instanceof RegExp } },\n      { name: 'Object',    test: function (x) {\n        return typeof x === 'object' && x !== null && x.constructor === Object\n      }},\n      { name: 'null',      test: function (x) { return x === null } },\n      { name: 'undefined', test: function (x) { return x === undefined } }\n    ];\n\n    var anyType = {\n      name: 'any',\n      test: ok\n    }\n\n    // types which need to be ignored\n    var _ignore = [];\n\n    // type conversions\n    var _conversions = [];\n\n    // This is a temporary object, will be replaced with a typed function at the end\n    var typed = {\n      types: _types,\n      conversions: _conversions,\n      ignore: _ignore\n    };\n\n    /**\n     * Find the test function for a type\n     * @param {String} typeName\n     * @return {TypeDef} Returns the type definition when found,\n     *                    Throws a TypeError otherwise\n     */\n    function findTypeByName (typeName) {\n      var entry = findInArray(typed.types, function (entry) {\n        return entry.name === typeName;\n      });\n\n      if (entry) {\n        return entry;\n      }\n\n      if (typeName === 'any') { // special baked-in case 'any'\n        return anyType;\n      }\n\n      var hint = findInArray(typed.types, function (entry) {\n        return entry.name.toLowerCase() === typeName.toLowerCase();\n      });\n\n      throw new TypeError('Unknown type \"' + typeName + '\"' +\n          (hint ? ('. Did you mean \"' + hint.name + '\"?') : ''));\n    }\n\n    /**\n     * Find the index of a type definition. Handles special case 'any'\n     * @param {TypeDef} type\n     * @return {number}\n     */\n    function findTypeIndex(type) {\n      if (type === anyType) {\n        return 999;\n      }\n\n      return typed.types.indexOf(type);\n    }\n\n    /**\n     * Find a type that matches a value.\n     * @param {*} value\n     * @return {string} Returns the name of the first type for which\n     *                  the type test matches the value.\n     */\n    function findTypeName(value) {\n      var entry = findInArray(typed.types, function (entry) {\n        return entry.test(value);\n      });\n\n      if (entry) {\n        return entry.name;\n      }\n\n      throw new TypeError('Value has unknown type. Value: ' + value);\n    }\n\n    /**\n     * Find a specific signature from a (composed) typed function, for example:\n     *\n     *   typed.find(fn, ['number', 'string'])\n     *   typed.find(fn, 'number, string')\n     *\n     * Function find only only works for exact matches.\n     *\n     * @param {Function} fn                   A typed-function\n     * @param {string | string[]} signature   Signature to be found, can be\n     *                                        an array or a comma separated string.\n     * @return {Function}                     Returns the matching signature, or\n     *                                        throws an error when no signature\n     *                                        is found.\n     */\n    function find (fn, signature) {\n      if (!fn.signatures) {\n        throw new TypeError('Function is no typed-function');\n      }\n\n      // normalize input\n      var arr;\n      if (typeof signature === 'string') {\n        arr = signature.split(',');\n        for (var i = 0; i < arr.length; i++) {\n          arr[i] = arr[i].trim();\n        }\n      }\n      else if (Array.isArray(signature)) {\n        arr = signature;\n      }\n      else {\n        throw new TypeError('String array or a comma separated string expected');\n      }\n\n      var str = arr.join(',');\n\n      // find an exact match\n      var match = fn.signatures[str];\n      if (match) {\n        return match;\n      }\n\n      // TODO: extend find to match non-exact signatures\n\n      throw new TypeError('Signature not found (signature: ' + (fn.name || 'unnamed') + '(' + arr.join(', ') + '))');\n    }\n\n    /**\n     * Convert a given value to another data type.\n     * @param {*} value\n     * @param {string} type\n     */\n    function convert (value, type) {\n      var from = findTypeName(value);\n\n      // check conversion is needed\n      if (type === from) {\n        return value;\n      }\n\n      for (var i = 0; i < typed.conversions.length; i++) {\n        var conversion = typed.conversions[i];\n        if (conversion.from === from && conversion.to === type) {\n          return conversion.convert(value);\n        }\n      }\n\n      throw new Error('Cannot convert from ' + from + ' to ' + type);\n    }\n    \n    /**\n     * Stringify parameters in a normalized way\n     * @param {Param[]} params\n     * @return {string}\n     */\n    function stringifyParams (params) {\n      return params\n          .map(function (param) {\n            var typeNames = param.types.map(getTypeName);\n\n            return (param.restParam ? '...' : '') + typeNames.join('|');\n          })\n          .join(',');\n    }\n\n    /**\n     * Parse a parameter, like \"...number | boolean\"\n     * @param {string} param\n     * @param {ConversionDef[]} conversions\n     * @return {Param} param\n     */\n    function parseParam (param, conversions) {\n      var restParam = param.indexOf('...') === 0;\n      var types = (!restParam)\n          ? param\n          : (param.length > 3)\n              ? param.slice(3)\n              : 'any';\n\n      var typeNames = types.split('|').map(trim)\n          .filter(notEmpty)\n          .filter(notIgnore);\n\n      var matchingConversions = filterConversions(conversions, typeNames);\n\n      var exactTypes = typeNames.map(function (typeName) {\n        var type = findTypeByName(typeName);\n\n        return {\n          name: typeName,\n          typeIndex: findTypeIndex(type),\n          test: type.test,\n          conversion: null,\n          conversionIndex: -1\n        };\n      });\n\n      var convertibleTypes = matchingConversions.map(function (conversion) {\n        var type = findTypeByName(conversion.from);\n\n        return {\n          name: conversion.from,\n          typeIndex: findTypeIndex(type),\n          test: type.test,\n          conversion: conversion,\n          conversionIndex: conversions.indexOf(conversion)\n        };\n      });\n\n      return {\n        types: exactTypes.concat(convertibleTypes),\n        restParam: restParam\n      };\n    }\n\n    /**\n     * Parse a signature with comma separated parameters,\n     * like \"number | boolean, ...string\"\n     * @param {string} signature\n     * @param {function} fn\n     * @param {ConversionDef[]} conversions\n     * @return {Signature | null} signature\n     */\n    function parseSignature (signature, fn, conversions) {\n      var params = [];\n\n      if (signature.trim() !== '') {\n        params = signature\n            .split(',')\n            .map(trim)\n            .map(function (param, index, array) {\n              var parsedParam = parseParam(param, conversions);\n\n              if (parsedParam.restParam && (index !== array.length - 1)) {\n                throw new SyntaxError('Unexpected rest parameter \"' + param + '\": ' +\n                    'only allowed for the last parameter');\n              }\n\n              return parsedParam;\n          });\n      }\n\n      if (params.some(isInvalidParam)) {\n        // invalid signature: at least one parameter has no types\n        // (they may have been filtered)\n        return null;\n      }\n\n      return {\n        params: params,\n        fn: fn\n      };\n    }\n\n    /**\n     * Test whether a set of params contains a restParam\n     * @param {Param[]} params\n     * @return {boolean} Returns true when the last parameter is a restParam\n     */\n    function hasRestParam(params) {\n      var param = last(params)\n      return param ? param.restParam : false;\n    }\n\n    /**\n     * Test whether a parameter contains conversions\n     * @param {Param} param\n     * @return {boolean} Returns true when at least one of the parameters\n     *                   contains a conversion.\n     */\n    function hasConversions(param) {\n      return param.types.some(function (type) {\n        return type.conversion != null;\n      });\n    }\n\n    /**\n     * Create a type test for a single parameter, which can have one or multiple\n     * types.\n     * @param {Param} param\n     * @return {function(x: *) : boolean} Returns a test function\n     */\n    function compileTest(param) {\n      if (!param || param.types.length === 0) {\n        // nothing to do\n        return ok;\n      }\n      else if (param.types.length === 1) {\n        return findTypeByName(param.types[0].name).test;\n      }\n      else if (param.types.length === 2) {\n        var test0 = findTypeByName(param.types[0].name).test;\n        var test1 = findTypeByName(param.types[1].name).test;\n        return function or(x) {\n          return test0(x) || test1(x);\n        }\n      }\n      else { // param.types.length > 2\n        var tests = param.types.map(function (type) {\n          return findTypeByName(type.name).test;\n        })\n        return function or(x) {\n          for (var i = 0; i < tests.length; i++) {\n            if (tests[i](x)) {\n              return true;\n            }\n          }\n          return false;\n        }\n      }\n    }\n\n    /**\n     * Create a test for all parameters of a signature\n     * @param {Param[]} params\n     * @return {function(args: Array<*>) : boolean}\n     */\n    function compileTests(params) {\n      var tests, test0, test1;\n\n      if (hasRestParam(params)) {\n        // variable arguments like '...number'\n        tests = initial(params).map(compileTest);\n        var varIndex = tests.length;\n        var lastTest = compileTest(last(params));\n        var testRestParam = function (args) {\n          for (var i = varIndex; i < args.length; i++) {\n            if (!lastTest(args[i])) {\n              return false;\n            }\n          }\n          return true;\n        }\n\n        return function testArgs(args) {\n          for (var i = 0; i < tests.length; i++) {\n            if (!tests[i](args[i])) {\n              return false;\n            }\n          }\n          return testRestParam(args) && (args.length >= varIndex + 1);\n        };\n      }\n      else {\n        // no variable arguments\n        if (params.length === 0) {\n          return function testArgs(args) {\n            return args.length === 0;\n          };\n        }\n        else if (params.length === 1) {\n          test0 = compileTest(params[0]);\n          return function testArgs(args) {\n            return test0(args[0]) && args.length === 1;\n          };\n        }\n        else if (params.length === 2) {\n          test0 = compileTest(params[0]);\n          test1 = compileTest(params[1]);\n          return function testArgs(args) {\n            return test0(args[0]) && test1(args[1]) && args.length === 2;\n          };\n        }\n        else { // arguments.length > 2\n          tests = params.map(compileTest);\n          return function testArgs(args) {\n            for (var i = 0; i < tests.length; i++) {\n              if (!tests[i](args[i])) {\n                return false;\n              }\n            }\n            return args.length === tests.length;\n          };\n        }\n      }\n    }\n\n    /**\n     * Find the parameter at a specific index of a signature.\n     * Handles rest parameters.\n     * @param {Signature} signature\n     * @param {number} index\n     * @return {Param | null} Returns the matching parameter when found,\n     *                        null otherwise.\n     */\n    function getParamAtIndex(signature, index) {\n      return index < signature.params.length\n          ? signature.params[index]\n          : hasRestParam(signature.params)\n              ? last(signature.params)\n              : null\n    }\n\n    /**\n     * Get all type names of a parameter\n     * @param {Signature} signature\n     * @param {number} index\n     * @param {boolean} excludeConversions\n     * @return {string[]} Returns an array with type names\n     */\n    function getExpectedTypeNames (signature, index, excludeConversions) {\n      var param = getParamAtIndex(signature, index);\n      var types = param\n          ? excludeConversions\n                  ? param.types.filter(isExactType)\n                  : param.types\n          : [];\n\n      return types.map(getTypeName);\n    }\n\n    /**\n     * Returns the name of a type\n     * @param {Type} type\n     * @return {string} Returns the type name\n     */\n    function getTypeName(type) {\n      return type.name;\n    }\n\n    /**\n     * Test whether a type is an exact type or conversion\n     * @param {Type} type\n     * @return {boolean} Returns true when\n     */\n    function isExactType(type) {\n      return type.conversion === null || type.conversion === undefined;\n    }\n\n    /**\n     * Helper function for creating error messages: create an array with\n     * all available types on a specific argument index.\n     * @param {Signature[]} signatures\n     * @param {number} index\n     * @return {string[]} Returns an array with available types\n     */\n    function mergeExpectedParams(signatures, index) {\n      var typeNames = uniq(flatMap(signatures, function (signature) {\n        return getExpectedTypeNames(signature, index, false);\n      }));\n\n      return (typeNames.indexOf('any') !== -1) ? ['any'] : typeNames;\n    }\n\n    /**\n     * Create\n     * @param {string} name             The name of the function\n     * @param {array.<*>} args          The actual arguments passed to the function\n     * @param {Signature[]} signatures  A list with available signatures\n     * @return {TypeError} Returns a type error with additional data\n     *                     attached to it in the property `data`\n     */\n    function createError(name, args, signatures) {\n      var err, expected;\n      var _name = name || 'unnamed';\n\n      // test for wrong type at some index\n      var matchingSignatures = signatures;\n      var index;\n      for (index = 0; index < args.length; index++) {\n        var nextMatchingDefs = matchingSignatures.filter(function (signature) {\n          var test = compileTest(getParamAtIndex(signature, index));\n          return (index < signature.params.length || hasRestParam(signature.params)) &&\n              test(args[index]);\n        });\n\n        if (nextMatchingDefs.length === 0) {\n          // no matching signatures anymore, throw error \"wrong type\"\n          expected = mergeExpectedParams(matchingSignatures, index);\n          if (expected.length > 0) {\n            var actualType = findTypeName(args[index]);\n\n            err = new TypeError('Unexpected type of argument in function ' + _name +\n                ' (expected: ' + expected.join(' or ') +\n                ', actual: ' + actualType + ', index: ' + index + ')');\n            err.data = {\n              category: 'wrongType',\n              fn: _name,\n              index: index,\n              actual: actualType,\n              expected: expected\n            }\n            return err;\n          }\n        }\n        else {\n          matchingSignatures = nextMatchingDefs;\n        }\n      }\n\n      // test for too few arguments\n      var lengths = matchingSignatures.map(function (signature) {\n        return hasRestParam(signature.params) ? Infinity : signature.params.length;\n      });\n      if (args.length < Math.min.apply(null, lengths)) {\n        expected = mergeExpectedParams(matchingSignatures, index);\n        err = new TypeError('Too few arguments in function ' + _name +\n            ' (expected: ' + expected.join(' or ') +\n            ', index: ' + args.length + ')');\n        err.data = {\n          category: 'tooFewArgs',\n          fn: _name,\n          index: args.length,\n          expected: expected\n        }\n        return err;\n      }\n\n      // test for too many arguments\n      var maxLength = Math.max.apply(null, lengths);\n      if (args.length > maxLength) {\n        err = new TypeError('Too many arguments in function ' + _name +\n            ' (expected: ' + maxLength + ', actual: ' + args.length + ')');\n        err.data = {\n          category: 'tooManyArgs',\n          fn: _name,\n          index: args.length,\n          expectedLength: maxLength\n        }\n        return err;\n      }\n\n      err = new TypeError('Arguments of type \"' + args.join(', ') +\n          '\" do not match any of the defined signatures of function ' + _name + '.');\n      err.data = {\n        category: 'mismatch',\n        actual: args.map(findTypeName)\n      }\n      return err;\n    }\n\n    /**\n     * Find the lowest index of all exact types of a parameter (no conversions)\n     * @param {Param} param\n     * @return {number} Returns the index of the lowest type in typed.types\n     */\n    function getLowestTypeIndex (param) {\n      var min = 999;\n\n      for (var i = 0; i < param.types.length; i++) {\n        if (isExactType(param.types[i])) {\n          min = Math.min(min, param.types[i].typeIndex);\n        }\n      }\n\n      return min;\n    }\n\n    /**\n     * Find the lowest index of the conversion of all types of the parameter\n     * having a conversion\n     * @param {Param} param\n     * @return {number} Returns the lowest index of the conversions of this type\n     */\n    function getLowestConversionIndex (param) {\n      var min = 999;\n\n      for (var i = 0; i < param.types.length; i++) {\n        if (!isExactType(param.types[i])) {\n          min = Math.min(min, param.types[i].conversionIndex);\n        }\n      }\n\n      return min;\n    }\n\n    /**\n     * Compare two params\n     * @param {Param} param1\n     * @param {Param} param2\n     * @return {number} returns a negative number when param1 must get a lower\n     *                  index than param2, a positive number when the opposite,\n     *                  or zero when both are equal\n     */\n    function compareParams (param1, param2) {\n      var c;\n\n      // compare having a rest parameter or not\n      c = param1.restParam - param2.restParam;\n      if (c !== 0) {\n        return c;\n      }\n\n      // compare having conversions or not\n      c = hasConversions(param1) - hasConversions(param2);\n      if (c !== 0) {\n        return c;\n      }\n\n      // compare the index of the types\n      c = getLowestTypeIndex(param1) - getLowestTypeIndex(param2);\n      if (c !== 0) {\n        return c;\n      }\n\n      // compare the index of any conversion\n      return getLowestConversionIndex(param1) - getLowestConversionIndex(param2);\n    }\n\n    /**\n     * Compare two signatures\n     * @param {Signature} signature1\n     * @param {Signature} signature2\n     * @return {number} returns a negative number when param1 must get a lower\n     *                  index than param2, a positive number when the opposite,\n     *                  or zero when both are equal\n     */\n    function compareSignatures (signature1, signature2) {\n      var len = Math.min(signature1.params.length, signature2.params.length);\n      var i;\n      var c;\n\n      // compare whether the params have conversions at all or not\n      c = signature1.params.some(hasConversions) - signature2.params.some(hasConversions)\n      if (c !== 0) {\n        return c;\n      }\n\n      // next compare whether the params have conversions one by one\n      for (i = 0; i < len; i++) {\n        c = hasConversions(signature1.params[i]) - hasConversions(signature2.params[i]);\n        if (c !== 0) {\n          return c;\n        }\n      }\n\n      // compare the types of the params one by one\n      for (i = 0; i < len; i++) {\n        c = compareParams(signature1.params[i], signature2.params[i]);\n        if (c !== 0) {\n          return c;\n        }\n      }\n\n      // compare the number of params\n      return signature1.params.length - signature2.params.length;\n    }\n\n    /**\n     * Get params containing all types that can be converted to the defined types.\n     *\n     * @param {ConversionDef[]} conversions\n     * @param {string[]} typeNames\n     * @return {ConversionDef[]} Returns the conversions that are available\n     *                        for every type (if any)\n     */\n    function filterConversions(conversions, typeNames) {\n      var matches = {};\n\n      conversions.forEach(function (conversion) {\n        if (typeNames.indexOf(conversion.from) === -1 &&\n            typeNames.indexOf(conversion.to) !== -1 &&\n            !matches[conversion.from]) {\n          matches[conversion.from] = conversion;\n        }\n      });\n\n      return Object.keys(matches).map(function (from) {\n        return matches[from];\n      });\n    }\n\n    /**\n     * Preprocess arguments before calling the original function:\n     * - if needed convert the parameters\n     * - in case of rest parameters, move the rest parameters into an Array\n     * @param {Param[]} params\n     * @param {function} fn\n     * @return {function} Returns a wrapped function\n     */\n    function compileArgsPreprocessing(params, fn) {\n      var fnConvert = fn;\n\n      // TODO: can we make this wrapper function smarter/simpler?\n\n      if (params.some(hasConversions)) {\n        var restParam = hasRestParam(params);\n        var compiledConversions = params.map(compileArgConversion)\n\n        fnConvert = function convertArgs() {\n          var args = [];\n          var last = restParam ? arguments.length - 1 : arguments.length;\n          for (var i = 0; i < last; i++) {\n            args[i] = compiledConversions[i](arguments[i]);\n          }\n          if (restParam) {\n            args[last] = arguments[last].map(compiledConversions[last]);\n          }\n\n          return fn.apply(this, args);\n        }\n      }\n\n      var fnPreprocess = fnConvert;\n      if (hasRestParam(params)) {\n        var offset = params.length - 1;\n\n        fnPreprocess = function preprocessRestParams () {\n          return fnConvert.apply(this,\n              slice(arguments, 0, offset).concat([slice(arguments, offset)]));\n        }\n      }\n\n      return fnPreprocess;\n    }\n\n    /**\n     * Compile conversion for a parameter to the right type\n     * @param {Param} param\n     * @return {function} Returns the wrapped function that will convert arguments\n     *\n     */\n    function compileArgConversion(param) {\n      var test0, test1, conversion0, conversion1;\n      var tests = [];\n      var conversions = [];\n\n      param.types.forEach(function (type) {\n        if (type.conversion) {\n          tests.push(findTypeByName(type.conversion.from).test);\n          conversions.push(type.conversion.convert);\n        }\n      });\n\n      // create optimized conversion functions depending on the number of conversions\n      switch (conversions.length) {\n        case 0:\n          return function convertArg(arg) {\n            return arg;\n          }\n\n        case 1:\n          test0 = tests[0]\n          conversion0 = conversions[0];\n          return function convertArg(arg) {\n            if (test0(arg)) {\n              return conversion0(arg)\n            }\n            return arg;\n          }\n\n        case 2:\n          test0 = tests[0]\n          test1 = tests[1]\n          conversion0 = conversions[0];\n          conversion1 = conversions[1];\n          return function convertArg(arg) {\n            if (test0(arg)) {\n              return conversion0(arg)\n            }\n            if (test1(arg)) {\n              return conversion1(arg)\n            }\n            return arg;\n          }\n\n        default:\n          return function convertArg(arg) {\n            for (var i = 0; i < conversions.length; i++) {\n              if (tests[i](arg)) {\n                return conversions[i](arg);\n              }\n            }\n            return arg;\n          }\n      }\n    }\n\n    /**\n     * Convert an array with signatures into a map with signatures,\n     * where signatures with union types are split into separate signatures\n     *\n     * Throws an error when there are conflicting types\n     *\n     * @param {Signature[]} signatures\n     * @return {Object.<string, function>}  Returns a map with signatures\n     *                                      as key and the original function\n     *                                      of this signature as value.\n     */\n    function createSignaturesMap(signatures) {\n      var signaturesMap = {};\n      signatures.forEach(function (signature) {\n        if (!signature.params.some(hasConversions)) {\n          splitParams(signature.params, true).forEach(function (params) {\n            signaturesMap[stringifyParams(params)] = signature.fn;\n          });\n        }\n      });\n\n      return signaturesMap;\n    }\n\n    /**\n     * Split params with union types in to separate params.\n     *\n     * For example:\n     *\n     *     splitParams([['Array', 'Object'], ['string', 'RegExp'])\n     *     // returns:\n     *     // [\n     *     //   ['Array', 'string'],\n     *     //   ['Array', 'RegExp'],\n     *     //   ['Object', 'string'],\n     *     //   ['Object', 'RegExp']\n     *     // ]\n     *\n     * @param {Param[]} params\n     * @param {boolean} ignoreConversionTypes\n     * @return {Param[]}\n     */\n    function splitParams(params, ignoreConversionTypes) {\n      function _splitParams(params, index, types) {\n        if (index < params.length) {\n          var param = params[index]\n          var filteredTypes = ignoreConversionTypes\n              ? param.types.filter(isExactType)\n              : param.types;\n          var typeGroups\n\n          if (param.restParam) {\n            // split the types of a rest parameter in two:\n            // one with only exact types, and one with exact types and conversions\n            var exactTypes = filteredTypes.filter(isExactType)\n            typeGroups = exactTypes.length < filteredTypes.length\n                ? [exactTypes, filteredTypes]\n                : [filteredTypes]\n\n          }\n          else {\n            // split all the types of a regular parameter into one type per group\n            typeGroups = filteredTypes.map(function (type) {\n              return [type]\n            })\n          }\n\n          // recurse over the groups with types\n          return flatMap(typeGroups, function (typeGroup) {\n            return _splitParams(params, index + 1, types.concat([typeGroup]));\n          });\n\n        }\n        else {\n          // we've reached the end of the parameters. Now build a new Param\n          var splittedParams = types.map(function (type, typeIndex) {\n            return {\n              types: type,\n              restParam: (typeIndex === params.length - 1) && hasRestParam(params)\n            }\n          });\n\n          return [splittedParams];\n        }\n      }\n\n      return _splitParams(params, 0, []);\n    }\n\n    /**\n     * Test whether two signatures have a conflicting signature\n     * @param {Signature} signature1\n     * @param {Signature} signature2\n     * @return {boolean} Returns true when the signatures conflict, false otherwise.\n     */\n    function hasConflictingParams(signature1, signature2) {\n      var ii = Math.max(signature1.params.length, signature2.params.length);\n\n      for (var i = 0; i < ii; i++) {\n        var typesNames1 = getExpectedTypeNames(signature1, i, true);\n        var typesNames2 = getExpectedTypeNames(signature2, i, true);\n\n        if (!hasOverlap(typesNames1, typesNames2)) {\n          return false;\n        }\n      }\n\n      var len1 = signature1.params.length;\n      var len2 = signature2.params.length;\n      var restParam1 = hasRestParam(signature1.params);\n      var restParam2 = hasRestParam(signature2.params);\n\n      return restParam1\n          ? restParam2 ? (len1 === len2) : (len2 >= len1)\n          : restParam2 ? (len1 >= len2)  : (len1 === len2)\n    }\n\n    /**\n     * Create a typed function\n     * @param {String} name               The name for the typed function\n     * @param {Object.<string, function>} signaturesMap\n     *                                    An object with one or\n     *                                    multiple signatures as key, and the\n     *                                    function corresponding to the\n     *                                    signature as value.\n     * @return {function}  Returns the created typed function.\n     */\n    function createTypedFunction(name, signaturesMap) {\n      if (Object.keys(signaturesMap).length === 0) {\n        throw new SyntaxError('No signatures provided');\n      }\n\n      // parse the signatures, and check for conflicts\n      var parsedSignatures = [];\n      Object.keys(signaturesMap)\n          .map(function (signature) {\n            return parseSignature(signature, signaturesMap[signature], typed.conversions);\n          })\n          .filter(notNull)\n          .forEach(function (parsedSignature) {\n            // check whether this parameter conflicts with already parsed signatures\n            var conflictingSignature = findInArray(parsedSignatures, function (s) {\n              return hasConflictingParams(s, parsedSignature)\n            });\n            if (conflictingSignature) {\n              throw new TypeError('Conflicting signatures \"' +\n                  stringifyParams(conflictingSignature.params) + '\" and \"' +\n                  stringifyParams(parsedSignature.params) + '\".');\n            }\n\n            parsedSignatures.push(parsedSignature);\n          });\n\n      // split and filter the types of the signatures, and then order them\n      var signatures = flatMap(parsedSignatures, function (parsedSignature) {\n        var params = parsedSignature ? splitParams(parsedSignature.params, false) : []\n\n        return params.map(function (params) {\n          return {\n            params: params,\n            fn: parsedSignature.fn\n          };\n        });\n      }).filter(notNull);\n\n      signatures.sort(compareSignatures);\n\n      // we create a highly optimized checks for the first couple of signatures with max 2 arguments\n      var ok0 = signatures[0] && signatures[0].params.length <= 2 && !hasRestParam(signatures[0].params);\n      var ok1 = signatures[1] && signatures[1].params.length <= 2 && !hasRestParam(signatures[1].params);\n      var ok2 = signatures[2] && signatures[2].params.length <= 2 && !hasRestParam(signatures[2].params);\n      var ok3 = signatures[3] && signatures[3].params.length <= 2 && !hasRestParam(signatures[3].params);\n      var ok4 = signatures[4] && signatures[4].params.length <= 2 && !hasRestParam(signatures[4].params);\n      var ok5 = signatures[5] && signatures[5].params.length <= 2 && !hasRestParam(signatures[5].params);\n      var allOk = ok0 && ok1 && ok2 && ok3 && ok4 && ok5;\n\n      // compile the tests\n      var tests = signatures.map(function (signature) {\n        return compileTests(signature.params);\n      });\n\n      var test00 = ok0 ? compileTest(signatures[0].params[0]) : notOk;\n      var test10 = ok1 ? compileTest(signatures[1].params[0]) : notOk;\n      var test20 = ok2 ? compileTest(signatures[2].params[0]) : notOk;\n      var test30 = ok3 ? compileTest(signatures[3].params[0]) : notOk;\n      var test40 = ok4 ? compileTest(signatures[4].params[0]) : notOk;\n      var test50 = ok5 ? compileTest(signatures[5].params[0]) : notOk;\n\n      var test01 = ok0 ? compileTest(signatures[0].params[1]) : notOk;\n      var test11 = ok1 ? compileTest(signatures[1].params[1]) : notOk;\n      var test21 = ok2 ? compileTest(signatures[2].params[1]) : notOk;\n      var test31 = ok3 ? compileTest(signatures[3].params[1]) : notOk;\n      var test41 = ok4 ? compileTest(signatures[4].params[1]) : notOk;\n      var test51 = ok5 ? compileTest(signatures[5].params[1]) : notOk;\n\n      // compile the functions\n      var fns = signatures.map(function(signature) {\n        return compileArgsPreprocessing(signature.params, signature.fn);\n      });\n\n      var fn0 = ok0 ? fns[0] : undef;\n      var fn1 = ok1 ? fns[1] : undef;\n      var fn2 = ok2 ? fns[2] : undef;\n      var fn3 = ok3 ? fns[3] : undef;\n      var fn4 = ok4 ? fns[4] : undef;\n      var fn5 = ok5 ? fns[5] : undef;\n\n      var len0 = ok0 ? signatures[0].params.length : -1;\n      var len1 = ok1 ? signatures[1].params.length : -1;\n      var len2 = ok2 ? signatures[2].params.length : -1;\n      var len3 = ok3 ? signatures[3].params.length : -1;\n      var len4 = ok4 ? signatures[4].params.length : -1;\n      var len5 = ok5 ? signatures[5].params.length : -1;\n\n      // simple and generic, but also slow\n      var iStart = allOk ? 6 : 0;\n      var iEnd = signatures.length;\n      var generic = function generic() {\n        'use strict';\n\n        for (var i = iStart; i < iEnd; i++) {\n          if (tests[i](arguments)) {\n            return fns[i].apply(this, arguments);\n          }\n        }\n\n        return typed.onMismatch(name, arguments, signatures);\n      }\n\n      // create the typed function\n      // fast, specialized version. Falls back to the slower, generic one if needed\n      var fn = function fn(arg0, arg1) {\n        'use strict';\n\n        if (arguments.length === len0 && test00(arg0) && test01(arg1)) { return fn0.apply(fn, arguments); }\n        if (arguments.length === len1 && test10(arg0) && test11(arg1)) { return fn1.apply(fn, arguments); }\n        if (arguments.length === len2 && test20(arg0) && test21(arg1)) { return fn2.apply(fn, arguments); }\n        if (arguments.length === len3 && test30(arg0) && test31(arg1)) { return fn3.apply(fn, arguments); }\n        if (arguments.length === len4 && test40(arg0) && test41(arg1)) { return fn4.apply(fn, arguments); }\n        if (arguments.length === len5 && test50(arg0) && test51(arg1)) { return fn5.apply(fn, arguments); }\n\n        return generic.apply(fn, arguments);\n      }\n\n      // attach name the typed function\n      try {\n        Object.defineProperty(fn, 'name', {value: name});\n      }\n      catch (err) {\n        // old browsers do not support Object.defineProperty and some don't support setting the name property\n        // the function name is not essential for the functioning, it's mostly useful for debugging,\n        // so it's fine to have unnamed functions.\n      }\n\n      // attach signatures to the function\n      fn.signatures = createSignaturesMap(signatures);\n\n      return fn;\n    }\n\n    /**\n     * Action to take on mismatch\n     * @param {string} name      Name of function that was attempted to be called\n     * @param {Array} args       Actual arguments to the call\n     * @param {Array} signatures Known signatures of the named typed-function\n     */\n    function _onMismatch(name, args, signatures) {\n      throw createError(name, args, signatures);\n    }\n\n    /**\n     * Test whether a type should be NOT be ignored\n     * @param {string} typeName\n     * @return {boolean}\n     */\n    function notIgnore(typeName) {\n      return typed.ignore.indexOf(typeName) === -1;\n    }\n\n    /**\n     * trim a string\n     * @param {string} str\n     * @return {string}\n     */\n    function trim(str) {\n      return str.trim();\n    }\n\n    /**\n     * Test whether a string is not empty\n     * @param {string} str\n     * @return {boolean}\n     */\n    function notEmpty(str) {\n      return !!str;\n    }\n\n    /**\n     * test whether a value is not strict equal to null\n     * @param {*} value\n     * @return {boolean}\n     */\n    function notNull(value) {\n      return value !== null;\n    }\n\n    /**\n     * Test whether a parameter has no types defined\n     * @param {Param} param\n     * @return {boolean}\n     */\n    function isInvalidParam (param) {\n      return param.types.length === 0;\n    }\n\n    /**\n     * Return all but the last items of an array\n     * @param {Array} arr\n     * @return {Array}\n     */\n    function initial(arr) {\n      return arr.slice(0, arr.length - 1);\n    }\n\n    /**\n     * return the last item of an array\n     * @param {Array} arr\n     * @return {*}\n     */\n    function last(arr) {\n      return arr[arr.length - 1];\n    }\n\n    /**\n     * Slice an array or function Arguments\n     * @param {Array | Arguments | IArguments} arr\n     * @param {number} start\n     * @param {number} [end]\n     * @return {Array}\n     */\n    function slice(arr, start, end) {\n      return Array.prototype.slice.call(arr, start, end);\n    }\n\n    /**\n     * Test whether an array contains some item\n     * @param {Array} array\n     * @param {*} item\n     * @return {boolean} Returns true if array contains item, false if not.\n     */\n    function contains(array, item) {\n      return array.indexOf(item) !== -1;\n    }\n\n    /**\n     * Test whether two arrays have overlapping items\n     * @param {Array} array1\n     * @param {Array} array2\n     * @return {boolean} Returns true when at least one item exists in both arrays\n     */\n    function hasOverlap(array1, array2) {\n      for (var i = 0; i < array1.length; i++) {\n        if (contains(array2, array1[i])) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    /**\n     * Return the first item from an array for which test(arr[i]) returns true\n     * @param {Array} arr\n     * @param {function} test\n     * @return {* | undefined} Returns the first matching item\n     *                         or undefined when there is no match\n     */\n    function findInArray(arr, test) {\n      for (var i = 0; i < arr.length; i++) {\n        if (test(arr[i])) {\n          return arr[i];\n        }\n      }\n      return undefined;\n    }\n\n    /**\n     * Filter unique items of an array with strings\n     * @param {string[]} arr\n     * @return {string[]}\n     */\n    function uniq(arr) {\n      var entries = {}\n      for (var i = 0; i < arr.length; i++) {\n        entries[arr[i]] = true;\n      }\n      return Object.keys(entries);\n    }\n\n    /**\n     * Flat map the result invoking a callback for every item in an array.\n     * https://gist.github.com/samgiles/762ee337dff48623e729\n     * @param {Array} arr\n     * @param {function} callback\n     * @return {Array}\n     */\n    function flatMap(arr, callback) {\n      return Array.prototype.concat.apply([], arr.map(callback));\n    }\n\n    /**\n     * Retrieve the function name from a set of typed functions,\n     * and check whether the name of all functions match (if given)\n     * @param {function[]} fns\n     */\n    function getName (fns) {\n      var name = '';\n\n      for (var i = 0; i < fns.length; i++) {\n        var fn = fns[i];\n\n        // check whether the names are the same when defined\n        if ((typeof fn.signatures === 'object' || typeof fn.signature === 'string') && fn.name !== '') {\n          if (name === '') {\n            name = fn.name;\n          }\n          else if (name !== fn.name) {\n            var err = new Error('Function names do not match (expected: ' + name + ', actual: ' + fn.name + ')');\n            err.data = {\n              actual: fn.name,\n              expected: name\n            };\n            throw err;\n          }\n        }\n      }\n\n      return name;\n    }\n\n    // extract and merge all signatures of a list with typed functions\n    function extractSignatures(fns) {\n      var err;\n      var signaturesMap = {};\n\n      function validateUnique(_signature, _fn) {\n        if (signaturesMap.hasOwnProperty(_signature) && _fn !== signaturesMap[_signature]) {\n          err = new Error('Signature \"' + _signature + '\" is defined twice');\n          err.data = {signature: _signature};\n          throw err;\n          // else: both signatures point to the same function, that's fine\n        }\n      }\n\n      for (var i = 0; i < fns.length; i++) {\n        var fn = fns[i];\n\n        // test whether this is a typed-function\n        if (typeof fn.signatures === 'object') {\n          // merge the signatures\n          for (var signature in fn.signatures) {\n            if (fn.signatures.hasOwnProperty(signature)) {\n              validateUnique(signature, fn.signatures[signature]);\n              signaturesMap[signature] = fn.signatures[signature];\n            }\n          }\n        }\n        else if (typeof fn.signature === 'string') {\n          validateUnique(fn.signature, fn);\n          signaturesMap[fn.signature] = fn;\n        }\n        else {\n          err = new TypeError('Function is no typed-function (index: ' + i + ')');\n          err.data = {index: i};\n          throw err;\n        }\n      }\n\n      return signaturesMap;\n    }\n\n    typed = createTypedFunction('typed', {\n      'string, Object': createTypedFunction,\n      'Object': function (signaturesMap) {\n        // find existing name\n        var fns = [];\n        for (var signature in signaturesMap) {\n          if (signaturesMap.hasOwnProperty(signature)) {\n            fns.push(signaturesMap[signature]);\n          }\n        }\n        var name = getName(fns);\n        return createTypedFunction(name, signaturesMap);\n      },\n      '...Function': function (fns) {\n        return createTypedFunction(getName(fns), extractSignatures(fns));\n      },\n      'string, ...Function': function (name, fns) {\n        return createTypedFunction(name, extractSignatures(fns));\n      }\n    });\n\n    typed.create = create;\n    typed.types = _types;\n    typed.conversions = _conversions;\n    typed.ignore = _ignore;\n    typed.onMismatch = _onMismatch;\n    typed.throwMismatchError = _onMismatch;\n    typed.createError = createError;\n    typed.convert = convert;\n    typed.find = find;\n\n    /**\n     * add a type\n     * @param {{name: string, test: function}} type\n     * @param {boolean} [beforeObjectTest=true]\n     *                          If true, the new test will be inserted before\n     *                          the test with name 'Object' (if any), since\n     *                          tests for Object match Array and classes too.\n     */\n    typed.addType = function (type, beforeObjectTest) {\n      if (!type || typeof type.name !== 'string' || typeof type.test !== 'function') {\n        throw new TypeError('Object with properties {name: string, test: function} expected');\n      }\n\n      if (beforeObjectTest !== false) {\n        for (var i = 0; i < typed.types.length; i++) {\n          if (typed.types[i].name === 'Object') {\n            typed.types.splice(i, 0, type);\n            return\n          }\n        }\n      }\n\n      typed.types.push(type);\n    };\n\n    // add a conversion\n    typed.addConversion = function (conversion) {\n      if (!conversion\n          || typeof conversion.from !== 'string'\n          || typeof conversion.to !== 'string'\n          || typeof conversion.convert !== 'function') {\n        throw new TypeError('Object with properties {from: string, to: string, convert: function} expected');\n      }\n\n      typed.conversions.push(conversion);\n    };\n\n    return typed;\n  }\n\n  return create();\n}));\n", "import { hasOwnProperty } from './object.js';\n/**\n * Get a property of a plain object\n * Throws an error in case the object is not a plain object or the\n * property is not defined on the object itself\n * @param {Object} object\n * @param {string} prop\n * @return {*} Returns the property value when safe\n */\n\nfunction getSafeProperty(object, prop) {\n  // only allow getting safe properties of a plain object\n  if (isPlainObject(object) && isSafeProperty(object, prop)) {\n    return object[prop];\n  }\n\n  if (typeof object[prop] === 'function' && isSafeMethod(object, prop)) {\n    throw new Error('Cannot access method \"' + prop + '\" as a property');\n  }\n\n  throw new Error('No access to property \"' + prop + '\"');\n}\n/**\n * Set a property on a plain object.\n * Throws an error in case the object is not a plain object or the\n * property would override an inherited property like .constructor or .toString\n * @param {Object} object\n * @param {string} prop\n * @param {*} value\n * @return {*} Returns the value\n */\n// TODO: merge this function into access.js?\n\n\nfunction setSafeProperty(object, prop, value) {\n  // only allow setting safe properties of a plain object\n  if (isPlainObject(object) && isSafeProperty(object, prop)) {\n    object[prop] = value;\n    return value;\n  }\n\n  throw new Error('No access to property \"' + prop + '\"');\n}\n\nfunction getSafeProperties(object) {\n  return Object.keys(object).filter(prop => hasOwnProperty(object, prop));\n}\n\nfunction hasSafeProperty(object, prop) {\n  return prop in object;\n}\n/**\n * Test whether a property is safe to use for an object.\n * For example .toString and .constructor are not safe\n * @param {string} prop\n * @return {boolean} Returns true when safe\n */\n\n\nfunction isSafeProperty(object, prop) {\n  if (!object || typeof object !== 'object') {\n    return false;\n  } // SAFE: whitelisted\n  // e.g length\n\n\n  if (hasOwnProperty(safeNativeProperties, prop)) {\n    return true;\n  } // UNSAFE: inherited from Object prototype\n  // e.g constructor\n\n\n  if (prop in Object.prototype) {\n    // 'in' is used instead of hasOwnProperty for nodejs v0.10\n    // which is inconsistent on root prototypes. It is safe\n    // here because Object.prototype is a root object\n    return false;\n  } // UNSAFE: inherited from Function prototype\n  // e.g call, apply\n\n\n  if (prop in Function.prototype) {\n    // 'in' is used instead of hasOwnProperty for nodejs v0.10\n    // which is inconsistent on root prototypes. It is safe\n    // here because Function.prototype is a root object\n    return false;\n  }\n\n  return true;\n}\n/**\n * Validate whether a method is safe.\n * Throws an error when that's not the case.\n * @param {Object} object\n * @param {string} method\n */\n// TODO: merge this function into assign.js?\n\n\nfunction validateSafeMethod(object, method) {\n  if (!isSafeMethod(object, method)) {\n    throw new Error('No access to method \"' + method + '\"');\n  }\n}\n/**\n * Check whether a method is safe.\n * Throws an error when that's not the case (for example for `constructor`).\n * @param {Object} object\n * @param {string} method\n * @return {boolean} Returns true when safe, false otherwise\n */\n\n\nfunction isSafeMethod(object, method) {\n  if (object === null || object === undefined || typeof object[method] !== 'function') {\n    return false;\n  } // UNSAFE: ghosted\n  // e.g overridden toString\n  // Note that IE10 doesn't support __proto__ and we can't do this check there.\n\n\n  if (hasOwnProperty(object, method) && Object.getPrototypeOf && method in Object.getPrototypeOf(object)) {\n    return false;\n  } // SAFE: whitelisted\n  // e.g toString\n\n\n  if (hasOwnProperty(safeNativeMethods, method)) {\n    return true;\n  } // UNSAFE: inherited from Object prototype\n  // e.g constructor\n\n\n  if (method in Object.prototype) {\n    // 'in' is used instead of hasOwnProperty for nodejs v0.10\n    // which is inconsistent on root prototypes. It is safe\n    // here because Object.prototype is a root object\n    return false;\n  } // UNSAFE: inherited from Function prototype\n  // e.g call, apply\n\n\n  if (method in Function.prototype) {\n    // 'in' is used instead of hasOwnProperty for nodejs v0.10\n    // which is inconsistent on root prototypes. It is safe\n    // here because Function.prototype is a root object\n    return false;\n  }\n\n  return true;\n}\n\nfunction isPlainObject(object) {\n  return typeof object === 'object' && object && object.constructor === Object;\n}\n\nvar safeNativeProperties = {\n  length: true,\n  name: true\n};\nvar safeNativeMethods = {\n  toString: true,\n  valueOf: true,\n  toLocaleString: true\n};\nexport { getSafeProperty };\nexport { setSafeProperty };\nexport { isSafeProperty };\nexport { hasSafeProperty };\nexport { getSafeProperties };\nexport { validateSafeMethod };\nexport { isSafeMethod };\nexport { isPlainObject };", "import { setSafeProperty, hasSafeProperty, getSafeProperty } from './customs.js';\nimport { isObject } from './is.js';\n/**\n * A map facade on a bare object.\n *\n * The small number of methods needed to implement a scope,\n * forwarding on to the SafeProperty functions. Over time, the codebase\n * will stop using this method, as all objects will be Maps, rather than\n * more security prone objects.\n */\n\nexport class ObjectWrappingMap {\n  constructor(object) {\n    this.wrappedObject = object;\n  }\n\n  keys() {\n    return Object.keys(this.wrappedObject);\n  }\n\n  get(key) {\n    return getSafeProperty(this.wrappedObject, key);\n  }\n\n  set(key, value) {\n    setSafeProperty(this.wrappedObject, key, value);\n    return this;\n  }\n\n  has(key) {\n    return hasSafeProperty(this.wrappedObject, key);\n  }\n\n}\n/**\n * Creates an empty map, or whatever your platform's polyfill is.\n *\n * @returns an empty Map or Map like object.\n */\n\nexport function createEmptyMap() {\n  return new Map();\n}\n/**\n * Creates a Map from the given object.\n *\n * @param { Map | { [key: string]: unknown } | undefined } mapOrObject\n * @returns\n */\n\nexport function createMap(mapOrObject) {\n  if (!mapOrObject) {\n    return createEmptyMap();\n  }\n\n  if (isMap(mapOrObject)) {\n    return mapOrObject;\n  }\n\n  if (isObject(mapOrObject)) {\n    return new ObjectWrappingMap(mapOrObject);\n  }\n\n  throw new Error('createMap can create maps from objects or Maps');\n}\n/**\n * Unwraps a map into an object.\n *\n * @param {Map} map\n * @returns { [key: string]: unknown }\n */\n\nexport function toObject(map) {\n  if (map instanceof ObjectWrappingMap) {\n    return map.wrappedObject;\n  }\n\n  var object = {};\n\n  for (var key of map.keys()) {\n    var value = map.get(key);\n    setSafeProperty(object, key, value);\n  }\n\n  return object;\n}\n/**\n * Returns `true` if the passed object appears to be a Map (i.e. duck typing).\n *\n * Methods looked for are `get`, `set`, `keys` and `has`.\n *\n * @param {Map | object} object\n * @returns\n */\n\nexport function isMap(object) {\n  // We can use the fast instanceof, or a slower duck typing check.\n  // The duck typing method needs to cover enough methods to not be confused with DenseMatrix.\n  if (!object) {\n    return false;\n  }\n\n  return object instanceof Map || object instanceof ObjectWrappingMap || typeof object.set === 'function' && typeof object.get === 'function' && typeof object.keys === 'function' && typeof object.has === 'function';\n}\n/**\n * Copies the contents of key-value pairs from each `objects` in to `map`.\n *\n * Object is `objects` can be a `Map` or object.\n *\n * This is the `Map` analog to `Object.assign`.\n */\n\nexport function assign(map) {\n  for (var _len = arguments.length, objects = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    objects[_key - 1] = arguments[_key];\n  }\n\n  for (var args of objects) {\n    if (!args) {\n      continue;\n    }\n\n    if (isMap(args)) {\n      for (var key of args.keys()) {\n        map.set(key, args.get(key));\n      }\n    } else if (isObject(args)) {\n      for (var _key2 of Object.keys(args)) {\n        map.set(_key2, args[_key2]);\n      }\n    }\n  }\n\n  return map;\n}", "/**\n * Create a typed-function which checks the types of the arguments and\n * can match them against multiple provided signatures. The typed-function\n * automatically converts inputs in order to find a matching signature.\n * Typed functions throw informative errors in case of wrong input arguments.\n *\n * See the library [typed-function](https://github.com/josdejong/typed-function)\n * for detailed documentation.\n *\n * Syntax:\n *\n *     math.typed(name, signatures) : function\n *     math.typed(signatures) : function\n *\n * Examples:\n *\n *     // create a typed function with multiple types per argument (type union)\n *     const fn2 = typed({\n *       'number | boolean': function (b) {\n *         return 'b is a number or boolean'\n *       },\n *       'string, number | boolean': function (a, b) {\n *         return 'a is a string, b is a number or boolean'\n *       }\n *     })\n *\n *     // create a typed function with an any type argument\n *     const log = typed({\n *       'string, any': function (event, data) {\n *         console.log('event: ' + event + ', data: ' + JSON.stringify(data))\n *       }\n *     })\n *\n * @param {string} [name]                          Optional name for the typed-function\n * @param {Object<string, function>} signatures   Object with one or multiple function signatures\n * @returns {function} The created typed-function.\n */\nimport { isAccessorNode, isArray, isArrayNode, isAssignmentNode, isBigNumber, isBlockNode, isBoolean, isChain, isComplex, isConditionalNode, isConstantNode, isDate, isDenseMatrix, isFraction, isFunction, isFunctionAssignmentNode, isFunctionNode, isHelp, isIndex, isIndexNode, isMatrix, isNode, isNull, isNumber, isObject, isObjectNode, isOperatorNode, isParenthesisNode, isRange, isRangeNode, isRegExp, isResultSet, isSparseMatrix, isString, isSymbolNode, isUndefined, isUnit } from '../../utils/is.js';\nimport typedFunction from 'typed-function';\nimport { digits } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { isMap } from '../../utils/map.js'; // returns a new instance of typed-function\n\nvar _createTyped2 = function _createTyped() {\n  // initially, return the original instance of typed-function\n  // consecutively, return a new instance from typed.create.\n  _createTyped2 = typedFunction.create;\n  return typedFunction;\n};\n\nvar dependencies = ['?BigNumber', '?Complex', '?DenseMatrix', '?Fraction'];\n/**\n * Factory function for creating a new typed instance\n * @param {Object} dependencies   Object with data types like Complex and BigNumber\n * @returns {Function}\n */\n\nexport var createTyped = /* #__PURE__ */factory('typed', dependencies, function createTyped(_ref) {\n  var {\n    BigNumber,\n    Complex,\n    DenseMatrix,\n    Fraction\n  } = _ref;\n\n  // TODO: typed-function must be able to silently ignore signatures with unknown data types\n  // get a new instance of typed-function\n  var typed = _createTyped2(); // define all types. The order of the types determines in which order function\n  // arguments are type-checked (so for performance it's important to put the\n  // most used types first).\n\n\n  typed.types = [{\n    name: 'number',\n    test: isNumber\n  }, {\n    name: 'Complex',\n    test: isComplex\n  }, {\n    name: 'BigNumber',\n    test: isBigNumber\n  }, {\n    name: 'Fraction',\n    test: isFraction\n  }, {\n    name: 'Unit',\n    test: isUnit\n  }, {\n    name: 'string',\n    test: isString\n  }, {\n    name: 'Chain',\n    test: isChain\n  }, {\n    name: 'Array',\n    test: isArray\n  }, {\n    name: 'Matrix',\n    test: isMatrix\n  }, {\n    name: 'DenseMatrix',\n    test: isDenseMatrix\n  }, {\n    name: 'SparseMatrix',\n    test: isSparseMatrix\n  }, {\n    name: 'Range',\n    test: isRange\n  }, {\n    name: 'Index',\n    test: isIndex\n  }, {\n    name: 'boolean',\n    test: isBoolean\n  }, {\n    name: 'ResultSet',\n    test: isResultSet\n  }, {\n    name: 'Help',\n    test: isHelp\n  }, {\n    name: 'function',\n    test: isFunction\n  }, {\n    name: 'Date',\n    test: isDate\n  }, {\n    name: 'RegExp',\n    test: isRegExp\n  }, {\n    name: 'null',\n    test: isNull\n  }, {\n    name: 'undefined',\n    test: isUndefined\n  }, {\n    name: 'AccessorNode',\n    test: isAccessorNode\n  }, {\n    name: 'ArrayNode',\n    test: isArrayNode\n  }, {\n    name: 'AssignmentNode',\n    test: isAssignmentNode\n  }, {\n    name: 'BlockNode',\n    test: isBlockNode\n  }, {\n    name: 'ConditionalNode',\n    test: isConditionalNode\n  }, {\n    name: 'ConstantNode',\n    test: isConstantNode\n  }, {\n    name: 'FunctionNode',\n    test: isFunctionNode\n  }, {\n    name: 'FunctionAssignmentNode',\n    test: isFunctionAssignmentNode\n  }, {\n    name: 'IndexNode',\n    test: isIndexNode\n  }, {\n    name: 'Node',\n    test: isNode\n  }, {\n    name: 'ObjectNode',\n    test: isObjectNode\n  }, {\n    name: 'OperatorNode',\n    test: isOperatorNode\n  }, {\n    name: 'ParenthesisNode',\n    test: isParenthesisNode\n  }, {\n    name: 'RangeNode',\n    test: isRangeNode\n  }, {\n    name: 'SymbolNode',\n    test: isSymbolNode\n  }, {\n    name: 'Map',\n    test: isMap\n  }, {\n    name: 'Object',\n    test: isObject\n  } // order 'Object' last, it matches on other classes too\n  ];\n  typed.conversions = [{\n    from: 'number',\n    to: 'BigNumber',\n    convert: function convert(x) {\n      if (!BigNumber) {\n        throwNoBignumber(x);\n      } // note: conversion from number to BigNumber can fail if x has >15 digits\n\n\n      if (digits(x) > 15) {\n        throw new TypeError('Cannot implicitly convert a number with >15 significant digits to BigNumber ' + '(value: ' + x + '). ' + 'Use function bignumber(x) to convert to BigNumber.');\n      }\n\n      return new BigNumber(x);\n    }\n  }, {\n    from: 'number',\n    to: 'Complex',\n    convert: function convert(x) {\n      if (!Complex) {\n        throwNoComplex(x);\n      }\n\n      return new Complex(x, 0);\n    }\n  }, {\n    from: 'number',\n    to: 'string',\n    convert: function convert(x) {\n      return x + '';\n    }\n  }, {\n    from: 'BigNumber',\n    to: 'Complex',\n    convert: function convert(x) {\n      if (!Complex) {\n        throwNoComplex(x);\n      }\n\n      return new Complex(x.toNumber(), 0);\n    }\n  }, {\n    from: 'Fraction',\n    to: 'BigNumber',\n    convert: function convert(x) {\n      throw new TypeError('Cannot implicitly convert a Fraction to BigNumber or vice versa. ' + 'Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.');\n    }\n  }, {\n    from: 'Fraction',\n    to: 'Complex',\n    convert: function convert(x) {\n      if (!Complex) {\n        throwNoComplex(x);\n      }\n\n      return new Complex(x.valueOf(), 0);\n    }\n  }, {\n    from: 'number',\n    to: 'Fraction',\n    convert: function convert(x) {\n      if (!Fraction) {\n        throwNoFraction(x);\n      }\n\n      var f = new Fraction(x);\n\n      if (f.valueOf() !== x) {\n        throw new TypeError('Cannot implicitly convert a number to a Fraction when there will be a loss of precision ' + '(value: ' + x + '). ' + 'Use function fraction(x) to convert to Fraction.');\n      }\n\n      return f;\n    }\n  }, {\n    // FIXME: add conversion from Fraction to number, for example for `sqrt(fraction(1,3))`\n    //  from: 'Fraction',\n    //  to: 'number',\n    //  convert: function (x) {\n    //    return x.valueOf()\n    //  }\n    // }, {\n    from: 'string',\n    to: 'number',\n    convert: function convert(x) {\n      var n = Number(x);\n\n      if (isNaN(n)) {\n        throw new Error('Cannot convert \"' + x + '\" to a number');\n      }\n\n      return n;\n    }\n  }, {\n    from: 'string',\n    to: 'BigNumber',\n    convert: function convert(x) {\n      if (!BigNumber) {\n        throwNoBignumber(x);\n      }\n\n      try {\n        return new BigNumber(x);\n      } catch (err) {\n        throw new Error('Cannot convert \"' + x + '\" to BigNumber');\n      }\n    }\n  }, {\n    from: 'string',\n    to: 'Fraction',\n    convert: function convert(x) {\n      if (!Fraction) {\n        throwNoFraction(x);\n      }\n\n      try {\n        return new Fraction(x);\n      } catch (err) {\n        throw new Error('Cannot convert \"' + x + '\" to Fraction');\n      }\n    }\n  }, {\n    from: 'string',\n    to: 'Complex',\n    convert: function convert(x) {\n      if (!Complex) {\n        throwNoComplex(x);\n      }\n\n      try {\n        return new Complex(x);\n      } catch (err) {\n        throw new Error('Cannot convert \"' + x + '\" to Complex');\n      }\n    }\n  }, {\n    from: 'boolean',\n    to: 'number',\n    convert: function convert(x) {\n      return +x;\n    }\n  }, {\n    from: 'boolean',\n    to: 'BigNumber',\n    convert: function convert(x) {\n      if (!BigNumber) {\n        throwNoBignumber(x);\n      }\n\n      return new BigNumber(+x);\n    }\n  }, {\n    from: 'boolean',\n    to: 'Fraction',\n    convert: function convert(x) {\n      if (!Fraction) {\n        throwNoFraction(x);\n      }\n\n      return new Fraction(+x);\n    }\n  }, {\n    from: 'boolean',\n    to: 'string',\n    convert: function convert(x) {\n      return String(x);\n    }\n  }, {\n    from: 'Array',\n    to: 'Matrix',\n    convert: function convert(array) {\n      if (!DenseMatrix) {\n        throwNoMatrix();\n      }\n\n      return new DenseMatrix(array);\n    }\n  }, {\n    from: 'Matrix',\n    to: 'Array',\n    convert: function convert(matrix) {\n      return matrix.valueOf();\n    }\n  }];\n  return typed;\n});\n\nfunction throwNoBignumber(x) {\n  throw new Error(\"Cannot convert value \".concat(x, \" into a BigNumber: no class 'BigNumber' provided\"));\n}\n\nfunction throwNoComplex(x) {\n  throw new Error(\"Cannot convert value \".concat(x, \" into a Complex number: no class 'Complex' provided\"));\n}\n\nfunction throwNoMatrix() {\n  throw new Error('Cannot convert array into a Matrix: no class \\'DenseMatrix\\' provided');\n}\n\nfunction throwNoFraction(x) {\n  throw new Error(\"Cannot convert value \".concat(x, \" into a Fraction, no class 'Fraction' provided.\"));\n}", "import { factory } from '../../utils/factory.js';\nvar name = 'ResultSet';\nvar dependencies = [];\nexport var createResultSet = /* #__PURE__ */factory(name, dependencies, () => {\n  /**\n   * A ResultSet contains a list or results\n   * @class ResultSet\n   * @param {Array} entries\n   * @constructor ResultSet\n   */\n  function ResultSet(entries) {\n    if (!(this instanceof ResultSet)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    this.entries = entries || [];\n  }\n  /**\n   * Attach type information\n   */\n\n\n  ResultSet.prototype.type = 'ResultSet';\n  ResultSet.prototype.isResultSet = true;\n  /**\n   * Returns the array with results hold by this ResultSet\n   * @memberof ResultSet\n   * @returns {Array} entries\n   */\n\n  ResultSet.prototype.valueOf = function () {\n    return this.entries;\n  };\n  /**\n   * Returns the stringified results of the ResultSet\n   * @memberof ResultSet\n   * @returns {string} string\n   */\n\n\n  ResultSet.prototype.toString = function () {\n    return '[' + this.entries.join(', ') + ']';\n  };\n  /**\n   * Get a JSON representation of the ResultSet\n   * @memberof ResultSet\n   * @returns {Object} Returns a JSON object structured as:\n   *                   `{\"mathjs\": \"ResultSet\", \"entries\": [...]}`\n   */\n\n\n  ResultSet.prototype.toJSON = function () {\n    return {\n      mathjs: 'ResultSet',\n      entries: this.entries\n    };\n  };\n  /**\n   * Instantiate a ResultSet from a JSON object\n   * @memberof ResultSet\n   * @param {Object} json  A JSON object structured as:\n   *                       `{\"mathjs\": \"ResultSet\", \"entries\": [...]}`\n   * @return {ResultSet}\n   */\n\n\n  ResultSet.fromJSON = function (json) {\n    return new ResultSet(json.entries);\n  };\n\n  return ResultSet;\n}, {\n  isClass: true\n});", "import { isBigNumber } from '../../utils/is.js';\nimport { format, sign } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'Range';\nvar dependencies = [];\nexport var createRangeClass = /* #__PURE__ */factory(name, dependencies, () => {\n  /**\n   * Create a range. A range has a start, step, and end, and contains functions\n   * to iterate over the range.\n   *\n   * A range can be constructed as:\n   *\n   *     const range = new Range(start, end)\n   *     const range = new Range(start, end, step)\n   *\n   * To get the result of the range:\n   *     range.forEach(function (x) {\n   *         console.log(x)\n   *     })\n   *     range.map(function (x) {\n   *         return math.sin(x)\n   *     })\n   *     range.toArray()\n   *\n   * Example usage:\n   *\n   *     const c = new Range(2, 6)       // 2:1:5\n   *     c.toArray()                     // [2, 3, 4, 5]\n   *     const d = new Range(2, -3, -1)  // 2:-1:-2\n   *     d.toArray()                     // [2, 1, 0, -1, -2]\n   *\n   * @class Range\n   * @constructor Range\n   * @param {number} start  included lower bound\n   * @param {number} end    excluded upper bound\n   * @param {number} [step] step size, default value is 1\n   */\n  function Range(start, end, step) {\n    if (!(this instanceof Range)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    var hasStart = start !== null && start !== undefined;\n    var hasEnd = end !== null && end !== undefined;\n    var hasStep = step !== null && step !== undefined;\n\n    if (hasStart) {\n      if (isBigNumber(start)) {\n        start = start.toNumber();\n      } else if (typeof start !== 'number') {\n        throw new TypeError('Parameter start must be a number');\n      }\n    }\n\n    if (hasEnd) {\n      if (isBigNumber(end)) {\n        end = end.toNumber();\n      } else if (typeof end !== 'number') {\n        throw new TypeError('Parameter end must be a number');\n      }\n    }\n\n    if (hasStep) {\n      if (isBigNumber(step)) {\n        step = step.toNumber();\n      } else if (typeof step !== 'number') {\n        throw new TypeError('Parameter step must be a number');\n      }\n    }\n\n    this.start = hasStart ? parseFloat(start) : 0;\n    this.end = hasEnd ? parseFloat(end) : 0;\n    this.step = hasStep ? parseFloat(step) : 1;\n  }\n  /**\n   * Attach type information\n   */\n\n\n  Range.prototype.type = 'Range';\n  Range.prototype.isRange = true;\n  /**\n   * Parse a string into a range,\n   * The string contains the start, optional step, and end, separated by a colon.\n   * If the string does not contain a valid range, null is returned.\n   * For example str='0:2:11'.\n   * @memberof Range\n   * @param {string} str\n   * @return {Range | null} range\n   */\n\n  Range.parse = function (str) {\n    if (typeof str !== 'string') {\n      return null;\n    }\n\n    var args = str.split(':');\n    var nums = args.map(function (arg) {\n      return parseFloat(arg);\n    });\n    var invalid = nums.some(function (num) {\n      return isNaN(num);\n    });\n\n    if (invalid) {\n      return null;\n    }\n\n    switch (nums.length) {\n      case 2:\n        return new Range(nums[0], nums[1]);\n\n      case 3:\n        return new Range(nums[0], nums[2], nums[1]);\n\n      default:\n        return null;\n    }\n  };\n  /**\n   * Create a clone of the range\n   * @return {Range} clone\n   */\n\n\n  Range.prototype.clone = function () {\n    return new Range(this.start, this.end, this.step);\n  };\n  /**\n   * Retrieve the size of the range.\n   * Returns an array containing one number, the number of elements in the range.\n   * @memberof Range\n   * @returns {number[]} size\n   */\n\n\n  Range.prototype.size = function () {\n    var len = 0;\n    var start = this.start;\n    var step = this.step;\n    var end = this.end;\n    var diff = end - start;\n\n    if (sign(step) === sign(diff)) {\n      len = Math.ceil(diff / step);\n    } else if (diff === 0) {\n      len = 0;\n    }\n\n    if (isNaN(len)) {\n      len = 0;\n    }\n\n    return [len];\n  };\n  /**\n   * Calculate the minimum value in the range\n   * @memberof Range\n   * @return {number | undefined} min\n   */\n\n\n  Range.prototype.min = function () {\n    var size = this.size()[0];\n\n    if (size > 0) {\n      if (this.step > 0) {\n        // positive step\n        return this.start;\n      } else {\n        // negative step\n        return this.start + (size - 1) * this.step;\n      }\n    } else {\n      return undefined;\n    }\n  };\n  /**\n   * Calculate the maximum value in the range\n   * @memberof Range\n   * @return {number | undefined} max\n   */\n\n\n  Range.prototype.max = function () {\n    var size = this.size()[0];\n\n    if (size > 0) {\n      if (this.step > 0) {\n        // positive step\n        return this.start + (size - 1) * this.step;\n      } else {\n        // negative step\n        return this.start;\n      }\n    } else {\n      return undefined;\n    }\n  };\n  /**\n   * Execute a callback function for each value in the range.\n   * @memberof Range\n   * @param {function} callback   The callback method is invoked with three\n   *                              parameters: the value of the element, the index\n   *                              of the element, and the Range being traversed.\n   */\n\n\n  Range.prototype.forEach = function (callback) {\n    var x = this.start;\n    var step = this.step;\n    var end = this.end;\n    var i = 0;\n\n    if (step > 0) {\n      while (x < end) {\n        callback(x, [i], this);\n        x += step;\n        i++;\n      }\n    } else if (step < 0) {\n      while (x > end) {\n        callback(x, [i], this);\n        x += step;\n        i++;\n      }\n    }\n  };\n  /**\n   * Execute a callback function for each value in the Range, and return the\n   * results as an array\n   * @memberof Range\n   * @param {function} callback   The callback method is invoked with three\n   *                              parameters: the value of the element, the index\n   *                              of the element, and the Matrix being traversed.\n   * @returns {Array} array\n   */\n\n\n  Range.prototype.map = function (callback) {\n    var array = [];\n    this.forEach(function (value, index, obj) {\n      array[index[0]] = callback(value, index, obj);\n    });\n    return array;\n  };\n  /**\n   * Create an Array with a copy of the Ranges data\n   * @memberof Range\n   * @returns {Array} array\n   */\n\n\n  Range.prototype.toArray = function () {\n    var array = [];\n    this.forEach(function (value, index) {\n      array[index[0]] = value;\n    });\n    return array;\n  };\n  /**\n   * Get the primitive value of the Range, a one dimensional array\n   * @memberof Range\n   * @returns {Array} array\n   */\n\n\n  Range.prototype.valueOf = function () {\n    // TODO: implement a caching mechanism for range.valueOf()\n    return this.toArray();\n  };\n  /**\n   * Get a string representation of the range, with optional formatting options.\n   * Output is formatted as 'start:step:end', for example '2:6' or '0:0.2:11'\n   * @memberof Range\n   * @param {Object | number | function} [options]  Formatting options. See\n   *                                                lib/utils/number:format for a\n   *                                                description of the available\n   *                                                options.\n   * @returns {string} str\n   */\n\n\n  Range.prototype.format = function (options) {\n    var str = format(this.start, options);\n\n    if (this.step !== 1) {\n      str += ':' + format(this.step, options);\n    }\n\n    str += ':' + format(this.end, options);\n    return str;\n  };\n  /**\n   * Get a string representation of the range.\n   * @memberof Range\n   * @returns {string}\n   */\n\n\n  Range.prototype.toString = function () {\n    return this.format();\n  };\n  /**\n   * Get a JSON representation of the range\n   * @memberof Range\n   * @returns {Object} Returns a JSON object structured as:\n   *                   `{\"mathjs\": \"Range\", \"start\": 2, \"end\": 4, \"step\": 1}`\n   */\n\n\n  Range.prototype.toJSON = function () {\n    return {\n      mathjs: 'Range',\n      start: this.start,\n      end: this.end,\n      step: this.step\n    };\n  };\n  /**\n   * Instantiate a Range from a JSON object\n   * @memberof Range\n   * @param {Object} json A JSON object structured as:\n   *                      `{\"mathjs\": \"Range\", \"start\": 2, \"end\": 4, \"step\": 1}`\n   * @return {Range}\n   */\n\n\n  Range.fromJSON = function (json) {\n    return new Range(json.start, json.end, json.step);\n  };\n\n  return Range;\n}, {\n  isClass: true\n});", "import { isHelp } from '../utils/is.js';\nimport { clone } from '../utils/object.js';\nimport { format } from '../utils/string.js';\nimport { factory } from '../utils/factory.js';\nvar name = 'Help';\nvar dependencies = ['parse'];\nexport var createHelpClass = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    parse\n  } = _ref;\n\n  /**\n   * Documentation object\n   * @param {Object} doc  Object containing properties:\n   *                      {string} name\n   *                      {string} category\n   *                      {string} description\n   *                      {string[]} syntax\n   *                      {string[]} examples\n   *                      {string[]} seealso\n   * @constructor\n   */\n  function Help(doc) {\n    if (!(this instanceof Help)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    if (!doc) throw new Error('Argument \"doc\" missing');\n    this.doc = doc;\n  }\n  /**\n   * Attach type information\n   */\n\n\n  Help.prototype.type = 'Help';\n  Help.prototype.isHelp = true;\n  /**\n   * Generate a string representation of the Help object\n   * @return {string} Returns a string\n   * @private\n   */\n\n  Help.prototype.toString = function () {\n    var doc = this.doc || {};\n    var desc = '\\n';\n\n    if (doc.name) {\n      desc += 'Name: ' + doc.name + '\\n\\n';\n    }\n\n    if (doc.category) {\n      desc += 'Category: ' + doc.category + '\\n\\n';\n    }\n\n    if (doc.description) {\n      desc += 'Description:\\n    ' + doc.description + '\\n\\n';\n    }\n\n    if (doc.syntax) {\n      desc += 'Syntax:\\n    ' + doc.syntax.join('\\n    ') + '\\n\\n';\n    }\n\n    if (doc.examples) {\n      desc += 'Examples:\\n';\n      var scope = {};\n\n      for (var i = 0; i < doc.examples.length; i++) {\n        var expr = doc.examples[i];\n        desc += '    ' + expr + '\\n';\n        var res = void 0;\n\n        try {\n          // note: res can be undefined when `expr` is an empty string\n          res = parse(expr).compile().evaluate(scope);\n        } catch (e) {\n          res = e;\n        }\n\n        if (res !== undefined && !isHelp(res)) {\n          desc += '        ' + format(res, {\n            precision: 14\n          }) + '\\n';\n        }\n      }\n\n      desc += '\\n';\n    }\n\n    if (doc.mayThrow && doc.mayThrow.length) {\n      desc += 'Throws: ' + doc.mayThrow.join(', ') + '\\n\\n';\n    }\n\n    if (doc.seealso && doc.seealso.length) {\n      desc += 'See also: ' + doc.seealso.join(', ') + '\\n';\n    }\n\n    return desc;\n  };\n  /**\n   * Export the help object to JSON\n   */\n\n\n  Help.prototype.toJSON = function () {\n    var obj = clone(this.doc);\n    obj.mathjs = 'Help';\n    return obj;\n  };\n  /**\n   * Instantiate a Help object from a JSON object\n   * @param {Object} json\n   * @returns {Help} Returns a new Help object\n   */\n\n\n  Help.fromJSON = function (json) {\n    var doc = {};\n    Object.keys(json).filter(prop => prop !== 'mathjs').forEach(prop => {\n      doc[prop] = json[prop];\n    });\n    return new Help(doc);\n  };\n  /**\n   * Returns a string representation of the Help object\n   */\n\n\n  Help.prototype.valueOf = Help.prototype.toString;\n  return Help;\n}, {\n  isClass: true\n});", "import { isChain } from '../../utils/is.js';\nimport { format } from '../../utils/string.js';\nimport { hasOwnProperty, lazy } from '../../utils/object.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'Chain';\nvar dependencies = ['?on', 'math'];\nexport var createChainClass = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    on,\n    math\n  } = _ref;\n\n  /**\n   * @constructor Chain\n   * Wrap any value in a chain, allowing to perform chained operations on\n   * the value.\n   *\n   * All methods available in the math.js library can be called upon the chain,\n   * and then will be evaluated with the value itself as first argument.\n   * The chain can be closed by executing chain.done(), which will return\n   * the final value.\n   *\n   * The Chain has a number of special functions:\n   * - done()             Finalize the chained operation and return the\n   *                      chain's value.\n   * - valueOf()          The same as done()\n   * - toString()         Returns a string representation of the chain's value.\n   *\n   * @param {*} [value]\n   */\n  function Chain(value) {\n    if (!(this instanceof Chain)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    if (isChain(value)) {\n      this.value = value.value;\n    } else {\n      this.value = value;\n    }\n  }\n  /**\n   * Attach type information\n   */\n\n\n  Chain.prototype.type = 'Chain';\n  Chain.prototype.isChain = true;\n  /**\n   * Close the chain. Returns the final value.\n   * Does the same as method valueOf()\n   * @returns {*} value\n   */\n\n  Chain.prototype.done = function () {\n    return this.value;\n  };\n  /**\n   * Close the chain. Returns the final value.\n   * Does the same as method done()\n   * @returns {*} value\n   */\n\n\n  Chain.prototype.valueOf = function () {\n    return this.value;\n  };\n  /**\n   * Get a string representation of the value in the chain\n   * @returns {string}\n   */\n\n\n  Chain.prototype.toString = function () {\n    return format(this.value);\n  };\n  /**\n   * Get a JSON representation of the chain\n   * @returns {Object}\n   */\n\n\n  Chain.prototype.toJSON = function () {\n    return {\n      mathjs: 'Chain',\n      value: this.value\n    };\n  };\n  /**\n   * Instantiate a Chain from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"Chain\", value: ...}`,\n   *                       where mathjs is optional\n   * @returns {Chain}\n   */\n\n\n  Chain.fromJSON = function (json) {\n    return new Chain(json.value);\n  };\n  /**\n   * Create a proxy method for the chain\n   * @param {string} name\n   * @param {Function} fn      The function to be proxied\n   *                           If fn is no function, it is silently ignored.\n   * @private\n   */\n\n\n  function createProxy(name, fn) {\n    if (typeof fn === 'function') {\n      Chain.prototype[name] = chainify(fn);\n    }\n  }\n  /**\n   * Create a proxy method for the chain\n   * @param {string} name\n   * @param {function} resolver   The function resolving with the\n   *                              function to be proxied\n   * @private\n   */\n\n\n  function createLazyProxy(name, resolver) {\n    lazy(Chain.prototype, name, function outerResolver() {\n      var fn = resolver();\n\n      if (typeof fn === 'function') {\n        return chainify(fn);\n      }\n\n      return undefined; // if not a function, ignore\n    });\n  }\n  /**\n   * Make a function chainable\n   * @param {function} fn\n   * @return {Function} chain function\n   * @private\n   */\n\n\n  function chainify(fn) {\n    return function () {\n      var args = [this.value]; // `this` will be the context of a Chain instance\n\n      for (var i = 0; i < arguments.length; i++) {\n        args[i + 1] = arguments[i];\n      }\n\n      return new Chain(fn.apply(fn, args));\n    };\n  }\n  /**\n   * Create a proxy for a single method, or an object with multiple methods.\n   * Example usage:\n   *\n   *   Chain.createProxy('add', function add (x, y) {...})\n   *   Chain.createProxy({\n   *     add:      function add (x, y) {...},\n   *     subtract: function subtract (x, y) {...}\n   *   }\n   *\n   * @param {string | Object} arg0   A name (string), or an object with\n   *                                 functions\n   * @param {*} [arg1]               A function, when arg0 is a name\n   */\n\n\n  Chain.createProxy = function (arg0, arg1) {\n    if (typeof arg0 === 'string') {\n      // createProxy(name, value)\n      createProxy(arg0, arg1);\n    } else {\n      var _loop = function _loop(_name) {\n        if (hasOwnProperty(arg0, _name) && excludedNames[_name] === undefined) {\n          createLazyProxy(_name, () => arg0[_name]);\n        }\n      };\n\n      // createProxy(values)\n      for (var _name in arg0) {\n        _loop(_name);\n      }\n    }\n  };\n\n  var excludedNames = {\n    expression: true,\n    docs: true,\n    type: true,\n    classes: true,\n    json: true,\n    error: true,\n    isChain: true // conflicts with the property isChain of a Chain instance\n\n  }; // create proxy for everything that is in math.js\n\n  Chain.createProxy(math); // register on the import event, automatically add a proxy for every imported function.\n\n  if (on) {\n    on('import', function (name, resolver, path) {\n      if (!path) {\n        // an imported function (not a data type or something special)\n        createLazyProxy(name, resolver);\n      }\n    });\n  }\n\n  return Chain;\n}, {\n  isClass: true\n});", "export var eDocs = {\n  name: 'e',\n  category: 'Constants',\n  syntax: ['e'],\n  description: 'Euler\\'s number, the base of the natural logarithm. Approximately equal to 2.71828',\n  examples: ['e', 'e ^ 2', 'exp(2)', 'log(e)'],\n  seealso: ['exp']\n};", "export var falseDocs = {\n  name: 'false',\n  category: 'Constants',\n  syntax: ['false'],\n  description: 'Boolean value false',\n  examples: ['false'],\n  seealso: ['true']\n};", "export var iDocs = {\n  name: 'i',\n  category: 'Constants',\n  syntax: ['i'],\n  description: 'Imaginary unit, defined as i*i=-1. A complex number is described as a + b*i, where a is the real part, and b is the imaginary part.',\n  examples: ['i', 'i * i', 'sqrt(-1)'],\n  seealso: []\n};", "export var InfinityDocs = {\n  name: 'Infinity',\n  category: 'Constants',\n  syntax: ['Infinity'],\n  description: 'Infinity, a number which is larger than the maximum number that can be handled by a floating point number.',\n  examples: ['Infinity', '1 / 0'],\n  seealso: []\n};", "export var LN10Docs = {\n  name: 'LN10',\n  category: 'Constants',\n  syntax: ['LN10'],\n  description: 'Returns the natural logarithm of 10, approximately equal to 2.302',\n  examples: ['LN10', 'log(10)'],\n  seealso: []\n};", "export var LN2Docs = {\n  name: 'LN2',\n  category: 'Constants',\n  syntax: ['LN2'],\n  description: 'Returns the natural logarithm of 2, approximately equal to 0.693',\n  examples: ['LN2', 'log(2)'],\n  seealso: []\n};", "export var LOG10EDocs = {\n  name: 'LOG10E',\n  category: 'Constants',\n  syntax: ['LOG10E'],\n  description: 'Returns the base-10 logarithm of E, approximately equal to 0.434',\n  examples: ['LOG10E', 'log(e, 10)'],\n  seealso: []\n};", "export var LOG2EDocs = {\n  name: 'LOG2E',\n  category: 'Constants',\n  syntax: ['LOG2E'],\n  description: 'Returns the base-2 logarithm of E, approximately equal to 1.442',\n  examples: ['LOG2E', 'log(e, 2)'],\n  seealso: []\n};", "export var NaNDocs = {\n  name: 'NaN',\n  category: 'Constants',\n  syntax: ['NaN'],\n  description: 'Not a number',\n  examples: ['NaN', '0 / 0'],\n  seealso: []\n};", "export var nullDocs = {\n  name: 'null',\n  category: 'Constants',\n  syntax: ['null'],\n  description: 'Value null',\n  examples: ['null'],\n  seealso: ['true', 'false']\n};", "export var phiDocs = {\n  name: 'phi',\n  category: 'Constants',\n  syntax: ['phi'],\n  description: 'Phi is the golden ratio. Two quantities are in the golden ratio if their ratio is the same as the ratio of their sum to the larger of the two quantities. Phi is defined as `(1 + sqrt(5)) / 2` and is approximately 1.618034...',\n  examples: ['phi'],\n  seealso: []\n};", "export var piDocs = {\n  name: 'pi',\n  category: 'Constants',\n  syntax: ['pi'],\n  description: 'The number pi is a mathematical constant that is the ratio of a circle\\'s circumference to its diameter, and is approximately equal to 3.14159',\n  examples: ['pi', 'sin(pi/2)'],\n  seealso: ['tau']\n};", "export var SQRT12Docs = {\n  name: 'SQRT1_2',\n  category: 'Constants',\n  syntax: ['SQRT1_2'],\n  description: 'Returns the square root of 1/2, approximately equal to 0.707',\n  examples: ['SQRT1_2', 'sqrt(1/2)'],\n  seealso: []\n};", "export var SQRT2Docs = {\n  name: 'SQRT2',\n  category: 'Constants',\n  syntax: ['SQRT2'],\n  description: 'Returns the square root of 2, approximately equal to 1.414',\n  examples: ['SQRT2', 'sqrt(2)'],\n  seealso: []\n};", "export var tauDocs = {\n  name: 'tau',\n  category: 'Constants',\n  syntax: ['tau'],\n  description: 'Tau is the ratio constant of a circle\\'s circumference to radius, equal to 2 * pi, approximately 6.2832.',\n  examples: ['tau', '2 * pi'],\n  seealso: ['pi']\n};", "export var trueDocs = {\n  name: 'true',\n  category: 'Constants',\n  syntax: ['true'],\n  description: 'Boolean value true',\n  examples: ['true'],\n  seealso: ['false']\n};", "export var versionDocs = {\n  name: 'version',\n  category: 'Constants',\n  syntax: ['version'],\n  description: 'A string with the version number of math.js',\n  examples: ['version'],\n  seealso: []\n};", "export var bignumberDocs = {\n  name: 'bignumber',\n  category: 'Construction',\n  syntax: ['bignumber(x)'],\n  description: 'Create a big number from a number or string.',\n  examples: ['0.1 + 0.2', 'bignumber(0.1) + bignumber(0.2)', 'bignumber(\"7.2\")', 'bignumber(\"7.2e500\")', 'bignumber([0.1, 0.2, 0.3])'],\n  seealso: ['boolean', 'complex', 'fraction', 'index', 'matrix', 'string', 'unit']\n};", "export var booleanDocs = {\n  name: 'boolean',\n  category: 'Construction',\n  syntax: ['x', 'boolean(x)'],\n  description: 'Convert a string or number into a boolean.',\n  examples: ['boolean(0)', 'boolean(1)', 'boolean(3)', 'boolean(\"true\")', 'boolean(\"false\")', 'boolean([1, 0, 1, 1])'],\n  seealso: ['bignumber', 'complex', 'index', 'matrix', 'number', 'string', 'unit']\n};", "export var complexDocs = {\n  name: 'complex',\n  category: 'Construction',\n  syntax: ['complex()', 'complex(re, im)', 'complex(string)'],\n  description: 'Create a complex number.',\n  examples: ['complex()', 'complex(2, 3)', 'complex(\"7 - 2i\")'],\n  seealso: ['bignumber', 'boolean', 'index', 'matrix', 'number', 'string', 'unit']\n};", "export var createUnitDocs = {\n  name: 'createUnit',\n  category: 'Construction',\n  syntax: ['createUnit(definitions)', 'createUnit(name, definition)'],\n  description: 'Create a user-defined unit and register it with the Unit type.',\n  examples: ['createUnit(\"foo\")', 'createUnit(\"knot\", {definition: \"0.514444444 m/s\", aliases: [\"knots\", \"kt\", \"kts\"]})', 'createUnit(\"mph\", \"1 mile/hour\")'],\n  seealso: ['unit', 'splitUnit']\n};", "export var fractionDocs = {\n  name: 'fraction',\n  category: 'Construction',\n  syntax: ['fraction(num)', 'fraction(matrix)', 'fraction(num,den)', 'fraction({n: num, d: den})'],\n  description: 'Create a fraction from a number or from integer numerator and denominator.',\n  examples: ['fraction(0.125)', 'fraction(1, 3) + fraction(2, 5)', 'fraction({n: 333, d: 53})', 'fraction([sqrt(9), sqrt(10), sqrt(11)])'],\n  seealso: ['bignumber', 'boolean', 'complex', 'index', 'matrix', 'string', 'unit']\n};", "export var indexDocs = {\n  name: 'index',\n  category: 'Construction',\n  syntax: ['[start]', '[start:end]', '[start:step:end]', '[start1, start 2, ...]', '[start1:end1, start2:end2, ...]', '[start1:step1:end1, start2:step2:end2, ...]'],\n  description: 'Create an index to get or replace a subset of a matrix',\n  examples: ['[]', '[1, 2, 3]', 'A = [1, 2, 3; 4, 5, 6]', 'A[1, :]', 'A[1, 2] = 50', 'A[0:2, 0:2] = ones(2, 2)'],\n  seealso: ['bignumber', 'boolean', 'complex', 'matrix,', 'number', 'range', 'string', 'unit']\n};", "export var matrixDocs = {\n  name: 'matrix',\n  category: 'Construction',\n  syntax: ['[]', '[a1, b1, ...; a2, b2, ...]', 'matrix()', 'matrix(\"dense\")', 'matrix([...])'],\n  description: 'Create a matrix.',\n  examples: ['[]', '[1, 2, 3]', '[1, 2, 3; 4, 5, 6]', 'matrix()', 'matrix([3, 4])', 'matrix([3, 4; 5, 6], \"sparse\")', 'matrix([3, 4; 5, 6], \"sparse\", \"number\")'],\n  seealso: ['bignumber', 'boolean', 'complex', 'index', 'number', 'string', 'unit', 'sparse']\n};", "export var numberDocs = {\n  name: 'number',\n  category: 'Construction',\n  syntax: ['x', 'number(x)', 'number(unit, valuelessUnit)'],\n  description: 'Create a number or convert a string or boolean into a number.',\n  examples: ['2', '2e3', '4.05', 'number(2)', 'number(\"7.2\")', 'number(true)', 'number([true, false, true, true])', 'number(unit(\"52cm\"), \"m\")'],\n  seealso: ['bignumber', 'boolean', 'complex', 'fraction', 'index', 'matrix', 'string', 'unit']\n};", "export var sparseDocs = {\n  name: 'sparse',\n  category: 'Construction',\n  syntax: ['sparse()', 'sparse([a1, b1, ...; a1, b2, ...])', 'sparse([a1, b1, ...; a1, b2, ...], \"number\")'],\n  description: 'Create a sparse matrix.',\n  examples: ['sparse()', 'sparse([3, 4; 5, 6])', 'sparse([3, 0; 5, 0], \"number\")'],\n  seealso: ['bignumber', 'boolean', 'complex', 'index', 'number', 'string', 'unit', 'matrix']\n};", "export var splitUnitDocs = {\n  name: 'splitUnit',\n  category: 'Construction',\n  syntax: ['splitUnit(unit: Unit, parts: Unit[])'],\n  description: 'Split a unit in an array of units whose sum is equal to the original unit.',\n  examples: ['splitUnit(1 m, [\"feet\", \"inch\"])'],\n  seealso: ['unit', 'createUnit']\n};", "export var stringDocs = {\n  name: 'string',\n  category: 'Construction',\n  syntax: ['\"text\"', 'string(x)'],\n  description: 'Create a string or convert a value to a string',\n  examples: ['\"Hello World!\"', 'string(4.2)', 'string(3 + 2i)'],\n  seealso: ['bignumber', 'boolean', 'complex', 'index', 'matrix', 'number', 'unit']\n};", "export var unitDocs = {\n  name: 'unit',\n  category: 'Construction',\n  syntax: ['value unit', 'unit(value, unit)', 'unit(string)'],\n  description: 'Create a unit.',\n  examples: ['5.5 mm', '3 inch', 'unit(7.1, \"kilogram\")', 'unit(\"23 deg\")'],\n  seealso: ['bignumber', 'boolean', 'complex', 'index', 'matrix', 'number', 'string']\n};", "export var configDocs = {\n  name: 'config',\n  category: 'Core',\n  syntax: ['config()', 'config(options)'],\n  description: 'Get configuration or change configuration.',\n  examples: ['config()', '1/3 + 1/4', 'config({number: \"Fraction\"})', '1/3 + 1/4'],\n  seealso: []\n};", "export var importDocs = {\n  name: 'import',\n  category: 'Core',\n  syntax: ['import(functions)', 'import(functions, options)'],\n  description: 'Import functions or constants from an object.',\n  examples: ['import({myFn: f(x)=x^2, myConstant: 32 })', 'myFn(2)', 'myConstant'],\n  seealso: []\n};", "export var typedDocs = {\n  name: 'typed',\n  category: 'Core',\n  syntax: ['typed(signatures)', 'typed(name, signatures)'],\n  description: 'Create a typed function.',\n  examples: ['double = typed({ \"number\": f(x)=x+x })', 'double(2)', 'double(\"hello\")'],\n  seealso: []\n};", "export var derivativeDocs = {\n  name: 'derivative',\n  category: 'Algebra',\n  syntax: ['derivative(expr, variable)', 'derivative(expr, variable, {simplify: boolean})'],\n  description: 'Takes the derivative of an expression expressed in parser Nodes. The derivative will be taken over the supplied variable in the second parameter. If there are multiple variables in the expression, it will return a partial derivative.',\n  examples: ['derivative(\"2x^3\", \"x\")', 'derivative(\"2x^3\", \"x\", {simplify: false})', 'derivative(\"2x^2 + 3x + 4\", \"x\")', 'derivative(\"sin(2x)\", \"x\")', 'f = parse(\"x^2 + x\")', 'x = parse(\"x\")', 'df = derivative(f, x)', 'df.evaluate({x: 3})'],\n  seealso: ['simplify', 'parse', 'evaluate']\n};", "export var leafCountDocs = {\n  name: 'leafCount',\n  category: 'Algebra',\n  syntax: ['leafCount(expr)'],\n  description: 'Computes the number of leaves in the parse tree of the given expression',\n  examples: ['leafCount(\"e^(i*pi)-1\")', 'leafCount(parse(\"{a: 22/7, b: 10^(1/2)}\"))'],\n  seealso: ['simplify']\n};", "export var lsolveDocs = {\n  name: 'lsolve',\n  category: 'Algebra',\n  syntax: ['x=lsolve(L, b)'],\n  description: 'Finds one solution of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.',\n  examples: ['a = [-2, 3; 2, 1]', 'b = [11, 9]', 'x = lsolve(a, b)'],\n  seealso: ['lsolveAll', 'lup', 'lusolve', 'usolve', 'matrix', 'sparse']\n};", "export var lsolveAllDocs = {\n  name: 'lsolveAll',\n  category: 'Algebra',\n  syntax: ['x=lsolveAll(L, b)'],\n  description: 'Finds all solutions of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.',\n  examples: ['a = [-2, 3; 2, 1]', 'b = [11, 9]', 'x = lsolve(a, b)'],\n  seealso: ['lsolve', 'lup', 'lusolve', 'usolve', 'matrix', 'sparse']\n};", "export var lupDocs = {\n  name: 'lup',\n  category: 'Algebra',\n  syntax: ['lup(m)'],\n  description: 'Calculate the Matrix LU decomposition with partial pivoting. Matrix A is decomposed in three matrices (L, U, P) where P * A = L * U',\n  examples: ['lup([[2, 1], [1, 4]])', 'lup(matrix([[2, 1], [1, 4]]))', 'lup(sparse([[2, 1], [1, 4]]))'],\n  seealso: ['lusolve', 'lsolve', 'usolve', 'matrix', 'sparse', 'slu', 'qr']\n};", "export var lusolveDocs = {\n  name: 'lusolve',\n  category: 'Algebra',\n  syntax: ['x=lusolve(A, b)', 'x=lusolve(lu, b)'],\n  description: 'Solves the linear system A * x = b where A is an [n x n] matrix and b is a [n] column vector.',\n  examples: ['a = [-2, 3; 2, 1]', 'b = [11, 9]', 'x = lusolve(a, b)'],\n  seealso: ['lup', 'slu', 'lsolve', 'usolve', 'matrix', 'sparse']\n};", "export var qrDocs = {\n  name: 'qr',\n  category: 'Algebra',\n  syntax: ['qr(A)'],\n  description: 'Calculates the Matrix QR decomposition. Matrix `A` is decomposed in two matrices (`Q`, `R`) where `Q` is an orthogonal matrix and `R` is an upper triangular matrix.',\n  examples: ['qr([[1, -1,  4], [1,  4, -2], [1,  4,  2], [1,  -1, 0]])'],\n  seealso: ['lup', 'slu', 'matrix']\n};", "export var rationalizeDocs = {\n  name: 'rationalize',\n  category: 'Algebra',\n  syntax: ['rationalize(expr)', 'rationalize(expr, scope)', 'rationalize(expr, scope, detailed)'],\n  description: 'Transform a rationalizable expression in a rational fraction. If rational fraction is one variable polynomial then converts the numerator and denominator in canonical form, with decreasing exponents, returning the coefficients of numerator.',\n  examples: ['rationalize(\"2x/y - y/(x+1)\")', 'rationalize(\"2x/y - y/(x+1)\", true)'],\n  seealso: ['simplify']\n};", "export var resolveDocs = {\n  name: 'resolve',\n  category: 'Algebra',\n  syntax: ['resolve(node, scope)'],\n  description: 'Recursively substitute variables in an expression tree.',\n  examples: ['resolve(parse(\"1 + x\"), { x: 7 })', 'resolve(parse(\"size(text)\"), { text: \"Hello World\" })', 'resolve(parse(\"x + y\"), { x: parse(\"3z\") })', 'resolve(parse(\"3x\"), { x: parse(\"y+z\"), z: parse(\"w^y\") })'],\n  seealso: ['simplify', 'evaluate'],\n  mayThrow: ['ReferenceError']\n};", "export var simplifyDocs = {\n  name: 'simplify',\n  category: 'Algebra',\n  syntax: ['simplify(expr)', 'simplify(expr, rules)'],\n  description: 'Simplify an expression tree.',\n  examples: ['simplify(\"3 + 2 / 4\")', 'simplify(\"2x + x\")', 'f = parse(\"x * (x + 2 + x)\")', 'simplified = simplify(f)', 'simplified.evaluate({x: 2})'],\n  seealso: ['simplifyCore', 'derivative', 'evaluate', 'parse', 'rationalize', 'resolve']\n};", "export var simplifyCoreDocs = {\n  name: 'simplifyCore',\n  category: 'Algebra',\n  syntax: ['simplifyCore(node)'],\n  description: 'Perform simple one-pass simplifications on an expression tree.',\n  examples: ['simplifyCore(parse(\"0*x\"))', 'simplifyCore(parse(\"(x+0)*2\"))'],\n  seealso: ['simplify', 'evaluate']\n};", "export var sluDocs = {\n  name: 'slu',\n  category: 'Algebra',\n  syntax: ['slu(A, order, threshold)'],\n  description: 'Calculate the Matrix LU decomposition with full pivoting. Matrix A is decomposed in two matrices (L, U) and two permutation vectors (pinv, q) where P * A * Q = L * U',\n  examples: ['slu(sparse([4.5, 0, 3.2, 0; 3.1, 2.9, 0, 0.9; 0, 1.7, 3, 0; 3.5, 0.4, 0, 1]), 1, 0.001)'],\n  seealso: ['lusolve', 'lsolve', 'usolve', 'matrix', 'sparse', 'lup', 'qr']\n};", "export var symbolicEqualDocs = {\n  name: 'symbolicEqual',\n  category: 'Algebra',\n  syntax: ['symbolicEqual(expr1, expr2)', 'symbolicEqual(expr1, expr2, options)'],\n  description: 'Returns true if the difference of the expressions simplifies to 0',\n  examples: ['symbolicEqual(\"x*y\",\"y*x\")', 'symbolicEqual(\"abs(x^2)\", \"x^2\")', 'symbolicEqual(\"abs(x)\", \"x\", {context: {abs: {trivial: true}}})'],\n  seealso: ['simplify', 'evaluate']\n};", "export var usolveDocs = {\n  name: 'usolve',\n  category: 'Algebra',\n  syntax: ['x=usolve(U, b)'],\n  description: 'Finds one solution of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.',\n  examples: ['x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])'],\n  seealso: ['usolveAll', 'lup', 'lusolve', 'lsolve', 'matrix', 'sparse']\n};", "export var usolveAllDocs = {\n  name: 'usolveAll',\n  category: 'Algebra',\n  syntax: ['x=usolve(U, b)'],\n  description: 'Finds all solutions of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.',\n  examples: ['x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])'],\n  seealso: ['usolve', 'lup', 'lusolve', 'lsolve', 'matrix', 'sparse']\n};", "export var absDocs = {\n  name: 'abs',\n  category: 'Arithmetic',\n  syntax: ['abs(x)'],\n  description: 'Compute the absolute value.',\n  examples: ['abs(3.5)', 'abs(-4.2)'],\n  seealso: ['sign']\n};", "export var addDocs = {\n  name: 'add',\n  category: 'Operators',\n  syntax: ['x + y', 'add(x, y)'],\n  description: 'Add two values.',\n  examples: ['a = 2.1 + 3.6', 'a - 3.6', '3 + 2i', '3 cm + 2 inch', '\"2.3\" + \"4\"'],\n  seealso: ['subtract']\n};", "export var cbrtDocs = {\n  name: 'cbrt',\n  category: 'Arithmetic',\n  syntax: ['cbrt(x)', 'cbrt(x, allRoots)'],\n  description: 'Compute the cubic root value. If x = y * y * y, then y is the cubic root of x. When `x` is a number or complex number, an optional second argument `allRoots` can be provided to return all three cubic roots. If not provided, the principal root is returned',\n  examples: ['cbrt(64)', 'cube(4)', 'cbrt(-8)', 'cbrt(2 + 3i)', 'cbrt(8i)', 'cbrt(8i, true)', 'cbrt(27 m^3)'],\n  seealso: ['square', 'sqrt', 'cube', 'multiply']\n};", "export var ceilDocs = {\n  name: 'ceil',\n  category: 'Arithmetic',\n  syntax: ['ceil(x)'],\n  description: 'Round a value towards plus infinity. If x is complex, both real and imaginary part are rounded towards plus infinity.',\n  examples: ['ceil(3.2)', 'ceil(3.8)', 'ceil(-4.2)'],\n  seealso: ['floor', 'fix', 'round']\n};", "export var cubeDocs = {\n  name: 'cube',\n  category: 'Arithmetic',\n  syntax: ['cube(x)'],\n  description: 'Compute the cube of a value. The cube of x is x * x * x.',\n  examples: ['cube(2)', '2^3', '2 * 2 * 2'],\n  seealso: ['multiply', 'square', 'pow']\n};", "export var divideDocs = {\n  name: 'divide',\n  category: 'Operators',\n  syntax: ['x / y', 'divide(x, y)'],\n  description: 'Divide two values.',\n  examples: ['a = 2 / 3', 'a * 3', '4.5 / 2', '3 + 4 / 2', '(3 + 4) / 2', '18 km / 4.5'],\n  seealso: ['multiply']\n};", "export var dotDivideDocs = {\n  name: 'dotDivide',\n  category: 'Operators',\n  syntax: ['x ./ y', 'dotDivide(x, y)'],\n  description: 'Divide two values element wise.',\n  examples: ['a = [1, 2, 3; 4, 5, 6]', 'b = [2, 1, 1; 3, 2, 5]', 'a ./ b'],\n  seealso: ['multiply', 'dotMultiply', 'divide']\n};", "export var dotMultiplyDocs = {\n  name: 'dotMultiply',\n  category: 'Operators',\n  syntax: ['x .* y', 'dotMultiply(x, y)'],\n  description: 'Multiply two values element wise.',\n  examples: ['a = [1, 2, 3; 4, 5, 6]', 'b = [2, 1, 1; 3, 2, 5]', 'a .* b'],\n  seealso: ['multiply', 'divide', 'dotDivide']\n};", "export var dotPowDocs = {\n  name: 'dotPow',\n  category: 'Operators',\n  syntax: ['x .^ y', 'dotPow(x, y)'],\n  description: 'Calculates the power of x to y element wise.',\n  examples: ['a = [1, 2, 3; 4, 5, 6]', 'a .^ 2'],\n  seealso: ['pow']\n};", "export var expDocs = {\n  name: 'exp',\n  category: 'Arithmetic',\n  syntax: ['exp(x)'],\n  description: 'Calculate the exponent of a value.',\n  examples: ['exp(1.3)', 'e ^ 1.3', 'log(exp(1.3))', 'x = 2.4', '(exp(i*x) == cos(x) + i*sin(x))   # Euler\\'s formula'],\n  seealso: ['expm', 'expm1', 'pow', 'log']\n};", "export var expmDocs = {\n  name: 'expm',\n  category: 'Arithmetic',\n  syntax: ['exp(x)'],\n  description: 'Compute the matrix exponential, expm(A) = e^A. ' + 'The matrix must be square. ' + 'Not to be confused with exp(a), which performs element-wise exponentiation.',\n  examples: ['expm([[0,2],[0,0]])'],\n  seealso: ['exp']\n};", "export var expm1Docs = {\n  name: 'expm1',\n  category: 'Arithmetic',\n  syntax: ['expm1(x)'],\n  description: 'Calculate the value of subtracting 1 from the exponential value.',\n  examples: ['expm1(2)', 'pow(e, 2) - 1', 'log(expm1(2) + 1)'],\n  seealso: ['exp', 'pow', 'log']\n};", "export var fixDocs = {\n  name: 'fix',\n  category: 'Arithmetic',\n  syntax: ['fix(x)'],\n  description: 'Round a value towards zero. If x is complex, both real and imaginary part are rounded towards zero.',\n  examples: ['fix(3.2)', 'fix(3.8)', 'fix(-4.2)', 'fix(-4.8)'],\n  seealso: ['ceil', 'floor', 'round']\n};", "export var floorDocs = {\n  name: 'floor',\n  category: 'Arithmetic',\n  syntax: ['floor(x)'],\n  description: 'Round a value towards minus infinity.If x is complex, both real and imaginary part are rounded towards minus infinity.',\n  examples: ['floor(3.2)', 'floor(3.8)', 'floor(-4.2)'],\n  seealso: ['ceil', 'fix', 'round']\n};", "export var gcdDocs = {\n  name: 'gcd',\n  category: 'Arithmetic',\n  syntax: ['gcd(a, b)', 'gcd(a, b, c, ...)'],\n  description: 'Compute the greatest common divisor.',\n  examples: ['gcd(8, 12)', 'gcd(-4, 6)', 'gcd(25, 15, -10)'],\n  seealso: ['lcm', 'xgcd']\n};", "export var hypotDocs = {\n  name: 'hypot',\n  category: 'Arithmetic',\n  syntax: ['hypot(a, b, c, ...)', 'hypot([a, b, c, ...])'],\n  description: 'Calculate the hypotenusa of a list with values. ',\n  examples: ['hypot(3, 4)', 'sqrt(3^2 + 4^2)', 'hypot(-2)', 'hypot([3, 4, 5])'],\n  seealso: ['abs', 'norm']\n};", "export var invmodDocs = {\n  name: 'invmod',\n  category: 'Arithmetic',\n  syntax: ['invmod(a, b)'],\n  description: 'Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax \u2263 1 (mod b)',\n  examples: ['invmod(8, 12)=NaN', 'invmod(7, 13)=2', 'math.invmod(15151, 15122)=10429'],\n  seealso: ['gcd', 'xgcd']\n};", "export var lcmDocs = {\n  name: 'lcm',\n  category: 'Arithmetic',\n  syntax: ['lcm(x, y)'],\n  description: 'Compute the least common multiple.',\n  examples: ['lcm(4, 6)', 'lcm(6, 21)', 'lcm(6, 21, 5)'],\n  seealso: ['gcd']\n};", "export var logDocs = {\n  name: 'log',\n  category: 'Arithmetic',\n  syntax: ['log(x)', 'log(x, base)'],\n  description: 'Compute the logarithm of a value. If no base is provided, the natural logarithm of x is calculated. If base if provided, the logarithm is calculated for the specified base. log(x, base) is defined as log(x) / log(base).',\n  examples: ['log(3.5)', 'a = log(2.4)', 'exp(a)', '10 ^ 4', 'log(10000, 10)', 'log(10000) / log(10)', 'b = log(1024, 2)', '2 ^ b'],\n  seealso: ['exp', 'log1p', 'log2', 'log10']\n};", "export var log10Docs = {\n  name: 'log10',\n  category: 'Arithmetic',\n  syntax: ['log10(x)'],\n  description: 'Compute the 10-base logarithm of a value.',\n  examples: ['log10(0.00001)', 'log10(10000)', '10 ^ 4', 'log(10000) / log(10)', 'log(10000, 10)'],\n  seealso: ['exp', 'log']\n};", "export var log1pDocs = {\n  name: 'log1p',\n  category: 'Arithmetic',\n  syntax: ['log1p(x)', 'log1p(x, base)'],\n  description: 'Calculate the logarithm of a `value+1`',\n  examples: ['log1p(2.5)', 'exp(log1p(1.4))', 'pow(10, 4)', 'log1p(9999, 10)', 'log1p(9999) / log(10)'],\n  seealso: ['exp', 'log', 'log2', 'log10']\n};", "export var log2Docs = {\n  name: 'log2',\n  category: 'Arithmetic',\n  syntax: ['log2(x)'],\n  description: 'Calculate the 2-base of a value. This is the same as calculating `log(x, 2)`.',\n  examples: ['log2(0.03125)', 'log2(16)', 'log2(16) / log2(2)', 'pow(2, 4)'],\n  seealso: ['exp', 'log1p', 'log', 'log10']\n};", "export var modDocs = {\n  name: 'mod',\n  category: 'Operators',\n  syntax: ['x % y', 'x mod y', 'mod(x, y)'],\n  description: 'Calculates the modulus, the remainder of an integer division.',\n  examples: ['7 % 3', '11 % 2', '10 mod 4', 'isOdd(x) = x % 2', 'isOdd(2)', 'isOdd(3)'],\n  seealso: ['divide']\n};", "export var multiplyDocs = {\n  name: 'multiply',\n  category: 'Operators',\n  syntax: ['x * y', 'multiply(x, y)'],\n  description: 'multiply two values.',\n  examples: ['a = 2.1 * 3.4', 'a / 3.4', '2 * 3 + 4', '2 * (3 + 4)', '3 * 2.1 km'],\n  seealso: ['divide']\n};", "export var normDocs = {\n  name: 'norm',\n  category: 'Arithmetic',\n  syntax: ['norm(x)', 'norm(x, p)'],\n  description: 'Calculate the norm of a number, vector or matrix.',\n  examples: ['abs(-3.5)', 'norm(-3.5)', 'norm(3 - 4i)', 'norm([1, 2, -3], Infinity)', 'norm([1, 2, -3], -Infinity)', 'norm([3, 4], 2)', 'norm([[1, 2], [3, 4]], 1)', 'norm([[1, 2], [3, 4]], \"inf\")', 'norm([[1, 2], [3, 4]], \"fro\")']\n};", "export var nthRootDocs = {\n  name: 'nthRoot',\n  category: 'Arithmetic',\n  syntax: ['nthRoot(a)', 'nthRoot(a, root)'],\n  description: 'Calculate the nth root of a value. ' + 'The principal nth root of a positive real number A, ' + 'is the positive real solution of the equation \"x^root = A\".',\n  examples: ['4 ^ 3', 'nthRoot(64, 3)', 'nthRoot(9, 2)', 'sqrt(9)'],\n  seealso: ['nthRoots', 'pow', 'sqrt']\n};", "export var nthRootsDocs = {\n  name: 'nthRoots',\n  category: 'Arithmetic',\n  syntax: ['nthRoots(A)', 'nthRoots(A, root)'],\n  description: '' + 'Calculate the nth roots of a value. ' + 'An nth root of a positive real number A, ' + 'is a positive real solution of the equation \"x^root = A\". ' + 'This function returns an array of complex values.',\n  examples: ['nthRoots(1)', 'nthRoots(1, 3)'],\n  seealso: ['sqrt', 'pow', 'nthRoot']\n};", "export var powDocs = {\n  name: 'pow',\n  category: 'Operators',\n  syntax: ['x ^ y', 'pow(x, y)'],\n  description: 'Calculates the power of x to y, x^y.',\n  examples: ['2^3', '2*2*2', '1 + e ^ (pi * i)', 'math.pow([[1, 2], [4, 3]], 2)', 'math.pow([[1, 2], [4, 3]], -1)'],\n  seealso: ['multiply', 'nthRoot', 'nthRoots', 'sqrt']\n};", "export var roundDocs = {\n  name: 'round',\n  category: 'Arithmetic',\n  syntax: ['round(x)', 'round(x, n)'],\n  description: 'round a value towards the nearest integer.If x is complex, both real and imaginary part are rounded towards the nearest integer. When n is specified, the value is rounded to n decimals.',\n  examples: ['round(3.2)', 'round(3.8)', 'round(-4.2)', 'round(-4.8)', 'round(pi, 3)', 'round(123.45678, 2)'],\n  seealso: ['ceil', 'floor', 'fix']\n};", "export var signDocs = {\n  name: 'sign',\n  category: 'Arithmetic',\n  syntax: ['sign(x)'],\n  description: 'Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.',\n  examples: ['sign(3.5)', 'sign(-4.2)', 'sign(0)'],\n  seealso: ['abs']\n};", "export var sqrtDocs = {\n  name: 'sqrt',\n  category: 'Arithmetic',\n  syntax: ['sqrt(x)'],\n  description: 'Compute the square root value. If x = y * y, then y is the square root of x.',\n  examples: ['sqrt(25)', '5 * 5', 'sqrt(-1)'],\n  seealso: ['square', 'sqrtm', 'multiply', 'nthRoot', 'nthRoots', 'pow']\n};", "export var sqrtmDocs = {\n  name: 'sqrtm',\n  category: 'Arithmetic',\n  syntax: ['sqrtm(x)'],\n  description: 'Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.',\n  examples: ['sqrtm([[1, 2], [3, 4]])'],\n  seealso: ['sqrt', 'abs', 'square', 'multiply']\n};", "export var squareDocs = {\n  name: 'square',\n  category: 'Arithmetic',\n  syntax: ['square(x)'],\n  description: 'Compute the square of a value. The square of x is x * x.',\n  examples: ['square(3)', 'sqrt(9)', '3^2', '3 * 3'],\n  seealso: ['multiply', 'pow', 'sqrt', 'cube']\n};", "export var subtractDocs = {\n  name: 'subtract',\n  category: 'Operators',\n  syntax: ['x - y', 'subtract(x, y)'],\n  description: 'subtract two values.',\n  examples: ['a = 5.3 - 2', 'a + 2', '2/3 - 1/6', '2 * 3 - 3', '2.1 km - 500m'],\n  seealso: ['add']\n};", "export var unaryMinusDocs = {\n  name: 'unaryMinus',\n  category: 'Operators',\n  syntax: ['-x', 'unaryMinus(x)'],\n  description: 'Inverse the sign of a value. Converts booleans and strings to numbers.',\n  examples: ['-4.5', '-(-5.6)', '-\"22\"'],\n  seealso: ['add', 'subtract', 'unaryPlus']\n};", "export var unaryPlusDocs = {\n  name: 'unaryPlus',\n  category: 'Operators',\n  syntax: ['+x', 'unaryPlus(x)'],\n  description: 'Converts booleans and strings to numbers.',\n  examples: ['+true', '+\"2\"'],\n  seealso: ['add', 'subtract', 'unaryMinus']\n};", "export var xgcdDocs = {\n  name: 'xgcd',\n  category: 'Arithmetic',\n  syntax: ['xgcd(a, b)'],\n  description: 'Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.',\n  examples: ['xgcd(8, 12)', 'gcd(8, 12)', 'xgcd(36163, 21199)'],\n  seealso: ['gcd', 'lcm']\n};", "export var bitAndDocs = {\n  name: 'bitAnd',\n  category: 'Bitwise',\n  syntax: ['x & y', 'bitAnd(x, y)'],\n  description: 'Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0',\n  examples: ['5 & 3', 'bitAnd(53, 131)', '[1, 12, 31] & 42'],\n  seealso: ['bitNot', 'bitOr', 'bitXor', 'leftShift', 'rightArithShift', 'rightLogShift']\n};", "export var bitNotDocs = {\n  name: 'bitNot',\n  category: 'Bitwise',\n  syntax: ['~x', 'bitNot(x)'],\n  description: 'Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.',\n  examples: ['~1', '~2', 'bitNot([2, -3, 4])'],\n  seealso: ['bitAnd', 'bitOr', 'bitXor', 'leftShift', 'rightArithShift', 'rightLogShift']\n};", "export var bitOrDocs = {\n  name: 'bitOr',\n  category: 'Bitwise',\n  syntax: ['x | y', 'bitOr(x, y)'],\n  description: 'Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.',\n  examples: ['5 | 3', 'bitOr([1, 2, 3], 4)'],\n  seealso: ['bitAnd', 'bitNot', 'bitXor', 'leftShift', 'rightArithShift', 'rightLogShift']\n};", "export var bitXorDocs = {\n  name: 'bitXor',\n  category: 'Bitwise',\n  syntax: ['bitXor(x, y)'],\n  description: 'Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.',\n  examples: ['bitOr(1, 2)', 'bitXor([2, 3, 4], 4)'],\n  seealso: ['bitAnd', 'bitNot', 'bitOr', 'leftShift', 'rightArithShift', 'rightLogShift']\n};", "export var leftShiftDocs = {\n  name: 'leftShift',\n  category: 'Bitwise',\n  syntax: ['x << y', 'leftShift(x, y)'],\n  description: 'Bitwise left logical shift of a value x by y number of bits.',\n  examples: ['4 << 1', '8 >> 1'],\n  seealso: ['bitAnd', 'bitNot', 'bitOr', 'bitXor', 'rightArithShift', 'rightLogShift']\n};", "export var rightArithShiftDocs = {\n  name: 'rightArithShift',\n  category: 'Bitwise',\n  syntax: ['x >> y', 'rightArithShift(x, y)'],\n  description: 'Bitwise right arithmetic shift of a value x by y number of bits.',\n  examples: ['8 >> 1', '4 << 1', '-12 >> 2'],\n  seealso: ['bitAnd', 'bitNot', 'bitOr', 'bitXor', 'leftShift', 'rightLogShift']\n};", "export var rightLogShiftDocs = {\n  name: 'rightLogShift',\n  category: 'Bitwise',\n  syntax: ['x >>> y', 'rightLogShift(x, y)'],\n  description: 'Bitwise right logical shift of a value x by y number of bits.',\n  examples: ['8 >>> 1', '4 << 1', '-12 >>> 2'],\n  seealso: ['bitAnd', 'bitNot', 'bitOr', 'bitXor', 'leftShift', 'rightArithShift']\n};", "export var bellNumbersDocs = {\n  name: 'bellNumbers',\n  category: 'Combinatorics',\n  syntax: ['bellNumbers(n)'],\n  description: 'The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.',\n  examples: ['bellNumbers(3)', 'bellNumbers(8)'],\n  seealso: ['stirlingS2']\n};", "export var catalanDocs = {\n  name: 'catalan',\n  category: 'Combinatorics',\n  syntax: ['catalan(n)'],\n  description: 'The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.',\n  examples: ['catalan(3)', 'catalan(8)'],\n  seealso: ['bellNumbers']\n};", "export var compositionDocs = {\n  name: 'composition',\n  category: 'Combinatorics',\n  syntax: ['composition(n, k)'],\n  description: 'The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.',\n  examples: ['composition(5, 3)'],\n  seealso: ['combinations']\n};", "export var stirlingS2Docs = {\n  name: 'stirlingS2',\n  category: 'Combinatorics',\n  syntax: ['stirlingS2(n, k)'],\n  description: 'he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.',\n  examples: ['stirlingS2(5, 3)'],\n  seealso: ['bellNumbers']\n};", "export var argDocs = {\n  name: 'arg',\n  category: 'Complex',\n  syntax: ['arg(x)'],\n  description: 'Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).',\n  examples: ['arg(2 + 2i)', 'atan2(3, 2)', 'arg(2 + 3i)'],\n  seealso: ['re', 'im', 'conj', 'abs']\n};", "export var conjDocs = {\n  name: 'conj',\n  category: 'Complex',\n  syntax: ['conj(x)'],\n  description: 'Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.',\n  examples: ['conj(2 + 3i)', 'conj(2 - 3i)', 'conj(-5.2i)'],\n  seealso: ['re', 'im', 'abs', 'arg']\n};", "export var imDocs = {\n  name: 'im',\n  category: 'Complex',\n  syntax: ['im(x)'],\n  description: 'Get the imaginary part of a complex number.',\n  examples: ['im(2 + 3i)', 're(2 + 3i)', 'im(-5.2i)', 'im(2.4)'],\n  seealso: ['re', 'conj', 'abs', 'arg']\n};", "export var reDocs = {\n  name: 're',\n  category: 'Complex',\n  syntax: ['re(x)'],\n  description: 'Get the real part of a complex number.',\n  examples: ['re(2 + 3i)', 'im(2 + 3i)', 're(-5.2i)', 're(2.4)'],\n  seealso: ['im', 'conj', 'abs', 'arg']\n};", "export var evaluateDocs = {\n  name: 'evaluate',\n  category: 'Expression',\n  syntax: ['evaluate(expression)', 'evaluate([expr1, expr2, expr3, ...])'],\n  description: 'Evaluate an expression or an array with expressions.',\n  examples: ['evaluate(\"2 + 3\")', 'evaluate(\"sqrt(\" + 4 + \")\")'],\n  seealso: []\n};", "export var helpDocs = {\n  name: 'help',\n  category: 'Expression',\n  syntax: ['help(object)', 'help(string)'],\n  description: 'Display documentation on a function or data type.',\n  examples: ['help(sqrt)', 'help(\"complex\")'],\n  seealso: []\n};", "export var distanceDocs = {\n  name: 'distance',\n  category: 'Geometry',\n  syntax: ['distance([x1, y1], [x2, y2])', 'distance([[x1, y1], [x2, y2]])'],\n  description: 'Calculates the Euclidean distance between two points.',\n  examples: ['distance([0,0], [4,4])', 'distance([[0,0], [4,4]])'],\n  seealso: []\n};", "export var intersectDocs = {\n  name: 'intersect',\n  category: 'Geometry',\n  syntax: ['intersect(expr1, expr2, expr3, expr4)', 'intersect(expr1, expr2, expr3)'],\n  description: 'Computes the intersection point of lines and/or planes.',\n  examples: ['intersect([0, 0], [10, 10], [10, 0], [0, 10])', 'intersect([1, 0, 1],  [4, -2, 2], [1, 1, 1, 6])'],\n  seealso: []\n};", "export var andDocs = {\n  name: 'and',\n  category: 'Logical',\n  syntax: ['x and y', 'and(x, y)'],\n  description: 'Logical and. Test whether two values are both defined with a nonzero/nonempty value.',\n  examples: ['true and false', 'true and true', '2 and 4'],\n  seealso: ['not', 'or', 'xor']\n};", "export var notDocs = {\n  name: 'not',\n  category: 'Logical',\n  syntax: ['not x', 'not(x)'],\n  description: 'Logical not. Flips the boolean value of given argument.',\n  examples: ['not true', 'not false', 'not 2', 'not 0'],\n  seealso: ['and', 'or', 'xor']\n};", "export var orDocs = {\n  name: 'or',\n  category: 'Logical',\n  syntax: ['x or y', 'or(x, y)'],\n  description: 'Logical or. Test if at least one value is defined with a nonzero/nonempty value.',\n  examples: ['true or false', 'false or false', '0 or 4'],\n  seealso: ['not', 'and', 'xor']\n};", "export var xorDocs = {\n  name: 'xor',\n  category: 'Logical',\n  syntax: ['x xor y', 'xor(x, y)'],\n  description: 'Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.',\n  examples: ['true xor false', 'false xor false', 'true xor true', '0 xor 4'],\n  seealso: ['not', 'and', 'or']\n};", "export var columnDocs = {\n  name: 'column',\n  category: 'Matrix',\n  syntax: ['column(x, index)'],\n  description: 'Return a column from a matrix or array.',\n  examples: ['A = [[1, 2], [3, 4]]', 'column(A, 1)', 'column(A, 2)'],\n  seealso: ['row', 'matrixFromColumns']\n};", "export var concatDocs = {\n  name: 'concat',\n  category: 'Matrix',\n  syntax: ['concat(A, B, C, ...)', 'concat(A, B, C, ..., dim)'],\n  description: 'Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.',\n  examples: ['A = [1, 2; 5, 6]', 'B = [3, 4; 7, 8]', 'concat(A, B)', 'concat(A, B, 1)', 'concat(A, B, 2)'],\n  seealso: ['det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var countDocs = {\n  name: 'count',\n  category: 'Matrix',\n  syntax: ['count(x)'],\n  description: 'Count the number of elements of a matrix, array or string.',\n  examples: ['a = [1, 2; 3, 4; 5, 6]', 'count(a)', 'size(a)', 'count(\"hello world\")'],\n  seealso: ['size']\n};", "export var crossDocs = {\n  name: 'cross',\n  category: 'Matrix',\n  syntax: ['cross(A, B)'],\n  description: 'Calculate the cross product for two vectors in three dimensional space.',\n  examples: ['cross([1, 1, 0],  [0, 1, 1])', 'cross([3, -3, 1], [4, 9, 2])', 'cross([2, 3, 4],  [5, 6, 7])'],\n  seealso: ['multiply', 'dot']\n};", "export var ctransposeDocs = {\n  name: 'ctranspose',\n  category: 'Matrix',\n  syntax: ['x\\'', 'ctranspose(x)'],\n  description: 'Complex Conjugate and Transpose a matrix',\n  examples: ['a = [1, 2, 3; 4, 5, 6]', 'a\\'', 'ctranspose(a)'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'zeros']\n};", "export var detDocs = {\n  name: 'det',\n  category: 'Matrix',\n  syntax: ['det(x)'],\n  description: 'Calculate the determinant of a matrix',\n  examples: ['det([1, 2; 3, 4])', 'det([-2, 2, 3; -1, 1, 3; 2, 0, -1])'],\n  seealso: ['concat', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var diagDocs = {\n  name: 'diag',\n  category: 'Matrix',\n  syntax: ['diag(x)', 'diag(x, k)'],\n  description: 'Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.',\n  examples: ['diag(1:3)', 'diag(1:3, 1)', 'a = [1, 2, 3; 4, 5, 6; 7, 8, 9]', 'diag(a)'],\n  seealso: ['concat', 'det', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var diffDocs = {\n  name: 'diff',\n  category: 'Matrix',\n  syntax: ['diff(arr)', 'diff(arr, dim)'],\n  description: ['Create a new matrix or array with the difference of the passed matrix or array.', 'Dim parameter is optional and used to indicant the dimension of the array/matrix to apply the difference', 'If no dimension parameter is passed it is assumed as dimension 0', 'Dimension is zero-based in javascript and one-based in the parser', 'Arrays must be \\'rectangular\\' meaning arrays like [1, 2]', 'If something is passed as a matrix it will be returned as a matrix but other than that all matrices are converted to arrays'],\n  examples: ['diff([1, 2, 4, 7, 0])', 'diff([1, 2, 4, 7, 0], 0)', 'diff(matrix([1, 2, 4, 7, 0]))', 'diff([[1, 2], [3, 4]])', 'diff([[1, 2], [3, 4]], 0)', 'diff([[1, 2], [3, 4]], 1)', 'diff([[1, 2], [3, 4]], bignumber(1))', 'diff(matrix([[1, 2], [3, 4]]), 1)', 'diff([[1, 2], matrix([3, 4])], 1)'],\n  seealso: ['subtract', 'partitionSelect']\n};", "export var dotDocs = {\n  name: 'dot',\n  category: 'Matrix',\n  syntax: ['dot(A, B)', 'A * B'],\n  description: 'Calculate the dot product of two vectors. ' + 'The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] ' + 'is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn',\n  examples: ['dot([2, 4, 1], [2, 2, 3])', '[2, 4, 1] * [2, 2, 3]'],\n  seealso: ['multiply', 'cross']\n};", "export var eigsDocs = {\n  name: 'eigs',\n  category: 'Matrix',\n  syntax: ['eigs(x)'],\n  description: 'Calculate the eigenvalues and eigenvectors of a real symmetric matrix',\n  examples: ['eigs([[5, 2.3], [2.3, 1]])'],\n  seealso: ['inv']\n};", "export var filterDocs = {\n  name: 'filter',\n  category: 'Matrix',\n  syntax: ['filter(x, test)'],\n  description: 'Filter items in a matrix.',\n  examples: ['isPositive(x) = x > 0', 'filter([6, -2, -1, 4, 3], isPositive)', 'filter([6, -2, 0, 1, 0], x != 0)'],\n  seealso: ['sort', 'map', 'forEach']\n};", "export var flattenDocs = {\n  name: 'flatten',\n  category: 'Matrix',\n  syntax: ['flatten(x)'],\n  description: 'Flatten a multi dimensional matrix into a single dimensional matrix.',\n  examples: ['a = [1, 2, 3; 4, 5, 6]', 'size(a)', 'b = flatten(a)', 'size(b)'],\n  seealso: ['concat', 'resize', 'size', 'squeeze']\n};", "export var forEachDocs = {\n  name: 'forEach',\n  category: 'Matrix',\n  syntax: ['forEach(x, callback)'],\n  description: 'Iterates over all elements of a matrix/array, and executes the given callback function.',\n  examples: ['numberOfPets = {}', 'addPet(n) = numberOfPets[n] = (numberOfPets[n] ? numberOfPets[n]:0 ) + 1;', 'forEach([\"Dog\",\"Cat\",\"Cat\"], addPet)', 'numberOfPets'],\n  seealso: ['map', 'sort', 'filter']\n};", "export var getMatrixDataTypeDocs = {\n  name: 'getMatrixDataType',\n  category: 'Matrix',\n  syntax: ['getMatrixDataType(x)'],\n  description: 'Find the data type of all elements in a matrix or array, ' + 'for example \"number\" if all items are a number ' + 'and \"Complex\" if all values are complex numbers. ' + 'If a matrix contains more than one data type, it will return \"mixed\".',\n  examples: ['getMatrixDataType([1, 2, 3])', 'getMatrixDataType([[5 cm], [2 inch]])', 'getMatrixDataType([1, \"text\"])', 'getMatrixDataType([1, bignumber(4)])'],\n  seealso: ['matrix', 'sparse', 'typeOf']\n};", "export var identityDocs = {\n  name: 'identity',\n  category: 'Matrix',\n  syntax: ['identity(n)', 'identity(m, n)', 'identity([m, n])'],\n  description: 'Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.',\n  examples: ['identity(3)', 'identity(3, 5)', 'a = [1, 2, 3; 4, 5, 6]', 'identity(size(a))'],\n  seealso: ['concat', 'det', 'diag', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var invDocs = {\n  name: 'inv',\n  category: 'Matrix',\n  syntax: ['inv(x)'],\n  description: 'Calculate the inverse of a matrix',\n  examples: ['inv([1, 2; 3, 4])', 'inv(4)', '1 / 4'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var pinvDocs = {\n  name: 'pinv',\n  category: 'Matrix',\n  syntax: ['pinv(x)'],\n  description: 'Calculate the Moore\u2013Penrose inverse of a matrix',\n  examples: ['pinv([1, 2; 3, 4])', 'pinv([[1, 0], [0, 1], [0, 1]])', 'pinv(4)'],\n  seealso: ['inv']\n};", "export var kronDocs = {\n  name: 'kron',\n  category: 'Matrix',\n  syntax: ['kron(x, y)'],\n  description: 'Calculates the kronecker product of 2 matrices or vectors.',\n  examples: ['kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])', 'kron([1,1], [2,3,4])'],\n  seealso: ['multiply', 'dot', 'cross']\n};", "export var mapDocs = {\n  name: 'map',\n  category: 'Matrix',\n  syntax: ['map(x, callback)'],\n  description: 'Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.',\n  examples: ['map([1, 2, 3], square)'],\n  seealso: ['filter', 'forEach']\n};", "export var matrixFromColumnsDocs = {\n  name: 'matrixFromColumns',\n  category: 'Matrix',\n  syntax: ['math.matrixFromColumns(...arr)', 'math.matrixFromColumns(row1, row2)', 'math.matrixFromColumns(row1, row2, row3)'],\n  description: 'Create a dense matrix from vectors as individual columns.',\n  examples: ['matrixFromColumns([1, 2, 3], [[4],[5],[6]])'],\n  seealso: ['matrix', 'matrixFromRows', 'matrixFromFunction', 'zeros']\n};", "export var matrixFromFunctionDocs = {\n  name: 'matrixFromFunction',\n  category: 'Matrix',\n  syntax: ['math.matrixFromFunction(size, fn)', 'math.matrixFromFunction(size, fn, format)', 'math.matrixFromFunction(size, fn, format, datatype)', 'math.matrixFromFunction(size, format, fn)', 'math.matrixFromFunction(size, format, datatype, fn)'],\n  description: 'Create a matrix by evaluating a generating function at each index.',\n  examples: ['f(I) = I[1] - I[2]', 'matrixFromFunction([3,3], f)', 'g(I) = I[1] - I[2] == 1 ? 4 : 0', 'matrixFromFunction([100, 100], \"sparse\", g)', 'matrixFromFunction([5], random)'],\n  seealso: ['matrix', 'matrixFromRows', 'matrixFromColumns', 'zeros']\n};", "export var matrixFromRowsDocs = {\n  name: 'matrixFromRows',\n  category: 'Matrix',\n  syntax: ['math.matrixFromRows(...arr)', 'math.matrixFromRows(row1, row2)', 'math.matrixFromRows(row1, row2, row3)'],\n  description: 'Create a dense matrix from vectors as individual rows.',\n  examples: ['matrixFromRows([1, 2, 3], [[4],[5],[6]])'],\n  seealso: ['matrix', 'matrixFromColumns', 'matrixFromFunction', 'zeros']\n};", "export var onesDocs = {\n  name: 'ones',\n  category: 'Matrix',\n  syntax: ['ones(m)', 'ones(m, n)', 'ones(m, n, p, ...)', 'ones([m])', 'ones([m, n])', 'ones([m, n, p, ...])'],\n  description: 'Create a matrix containing ones.',\n  examples: ['ones(3)', 'ones(3, 5)', 'ones([2,3]) * 4.5', 'a = [1, 2, 3; 4, 5, 6]', 'ones(size(a))'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var partitionSelectDocs = {\n  name: 'partitionSelect',\n  category: 'Matrix',\n  syntax: ['partitionSelect(x, k)', 'partitionSelect(x, k, compare)'],\n  description: 'Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.',\n  examples: ['partitionSelect([5, 10, 1], 2)', 'partitionSelect([\"C\", \"B\", \"A\", \"D\"], 1)'],\n  seealso: ['sort']\n};", "export var rangeDocs = {\n  name: 'range',\n  category: 'Type',\n  syntax: ['start:end', 'start:step:end', 'range(start, end)', 'range(start, end, step)', 'range(string)'],\n  description: 'Create a range. Lower bound of the range is included, upper bound is excluded.',\n  examples: ['1:5', '3:-1:-3', 'range(3, 7)', 'range(0, 12, 2)', 'range(\"4:10\")', 'a = [1, 2, 3, 4; 5, 6, 7, 8]', 'a[1:2, 1:2]'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'size', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var reshapeDocs = {\n  name: 'reshape',\n  category: 'Matrix',\n  syntax: ['reshape(x, sizes)'],\n  description: 'Reshape a multi dimensional array to fit the specified dimensions.',\n  examples: ['reshape([1, 2, 3, 4, 5, 6], [2, 3])', 'reshape([[1, 2], [3, 4]], [1, 4])', 'reshape([[1, 2], [3, 4]], [4])'],\n  seealso: ['size', 'squeeze', 'resize']\n};", "export var resizeDocs = {\n  name: 'resize',\n  category: 'Matrix',\n  syntax: ['resize(x, size)', 'resize(x, size, defaultValue)'],\n  description: 'Resize a matrix.',\n  examples: ['resize([1,2,3,4,5], [3])', 'resize([1,2,3], [5])', 'resize([1,2,3], [5], -1)', 'resize(2, [2, 3])', 'resize(\"hello\", [8], \"!\")'],\n  seealso: ['size', 'subset', 'squeeze', 'reshape']\n};", "export var rotateDocs = {\n  name: 'rotate',\n  category: 'Matrix',\n  syntax: ['rotate(w, theta)', 'rotate(w, theta, v)'],\n  description: 'Returns a 2-D rotation matrix (2x2) for a given angle (in radians). ' + 'Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.',\n  examples: ['rotate([1, 0], math.pi / 2)', 'rotate(matrix([1, 0]), unit(\"35deg\"))', 'rotate([1, 0, 0], unit(\"90deg\"), [0, 0, 1])', 'rotate(matrix([1, 0, 0]), unit(\"90deg\"), matrix([0, 0, 1]))'],\n  seealso: ['matrix', 'rotationMatrix']\n};", "export var rotationMatrixDocs = {\n  name: 'rotationMatrix',\n  category: 'Matrix',\n  syntax: ['rotationMatrix(theta)', 'rotationMatrix(theta, v)', 'rotationMatrix(theta, v, format)'],\n  description: 'Returns a 2-D rotation matrix (2x2) for a given angle (in radians). ' + 'Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.',\n  examples: ['rotationMatrix(pi / 2)', 'rotationMatrix(unit(\"45deg\"), [0, 0, 1])', 'rotationMatrix(1, matrix([0, 0, 1]), \"sparse\")'],\n  seealso: ['cos', 'sin']\n};", "export var rowDocs = {\n  name: 'row',\n  category: 'Matrix',\n  syntax: ['row(x, index)'],\n  description: 'Return a row from a matrix or array.',\n  examples: ['A = [[1, 2], [3, 4]]', 'row(A, 1)', 'row(A, 2)'],\n  seealso: ['column', 'matrixFromRows']\n};", "export var sizeDocs = {\n  name: 'size',\n  category: 'Matrix',\n  syntax: ['size(x)'],\n  description: 'Calculate the size of a matrix.',\n  examples: ['size(2.3)', 'size(\"hello world\")', 'a = [1, 2; 3, 4; 5, 6]', 'size(a)', 'size(1:6)'],\n  seealso: ['concat', 'count', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'squeeze', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var sortDocs = {\n  name: 'sort',\n  category: 'Matrix',\n  syntax: ['sort(x)', 'sort(x, compare)'],\n  description: 'Sort the items in a matrix. Compare can be a string \"asc\", \"desc\", \"natural\", or a custom sort function.',\n  examples: ['sort([5, 10, 1])', 'sort([\"C\", \"B\", \"A\", \"D\"])', 'sortByLength(a, b) = size(a)[1] - size(b)[1]', 'sort([\"Langdon\", \"Tom\", \"Sara\"], sortByLength)', 'sort([\"10\", \"1\", \"2\"], \"natural\")'],\n  seealso: ['map', 'filter', 'forEach']\n};", "export var squeezeDocs = {\n  name: 'squeeze',\n  category: 'Matrix',\n  syntax: ['squeeze(x)'],\n  description: 'Remove inner and outer singleton dimensions from a matrix.',\n  examples: ['a = zeros(3,2,1)', 'size(squeeze(a))', 'b = zeros(1,1,3)', 'size(squeeze(b))'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'subset', 'trace', 'transpose', 'zeros']\n};", "export var subsetDocs = {\n  name: 'subset',\n  category: 'Matrix',\n  syntax: ['value(index)', 'value(index) = replacement', 'subset(value, [index])', 'subset(value, [index], replacement)'],\n  description: 'Get or set a subset of the entries of a matrix or ' + 'characters of a string. ' + 'Indexes are one-based. There should be one index specification for ' + 'each dimension of the target. Each specification can be a single ' + 'index, a list of indices, or a range in colon notation `l:u`. ' + 'In a range, both the lower bound l and upper bound u are included; ' + 'and if a bound is omitted it defaults to the most extreme valid value. ' + 'The cartesian product of the indices specified in each dimension ' + 'determines the target of the operation.',\n  examples: ['d = [1, 2; 3, 4]', 'e = []', 'e[1, 1:2] = [5, 6]', 'e[2, :] = [7, 8]', 'f = d * e', 'f[2, 1]', 'f[:, 1]', 'f[[1,2], [1,3]] = [9, 10; 11, 12]', 'f'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'trace', 'transpose', 'zeros']\n};", "export var traceDocs = {\n  name: 'trace',\n  category: 'Matrix',\n  syntax: ['trace(A)'],\n  description: 'Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.',\n  examples: ['A = [1, 2, 3; -1, 2, 3; 2, 0, 3]', 'trace(A)'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'transpose', 'zeros']\n};", "export var transposeDocs = {\n  name: 'transpose',\n  category: 'Matrix',\n  syntax: ['x\\'', 'transpose(x)'],\n  description: 'Transpose a matrix',\n  examples: ['a = [1, 2, 3; 4, 5, 6]', 'a\\'', 'transpose(a)'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'zeros']\n};", "export var zerosDocs = {\n  name: 'zeros',\n  category: 'Matrix',\n  syntax: ['zeros(m)', 'zeros(m, n)', 'zeros(m, n, p, ...)', 'zeros([m])', 'zeros([m, n])', 'zeros([m, n, p, ...])'],\n  description: 'Create a matrix containing zeros.',\n  examples: ['zeros(3)', 'zeros(3, 5)', 'a = [1, 2, 3; 4, 5, 6]', 'zeros(size(a))'],\n  seealso: ['concat', 'det', 'diag', 'identity', 'inv', 'ones', 'range', 'size', 'squeeze', 'subset', 'trace', 'transpose']\n};", "export var fftDocs = {\n  name: 'fft',\n  category: 'Matrix',\n  syntax: ['fft(x)'],\n  description: 'Calculate N-dimensional fourier transform',\n  examples: ['fft([[1, 0], [1, 0]])'],\n  seealso: ['ifft']\n};", "export var ifftDocs = {\n  name: 'ifft',\n  category: 'Matrix',\n  syntax: ['ifft(x)'],\n  description: 'Calculate N-dimensional inverse fourier transform',\n  examples: ['ifft([[2, 2], [0, 0]])'],\n  seealso: ['fft']\n};", "export var combinationsDocs = {\n  name: 'combinations',\n  category: 'Probability',\n  syntax: ['combinations(n, k)'],\n  description: 'Compute the number of combinations of n items taken k at a time',\n  examples: ['combinations(7, 5)'],\n  seealso: ['combinationsWithRep', 'permutations', 'factorial']\n};", "export var combinationsWithRepDocs = {\n  name: 'combinationsWithRep',\n  category: 'Probability',\n  syntax: ['combinationsWithRep(n, k)'],\n  description: 'Compute the number of combinations of n items taken k at a time with replacements.',\n  examples: ['combinationsWithRep(7, 5)'],\n  seealso: ['combinations', 'permutations', 'factorial']\n};", "export var factorialDocs = {\n  name: 'factorial',\n  category: 'Probability',\n  syntax: ['n!', 'factorial(n)'],\n  description: 'Compute the factorial of a value',\n  examples: ['5!', '5 * 4 * 3 * 2 * 1', '3!'],\n  seealso: ['combinations', 'combinationsWithRep', 'permutations', 'gamma']\n};", "export var gammaDocs = {\n  name: 'gamma',\n  category: 'Probability',\n  syntax: ['gamma(n)'],\n  description: 'Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.',\n  examples: ['gamma(4)', '3!', 'gamma(1/2)', 'sqrt(pi)'],\n  seealso: ['factorial']\n};", "export var lgammaDocs = {\n  name: 'lgamma',\n  category: 'Probability',\n  syntax: ['lgamma(n)'],\n  description: 'Logarithm of the gamma function for real, positive numbers and complex numbers, ' + 'using Lanczos approximation for numbers and Stirling series for complex numbers.',\n  examples: ['lgamma(4)', 'lgamma(1/2)', 'lgamma(math.i)', 'lgamma(complex(1.1, 2))'],\n  seealso: ['gamma']\n};", "export var kldivergenceDocs = {\n  name: 'kldivergence',\n  category: 'Probability',\n  syntax: ['kldivergence(x, y)'],\n  description: 'Calculate the Kullback-Leibler (KL) divergence  between two distributions.',\n  examples: ['kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])'],\n  seealso: []\n};", "export var multinomialDocs = {\n  name: 'multinomial',\n  category: 'Probability',\n  syntax: ['multinomial(A)'],\n  description: 'Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.',\n  examples: ['multinomial([1, 2, 1])'],\n  seealso: ['combinations', 'factorial']\n};", "export var permutationsDocs = {\n  name: 'permutations',\n  category: 'Probability',\n  syntax: ['permutations(n)', 'permutations(n, k)'],\n  description: 'Compute the number of permutations of n items taken k at a time',\n  examples: ['permutations(5)', 'permutations(5, 3)'],\n  seealso: ['combinations', 'combinationsWithRep', 'factorial']\n};", "export var pickRandomDocs = {\n  name: 'pickRandom',\n  category: 'Probability',\n  syntax: ['pickRandom(array)', 'pickRandom(array, number)', 'pickRandom(array, weights)', 'pickRandom(array, number, weights)', 'pickRandom(array, weights, number)'],\n  description: 'Pick a random entry from a given array.',\n  examples: ['pickRandom(0:10)', 'pickRandom([1, 3, 1, 6])', 'pickRandom([1, 3, 1, 6], 2)', 'pickRandom([1, 3, 1, 6], [2, 3, 2, 1])', 'pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])', 'pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)'],\n  seealso: ['random', 'randomInt']\n};", "export var randomDocs = {\n  name: 'random',\n  category: 'Probability',\n  syntax: ['random()', 'random(max)', 'random(min, max)', 'random(size)', 'random(size, max)', 'random(size, min, max)'],\n  description: 'Return a random number.',\n  examples: ['random()', 'random(10, 20)', 'random([2, 3])'],\n  seealso: ['pickRandom', 'randomInt']\n};", "export var randomIntDocs = {\n  name: 'randomInt',\n  category: 'Probability',\n  syntax: ['randomInt(max)', 'randomInt(min, max)', 'randomInt(size)', 'randomInt(size, max)', 'randomInt(size, min, max)'],\n  description: 'Return a random integer number',\n  examples: ['randomInt(10, 20)', 'randomInt([2, 3], 10)'],\n  seealso: ['pickRandom', 'random']\n};", "export var compareDocs = {\n  name: 'compare',\n  category: 'Relational',\n  syntax: ['compare(x, y)'],\n  description: 'Compare two values. ' + 'Returns 1 when x > y, -1 when x < y, and 0 when x == y.',\n  examples: ['compare(2, 3)', 'compare(3, 2)', 'compare(2, 2)', 'compare(5cm, 40mm)', 'compare(2, [1, 2, 3])'],\n  seealso: ['equal', 'unequal', 'smaller', 'smallerEq', 'largerEq', 'compareNatural', 'compareText']\n};", "export var compareNaturalDocs = {\n  name: 'compareNatural',\n  category: 'Relational',\n  syntax: ['compareNatural(x, y)'],\n  description: 'Compare two values of any type in a deterministic, natural way. ' + 'Returns 1 when x > y, -1 when x < y, and 0 when x == y.',\n  examples: ['compareNatural(2, 3)', 'compareNatural(3, 2)', 'compareNatural(2, 2)', 'compareNatural(5cm, 40mm)', 'compareNatural(\"2\", \"10\")', 'compareNatural(2 + 3i, 2 + 4i)', 'compareNatural([1, 2, 4], [1, 2, 3])', 'compareNatural([1, 5], [1, 2, 3])', 'compareNatural([1, 2], [1, 2])', 'compareNatural({a: 2}, {a: 4})'],\n  seealso: ['equal', 'unequal', 'smaller', 'smallerEq', 'largerEq', 'compare', 'compareText']\n};", "export var compareTextDocs = {\n  name: 'compareText',\n  category: 'Relational',\n  syntax: ['compareText(x, y)'],\n  description: 'Compare two strings lexically. Comparison is case sensitive. ' + 'Returns 1 when x > y, -1 when x < y, and 0 when x == y.',\n  examples: ['compareText(\"B\", \"A\")', 'compareText(\"A\", \"B\")', 'compareText(\"A\", \"A\")', 'compareText(\"2\", \"10\")', 'compare(\"2\", \"10\")', 'compare(2, 10)', 'compareNatural(\"2\", \"10\")', 'compareText(\"B\", [\"A\", \"B\", \"C\"])'],\n  seealso: ['compare', 'compareNatural']\n};", "export var deepEqualDocs = {\n  name: 'deepEqual',\n  category: 'Relational',\n  syntax: ['deepEqual(x, y)'],\n  description: 'Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.',\n  examples: ['deepEqual([1,3,4], [1,3,4])', 'deepEqual([1,3,4], [1,3])'],\n  seealso: ['equal', 'unequal', 'smaller', 'larger', 'smallerEq', 'largerEq', 'compare']\n};", "export var equalDocs = {\n  name: 'equal',\n  category: 'Relational',\n  syntax: ['x == y', 'equal(x, y)'],\n  description: 'Check equality of two values. Returns true if the values are equal, and false if not.',\n  examples: ['2+2 == 3', '2+2 == 4', 'a = 3.2', 'b = 6-2.8', 'a == b', '50cm == 0.5m'],\n  seealso: ['unequal', 'smaller', 'larger', 'smallerEq', 'largerEq', 'compare', 'deepEqual', 'equalText']\n};", "export var equalTextDocs = {\n  name: 'equalText',\n  category: 'Relational',\n  syntax: ['equalText(x, y)'],\n  description: 'Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.',\n  examples: ['equalText(\"Hello\", \"Hello\")', 'equalText(\"a\", \"A\")', 'equal(\"2e3\", \"2000\")', 'equalText(\"2e3\", \"2000\")', 'equalText(\"B\", [\"A\", \"B\", \"C\"])'],\n  seealso: ['compare', 'compareNatural', 'compareText', 'equal']\n};", "export var largerDocs = {\n  name: 'larger',\n  category: 'Relational',\n  syntax: ['x > y', 'larger(x, y)'],\n  description: 'Check if value x is larger than y. Returns true if x is larger than y, and false if not.',\n  examples: ['2 > 3', '5 > 2*2', 'a = 3.3', 'b = 6-2.8', '(a > b)', '(b < a)', '5 cm > 2 inch'],\n  seealso: ['equal', 'unequal', 'smaller', 'smallerEq', 'largerEq', 'compare']\n};", "export var largerEqDocs = {\n  name: 'largerEq',\n  category: 'Relational',\n  syntax: ['x >= y', 'largerEq(x, y)'],\n  description: 'Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.',\n  examples: ['2 >= 1+1', '2 > 1+1', 'a = 3.2', 'b = 6-2.8', '(a >= b)'],\n  seealso: ['equal', 'unequal', 'smallerEq', 'smaller', 'compare']\n};", "export var smallerDocs = {\n  name: 'smaller',\n  category: 'Relational',\n  syntax: ['x < y', 'smaller(x, y)'],\n  description: 'Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.',\n  examples: ['2 < 3', '5 < 2*2', 'a = 3.3', 'b = 6-2.8', '(a < b)', '5 cm < 2 inch'],\n  seealso: ['equal', 'unequal', 'larger', 'smallerEq', 'largerEq', 'compare']\n};", "export var smallerEqDocs = {\n  name: 'smallerEq',\n  category: 'Relational',\n  syntax: ['x <= y', 'smallerEq(x, y)'],\n  description: 'Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.',\n  examples: ['2 <= 1+1', '2 < 1+1', 'a = 3.2', 'b = 6-2.8', '(a <= b)'],\n  seealso: ['equal', 'unequal', 'larger', 'smaller', 'largerEq', 'compare']\n};", "export var unequalDocs = {\n  name: 'unequal',\n  category: 'Relational',\n  syntax: ['x != y', 'unequal(x, y)'],\n  description: 'Check unequality of two values. Returns true if the values are unequal, and false if they are equal.',\n  examples: ['2+2 != 3', '2+2 != 4', 'a = 3.2', 'b = 6-2.8', 'a != b', '50cm != 0.5m', '5 cm != 2 inch'],\n  seealso: ['equal', 'smaller', 'larger', 'smallerEq', 'largerEq', 'compare', 'deepEqual']\n};", "export var setCartesianDocs = {\n  name: 'setCartesian',\n  category: 'Set',\n  syntax: ['setCartesian(set1, set2)'],\n  description: 'Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays and the values will be sorted in ascending order before the operation.',\n  examples: ['setCartesian([1, 2], [3, 4])'],\n  seealso: ['setUnion', 'setIntersect', 'setDifference', 'setPowerset']\n};", "export var setDifferenceDocs = {\n  name: 'setDifference',\n  category: 'Set',\n  syntax: ['setDifference(set1, set2)'],\n  description: 'Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.',\n  examples: ['setDifference([1, 2, 3, 4], [3, 4, 5, 6])', 'setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])'],\n  seealso: ['setUnion', 'setIntersect', 'setSymDifference']\n};", "export var setDistinctDocs = {\n  name: 'setDistinct',\n  category: 'Set',\n  syntax: ['setDistinct(set)'],\n  description: 'Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.',\n  examples: ['setDistinct([1, 1, 1, 2, 2, 3])'],\n  seealso: ['setMultiplicity']\n};", "export var setIntersectDocs = {\n  name: 'setIntersect',\n  category: 'Set',\n  syntax: ['setIntersect(set1, set2)'],\n  description: 'Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.',\n  examples: ['setIntersect([1, 2, 3, 4], [3, 4, 5, 6])', 'setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])'],\n  seealso: ['setUnion', 'setDifference']\n};", "export var setIsSubsetDocs = {\n  name: 'setIsSubset',\n  category: 'Set',\n  syntax: ['setIsSubset(set1, set2)'],\n  description: 'Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.',\n  examples: ['setIsSubset([1, 2], [3, 4, 5, 6])', 'setIsSubset([3, 4], [3, 4, 5, 6])'],\n  seealso: ['setUnion', 'setIntersect', 'setDifference']\n};", "export var setMultiplicityDocs = {\n  name: 'setMultiplicity',\n  category: 'Set',\n  syntax: ['setMultiplicity(element, set)'],\n  description: 'Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.',\n  examples: ['setMultiplicity(1, [1, 2, 2, 4])', 'setMultiplicity(2, [1, 2, 2, 4])'],\n  seealso: ['setDistinct', 'setSize']\n};", "export var setPowersetDocs = {\n  name: 'setPowerset',\n  category: 'Set',\n  syntax: ['setPowerset(set)'],\n  description: 'Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.',\n  examples: ['setPowerset([1, 2, 3])'],\n  seealso: ['setCartesian']\n};", "export var setSizeDocs = {\n  name: 'setSize',\n  category: 'Set',\n  syntax: ['setSize(set)', 'setSize(set, unique)'],\n  description: 'Count the number of elements of a (multi)set. When the second parameter \"unique\" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',\n  examples: ['setSize([1, 2, 2, 4])', 'setSize([1, 2, 2, 4], true)'],\n  seealso: ['setUnion', 'setIntersect', 'setDifference']\n};", "export var setSymDifferenceDocs = {\n  name: 'setSymDifference',\n  category: 'Set',\n  syntax: ['setSymDifference(set1, set2)'],\n  description: 'Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.',\n  examples: ['setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])', 'setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])'],\n  seealso: ['setUnion', 'setIntersect', 'setDifference']\n};", "export var setUnionDocs = {\n  name: 'setUnion',\n  category: 'Set',\n  syntax: ['setUnion(set1, set2)'],\n  description: 'Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.',\n  examples: ['setUnion([1, 2, 3, 4], [3, 4, 5, 6])', 'setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])'],\n  seealso: ['setIntersect', 'setDifference']\n};", "export var erfDocs = {\n  name: 'erf',\n  category: 'Special',\n  syntax: ['erf(x)'],\n  description: 'Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x',\n  examples: ['erf(0.2)', 'erf(-0.5)', 'erf(4)'],\n  seealso: []\n};", "export var madDocs = {\n  name: 'mad',\n  category: 'Statistics',\n  syntax: ['mad(a, b, c, ...)', 'mad(A)'],\n  description: 'Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.',\n  examples: ['mad(10, 20, 30)', 'mad([1, 2, 3])'],\n  seealso: ['mean', 'median', 'std', 'abs']\n};", "export var maxDocs = {\n  name: 'max',\n  category: 'Statistics',\n  syntax: ['max(a, b, c, ...)', 'max(A)', 'max(A, dim)'],\n  description: 'Compute the maximum value of a list of values.',\n  examples: ['max(2, 3, 4, 1)', 'max([2, 3, 4, 1])', 'max([2, 5; 4, 3])', 'max([2, 5; 4, 3], 1)', 'max([2, 5; 4, 3], 2)', 'max(2.7, 7.1, -4.5, 2.0, 4.1)', 'min(2.7, 7.1, -4.5, 2.0, 4.1)'],\n  seealso: ['mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']\n};", "export var meanDocs = {\n  name: 'mean',\n  category: 'Statistics',\n  syntax: ['mean(a, b, c, ...)', 'mean(A)', 'mean(A, dim)'],\n  description: 'Compute the arithmetic mean of a list of values.',\n  examples: ['mean(2, 3, 4, 1)', 'mean([2, 3, 4, 1])', 'mean([2, 5; 4, 3])', 'mean([2, 5; 4, 3], 1)', 'mean([2, 5; 4, 3], 2)', 'mean([1.0, 2.7, 3.2, 4.0])'],\n  seealso: ['max', 'median', 'min', 'prod', 'std', 'sum', 'variance']\n};", "export var medianDocs = {\n  name: 'median',\n  category: 'Statistics',\n  syntax: ['median(a, b, c, ...)', 'median(A)'],\n  description: 'Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.',\n  examples: ['median(5, 2, 7)', 'median([3, -1, 5, 7])'],\n  seealso: ['max', 'mean', 'min', 'prod', 'std', 'sum', 'variance', 'quantileSeq']\n};", "export var minDocs = {\n  name: 'min',\n  category: 'Statistics',\n  syntax: ['min(a, b, c, ...)', 'min(A)', 'min(A, dim)'],\n  description: 'Compute the minimum value of a list of values.',\n  examples: ['min(2, 3, 4, 1)', 'min([2, 3, 4, 1])', 'min([2, 5; 4, 3])', 'min([2, 5; 4, 3], 1)', 'min([2, 5; 4, 3], 2)', 'min(2.7, 7.1, -4.5, 2.0, 4.1)', 'max(2.7, 7.1, -4.5, 2.0, 4.1)'],\n  seealso: ['max', 'mean', 'median', 'prod', 'std', 'sum', 'variance']\n};", "export var modeDocs = {\n  name: 'mode',\n  category: 'Statistics',\n  syntax: ['mode(a, b, c, ...)', 'mode(A)', 'mode(A, a, b, B, c, ...)'],\n  description: 'Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.',\n  examples: ['mode(2, 1, 4, 3, 1)', 'mode([1, 2.7, 3.2, 4, 2.7])', 'mode(1, 4, 6, 1, 6)'],\n  seealso: ['max', 'mean', 'min', 'median', 'prod', 'std', 'sum', 'variance']\n};", "export var prodDocs = {\n  name: 'prod',\n  category: 'Statistics',\n  syntax: ['prod(a, b, c, ...)', 'prod(A)'],\n  description: 'Compute the product of all values.',\n  examples: ['prod(2, 3, 4)', 'prod([2, 3, 4])', 'prod([2, 5; 4, 3])'],\n  seealso: ['max', 'mean', 'min', 'median', 'min', 'std', 'sum', 'variance']\n};", "export var quantileSeqDocs = {\n  name: 'quantileSeq',\n  category: 'Statistics',\n  syntax: ['quantileSeq(A, prob[, sorted])', 'quantileSeq(A, [prob1, prob2, ...][, sorted])', 'quantileSeq(A, N[, sorted])'],\n  description: 'Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \\n\\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.',\n  examples: ['quantileSeq([3, -1, 5, 7], 0.5)', 'quantileSeq([3, -1, 5, 7], [1/3, 2/3])', 'quantileSeq([3, -1, 5, 7], 2)', 'quantileSeq([-1, 3, 5, 7], 0.5, true)'],\n  seealso: ['mean', 'median', 'min', 'max', 'prod', 'std', 'sum', 'variance']\n};", "export var stdDocs = {\n  name: 'std',\n  category: 'Statistics',\n  syntax: ['std(a, b, c, ...)', 'std(A)', 'std(A, normalization)'],\n  description: 'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be \"unbiased\" (default), \"uncorrected\", or \"biased\".',\n  examples: ['std(2, 4, 6)', 'std([2, 4, 6, 8])', 'std([2, 4, 6, 8], \"uncorrected\")', 'std([2, 4, 6, 8], \"biased\")', 'std([1, 2, 3; 4, 5, 6])'],\n  seealso: ['max', 'mean', 'min', 'median', 'prod', 'sum', 'variance']\n};", "export var cumSumDocs = {\n  name: 'cumsum',\n  category: 'Statistics',\n  syntax: ['cumsum(a, b, c, ...)', 'cumsum(A)'],\n  description: 'Compute the cumulative sum of all values.',\n  examples: ['cumsum(2, 3, 4, 1)', 'cumsum([2, 3, 4, 1])', 'cumsum([1, 2; 3, 4])', 'cumsum([1, 2; 3, 4], 1)', 'cumsum([1, 2; 3, 4], 2)'],\n  seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']\n};", "export var sumDocs = {\n  name: 'sum',\n  category: 'Statistics',\n  syntax: ['sum(a, b, c, ...)', 'sum(A)'],\n  description: 'Compute the sum of all values.',\n  examples: ['sum(2, 3, 4, 1)', 'sum([2, 3, 4, 1])', 'sum([2, 5; 4, 3])'],\n  seealso: ['max', 'mean', 'median', 'min', 'prod', 'std', 'sum', 'variance']\n};", "export var varianceDocs = {\n  name: 'variance',\n  category: 'Statistics',\n  syntax: ['variance(a, b, c, ...)', 'variance(A)', 'variance(A, normalization)'],\n  description: 'Compute the variance of all values. Optional parameter normalization can be \"unbiased\" (default), \"uncorrected\", or \"biased\".',\n  examples: ['variance(2, 4, 6)', 'variance([2, 4, 6, 8])', 'variance([2, 4, 6, 8], \"uncorrected\")', 'variance([2, 4, 6, 8], \"biased\")', 'variance([1, 2, 3; 4, 5, 6])'],\n  seealso: ['max', 'mean', 'min', 'median', 'min', 'prod', 'std', 'sum']\n};", "export var acosDocs = {\n  name: 'acos',\n  category: 'Trigonometry',\n  syntax: ['acos(x)'],\n  description: 'Compute the inverse cosine of a value in radians.',\n  examples: ['acos(0.5)', 'acos(cos(2.3))'],\n  seealso: ['cos', 'atan', 'asin']\n};", "export var acoshDocs = {\n  name: 'acosh',\n  category: 'Trigonometry',\n  syntax: ['acosh(x)'],\n  description: 'Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.',\n  examples: ['acosh(1.5)'],\n  seealso: ['cosh', 'asinh', 'atanh']\n};", "export var acotDocs = {\n  name: 'acot',\n  category: 'Trigonometry',\n  syntax: ['acot(x)'],\n  description: 'Calculate the inverse cotangent of a value.',\n  examples: ['acot(0.5)', 'acot(cot(0.5))', 'acot(2)'],\n  seealso: ['cot', 'atan']\n};", "export var acothDocs = {\n  name: 'acoth',\n  category: 'Trigonometry',\n  syntax: ['acoth(x)'],\n  description: 'Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.',\n  examples: ['acoth(2)', 'acoth(0.5)'],\n  seealso: ['acsch', 'asech']\n};", "export var acscDocs = {\n  name: 'acsc',\n  category: 'Trigonometry',\n  syntax: ['acsc(x)'],\n  description: 'Calculate the inverse cotangent of a value.',\n  examples: ['acsc(2)', 'acsc(csc(0.5))', 'acsc(0.5)'],\n  seealso: ['csc', 'asin', 'asec']\n};", "export var acschDocs = {\n  name: 'acsch',\n  category: 'Trigonometry',\n  syntax: ['acsch(x)'],\n  description: 'Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.',\n  examples: ['acsch(0.5)'],\n  seealso: ['asech', 'acoth']\n};", "export var asecDocs = {\n  name: 'asec',\n  category: 'Trigonometry',\n  syntax: ['asec(x)'],\n  description: 'Calculate the inverse secant of a value.',\n  examples: ['asec(0.5)', 'asec(sec(0.5))', 'asec(2)'],\n  seealso: ['acos', 'acot', 'acsc']\n};", "export var asechDocs = {\n  name: 'asech',\n  category: 'Trigonometry',\n  syntax: ['asech(x)'],\n  description: 'Calculate the inverse secant of a value.',\n  examples: ['asech(0.5)'],\n  seealso: ['acsch', 'acoth']\n};", "export var asinDocs = {\n  name: 'asin',\n  category: 'Trigonometry',\n  syntax: ['asin(x)'],\n  description: 'Compute the inverse sine of a value in radians.',\n  examples: ['asin(0.5)', 'asin(sin(0.5))'],\n  seealso: ['sin', 'acos', 'atan']\n};", "export var asinhDocs = {\n  name: 'asinh',\n  category: 'Trigonometry',\n  syntax: ['asinh(x)'],\n  description: 'Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.',\n  examples: ['asinh(0.5)'],\n  seealso: ['acosh', 'atanh']\n};", "export var atanDocs = {\n  name: 'atan',\n  category: 'Trigonometry',\n  syntax: ['atan(x)'],\n  description: 'Compute the inverse tangent of a value in radians.',\n  examples: ['atan(0.5)', 'atan(tan(0.5))'],\n  seealso: ['tan', 'acos', 'asin']\n};", "export var atan2Docs = {\n  name: 'atan2',\n  category: 'Trigonometry',\n  syntax: ['atan2(y, x)'],\n  description: 'Computes the principal value of the arc tangent of y/x in radians.',\n  examples: ['atan2(2, 2) / pi', 'angle = 60 deg in rad', 'x = cos(angle)', 'y = sin(angle)', 'atan2(y, x)'],\n  seealso: ['sin', 'cos', 'tan']\n};", "export var atanhDocs = {\n  name: 'atanh',\n  category: 'Trigonometry',\n  syntax: ['atanh(x)'],\n  description: 'Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.',\n  examples: ['atanh(0.5)'],\n  seealso: ['acosh', 'asinh']\n};", "export var cosDocs = {\n  name: 'cos',\n  category: 'Trigonometry',\n  syntax: ['cos(x)'],\n  description: 'Compute the cosine of x in radians.',\n  examples: ['cos(2)', 'cos(pi / 4) ^ 2', 'cos(180 deg)', 'cos(60 deg)', 'sin(0.2)^2 + cos(0.2)^2'],\n  seealso: ['acos', 'sin', 'tan']\n};", "export var coshDocs = {\n  name: 'cosh',\n  category: 'Trigonometry',\n  syntax: ['cosh(x)'],\n  description: 'Compute the hyperbolic cosine of x in radians.',\n  examples: ['cosh(0.5)'],\n  seealso: ['sinh', 'tanh', 'coth']\n};", "export var cotDocs = {\n  name: 'cot',\n  category: 'Trigonometry',\n  syntax: ['cot(x)'],\n  description: 'Compute the cotangent of x in radians. Defined as 1/tan(x)',\n  examples: ['cot(2)', '1 / tan(2)'],\n  seealso: ['sec', 'csc', 'tan']\n};", "export var cothDocs = {\n  name: 'coth',\n  category: 'Trigonometry',\n  syntax: ['coth(x)'],\n  description: 'Compute the hyperbolic cotangent of x in radians.',\n  examples: ['coth(2)', '1 / tanh(2)'],\n  seealso: ['sech', 'csch', 'tanh']\n};", "export var cscDocs = {\n  name: 'csc',\n  category: 'Trigonometry',\n  syntax: ['csc(x)'],\n  description: 'Compute the cosecant of x in radians. Defined as 1/sin(x)',\n  examples: ['csc(2)', '1 / sin(2)'],\n  seealso: ['sec', 'cot', 'sin']\n};", "export var cschDocs = {\n  name: 'csch',\n  category: 'Trigonometry',\n  syntax: ['csch(x)'],\n  description: 'Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)',\n  examples: ['csch(2)', '1 / sinh(2)'],\n  seealso: ['sech', 'coth', 'sinh']\n};", "export var secDocs = {\n  name: 'sec',\n  category: 'Trigonometry',\n  syntax: ['sec(x)'],\n  description: 'Compute the secant of x in radians. Defined as 1/cos(x)',\n  examples: ['sec(2)', '1 / cos(2)'],\n  seealso: ['cot', 'csc', 'cos']\n};", "export var sechDocs = {\n  name: 'sech',\n  category: 'Trigonometry',\n  syntax: ['sech(x)'],\n  description: 'Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)',\n  examples: ['sech(2)', '1 / cosh(2)'],\n  seealso: ['coth', 'csch', 'cosh']\n};", "export var sinDocs = {\n  name: 'sin',\n  category: 'Trigonometry',\n  syntax: ['sin(x)'],\n  description: 'Compute the sine of x in radians.',\n  examples: ['sin(2)', 'sin(pi / 4) ^ 2', 'sin(90 deg)', 'sin(30 deg)', 'sin(0.2)^2 + cos(0.2)^2'],\n  seealso: ['asin', 'cos', 'tan']\n};", "export var sinhDocs = {\n  name: 'sinh',\n  category: 'Trigonometry',\n  syntax: ['sinh(x)'],\n  description: 'Compute the hyperbolic sine of x in radians.',\n  examples: ['sinh(0.5)'],\n  seealso: ['cosh', 'tanh']\n};", "export var tanDocs = {\n  name: 'tan',\n  category: 'Trigonometry',\n  syntax: ['tan(x)'],\n  description: 'Compute the tangent of x in radians.',\n  examples: ['tan(0.5)', 'sin(0.5) / cos(0.5)', 'tan(pi / 4)', 'tan(45 deg)'],\n  seealso: ['atan', 'sin', 'cos']\n};", "export var tanhDocs = {\n  name: 'tanh',\n  category: 'Trigonometry',\n  syntax: ['tanh(x)'],\n  description: 'Compute the hyperbolic tangent of x in radians.',\n  examples: ['tanh(0.5)', 'sinh(0.5) / cosh(0.5)'],\n  seealso: ['sinh', 'cosh']\n};", "export var toDocs = {\n  name: 'to',\n  category: 'Units',\n  syntax: ['x to unit', 'to(x, unit)'],\n  description: 'Change the unit of a value.',\n  examples: ['5 inch to cm', '3.2kg to g', '16 bytes in bits'],\n  seealso: []\n};", "export var binDocs = {\n  name: 'bin',\n  category: 'Utils',\n  syntax: ['bin(value)'],\n  description: 'Format a number as binary',\n  examples: ['bin(2)'],\n  seealso: ['oct', 'hex']\n};", "export var cloneDocs = {\n  name: 'clone',\n  category: 'Utils',\n  syntax: ['clone(x)'],\n  description: 'Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices',\n  examples: ['clone(3.5)', 'clone(2 - 4i)', 'clone(45 deg)', 'clone([1, 2; 3, 4])', 'clone(\"hello world\")'],\n  seealso: []\n};", "export var formatDocs = {\n  name: 'format',\n  category: 'Utils',\n  syntax: ['format(value)', 'format(value, precision)'],\n  description: 'Format a value of any type as string.',\n  examples: ['format(2.3)', 'format(3 - 4i)', 'format([])', 'format(pi, 3)'],\n  seealso: ['print']\n};", "export var hasNumericValueDocs = {\n  name: 'hasNumericValue',\n  category: 'Utils',\n  syntax: ['hasNumericValue(x)'],\n  description: 'Test whether a value is an numeric value. ' + 'In case of a string, true is returned if the string contains a numeric value.',\n  examples: ['hasNumericValue(2)', 'hasNumericValue(\"2\")', 'isNumeric(\"2\")', 'hasNumericValue(0)', 'hasNumericValue(bignumber(500))', 'hasNumericValue(fraction(0.125))', 'hasNumericValue(2 + 3i)', 'hasNumericValue([2.3, \"foo\", false])'],\n  seealso: ['isInteger', 'isZero', 'isNegative', 'isPositive', 'isNaN', 'isNumeric']\n};", "export var hexDocs = {\n  name: 'hex',\n  category: 'Utils',\n  syntax: ['hex(value)'],\n  description: 'Format a number as hexadecimal',\n  examples: ['hex(240)'],\n  seealso: ['bin', 'oct']\n};", "export var isIntegerDocs = {\n  name: 'isInteger',\n  category: 'Utils',\n  syntax: ['isInteger(x)'],\n  description: 'Test whether a value is an integer number.',\n  examples: ['isInteger(2)', 'isInteger(3.5)', 'isInteger([3, 0.5, -2])'],\n  seealso: ['isNegative', 'isNumeric', 'isPositive', 'isZero']\n};", "export var isNaNDocs = {\n  name: 'isNaN',\n  category: 'Utils',\n  syntax: ['isNaN(x)'],\n  description: 'Test whether a value is NaN (not a number)',\n  examples: ['isNaN(2)', 'isNaN(0 / 0)', 'isNaN(NaN)', 'isNaN(Infinity)'],\n  seealso: ['isNegative', 'isNumeric', 'isPositive', 'isZero']\n};", "export var isNegativeDocs = {\n  name: 'isNegative',\n  category: 'Utils',\n  syntax: ['isNegative(x)'],\n  description: 'Test whether a value is negative: smaller than zero.',\n  examples: ['isNegative(2)', 'isNegative(0)', 'isNegative(-4)', 'isNegative([3, 0.5, -2])'],\n  seealso: ['isInteger', 'isNumeric', 'isPositive', 'isZero']\n};", "export var isNumericDocs = {\n  name: 'isNumeric',\n  category: 'Utils',\n  syntax: ['isNumeric(x)'],\n  description: 'Test whether a value is a numeric value. ' + 'Returns true when the input is a number, BigNumber, Fraction, or boolean.',\n  examples: ['isNumeric(2)', 'isNumeric(\"2\")', 'hasNumericValue(\"2\")', 'isNumeric(0)', 'isNumeric(bignumber(500))', 'isNumeric(fraction(0.125))', 'isNumeric(2 + 3i)', 'isNumeric([2.3, \"foo\", false])'],\n  seealso: ['isInteger', 'isZero', 'isNegative', 'isPositive', 'isNaN', 'hasNumericValue']\n};", "export var isPositiveDocs = {\n  name: 'isPositive',\n  category: 'Utils',\n  syntax: ['isPositive(x)'],\n  description: 'Test whether a value is positive: larger than zero.',\n  examples: ['isPositive(2)', 'isPositive(0)', 'isPositive(-4)', 'isPositive([3, 0.5, -2])'],\n  seealso: ['isInteger', 'isNumeric', 'isNegative', 'isZero']\n};", "export var isPrimeDocs = {\n  name: 'isPrime',\n  category: 'Utils',\n  syntax: ['isPrime(x)'],\n  description: 'Test whether a value is prime: has no divisors other than itself and one.',\n  examples: ['isPrime(3)', 'isPrime(-2)', 'isPrime([2, 17, 100])'],\n  seealso: ['isInteger', 'isNumeric', 'isNegative', 'isZero']\n};", "export var isZeroDocs = {\n  name: 'isZero',\n  category: 'Utils',\n  syntax: ['isZero(x)'],\n  description: 'Test whether a value is zero.',\n  examples: ['isZero(2)', 'isZero(0)', 'isZero(-4)', 'isZero([3, 0, -2, 0])'],\n  seealso: ['isInteger', 'isNumeric', 'isNegative', 'isPositive']\n};", "export var numericDocs = {\n  name: 'numeric',\n  category: 'Utils',\n  syntax: ['numeric(x)'],\n  description: 'Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.',\n  examples: ['numeric(\"4\")', 'numeric(\"4\", \"number\")', 'numeric(\"4\", \"BigNumber\")', 'numeric(\"4\", \"Fraction)', 'numeric(4, \"Fraction\")', 'numeric(fraction(2, 5), \"number)'],\n  seealso: ['number', 'fraction', 'bignumber', 'string', 'format']\n};", "export var octDocs = {\n  name: 'oct',\n  category: 'Utils',\n  syntax: ['oct(value)'],\n  description: 'Format a number as octal',\n  examples: ['oct(56)'],\n  seealso: ['bin', 'hex']\n};", "export var printDocs = {\n  name: 'print',\n  category: 'Utils',\n  syntax: ['print(template, values)', 'print(template, values, precision)'],\n  description: 'Interpolate values into a string template.',\n  examples: ['print(\"Lucy is $age years old\", {age: 5})', 'print(\"The value of pi is $pi\", {pi: pi}, 3)', 'print(\"Hello, $user.name!\", {user: {name: \"John\"}})', 'print(\"Values: $0, $1, $2\", [6, 9, 4])'],\n  seealso: ['format']\n};", "export var typeOfDocs = {\n  name: 'typeOf',\n  category: 'Utils',\n  syntax: ['typeOf(x)'],\n  description: 'Get the type of a variable.',\n  examples: ['typeOf(3.5)', 'typeOf(2 - 4i)', 'typeOf(45 deg)', 'typeOf(\"hello world\")'],\n  seealso: ['getMatrixDataType']\n};", "import { eDocs } from './constants/e.js';\nimport { falseDocs } from './constants/false.js';\nimport { iDocs } from './constants/i.js';\nimport { InfinityDocs } from './constants/Infinity.js';\nimport { LN10Docs } from './constants/LN10.js';\nimport { LN2Docs } from './constants/LN2.js';\nimport { LOG10EDocs } from './constants/LOG10E.js';\nimport { LOG2EDocs } from './constants/LOG2E.js';\nimport { NaNDocs } from './constants/NaN.js';\nimport { nullDocs } from './constants/null.js';\nimport { phiDocs } from './constants/phi.js';\nimport { piDocs } from './constants/pi.js';\nimport { SQRT12Docs } from './constants/SQRT1_2.js';\nimport { SQRT2Docs } from './constants/SQRT2.js';\nimport { tauDocs } from './constants/tau.js';\nimport { trueDocs } from './constants/true.js';\nimport { versionDocs } from './constants/version.js';\nimport { bignumberDocs } from './construction/bignumber.js';\nimport { booleanDocs } from './construction/boolean.js';\nimport { complexDocs } from './construction/complex.js';\nimport { createUnitDocs } from './construction/createUnit.js';\nimport { fractionDocs } from './construction/fraction.js';\nimport { indexDocs } from './construction/index.js';\nimport { matrixDocs } from './construction/matrix.js';\nimport { numberDocs } from './construction/number.js';\nimport { sparseDocs } from './construction/sparse.js';\nimport { splitUnitDocs } from './construction/splitUnit.js';\nimport { stringDocs } from './construction/string.js';\nimport { unitDocs } from './construction/unit.js';\nimport { configDocs } from './core/config.js';\nimport { importDocs } from './core/import.js';\nimport { typedDocs } from './core/typed.js';\nimport { derivativeDocs } from './function/algebra/derivative.js';\nimport { leafCountDocs } from './function/algebra/leafCount.js';\nimport { lsolveDocs } from './function/algebra/lsolve.js';\nimport { lsolveAllDocs } from './function/algebra/lsolveAll.js';\nimport { lupDocs } from './function/algebra/lup.js';\nimport { lusolveDocs } from './function/algebra/lusolve.js';\nimport { qrDocs } from './function/algebra/qr.js';\nimport { rationalizeDocs } from './function/algebra/rationalize.js';\nimport { resolveDocs } from './function/algebra/resolve.js';\nimport { simplifyDocs } from './function/algebra/simplify.js';\nimport { simplifyCoreDocs } from './function/algebra/simplifyCore.js';\nimport { sluDocs } from './function/algebra/slu.js';\nimport { symbolicEqualDocs } from './function/algebra/symbolicEqual.js';\nimport { usolveDocs } from './function/algebra/usolve.js';\nimport { usolveAllDocs } from './function/algebra/usolveAll.js';\nimport { absDocs } from './function/arithmetic/abs.js';\nimport { addDocs } from './function/arithmetic/add.js';\nimport { cbrtDocs } from './function/arithmetic/cbrt.js';\nimport { ceilDocs } from './function/arithmetic/ceil.js';\nimport { cubeDocs } from './function/arithmetic/cube.js';\nimport { divideDocs } from './function/arithmetic/divide.js';\nimport { dotDivideDocs } from './function/arithmetic/dotDivide.js';\nimport { dotMultiplyDocs } from './function/arithmetic/dotMultiply.js';\nimport { dotPowDocs } from './function/arithmetic/dotPow.js';\nimport { expDocs } from './function/arithmetic/exp.js';\nimport { expmDocs } from './function/arithmetic/expm.js';\nimport { expm1Docs } from './function/arithmetic/expm1.js';\nimport { fixDocs } from './function/arithmetic/fix.js';\nimport { floorDocs } from './function/arithmetic/floor.js';\nimport { gcdDocs } from './function/arithmetic/gcd.js';\nimport { hypotDocs } from './function/arithmetic/hypot.js';\nimport { invmodDocs } from './function/arithmetic/invmod.js';\nimport { lcmDocs } from './function/arithmetic/lcm.js';\nimport { logDocs } from './function/arithmetic/log.js';\nimport { log10Docs } from './function/arithmetic/log10.js';\nimport { log1pDocs } from './function/arithmetic/log1p.js';\nimport { log2Docs } from './function/arithmetic/log2.js';\nimport { modDocs } from './function/arithmetic/mod.js';\nimport { multiplyDocs } from './function/arithmetic/multiply.js';\nimport { normDocs } from './function/arithmetic/norm.js';\nimport { nthRootDocs } from './function/arithmetic/nthRoot.js';\nimport { nthRootsDocs } from './function/arithmetic/nthRoots.js';\nimport { powDocs } from './function/arithmetic/pow.js';\nimport { roundDocs } from './function/arithmetic/round.js';\nimport { signDocs } from './function/arithmetic/sign.js';\nimport { sqrtDocs } from './function/arithmetic/sqrt.js';\nimport { sqrtmDocs } from './function/arithmetic/sqrtm.js';\nimport { squareDocs } from './function/arithmetic/square.js';\nimport { subtractDocs } from './function/arithmetic/subtract.js';\nimport { unaryMinusDocs } from './function/arithmetic/unaryMinus.js';\nimport { unaryPlusDocs } from './function/arithmetic/unaryPlus.js';\nimport { xgcdDocs } from './function/arithmetic/xgcd.js';\nimport { bitAndDocs } from './function/bitwise/bitAnd.js';\nimport { bitNotDocs } from './function/bitwise/bitNot.js';\nimport { bitOrDocs } from './function/bitwise/bitOr.js';\nimport { bitXorDocs } from './function/bitwise/bitXor.js';\nimport { leftShiftDocs } from './function/bitwise/leftShift.js';\nimport { rightArithShiftDocs } from './function/bitwise/rightArithShift.js';\nimport { rightLogShiftDocs } from './function/bitwise/rightLogShift.js';\nimport { bellNumbersDocs } from './function/combinatorics/bellNumbers.js';\nimport { catalanDocs } from './function/combinatorics/catalan.js';\nimport { compositionDocs } from './function/combinatorics/composition.js';\nimport { stirlingS2Docs } from './function/combinatorics/stirlingS2.js';\nimport { argDocs } from './function/complex/arg.js';\nimport { conjDocs } from './function/complex/conj.js';\nimport { imDocs } from './function/complex/im.js';\nimport { reDocs } from './function/complex/re.js';\nimport { evaluateDocs } from './function/expression/evaluate.js';\nimport { helpDocs } from './function/expression/help.js';\nimport { distanceDocs } from './function/geometry/distance.js';\nimport { intersectDocs } from './function/geometry/intersect.js';\nimport { andDocs } from './function/logical/and.js';\nimport { notDocs } from './function/logical/not.js';\nimport { orDocs } from './function/logical/or.js';\nimport { xorDocs } from './function/logical/xor.js';\nimport { columnDocs } from './function/matrix/column.js';\nimport { concatDocs } from './function/matrix/concat.js';\nimport { countDocs } from './function/matrix/count.js';\nimport { crossDocs } from './function/matrix/cross.js';\nimport { ctransposeDocs } from './function/matrix/ctranspose.js';\nimport { detDocs } from './function/matrix/det.js';\nimport { diagDocs } from './function/matrix/diag.js';\nimport { diffDocs } from './function/matrix/diff.js';\nimport { dotDocs } from './function/matrix/dot.js';\nimport { eigsDocs } from './function/matrix/eigs.js';\nimport { filterDocs } from './function/matrix/filter.js';\nimport { flattenDocs } from './function/matrix/flatten.js';\nimport { forEachDocs } from './function/matrix/forEach.js';\nimport { getMatrixDataTypeDocs } from './function/matrix/getMatrixDataType.js';\nimport { identityDocs } from './function/matrix/identity.js';\nimport { invDocs } from './function/matrix/inv.js';\nimport { pinvDocs } from './function/matrix/pinv.js';\nimport { kronDocs } from './function/matrix/kron.js';\nimport { mapDocs } from './function/matrix/map.js';\nimport { matrixFromColumnsDocs } from './function/matrix/matrixFromColumns.js';\nimport { matrixFromFunctionDocs } from './function/matrix/matrixFromFunction.js';\nimport { matrixFromRowsDocs } from './function/matrix/matrixFromRows.js';\nimport { onesDocs } from './function/matrix/ones.js';\nimport { partitionSelectDocs } from './function/matrix/partitionSelect.js';\nimport { rangeDocs } from './function/matrix/range.js';\nimport { reshapeDocs } from './function/matrix/reshape.js';\nimport { resizeDocs } from './function/matrix/resize.js';\nimport { rotateDocs } from './function/matrix/rotate.js';\nimport { rotationMatrixDocs } from './function/matrix/rotationMatrix.js';\nimport { rowDocs } from './function/matrix/row.js';\nimport { sizeDocs } from './function/matrix/size.js';\nimport { sortDocs } from './function/matrix/sort.js';\nimport { squeezeDocs } from './function/matrix/squeeze.js';\nimport { subsetDocs } from './function/matrix/subset.js';\nimport { traceDocs } from './function/matrix/trace.js';\nimport { transposeDocs } from './function/matrix/transpose.js';\nimport { zerosDocs } from './function/matrix/zeros.js';\nimport { fftDocs } from './function/matrix/fft.js';\nimport { ifftDocs } from './function/matrix/ifft.js';\nimport { combinationsDocs } from './function/probability/combinations.js';\nimport { combinationsWithRepDocs } from './function/probability/combinationsWithRep.js';\nimport { factorialDocs } from './function/probability/factorial.js';\nimport { gammaDocs } from './function/probability/gamma.js';\nimport { lgammaDocs } from './function/probability/lgamma.js';\nimport { kldivergenceDocs } from './function/probability/kldivergence.js';\nimport { multinomialDocs } from './function/probability/multinomial.js';\nimport { permutationsDocs } from './function/probability/permutations.js';\nimport { pickRandomDocs } from './function/probability/pickRandom.js';\nimport { randomDocs } from './function/probability/random.js';\nimport { randomIntDocs } from './function/probability/randomInt.js';\nimport { compareDocs } from './function/relational/compare.js';\nimport { compareNaturalDocs } from './function/relational/compareNatural.js';\nimport { compareTextDocs } from './function/relational/compareText.js';\nimport { deepEqualDocs } from './function/relational/deepEqual.js';\nimport { equalDocs } from './function/relational/equal.js';\nimport { equalTextDocs } from './function/relational/equalText.js';\nimport { largerDocs } from './function/relational/larger.js';\nimport { largerEqDocs } from './function/relational/largerEq.js';\nimport { smallerDocs } from './function/relational/smaller.js';\nimport { smallerEqDocs } from './function/relational/smallerEq.js';\nimport { unequalDocs } from './function/relational/unequal.js';\nimport { setCartesianDocs } from './function/set/setCartesian.js';\nimport { setDifferenceDocs } from './function/set/setDifference.js';\nimport { setDistinctDocs } from './function/set/setDistinct.js';\nimport { setIntersectDocs } from './function/set/setIntersect.js';\nimport { setIsSubsetDocs } from './function/set/setIsSubset.js';\nimport { setMultiplicityDocs } from './function/set/setMultiplicity.js';\nimport { setPowersetDocs } from './function/set/setPowerset.js';\nimport { setSizeDocs } from './function/set/setSize.js';\nimport { setSymDifferenceDocs } from './function/set/setSymDifference.js';\nimport { setUnionDocs } from './function/set/setUnion.js';\nimport { erfDocs } from './function/special/erf.js';\nimport { madDocs } from './function/statistics/mad.js';\nimport { maxDocs } from './function/statistics/max.js';\nimport { meanDocs } from './function/statistics/mean.js';\nimport { medianDocs } from './function/statistics/median.js';\nimport { minDocs } from './function/statistics/min.js';\nimport { modeDocs } from './function/statistics/mode.js';\nimport { prodDocs } from './function/statistics/prod.js';\nimport { quantileSeqDocs } from './function/statistics/quantileSeq.js';\nimport { stdDocs } from './function/statistics/std.js';\nimport { cumSumDocs } from './function/statistics/cumsum.js';\nimport { sumDocs } from './function/statistics/sum.js';\nimport { varianceDocs } from './function/statistics/variance.js';\nimport { acosDocs } from './function/trigonometry/acos.js';\nimport { acoshDocs } from './function/trigonometry/acosh.js';\nimport { acotDocs } from './function/trigonometry/acot.js';\nimport { acothDocs } from './function/trigonometry/acoth.js';\nimport { acscDocs } from './function/trigonometry/acsc.js';\nimport { acschDocs } from './function/trigonometry/acsch.js';\nimport { asecDocs } from './function/trigonometry/asec.js';\nimport { asechDocs } from './function/trigonometry/asech.js';\nimport { asinDocs } from './function/trigonometry/asin.js';\nimport { asinhDocs } from './function/trigonometry/asinh.js';\nimport { atanDocs } from './function/trigonometry/atan.js';\nimport { atan2Docs } from './function/trigonometry/atan2.js';\nimport { atanhDocs } from './function/trigonometry/atanh.js';\nimport { cosDocs } from './function/trigonometry/cos.js';\nimport { coshDocs } from './function/trigonometry/cosh.js';\nimport { cotDocs } from './function/trigonometry/cot.js';\nimport { cothDocs } from './function/trigonometry/coth.js';\nimport { cscDocs } from './function/trigonometry/csc.js';\nimport { cschDocs } from './function/trigonometry/csch.js';\nimport { secDocs } from './function/trigonometry/sec.js';\nimport { sechDocs } from './function/trigonometry/sech.js';\nimport { sinDocs } from './function/trigonometry/sin.js';\nimport { sinhDocs } from './function/trigonometry/sinh.js';\nimport { tanDocs } from './function/trigonometry/tan.js';\nimport { tanhDocs } from './function/trigonometry/tanh.js';\nimport { toDocs } from './function/units/to.js';\nimport { binDocs } from './function/utils/bin.js';\nimport { cloneDocs } from './function/utils/clone.js';\nimport { formatDocs } from './function/utils/format.js';\nimport { hasNumericValueDocs } from './function/utils/hasNumericValue.js';\nimport { hexDocs } from './function/utils/hex.js';\nimport { isIntegerDocs } from './function/utils/isInteger.js';\nimport { isNaNDocs } from './function/utils/isNaN.js';\nimport { isNegativeDocs } from './function/utils/isNegative.js';\nimport { isNumericDocs } from './function/utils/isNumeric.js';\nimport { isPositiveDocs } from './function/utils/isPositive.js';\nimport { isPrimeDocs } from './function/utils/isPrime.js';\nimport { isZeroDocs } from './function/utils/isZero.js';\nimport { numericDocs } from './function/utils/numeric.js';\nimport { octDocs } from './function/utils/oct.js';\nimport { printDocs } from './function/utils/print.js';\nimport { typeOfDocs } from './function/utils/typeOf.js';\nexport var embeddedDocs = {\n  // construction functions\n  bignumber: bignumberDocs,\n  boolean: booleanDocs,\n  complex: complexDocs,\n  createUnit: createUnitDocs,\n  fraction: fractionDocs,\n  index: indexDocs,\n  matrix: matrixDocs,\n  number: numberDocs,\n  sparse: sparseDocs,\n  splitUnit: splitUnitDocs,\n  string: stringDocs,\n  unit: unitDocs,\n  // constants\n  e: eDocs,\n  E: eDocs,\n  false: falseDocs,\n  i: iDocs,\n  Infinity: InfinityDocs,\n  LN2: LN2Docs,\n  LN10: LN10Docs,\n  LOG2E: LOG2EDocs,\n  LOG10E: LOG10EDocs,\n  NaN: NaNDocs,\n  null: nullDocs,\n  pi: piDocs,\n  PI: piDocs,\n  phi: phiDocs,\n  SQRT1_2: SQRT12Docs,\n  SQRT2: SQRT2Docs,\n  tau: tauDocs,\n  true: trueDocs,\n  version: versionDocs,\n  // physical constants\n  // TODO: more detailed docs for physical constants\n  speedOfLight: {\n    description: 'Speed of light in vacuum',\n    examples: ['speedOfLight']\n  },\n  gravitationConstant: {\n    description: 'Newtonian constant of gravitation',\n    examples: ['gravitationConstant']\n  },\n  planckConstant: {\n    description: 'Planck constant',\n    examples: ['planckConstant']\n  },\n  reducedPlanckConstant: {\n    description: 'Reduced Planck constant',\n    examples: ['reducedPlanckConstant']\n  },\n  magneticConstant: {\n    description: 'Magnetic constant (vacuum permeability)',\n    examples: ['magneticConstant']\n  },\n  electricConstant: {\n    description: 'Electric constant (vacuum permeability)',\n    examples: ['electricConstant']\n  },\n  vacuumImpedance: {\n    description: 'Characteristic impedance of vacuum',\n    examples: ['vacuumImpedance']\n  },\n  coulomb: {\n    description: 'Coulomb\\'s constant',\n    examples: ['coulomb']\n  },\n  elementaryCharge: {\n    description: 'Elementary charge',\n    examples: ['elementaryCharge']\n  },\n  bohrMagneton: {\n    description: 'Borh magneton',\n    examples: ['bohrMagneton']\n  },\n  conductanceQuantum: {\n    description: 'Conductance quantum',\n    examples: ['conductanceQuantum']\n  },\n  inverseConductanceQuantum: {\n    description: 'Inverse conductance quantum',\n    examples: ['inverseConductanceQuantum']\n  },\n  // josephson: {description: 'Josephson constant', examples: ['josephson']},\n  magneticFluxQuantum: {\n    description: 'Magnetic flux quantum',\n    examples: ['magneticFluxQuantum']\n  },\n  nuclearMagneton: {\n    description: 'Nuclear magneton',\n    examples: ['nuclearMagneton']\n  },\n  klitzing: {\n    description: 'Von Klitzing constant',\n    examples: ['klitzing']\n  },\n  bohrRadius: {\n    description: 'Borh radius',\n    examples: ['bohrRadius']\n  },\n  classicalElectronRadius: {\n    description: 'Classical electron radius',\n    examples: ['classicalElectronRadius']\n  },\n  electronMass: {\n    description: 'Electron mass',\n    examples: ['electronMass']\n  },\n  fermiCoupling: {\n    description: 'Fermi coupling constant',\n    examples: ['fermiCoupling']\n  },\n  fineStructure: {\n    description: 'Fine-structure constant',\n    examples: ['fineStructure']\n  },\n  hartreeEnergy: {\n    description: 'Hartree energy',\n    examples: ['hartreeEnergy']\n  },\n  protonMass: {\n    description: 'Proton mass',\n    examples: ['protonMass']\n  },\n  deuteronMass: {\n    description: 'Deuteron Mass',\n    examples: ['deuteronMass']\n  },\n  neutronMass: {\n    description: 'Neutron mass',\n    examples: ['neutronMass']\n  },\n  quantumOfCirculation: {\n    description: 'Quantum of circulation',\n    examples: ['quantumOfCirculation']\n  },\n  rydberg: {\n    description: 'Rydberg constant',\n    examples: ['rydberg']\n  },\n  thomsonCrossSection: {\n    description: 'Thomson cross section',\n    examples: ['thomsonCrossSection']\n  },\n  weakMixingAngle: {\n    description: 'Weak mixing angle',\n    examples: ['weakMixingAngle']\n  },\n  efimovFactor: {\n    description: 'Efimov factor',\n    examples: ['efimovFactor']\n  },\n  atomicMass: {\n    description: 'Atomic mass constant',\n    examples: ['atomicMass']\n  },\n  avogadro: {\n    description: 'Avogadro\\'s number',\n    examples: ['avogadro']\n  },\n  boltzmann: {\n    description: 'Boltzmann constant',\n    examples: ['boltzmann']\n  },\n  faraday: {\n    description: 'Faraday constant',\n    examples: ['faraday']\n  },\n  firstRadiation: {\n    description: 'First radiation constant',\n    examples: ['firstRadiation']\n  },\n  loschmidt: {\n    description: 'Loschmidt constant at T=273.15 K and p=101.325 kPa',\n    examples: ['loschmidt']\n  },\n  gasConstant: {\n    description: 'Gas constant',\n    examples: ['gasConstant']\n  },\n  molarPlanckConstant: {\n    description: 'Molar Planck constant',\n    examples: ['molarPlanckConstant']\n  },\n  molarVolume: {\n    description: 'Molar volume of an ideal gas at T=273.15 K and p=101.325 kPa',\n    examples: ['molarVolume']\n  },\n  sackurTetrode: {\n    description: 'Sackur-Tetrode constant at T=1 K and p=101.325 kPa',\n    examples: ['sackurTetrode']\n  },\n  secondRadiation: {\n    description: 'Second radiation constant',\n    examples: ['secondRadiation']\n  },\n  stefanBoltzmann: {\n    description: 'Stefan-Boltzmann constant',\n    examples: ['stefanBoltzmann']\n  },\n  wienDisplacement: {\n    description: 'Wien displacement law constant',\n    examples: ['wienDisplacement']\n  },\n  // spectralRadiance: {description: 'First radiation constant for spectral radiance', examples: ['spectralRadiance']},\n  molarMass: {\n    description: 'Molar mass constant',\n    examples: ['molarMass']\n  },\n  molarMassC12: {\n    description: 'Molar mass constant of carbon-12',\n    examples: ['molarMassC12']\n  },\n  gravity: {\n    description: 'Standard acceleration of gravity (standard acceleration of free-fall on Earth)',\n    examples: ['gravity']\n  },\n  planckLength: {\n    description: 'Planck length',\n    examples: ['planckLength']\n  },\n  planckMass: {\n    description: 'Planck mass',\n    examples: ['planckMass']\n  },\n  planckTime: {\n    description: 'Planck time',\n    examples: ['planckTime']\n  },\n  planckCharge: {\n    description: 'Planck charge',\n    examples: ['planckCharge']\n  },\n  planckTemperature: {\n    description: 'Planck temperature',\n    examples: ['planckTemperature']\n  },\n  // functions - algebra\n  derivative: derivativeDocs,\n  lsolve: lsolveDocs,\n  lsolveAll: lsolveAllDocs,\n  lup: lupDocs,\n  lusolve: lusolveDocs,\n  leafCount: leafCountDocs,\n  resolve: resolveDocs,\n  simplify: simplifyDocs,\n  simplifyCore: simplifyCoreDocs,\n  symbolicEqual: symbolicEqualDocs,\n  rationalize: rationalizeDocs,\n  slu: sluDocs,\n  usolve: usolveDocs,\n  usolveAll: usolveAllDocs,\n  qr: qrDocs,\n  // functions - arithmetic\n  abs: absDocs,\n  add: addDocs,\n  cbrt: cbrtDocs,\n  ceil: ceilDocs,\n  cube: cubeDocs,\n  divide: divideDocs,\n  dotDivide: dotDivideDocs,\n  dotMultiply: dotMultiplyDocs,\n  dotPow: dotPowDocs,\n  exp: expDocs,\n  expm: expmDocs,\n  expm1: expm1Docs,\n  fix: fixDocs,\n  floor: floorDocs,\n  gcd: gcdDocs,\n  hypot: hypotDocs,\n  lcm: lcmDocs,\n  log: logDocs,\n  log2: log2Docs,\n  log1p: log1pDocs,\n  log10: log10Docs,\n  mod: modDocs,\n  multiply: multiplyDocs,\n  norm: normDocs,\n  nthRoot: nthRootDocs,\n  nthRoots: nthRootsDocs,\n  pow: powDocs,\n  round: roundDocs,\n  sign: signDocs,\n  sqrt: sqrtDocs,\n  sqrtm: sqrtmDocs,\n  square: squareDocs,\n  subtract: subtractDocs,\n  unaryMinus: unaryMinusDocs,\n  unaryPlus: unaryPlusDocs,\n  xgcd: xgcdDocs,\n  invmod: invmodDocs,\n  // functions - bitwise\n  bitAnd: bitAndDocs,\n  bitNot: bitNotDocs,\n  bitOr: bitOrDocs,\n  bitXor: bitXorDocs,\n  leftShift: leftShiftDocs,\n  rightArithShift: rightArithShiftDocs,\n  rightLogShift: rightLogShiftDocs,\n  // functions - combinatorics\n  bellNumbers: bellNumbersDocs,\n  catalan: catalanDocs,\n  composition: compositionDocs,\n  stirlingS2: stirlingS2Docs,\n  // functions - core\n  config: configDocs,\n  import: importDocs,\n  typed: typedDocs,\n  // functions - complex\n  arg: argDocs,\n  conj: conjDocs,\n  re: reDocs,\n  im: imDocs,\n  // functions - expression\n  evaluate: evaluateDocs,\n  help: helpDocs,\n  // functions - geometry\n  distance: distanceDocs,\n  intersect: intersectDocs,\n  // functions - logical\n  and: andDocs,\n  not: notDocs,\n  or: orDocs,\n  xor: xorDocs,\n  // functions - matrix\n  concat: concatDocs,\n  count: countDocs,\n  cross: crossDocs,\n  column: columnDocs,\n  ctranspose: ctransposeDocs,\n  det: detDocs,\n  diag: diagDocs,\n  diff: diffDocs,\n  dot: dotDocs,\n  getMatrixDataType: getMatrixDataTypeDocs,\n  identity: identityDocs,\n  filter: filterDocs,\n  flatten: flattenDocs,\n  forEach: forEachDocs,\n  inv: invDocs,\n  pinv: pinvDocs,\n  eigs: eigsDocs,\n  kron: kronDocs,\n  matrixFromFunction: matrixFromFunctionDocs,\n  matrixFromRows: matrixFromRowsDocs,\n  matrixFromColumns: matrixFromColumnsDocs,\n  map: mapDocs,\n  ones: onesDocs,\n  partitionSelect: partitionSelectDocs,\n  range: rangeDocs,\n  resize: resizeDocs,\n  reshape: reshapeDocs,\n  rotate: rotateDocs,\n  rotationMatrix: rotationMatrixDocs,\n  row: rowDocs,\n  size: sizeDocs,\n  sort: sortDocs,\n  squeeze: squeezeDocs,\n  subset: subsetDocs,\n  trace: traceDocs,\n  transpose: transposeDocs,\n  zeros: zerosDocs,\n  fft: fftDocs,\n  ifft: ifftDocs,\n  // functions - probability\n  combinations: combinationsDocs,\n  combinationsWithRep: combinationsWithRepDocs,\n  // distribution: distributionDocs,\n  factorial: factorialDocs,\n  gamma: gammaDocs,\n  kldivergence: kldivergenceDocs,\n  lgamma: lgammaDocs,\n  multinomial: multinomialDocs,\n  permutations: permutationsDocs,\n  pickRandom: pickRandomDocs,\n  random: randomDocs,\n  randomInt: randomIntDocs,\n  // functions - relational\n  compare: compareDocs,\n  compareNatural: compareNaturalDocs,\n  compareText: compareTextDocs,\n  deepEqual: deepEqualDocs,\n  equal: equalDocs,\n  equalText: equalTextDocs,\n  larger: largerDocs,\n  largerEq: largerEqDocs,\n  smaller: smallerDocs,\n  smallerEq: smallerEqDocs,\n  unequal: unequalDocs,\n  // functions - set\n  setCartesian: setCartesianDocs,\n  setDifference: setDifferenceDocs,\n  setDistinct: setDistinctDocs,\n  setIntersect: setIntersectDocs,\n  setIsSubset: setIsSubsetDocs,\n  setMultiplicity: setMultiplicityDocs,\n  setPowerset: setPowersetDocs,\n  setSize: setSizeDocs,\n  setSymDifference: setSymDifferenceDocs,\n  setUnion: setUnionDocs,\n  // functions - special\n  erf: erfDocs,\n  // functions - statistics\n  cumsum: cumSumDocs,\n  mad: madDocs,\n  max: maxDocs,\n  mean: meanDocs,\n  median: medianDocs,\n  min: minDocs,\n  mode: modeDocs,\n  prod: prodDocs,\n  quantileSeq: quantileSeqDocs,\n  std: stdDocs,\n  sum: sumDocs,\n  variance: varianceDocs,\n  // functions - trigonometry\n  acos: acosDocs,\n  acosh: acoshDocs,\n  acot: acotDocs,\n  acoth: acothDocs,\n  acsc: acscDocs,\n  acsch: acschDocs,\n  asec: asecDocs,\n  asech: asechDocs,\n  asin: asinDocs,\n  asinh: asinhDocs,\n  atan: atanDocs,\n  atanh: atanhDocs,\n  atan2: atan2Docs,\n  cos: cosDocs,\n  cosh: coshDocs,\n  cot: cotDocs,\n  coth: cothDocs,\n  csc: cscDocs,\n  csch: cschDocs,\n  sec: secDocs,\n  sech: sechDocs,\n  sin: sinDocs,\n  sinh: sinhDocs,\n  tan: tanDocs,\n  tanh: tanhDocs,\n  // functions - units\n  to: toDocs,\n  // functions - utils\n  clone: cloneDocs,\n  format: formatDocs,\n  bin: binDocs,\n  oct: octDocs,\n  hex: hexDocs,\n  isNaN: isNaNDocs,\n  isInteger: isIntegerDocs,\n  isNegative: isNegativeDocs,\n  isNumeric: isNumericDocs,\n  hasNumericValue: hasNumericValueDocs,\n  isPositive: isPositiveDocs,\n  isPrime: isPrimeDocs,\n  isZero: isZeroDocs,\n  print: printDocs,\n  typeOf: typeOfDocs,\n  numeric: numericDocs\n};", "import { factory } from '../../utils/factory.js';\nimport { getSafeProperty } from '../../utils/customs.js';\nimport { embeddedDocs } from '../embeddedDocs/embeddedDocs.js';\nimport { hasOwnProperty } from '../../utils/object.js';\nvar name = 'help';\nvar dependencies = ['typed', 'mathWithTransform', 'Help'];\nexport var createHelp = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    mathWithTransform,\n    Help\n  } = _ref;\n\n  /**\n   * Retrieve help on a function or data type.\n   * Help files are retrieved from the embedded documentation in math.docs.\n   *\n   * Syntax:\n   *\n   *    math.help(search)\n   *\n   * Examples:\n   *\n   *    console.log(math.help('sin').toString())\n   *    console.log(math.help(math.add).toString())\n   *    console.log(math.help(math.add).toJSON())\n   *\n   * @param {Function | string | Object} search   A function or function name\n   *                                              for which to get help\n   * @return {Help} A help object\n   */\n  return typed(name, {\n    any: function any(search) {\n      var prop;\n      var searchName = search;\n\n      if (typeof search !== 'string') {\n        for (prop in mathWithTransform) {\n          // search in functions and constants\n          if (hasOwnProperty(mathWithTransform, prop) && search === mathWithTransform[prop]) {\n            searchName = prop;\n            break;\n          }\n        }\n        /* TODO: implement help for data types\n         if (!text) {\n         // search data type\n         for (prop in math.type) {\n         if (hasOwnProperty(math, prop)) {\n         if (search === math.type[prop]) {\n         text = prop\n         break\n         }\n         }\n         }\n         }\n         */\n\n      }\n\n      var doc = getSafeProperty(embeddedDocs, searchName);\n\n      if (!doc) {\n        var searchText = typeof searchName === 'function' ? searchName.name : searchName;\n        throw new Error('No documentation found on \"' + searchText + '\"');\n      }\n\n      return new Help(doc);\n    }\n  });\n});", "import { factory } from '../../../utils/factory.js';\nvar name = 'chain';\nvar dependencies = ['typed', 'Chain'];\nexport var createChain = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    Chain\n  } = _ref;\n\n  /**\n   * Wrap any value in a chain, allowing to perform chained operations on\n   * the value.\n   *\n   * All methods available in the math.js library can be called upon the chain,\n   * and then will be evaluated with the value itself as first argument.\n   * The chain can be closed by executing `chain.done()`, which returns\n   * the final value.\n   *\n   * The chain has a number of special functions:\n   *\n   * - `done()`     Finalize the chain and return the chain's value.\n   * - `valueOf()`  The same as `done()`\n   * - `toString()` Executes `math.format()` onto the chain's value, returning\n   *                a string representation of the value.\n   *\n   * Syntax:\n   *\n   *    math.chain(value)\n   *\n   * Examples:\n   *\n   *     math.chain(3)\n   *         .add(4)\n   *         .subtract(2)\n   *         .done()     // 5\n   *\n   *     math.chain( [[1, 2], [3, 4]] )\n   *         .subset(math.index(0, 0), 8)\n   *         .multiply(3)\n   *         .done()     // [[24, 6], [9, 12]]\n   *\n   * @param {*} [value]   A value of any type on which to start a chained operation.\n   * @return {math.Chain} The created chain\n   */\n  return typed(name, {\n    '': function _() {\n      return new Chain();\n    },\n    any: function any(value) {\n      return new Chain(value);\n    }\n  });\n});", "import { createMap, isMap } from '../../utils/map.js';\nimport { isFunctionNode, isNode, isOperatorNode, isParenthesisNode, isSymbolNode } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'resolve';\nvar dependencies = ['parse', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode'];\nexport var createResolve = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    parse,\n    ConstantNode,\n    FunctionNode,\n    OperatorNode,\n    ParenthesisNode\n  } = _ref;\n\n  /**\n   * resolve(expr, scope) replaces variable nodes with their scoped values\n   *\n   * Syntax:\n   *\n   *     resolve(expr, scope)\n   *\n   * Examples:\n   *\n   *     math.resolve('x + y', {x:1, y:2})           // Node {1 + 2}\n   *     math.resolve(math.parse('x+y'), {x:1, y:2}) // Node {1 + 2}\n   *     math.simplify('x+y', {x:2, y:'x+x'}).toString()      // \"6\"\n   *\n   * See also:\n   *\n   *     simplify, evaluate\n   *\n   * @param {Node | Node[]} node\n   *     The expression tree (or trees) to be simplified\n   * @param {Object} scope\n   *     Scope specifying variables to be resolved\n   * @return {Node | Node[]} Returns `node` with variables recursively substituted.\n   * @throws {ReferenceError}\n   *     If there is a cyclic dependency among the variables in `scope`,\n   *     resolution is impossible and a ReferenceError is thrown.\n   */\n  function resolve(node, scope) {\n    var within = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();\n\n    // note `within`:\n    // `within` is not documented, since it is for internal cycle\n    // detection only\n    if (!scope) {\n      return node;\n    }\n\n    if (!isMap(scope)) {\n      scope = createMap(scope);\n    }\n\n    if (isSymbolNode(node)) {\n      if (within.has(node.name)) {\n        var variables = Array.from(within).join(', ');\n        throw new ReferenceError(\"recursive loop of variable definitions among {\".concat(variables, \"}\"));\n      }\n\n      var value = scope.get(node.name);\n\n      if (isNode(value)) {\n        var nextWithin = new Set(within);\n        nextWithin.add(node.name);\n        return resolve(value, scope, nextWithin);\n      } else if (typeof value === 'number') {\n        return parse(String(value));\n      } else if (value !== undefined) {\n        return new ConstantNode(value);\n      } else {\n        return node;\n      }\n    } else if (isOperatorNode(node)) {\n      var args = node.args.map(function (arg) {\n        return resolve(arg, scope, within);\n      });\n      return new OperatorNode(node.op, node.fn, args, node.implicit);\n    } else if (isParenthesisNode(node)) {\n      return new ParenthesisNode(resolve(node.content, scope, within));\n    } else if (isFunctionNode(node)) {\n      var _args = node.args.map(function (arg) {\n        return resolve(arg, scope, within);\n      });\n\n      return new FunctionNode(node.name, _args);\n    } // Otherwise just recursively resolve any children (might also work\n    // for some of the above special cases)\n\n\n    return node.map(child => resolve(child, scope, within));\n  }\n\n  return resolve;\n});", "function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };", "import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };", "import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };", "import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };", "import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nimport { isFunctionNode, isOperatorNode, isParenthesisNode } from '../../../utils/is.js';\nimport { factory } from '../../../utils/factory.js';\nimport { hasOwnProperty } from '../../../utils/object.js';\nvar name = 'simplifyUtil';\nvar dependencies = ['FunctionNode', 'OperatorNode', 'SymbolNode'];\nexport var createUtil = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    FunctionNode,\n    OperatorNode,\n    SymbolNode\n  } = _ref;\n  // TODO commutative/associative properties rely on the arguments\n  // e.g. multiply is not commutative for matrices\n  // The properties should be calculated from an argument to simplify, or possibly something in math.config\n  // the other option is for typed() to specify a return type so that we can evaluate the type of arguments\n\n  /* So that properties of an operator fit on one line: */\n  var T = true;\n  var F = false;\n  var defaultName = 'defaultF';\n  var defaultContext = {\n    /*      */\n    add: {\n      trivial: T,\n      total: T,\n      commutative: T,\n      associative: T\n    },\n\n    /**/\n    unaryPlus: {\n      trivial: T,\n      total: T,\n      commutative: T,\n      associative: T\n    },\n\n    /* */\n    subtract: {\n      trivial: F,\n      total: T,\n      commutative: F,\n      associative: F\n    },\n\n    /* */\n    multiply: {\n      trivial: T,\n      total: T,\n      commutative: T,\n      associative: T\n    },\n\n    /*   */\n    divide: {\n      trivial: F,\n      total: T,\n      commutative: F,\n      associative: F\n    },\n\n    /*    */\n    paren: {\n      trivial: T,\n      total: T,\n      commutative: T,\n      associative: F\n    },\n\n    /* */\n    defaultF: {\n      trivial: F,\n      total: T,\n      commutative: F,\n      associative: F\n    }\n  };\n  var realContext = {\n    divide: {\n      total: F\n    },\n    log: {\n      total: F\n    }\n  };\n  var positiveContext = {\n    subtract: {\n      total: F\n    },\n    abs: {\n      trivial: T\n    },\n    log: {\n      total: T\n    }\n  };\n\n  function hasProperty(nodeOrName, property) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultContext;\n    var name = defaultName;\n\n    if (typeof nodeOrName === 'string') {\n      name = nodeOrName;\n    } else if (isOperatorNode(nodeOrName)) {\n      name = nodeOrName.fn.toString();\n    } else if (isFunctionNode(nodeOrName)) {\n      name = nodeOrName.name;\n    } else if (isParenthesisNode(nodeOrName)) {\n      name = 'paren';\n    }\n\n    if (hasOwnProperty(context, name)) {\n      var properties = context[name];\n\n      if (hasOwnProperty(properties, property)) {\n        return properties[property];\n      }\n\n      if (hasOwnProperty(defaultContext, name)) {\n        return defaultContext[name][property];\n      }\n    }\n\n    if (hasOwnProperty(context, defaultName)) {\n      var _properties = context[defaultName];\n\n      if (hasOwnProperty(_properties, property)) {\n        return _properties[property];\n      }\n\n      return defaultContext[defaultName][property];\n    }\n    /* name not found in context and context has no global default */\n\n    /* So use default context. */\n\n\n    if (hasOwnProperty(defaultContext, name)) {\n      var _properties2 = defaultContext[name];\n\n      if (hasOwnProperty(_properties2, property)) {\n        return _properties2[property];\n      }\n    }\n\n    return defaultContext[defaultName][property];\n  }\n\n  function isCommutative(node) {\n    var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultContext;\n    return hasProperty(node, 'commutative', context);\n  }\n\n  function isAssociative(node) {\n    var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultContext;\n    return hasProperty(node, 'associative', context);\n  }\n  /**\n   * Merge the given contexts, with primary overriding secondary\n   * wherever they might conflict\n   */\n\n\n  function mergeContext(primary, secondary) {\n    var merged = _objectSpread({}, primary);\n\n    for (var prop in secondary) {\n      if (hasOwnProperty(primary, prop)) {\n        merged[prop] = _objectSpread(_objectSpread({}, secondary[prop]), primary[prop]);\n      } else {\n        merged[prop] = secondary[prop];\n      }\n    }\n\n    return merged;\n  }\n  /**\n   * Flatten all associative operators in an expression tree.\n   * Assumes parentheses have already been removed.\n   */\n\n\n  function flatten(node, context) {\n    if (!node.args || node.args.length === 0) {\n      return node;\n    }\n\n    node.args = allChildren(node, context);\n\n    for (var i = 0; i < node.args.length; i++) {\n      flatten(node.args[i], context);\n    }\n  }\n  /**\n   * Get the children of a node as if it has been flattened.\n   * TODO implement for FunctionNodes\n   */\n\n\n  function allChildren(node, context) {\n    var op;\n    var children = [];\n\n    var findChildren = function findChildren(node) {\n      for (var i = 0; i < node.args.length; i++) {\n        var child = node.args[i];\n\n        if (isOperatorNode(child) && op === child.op) {\n          findChildren(child);\n        } else {\n          children.push(child);\n        }\n      }\n    };\n\n    if (isAssociative(node, context)) {\n      op = node.op;\n      findChildren(node);\n      return children;\n    } else {\n      return node.args;\n    }\n  }\n  /**\n   *  Unflatten all flattened operators to a right-heavy binary tree.\n   */\n\n\n  function unflattenr(node, context) {\n    if (!node.args || node.args.length === 0) {\n      return;\n    }\n\n    var makeNode = createMakeNodeFunction(node);\n    var l = node.args.length;\n\n    for (var i = 0; i < l; i++) {\n      unflattenr(node.args[i], context);\n    }\n\n    if (l > 2 && isAssociative(node, context)) {\n      var curnode = node.args.pop();\n\n      while (node.args.length > 0) {\n        curnode = makeNode([node.args.pop(), curnode]);\n      }\n\n      node.args = curnode.args;\n    }\n  }\n  /**\n   *  Unflatten all flattened operators to a left-heavy binary tree.\n   */\n\n\n  function unflattenl(node, context) {\n    if (!node.args || node.args.length === 0) {\n      return;\n    }\n\n    var makeNode = createMakeNodeFunction(node);\n    var l = node.args.length;\n\n    for (var i = 0; i < l; i++) {\n      unflattenl(node.args[i], context);\n    }\n\n    if (l > 2 && isAssociative(node, context)) {\n      var curnode = node.args.shift();\n\n      while (node.args.length > 0) {\n        curnode = makeNode([curnode, node.args.shift()]);\n      }\n\n      node.args = curnode.args;\n    }\n  }\n\n  function createMakeNodeFunction(node) {\n    if (isOperatorNode(node)) {\n      return function (args) {\n        try {\n          return new OperatorNode(node.op, node.fn, args, node.implicit);\n        } catch (err) {\n          console.error(err);\n          return [];\n        }\n      };\n    } else {\n      return function (args) {\n        return new FunctionNode(new SymbolNode(node.name), args);\n      };\n    }\n  }\n\n  return {\n    createMakeNodeFunction,\n    hasProperty,\n    isCommutative,\n    isAssociative,\n    mergeContext,\n    flatten,\n    allChildren,\n    unflattenr,\n    unflattenl,\n    defaultContext,\n    realContext,\n    positiveContext\n  };\n});", "// TODO this could be improved by simplifying seperated constants under associative and commutative operators\nimport { isFraction, isMatrix, isNode, isArrayNode, isConstantNode, isIndexNode, isObjectNode, isOperatorNode } from '../../../utils/is.js';\nimport { factory } from '../../../utils/factory.js';\nimport { createUtil } from './util.js';\nimport { noBignumber, noFraction } from '../../../utils/noop.js';\nvar name = 'simplifyConstant';\nvar dependencies = ['typed', 'config', 'mathWithTransform', 'matrix', '?fraction', '?bignumber', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode'];\nexport var createSimplifyConstant = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    mathWithTransform,\n    matrix,\n    fraction,\n    bignumber,\n    AccessorNode,\n    ArrayNode,\n    ConstantNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    SymbolNode\n  } = _ref;\n  var {\n    isCommutative,\n    isAssociative,\n    allChildren,\n    createMakeNodeFunction\n  } = createUtil({\n    FunctionNode,\n    OperatorNode,\n    SymbolNode\n  });\n\n  function simplifyConstant(expr, options) {\n    return _ensureNode(foldFraction(expr, options));\n  }\n\n  function _removeFractions(thing) {\n    if (isFraction(thing)) {\n      return thing.valueOf();\n    }\n\n    if (thing instanceof Array) {\n      return thing.map(_removeFractions);\n    }\n\n    if (isMatrix(thing)) {\n      return matrix(_removeFractions(thing.valueOf()));\n    }\n\n    return thing;\n  }\n\n  function _eval(fnname, args, options) {\n    try {\n      return mathWithTransform[fnname].apply(null, args);\n    } catch (ignore) {\n      // sometimes the implicit type conversion causes the evaluation to fail, so we'll try again after removing Fractions\n      args = args.map(_removeFractions);\n      return _toNumber(mathWithTransform[fnname].apply(null, args), options);\n    }\n  }\n\n  var _toNode = typed({\n    Fraction: _fractionToNode,\n    number: function number(n) {\n      if (n < 0) {\n        return unaryMinusNode(new ConstantNode(-n));\n      }\n\n      return new ConstantNode(n);\n    },\n    BigNumber: function BigNumber(n) {\n      if (n < 0) {\n        return unaryMinusNode(new ConstantNode(-n));\n      }\n\n      return new ConstantNode(n); // old parameters: (n.toString(), 'number')\n    },\n    Complex: function Complex(s) {\n      throw new Error('Cannot convert Complex number to Node');\n    },\n    string: function string(s) {\n      return new ConstantNode(s);\n    },\n    Matrix: function Matrix(m) {\n      return new ArrayNode(m.valueOf().map(e => _toNode(e)));\n    }\n  });\n\n  function _ensureNode(thing) {\n    if (isNode(thing)) {\n      return thing;\n    }\n\n    return _toNode(thing);\n  } // convert a number to a fraction only if it can be expressed exactly,\n  // and when both numerator and denominator are small enough\n\n\n  function _exactFraction(n, options) {\n    var exactFractions = options && options.exactFractions !== false;\n\n    if (exactFractions && isFinite(n) && fraction) {\n      var f = fraction(n);\n      var fractionsLimit = options && typeof options.fractionsLimit === 'number' ? options.fractionsLimit : Infinity; // no limit by default\n\n      if (f.valueOf() === n && f.n < fractionsLimit && f.d < fractionsLimit) {\n        return f;\n      }\n    }\n\n    return n;\n  } // Convert numbers to a preferred number type in preference order: Fraction, number, Complex\n  // BigNumbers are left alone\n\n\n  var _toNumber = typed({\n    'string, Object': function stringObject(s, options) {\n      if (config.number === 'BigNumber') {\n        if (bignumber === undefined) {\n          noBignumber();\n        }\n\n        return bignumber(s);\n      } else if (config.number === 'Fraction') {\n        if (fraction === undefined) {\n          noFraction();\n        }\n\n        return fraction(s);\n      } else {\n        var n = parseFloat(s);\n        return _exactFraction(n, options);\n      }\n    },\n    'Fraction, Object': function FractionObject(s, options) {\n      return s;\n    },\n    // we don't need options here\n    'BigNumber, Object': function BigNumberObject(s, options) {\n      return s;\n    },\n    // we don't need options here\n    'number, Object': function numberObject(s, options) {\n      return _exactFraction(s, options);\n    },\n    'Complex, Object': function ComplexObject(s, options) {\n      if (s.im !== 0) {\n        return s;\n      }\n\n      return _exactFraction(s.re, options);\n    },\n    'Matrix, Object': function MatrixObject(s, options) {\n      return matrix(_exactFraction(s.valueOf()));\n    },\n    'Array, Object': function ArrayObject(s, options) {\n      return s.map(_exactFraction);\n    }\n  });\n\n  function unaryMinusNode(n) {\n    return new OperatorNode('-', 'unaryMinus', [n]);\n  }\n\n  function _fractionToNode(f) {\n    var n;\n    var vn = f.s * f.n;\n\n    if (vn < 0) {\n      n = new OperatorNode('-', 'unaryMinus', [new ConstantNode(-vn)]);\n    } else {\n      n = new ConstantNode(vn);\n    }\n\n    if (f.d === 1) {\n      return n;\n    }\n\n    return new OperatorNode('/', 'divide', [n, new ConstantNode(f.d)]);\n  }\n  /* Handles constant indexing of ArrayNodes, matrices, and ObjectNodes */\n\n\n  function _foldAccessor(obj, index, options) {\n    if (!isIndexNode(index)) {\n      // don't know what to do with that...\n      return new AccessorNode(_ensureNode(obj), _ensureNode(index));\n    }\n\n    if (isArrayNode(obj) || isMatrix(obj)) {\n      var remainingDims = Array.from(index.dimensions);\n      /* We will resolve constant indices one at a time, looking\n       * just in the first or second dimensions because (a) arrays\n       * of more than two dimensions are likely rare, and (b) pulling\n       * out the third or higher dimension would be pretty intricate.\n       * The price is that we miss simplifying [..3d array][x,y,1]\n       */\n\n      while (remainingDims.length > 0) {\n        if (isConstantNode(remainingDims[0]) && typeof remainingDims[0].value !== 'string') {\n          var first = _toNumber(remainingDims.shift().value, options);\n\n          if (isArrayNode(obj)) {\n            obj = obj.items[first - 1];\n          } else {\n            // matrix\n            obj = obj.valueOf()[first - 1];\n\n            if (obj instanceof Array) {\n              obj = matrix(obj);\n            }\n          }\n        } else if (remainingDims.length > 1 && isConstantNode(remainingDims[1]) && typeof remainingDims[1].value !== 'string') {\n          var second = _toNumber(remainingDims[1].value, options);\n\n          var tryItems = [];\n          var fromItems = isArrayNode(obj) ? obj.items : obj.valueOf();\n\n          for (var item of fromItems) {\n            if (isArrayNode(item)) {\n              tryItems.push(item.items[second - 1]);\n            } else if (isMatrix(obj)) {\n              tryItems.push(item[second - 1]);\n            } else {\n              break;\n            }\n          }\n\n          if (tryItems.length === fromItems.length) {\n            if (isArrayNode(obj)) {\n              obj = new ArrayNode(tryItems);\n            } else {\n              // matrix\n              obj = matrix(tryItems);\n            }\n\n            remainingDims.splice(1, 1);\n          } else {\n            // extracting slice along 2nd dimension failed, give up\n            break;\n          }\n        } else {\n          // neither 1st or 2nd dimension is constant, give up\n          break;\n        }\n      }\n\n      if (remainingDims.length === index.dimensions.length) {\n        /* No successful constant indexing */\n        return new AccessorNode(_ensureNode(obj), index);\n      }\n\n      if (remainingDims.length > 0) {\n        /* Indexed some but not all dimensions */\n        index = new IndexNode(remainingDims);\n        return new AccessorNode(_ensureNode(obj), index);\n      }\n      /* All dimensions were constant, access completely resolved */\n\n\n      return obj;\n    }\n\n    if (isObjectNode(obj) && index.dimensions.length === 1 && isConstantNode(index.dimensions[0])) {\n      var key = index.dimensions[0].value;\n\n      if (key in obj.properties) {\n        return obj.properties[key];\n      }\n\n      return new ConstantNode(); // undefined\n    }\n    /* Don't know how to index this sort of obj, at least not with this index */\n\n\n    return new AccessorNode(_ensureNode(obj), index);\n  }\n  /*\n   * Create a binary tree from a list of Fractions and Nodes.\n   * Tries to fold Fractions by evaluating them until the first Node in the list is hit, so\n   * `args` should be sorted to have the Fractions at the start (if the operator is commutative).\n   * @param args - list of Fractions and Nodes\n   * @param fn - evaluator for the binary operation evaluator that accepts two Fractions\n   * @param makeNode - creates a binary OperatorNode/FunctionNode from a list of child Nodes\n   * if args.length is 1, returns args[0]\n   * @return - Either a Node representing a binary expression or Fraction\n   */\n\n\n  function foldOp(fn, args, makeNode, options) {\n    return args.reduce(function (a, b) {\n      if (!isNode(a) && !isNode(b)) {\n        try {\n          return _eval(fn, [a, b], options);\n        } catch (ignoreandcontinue) {}\n\n        a = _toNode(a);\n        b = _toNode(b);\n      } else if (!isNode(a)) {\n        a = _toNode(a);\n      } else if (!isNode(b)) {\n        b = _toNode(b);\n      }\n\n      return makeNode([a, b]);\n    });\n  } // destroys the original node and returns a folded one\n\n\n  function foldFraction(node, options) {\n    switch (node.type) {\n      case 'SymbolNode':\n        return node;\n\n      case 'ConstantNode':\n        switch (typeof node.value) {\n          case 'number':\n            return _toNumber(node.value, options);\n\n          case 'string':\n            return node.value;\n\n          default:\n            if (!isNaN(node.value)) return _toNumber(node.value, options);\n        }\n\n        return node;\n\n      case 'FunctionNode':\n        if (mathWithTransform[node.name] && mathWithTransform[node.name].rawArgs) {\n          return node;\n        }\n\n        {\n          // Process operators as OperatorNode\n          var operatorFunctions = ['add', 'multiply'];\n\n          if (operatorFunctions.indexOf(node.name) === -1) {\n            var args = node.args.map(arg => foldFraction(arg, options)); // If all args are numbers\n\n            if (!args.some(isNode)) {\n              try {\n                return _eval(node.name, args, options);\n              } catch (ignoreandcontinue) {}\n            } // Size of a matrix does not depend on entries\n\n\n            if (node.name === 'size' && args.length === 1 && isArrayNode(args[0])) {\n              var sz = [];\n              var section = args[0];\n\n              while (isArrayNode(section)) {\n                sz.push(section.items.length);\n                section = section.items[0];\n              }\n\n              return matrix(sz);\n            } // Convert all args to nodes and construct a symbolic function call\n\n\n            return new FunctionNode(node.name, args.map(_ensureNode));\n          } else {// treat as operator\n          }\n        }\n\n      /* falls through */\n\n      case 'OperatorNode':\n        {\n          var fn = node.fn.toString();\n\n          var _args;\n\n          var res;\n          var makeNode = createMakeNodeFunction(node);\n\n          if (isOperatorNode(node) && node.isUnary()) {\n            _args = [foldFraction(node.args[0], options)];\n\n            if (!isNode(_args[0])) {\n              res = _eval(fn, _args, options);\n            } else {\n              res = makeNode(_args);\n            }\n          } else if (isAssociative(node, options.context)) {\n            _args = allChildren(node, options.context);\n            _args = _args.map(arg => foldFraction(arg, options));\n\n            if (isCommutative(fn, options.context)) {\n              // commutative binary operator\n              var consts = [];\n              var vars = [];\n\n              for (var i = 0; i < _args.length; i++) {\n                if (!isNode(_args[i])) {\n                  consts.push(_args[i]);\n                } else {\n                  vars.push(_args[i]);\n                }\n              }\n\n              if (consts.length > 1) {\n                res = foldOp(fn, consts, makeNode, options);\n                vars.unshift(res);\n                res = foldOp(fn, vars, makeNode, options);\n              } else {\n                // we won't change the children order since it's not neccessary\n                res = foldOp(fn, _args, makeNode, options);\n              }\n            } else {\n              // non-commutative binary operator\n              res = foldOp(fn, _args, makeNode, options);\n            }\n          } else {\n            // non-associative binary operator\n            _args = node.args.map(arg => foldFraction(arg, options));\n            res = foldOp(fn, _args, makeNode, options);\n          }\n\n          return res;\n        }\n\n      case 'ParenthesisNode':\n        // remove the uneccessary parenthesis\n        return foldFraction(node.content, options);\n\n      case 'AccessorNode':\n        return _foldAccessor(foldFraction(node.object, options), foldFraction(node.index, options), options);\n\n      case 'ArrayNode':\n        {\n          var foldItems = node.items.map(item => foldFraction(item, options));\n\n          if (foldItems.some(isNode)) {\n            return new ArrayNode(foldItems.map(_ensureNode));\n          }\n          /* All literals -- return a Matrix so we can operate on it */\n\n\n          return matrix(foldItems);\n        }\n\n      case 'IndexNode':\n        {\n          return new IndexNode(node.dimensions.map(n => simplifyConstant(n, options)));\n        }\n\n      case 'ObjectNode':\n        {\n          var foldProps = {};\n\n          for (var prop in node.properties) {\n            foldProps[prop] = simplifyConstant(node.properties[prop], options);\n          }\n\n          return new ObjectNode(foldProps);\n        }\n\n      case 'AssignmentNode':\n      /* falls through */\n\n      case 'BlockNode':\n      /* falls through */\n\n      case 'FunctionAssignmentNode':\n      /* falls through */\n\n      case 'RangeNode':\n      /* falls through */\n\n      case 'ConditionalNode':\n      /* falls through */\n\n      default:\n        throw new Error(\"Unimplemented node type in simplifyConstant: \".concat(node.type));\n    }\n  }\n\n  return simplifyConstant;\n});", "import { isConstantNode, isParenthesisNode } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nimport { createUtil } from './simplify/util.js';\nimport { createSimplifyConstant } from './simplify/simplifyConstant.js';\nimport { hasOwnProperty } from '../../utils/object.js';\nimport { createEmptyMap, createMap } from '../../utils/map.js';\nvar name = 'simplify';\nvar dependencies = ['config', 'typed', 'parse', 'add', 'subtract', 'multiply', 'divide', 'pow', 'isZero', 'equal', 'resolve', 'simplifyCore', '?fraction', '?bignumber', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];\nexport var createSimplify = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    config,\n    typed,\n    parse,\n    add,\n    subtract,\n    multiply,\n    divide,\n    pow,\n    isZero,\n    equal,\n    resolve,\n    simplifyCore,\n    fraction,\n    bignumber,\n    mathWithTransform,\n    matrix,\n    AccessorNode,\n    ArrayNode,\n    ConstantNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    ParenthesisNode,\n    SymbolNode\n  } = _ref;\n  var simplifyConstant = createSimplifyConstant({\n    typed,\n    config,\n    mathWithTransform,\n    matrix,\n    fraction,\n    bignumber,\n    AccessorNode,\n    ArrayNode,\n    ConstantNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    SymbolNode\n  });\n  var {\n    hasProperty,\n    isCommutative,\n    isAssociative,\n    mergeContext,\n    flatten,\n    unflattenr,\n    unflattenl,\n    createMakeNodeFunction,\n    defaultContext,\n    realContext,\n    positiveContext\n  } = createUtil({\n    FunctionNode,\n    OperatorNode,\n    SymbolNode\n  });\n  /**\n   * Simplify an expression tree.\n   *\n   * A list of rules are applied to an expression, repeating over the list until\n   * no further changes are made.\n   * It's possible to pass a custom set of rules to the function as second\n   * argument. A rule can be specified as an object, string, or function:\n   *\n   *     const rules = [\n   *       { l: 'n1*n3 + n2*n3', r: '(n1+n2)*n3' },\n   *       'n1*n3 + n2*n3 -> (n1+n2)*n3',\n   *       function (node) {\n   *         // ... return a new node or return the node unchanged\n   *         return node\n   *       }\n   *     ]\n   *\n   * String and object rules consist of a left and right pattern. The left is\n   * used to match against the expression and the right determines what matches\n   * are replaced with. The main difference between a pattern and a normal\n   * expression is that variables starting with the following characters are\n   * interpreted as wildcards:\n   *\n   * - 'n' - matches any Node\n   * - 'c' - matches any ConstantNode\n   * - 'v' - matches any Node that is not a ConstantNode\n   *\n   * The default list of rules is exposed on the function as `simplify.rules`\n   * and can be used as a basis to built a set of custom rules.\n   *\n   * To specify a rule as a string, separate the left and right pattern by '->'\n   * When specifying a rule as an object, the following keys are meaningful:\n   * - l - the left pattern\n   * - r - the right pattern\n   * - s - in lieu of l and r, the string form that is broken at -> to give them\n   * - repeat - whether to repeat this rule until the expression stabilizes\n   * - assuming - gives a context object, as in the 'context' option to\n   *     simplify. Every property in the context object must match the current\n   *     context in order, or else the rule will not be applied.\n   * - imposeContext - gives a context object, as in the 'context' option to\n   *     simplify. Any settings specified will override the incoming context\n   *     for all matches of this rule.\n   *\n   * For more details on the theory, see:\n   *\n   * - [Strategies for simplifying math expressions (Stackoverflow)](https://stackoverflow.com/questions/7540227/strategies-for-simplifying-math-expressions)\n   * - [Symbolic computation - Simplification (Wikipedia)](https://en.wikipedia.org/wiki/Symbolic_computation#Simplification)\n   *\n   *  An optional `options` argument can be passed as last argument of `simplify`.\n   *  Currently available options (defaults in parentheses):\n   *  - `consoleDebug` (false): whether to write the expression being simplified\n   *    and any changes to it, along with the rule responsible, to console\n   *  - `context` (simplify.defaultContext): an object giving properties of\n   *    each operator, which determine what simplifications are allowed. The\n   *    currently meaningful properties are commutative, associative,\n   *    total (whether the operation is defined for all arguments), and\n   *    trivial (whether the operation applied to a single argument leaves\n   *    that argument unchanged). The default context is very permissive and\n   *    allows almost all simplifications. Only properties differing from\n   *    the default need to be specified; the default context is used as a\n   *    fallback. Additional contexts `simplify.realContext` and\n   *    `simplify.positiveContext` are supplied to cause simplify to perform\n   *    just simplifications guaranteed to preserve all values of the expression\n   *    assuming all variables and subexpressions are real numbers or\n   *    positive real numbers, respectively. (Note that these are in some cases\n   *    more restrictive than the default context; for example, the default\n   *    context will allow `x/x` to simplify to 1, whereas\n   *    `simplify.realContext` will not, as `0/0` is not equal to 1.)\n   *  - `exactFractions` (true): whether to try to convert all constants to\n   *    exact rational numbers.\n   *  - `fractionsLimit` (10000): when `exactFractions` is true, constants will\n   *    be expressed as fractions only when both numerator and denominator\n   *    are smaller than `fractionsLimit`.\n   *\n   * Syntax:\n   *\n   *     simplify(expr)\n   *     simplify(expr, rules)\n   *     simplify(expr, rules)\n   *     simplify(expr, rules, scope)\n   *     simplify(expr, rules, scope, options)\n   *     simplify(expr, scope)\n   *     simplify(expr, scope, options)\n   *\n   * Examples:\n   *\n   *     math.simplify('2 * 1 * x ^ (2 - 1)')      // Node \"2 * x\"\n   *     math.simplify('2 * 3 * x', {x: 4})        // Node \"24\"\n   *     const f = math.parse('2 * 1 * x ^ (2 - 1)')\n   *     math.simplify(f)                          // Node \"2 * x\"\n   *     math.simplify('0.4 * x', {}, {exactFractions: true})  // Node \"x * 2 / 5\"\n   *     math.simplify('0.4 * x', {}, {exactFractions: false}) // Node \"0.4 * x\"\n   *\n   * See also:\n   *\n   *     simplifyCore, derivative, evaluate, parse, rationalize, resolve\n   *\n   * @param {Node | string} expr\n   *            The expression to be simplified\n   * @param {Array<{l:string, r: string} | string | function>} [rules]\n   *            Optional list with custom rules\n   * @return {Node} Returns the simplified form of `expr`\n   */\n\n  var simplify = typed('simplify', {\n    string: function string(expr) {\n      return this(parse(expr), this.rules, createEmptyMap(), {});\n    },\n    'string, Map | Object': function stringMapObject(expr, scope) {\n      return this(parse(expr), this.rules, scope, {});\n    },\n    'string, Map | Object, Object': function stringMapObjectObject(expr, scope, options) {\n      return this(parse(expr), this.rules, scope, options);\n    },\n    'string, Array': function stringArray(expr, rules) {\n      return this(parse(expr), rules, createEmptyMap(), {});\n    },\n    'string, Array, Map | Object': function stringArrayMapObject(expr, rules, scope) {\n      return this(parse(expr), rules, scope, {});\n    },\n    'string, Array, Map | Object, Object': function stringArrayMapObjectObject(expr, rules, scope, options) {\n      return this(parse(expr), rules, scope, options);\n    },\n    'Node, Map | Object': function NodeMapObject(expr, scope) {\n      return this(expr, this.rules, scope, {});\n    },\n    'Node, Map | Object, Object': function NodeMapObjectObject(expr, scope, options) {\n      return this(expr, this.rules, scope, options);\n    },\n    Node: function Node(expr) {\n      return this(expr, this.rules, createEmptyMap(), {});\n    },\n    'Node, Array': function NodeArray(expr, rules) {\n      return this(expr, rules, createEmptyMap(), {});\n    },\n    'Node, Array, Map | Object': function NodeArrayMapObject(expr, rules, scope) {\n      return this(expr, rules, scope, {});\n    },\n    'Node, Array, Object, Object': function NodeArrayObjectObject(expr, rules, scope, options) {\n      return this(expr, rules, createMap(scope), options);\n    },\n    'Node, Array, Map, Object': function NodeArrayMapObject(expr, rules, scope, options) {\n      var debug = options.consoleDebug;\n      rules = _buildRules(rules, options.context);\n      var res = resolve(expr, scope);\n      res = removeParens(res);\n      var visited = {};\n      var str = res.toString({\n        parenthesis: 'all'\n      });\n\n      while (!visited[str]) {\n        visited[str] = true;\n        _lastsym = 0; // counter for placeholder symbols\n\n        var laststr = str;\n        if (debug) console.log('Working on: ', str);\n\n        for (var i = 0; i < rules.length; i++) {\n          var rulestr = '';\n\n          if (typeof rules[i] === 'function') {\n            res = rules[i](res, options);\n            if (debug) rulestr = rules[i].name;\n          } else {\n            flatten(res, options.context);\n            res = applyRule(res, rules[i], options.context);\n\n            if (debug) {\n              rulestr = \"\".concat(rules[i].l.toString(), \" -> \").concat(rules[i].r.toString());\n            }\n          }\n\n          if (debug) {\n            var newstr = res.toString({\n              parenthesis: 'all'\n            });\n\n            if (newstr !== laststr) {\n              console.log('Applying', rulestr, 'produced', newstr);\n              laststr = newstr;\n            }\n          }\n          /* Use left-heavy binary tree internally,\n           * since custom rule functions may expect it\n           */\n\n\n          unflattenl(res, options.context);\n        }\n\n        str = res.toString({\n          parenthesis: 'all'\n        });\n      }\n\n      return res;\n    }\n  });\n  simplify.defaultContext = defaultContext;\n  simplify.realContext = realContext;\n  simplify.positiveContext = positiveContext;\n\n  function removeParens(node) {\n    return node.transform(function (node, path, parent) {\n      return isParenthesisNode(node) ? removeParens(node.content) : node;\n    });\n  } // All constants that are allowed in rules\n\n\n  var SUPPORTED_CONSTANTS = {\n    true: true,\n    false: true,\n    e: true,\n    i: true,\n    Infinity: true,\n    LN2: true,\n    LN10: true,\n    LOG2E: true,\n    LOG10E: true,\n    NaN: true,\n    phi: true,\n    pi: true,\n    SQRT1_2: true,\n    SQRT2: true,\n    tau: true // null: false,\n    // undefined: false,\n    // version: false,\n\n  }; // Array of strings, used to build the ruleSet.\n  // Each l (left side) and r (right side) are parsed by\n  // the expression parser into a node tree.\n  // Left hand sides are matched to subtrees within the\n  // expression to be parsed and replaced with the right\n  // hand side.\n  // TODO: Add support for constraints on constants (either in the form of a '=' expression or a callback [callback allows things like comparing symbols alphabetically])\n  // To evaluate lhs constants for rhs constants, use: { l: 'c1+c2', r: 'c3', evaluate: 'c3 = c1 + c2' }. Multiple assignments are separated by ';' in block format.\n  // It is possible to get into an infinite loop with conflicting rules\n\n  simplify.rules = [simplifyCore, // { l: 'n+0', r: 'n' },     // simplifyCore\n  // { l: 'n^0', r: '1' },     // simplifyCore\n  // { l: '0*n', r: '0' },     // simplifyCore\n  // { l: 'n/n', r: '1'},      // simplifyCore\n  // { l: 'n^1', r: 'n' },     // simplifyCore\n  // { l: '+n1', r:'n1' },     // simplifyCore\n  // { l: 'n--n1', r:'n+n1' }, // simplifyCore\n  {\n    l: 'log(e)',\n    r: '1'\n  }, // temporary rules\n  // Note initially we tend constants to the right because like-term\n  // collection prefers the left, and we would rather collect nonconstants\n  {\n    s: 'n-n1 -> n+-n1',\n    // temporarily replace 'subtract' so we can further flatten the 'add' operator\n    assuming: {\n      subtract: {\n        total: true\n      }\n    }\n  }, {\n    s: 'n-n -> 0',\n    // partial alternative when we can't always subtract\n    assuming: {\n      subtract: {\n        total: false\n      }\n    }\n  }, {\n    s: '-(c*v) -> v * (-c)',\n    // make non-constant terms positive\n    assuming: {\n      multiply: {\n        commutative: true\n      },\n      subtract: {\n        total: true\n      }\n    }\n  }, {\n    s: '-(c*v) -> (-c) * v',\n    // non-commutative version, part 1\n    assuming: {\n      multiply: {\n        commutative: false\n      },\n      subtract: {\n        total: true\n      }\n    }\n  }, {\n    s: '-(v*c) -> v * (-c)',\n    // non-commutative version, part 2\n    assuming: {\n      multiply: {\n        commutative: false\n      },\n      subtract: {\n        total: true\n      }\n    }\n  }, {\n    l: '-(n1/n2)',\n    r: '-n1/n2'\n  }, {\n    l: '-v',\n    r: 'v * (-1)'\n  }, // finish making non-constant terms positive\n  {\n    l: '(n1 + n2)*(-1)',\n    r: 'n1*(-1) + n2*(-1)',\n    repeat: true\n  }, // expand negations to achieve as much sign cancellation as possible\n  {\n    l: 'n/n1^n2',\n    r: 'n*n1^-n2'\n  }, // temporarily replace 'divide' so we can further flatten the 'multiply' operator\n  {\n    l: 'n/n1',\n    r: 'n*n1^-1'\n  }, {\n    s: '(n1*n2)^n3 -> n1^n3 * n2^n3',\n    assuming: {\n      multiply: {\n        commutative: true\n      }\n    }\n  }, {\n    s: '(n1*n2)^(-1) -> n2^(-1) * n1^(-1)',\n    assuming: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, // expand nested exponentiation\n  {\n    s: '(n ^ n1) ^ n2 -> n ^ (n1 * n2)',\n    assuming: {\n      divide: {\n        total: true\n      }\n    } // 1/(1/n) = n needs 1/n to exist\n\n  }, // collect like factors; into a sum, only do this for nonconstants\n  {\n    l: ' v   * ( v   * n1 + n2)',\n    r: 'v^2       * n1 +  v   * n2'\n  }, {\n    s: ' v   * (v^n4 * n1 + n2)   ->  v^(1+n4)  * n1 +  v   * n2',\n    assuming: {\n      divide: {\n        total: true\n      }\n    } // v*1/v = v^(1+-1) needs 1/v\n\n  }, {\n    s: 'v^n3 * ( v   * n1 + n2)   ->  v^(n3+1)  * n1 + v^n3 * n2',\n    assuming: {\n      divide: {\n        total: true\n      }\n    }\n  }, {\n    s: 'v^n3 * (v^n4 * n1 + n2)   ->  v^(n3+n4) * n1 + v^n3 * n2',\n    assuming: {\n      divide: {\n        total: true\n      }\n    }\n  }, {\n    l: 'n*n',\n    r: 'n^2'\n  }, {\n    s: 'n * n^n1 -> n^(n1+1)',\n    assuming: {\n      divide: {\n        total: true\n      }\n    } // n*1/n = n^(-1+1) needs 1/n\n\n  }, {\n    s: 'n^n1 * n^n2 -> n^(n1+n2)',\n    assuming: {\n      divide: {\n        total: true\n      }\n    } // ditto for n^2*1/n^2\n\n  }, // Unfortunately, to deal with more complicated cancellations, it\n  // becomes necessary to simplify constants twice per pass. It's not\n  // terribly expensive compared to matching rules, so this should not\n  // pose a performance problem.\n  simplifyConstant, // First: before collecting like terms\n  // collect like terms\n  {\n    s: 'n+n -> 2*n',\n    assuming: {\n      add: {\n        total: true\n      }\n    } // 2 = 1 + 1 needs to exist\n\n  }, {\n    l: 'n+-n',\n    r: '0'\n  }, {\n    l: 'v*n + v',\n    r: 'v*(n+1)'\n  }, // NOTE: leftmost position is special:\n  {\n    l: 'n3*n1 + n3*n2',\n    r: 'n3*(n1+n2)'\n  }, // All sub-monomials tried there.\n  {\n    l: 'n3^(-n4)*n1 +   n3  * n2',\n    r: 'n3^(-n4)*(n1 + n3^(n4+1) *n2)'\n  }, {\n    l: 'n3^(-n4)*n1 + n3^n5 * n2',\n    r: 'n3^(-n4)*(n1 + n3^(n4+n5)*n2)'\n  }, {\n    s: 'n*v + v -> (n+1)*v',\n    // noncommutative additional cases\n    assuming: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, {\n    s: 'n1*n3 + n2*n3 -> (n1+n2)*n3',\n    assuming: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, {\n    s: 'n1*n3^(-n4) + n2 * n3    -> (n1 + n2*n3^(n4 +  1))*n3^(-n4)',\n    assuming: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, {\n    s: 'n1*n3^(-n4) + n2 * n3^n5 -> (n1 + n2*n3^(n4 + n5))*n3^(-n4)',\n    assuming: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, {\n    l: 'n*c + c',\n    r: '(n+1)*c'\n  }, {\n    s: 'c*n + c -> c*(n+1)',\n    assuming: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, simplifyConstant, // Second: before returning expressions to \"standard form\"\n  // make factors positive (and undo 'make non-constant terms positive')\n  {\n    s: '(-n)*n1 -> -(n*n1)',\n    assuming: {\n      subtract: {\n        total: true\n      }\n    }\n  }, {\n    s: 'n1*(-n) -> -(n1*n)',\n    // in case * non-commutative\n    assuming: {\n      subtract: {\n        total: true\n      },\n      multiply: {\n        commutative: false\n      }\n    }\n  }, // final ordering of constants\n  {\n    s: 'c+v -> v+c',\n    assuming: {\n      add: {\n        commutative: true\n      }\n    },\n    imposeContext: {\n      add: {\n        commutative: false\n      }\n    }\n  }, {\n    s: 'v*c -> c*v',\n    assuming: {\n      multiply: {\n        commutative: true\n      }\n    },\n    imposeContext: {\n      multiply: {\n        commutative: false\n      }\n    }\n  }, // undo temporary rules\n  // { l: '(-1) * n', r: '-n' }, // #811 added test which proved this is redundant\n  {\n    l: 'n+-n1',\n    r: 'n-n1'\n  }, // undo replace 'subtract'\n  {\n    s: 'n*(n1^-1) -> n/n1',\n    // undo replace 'divide'; for * commutative\n    assuming: {\n      multiply: {\n        commutative: true\n      }\n    } // o.w. / not conventional\n\n  }, {\n    s: 'n*n1^-n2 -> n/n1^n2',\n    assuming: {\n      multiply: {\n        commutative: true\n      }\n    } // o.w. / not conventional\n\n  }, {\n    s: 'n^-1 -> 1/n',\n    assuming: {\n      multiply: {\n        commutative: true\n      }\n    } // o.w. / not conventional\n\n  }, {\n    l: 'n^1',\n    r: 'n'\n  }, // can be produced by power cancellation\n  {\n    s: 'n*(n1/n2) -> (n*n1)/n2',\n    // '*' before '/'\n    assuming: {\n      multiply: {\n        associative: true\n      }\n    }\n  }, {\n    s: 'n-(n1+n2) -> n-n1-n2',\n    // '-' before '+'\n    assuming: {\n      addition: {\n        associative: true,\n        commutative: true\n      }\n    }\n  }, // { l: '(n1/n2)/n3', r: 'n1/(n2*n3)' },\n  // { l: '(n*n1)/(n*n2)', r: 'n1/n2' },\n  // simplifyConstant can leave an extra factor of 1, which can always\n  // be eliminated, since the identity always commutes\n  {\n    l: '1*n',\n    r: 'n',\n    imposeContext: {\n      multiply: {\n        commutative: true\n      }\n    }\n  }, {\n    s: 'n1/(n2/n3) -> (n1*n3)/n2',\n    assuming: {\n      multiply: {\n        associative: true\n      }\n    }\n  }, {\n    l: 'n1/(-n2)',\n    r: '-n1/n2'\n  }];\n  /**\n   * Takes any rule object as allowed by the specification in simplify\n   * and puts it in a standard form used by applyRule\n   */\n\n  function _canonicalizeRule(ruleObject, context) {\n    var newRule = {};\n\n    if (ruleObject.s) {\n      var lr = ruleObject.s.split('->');\n\n      if (lr.length === 2) {\n        newRule.l = lr[0];\n        newRule.r = lr[1];\n      } else {\n        throw SyntaxError('Could not parse rule: ' + ruleObject.s);\n      }\n    } else {\n      newRule.l = ruleObject.l;\n      newRule.r = ruleObject.r;\n    }\n\n    newRule.l = removeParens(parse(newRule.l));\n    newRule.r = removeParens(parse(newRule.r));\n\n    for (var prop of ['imposeContext', 'repeat', 'assuming']) {\n      if (prop in ruleObject) {\n        newRule[prop] = ruleObject[prop];\n      }\n    }\n\n    if (ruleObject.evaluate) {\n      newRule.evaluate = parse(ruleObject.evaluate);\n    }\n\n    if (isAssociative(newRule.l, context)) {\n      var makeNode = createMakeNodeFunction(newRule.l);\n\n      var expandsym = _getExpandPlaceholderSymbol();\n\n      newRule.expanded = {};\n      newRule.expanded.l = makeNode([newRule.l.clone(), expandsym]); // Push the expandsym into the deepest possible branch.\n      // This helps to match the newRule against nodes returned from getSplits() later on.\n\n      flatten(newRule.expanded.l, context);\n      unflattenr(newRule.expanded.l, context);\n      newRule.expanded.r = makeNode([newRule.r, expandsym]);\n    }\n\n    return newRule;\n  }\n  /**\n   * Parse the string array of rules into nodes\n   *\n   * Example syntax for rules:\n   *\n   * Position constants to the left in a product:\n   * { l: 'n1 * c1', r: 'c1 * n1' }\n   * n1 is any Node, and c1 is a ConstantNode.\n   *\n   * Apply difference of squares formula:\n   * { l: '(n1 - n2) * (n1 + n2)', r: 'n1^2 - n2^2' }\n   * n1, n2 mean any Node.\n   *\n   * Short hand notation:\n   * 'n1 * c1 -> c1 * n1'\n   */\n\n\n  function _buildRules(rules, context) {\n    // Array of rules to be used to simplify expressions\n    var ruleSet = [];\n\n    for (var i = 0; i < rules.length; i++) {\n      var rule = rules[i];\n      var newRule = void 0;\n      var ruleType = typeof rule;\n\n      switch (ruleType) {\n        case 'string':\n          rule = {\n            s: rule\n          };\n\n        /* falls through */\n\n        case 'object':\n          newRule = _canonicalizeRule(rule, context);\n          break;\n\n        case 'function':\n          newRule = rule;\n          break;\n\n        default:\n          throw TypeError('Unsupported type of rule: ' + ruleType);\n      } // console.log('Adding rule: ' + rules[i])\n      // console.log(newRule)\n\n\n      ruleSet.push(newRule);\n    }\n\n    return ruleSet;\n  }\n\n  var _lastsym = 0;\n\n  function _getExpandPlaceholderSymbol() {\n    return new SymbolNode('_p' + _lastsym++);\n  }\n\n  function mapRule(nodes, rule, context) {\n    var resNodes = nodes;\n\n    if (nodes) {\n      for (var i = 0; i < nodes.length; ++i) {\n        var newNode = applyRule(nodes[i], rule, context);\n\n        if (newNode !== nodes[i]) {\n          if (resNodes === nodes) {\n            resNodes = nodes.slice();\n          }\n\n          resNodes[i] = newNode;\n        }\n      }\n    }\n\n    return resNodes;\n  }\n  /**\n   * Returns a simplfied form of node, or the original node if no simplification was possible.\n   *\n   * @param  {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} node\n   * @param  {Object | Function} rule\n   * @param  {Object} context -- information about assumed properties of operators\n   * @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} The simplified form of `expr`, or the original node if no simplification was possible.\n   */\n\n\n  function applyRule(node, rule, context) {\n    //    console.log('Entering applyRule(\"', rule.l.toString({parenthesis:'all'}), '->', rule.r.toString({parenthesis:'all'}), '\",', node.toString({parenthesis:'all'}),')')\n    // check that the assumptions for this rule are satisfied by the current\n    // context:\n    if (rule.assuming) {\n      for (var symbol in rule.assuming) {\n        for (var property in rule.assuming[symbol]) {\n          if (hasProperty(symbol, property, context) !== rule.assuming[symbol][property]) {\n            return node;\n          }\n        }\n      }\n    }\n\n    var mergedContext = mergeContext(rule.imposeContext, context); // Do not clone node unless we find a match\n\n    var res = node; // First replace our child nodes with their simplified versions\n    // If a child could not be simplified, applying the rule to it\n    // will have no effect since the node is returned unchanged\n\n    if (res instanceof OperatorNode || res instanceof FunctionNode) {\n      var newArgs = mapRule(res.args, rule, context);\n\n      if (newArgs !== res.args) {\n        res = res.clone();\n        res.args = newArgs;\n      }\n    } else if (res instanceof ParenthesisNode) {\n      if (res.content) {\n        var newContent = applyRule(res.content, rule, context);\n\n        if (newContent !== res.content) {\n          res = new ParenthesisNode(newContent);\n        }\n      }\n    } else if (res instanceof ArrayNode) {\n      var newItems = mapRule(res.items, rule, context);\n\n      if (newItems !== res.items) {\n        res = new ArrayNode(newItems);\n      }\n    } else if (res instanceof AccessorNode) {\n      var newObj = res.object;\n\n      if (res.object) {\n        newObj = applyRule(res.object, rule, context);\n      }\n\n      var newIndex = res.index;\n\n      if (res.index) {\n        newIndex = applyRule(res.index, rule, context);\n      }\n\n      if (newObj !== res.object || newIndex !== res.index) {\n        res = new AccessorNode(newObj, newIndex);\n      }\n    } else if (res instanceof IndexNode) {\n      var newDims = mapRule(res.dimensions, rule, context);\n\n      if (newDims !== res.dimensions) {\n        res = new IndexNode(newDims);\n      }\n    } else if (res instanceof ObjectNode) {\n      var changed = false;\n      var newProps = {};\n\n      for (var prop in res.properties) {\n        newProps[prop] = applyRule(res.properties[prop], rule, context);\n\n        if (newProps[prop] !== res.properties[prop]) {\n          changed = true;\n        }\n      }\n\n      if (changed) {\n        res = new ObjectNode(newProps);\n      }\n    } // Try to match a rule against this node\n\n\n    var repl = rule.r;\n\n    var matches = _ruleMatch(rule.l, res, mergedContext)[0]; // If the rule is associative operator, we can try matching it while allowing additional terms.\n    // This allows us to match rules like 'n+n' to the expression '(1+x)+x' or even 'x+1+x' if the operator is commutative.\n\n\n    if (!matches && rule.expanded) {\n      repl = rule.expanded.r;\n      matches = _ruleMatch(rule.expanded.l, res, mergedContext)[0];\n    }\n\n    if (matches) {\n      // const before = res.toString({parenthesis: 'all'})\n      // Create a new node by cloning the rhs of the matched rule\n      // we keep any implicit multiplication state if relevant\n      var implicit = res.implicit;\n      res = repl.clone();\n\n      if (implicit && 'implicit' in repl) {\n        res.implicit = true;\n      } // Replace placeholders with their respective nodes without traversing deeper into the replaced nodes\n\n\n      res = res.transform(function (node) {\n        if (node.isSymbolNode && hasOwnProperty(matches.placeholders, node.name)) {\n          return matches.placeholders[node.name].clone();\n        } else {\n          return node;\n        }\n      }); // const after = res.toString({parenthesis: 'all'})\n      // console.log('Simplified ' + before + ' to ' + after)\n    }\n\n    if (rule.repeat && res !== node) {\n      res = applyRule(res, rule, context);\n    }\n\n    return res;\n  }\n  /**\n   * Get (binary) combinations of a flattened binary node\n   * e.g. +(node1, node2, node3) -> [\n   *        +(node1,  +(node2, node3)),\n   *        +(node2,  +(node1, node3)),\n   *        +(node3,  +(node1, node2))]\n   *\n   */\n\n\n  function getSplits(node, context) {\n    var res = [];\n    var right, rightArgs;\n    var makeNode = createMakeNodeFunction(node);\n\n    if (isCommutative(node, context)) {\n      for (var i = 0; i < node.args.length; i++) {\n        rightArgs = node.args.slice(0);\n        rightArgs.splice(i, 1);\n        right = rightArgs.length === 1 ? rightArgs[0] : makeNode(rightArgs);\n        res.push(makeNode([node.args[i], right]));\n      }\n    } else {\n      // Keep order, but try all parenthesizations\n      for (var _i = 1; _i < node.args.length; _i++) {\n        var left = node.args[0];\n\n        if (_i > 1) {\n          left = makeNode(node.args.slice(0, _i));\n        }\n\n        rightArgs = node.args.slice(_i);\n        right = rightArgs.length === 1 ? rightArgs[0] : makeNode(rightArgs);\n        res.push(makeNode([left, right]));\n      }\n    }\n\n    return res;\n  }\n  /**\n   * Returns the set union of two match-placeholders or null if there is a conflict.\n   */\n\n\n  function mergeMatch(match1, match2) {\n    var res = {\n      placeholders: {}\n    }; // Some matches may not have placeholders; this is OK\n\n    if (!match1.placeholders && !match2.placeholders) {\n      return res;\n    } else if (!match1.placeholders) {\n      return match2;\n    } else if (!match2.placeholders) {\n      return match1;\n    } // Placeholders with the same key must match exactly\n\n\n    for (var key in match1.placeholders) {\n      if (hasOwnProperty(match1.placeholders, key)) {\n        res.placeholders[key] = match1.placeholders[key];\n\n        if (hasOwnProperty(match2.placeholders, key)) {\n          if (!_exactMatch(match1.placeholders[key], match2.placeholders[key])) {\n            return null;\n          }\n        }\n      }\n    }\n\n    for (var _key in match2.placeholders) {\n      if (hasOwnProperty(match2.placeholders, _key)) {\n        res.placeholders[_key] = match2.placeholders[_key];\n      }\n    }\n\n    return res;\n  }\n  /**\n   * Combine two lists of matches by applying mergeMatch to the cartesian product of two lists of matches.\n   * Each list represents matches found in one child of a node.\n   */\n\n\n  function combineChildMatches(list1, list2) {\n    var res = [];\n\n    if (list1.length === 0 || list2.length === 0) {\n      return res;\n    }\n\n    var merged;\n\n    for (var i1 = 0; i1 < list1.length; i1++) {\n      for (var i2 = 0; i2 < list2.length; i2++) {\n        merged = mergeMatch(list1[i1], list2[i2]);\n\n        if (merged) {\n          res.push(merged);\n        }\n      }\n    }\n\n    return res;\n  }\n  /**\n   * Combine multiple lists of matches by applying mergeMatch to the cartesian product of two lists of matches.\n   * Each list represents matches found in one child of a node.\n   * Returns a list of unique matches.\n   */\n\n\n  function mergeChildMatches(childMatches) {\n    if (childMatches.length === 0) {\n      return childMatches;\n    }\n\n    var sets = childMatches.reduce(combineChildMatches);\n    var uniqueSets = [];\n    var unique = {};\n\n    for (var i = 0; i < sets.length; i++) {\n      var s = JSON.stringify(sets[i]);\n\n      if (!unique[s]) {\n        unique[s] = true;\n        uniqueSets.push(sets[i]);\n      }\n    }\n\n    return uniqueSets;\n  }\n  /**\n   * Determines whether node matches rule.\n   *\n   * @param {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} rule\n   * @param {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} node\n   * @param {Object} context -- provides assumed properties of operators\n   * @param {Boolean} isSplit -- whether we are in process of splitting an\n   *                    n-ary operator node into possible binary combinations.\n   *                    Defaults to false.\n   * @return {Object} Information about the match, if it exists.\n   */\n\n\n  function _ruleMatch(rule, node, context, isSplit) {\n    //    console.log('Entering _ruleMatch(' + JSON.stringify(rule) + ', ' + JSON.stringify(node) + ')')\n    //    console.log('rule = ' + rule)\n    //    console.log('node = ' + node)\n    //    console.log('Entering _ruleMatch(', rule.toString({parenthesis:'all'}), ', ', node.toString({parenthesis:'all'}), ', ', context, ')')\n    var res = [{\n      placeholders: {}\n    }];\n\n    if (rule instanceof OperatorNode && node instanceof OperatorNode || rule instanceof FunctionNode && node instanceof FunctionNode) {\n      // If the rule is an OperatorNode or a FunctionNode, then node must match exactly\n      if (rule instanceof OperatorNode) {\n        if (rule.op !== node.op || rule.fn !== node.fn) {\n          return [];\n        }\n      } else if (rule instanceof FunctionNode) {\n        if (rule.name !== node.name) {\n          return [];\n        }\n      } // rule and node match. Search the children of rule and node.\n\n\n      if (node.args.length === 1 && rule.args.length === 1 || !isAssociative(node, context) && node.args.length === rule.args.length || isSplit) {\n        // Expect non-associative operators to match exactly,\n        // except in any order if operator is commutative\n        var childMatches = [];\n\n        for (var i = 0; i < rule.args.length; i++) {\n          var childMatch = _ruleMatch(rule.args[i], node.args[i], context);\n\n          if (childMatch.length === 0) {\n            // Child did not match, so stop searching immediately\n            break;\n          } // The child matched, so add the information returned from the child to our result\n\n\n          childMatches.push(childMatch);\n        }\n\n        if (childMatches.length !== rule.args.length) {\n          if (!isCommutative(node, context) || // exact match in order needed\n          rule.args.length === 1) {\n            // nothing to commute\n            return [];\n          }\n\n          if (rule.args.length > 2) {\n            /* Need to generate all permutations and try them.\n             * It's a bit complicated, and unlikely to come up since there\n             * are very few ternary or higher operators. So punt for now.\n             */\n            throw new Error('permuting >2 commutative non-associative rule arguments not yet implemented');\n          }\n          /* Exactly two arguments, try them reversed */\n\n\n          var leftMatch = _ruleMatch(rule.args[0], node.args[1], context);\n\n          if (leftMatch.length === 0) {\n            return [];\n          }\n\n          var rightMatch = _ruleMatch(rule.args[1], node.args[0], context);\n\n          if (rightMatch.length === 0) {\n            return [];\n          }\n\n          childMatches = [leftMatch, rightMatch];\n        }\n\n        res = mergeChildMatches(childMatches);\n      } else if (node.args.length >= 2 && rule.args.length === 2) {\n        // node is flattened, rule is not\n        // Associative operators/functions can be split in different ways so we check if the rule matches each\n        // them and return their union.\n        var splits = getSplits(node, context);\n        var splitMatches = [];\n\n        for (var _i2 = 0; _i2 < splits.length; _i2++) {\n          var matchSet = _ruleMatch(rule, splits[_i2], context, true); // recursing at the same tree depth here\n\n\n          splitMatches = splitMatches.concat(matchSet);\n        }\n\n        return splitMatches;\n      } else if (rule.args.length > 2) {\n        throw Error('Unexpected non-binary associative function: ' + rule.toString());\n      } else {\n        // Incorrect number of arguments in rule and node, so no match\n        return [];\n      }\n    } else if (rule instanceof SymbolNode) {\n      // If the rule is a SymbolNode, then it carries a special meaning\n      // according to the first character of the symbol node name.\n      // c.* matches a ConstantNode\n      // n.* matches any node\n      if (rule.name.length === 0) {\n        throw new Error('Symbol in rule has 0 length...!?');\n      }\n\n      if (SUPPORTED_CONSTANTS[rule.name]) {\n        // built-in constant must match exactly\n        if (rule.name !== node.name) {\n          return [];\n        }\n      } else if (rule.name[0] === 'n' || rule.name.substring(0, 2) === '_p') {\n        // rule matches _anything_, so assign this node to the rule.name placeholder\n        // Assign node to the rule.name placeholder.\n        // Our parent will check for matches among placeholders.\n        res[0].placeholders[rule.name] = node;\n      } else if (rule.name[0] === 'v') {\n        // rule matches any variable thing (not a ConstantNode)\n        if (!isConstantNode(node)) {\n          res[0].placeholders[rule.name] = node;\n        } else {\n          // Mis-match: rule was expecting something other than a ConstantNode\n          return [];\n        }\n      } else if (rule.name[0] === 'c') {\n        // rule matches any ConstantNode\n        if (node instanceof ConstantNode) {\n          res[0].placeholders[rule.name] = node;\n        } else {\n          // Mis-match: rule was expecting a ConstantNode\n          return [];\n        }\n      } else {\n        throw new Error('Invalid symbol in rule: ' + rule.name);\n      }\n    } else if (rule instanceof ConstantNode) {\n      // Literal constant must match exactly\n      if (!equal(rule.value, node.value)) {\n        return [];\n      }\n    } else {\n      // Some other node was encountered which we aren't prepared for, so no match\n      return [];\n    } // It's a match!\n    // console.log('_ruleMatch(' + rule.toString() + ', ' + node.toString() + ') found a match')\n\n\n    return res;\n  }\n  /**\n   * Determines whether p and q (and all their children nodes) are identical.\n   *\n   * @param {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} p\n   * @param {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} q\n   * @return {Object} Information about the match, if it exists.\n   */\n\n\n  function _exactMatch(p, q) {\n    if (p instanceof ConstantNode && q instanceof ConstantNode) {\n      if (!equal(p.value, q.value)) {\n        return false;\n      }\n    } else if (p instanceof SymbolNode && q instanceof SymbolNode) {\n      if (p.name !== q.name) {\n        return false;\n      }\n    } else if (p instanceof OperatorNode && q instanceof OperatorNode || p instanceof FunctionNode && q instanceof FunctionNode) {\n      if (p instanceof OperatorNode) {\n        if (p.op !== q.op || p.fn !== q.fn) {\n          return false;\n        }\n      } else if (p instanceof FunctionNode) {\n        if (p.name !== q.name) {\n          return false;\n        }\n      }\n\n      if (p.args.length !== q.args.length) {\n        return false;\n      }\n\n      for (var i = 0; i < p.args.length; i++) {\n        if (!_exactMatch(p.args[i], q.args[i])) {\n          return false;\n        }\n      }\n    } else {\n      return false;\n    }\n\n    return true;\n  }\n\n  return simplify;\n});", "import { isAccessorNode, isArrayNode, isConstantNode, isFunctionNode, isIndexNode, isObjectNode, isOperatorNode } from '../../utils/is.js';\nimport { createUtil } from './simplify/util.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'simplifyCore';\nvar dependencies = ['equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];\nexport var createSimplifyCore = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    equal,\n    isZero,\n    add,\n    subtract,\n    multiply,\n    divide,\n    pow,\n    AccessorNode,\n    ArrayNode,\n    ConstantNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    ParenthesisNode,\n    SymbolNode\n  } = _ref;\n  var node0 = new ConstantNode(0);\n  var node1 = new ConstantNode(1);\n  var {\n    hasProperty,\n    isCommutative\n  } = createUtil({\n    FunctionNode,\n    OperatorNode,\n    SymbolNode\n  });\n  /**\n   * simplifyCore() performs single pass simplification suitable for\n   * applications requiring ultimate performance. In contrast, simplify()\n   * extends simplifyCore() with additional passes to provide deeper\n   * simplification.\n   *\n   * Syntax:\n   *\n   *     simplifyCore(expr)\n   *\n   * Examples:\n   *\n   *     const f = math.parse('2 * 1 * x ^ (2 - 1)')\n   *     math.simpifyCore(f)                          // Node {2 * x}\n   *     math.simplify('2 * 1 * x ^ (2 - 1)', [math.simplifyCore]) // Node {2 * x}\n   *\n   * See also:\n   *\n   *     simplify, resolve, derivative\n   *\n   * @param {Node} node\n   *     The expression to be simplified\n   * @param {Object} options\n   *     Simplification options, as per simplify()\n   * @return {Node} Returns expression with basic simplifications applied\n   */\n\n  function simplifyCore(node, options) {\n    var context = options ? options.context : undefined;\n\n    if (hasProperty(node, 'trivial', context)) {\n      // This node does nothing if it has only one argument, so if so,\n      // return that argument simplified\n      if (isFunctionNode(node) && node.args.length === 1) {\n        return simplifyCore(node.args[0], options);\n      } // For other node types, we try the generic methods\n\n\n      var simpChild = false;\n      var childCount = 0;\n      node.forEach(c => {\n        ++childCount;\n\n        if (childCount === 1) {\n          simpChild = simplifyCore(c, options);\n        }\n      });\n\n      if (childCount === 1) {\n        return simpChild;\n      }\n    }\n\n    if (isOperatorNode(node) && node.isUnary()) {\n      var a0 = simplifyCore(node.args[0], options);\n\n      if (node.op === '-') {\n        // unary minus\n        if (isOperatorNode(a0)) {\n          if (a0.isUnary() && a0.op === '-') {\n            return a0.args[0];\n          } else if (a0.isBinary() && a0.fn === 'subtract') {\n            return new OperatorNode('-', 'subtract', [a0.args[1], a0.args[0]]);\n          }\n        }\n\n        return new OperatorNode(node.op, node.fn, [a0]);\n      }\n    } else if (isOperatorNode(node) && node.isBinary()) {\n      var _a = simplifyCore(node.args[0], options);\n\n      var a1 = simplifyCore(node.args[1], options);\n\n      if (node.op === '+') {\n        if (isConstantNode(_a)) {\n          if (isZero(_a.value)) {\n            return a1;\n          } else if (isConstantNode(a1)) {\n            return new ConstantNode(add(_a.value, a1.value));\n          }\n        }\n\n        if (isConstantNode(a1) && isZero(a1.value)) {\n          return _a;\n        }\n\n        if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {\n          return new OperatorNode('-', 'subtract', [_a, a1.args[0]]);\n        }\n\n        return new OperatorNode(node.op, node.fn, a1 ? [_a, a1] : [_a]);\n      } else if (node.op === '-') {\n        if (isConstantNode(_a) && a1) {\n          if (isConstantNode(a1)) {\n            return new ConstantNode(subtract(_a.value, a1.value));\n          } else if (isZero(_a.value)) {\n            return new OperatorNode('-', 'unaryMinus', [a1]);\n          }\n        } // if (node.fn === \"subtract\" && node.args.length === 2) {\n\n\n        if (node.fn === 'subtract') {\n          if (isConstantNode(a1) && isZero(a1.value)) {\n            return _a;\n          }\n\n          if (isOperatorNode(a1) && a1.isUnary() && a1.op === '-') {\n            return simplifyCore(new OperatorNode('+', 'add', [_a, a1.args[0]]), options);\n          }\n\n          return new OperatorNode(node.op, node.fn, [_a, a1]);\n        }\n      } else if (node.op === '*') {\n        if (isConstantNode(_a)) {\n          if (isZero(_a.value)) {\n            return node0;\n          } else if (equal(_a.value, 1)) {\n            return a1;\n          } else if (isConstantNode(a1)) {\n            return new ConstantNode(multiply(_a.value, a1.value));\n          }\n        }\n\n        if (isConstantNode(a1)) {\n          if (isZero(a1.value)) {\n            return node0;\n          } else if (equal(a1.value, 1)) {\n            return _a;\n          } else if (isOperatorNode(_a) && _a.isBinary() && _a.op === node.op && isCommutative(node, context)) {\n            var a00 = _a.args[0];\n\n            if (isConstantNode(a00)) {\n              var a00a1 = new ConstantNode(multiply(a00.value, a1.value));\n              return new OperatorNode(node.op, node.fn, [a00a1, _a.args[1]], node.implicit); // constants on left\n            }\n          }\n\n          if (isCommutative(node, context)) {\n            return new OperatorNode(node.op, node.fn, [a1, _a], node.implicit); // constants on left\n          } else {\n            return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);\n          }\n        }\n\n        return new OperatorNode(node.op, node.fn, [_a, a1], node.implicit);\n      } else if (node.op === '/') {\n        if (isConstantNode(_a)) {\n          if (isZero(_a.value)) {\n            return node0;\n          } else if (isConstantNode(a1) && (equal(a1.value, 1) || equal(a1.value, 2) || equal(a1.value, 4))) {\n            return new ConstantNode(divide(_a.value, a1.value));\n          }\n        }\n\n        return new OperatorNode(node.op, node.fn, [_a, a1]);\n      } else if (node.op === '^') {\n        if (isConstantNode(a1)) {\n          if (isZero(a1.value)) {\n            return node1;\n          } else if (equal(a1.value, 1)) {\n            return _a;\n          } else {\n            if (isConstantNode(_a)) {\n              // fold constant\n              return new ConstantNode(pow(_a.value, a1.value));\n            } else if (isOperatorNode(_a) && _a.isBinary() && _a.op === '^') {\n              var a01 = _a.args[1];\n\n              if (isConstantNode(a01)) {\n                return new OperatorNode(node.op, node.fn, [_a.args[0], new ConstantNode(multiply(a01.value, a1.value))]);\n              }\n            }\n          }\n        }\n      }\n\n      return new OperatorNode(node.op, node.fn, [_a, a1]);\n    } else if (isFunctionNode(node)) {\n      return new FunctionNode(simplifyCore(node.fn), node.args.map(n => simplifyCore(n, options)));\n    } else if (isArrayNode(node)) {\n      return new ArrayNode(node.items.map(n => simplifyCore(n, options)));\n    } else if (isAccessorNode(node)) {\n      return new AccessorNode(simplifyCore(node.object, options), simplifyCore(node.index, options));\n    } else if (isIndexNode(node)) {\n      return new IndexNode(node.dimensions.map(n => simplifyCore(n, options)));\n    } else if (isObjectNode(node)) {\n      var newProps = {};\n\n      for (var prop in node.properties) {\n        newProps[prop] = simplifyCore(node.properties[prop], options);\n      }\n\n      return new ObjectNode(newProps);\n    } else {// cannot simplify\n    }\n\n    return node;\n  }\n\n  return simplifyCore;\n});", "import { isConstantNode, typeOf } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'derivative';\nvar dependencies = ['typed', 'config', 'parse', 'simplify', 'equal', 'isZero', 'numeric', 'ConstantNode', 'FunctionNode', 'OperatorNode', 'ParenthesisNode', 'SymbolNode'];\nexport var createDerivative = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    parse,\n    simplify,\n    equal,\n    isZero,\n    numeric,\n    ConstantNode,\n    FunctionNode,\n    OperatorNode,\n    ParenthesisNode,\n    SymbolNode\n  } = _ref;\n\n  /**\n   * Takes the derivative of an expression expressed in parser Nodes.\n   * The derivative will be taken over the supplied variable in the\n   * second parameter. If there are multiple variables in the expression,\n   * it will return a partial derivative.\n   *\n   * This uses rules of differentiation which can be found here:\n   *\n   * - [Differentiation rules (Wikipedia)](https://en.wikipedia.org/wiki/Differentiation_rules)\n   *\n   * Syntax:\n   *\n   *     derivative(expr, variable)\n   *     derivative(expr, variable, options)\n   *\n   * Examples:\n   *\n   *     math.derivative('x^2', 'x')                     // Node {2 * x}\n   *     math.derivative('x^2', 'x', {simplify: false})  // Node {2 * 1 * x ^ (2 - 1)\n   *     math.derivative('sin(2x)', 'x'))                // Node {2 * cos(2 * x)}\n   *     math.derivative('2*x', 'x').evaluate()          // number 2\n   *     math.derivative('x^2', 'x').evaluate({x: 4})    // number 8\n   *     const f = math.parse('x^2')\n   *     const x = math.parse('x')\n   *     math.derivative(f, x)                           // Node {2 * x}\n   *\n   * See also:\n   *\n   *     simplify, parse, evaluate\n   *\n   * @param  {Node | string} expr           The expression to differentiate\n   * @param  {SymbolNode | string} variable The variable over which to differentiate\n   * @param  {{simplify: boolean}} [options]\n   *                         There is one option available, `simplify`, which\n   *                         is true by default. When false, output will not\n   *                         be simplified.\n   * @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode}    The derivative of `expr`\n   */\n  var derivative = typed('derivative', {\n    'Node, SymbolNode, Object': function NodeSymbolNodeObject(expr, variable, options) {\n      var constNodes = {};\n      constTag(constNodes, expr, variable.name);\n\n      var res = _derivative(expr, constNodes);\n\n      return options.simplify ? simplify(res) : res;\n    },\n    'Node, SymbolNode': function NodeSymbolNode(expr, variable) {\n      return this(expr, variable, {\n        simplify: true\n      });\n    },\n    'string, SymbolNode': function stringSymbolNode(expr, variable) {\n      return this(parse(expr), variable);\n    },\n    'string, SymbolNode, Object': function stringSymbolNodeObject(expr, variable, options) {\n      return this(parse(expr), variable, options);\n    },\n    'string, string': function stringString(expr, variable) {\n      return this(parse(expr), parse(variable));\n    },\n    'string, string, Object': function stringStringObject(expr, variable, options) {\n      return this(parse(expr), parse(variable), options);\n    },\n    'Node, string': function NodeString(expr, variable) {\n      return this(expr, parse(variable));\n    },\n    'Node, string, Object': function NodeStringObject(expr, variable, options) {\n      return this(expr, parse(variable), options);\n    } // TODO: replace the 8 signatures above with 4 as soon as typed-function supports optional arguments\n\n    /* TODO: implement and test syntax with order of derivatives -> implement as an option {order: number}\n    'Node, SymbolNode, ConstantNode': function (expr, variable, {order}) {\n      let res = expr\n      for (let i = 0; i < order; i++) {\n        let constNodes = {}\n        constTag(constNodes, expr, variable.name)\n        res = _derivative(res, constNodes)\n      }\n      return res\n    }\n    */\n\n  });\n  derivative._simplify = true;\n\n  derivative.toTex = function (deriv) {\n    return _derivTex.apply(null, deriv.args);\n  }; // FIXME: move the toTex method of derivative to latex.js. Difficulty is that it relies on parse.\n  // NOTE: the optional \"order\" parameter here is currently unused\n\n\n  var _derivTex = typed('_derivTex', {\n    'Node, SymbolNode': function NodeSymbolNode(expr, x) {\n      if (isConstantNode(expr) && typeOf(expr.value) === 'string') {\n        return _derivTex(parse(expr.value).toString(), x.toString(), 1);\n      } else {\n        return _derivTex(expr.toTex(), x.toString(), 1);\n      }\n    },\n    'Node, ConstantNode': function NodeConstantNode(expr, x) {\n      if (typeOf(x.value) === 'string') {\n        return _derivTex(expr, parse(x.value));\n      } else {\n        throw new Error(\"The second parameter to 'derivative' is a non-string constant\");\n      }\n    },\n    'Node, SymbolNode, ConstantNode': function NodeSymbolNodeConstantNode(expr, x, order) {\n      return _derivTex(expr.toString(), x.name, order.value);\n    },\n    'string, string, number': function stringStringNumber(expr, x, order) {\n      var d;\n\n      if (order === 1) {\n        d = '{d\\\\over d' + x + '}';\n      } else {\n        d = '{d^{' + order + '}\\\\over d' + x + '^{' + order + '}}';\n      }\n\n      return d + \"\\\\left[\".concat(expr, \"\\\\right]\");\n    }\n  });\n  /**\n   * Does a depth-first search on the expression tree to identify what Nodes\n   * are constants (e.g. 2 + 2), and stores the ones that are constants in\n   * constNodes. Classification is done as follows:\n   *\n   *   1. ConstantNodes are constants.\n   *   2. If there exists a SymbolNode, of which we are differentiating over,\n   *      in the subtree it is not constant.\n   *\n   * @param  {Object} constNodes  Holds the nodes that are constant\n   * @param  {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} node\n   * @param  {string} varName     Variable that we are differentiating\n   * @return {boolean}  if node is constant\n   */\n  // TODO: can we rewrite constTag into a pure function?\n\n\n  var constTag = typed('constTag', {\n    'Object, ConstantNode, string': function ObjectConstantNodeString(constNodes, node) {\n      constNodes[node] = true;\n      return true;\n    },\n    'Object, SymbolNode, string': function ObjectSymbolNodeString(constNodes, node, varName) {\n      // Treat other variables like constants. For reasoning, see:\n      //   https://en.wikipedia.org/wiki/Partial_derivative\n      if (node.name !== varName) {\n        constNodes[node] = true;\n        return true;\n      }\n\n      return false;\n    },\n    'Object, ParenthesisNode, string': function ObjectParenthesisNodeString(constNodes, node, varName) {\n      return constTag(constNodes, node.content, varName);\n    },\n    'Object, FunctionAssignmentNode, string': function ObjectFunctionAssignmentNodeString(constNodes, node, varName) {\n      if (node.params.indexOf(varName) === -1) {\n        constNodes[node] = true;\n        return true;\n      }\n\n      return constTag(constNodes, node.expr, varName);\n    },\n    'Object, FunctionNode | OperatorNode, string': function ObjectFunctionNodeOperatorNodeString(constNodes, node, varName) {\n      if (node.args.length > 0) {\n        var isConst = constTag(constNodes, node.args[0], varName);\n\n        for (var i = 1; i < node.args.length; ++i) {\n          isConst = constTag(constNodes, node.args[i], varName) && isConst;\n        }\n\n        if (isConst) {\n          constNodes[node] = true;\n          return true;\n        }\n      }\n\n      return false;\n    }\n  });\n  /**\n   * Applies differentiation rules.\n   *\n   * @param  {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode} node\n   * @param  {Object} constNodes  Holds the nodes that are constant\n   * @return {ConstantNode | SymbolNode | ParenthesisNode | FunctionNode | OperatorNode}    The derivative of `expr`\n   */\n\n  var _derivative = typed('_derivative', {\n    'ConstantNode, Object': function ConstantNodeObject(node) {\n      return createConstantNode(0);\n    },\n    'SymbolNode, Object': function SymbolNodeObject(node, constNodes) {\n      if (constNodes[node] !== undefined) {\n        return createConstantNode(0);\n      }\n\n      return createConstantNode(1);\n    },\n    'ParenthesisNode, Object': function ParenthesisNodeObject(node, constNodes) {\n      return new ParenthesisNode(_derivative(node.content, constNodes));\n    },\n    'FunctionAssignmentNode, Object': function FunctionAssignmentNodeObject(node, constNodes) {\n      if (constNodes[node] !== undefined) {\n        return createConstantNode(0);\n      }\n\n      return _derivative(node.expr, constNodes);\n    },\n    'FunctionNode, Object': function FunctionNodeObject(node, constNodes) {\n      if (node.args.length !== 1) {\n        funcArgsCheck(node);\n      }\n\n      if (constNodes[node] !== undefined) {\n        return createConstantNode(0);\n      }\n\n      var arg0 = node.args[0];\n      var arg1;\n      var div = false; // is output a fraction?\n\n      var negative = false; // is output negative?\n\n      var funcDerivative;\n\n      switch (node.name) {\n        case 'cbrt':\n          // d/dx(cbrt(x)) = 1 / (3x^(2/3))\n          div = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [createConstantNode(3), new OperatorNode('^', 'pow', [arg0, new OperatorNode('/', 'divide', [createConstantNode(2), createConstantNode(3)])])]);\n          break;\n\n        case 'sqrt':\n        case 'nthRoot':\n          // d/dx(sqrt(x)) = 1 / (2*sqrt(x))\n          if (node.args.length === 1) {\n            div = true;\n            funcDerivative = new OperatorNode('*', 'multiply', [createConstantNode(2), new FunctionNode('sqrt', [arg0])]);\n          } else if (node.args.length === 2) {\n            // Rearrange from nthRoot(x, a) -> x^(1/a)\n            arg1 = new OperatorNode('/', 'divide', [createConstantNode(1), node.args[1]]); // Is a variable?\n\n            constNodes[arg1] = constNodes[node.args[1]];\n            return _derivative(new OperatorNode('^', 'pow', [arg0, arg1]), constNodes);\n          }\n\n          break;\n\n        case 'log10':\n          arg1 = createConstantNode(10);\n\n        /* fall through! */\n\n        case 'log':\n          if (!arg1 && node.args.length === 1) {\n            // d/dx(log(x)) = 1 / x\n            funcDerivative = arg0.clone();\n            div = true;\n          } else if (node.args.length === 1 && arg1 || node.args.length === 2 && constNodes[node.args[1]] !== undefined) {\n            // d/dx(log(x, c)) = 1 / (x*ln(c))\n            funcDerivative = new OperatorNode('*', 'multiply', [arg0.clone(), new FunctionNode('log', [arg1 || node.args[1]])]);\n            div = true;\n          } else if (node.args.length === 2) {\n            // d/dx(log(f(x), g(x))) = d/dx(log(f(x)) / log(g(x)))\n            return _derivative(new OperatorNode('/', 'divide', [new FunctionNode('log', [arg0]), new FunctionNode('log', [node.args[1]])]), constNodes);\n          }\n\n          break;\n\n        case 'pow':\n          constNodes[arg1] = constNodes[node.args[1]]; // Pass to pow operator node parser\n\n          return _derivative(new OperatorNode('^', 'pow', [arg0, node.args[1]]), constNodes);\n\n        case 'exp':\n          // d/dx(e^x) = e^x\n          funcDerivative = new FunctionNode('exp', [arg0.clone()]);\n          break;\n\n        case 'sin':\n          // d/dx(sin(x)) = cos(x)\n          funcDerivative = new FunctionNode('cos', [arg0.clone()]);\n          break;\n\n        case 'cos':\n          // d/dx(cos(x)) = -sin(x)\n          funcDerivative = new OperatorNode('-', 'unaryMinus', [new FunctionNode('sin', [arg0.clone()])]);\n          break;\n\n        case 'tan':\n          // d/dx(tan(x)) = sec(x)^2\n          funcDerivative = new OperatorNode('^', 'pow', [new FunctionNode('sec', [arg0.clone()]), createConstantNode(2)]);\n          break;\n\n        case 'sec':\n          // d/dx(sec(x)) = sec(x)tan(x)\n          funcDerivative = new OperatorNode('*', 'multiply', [node, new FunctionNode('tan', [arg0.clone()])]);\n          break;\n\n        case 'csc':\n          // d/dx(csc(x)) = -csc(x)cot(x)\n          negative = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [node, new FunctionNode('cot', [arg0.clone()])]);\n          break;\n\n        case 'cot':\n          // d/dx(cot(x)) = -csc(x)^2\n          negative = true;\n          funcDerivative = new OperatorNode('^', 'pow', [new FunctionNode('csc', [arg0.clone()]), createConstantNode(2)]);\n          break;\n\n        case 'asin':\n          // d/dx(asin(x)) = 1 / sqrt(1 - x^2)\n          div = true;\n          funcDerivative = new FunctionNode('sqrt', [new OperatorNode('-', 'subtract', [createConstantNode(1), new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)])])]);\n          break;\n\n        case 'acos':\n          // d/dx(acos(x)) = -1 / sqrt(1 - x^2)\n          div = true;\n          negative = true;\n          funcDerivative = new FunctionNode('sqrt', [new OperatorNode('-', 'subtract', [createConstantNode(1), new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)])])]);\n          break;\n\n        case 'atan':\n          // d/dx(atan(x)) = 1 / (x^2 + 1)\n          div = true;\n          funcDerivative = new OperatorNode('+', 'add', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)]);\n          break;\n\n        case 'asec':\n          // d/dx(asec(x)) = 1 / (|x|*sqrt(x^2 - 1))\n          div = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [new FunctionNode('abs', [arg0.clone()]), new FunctionNode('sqrt', [new OperatorNode('-', 'subtract', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)])])]);\n          break;\n\n        case 'acsc':\n          // d/dx(acsc(x)) = -1 / (|x|*sqrt(x^2 - 1))\n          div = true;\n          negative = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [new FunctionNode('abs', [arg0.clone()]), new FunctionNode('sqrt', [new OperatorNode('-', 'subtract', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)])])]);\n          break;\n\n        case 'acot':\n          // d/dx(acot(x)) = -1 / (x^2 + 1)\n          div = true;\n          negative = true;\n          funcDerivative = new OperatorNode('+', 'add', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)]);\n          break;\n\n        case 'sinh':\n          // d/dx(sinh(x)) = cosh(x)\n          funcDerivative = new FunctionNode('cosh', [arg0.clone()]);\n          break;\n\n        case 'cosh':\n          // d/dx(cosh(x)) = sinh(x)\n          funcDerivative = new FunctionNode('sinh', [arg0.clone()]);\n          break;\n\n        case 'tanh':\n          // d/dx(tanh(x)) = sech(x)^2\n          funcDerivative = new OperatorNode('^', 'pow', [new FunctionNode('sech', [arg0.clone()]), createConstantNode(2)]);\n          break;\n\n        case 'sech':\n          // d/dx(sech(x)) = -sech(x)tanh(x)\n          negative = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [node, new FunctionNode('tanh', [arg0.clone()])]);\n          break;\n\n        case 'csch':\n          // d/dx(csch(x)) = -csch(x)coth(x)\n          negative = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [node, new FunctionNode('coth', [arg0.clone()])]);\n          break;\n\n        case 'coth':\n          // d/dx(coth(x)) = -csch(x)^2\n          negative = true;\n          funcDerivative = new OperatorNode('^', 'pow', [new FunctionNode('csch', [arg0.clone()]), createConstantNode(2)]);\n          break;\n\n        case 'asinh':\n          // d/dx(asinh(x)) = 1 / sqrt(x^2 + 1)\n          div = true;\n          funcDerivative = new FunctionNode('sqrt', [new OperatorNode('+', 'add', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)])]);\n          break;\n\n        case 'acosh':\n          // d/dx(acosh(x)) = 1 / sqrt(x^2 - 1); XXX potentially only for x >= 1 (the real spectrum)\n          div = true;\n          funcDerivative = new FunctionNode('sqrt', [new OperatorNode('-', 'subtract', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)])]);\n          break;\n\n        case 'atanh':\n          // d/dx(atanh(x)) = 1 / (1 - x^2)\n          div = true;\n          funcDerivative = new OperatorNode('-', 'subtract', [createConstantNode(1), new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)])]);\n          break;\n\n        case 'asech':\n          // d/dx(asech(x)) = -1 / (x*sqrt(1 - x^2))\n          div = true;\n          negative = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [arg0.clone(), new FunctionNode('sqrt', [new OperatorNode('-', 'subtract', [createConstantNode(1), new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)])])])]);\n          break;\n\n        case 'acsch':\n          // d/dx(acsch(x)) = -1 / (|x|*sqrt(x^2 + 1))\n          div = true;\n          negative = true;\n          funcDerivative = new OperatorNode('*', 'multiply', [new FunctionNode('abs', [arg0.clone()]), new FunctionNode('sqrt', [new OperatorNode('+', 'add', [new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)]), createConstantNode(1)])])]);\n          break;\n\n        case 'acoth':\n          // d/dx(acoth(x)) = -1 / (1 - x^2)\n          div = true;\n          negative = true;\n          funcDerivative = new OperatorNode('-', 'subtract', [createConstantNode(1), new OperatorNode('^', 'pow', [arg0.clone(), createConstantNode(2)])]);\n          break;\n\n        case 'abs':\n          // d/dx(abs(x)) = abs(x)/x\n          funcDerivative = new OperatorNode('/', 'divide', [new FunctionNode(new SymbolNode('abs'), [arg0.clone()]), arg0.clone()]);\n          break;\n\n        case 'gamma': // Needs digamma function, d/dx(gamma(x)) = gamma(x)digamma(x)\n\n        default:\n          throw new Error('Function \"' + node.name + '\" is not supported by derivative, or a wrong number of arguments is passed');\n      }\n\n      var op, func;\n\n      if (div) {\n        op = '/';\n        func = 'divide';\n      } else {\n        op = '*';\n        func = 'multiply';\n      }\n      /* Apply chain rule to all functions:\n         F(x)  = f(g(x))\n         F'(x) = g'(x)*f'(g(x)) */\n\n\n      var chainDerivative = _derivative(arg0, constNodes);\n\n      if (negative) {\n        chainDerivative = new OperatorNode('-', 'unaryMinus', [chainDerivative]);\n      }\n\n      return new OperatorNode(op, func, [chainDerivative, funcDerivative]);\n    },\n    'OperatorNode, Object': function OperatorNodeObject(node, constNodes) {\n      if (constNodes[node] !== undefined) {\n        return createConstantNode(0);\n      }\n\n      if (node.op === '+') {\n        // d/dx(sum(f(x)) = sum(f'(x))\n        return new OperatorNode(node.op, node.fn, node.args.map(function (arg) {\n          return _derivative(arg, constNodes);\n        }));\n      }\n\n      if (node.op === '-') {\n        // d/dx(+/-f(x)) = +/-f'(x)\n        if (node.isUnary()) {\n          return new OperatorNode(node.op, node.fn, [_derivative(node.args[0], constNodes)]);\n        } // Linearity of differentiation, d/dx(f(x) +/- g(x)) = f'(x) +/- g'(x)\n\n\n        if (node.isBinary()) {\n          return new OperatorNode(node.op, node.fn, [_derivative(node.args[0], constNodes), _derivative(node.args[1], constNodes)]);\n        }\n      }\n\n      if (node.op === '*') {\n        // d/dx(c*f(x)) = c*f'(x)\n        var constantTerms = node.args.filter(function (arg) {\n          return constNodes[arg] !== undefined;\n        });\n\n        if (constantTerms.length > 0) {\n          var nonConstantTerms = node.args.filter(function (arg) {\n            return constNodes[arg] === undefined;\n          });\n          var nonConstantNode = nonConstantTerms.length === 1 ? nonConstantTerms[0] : new OperatorNode('*', 'multiply', nonConstantTerms);\n          var newArgs = constantTerms.concat(_derivative(nonConstantNode, constNodes));\n          return new OperatorNode('*', 'multiply', newArgs);\n        } // Product Rule, d/dx(f(x)*g(x)) = f'(x)*g(x) + f(x)*g'(x)\n\n\n        return new OperatorNode('+', 'add', node.args.map(function (argOuter) {\n          return new OperatorNode('*', 'multiply', node.args.map(function (argInner) {\n            return argInner === argOuter ? _derivative(argInner, constNodes) : argInner.clone();\n          }));\n        }));\n      }\n\n      if (node.op === '/' && node.isBinary()) {\n        var arg0 = node.args[0];\n        var arg1 = node.args[1]; // d/dx(f(x) / c) = f'(x) / c\n\n        if (constNodes[arg1] !== undefined) {\n          return new OperatorNode('/', 'divide', [_derivative(arg0, constNodes), arg1]);\n        } // Reciprocal Rule, d/dx(c / f(x)) = -c(f'(x)/f(x)^2)\n\n\n        if (constNodes[arg0] !== undefined) {\n          return new OperatorNode('*', 'multiply', [new OperatorNode('-', 'unaryMinus', [arg0]), new OperatorNode('/', 'divide', [_derivative(arg1, constNodes), new OperatorNode('^', 'pow', [arg1.clone(), createConstantNode(2)])])]);\n        } // Quotient rule, d/dx(f(x) / g(x)) = (f'(x)g(x) - f(x)g'(x)) / g(x)^2\n\n\n        return new OperatorNode('/', 'divide', [new OperatorNode('-', 'subtract', [new OperatorNode('*', 'multiply', [_derivative(arg0, constNodes), arg1.clone()]), new OperatorNode('*', 'multiply', [arg0.clone(), _derivative(arg1, constNodes)])]), new OperatorNode('^', 'pow', [arg1.clone(), createConstantNode(2)])]);\n      }\n\n      if (node.op === '^' && node.isBinary()) {\n        var _arg = node.args[0];\n        var _arg2 = node.args[1];\n\n        if (constNodes[_arg] !== undefined) {\n          // If is secretly constant; 0^f(x) = 1 (in JS), 1^f(x) = 1\n          if (isConstantNode(_arg) && (isZero(_arg.value) || equal(_arg.value, 1))) {\n            return createConstantNode(0);\n          } // d/dx(c^f(x)) = c^f(x)*ln(c)*f'(x)\n\n\n          return new OperatorNode('*', 'multiply', [node, new OperatorNode('*', 'multiply', [new FunctionNode('log', [_arg.clone()]), _derivative(_arg2.clone(), constNodes)])]);\n        }\n\n        if (constNodes[_arg2] !== undefined) {\n          if (isConstantNode(_arg2)) {\n            // If is secretly constant; f(x)^0 = 1 -> d/dx(1) = 0\n            if (isZero(_arg2.value)) {\n              return createConstantNode(0);\n            } // Ignore exponent; f(x)^1 = f(x)\n\n\n            if (equal(_arg2.value, 1)) {\n              return _derivative(_arg, constNodes);\n            }\n          } // Elementary Power Rule, d/dx(f(x)^c) = c*f'(x)*f(x)^(c-1)\n\n\n          var powMinusOne = new OperatorNode('^', 'pow', [_arg.clone(), new OperatorNode('-', 'subtract', [_arg2, createConstantNode(1)])]);\n          return new OperatorNode('*', 'multiply', [_arg2.clone(), new OperatorNode('*', 'multiply', [_derivative(_arg, constNodes), powMinusOne])]);\n        } // Functional Power Rule, d/dx(f^g) = f^g*[f'*(g/f) + g'ln(f)]\n\n\n        return new OperatorNode('*', 'multiply', [new OperatorNode('^', 'pow', [_arg.clone(), _arg2.clone()]), new OperatorNode('+', 'add', [new OperatorNode('*', 'multiply', [_derivative(_arg, constNodes), new OperatorNode('/', 'divide', [_arg2.clone(), _arg.clone()])]), new OperatorNode('*', 'multiply', [_derivative(_arg2, constNodes), new FunctionNode('log', [_arg.clone()])])])]);\n      }\n\n      throw new Error('Operator \"' + node.op + '\" is not supported by derivative, or a wrong number of arguments is passed');\n    }\n  });\n  /**\n   * Ensures the number of arguments for a function are correct,\n   * and will throw an error otherwise.\n   *\n   * @param {FunctionNode} node\n   */\n\n\n  function funcArgsCheck(node) {\n    // TODO add min, max etc\n    if ((node.name === 'log' || node.name === 'nthRoot' || node.name === 'pow') && node.args.length === 2) {\n      return;\n    } // There should be an incorrect number of arguments if we reach here\n    // Change all args to constants to avoid unidentified\n    // symbol error when compiling function\n\n\n    for (var i = 0; i < node.args.length; ++i) {\n      node.args[i] = createConstantNode(0);\n    }\n\n    node.compile().evaluate();\n    throw new Error('Expected TypeError, but none found');\n  }\n  /**\n   * Helper function to create a constant node with a specific type\n   * (number, BigNumber, Fraction)\n   * @param {number} value\n   * @param {string} [valueType]\n   * @return {ConstantNode}\n   */\n\n\n  function createConstantNode(value, valueType) {\n    return new ConstantNode(numeric(value, valueType || config.number));\n  }\n\n  return derivative;\n});", "import { isInteger } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { createSimplifyConstant } from './simplify/simplifyConstant.js';\nvar name = 'rationalize';\nvar dependencies = ['config', 'typed', 'equal', 'isZero', 'add', 'subtract', 'multiply', 'divide', 'pow', 'parse', 'simplifyCore', 'simplify', '?bignumber', '?fraction', 'mathWithTransform', 'matrix', 'AccessorNode', 'ArrayNode', 'ConstantNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'SymbolNode', 'ParenthesisNode'];\nexport var createRationalize = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    config,\n    typed,\n    equal,\n    isZero,\n    add,\n    subtract,\n    multiply,\n    divide,\n    pow,\n    parse,\n    simplifyCore,\n    simplify,\n    fraction,\n    bignumber,\n    mathWithTransform,\n    matrix,\n    AccessorNode,\n    ArrayNode,\n    ConstantNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    SymbolNode,\n    ParenthesisNode\n  } = _ref;\n  var simplifyConstant = createSimplifyConstant({\n    typed,\n    config,\n    mathWithTransform,\n    matrix,\n    fraction,\n    bignumber,\n    AccessorNode,\n    ArrayNode,\n    ConstantNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    SymbolNode\n  });\n  /**\n   * Transform a rationalizable expression in a rational fraction.\n   * If rational fraction is one variable polynomial then converts\n   * the numerator and denominator in canonical form, with decreasing\n   * exponents, returning the coefficients of numerator.\n   *\n   * Syntax:\n   *\n   *     rationalize(expr)\n   *     rationalize(expr, detailed)\n   *     rationalize(expr, scope)\n   *     rationalize(expr, scope, detailed)\n   *\n   * Examples:\n   *\n   *     math.rationalize('sin(x)+y')\n   *                   //  Error: There is an unsolved function call\n   *     math.rationalize('2x/y - y/(x+1)')\n   *                   // (2*x^2-y^2+2*x)/(x*y+y)\n   *     math.rationalize('(2x+1)^6')\n   *                   // 64*x^6+192*x^5+240*x^4+160*x^3+60*x^2+12*x+1\n   *     math.rationalize('2x/( (2x-1) / (3x+2) ) - 5x/ ( (3x+4) / (2x^2-5) ) + 3')\n   *                   // -20*x^4+28*x^3+104*x^2+6*x-12)/(6*x^2+5*x-4)\n   *     math.rationalize('x/(1-x)/(x-2)/(x-3)/(x-4) + 2x/ ( (1-2x)/(2-3x) )/ ((3-4x)/(4-5x) )') =\n   *                   // (-30*x^7+344*x^6-1506*x^5+3200*x^4-3472*x^3+1846*x^2-381*x)/\n   *                   //     (-8*x^6+90*x^5-383*x^4+780*x^3-797*x^2+390*x-72)\n   *\n   *     math.rationalize('x+x+x+y',{y:1}) // 3*x+1\n   *     math.rationalize('x+x+x+y',{})    // 3*x+y\n   *\n   *     const ret = math.rationalize('x+x+x+y',{},true)\n   *                   // ret.expression=3*x+y, ret.variables = [\"x\",\"y\"]\n   *     const ret = math.rationalize('-2+5x^2',{},true)\n   *                   // ret.expression=5*x^2-2, ret.variables = [\"x\"], ret.coefficients=[-2,0,5]\n   *\n   * See also:\n   *\n   *     simplify\n   *\n   * @param  {Node|string} expr    The expression to check if is a polynomial expression\n   * @param  {Object|boolean}      optional scope of expression or true for already evaluated rational expression at input\n   * @param  {Boolean}  detailed   optional True if return an object, false if return expression node (default)\n   *\n   * @return {Object | Node}    The rational polynomial of `expr` or an object\n   *            `{expression, numerator, denominator, variables, coefficients}`, where\n   *              `expression` is a `Node` with the node simplified expression,\n   *              `numerator` is a `Node` with the simplified numerator of expression,\n   *              `denominator` is a `Node` or `boolean` with the simplified denominator or `false` (if there is no denominator),\n   *              `variables` is an array with variable names,\n   *              and `coefficients` is an array with coefficients of numerator sorted by increased exponent\n   *           {Expression Node}  node simplified expression\n   *\n   */\n\n  return typed(name, {\n    string: function string(expr) {\n      return this(parse(expr), {}, false);\n    },\n    'string, boolean': function stringBoolean(expr, detailed) {\n      return this(parse(expr), {}, detailed);\n    },\n    'string, Object': function stringObject(expr, scope) {\n      return this(parse(expr), scope, false);\n    },\n    'string, Object, boolean': function stringObjectBoolean(expr, scope, detailed) {\n      return this(parse(expr), scope, detailed);\n    },\n    Node: function Node(expr) {\n      return this(expr, {}, false);\n    },\n    'Node, boolean': function NodeBoolean(expr, detailed) {\n      return this(expr, {}, detailed);\n    },\n    'Node, Object': function NodeObject(expr, scope) {\n      return this(expr, scope, false);\n    },\n    'Node, Object, boolean': function NodeObjectBoolean(expr, scope, detailed) {\n      var setRules = rulesRationalize(); // Rules for change polynomial in near canonical form\n\n      var polyRet = polynomial(expr, scope, true, setRules.firstRules); // Check if expression is a rationalizable polynomial\n\n      var nVars = polyRet.variables.length;\n      var noExactFractions = {\n        exactFractions: false\n      };\n      var withExactFractions = {\n        exactFractions: true\n      };\n      expr = polyRet.expression;\n\n      if (nVars >= 1) {\n        // If expression in not a constant\n        expr = expandPower(expr); // First expand power of polynomials (cannot be made from rules!)\n\n        var sBefore; // Previous expression\n\n        var rules;\n        var eDistrDiv = true;\n        var redoInic = false; // Apply the initial rules, including succ div rules:\n\n        expr = simplify(expr, setRules.firstRules, {}, noExactFractions);\n        var s;\n\n        while (true) {\n          // Alternate applying successive division rules and distr.div.rules\n          // until there are no more changes:\n          rules = eDistrDiv ? setRules.distrDivRules : setRules.sucDivRules;\n          expr = simplify(expr, rules, {}, withExactFractions);\n          eDistrDiv = !eDistrDiv; // Swap between Distr.Div and Succ. Div. Rules\n\n          s = expr.toString();\n\n          if (s === sBefore) {\n            break; // No changes : end of the loop\n          }\n\n          redoInic = true;\n          sBefore = s;\n        }\n\n        if (redoInic) {\n          // Apply first rules again without succ div rules (if there are changes)\n          expr = simplify(expr, setRules.firstRulesAgain, {}, noExactFractions);\n        } // Apply final rules:\n\n\n        expr = simplify(expr, setRules.finalRules, {}, noExactFractions);\n      } // NVars >= 1\n\n\n      var coefficients = [];\n      var retRationalize = {};\n\n      if (expr.type === 'OperatorNode' && expr.isBinary() && expr.op === '/') {\n        // Separate numerator from denominator\n        if (nVars === 1) {\n          expr.args[0] = polyToCanonical(expr.args[0], coefficients);\n          expr.args[1] = polyToCanonical(expr.args[1]);\n        }\n\n        if (detailed) {\n          retRationalize.numerator = expr.args[0];\n          retRationalize.denominator = expr.args[1];\n        }\n      } else {\n        if (nVars === 1) {\n          expr = polyToCanonical(expr, coefficients);\n        }\n\n        if (detailed) {\n          retRationalize.numerator = expr;\n          retRationalize.denominator = null;\n        }\n      } // nVars\n\n\n      if (!detailed) return expr;\n      retRationalize.coefficients = coefficients;\n      retRationalize.variables = polyRet.variables;\n      retRationalize.expression = expr;\n      return retRationalize;\n    } // ^^^^^^^ end of rationalize ^^^^^^^^\n\n  }); // end of typed rationalize\n\n  /**\n   *  Function to simplify an expression using an optional scope and\n   *  return it if the expression is a polynomial expression, i.e.\n   *  an expression with one or more variables and the operators\n   *  +, -, *, and ^, where the exponent can only be a positive integer.\n   *\n   * Syntax:\n   *\n   *     polynomial(expr,scope,extended, rules)\n   *\n   * @param  {Node | string} expr     The expression to simplify and check if is polynomial expression\n   * @param  {object} scope           Optional scope for expression simplification\n   * @param  {boolean} extended       Optional. Default is false. When true allows divide operator.\n   * @param  {array}  rules           Optional. Default is no rule.\n   *\n   *\n   * @return {Object}\n   *            {Object} node:   node simplified expression\n   *            {Array}  variables:  variable names\n   */\n\n  function polynomial(expr, scope, extended, rules) {\n    var variables = [];\n    var node = simplify(expr, rules, scope, {\n      exactFractions: false\n    }); // Resolves any variables and functions with all defined parameters\n\n    extended = !!extended;\n    var oper = '+-*' + (extended ? '/' : '');\n    recPoly(node);\n    var retFunc = {};\n    retFunc.expression = node;\n    retFunc.variables = variables;\n    return retFunc; // -------------------------------------------------------------------------------------------------------\n\n    /**\n     *  Function to simplify an expression using an optional scope and\n     *  return it if the expression is a polynomial expression, i.e.\n     *  an expression with one or more variables and the operators\n     *  +, -, *, and ^, where the exponent can only be a positive integer.\n     *\n     * Syntax:\n     *\n     *     recPoly(node)\n     *\n     *\n     * @param  {Node} node               The current sub tree expression in recursion\n     *\n     * @return                           nothing, throw an exception if error\n     */\n\n    function recPoly(node) {\n      var tp = node.type; // node type\n\n      if (tp === 'FunctionNode') {\n        // No function call in polynomial expression\n        throw new Error('There is an unsolved function call');\n      } else if (tp === 'OperatorNode') {\n        if (node.op === '^') {\n          // TODO: handle negative exponents like in '1/x^(-2)'\n          if (node.args[1].type !== 'ConstantNode' || !isInteger(parseFloat(node.args[1].value))) {\n            throw new Error('There is a non-integer exponent');\n          } else {\n            recPoly(node.args[0]);\n          }\n        } else {\n          if (oper.indexOf(node.op) === -1) {\n            throw new Error('Operator ' + node.op + ' invalid in polynomial expression');\n          }\n\n          for (var i = 0; i < node.args.length; i++) {\n            recPoly(node.args[i]);\n          }\n        } // type of operator\n\n      } else if (tp === 'SymbolNode') {\n        var _name = node.name; // variable name\n\n        var pos = variables.indexOf(_name);\n\n        if (pos === -1) {\n          // new variable in expression\n          variables.push(_name);\n        }\n      } else if (tp === 'ParenthesisNode') {\n        recPoly(node.content);\n      } else if (tp !== 'ConstantNode') {\n        throw new Error('type ' + tp + ' is not allowed in polynomial expression');\n      }\n    } // end of recPoly\n\n  } // end of polynomial\n  // ---------------------------------------------------------------------------------------\n\n  /**\n   * Return a rule set to rationalize an polynomial expression in rationalize\n   *\n   * Syntax:\n   *\n   *     rulesRationalize()\n   *\n   * @return {array}        rule set to rationalize an polynomial expression\n   */\n\n\n  function rulesRationalize() {\n    var oldRules = [simplifyCore, // sCore\n    {\n      l: 'n+n',\n      r: '2*n'\n    }, {\n      l: 'n+-n',\n      r: '0'\n    }, simplifyConstant, // sConstant\n    {\n      l: 'n*(n1^-1)',\n      r: 'n/n1'\n    }, {\n      l: 'n*n1^-n2',\n      r: 'n/n1^n2'\n    }, {\n      l: 'n1^-1',\n      r: '1/n1'\n    }, {\n      l: 'n*(n1/n2)',\n      r: '(n*n1)/n2'\n    }, {\n      l: '1*n',\n      r: 'n'\n    }];\n    var rulesFirst = [{\n      l: '(-n1)/(-n2)',\n      r: 'n1/n2'\n    }, // Unary division\n    {\n      l: '(-n1)*(-n2)',\n      r: 'n1*n2'\n    }, // Unary multiplication\n    {\n      l: 'n1--n2',\n      r: 'n1+n2'\n    }, // '--' elimination\n    {\n      l: 'n1-n2',\n      r: 'n1+(-n2)'\n    }, // Subtraction turn into add with un\uFFFDry minus\n    {\n      l: '(n1+n2)*n3',\n      r: '(n1*n3 + n2*n3)'\n    }, // Distributive 1\n    {\n      l: 'n1*(n2+n3)',\n      r: '(n1*n2+n1*n3)'\n    }, // Distributive 2\n    {\n      l: 'c1*n + c2*n',\n      r: '(c1+c2)*n'\n    }, // Joining constants\n    {\n      l: 'c1*n + n',\n      r: '(c1+1)*n'\n    }, // Joining constants\n    {\n      l: 'c1*n - c2*n',\n      r: '(c1-c2)*n'\n    }, // Joining constants\n    {\n      l: 'c1*n - n',\n      r: '(c1-1)*n'\n    }, // Joining constants\n    {\n      l: 'v/c',\n      r: '(1/c)*v'\n    }, // variable/constant (new!)\n    {\n      l: 'v/-c',\n      r: '-(1/c)*v'\n    }, // variable/constant (new!)\n    {\n      l: '-v*-c',\n      r: 'c*v'\n    }, // Inversion constant and variable 1\n    {\n      l: '-v*c',\n      r: '-c*v'\n    }, // Inversion constant and variable 2\n    {\n      l: 'v*-c',\n      r: '-c*v'\n    }, // Inversion constant and variable 3\n    {\n      l: 'v*c',\n      r: 'c*v'\n    }, // Inversion constant and variable 4\n    {\n      l: '-(-n1*n2)',\n      r: '(n1*n2)'\n    }, // Unary propagation\n    {\n      l: '-(n1*n2)',\n      r: '(-n1*n2)'\n    }, // Unary propagation\n    {\n      l: '-(-n1+n2)',\n      r: '(n1-n2)'\n    }, // Unary propagation\n    {\n      l: '-(n1+n2)',\n      r: '(-n1-n2)'\n    }, // Unary propagation\n    {\n      l: '(n1^n2)^n3',\n      r: '(n1^(n2*n3))'\n    }, // Power to Power\n    {\n      l: '-(-n1/n2)',\n      r: '(n1/n2)'\n    }, // Division and Unary\n    {\n      l: '-(n1/n2)',\n      r: '(-n1/n2)'\n    }]; // Divisao and Unary\n\n    var rulesDistrDiv = [{\n      l: '(n1/n2 + n3/n4)',\n      r: '((n1*n4 + n3*n2)/(n2*n4))'\n    }, // Sum of fractions\n    {\n      l: '(n1/n2 + n3)',\n      r: '((n1 + n3*n2)/n2)'\n    }, // Sum fraction with number 1\n    {\n      l: '(n1 + n2/n3)',\n      r: '((n1*n3 + n2)/n3)'\n    }]; // Sum fraction with number 1\n\n    var rulesSucDiv = [{\n      l: '(n1/(n2/n3))',\n      r: '((n1*n3)/n2)'\n    }, // Division simplification\n    {\n      l: '(n1/n2/n3)',\n      r: '(n1/(n2*n3))'\n    }];\n    var setRules = {}; // rules set in 4 steps.\n    // All rules => infinite loop\n    // setRules.allRules =oldRules.concat(rulesFirst,rulesDistrDiv,rulesSucDiv)\n\n    setRules.firstRules = oldRules.concat(rulesFirst, rulesSucDiv); // First rule set\n\n    setRules.distrDivRules = rulesDistrDiv; // Just distr. div. rules\n\n    setRules.sucDivRules = rulesSucDiv; // Jus succ. div. rules\n\n    setRules.firstRulesAgain = oldRules.concat(rulesFirst); // Last rules set without succ. div.\n    // Division simplification\n    // Second rule set.\n    // There is no aggregate expression with parentesis, but the only variable can be scattered.\n\n    setRules.finalRules = [simplifyCore, // simplify.rules[0]\n    {\n      l: 'n*-n',\n      r: '-n^2'\n    }, // Joining multiply with power 1\n    {\n      l: 'n*n',\n      r: 'n^2'\n    }, // Joining multiply with power 2\n    simplifyConstant, // simplify.rules[14] old 3rd index in oldRules\n    {\n      l: 'n*-n^n1',\n      r: '-n^(n1+1)'\n    }, // Joining multiply with power 3\n    {\n      l: 'n*n^n1',\n      r: 'n^(n1+1)'\n    }, // Joining multiply with power 4\n    {\n      l: 'n^n1*-n^n2',\n      r: '-n^(n1+n2)'\n    }, // Joining multiply with power 5\n    {\n      l: 'n^n1*n^n2',\n      r: 'n^(n1+n2)'\n    }, // Joining multiply with power 6\n    {\n      l: 'n^n1*-n',\n      r: '-n^(n1+1)'\n    }, // Joining multiply with power 7\n    {\n      l: 'n^n1*n',\n      r: 'n^(n1+1)'\n    }, // Joining multiply with power 8\n    {\n      l: 'n^n1/-n',\n      r: '-n^(n1-1)'\n    }, // Joining multiply with power 8\n    {\n      l: 'n^n1/n',\n      r: 'n^(n1-1)'\n    }, // Joining division with power 1\n    {\n      l: 'n/-n^n1',\n      r: '-n^(1-n1)'\n    }, // Joining division with power 2\n    {\n      l: 'n/n^n1',\n      r: 'n^(1-n1)'\n    }, // Joining division with power 3\n    {\n      l: 'n^n1/-n^n2',\n      r: 'n^(n1-n2)'\n    }, // Joining division with power 4\n    {\n      l: 'n^n1/n^n2',\n      r: 'n^(n1-n2)'\n    }, // Joining division with power 5\n    {\n      l: 'n1+(-n2*n3)',\n      r: 'n1-n2*n3'\n    }, // Solving useless parenthesis 1\n    {\n      l: 'v*(-c)',\n      r: '-c*v'\n    }, // Solving useless unary 2\n    {\n      l: 'n1+-n2',\n      r: 'n1-n2'\n    }, // Solving +- together (new!)\n    {\n      l: 'v*c',\n      r: 'c*v'\n    }, // inversion constant with variable\n    {\n      l: '(n1^n2)^n3',\n      r: '(n1^(n2*n3))'\n    } // Power to Power\n    ];\n    return setRules;\n  } // End rulesRationalize\n  // ---------------------------------------------------------------------------------------\n\n  /**\n   *  Expand recursively a tree node for handling with expressions with exponents\n   *  (it's not for constants, symbols or functions with exponents)\n   *  PS: The other parameters are internal for recursion\n   *\n   * Syntax:\n   *\n   *     expandPower(node)\n   *\n   * @param  {Node} node         Current expression node\n   * @param  {node} parent       Parent current node inside the recursion\n   * @param  (int}               Parent number of chid inside the rercursion\n   *\n   * @return {node}        node expression with all powers expanded.\n   */\n\n\n  function expandPower(node, parent, indParent) {\n    var tp = node.type;\n    var internal = arguments.length > 1; // TRUE in internal calls\n\n    if (tp === 'OperatorNode' && node.isBinary()) {\n      var does = false;\n      var val;\n\n      if (node.op === '^') {\n        // First operator: Parenthesis or UnaryMinus\n        if ((node.args[0].type === 'ParenthesisNode' || node.args[0].type === 'OperatorNode') && node.args[1].type === 'ConstantNode') {\n          // Second operator: Constant\n          val = parseFloat(node.args[1].value);\n          does = val >= 2 && isInteger(val);\n        }\n      }\n\n      if (does) {\n        // Exponent >= 2\n        // Before:\n        //            operator A --> Subtree\n        // parent pow\n        //            constant\n        //\n        if (val > 2) {\n          // Exponent > 2,\n          // AFTER:  (exponent > 2)\n          //             operator A --> Subtree\n          // parent  *\n          //                 deep clone (operator A --> Subtree\n          //             pow\n          //                 constant - 1\n          //\n          var nEsqTopo = node.args[0];\n          var nDirTopo = new OperatorNode('^', 'pow', [node.args[0].cloneDeep(), new ConstantNode(val - 1)]);\n          node = new OperatorNode('*', 'multiply', [nEsqTopo, nDirTopo]);\n        } else {\n          // Expo = 2 - no power\n          // AFTER:  (exponent =  2)\n          //             operator A --> Subtree\n          // parent   oper\n          //            deep clone (operator A --> Subtree)\n          //\n          node = new OperatorNode('*', 'multiply', [node.args[0], node.args[0].cloneDeep()]);\n        }\n\n        if (internal) {\n          // Change parent references in internal recursive calls\n          if (indParent === 'content') {\n            parent.content = node;\n          } else {\n            parent.args[indParent] = node;\n          }\n        }\n      } // does\n\n    } // binary OperatorNode\n\n\n    if (tp === 'ParenthesisNode') {\n      // Recursion\n      expandPower(node.content, node, 'content');\n    } else if (tp !== 'ConstantNode' && tp !== 'SymbolNode') {\n      for (var i = 0; i < node.args.length; i++) {\n        expandPower(node.args[i], node, i);\n      }\n    }\n\n    if (!internal) {\n      // return the root node\n      return node;\n    }\n  } // End expandPower\n  // ---------------------------------------------------------------------------------------\n\n  /**\n   * Auxilary function for rationalize\n   * Convert near canonical polynomial in one variable in a canonical polynomial\n   * with one term for each exponent in decreasing order\n   *\n   * Syntax:\n   *\n   *     polyToCanonical(node [, coefficients])\n   *\n   * @param  {Node | string} expr       The near canonical polynomial expression to convert in a a canonical polynomial expression\n   *\n   *        The string or tree expression needs to be at below syntax, with free spaces:\n   *         (  (^(-)? | [+-]? )cte (*)? var (^expo)?  | cte )+\n   *       Where 'var' is one variable with any valid name\n   *             'cte' are real numeric constants with any value. It can be omitted if equal than 1\n   *             'expo' are integers greater than 0. It can be omitted if equal than 1.\n   *\n   * @param  {array}   coefficients             Optional returns coefficients sorted by increased exponent\n   *\n   *\n   * @return {node}        new node tree with one variable polynomial or string error.\n   */\n\n\n  function polyToCanonical(node, coefficients) {\n    if (coefficients === undefined) {\n      coefficients = [];\n    } // coefficients.\n\n\n    coefficients[0] = 0; // index is the exponent\n\n    var o = {};\n    o.cte = 1;\n    o.oper = '+'; // fire: mark with * or ^ when finds * or ^ down tree, reset to \"\" with + and -.\n    //       It is used to deduce the exponent: 1 for *, 0 for \"\".\n\n    o.fire = '';\n    var maxExpo = 0; // maximum exponent\n\n    var varname = ''; // variable name\n\n    recurPol(node, null, o);\n    maxExpo = coefficients.length - 1;\n    var first = true;\n    var no;\n\n    for (var i = maxExpo; i >= 0; i--) {\n      if (coefficients[i] === 0) continue;\n      var n1 = new ConstantNode(first ? coefficients[i] : Math.abs(coefficients[i]));\n      var op = coefficients[i] < 0 ? '-' : '+';\n\n      if (i > 0) {\n        // Is not a constant without variable\n        var n2 = new SymbolNode(varname);\n\n        if (i > 1) {\n          var n3 = new ConstantNode(i);\n          n2 = new OperatorNode('^', 'pow', [n2, n3]);\n        }\n\n        if (coefficients[i] === -1 && first) {\n          n1 = new OperatorNode('-', 'unaryMinus', [n2]);\n        } else if (Math.abs(coefficients[i]) === 1) {\n          n1 = n2;\n        } else {\n          n1 = new OperatorNode('*', 'multiply', [n1, n2]);\n        }\n      }\n\n      if (first) {\n        no = n1;\n      } else if (op === '+') {\n        no = new OperatorNode('+', 'add', [no, n1]);\n      } else {\n        no = new OperatorNode('-', 'subtract', [no, n1]);\n      }\n\n      first = false;\n    } // for\n\n\n    if (first) {\n      return new ConstantNode(0);\n    } else {\n      return no;\n    }\n    /**\n     * Recursive auxilary function inside polyToCanonical for\n     * converting expression in canonical form\n     *\n     * Syntax:\n     *\n     *     recurPol(node, noPai, obj)\n     *\n     * @param  {Node} node        The current subpolynomial expression\n     * @param  {Node | Null}  noPai   The current parent node\n     * @param  {object}    obj        Object with many internal flags\n     *\n     * @return {}                    No return. If error, throws an exception\n     */\n\n\n    function recurPol(node, noPai, o) {\n      var tp = node.type;\n\n      if (tp === 'FunctionNode') {\n        // ***** FunctionName *****\n        // No function call in polynomial expression\n        throw new Error('There is an unsolved function call');\n      } else if (tp === 'OperatorNode') {\n        // ***** OperatorName *****\n        if ('+-*^'.indexOf(node.op) === -1) throw new Error('Operator ' + node.op + ' invalid');\n\n        if (noPai !== null) {\n          // -(unary),^  : children of *,+,-\n          if ((node.fn === 'unaryMinus' || node.fn === 'pow') && noPai.fn !== 'add' && noPai.fn !== 'subtract' && noPai.fn !== 'multiply') {\n            throw new Error('Invalid ' + node.op + ' placing');\n          } // -,+,* : children of +,-\n\n\n          if ((node.fn === 'subtract' || node.fn === 'add' || node.fn === 'multiply') && noPai.fn !== 'add' && noPai.fn !== 'subtract') {\n            throw new Error('Invalid ' + node.op + ' placing');\n          } // -,+ : first child\n\n\n          if ((node.fn === 'subtract' || node.fn === 'add' || node.fn === 'unaryMinus') && o.noFil !== 0) {\n            throw new Error('Invalid ' + node.op + ' placing');\n          }\n        } // Has parent\n        // Firers: ^,*       Old:   ^,&,-(unary): firers\n\n\n        if (node.op === '^' || node.op === '*') {\n          o.fire = node.op;\n        }\n\n        for (var _i = 0; _i < node.args.length; _i++) {\n          // +,-: reset fire\n          if (node.fn === 'unaryMinus') o.oper = '-';\n\n          if (node.op === '+' || node.fn === 'subtract') {\n            o.fire = '';\n            o.cte = 1; // default if there is no constant\n\n            o.oper = _i === 0 ? '+' : node.op;\n          }\n\n          o.noFil = _i; // number of son\n\n          recurPol(node.args[_i], node, o);\n        } // for in children\n\n      } else if (tp === 'SymbolNode') {\n        // ***** SymbolName *****\n        if (node.name !== varname && varname !== '') {\n          throw new Error('There is more than one variable');\n        }\n\n        varname = node.name;\n\n        if (noPai === null) {\n          coefficients[1] = 1;\n          return;\n        } // ^: Symbol is First child\n\n\n        if (noPai.op === '^' && o.noFil !== 0) {\n          throw new Error('In power the variable should be the first parameter');\n        } // *: Symbol is Second child\n\n\n        if (noPai.op === '*' && o.noFil !== 1) {\n          throw new Error('In multiply the variable should be the second parameter');\n        } // Symbol: firers '',* => it means there is no exponent above, so it's 1 (cte * var)\n\n\n        if (o.fire === '' || o.fire === '*') {\n          if (maxExpo < 1) coefficients[1] = 0;\n          coefficients[1] += o.cte * (o.oper === '+' ? 1 : -1);\n          maxExpo = Math.max(1, maxExpo);\n        }\n      } else if (tp === 'ConstantNode') {\n        var valor = parseFloat(node.value);\n\n        if (noPai === null) {\n          coefficients[0] = valor;\n          return;\n        }\n\n        if (noPai.op === '^') {\n          // cte: second  child of power\n          if (o.noFil !== 1) throw new Error('Constant cannot be powered');\n\n          if (!isInteger(valor) || valor <= 0) {\n            throw new Error('Non-integer exponent is not allowed');\n          }\n\n          for (var _i2 = maxExpo + 1; _i2 < valor; _i2++) {\n            coefficients[_i2] = 0;\n          }\n\n          if (valor > maxExpo) coefficients[valor] = 0;\n          coefficients[valor] += o.cte * (o.oper === '+' ? 1 : -1);\n          maxExpo = Math.max(valor, maxExpo);\n          return;\n        }\n\n        o.cte = valor; // Cte: firer '' => There is no exponent and no multiplication, so the exponent is 0.\n\n        if (o.fire === '') {\n          coefficients[0] += o.cte * (o.oper === '+' ? 1 : -1);\n        }\n      } else {\n        throw new Error('Type ' + tp + ' is not allowed');\n      }\n    } // End of recurPol\n\n  } // End of polyToCanonical\n\n});", "/*!\r\n *  decimal.js v10.5.0\r\n *  An arbitrary-precision Decimal type for JavaScript.\r\n *  https://github.com/MikeMcl/decimal.js\r\n *  Copyright (c) 2025 Michael Mclaughlin <M8ch88l@gmail.com>\r\n *  MIT Licence\r\n */\r\n\r\n\r\n// -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\r\n\r\n\r\n  // The maximum exponent magnitude.\r\n  // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\r\nvar EXP_LIMIT = 9e15,                      // 0 to 9e15\r\n\r\n  // The limit on the value of `precision`, and on the value of the first argument to\r\n  // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\r\n  MAX_DIGITS = 1e9,                        // 0 to 1e9\r\n\r\n  // Base conversion alphabet.\r\n  NUMERALS = '0123456789abcdef',\r\n\r\n  // The natural logarithm of 10 (1025 digits).\r\n  LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\r\n\r\n  // Pi (1025 digits).\r\n  PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\r\n\r\n\r\n  // The initial configuration properties of the Decimal constructor.\r\n  DEFAULTS = {\r\n\r\n    // These values must be integers within the stated ranges (inclusive).\r\n    // Most of these values can be changed at run-time using the `Decimal.config` method.\r\n\r\n    // The maximum number of significant digits of the result of a calculation or base conversion.\r\n    // E.g. `Decimal.config({ precision: 20 });`\r\n    precision: 20,                         // 1 to MAX_DIGITS\r\n\r\n    // The rounding mode used when rounding to `precision`.\r\n    //\r\n    // ROUND_UP         0 Away from zero.\r\n    // ROUND_DOWN       1 Towards zero.\r\n    // ROUND_CEIL       2 Towards +Infinity.\r\n    // ROUND_FLOOR      3 Towards -Infinity.\r\n    // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\r\n    // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\r\n    // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n    // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n    // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n    //\r\n    // E.g.\r\n    // `Decimal.rounding = 4;`\r\n    // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\r\n    rounding: 4,                           // 0 to 8\r\n\r\n    // The modulo mode used when calculating the modulus: a mod n.\r\n    // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n    // The remainder (r) is calculated as: r = a - n * q.\r\n    //\r\n    // UP         0 The remainder is positive if the dividend is negative, else is negative.\r\n    // DOWN       1 The remainder has the same sign as the dividend (JavaScript %).\r\n    // FLOOR      3 The remainder has the same sign as the divisor (Python %).\r\n    // HALF_EVEN  6 The IEEE 754 remainder function.\r\n    // EUCLID     9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\r\n    //\r\n    // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\r\n    // division (9) are commonly used for the modulus operation. The other rounding modes can also\r\n    // be used, but they may not give useful results.\r\n    modulo: 1,                             // 0 to 9\r\n\r\n    // The exponent value at and beneath which `toString` returns exponential notation.\r\n    // JavaScript numbers: -7\r\n    toExpNeg: -7,                          // 0 to -EXP_LIMIT\r\n\r\n    // The exponent value at and above which `toString` returns exponential notation.\r\n    // JavaScript numbers: 21\r\n    toExpPos:  21,                         // 0 to EXP_LIMIT\r\n\r\n    // The minimum exponent value, beneath which underflow to zero occurs.\r\n    // JavaScript numbers: -324  (5e-324)\r\n    minE: -EXP_LIMIT,                      // -1 to -EXP_LIMIT\r\n\r\n    // The maximum exponent value, above which overflow to Infinity occurs.\r\n    // JavaScript numbers: 308  (1.7976931348623157e+308)\r\n    maxE: EXP_LIMIT,                       // 1 to EXP_LIMIT\r\n\r\n    // Whether to use cryptographically-secure random number generation, if available.\r\n    crypto: false                          // true/false\r\n  },\r\n\r\n\r\n// ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\r\n\r\n\r\n  inexact, quadrant,\r\n  external = true,\r\n\r\n  decimalError = '[DecimalError] ',\r\n  invalidArgument = decimalError + 'Invalid argument: ',\r\n  precisionLimitExceeded = decimalError + 'Precision limit exceeded',\r\n  cryptoUnavailable = decimalError + 'crypto unavailable',\r\n  tag = '[object Decimal]',\r\n\r\n  mathfloor = Math.floor,\r\n  mathpow = Math.pow,\r\n\r\n  isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\r\n  isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\r\n  isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\r\n  isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\r\n\r\n  BASE = 1e7,\r\n  LOG_BASE = 7,\r\n  MAX_SAFE_INTEGER = 9007199254740991,\r\n\r\n  LN10_PRECISION = LN10.length - 1,\r\n  PI_PRECISION = PI.length - 1,\r\n\r\n  // Decimal.prototype object\r\n  P = { toStringTag: tag };\r\n\r\n\r\n// Decimal prototype methods\r\n\r\n\r\n/*\r\n *  absoluteValue             abs\r\n *  ceil\r\n *  clampedTo                 clamp\r\n *  comparedTo                cmp\r\n *  cosine                    cos\r\n *  cubeRoot                  cbrt\r\n *  decimalPlaces             dp\r\n *  dividedBy                 div\r\n *  dividedToIntegerBy        divToInt\r\n *  equals                    eq\r\n *  floor\r\n *  greaterThan               gt\r\n *  greaterThanOrEqualTo      gte\r\n *  hyperbolicCosine          cosh\r\n *  hyperbolicSine            sinh\r\n *  hyperbolicTangent         tanh\r\n *  inverseCosine             acos\r\n *  inverseHyperbolicCosine   acosh\r\n *  inverseHyperbolicSine     asinh\r\n *  inverseHyperbolicTangent  atanh\r\n *  inverseSine               asin\r\n *  inverseTangent            atan\r\n *  isFinite\r\n *  isInteger                 isInt\r\n *  isNaN\r\n *  isNegative                isNeg\r\n *  isPositive                isPos\r\n *  isZero\r\n *  lessThan                  lt\r\n *  lessThanOrEqualTo         lte\r\n *  logarithm                 log\r\n *  [maximum]                 [max]\r\n *  [minimum]                 [min]\r\n *  minus                     sub\r\n *  modulo                    mod\r\n *  naturalExponential        exp\r\n *  naturalLogarithm          ln\r\n *  negated                   neg\r\n *  plus                      add\r\n *  precision                 sd\r\n *  round\r\n *  sine                      sin\r\n *  squareRoot                sqrt\r\n *  tangent                   tan\r\n *  times                     mul\r\n *  toBinary\r\n *  toDecimalPlaces           toDP\r\n *  toExponential\r\n *  toFixed\r\n *  toFraction\r\n *  toHexadecimal             toHex\r\n *  toNearest\r\n *  toNumber\r\n *  toOctal\r\n *  toPower                   pow\r\n *  toPrecision\r\n *  toSignificantDigits       toSD\r\n *  toString\r\n *  truncated                 trunc\r\n *  valueOf                   toJSON\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of this Decimal.\r\n *\r\n */\r\nP.absoluteValue = P.abs = function () {\r\n  var x = new this.constructor(this);\r\n  if (x.s < 0) x.s = 1;\r\n  return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of positive Infinity.\r\n *\r\n */\r\nP.ceil = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal clamped to the range\r\n * delineated by `min` and `max`.\r\n *\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nP.clampedTo = P.clamp = function (min, max) {\r\n  var k,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n  min = new Ctor(min);\r\n  max = new Ctor(max);\r\n  if (!min.s || !max.s) return new Ctor(NaN);\r\n  if (min.gt(max)) throw Error(invalidArgument + max);\r\n  k = x.cmp(min);\r\n  return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\r\n};\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if the value of this Decimal is greater than the value of `y`,\r\n *  -1    if the value of this Decimal is less than the value of `y`,\r\n *   0    if they have the same value,\r\n *   NaN  if the value of either Decimal is NaN.\r\n *\r\n */\r\nP.comparedTo = P.cmp = function (y) {\r\n  var i, j, xdL, ydL,\r\n    x = this,\r\n    xd = x.d,\r\n    yd = (y = new x.constructor(y)).d,\r\n    xs = x.s,\r\n    ys = y.s;\r\n\r\n  // Either NaN or \u00B1Infinity?\r\n  if (!xd || !yd) {\r\n    return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Either zero?\r\n  if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\r\n\r\n  // Signs differ?\r\n  if (xs !== ys) return xs;\r\n\r\n  // Compare exponents.\r\n  if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\r\n\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Compare digit by digit.\r\n  for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\r\n    if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\r\n  }\r\n\r\n  // Compare lengths.\r\n  return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * cos(0)         = 1\r\n * cos(-0)        = 1\r\n * cos(Infinity)  = NaN\r\n * cos(-Infinity) = NaN\r\n * cos(NaN)       = NaN\r\n *\r\n */\r\nP.cosine = P.cos = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.d) return new Ctor(NaN);\r\n\r\n  // cos(0) = cos(-0) = 1\r\n  if (!x.d[0]) return new Ctor(1);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n  Ctor.rounding = 1;\r\n\r\n  x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *\r\n * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n *  cbrt(0)  =  0\r\n *  cbrt(-0) = -0\r\n *  cbrt(1)  =  1\r\n *  cbrt(-1) = -1\r\n *  cbrt(N)  =  N\r\n *  cbrt(-I) = -I\r\n *  cbrt(I)  =  I\r\n *\r\n * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\r\n *\r\n */\r\nP.cubeRoot = P.cbrt = function () {\r\n  var e, m, n, r, rep, s, sd, t, t3, t3plusx,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = x.s * mathpow(x.s * x, 1 / 3);\r\n\r\n   // Math.cbrt underflow/overflow?\r\n   // Pass x to Math.pow as integer, then adjust the exponent of the result.\r\n  if (!s || Math.abs(s) == 1 / 0) {\r\n    n = digitsToString(x.d);\r\n    e = x.e;\r\n\r\n    // Adjust n exponent so it is a multiple of 3 away from x exponent.\r\n    if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\r\n    s = mathpow(n, 1 / 3);\r\n\r\n    // Rarely, e may be one less than the result exponent value.\r\n    e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n    r.s = x.s;\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  sd = (e = Ctor.precision) + 3;\r\n\r\n  // Halley's method.\r\n  // TODO? Compare Newton's method.\r\n  for (;;) {\r\n    t = r;\r\n    t3 = t.times(t).times(t);\r\n    t3plusx = t3.plus(x);\r\n    r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\r\n\r\n    // TODO? Replace with for-loop and checkRoundingDigits.\r\n    if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n      n = n.slice(sd - 3, sd + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\r\n      // , i.e. approaching a rounding boundary, continue the iteration.\r\n      if (n == '9999' || !rep && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        if (!rep) {\r\n          finalise(t, e + 1, 0);\r\n\r\n          if (t.times(t).times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        }\r\n\r\n        sd += 4;\r\n        rep = 1;\r\n      } else {\r\n\r\n        // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n        // If not, then there are further digits and m will be truthy.\r\n        if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n          // Truncate to the first rounding digit.\r\n          finalise(r, e + 1, 1);\r\n          m = !r.times(r).times(r).eq(x);\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return the number of decimal places of the value of this Decimal.\r\n *\r\n */\r\nP.decimalPlaces = P.dp = function () {\r\n  var w,\r\n    d = this.d,\r\n    n = NaN;\r\n\r\n  if (d) {\r\n    w = d.length - 1;\r\n    n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    w = d[w];\r\n    if (w) for (; w % 10 == 0; w /= 10) n--;\r\n    if (n < 0) n = 0;\r\n  }\r\n\r\n  return n;\r\n};\r\n\r\n\r\n/*\r\n *  n / 0 = I\r\n *  n / N = N\r\n *  n / I = 0\r\n *  0 / n = 0\r\n *  0 / 0 = N\r\n *  0 / N = N\r\n *  0 / I = 0\r\n *  N / n = N\r\n *  N / 0 = N\r\n *  N / N = N\r\n *  N / I = N\r\n *  I / n = I\r\n *  I / 0 = I\r\n *  I / N = N\r\n *  I / I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedBy = P.div = function (y) {\r\n  return divide(this, new this.constructor(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\r\n * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.dividedToIntegerBy = P.divToInt = function (y) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n  return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\r\n *\r\n */\r\nP.equals = P.eq = function (y) {\r\n  return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\r\n * direction of negative Infinity.\r\n *\r\n */\r\nP.floor = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 3);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\r\n * false.\r\n *\r\n */\r\nP.greaterThan = P.gt = function (y) {\r\n  return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is greater than or equal to the value of `y`,\r\n * otherwise return false.\r\n *\r\n */\r\nP.greaterThanOrEqualTo = P.gte = function (y) {\r\n  var k = this.cmp(y);\r\n  return k == 1 || k === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [1, Infinity]\r\n *\r\n * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\r\n *\r\n * cosh(0)         = 1\r\n * cosh(-0)        = 1\r\n * cosh(Infinity)  = Infinity\r\n * cosh(-Infinity) = Infinity\r\n * cosh(NaN)       = NaN\r\n *\r\n *  x        time taken (ms)   result\r\n * 1000      9                 9.8503555700852349694e+433\r\n * 10000     25                4.4034091128314607936e+4342\r\n * 100000    171               1.4033316802130615897e+43429\r\n * 1000000   3817              1.5166076984010437725e+434294\r\n * 10000000  abandoned after 2 minute wait\r\n *\r\n * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\r\n *\r\n */\r\nP.hyperbolicCosine = P.cosh = function () {\r\n  var k, n, pr, rm, len,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    one = new Ctor(1);\r\n\r\n  if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\r\n  if (x.isZero()) return one;\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  len = x.d.length;\r\n\r\n  // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\r\n  // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  // TODO? Estimation reused from cosine() and may not be optimal here.\r\n  if (len < 32) {\r\n    k = Math.ceil(len / 3);\r\n    n = (1 / tinyPow(4, k)).toString();\r\n  } else {\r\n    k = 16;\r\n    n = '2.3283064365386962890625e-10';\r\n  }\r\n\r\n  x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\r\n\r\n  // Reverse argument reduction\r\n  var cosh2_x,\r\n    i = k,\r\n    d8 = new Ctor(8);\r\n  for (; i--;) {\r\n    cosh2_x = x.times(x);\r\n    x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\r\n  }\r\n\r\n  return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\r\n *\r\n * sinh(0)         = 0\r\n * sinh(-0)        = -0\r\n * sinh(Infinity)  = Infinity\r\n * sinh(-Infinity) = -Infinity\r\n * sinh(NaN)       = NaN\r\n *\r\n * x        time taken (ms)\r\n * 10       2 ms\r\n * 100      5 ms\r\n * 1000     14 ms\r\n * 10000    82 ms\r\n * 100000   886 ms            1.4033316802130615897e+43429\r\n * 200000   2613 ms\r\n * 300000   5407 ms\r\n * 400000   8824 ms\r\n * 500000   13026 ms          8.7080643612718084129e+217146\r\n * 1000000  48543 ms\r\n *\r\n * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\r\n *\r\n */\r\nP.hyperbolicSine = P.sinh = function () {\r\n  var k, pr, rm, len,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  len = x.d.length;\r\n\r\n  if (len < 3) {\r\n    x = taylorSeries(Ctor, 2, x, x, true);\r\n  } else {\r\n\r\n    // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\r\n    // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\r\n    // 3 multiplications and 1 addition\r\n\r\n    // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\r\n    // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\r\n    // 4 multiplications and 2 additions\r\n\r\n    // Estimate the optimum number of times to use the argument reduction.\r\n    k = 1.4 * Math.sqrt(len);\r\n    k = k > 16 ? 16 : k | 0;\r\n\r\n    x = x.times(1 / tinyPow(5, k));\r\n    x = taylorSeries(Ctor, 2, x, x, true);\r\n\r\n    // Reverse argument reduction\r\n    var sinh2_x,\r\n      d5 = new Ctor(5),\r\n      d16 = new Ctor(16),\r\n      d20 = new Ctor(20);\r\n    for (; k--;) {\r\n      sinh2_x = x.times(x);\r\n      x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\r\n    }\r\n  }\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * tanh(x) = sinh(x) / cosh(x)\r\n *\r\n * tanh(0)         = 0\r\n * tanh(-0)        = -0\r\n * tanh(Infinity)  = 1\r\n * tanh(-Infinity) = -1\r\n * tanh(NaN)       = NaN\r\n *\r\n */\r\nP.hyperbolicTangent = P.tanh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(x.s);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 7;\r\n  Ctor.rounding = 1;\r\n\r\n  return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\r\n * this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [0, pi]\r\n *\r\n * acos(x) = pi/2 - asin(x)\r\n *\r\n * acos(0)       = pi/2\r\n * acos(-0)      = pi/2\r\n * acos(1)       = 0\r\n * acos(-1)      = pi\r\n * acos(1/2)     = pi/3\r\n * acos(-1/2)    = 2*pi/3\r\n * acos(|x| > 1) = NaN\r\n * acos(NaN)     = NaN\r\n *\r\n */\r\nP.inverseCosine = P.acos = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    k = x.abs().cmp(1),\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding;\r\n\r\n  if (k !== -1) {\r\n    return k === 0\r\n      // |x| is 1\r\n      ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\r\n      // |x| > 1 or x is NaN\r\n      : new Ctor(NaN);\r\n  }\r\n\r\n  if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\r\n\r\n  // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\r\n\r\n  Ctor.precision = pr + 6;\r\n  Ctor.rounding = 1;\r\n\r\n  // See https://github.com/MikeMcl/decimal.js/pull/217\r\n  x = new Ctor(1).minus(x).div(x.plus(1)).sqrt().atan();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [1, Infinity]\r\n * Range: [0, Infinity]\r\n *\r\n * acosh(x) = ln(x + sqrt(x^2 - 1))\r\n *\r\n * acosh(x < 1)     = NaN\r\n * acosh(NaN)       = NaN\r\n * acosh(Infinity)  = Infinity\r\n * acosh(-Infinity) = NaN\r\n * acosh(0)         = NaN\r\n * acosh(-0)        = NaN\r\n * acosh(1)         = 0\r\n * acosh(-1)        = NaN\r\n *\r\n */\r\nP.inverseHyperbolicCosine = P.acosh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\r\n  if (!x.isFinite()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\r\n  Ctor.rounding = 1;\r\n  external = false;\r\n\r\n  x = x.times(x).minus(1).sqrt().plus(x);\r\n\r\n  external = true;\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * asinh(x) = ln(x + sqrt(x^2 + 1))\r\n *\r\n * asinh(NaN)       = NaN\r\n * asinh(Infinity)  = Infinity\r\n * asinh(-Infinity) = -Infinity\r\n * asinh(0)         = 0\r\n * asinh(-0)        = -0\r\n *\r\n */\r\nP.inverseHyperbolicSine = P.asinh = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite() || x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\r\n  Ctor.rounding = 1;\r\n  external = false;\r\n\r\n  x = x.times(x).plus(1).sqrt().plus(x);\r\n\r\n  external = true;\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.ln();\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\r\n * value of this Decimal.\r\n *\r\n * Domain: [-1, 1]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\r\n *\r\n * atanh(|x| > 1)   = NaN\r\n * atanh(NaN)       = NaN\r\n * atanh(Infinity)  = NaN\r\n * atanh(-Infinity) = NaN\r\n * atanh(0)         = 0\r\n * atanh(-0)        = -0\r\n * atanh(1)         = Infinity\r\n * atanh(-1)        = -Infinity\r\n *\r\n */\r\nP.inverseHyperbolicTangent = P.atanh = function () {\r\n  var pr, rm, wpr, xsd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  xsd = x.sd();\r\n\r\n  if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\r\n\r\n  Ctor.precision = wpr = xsd - x.e;\r\n\r\n  x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\r\n\r\n  Ctor.precision = pr + 4;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.ln();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(0.5);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\r\n * Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\r\n *\r\n * asin(0)       = 0\r\n * asin(-0)      = -0\r\n * asin(1/2)     = pi/6\r\n * asin(-1/2)    = -pi/6\r\n * asin(1)       = pi/2\r\n * asin(-1)      = -pi/2\r\n * asin(|x| > 1) = NaN\r\n * asin(NaN)     = NaN\r\n *\r\n * TODO? Compare performance of Taylor series.\r\n *\r\n */\r\nP.inverseSine = P.asin = function () {\r\n  var halfPi, k,\r\n    pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  k = x.abs().cmp(1);\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  if (k !== -1) {\r\n\r\n    // |x| is 1\r\n    if (k === 0) {\r\n      halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\r\n      halfPi.s = x.s;\r\n      return halfPi;\r\n    }\r\n\r\n    // |x| > 1 or x is NaN\r\n    return new Ctor(NaN);\r\n  }\r\n\r\n  // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\r\n\r\n  Ctor.precision = pr + 6;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return x.times(2);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\r\n * of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi/2, pi/2]\r\n *\r\n * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n *\r\n * atan(0)         = 0\r\n * atan(-0)        = -0\r\n * atan(1)         = pi/4\r\n * atan(-1)        = -pi/4\r\n * atan(Infinity)  = pi/2\r\n * atan(-Infinity) = -pi/2\r\n * atan(NaN)       = NaN\r\n *\r\n */\r\nP.inverseTangent = P.atan = function () {\r\n  var i, j, k, n, px, t, r, wpr, x2,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding;\r\n\r\n  if (!x.isFinite()) {\r\n    if (!x.s) return new Ctor(NaN);\r\n    if (pr + 4 <= PI_PRECISION) {\r\n      r = getPi(Ctor, pr + 4, rm).times(0.5);\r\n      r.s = x.s;\r\n      return r;\r\n    }\r\n  } else if (x.isZero()) {\r\n    return new Ctor(x);\r\n  } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\r\n    r = getPi(Ctor, pr + 4, rm).times(0.25);\r\n    r.s = x.s;\r\n    return r;\r\n  }\r\n\r\n  Ctor.precision = wpr = pr + 10;\r\n  Ctor.rounding = 1;\r\n\r\n  // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\r\n\r\n  // Argument reduction\r\n  // Ensure |x| < 0.42\r\n  // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\r\n\r\n  k = Math.min(28, wpr / LOG_BASE + 2 | 0);\r\n\r\n  for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\r\n\r\n  external = false;\r\n\r\n  j = Math.ceil(wpr / LOG_BASE);\r\n  n = 1;\r\n  x2 = x.times(x);\r\n  r = new Ctor(x);\r\n  px = x;\r\n\r\n  // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\r\n  for (; i !== -1;) {\r\n    px = px.times(x2);\r\n    t = r.minus(px.div(n += 2));\r\n\r\n    px = px.times(x2);\r\n    r = t.plus(px.div(n += 2));\r\n\r\n    if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\r\n  }\r\n\r\n  if (k) r = r.times(2 << (k - 1));\r\n\r\n  external = true;\r\n\r\n  return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is a finite number, otherwise return false.\r\n *\r\n */\r\nP.isFinite = function () {\r\n  return !!this.d;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is an integer, otherwise return false.\r\n *\r\n */\r\nP.isInteger = P.isInt = function () {\r\n  return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is NaN, otherwise return false.\r\n *\r\n */\r\nP.isNaN = function () {\r\n  return !this.s;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is negative, otherwise return false.\r\n *\r\n */\r\nP.isNegative = P.isNeg = function () {\r\n  return this.s < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is positive, otherwise return false.\r\n *\r\n */\r\nP.isPositive = P.isPos = function () {\r\n  return this.s > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is 0 or -0, otherwise return false.\r\n *\r\n */\r\nP.isZero = function () {\r\n  return !!this.d && this.d[0] === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThan = P.lt = function (y) {\r\n  return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\r\n *\r\n */\r\nP.lessThanOrEqualTo = P.lte = function (y) {\r\n  return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * If no base is specified, return log[10](arg).\r\n *\r\n * log[base](arg) = ln(arg) / ln(base)\r\n *\r\n * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\r\n * otherwise:\r\n *\r\n * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\r\n * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\r\n * between the result and the correctly rounded result will be one ulp (unit in the last place).\r\n *\r\n * log[-b](a)       = NaN\r\n * log[0](a)        = NaN\r\n * log[1](a)        = NaN\r\n * log[NaN](a)      = NaN\r\n * log[Infinity](a) = NaN\r\n * log[b](0)        = -Infinity\r\n * log[b](-0)       = -Infinity\r\n * log[b](-a)       = NaN\r\n * log[b](1)        = 0\r\n * log[b](Infinity) = Infinity\r\n * log[b](NaN)      = NaN\r\n *\r\n * [base] {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nP.logarithm = P.log = function (base) {\r\n  var isBase10, d, denominator, k, inf, num, sd, r,\r\n    arg = this,\r\n    Ctor = arg.constructor,\r\n    pr = Ctor.precision,\r\n    rm = Ctor.rounding,\r\n    guard = 5;\r\n\r\n  // Default base is 10.\r\n  if (base == null) {\r\n    base = new Ctor(10);\r\n    isBase10 = true;\r\n  } else {\r\n    base = new Ctor(base);\r\n    d = base.d;\r\n\r\n    // Return NaN if base is negative, or non-finite, or is 0 or 1.\r\n    if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\r\n\r\n    isBase10 = base.eq(10);\r\n  }\r\n\r\n  d = arg.d;\r\n\r\n  // Is arg negative, non-finite, 0 or 1?\r\n  if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\r\n    return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\r\n  }\r\n\r\n  // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\r\n  // integer power of 10.\r\n  if (isBase10) {\r\n    if (d.length > 1) {\r\n      inf = true;\r\n    } else {\r\n      for (k = d[0]; k % 10 === 0;) k /= 10;\r\n      inf = k !== 1;\r\n    }\r\n  }\r\n\r\n  external = false;\r\n  sd = pr + guard;\r\n  num = naturalLogarithm(arg, sd);\r\n  denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n\r\n  // The result will have 5 rounding digits.\r\n  r = divide(num, denominator, sd, 1);\r\n\r\n  // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\r\n  // calculate 10 further digits.\r\n  //\r\n  // If the result is known to have an infinite decimal expansion, repeat this until it is clear\r\n  // that the result is above or below the boundary. Otherwise, if after calculating the 10\r\n  // further digits, the last 14 are nines, round up and assume the result is exact.\r\n  // Also assume the result is exact if the last 14 are zero.\r\n  //\r\n  // Example of a result that will be incorrectly rounded:\r\n  // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\r\n  // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\r\n  // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\r\n  // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\r\n  // place is still 2.6.\r\n  if (checkRoundingDigits(r.d, k = pr, rm)) {\r\n\r\n    do {\r\n      sd += 10;\r\n      num = naturalLogarithm(arg, sd);\r\n      denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\r\n      r = divide(num, denominator, sd, 1);\r\n\r\n      if (!inf) {\r\n\r\n        // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\r\n        if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\r\n          r = finalise(r, pr + 1, 0);\r\n        }\r\n\r\n        break;\r\n      }\r\n    } while (checkRoundingDigits(r.d, k += 10, rm));\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.max = function () {\r\n  Array.prototype.push.call(arguments, this);\r\n  return maxOrMin(this.constructor, arguments, -1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\nP.min = function () {\r\n  Array.prototype.push.call(arguments, this);\r\n  return maxOrMin(this.constructor, arguments, 1);\r\n};\r\n */\r\n\r\n\r\n/*\r\n *  n - 0 = n\r\n *  n - N = N\r\n *  n - I = -I\r\n *  0 - n = -n\r\n *  0 - 0 = 0\r\n *  0 - N = N\r\n *  0 - I = -I\r\n *  N - n = N\r\n *  N - 0 = N\r\n *  N - N = N\r\n *  N - I = N\r\n *  I - n = I\r\n *  I - 0 = I\r\n *  I - N = N\r\n *  I - I = N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.minus = P.sub = function (y) {\r\n  var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // If either is not finite...\r\n  if (!x.d || !y.d) {\r\n\r\n    // Return NaN if either is NaN.\r\n    if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n    // Return y negated if x is finite and y is \u00B1Infinity.\r\n    else if (x.d) y.s = -y.s;\r\n\r\n    // Return x if y is finite and x is \u00B1Infinity.\r\n    // Return x if both are \u00B1Infinity with different signs.\r\n    // Return NaN if both are \u00B1Infinity with the same sign.\r\n    else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\r\n\r\n    return y;\r\n  }\r\n\r\n  // If signs differ...\r\n  if (x.s != y.s) {\r\n    y.s = -y.s;\r\n    return x.plus(y);\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  // If either is zero...\r\n  if (!xd[0] || !yd[0]) {\r\n\r\n    // Return y negated if x is zero and y is non-zero.\r\n    if (yd[0]) y.s = -y.s;\r\n\r\n    // Return x if y is zero and x is non-zero.\r\n    else if (xd[0]) y = new Ctor(x);\r\n\r\n    // Return zero if both are zero.\r\n    // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\r\n    else return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  }\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  // Calculate base 1e7 exponents.\r\n  e = mathfloor(y.e / LOG_BASE);\r\n  xe = mathfloor(x.e / LOG_BASE);\r\n\r\n  xd = xd.slice();\r\n  k = xe - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (k) {\r\n    xLTy = k < 0;\r\n\r\n    if (xLTy) {\r\n      d = xd;\r\n      k = -k;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = xe;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Numbers with massively different exponents would result in a very high number of\r\n    // zeros needing to be prepended, but this can be avoided while still ensuring correct\r\n    // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\r\n    i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\r\n\r\n    if (k > i) {\r\n      k = i;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents.\r\n    d.reverse();\r\n    for (i = k; i--;) d.push(0);\r\n    d.reverse();\r\n\r\n  // Base 1e7 exponents equal.\r\n  } else {\r\n\r\n    // Check digits to determine which is the bigger number.\r\n\r\n    i = xd.length;\r\n    len = yd.length;\r\n    xLTy = i < len;\r\n    if (xLTy) len = i;\r\n\r\n    for (i = 0; i < len; i++) {\r\n      if (xd[i] != yd[i]) {\r\n        xLTy = xd[i] < yd[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n    k = 0;\r\n  }\r\n\r\n  if (xLTy) {\r\n    d = xd;\r\n    xd = yd;\r\n    yd = d;\r\n    y.s = -y.s;\r\n  }\r\n\r\n  len = xd.length;\r\n\r\n  // Append zeros to `xd` if shorter.\r\n  // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\r\n  for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\r\n\r\n  // Subtract yd from xd.\r\n  for (i = yd.length; i > k;) {\r\n\r\n    if (xd[--i] < yd[i]) {\r\n      for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\r\n      --xd[j];\r\n      xd[i] += BASE;\r\n    }\r\n\r\n    xd[i] -= yd[i];\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; xd[--len] === 0;) xd.pop();\r\n\r\n  // Remove leading zeros and adjust exponent accordingly.\r\n  for (; xd[0] === 0; xd.shift()) --e;\r\n\r\n  // Zero?\r\n  if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\r\n\r\n  y.d = xd;\r\n  y.e = getBase10Exponent(xd, e);\r\n\r\n  return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n *   n % 0 =  N\r\n *   n % N =  N\r\n *   n % I =  n\r\n *   0 % n =  0\r\n *  -0 % n = -0\r\n *   0 % 0 =  N\r\n *   0 % N =  N\r\n *   0 % I =  0\r\n *   N % n =  N\r\n *   N % 0 =  N\r\n *   N % N =  N\r\n *   N % I =  N\r\n *   I % n =  N\r\n *   I % 0 =  N\r\n *   I % N =  N\r\n *   I % I =  N\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * The result depends on the modulo mode.\r\n *\r\n */\r\nP.modulo = P.mod = function (y) {\r\n  var q,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // Return NaN if x is \u00B1Infinity or NaN, or y is NaN or \u00B10.\r\n  if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\r\n\r\n  // Return x if y is \u00B1Infinity or x is \u00B10.\r\n  if (!y.d || x.d && !x.d[0]) {\r\n    return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\r\n  }\r\n\r\n  // Prevent rounding of intermediate calculations.\r\n  external = false;\r\n\r\n  if (Ctor.modulo == 9) {\r\n\r\n    // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n    // result = x - q * y    where  0 <= result < abs(y)\r\n    q = divide(x, y.abs(), 0, 3, 1);\r\n    q.s *= y.s;\r\n  } else {\r\n    q = divide(x, y, 0, Ctor.modulo, 1);\r\n  }\r\n\r\n  q = q.times(y);\r\n\r\n  external = true;\r\n\r\n  return x.minus(q);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\r\n * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalExponential = P.exp = function () {\r\n  return naturalExponential(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.naturalLogarithm = P.ln = function () {\r\n  return naturalLogarithm(this);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\r\n * -1.\r\n *\r\n */\r\nP.negated = P.neg = function () {\r\n  var x = new this.constructor(this);\r\n  x.s = -x.s;\r\n  return finalise(x);\r\n};\r\n\r\n\r\n/*\r\n *  n + 0 = n\r\n *  n + N = N\r\n *  n + I = I\r\n *  0 + n = n\r\n *  0 + 0 = 0\r\n *  0 + N = N\r\n *  0 + I = I\r\n *  N + n = N\r\n *  N + 0 = N\r\n *  N + N = N\r\n *  N + I = N\r\n *  I + n = I\r\n *  I + 0 = I\r\n *  I + N = N\r\n *  I + I = I\r\n *\r\n * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.plus = P.add = function (y) {\r\n  var carry, d, e, i, k, len, pr, rm, xd, yd,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  y = new Ctor(y);\r\n\r\n  // If either is not finite...\r\n  if (!x.d || !y.d) {\r\n\r\n    // Return NaN if either is NaN.\r\n    if (!x.s || !y.s) y = new Ctor(NaN);\r\n\r\n    // Return x if y is finite and x is \u00B1Infinity.\r\n    // Return x if both are \u00B1Infinity with the same sign.\r\n    // Return NaN if both are \u00B1Infinity with different signs.\r\n    // Return y if x is finite and y is \u00B1Infinity.\r\n    else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\r\n\r\n    return y;\r\n  }\r\n\r\n   // If signs differ...\r\n  if (x.s != y.s) {\r\n    y.s = -y.s;\r\n    return x.minus(y);\r\n  }\r\n\r\n  xd = x.d;\r\n  yd = y.d;\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  // If either is zero...\r\n  if (!xd[0] || !yd[0]) {\r\n\r\n    // Return x if y is zero.\r\n    // Return y if y is non-zero.\r\n    if (!yd[0]) y = new Ctor(x);\r\n\r\n    return external ? finalise(y, pr, rm) : y;\r\n  }\r\n\r\n  // x and y are finite, non-zero numbers with the same sign.\r\n\r\n  // Calculate base 1e7 exponents.\r\n  k = mathfloor(x.e / LOG_BASE);\r\n  e = mathfloor(y.e / LOG_BASE);\r\n\r\n  xd = xd.slice();\r\n  i = k - e;\r\n\r\n  // If base 1e7 exponents differ...\r\n  if (i) {\r\n\r\n    if (i < 0) {\r\n      d = xd;\r\n      i = -i;\r\n      len = yd.length;\r\n    } else {\r\n      d = yd;\r\n      e = k;\r\n      len = xd.length;\r\n    }\r\n\r\n    // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\r\n    k = Math.ceil(pr / LOG_BASE);\r\n    len = k > len ? k + 1 : len + 1;\r\n\r\n    if (i > len) {\r\n      i = len;\r\n      d.length = 1;\r\n    }\r\n\r\n    // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\r\n    d.reverse();\r\n    for (; i--;) d.push(0);\r\n    d.reverse();\r\n  }\r\n\r\n  len = xd.length;\r\n  i = yd.length;\r\n\r\n  // If yd is longer than xd, swap xd and yd so xd points to the longer array.\r\n  if (len - i < 0) {\r\n    i = len;\r\n    d = yd;\r\n    yd = xd;\r\n    xd = d;\r\n  }\r\n\r\n  // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\r\n  for (carry = 0; i;) {\r\n    carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\r\n    xd[i] %= BASE;\r\n  }\r\n\r\n  if (carry) {\r\n    xd.unshift(carry);\r\n    ++e;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n  for (len = xd.length; xd[--len] == 0;) xd.pop();\r\n\r\n  y.d = xd;\r\n  y.e = getBase10Exponent(xd, e);\r\n\r\n  return external ? finalise(y, pr, rm) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return the number of significant digits of the value of this Decimal.\r\n *\r\n * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\r\n *\r\n */\r\nP.precision = P.sd = function (z) {\r\n  var k,\r\n    x = this;\r\n\r\n  if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\r\n\r\n  if (x.d) {\r\n    k = getPrecision(x.d);\r\n    if (z && x.e + 1 > k) k = x.e + 1;\r\n  } else {\r\n    k = NaN;\r\n  }\r\n\r\n  return k;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\r\n * rounding mode `rounding`.\r\n *\r\n */\r\nP.round = function () {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-1, 1]\r\n *\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n *\r\n * sin(0)         = 0\r\n * sin(-0)        = -0\r\n * sin(Infinity)  = NaN\r\n * sin(-Infinity) = NaN\r\n * sin(NaN)       = NaN\r\n *\r\n */\r\nP.sine = P.sin = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\r\n  Ctor.rounding = 1;\r\n\r\n  x = sine(Ctor, toLessThanHalfPi(Ctor, x));\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n *  sqrt(-n) =  N\r\n *  sqrt(N)  =  N\r\n *  sqrt(-I) =  N\r\n *  sqrt(I)  =  I\r\n *  sqrt(0)  =  0\r\n *  sqrt(-0) = -0\r\n *\r\n */\r\nP.squareRoot = P.sqrt = function () {\r\n  var m, n, sd, r, rep, t,\r\n    x = this,\r\n    d = x.d,\r\n    e = x.e,\r\n    s = x.s,\r\n    Ctor = x.constructor;\r\n\r\n  // Negative/NaN/Infinity/zero?\r\n  if (s !== 1 || !d || !d[0]) {\r\n    return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\r\n  }\r\n\r\n  external = false;\r\n\r\n  // Initial estimate.\r\n  s = Math.sqrt(+x);\r\n\r\n  // Math.sqrt underflow/overflow?\r\n  // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n  if (s == 0 || s == 1 / 0) {\r\n    n = digitsToString(d);\r\n\r\n    if ((n.length + e) % 2 == 0) n += '0';\r\n    s = Math.sqrt(n);\r\n    e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n    if (s == 1 / 0) {\r\n      n = '5e' + e;\r\n    } else {\r\n      n = s.toExponential();\r\n      n = n.slice(0, n.indexOf('e') + 1) + e;\r\n    }\r\n\r\n    r = new Ctor(n);\r\n  } else {\r\n    r = new Ctor(s.toString());\r\n  }\r\n\r\n  sd = (e = Ctor.precision) + 3;\r\n\r\n  // Newton-Raphson iteration.\r\n  for (;;) {\r\n    t = r;\r\n    r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\r\n\r\n    // TODO? Replace with for-loop and checkRoundingDigits.\r\n    if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\r\n      n = n.slice(sd - 3, sd + 1);\r\n\r\n      // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\r\n      // 4999, i.e. approaching a rounding boundary, continue the iteration.\r\n      if (n == '9999' || !rep && n == '4999') {\r\n\r\n        // On the first iteration only, check to see if rounding up gives the exact result as the\r\n        // nines may infinitely repeat.\r\n        if (!rep) {\r\n          finalise(t, e + 1, 0);\r\n\r\n          if (t.times(t).eq(x)) {\r\n            r = t;\r\n            break;\r\n          }\r\n        }\r\n\r\n        sd += 4;\r\n        rep = 1;\r\n      } else {\r\n\r\n        // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\r\n        // If not, then there are further digits and m will be truthy.\r\n        if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n          // Truncate to the first rounding digit.\r\n          finalise(r, e + 1, 1);\r\n          m = !r.times(r).eq(x);\r\n        }\r\n\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return finalise(r, e, Ctor.rounding, m);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-Infinity, Infinity]\r\n *\r\n * tan(0)         = 0\r\n * tan(-0)        = -0\r\n * tan(Infinity)  = NaN\r\n * tan(-Infinity) = NaN\r\n * tan(NaN)       = NaN\r\n *\r\n */\r\nP.tangent = P.tan = function () {\r\n  var pr, rm,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (!x.isFinite()) return new Ctor(NaN);\r\n  if (x.isZero()) return new Ctor(x);\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n  Ctor.precision = pr + 10;\r\n  Ctor.rounding = 1;\r\n\r\n  x = x.sin();\r\n  x.s = 1;\r\n  x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\r\n\r\n  Ctor.precision = pr;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\r\n};\r\n\r\n\r\n/*\r\n *  n * 0 = 0\r\n *  n * N = N\r\n *  n * I = I\r\n *  0 * n = 0\r\n *  0 * 0 = 0\r\n *  0 * N = N\r\n *  0 * I = N\r\n *  N * n = N\r\n *  N * 0 = N\r\n *  N * N = N\r\n *  N * I = N\r\n *  I * n = I\r\n *  I * 0 = N\r\n *  I * N = N\r\n *  I * I = I\r\n *\r\n * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n */\r\nP.times = P.mul = function (y) {\r\n  var carry, e, i, k, r, rL, t, xdL, ydL,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    xd = x.d,\r\n    yd = (y = new Ctor(y)).d;\r\n\r\n  y.s *= x.s;\r\n\r\n   // If either is NaN, \u00B1Infinity or \u00B10...\r\n  if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n    return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\r\n\r\n      // Return NaN if either is NaN.\r\n      // Return NaN if x is \u00B10 and y is \u00B1Infinity, or y is \u00B10 and x is \u00B1Infinity.\r\n      ? NaN\r\n\r\n      // Return \u00B1Infinity if either is \u00B1Infinity.\r\n      // Return \u00B10 if either is \u00B10.\r\n      : !xd || !yd ? y.s / 0 : y.s * 0);\r\n  }\r\n\r\n  e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\r\n  xdL = xd.length;\r\n  ydL = yd.length;\r\n\r\n  // Ensure xd points to the longer array.\r\n  if (xdL < ydL) {\r\n    r = xd;\r\n    xd = yd;\r\n    yd = r;\r\n    rL = xdL;\r\n    xdL = ydL;\r\n    ydL = rL;\r\n  }\r\n\r\n  // Initialise the result array with zeros.\r\n  r = [];\r\n  rL = xdL + ydL;\r\n  for (i = rL; i--;) r.push(0);\r\n\r\n  // Multiply!\r\n  for (i = ydL; --i >= 0;) {\r\n    carry = 0;\r\n    for (k = xdL + i; k > i;) {\r\n      t = r[k] + yd[i] * xd[k - i - 1] + carry;\r\n      r[k--] = t % BASE | 0;\r\n      carry = t / BASE | 0;\r\n    }\r\n\r\n    r[k] = (r[k] + carry) % BASE | 0;\r\n  }\r\n\r\n  // Remove trailing zeros.\r\n  for (; !r[--rL];) r.pop();\r\n\r\n  if (carry) ++e;\r\n  else r.shift();\r\n\r\n  y.d = r;\r\n  y.e = getBase10Exponent(r, e);\r\n\r\n  return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 2, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toBinary = function (sd, rm) {\r\n  return toStringBinary(this, 2, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\r\n * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\r\n *\r\n * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toDecimalPlaces = P.toDP = function (dp, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n  if (dp === void 0) return x;\r\n\r\n  checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n  if (rm === void 0) rm = Ctor.rounding;\r\n  else checkInt32(rm, 0, 8);\r\n\r\n  return finalise(x, dp + x.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in exponential notation rounded to\r\n * `dp` fixed decimal places using rounding mode `rounding`.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toExponential = function (dp, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = finiteToString(x, true);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = finalise(new Ctor(x), dp + 1, rm);\r\n    str = finiteToString(x, true, dp + 1);\r\n  }\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in normal (fixed-point) notation to\r\n * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\r\n * omitted.\r\n *\r\n * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n * (-0).toFixed(3) is '0.000'.\r\n * (-0.5).toFixed(0) is '-0'.\r\n *\r\n */\r\nP.toFixed = function (dp, rm) {\r\n  var str, y,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (dp === void 0) {\r\n    str = finiteToString(x);\r\n  } else {\r\n    checkInt32(dp, 0, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    y = finalise(new Ctor(x), dp + x.e + 1, rm);\r\n    str = finiteToString(y, false, dp + y.e + 1);\r\n  }\r\n\r\n  // To determine whether to add the minus sign look at the value before it was rounded,\r\n  // i.e. look at `x` rather than `y`.\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return an array representing the value of this Decimal as a simple fraction with an integer\r\n * numerator and an integer denominator.\r\n *\r\n * The denominator will be a positive non-zero value less than or equal to the specified maximum\r\n * denominator. If a maximum denominator is not specified, the denominator will be the lowest\r\n * value necessary to represent the number exactly.\r\n *\r\n * [maxD] {number|string|bigint|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\r\n *\r\n */\r\nP.toFraction = function (maxD) {\r\n  var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\r\n    x = this,\r\n    xd = x.d,\r\n    Ctor = x.constructor;\r\n\r\n  if (!xd) return new Ctor(x);\r\n\r\n  n1 = d0 = new Ctor(1);\r\n  d1 = n0 = new Ctor(0);\r\n\r\n  d = new Ctor(d1);\r\n  e = d.e = getPrecision(xd) - x.e - 1;\r\n  k = e % LOG_BASE;\r\n  d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\r\n\r\n  if (maxD == null) {\r\n\r\n    // d is 10**e, the minimum max-denominator needed.\r\n    maxD = e > 0 ? d : n1;\r\n  } else {\r\n    n = new Ctor(maxD);\r\n    if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\r\n    maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\r\n  }\r\n\r\n  external = false;\r\n  n = new Ctor(digitsToString(xd));\r\n  pr = Ctor.precision;\r\n  Ctor.precision = e = xd.length * LOG_BASE * 2;\r\n\r\n  for (;;)  {\r\n    q = divide(n, d, 0, 1, 1);\r\n    d2 = d0.plus(q.times(d1));\r\n    if (d2.cmp(maxD) == 1) break;\r\n    d0 = d1;\r\n    d1 = d2;\r\n    d2 = n1;\r\n    n1 = n0.plus(q.times(d2));\r\n    n0 = d2;\r\n    d2 = d;\r\n    d = n.minus(q.times(d2));\r\n    n = d2;\r\n  }\r\n\r\n  d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\r\n  n0 = n0.plus(d2.times(n1));\r\n  d0 = d0.plus(d2.times(d1));\r\n  n0.s = n1.s = x.s;\r\n\r\n  // Determine which fraction is closer to x, n0/d0 or n1/d1?\r\n  r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\r\n      ? [n1, d1] : [n0, d0];\r\n\r\n  Ctor.precision = pr;\r\n  external = true;\r\n\r\n  return r;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 16, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toHexadecimal = P.toHex = function (sd, rm) {\r\n  return toStringBinary(this, 16, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\r\n * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\r\n *\r\n * The return value will always have the same sign as this Decimal, unless either this Decimal\r\n * or `y` is NaN, in which case the return value will be also be NaN.\r\n *\r\n * The return value is not affected by the value of `precision`.\r\n *\r\n * y {number|string|bigint|Decimal} The magnitude to round to a multiple of.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toNearest() rounding mode not an integer: {rm}'\r\n * 'toNearest() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toNearest = function (y, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  x = new Ctor(x);\r\n\r\n  if (y == null) {\r\n\r\n    // If x is not finite, return x.\r\n    if (!x.d) return x;\r\n\r\n    y = new Ctor(1);\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    y = new Ctor(y);\r\n    if (rm === void 0) {\r\n      rm = Ctor.rounding;\r\n    } else {\r\n      checkInt32(rm, 0, 8);\r\n    }\r\n\r\n    // If x is not finite, return x if y is not NaN, else NaN.\r\n    if (!x.d) return y.s ? x : y;\r\n\r\n    // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\r\n    if (!y.d) {\r\n      if (y.s) y.s = x.s;\r\n      return y;\r\n    }\r\n  }\r\n\r\n  // If y is not zero, calculate the nearest multiple of y to x.\r\n  if (y.d[0]) {\r\n    external = false;\r\n    x = divide(x, y, 0, rm, 1).times(y);\r\n    external = true;\r\n    finalise(x);\r\n\r\n  // If y is zero, return zero with the sign of x.\r\n  } else {\r\n    y.s = x.s;\r\n    x = y;\r\n  }\r\n\r\n  return x;\r\n};\r\n\r\n\r\n/*\r\n * Return the value of this Decimal converted to a number primitive.\r\n * Zero keeps its sign.\r\n *\r\n */\r\nP.toNumber = function () {\r\n  return +this;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal in base 8, round to `sd` significant\r\n * digits using rounding mode `rm`.\r\n *\r\n * If the optional `sd` argument is present then return binary exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toOctal = function (sd, rm) {\r\n  return toStringBinary(this, 8, sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\r\n * to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * ECMAScript compliant.\r\n *\r\n *   pow(x, NaN)                           = NaN\r\n *   pow(x, \u00B10)                            = 1\r\n\r\n *   pow(NaN, non-zero)                    = NaN\r\n *   pow(abs(x) > 1, +Infinity)            = +Infinity\r\n *   pow(abs(x) > 1, -Infinity)            = +0\r\n *   pow(abs(x) == 1, \u00B1Infinity)           = NaN\r\n *   pow(abs(x) < 1, +Infinity)            = +0\r\n *   pow(abs(x) < 1, -Infinity)            = +Infinity\r\n *   pow(+Infinity, y > 0)                 = +Infinity\r\n *   pow(+Infinity, y < 0)                 = +0\r\n *   pow(-Infinity, odd integer > 0)       = -Infinity\r\n *   pow(-Infinity, even integer > 0)      = +Infinity\r\n *   pow(-Infinity, odd integer < 0)       = -0\r\n *   pow(-Infinity, even integer < 0)      = +0\r\n *   pow(+0, y > 0)                        = +0\r\n *   pow(+0, y < 0)                        = +Infinity\r\n *   pow(-0, odd integer > 0)              = -0\r\n *   pow(-0, even integer > 0)             = +0\r\n *   pow(-0, odd integer < 0)              = -Infinity\r\n *   pow(-0, even integer < 0)             = +Infinity\r\n *   pow(finite x < 0, finite non-integer) = NaN\r\n *\r\n * For non-integer or very large exponents pow(x, y) is calculated using\r\n *\r\n *   x^y = exp(y*ln(x))\r\n *\r\n * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\r\n * probability of an incorrectly rounded result\r\n * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\r\n * i.e. 1 in 250,000,000,000,000\r\n *\r\n * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\r\n *\r\n * y {number|string|bigint|Decimal} The power to which to raise this Decimal.\r\n *\r\n */\r\nP.toPower = P.pow = function (y) {\r\n  var e, k, pr, r, rm, s,\r\n    x = this,\r\n    Ctor = x.constructor,\r\n    yn = +(y = new Ctor(y));\r\n\r\n  // Either \u00B1Infinity, NaN or \u00B10?\r\n  if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\r\n\r\n  x = new Ctor(x);\r\n\r\n  if (x.eq(1)) return x;\r\n\r\n  pr = Ctor.precision;\r\n  rm = Ctor.rounding;\r\n\r\n  if (y.eq(1)) return finalise(x, pr, rm);\r\n\r\n  // y exponent\r\n  e = mathfloor(y.e / LOG_BASE);\r\n\r\n  // If y is a small integer use the 'exponentiation by squaring' algorithm.\r\n  if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\r\n    r = intPow(Ctor, x, k, pr);\r\n    return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\r\n  }\r\n\r\n  s = x.s;\r\n\r\n  // if x is negative\r\n  if (s < 0) {\r\n\r\n    // if y is not an integer\r\n    if (e < y.d.length - 1) return new Ctor(NaN);\r\n\r\n    // Result is positive if x is negative and the last digit of integer y is even.\r\n    if ((y.d[e] & 1) == 0) s = 1;\r\n\r\n    // if x.eq(-1)\r\n    if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\r\n      x.s = s;\r\n      return x;\r\n    }\r\n  }\r\n\r\n  // Estimate result exponent.\r\n  // x^y = 10^e,  where e = y * log10(x)\r\n  // log10(x) = log10(x_significand) + x_exponent\r\n  // log10(x_significand) = ln(x_significand) / ln(10)\r\n  k = mathpow(+x, yn);\r\n  e = k == 0 || !isFinite(k)\r\n    ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\r\n    : new Ctor(k + '').e;\r\n\r\n  // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\r\n\r\n  // Overflow/underflow?\r\n  if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\r\n\r\n  external = false;\r\n  Ctor.rounding = x.s = 1;\r\n\r\n  // Estimate the extra guard digits needed to ensure five correct rounding digits from\r\n  // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\r\n  // new Decimal(2.32456).pow('2087987436534566.46411')\r\n  // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\r\n  k = Math.min(12, (e + '').length);\r\n\r\n  // r = x^y = exp(y*ln(x))\r\n  r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\r\n\r\n  // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\r\n  if (r.d) {\r\n\r\n    // Truncate to the required precision plus five rounding digits.\r\n    r = finalise(r, pr + 5, 1);\r\n\r\n    // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\r\n    // the result.\r\n    if (checkRoundingDigits(r.d, pr, rm)) {\r\n      e = pr + 10;\r\n\r\n      // Truncate to the increased precision plus five rounding digits.\r\n      r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\r\n\r\n      // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\r\n      if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\r\n        r = finalise(r, pr + 1, 0);\r\n      }\r\n    }\r\n  }\r\n\r\n  r.s = s;\r\n  external = true;\r\n  Ctor.rounding = rm;\r\n\r\n  return finalise(r, pr, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal rounded to `sd` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * Return exponential notation if `sd` is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n  var str,\r\n    x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n\r\n    x = finalise(new Ctor(x), sd, rm);\r\n    str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\r\n  }\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\r\n * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\r\n * omitted.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * 'toSD() digits out of range: {sd}'\r\n * 'toSD() digits not an integer: {sd}'\r\n * 'toSD() rounding mode not an integer: {rm}'\r\n * 'toSD() rounding mode out of range: {rm}'\r\n *\r\n */\r\nP.toSignificantDigits = P.toSD = function (sd, rm) {\r\n  var x = this,\r\n    Ctor = x.constructor;\r\n\r\n  if (sd === void 0) {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  } else {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  }\r\n\r\n  return finalise(new Ctor(x), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n *\r\n * Return exponential notation if this Decimal has a positive exponent equal to or greater than\r\n * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\r\n *\r\n */\r\nP.toString = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n  return x.isNeg() && !x.isZero() ? '-' + str : str;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\r\n *\r\n */\r\nP.truncated = P.trunc = function () {\r\n  return finalise(new this.constructor(this), this.e + 1, 1);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Decimal.\r\n * Unlike `toString`, negative zero will include the minus sign.\r\n *\r\n */\r\nP.valueOf = P.toJSON = function () {\r\n  var x = this,\r\n    Ctor = x.constructor,\r\n    str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\r\n\r\n  return x.isNeg() ? '-' + str : str;\r\n};\r\n\r\n\r\n// Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\r\n\r\n\r\n/*\r\n *  digitsToString           P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\r\n *                           finiteToString, naturalExponential, naturalLogarithm\r\n *  checkInt32               P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\r\n *                           P.toPrecision, P.toSignificantDigits, toStringBinary, random\r\n *  checkRoundingDigits      P.logarithm, P.toPower, naturalExponential, naturalLogarithm\r\n *  convertBase              toStringBinary, parseOther\r\n *  cos                      P.cos\r\n *  divide                   P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\r\n *                           P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\r\n *                           P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\r\n *                           taylorSeries, atan2, parseOther\r\n *  finalise                 P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\r\n *                           P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\r\n *                           P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\r\n *                           P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\r\n *                           P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\r\n *                           P.truncated, divide, getLn10, getPi, naturalExponential,\r\n *                           naturalLogarithm, ceil, floor, round, trunc\r\n *  finiteToString           P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\r\n *                           toStringBinary\r\n *  getBase10Exponent        P.minus, P.plus, P.times, parseOther\r\n *  getLn10                  P.logarithm, naturalLogarithm\r\n *  getPi                    P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\r\n *  getPrecision             P.precision, P.toFraction\r\n *  getZeroString            digitsToString, finiteToString\r\n *  intPow                   P.toPower, parseOther\r\n *  isOdd                    toLessThanHalfPi\r\n *  maxOrMin                 max, min\r\n *  naturalExponential       P.naturalExponential, P.toPower\r\n *  naturalLogarithm         P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\r\n *                           P.toPower, naturalExponential\r\n *  nonFiniteToString        finiteToString, toStringBinary\r\n *  parseDecimal             Decimal\r\n *  parseOther               Decimal\r\n *  sin                      P.sin\r\n *  taylorSeries             P.cosh, P.sinh, cos, sin\r\n *  toLessThanHalfPi         P.cos, P.sin\r\n *  toStringBinary           P.toBinary, P.toHexadecimal, P.toOctal\r\n *  truncate                 intPow\r\n *\r\n *  Throws:                  P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\r\n *                           naturalLogarithm, config, parseOther, random, Decimal\r\n */\r\n\r\n\r\nfunction digitsToString(d) {\r\n  var i, k, ws,\r\n    indexOfLastWord = d.length - 1,\r\n    str = '',\r\n    w = d[0];\r\n\r\n  if (indexOfLastWord > 0) {\r\n    str += w;\r\n    for (i = 1; i < indexOfLastWord; i++) {\r\n      ws = d[i] + '';\r\n      k = LOG_BASE - ws.length;\r\n      if (k) str += getZeroString(k);\r\n      str += ws;\r\n    }\r\n\r\n    w = d[i];\r\n    ws = w + '';\r\n    k = LOG_BASE - ws.length;\r\n    if (k) str += getZeroString(k);\r\n  } else if (w === 0) {\r\n    return '0';\r\n  }\r\n\r\n  // Remove trailing zeros of last w.\r\n  for (; w % 10 === 0;) w /= 10;\r\n\r\n  return str + w;\r\n}\r\n\r\n\r\nfunction checkInt32(i, min, max) {\r\n  if (i !== ~~i || i < min || i > max) {\r\n    throw Error(invalidArgument + i);\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Check 5 rounding digits if `repeating` is null, 4 otherwise.\r\n * `repeating == null` if caller is `log` or `pow`,\r\n * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\r\n */\r\nfunction checkRoundingDigits(d, i, rm, repeating) {\r\n  var di, k, r, rd;\r\n\r\n  // Get the length of the first word of the array d.\r\n  for (k = d[0]; k >= 10; k /= 10) --i;\r\n\r\n  // Is the rounding digit in the first word of d?\r\n  if (--i < 0) {\r\n    i += LOG_BASE;\r\n    di = 0;\r\n  } else {\r\n    di = Math.ceil((i + 1) / LOG_BASE);\r\n    i %= LOG_BASE;\r\n  }\r\n\r\n  // i is the index (0 - 6) of the rounding digit.\r\n  // E.g. if within the word 3487563 the first rounding digit is 5,\r\n  // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\r\n  k = mathpow(10, LOG_BASE - i);\r\n  rd = d[di] % k | 0;\r\n\r\n  if (repeating == null) {\r\n    if (i < 3) {\r\n      if (i == 0) rd = rd / 100 | 0;\r\n      else if (i == 1) rd = rd / 10 | 0;\r\n      r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\r\n    } else {\r\n      r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\r\n        (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\r\n          (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\r\n    }\r\n  } else {\r\n    if (i < 4) {\r\n      if (i == 0) rd = rd / 1000 | 0;\r\n      else if (i == 1) rd = rd / 100 | 0;\r\n      else if (i == 2) rd = rd / 10 | 0;\r\n      r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\r\n    } else {\r\n      r = ((repeating || rm < 4) && rd + 1 == k ||\r\n      (!repeating && rm > 3) && rd + 1 == k / 2) &&\r\n        (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\r\n    }\r\n  }\r\n\r\n  return r;\r\n}\r\n\r\n\r\n// Convert string of `baseIn` to an array of numbers of `baseOut`.\r\n// Eg. convertBase('255', 10, 16) returns [15, 15].\r\n// Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\r\nfunction convertBase(str, baseIn, baseOut) {\r\n  var j,\r\n    arr = [0],\r\n    arrL,\r\n    i = 0,\r\n    strL = str.length;\r\n\r\n  for (; i < strL;) {\r\n    for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\r\n    arr[0] += NUMERALS.indexOf(str.charAt(i++));\r\n    for (j = 0; j < arr.length; j++) {\r\n      if (arr[j] > baseOut - 1) {\r\n        if (arr[j + 1] === void 0) arr[j + 1] = 0;\r\n        arr[j + 1] += arr[j] / baseOut | 0;\r\n        arr[j] %= baseOut;\r\n      }\r\n    }\r\n  }\r\n\r\n  return arr.reverse();\r\n}\r\n\r\n\r\n/*\r\n * cos(x) = 1 - x^2/2! + x^4/4! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction cosine(Ctor, x) {\r\n  var k, len, y;\r\n\r\n  if (x.isZero()) return x;\r\n\r\n  // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\r\n  // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  len = x.d.length;\r\n  if (len < 32) {\r\n    k = Math.ceil(len / 3);\r\n    y = (1 / tinyPow(4, k)).toString();\r\n  } else {\r\n    k = 16;\r\n    y = '2.3283064365386962890625e-10';\r\n  }\r\n\r\n  Ctor.precision += k;\r\n\r\n  x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\r\n\r\n  // Reverse argument reduction\r\n  for (var i = k; i--;) {\r\n    var cos2x = x.times(x);\r\n    x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\r\n  }\r\n\r\n  Ctor.precision -= k;\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Perform division in the specified base.\r\n */\r\nvar divide = (function () {\r\n\r\n  // Assumes non-zero x and k, and hence non-zero result.\r\n  function multiplyInteger(x, k, base) {\r\n    var temp,\r\n      carry = 0,\r\n      i = x.length;\r\n\r\n    for (x = x.slice(); i--;) {\r\n      temp = x[i] * k + carry;\r\n      x[i] = temp % base | 0;\r\n      carry = temp / base | 0;\r\n    }\r\n\r\n    if (carry) x.unshift(carry);\r\n\r\n    return x;\r\n  }\r\n\r\n  function compare(a, b, aL, bL) {\r\n    var i, r;\r\n\r\n    if (aL != bL) {\r\n      r = aL > bL ? 1 : -1;\r\n    } else {\r\n      for (i = r = 0; i < aL; i++) {\r\n        if (a[i] != b[i]) {\r\n          r = a[i] > b[i] ? 1 : -1;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return r;\r\n  }\r\n\r\n  function subtract(a, b, aL, base) {\r\n    var i = 0;\r\n\r\n    // Subtract b from a.\r\n    for (; aL--;) {\r\n      a[aL] -= i;\r\n      i = a[aL] < b[aL] ? 1 : 0;\r\n      a[aL] = i * base + a[aL] - b[aL];\r\n    }\r\n\r\n    // Remove leading zeros.\r\n    for (; !a[0] && a.length > 1;) a.shift();\r\n  }\r\n\r\n  return function (x, y, pr, rm, dp, base) {\r\n    var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\r\n      yL, yz,\r\n      Ctor = x.constructor,\r\n      sign = x.s == y.s ? 1 : -1,\r\n      xd = x.d,\r\n      yd = y.d;\r\n\r\n    // Either NaN, Infinity or 0?\r\n    if (!xd || !xd[0] || !yd || !yd[0]) {\r\n\r\n      return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\r\n        !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\r\n\r\n        // Return \u00B10 if x is 0 or y is \u00B1Infinity, or return \u00B1Infinity as y is 0.\r\n        xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\r\n    }\r\n\r\n    if (base) {\r\n      logBase = 1;\r\n      e = x.e - y.e;\r\n    } else {\r\n      base = BASE;\r\n      logBase = LOG_BASE;\r\n      e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\r\n    }\r\n\r\n    yL = yd.length;\r\n    xL = xd.length;\r\n    q = new Ctor(sign);\r\n    qd = q.d = [];\r\n\r\n    // Result exponent may be one less than e.\r\n    // The digit array of a Decimal from toStringBinary may have trailing zeros.\r\n    for (i = 0; yd[i] == (xd[i] || 0); i++);\r\n\r\n    if (yd[i] > (xd[i] || 0)) e--;\r\n\r\n    if (pr == null) {\r\n      sd = pr = Ctor.precision;\r\n      rm = Ctor.rounding;\r\n    } else if (dp) {\r\n      sd = pr + (x.e - y.e) + 1;\r\n    } else {\r\n      sd = pr;\r\n    }\r\n\r\n    if (sd < 0) {\r\n      qd.push(1);\r\n      more = true;\r\n    } else {\r\n\r\n      // Convert precision in number of base 10 digits to base 1e7 digits.\r\n      sd = sd / logBase + 2 | 0;\r\n      i = 0;\r\n\r\n      // divisor < 1e7\r\n      if (yL == 1) {\r\n        k = 0;\r\n        yd = yd[0];\r\n        sd++;\r\n\r\n        // k is the carry.\r\n        for (; (i < xL || k) && sd--; i++) {\r\n          t = k * base + (xd[i] || 0);\r\n          qd[i] = t / yd | 0;\r\n          k = t % yd | 0;\r\n        }\r\n\r\n        more = k || i < xL;\r\n\r\n      // divisor >= 1e7\r\n      } else {\r\n\r\n        // Normalise xd and yd so highest order digit of yd is >= base/2\r\n        k = base / (yd[0] + 1) | 0;\r\n\r\n        if (k > 1) {\r\n          yd = multiplyInteger(yd, k, base);\r\n          xd = multiplyInteger(xd, k, base);\r\n          yL = yd.length;\r\n          xL = xd.length;\r\n        }\r\n\r\n        xi = yL;\r\n        rem = xd.slice(0, yL);\r\n        remL = rem.length;\r\n\r\n        // Add zeros to make remainder as long as divisor.\r\n        for (; remL < yL;) rem[remL++] = 0;\r\n\r\n        yz = yd.slice();\r\n        yz.unshift(0);\r\n        yd0 = yd[0];\r\n\r\n        if (yd[1] >= base / 2) ++yd0;\r\n\r\n        do {\r\n          k = 0;\r\n\r\n          // Compare divisor and remainder.\r\n          cmp = compare(yd, rem, yL, remL);\r\n\r\n          // If divisor < remainder.\r\n          if (cmp < 0) {\r\n\r\n            // Calculate trial digit, k.\r\n            rem0 = rem[0];\r\n            if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n            // k will be how many times the divisor goes into the current remainder.\r\n            k = rem0 / yd0 | 0;\r\n\r\n            //  Algorithm:\r\n            //  1. product = divisor * trial digit (k)\r\n            //  2. if product > remainder: product -= divisor, k--\r\n            //  3. remainder -= product\r\n            //  4. if product was < remainder at 2:\r\n            //    5. compare new remainder and divisor\r\n            //    6. If remainder > divisor: remainder -= divisor, k++\r\n\r\n            if (k > 1) {\r\n              if (k >= base) k = base - 1;\r\n\r\n              // product = divisor * trial digit.\r\n              prod = multiplyInteger(yd, k, base);\r\n              prodL = prod.length;\r\n              remL = rem.length;\r\n\r\n              // Compare product and remainder.\r\n              cmp = compare(prod, rem, prodL, remL);\r\n\r\n              // product > remainder.\r\n              if (cmp == 1) {\r\n                k--;\r\n\r\n                // Subtract divisor from product.\r\n                subtract(prod, yL < prodL ? yz : yd, prodL, base);\r\n              }\r\n            } else {\r\n\r\n              // cmp is -1.\r\n              // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\r\n              // to avoid it. If k is 1 there is a need to compare yd and rem again below.\r\n              if (k == 0) cmp = k = 1;\r\n              prod = yd.slice();\r\n            }\r\n\r\n            prodL = prod.length;\r\n            if (prodL < remL) prod.unshift(0);\r\n\r\n            // Subtract product from remainder.\r\n            subtract(rem, prod, remL, base);\r\n\r\n            // If product was < previous remainder.\r\n            if (cmp == -1) {\r\n              remL = rem.length;\r\n\r\n              // Compare divisor and new remainder.\r\n              cmp = compare(yd, rem, yL, remL);\r\n\r\n              // If divisor < new remainder, subtract divisor from remainder.\r\n              if (cmp < 1) {\r\n                k++;\r\n\r\n                // Subtract divisor from remainder.\r\n                subtract(rem, yL < remL ? yz : yd, remL, base);\r\n              }\r\n            }\r\n\r\n            remL = rem.length;\r\n          } else if (cmp === 0) {\r\n            k++;\r\n            rem = [0];\r\n          }    // if cmp === 1, k will be 0\r\n\r\n          // Add the next digit, k, to the result array.\r\n          qd[i++] = k;\r\n\r\n          // Update the remainder.\r\n          if (cmp && rem[0]) {\r\n            rem[remL++] = xd[xi] || 0;\r\n          } else {\r\n            rem = [xd[xi]];\r\n            remL = 1;\r\n          }\r\n\r\n        } while ((xi++ < xL || rem[0] !== void 0) && sd--);\r\n\r\n        more = rem[0] !== void 0;\r\n      }\r\n\r\n      // Leading zero?\r\n      if (!qd[0]) qd.shift();\r\n    }\r\n\r\n    // logBase is 1 when divide is being used for base conversion.\r\n    if (logBase == 1) {\r\n      q.e = e;\r\n      inexact = more;\r\n    } else {\r\n\r\n      // To calculate q.e, first get the number of digits of qd[0].\r\n      for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\r\n      q.e = i + e * logBase - 1;\r\n\r\n      finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\r\n    }\r\n\r\n    return q;\r\n  };\r\n})();\r\n\r\n\r\n/*\r\n * Round `x` to `sd` significant digits using rounding mode `rm`.\r\n * Check for over/under-flow.\r\n */\r\n function finalise(x, sd, rm, isTruncated) {\r\n  var digits, i, j, k, rd, roundUp, w, xd, xdi,\r\n    Ctor = x.constructor;\r\n\r\n  // Don't round if sd is null or undefined.\r\n  out: if (sd != null) {\r\n    xd = x.d;\r\n\r\n    // Infinity/NaN.\r\n    if (!xd) return x;\r\n\r\n    // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n    // w: the word of xd containing rd, a base 1e7 number.\r\n    // xdi: the index of w within xd.\r\n    // digits: the number of digits of w.\r\n    // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\r\n    // they had leading zeros)\r\n    // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\r\n\r\n    // Get the length of the first word of the digits array xd.\r\n    for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\r\n    i = sd - digits;\r\n\r\n    // Is the rounding digit in the first word of xd?\r\n    if (i < 0) {\r\n      i += LOG_BASE;\r\n      j = sd;\r\n      w = xd[xdi = 0];\r\n\r\n      // Get the rounding digit at index j of w.\r\n      rd = w / mathpow(10, digits - j - 1) % 10 | 0;\r\n    } else {\r\n      xdi = Math.ceil((i + 1) / LOG_BASE);\r\n      k = xd.length;\r\n      if (xdi >= k) {\r\n        if (isTruncated) {\r\n\r\n          // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\r\n          for (; k++ <= xdi;) xd.push(0);\r\n          w = rd = 0;\r\n          digits = 1;\r\n          i %= LOG_BASE;\r\n          j = i - LOG_BASE + 1;\r\n        } else {\r\n          break out;\r\n        }\r\n      } else {\r\n        w = k = xd[xdi];\r\n\r\n        // Get the number of digits of w.\r\n        for (digits = 1; k >= 10; k /= 10) digits++;\r\n\r\n        // Get the index of rd within w.\r\n        i %= LOG_BASE;\r\n\r\n        // Get the index of rd within w, adjusted for leading zeros.\r\n        // The number of leading zeros of w is given by LOG_BASE - digits.\r\n        j = i - LOG_BASE + digits;\r\n\r\n        // Get the rounding digit at index j of w.\r\n        rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\r\n      }\r\n    }\r\n\r\n    // Are there any non-zero digits after the rounding digit?\r\n    isTruncated = isTruncated || sd < 0 ||\r\n      xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\r\n\r\n    // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\r\n    // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\r\n    // will give 714.\r\n\r\n    roundUp = rm < 4\r\n      ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n      : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\r\n\r\n        // Check whether the digit to the left of the rounding digit is odd.\r\n        ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\r\n          rm == (x.s < 0 ? 8 : 7));\r\n\r\n    if (sd < 1 || !xd[0]) {\r\n      xd.length = 0;\r\n      if (roundUp) {\r\n\r\n        // Convert sd to decimal places.\r\n        sd -= x.e + 1;\r\n\r\n        // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n        xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\r\n        x.e = -sd || 0;\r\n      } else {\r\n\r\n        // Zero.\r\n        xd[0] = x.e = 0;\r\n      }\r\n\r\n      return x;\r\n    }\r\n\r\n    // Remove excess digits.\r\n    if (i == 0) {\r\n      xd.length = xdi;\r\n      k = 1;\r\n      xdi--;\r\n    } else {\r\n      xd.length = xdi + 1;\r\n      k = mathpow(10, LOG_BASE - i);\r\n\r\n      // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n      // j > 0 means i > number of leading zeros of w.\r\n      xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\r\n    }\r\n\r\n    if (roundUp) {\r\n      for (;;) {\r\n\r\n        // Is the digit to be rounded up in the first word of xd?\r\n        if (xdi == 0) {\r\n\r\n          // i will be the length of xd[0] before k is added.\r\n          for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\r\n          j = xd[0] += k;\r\n          for (k = 1; j >= 10; j /= 10) k++;\r\n\r\n          // if i != k the length has increased.\r\n          if (i != k) {\r\n            x.e++;\r\n            if (xd[0] == BASE) xd[0] = 1;\r\n          }\r\n\r\n          break;\r\n        } else {\r\n          xd[xdi] += k;\r\n          if (xd[xdi] != BASE) break;\r\n          xd[xdi--] = 0;\r\n          k = 1;\r\n        }\r\n      }\r\n    }\r\n\r\n    // Remove trailing zeros.\r\n    for (i = xd.length; xd[--i] === 0;) xd.pop();\r\n  }\r\n\r\n  if (external) {\r\n\r\n    // Overflow?\r\n    if (x.e > Ctor.maxE) {\r\n\r\n      // Infinity.\r\n      x.d = null;\r\n      x.e = NaN;\r\n\r\n    // Underflow?\r\n    } else if (x.e < Ctor.minE) {\r\n\r\n      // Zero.\r\n      x.e = 0;\r\n      x.d = [0];\r\n      // Ctor.underflow = true;\r\n    } // else Ctor.underflow = false;\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\nfunction finiteToString(x, isExp, sd) {\r\n  if (!x.isFinite()) return nonFiniteToString(x);\r\n  var k,\r\n    e = x.e,\r\n    str = digitsToString(x.d),\r\n    len = str.length;\r\n\r\n  if (isExp) {\r\n    if (sd && (k = sd - len) > 0) {\r\n      str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\r\n    } else if (len > 1) {\r\n      str = str.charAt(0) + '.' + str.slice(1);\r\n    }\r\n\r\n    str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\r\n  } else if (e < 0) {\r\n    str = '0.' + getZeroString(-e - 1) + str;\r\n    if (sd && (k = sd - len) > 0) str += getZeroString(k);\r\n  } else if (e >= len) {\r\n    str += getZeroString(e + 1 - len);\r\n    if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\r\n  } else {\r\n    if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\r\n    if (sd && (k = sd - len) > 0) {\r\n      if (e + 1 === len) str += '.';\r\n      str += getZeroString(k);\r\n    }\r\n  }\r\n\r\n  return str;\r\n}\r\n\r\n\r\n// Calculate the base 10 exponent from the base 1e7 exponent.\r\nfunction getBase10Exponent(digits, e) {\r\n  var w = digits[0];\r\n\r\n  // Add the number of digits of the first word of the digits array.\r\n  for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\r\n  return e;\r\n}\r\n\r\n\r\nfunction getLn10(Ctor, sd, pr) {\r\n  if (sd > LN10_PRECISION) {\r\n\r\n    // Reset global state in case the exception is caught.\r\n    external = true;\r\n    if (pr) Ctor.precision = pr;\r\n    throw Error(precisionLimitExceeded);\r\n  }\r\n  return finalise(new Ctor(LN10), sd, 1, true);\r\n}\r\n\r\n\r\nfunction getPi(Ctor, sd, rm) {\r\n  if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\r\n  return finalise(new Ctor(PI), sd, rm, true);\r\n}\r\n\r\n\r\nfunction getPrecision(digits) {\r\n  var w = digits.length - 1,\r\n    len = w * LOG_BASE + 1;\r\n\r\n  w = digits[w];\r\n\r\n  // If non-zero...\r\n  if (w) {\r\n\r\n    // Subtract the number of trailing zeros of the last word.\r\n    for (; w % 10 == 0; w /= 10) len--;\r\n\r\n    // Add the number of digits of the first word.\r\n    for (w = digits[0]; w >= 10; w /= 10) len++;\r\n  }\r\n\r\n  return len;\r\n}\r\n\r\n\r\nfunction getZeroString(k) {\r\n  var zs = '';\r\n  for (; k--;) zs += '0';\r\n  return zs;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\r\n * integer of type number.\r\n *\r\n * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\r\n *\r\n */\r\nfunction intPow(Ctor, x, n, pr) {\r\n  var isTruncated,\r\n    r = new Ctor(1),\r\n\r\n    // Max n of 9007199254740991 takes 53 loop iterations.\r\n    // Maximum digits array length; leaves [28, 34] guard digits.\r\n    k = Math.ceil(pr / LOG_BASE + 4);\r\n\r\n  external = false;\r\n\r\n  for (;;) {\r\n    if (n % 2) {\r\n      r = r.times(x);\r\n      if (truncate(r.d, k)) isTruncated = true;\r\n    }\r\n\r\n    n = mathfloor(n / 2);\r\n    if (n === 0) {\r\n\r\n      // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\r\n      n = r.d.length - 1;\r\n      if (isTruncated && r.d[n] === 0) ++r.d[n];\r\n      break;\r\n    }\r\n\r\n    x = x.times(x);\r\n    truncate(x.d, k);\r\n  }\r\n\r\n  external = true;\r\n\r\n  return r;\r\n}\r\n\r\n\r\nfunction isOdd(n) {\r\n  return n.d[n.d.length - 1] & 1;\r\n}\r\n\r\n\r\n/*\r\n * Handle `max` (`n` is -1) and `min` (`n` is 1).\r\n */\r\nfunction maxOrMin(Ctor, args, n) {\r\n  var k, y,\r\n    x = new Ctor(args[0]),\r\n    i = 0;\r\n\r\n  for (; ++i < args.length;) {\r\n    y = new Ctor(args[i]);\r\n\r\n    // NaN?\r\n    if (!y.s) {\r\n      x = y;\r\n      break;\r\n    }\r\n\r\n    k = x.cmp(y);\r\n\r\n    if (k === n || k === 0 && x.s === n) {\r\n      x = y;\r\n    }\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n * Taylor/Maclaurin series.\r\n *\r\n * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\r\n *\r\n * Argument reduction:\r\n *   Repeat x = x / 32, k += 5, until |x| < 0.1\r\n *   exp(x) = exp(x / 2^k)^(2^k)\r\n *\r\n * Previously, the argument was initially reduced by\r\n * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\r\n * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\r\n * found to be slower than just dividing repeatedly by 32 as above.\r\n *\r\n * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\r\n * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\r\n * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\r\n *\r\n *  exp(Infinity)  = Infinity\r\n *  exp(-Infinity) = 0\r\n *  exp(NaN)       = NaN\r\n *  exp(\u00B10)        = 1\r\n *\r\n *  exp(x) is non-terminating for any finite, non-zero x.\r\n *\r\n *  The result will always be correctly rounded.\r\n *\r\n */\r\nfunction naturalExponential(x, sd) {\r\n  var denominator, guard, j, pow, sum, t, wpr,\r\n    rep = 0,\r\n    i = 0,\r\n    k = 0,\r\n    Ctor = x.constructor,\r\n    rm = Ctor.rounding,\r\n    pr = Ctor.precision;\r\n\r\n  // 0/NaN/Infinity?\r\n  if (!x.d || !x.d[0] || x.e > 17) {\r\n\r\n    return new Ctor(x.d\r\n      ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\r\n      : x.s ? x.s < 0 ? 0 : x : 0 / 0);\r\n  }\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  t = new Ctor(0.03125);\r\n\r\n  // while abs(x) >= 0.1\r\n  while (x.e > -2) {\r\n\r\n    // x = x / 2^5\r\n    x = x.times(t);\r\n    k += 5;\r\n  }\r\n\r\n  // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\r\n  // necessary to ensure the first 4 rounding digits are correct.\r\n  guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\r\n  wpr += guard;\r\n  denominator = pow = sum = new Ctor(1);\r\n  Ctor.precision = wpr;\r\n\r\n  for (;;) {\r\n    pow = finalise(pow.times(x), wpr, 1);\r\n    denominator = denominator.times(++i);\r\n    t = sum.plus(divide(pow, denominator, wpr, 1));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      j = k;\r\n      while (j--) sum = finalise(sum.times(sum), wpr, 1);\r\n\r\n      // Check to see if the first 4 rounding digits are [49]999.\r\n      // If so, repeat the summation with a higher precision, otherwise\r\n      // e.g. with precision: 18, rounding: 1\r\n      // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\r\n      // `wpr - guard` is the index of first rounding digit.\r\n      if (sd == null) {\r\n\r\n        if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n          Ctor.precision = wpr += 10;\r\n          denominator = pow = t = new Ctor(1);\r\n          i = 0;\r\n          rep++;\r\n        } else {\r\n          return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n        }\r\n      } else {\r\n        Ctor.precision = pr;\r\n        return sum;\r\n      }\r\n    }\r\n\r\n    sum = t;\r\n  }\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\r\n * digits.\r\n *\r\n *  ln(-n)        = NaN\r\n *  ln(0)         = -Infinity\r\n *  ln(-0)        = -Infinity\r\n *  ln(1)         = 0\r\n *  ln(Infinity)  = Infinity\r\n *  ln(-Infinity) = NaN\r\n *  ln(NaN)       = NaN\r\n *\r\n *  ln(n) (n != 1) is non-terminating.\r\n *\r\n */\r\nfunction naturalLogarithm(y, sd) {\r\n  var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\r\n    n = 1,\r\n    guard = 10,\r\n    x = y,\r\n    xd = x.d,\r\n    Ctor = x.constructor,\r\n    rm = Ctor.rounding,\r\n    pr = Ctor.precision;\r\n\r\n  // Is x negative or Infinity, NaN, 0 or 1?\r\n  if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\r\n    return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\r\n  }\r\n\r\n  if (sd == null) {\r\n    external = false;\r\n    wpr = pr;\r\n  } else {\r\n    wpr = sd;\r\n  }\r\n\r\n  Ctor.precision = wpr += guard;\r\n  c = digitsToString(xd);\r\n  c0 = c.charAt(0);\r\n\r\n  if (Math.abs(e = x.e) < 1.5e15) {\r\n\r\n    // Argument reduction.\r\n    // The series converges faster the closer the argument is to 1, so using\r\n    // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\r\n    // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\r\n    // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\r\n    // later be divided by this number, then separate out the power of 10 using\r\n    // ln(a*10^b) = ln(a) + b*ln(10).\r\n\r\n    // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\r\n    //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\r\n    // max n is 6 (gives 0.7 - 1.3)\r\n    while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\r\n      x = x.times(y);\r\n      c = digitsToString(x.d);\r\n      c0 = c.charAt(0);\r\n      n++;\r\n    }\r\n\r\n    e = x.e;\r\n\r\n    if (c0 > 1) {\r\n      x = new Ctor('0.' + c);\r\n      e++;\r\n    } else {\r\n      x = new Ctor(c0 + '.' + c.slice(1));\r\n    }\r\n  } else {\r\n\r\n    // The argument reduction method above may result in overflow if the argument y is a massive\r\n    // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\r\n    // function using ln(x*10^e) = ln(x) + e*ln(10).\r\n    t = getLn10(Ctor, wpr + 2, pr).times(e + '');\r\n    x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\r\n    Ctor.precision = pr;\r\n\r\n    return sd == null ? finalise(x, pr, rm, external = true) : x;\r\n  }\r\n\r\n  // x1 is x reduced to a value near 1.\r\n  x1 = x;\r\n\r\n  // Taylor series.\r\n  // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\r\n  // where x = (y - 1)/(y + 1)    (|x| < 1)\r\n  sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\r\n  x2 = finalise(x.times(x), wpr, 1);\r\n  denominator = 3;\r\n\r\n  for (;;) {\r\n    numerator = finalise(numerator.times(x2), wpr, 1);\r\n    t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\r\n\r\n    if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\r\n      sum = sum.times(2);\r\n\r\n      // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\r\n      // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\r\n      if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\r\n      sum = divide(sum, new Ctor(n), wpr, 1);\r\n\r\n      // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\r\n      // been repeated previously) and the first 4 rounding digits 9999?\r\n      // If so, restart the summation with a higher precision, otherwise\r\n      // e.g. with precision: 12, rounding: 1\r\n      // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\r\n      // `wpr - guard` is the index of first rounding digit.\r\n      if (sd == null) {\r\n        if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\r\n          Ctor.precision = wpr += guard;\r\n          t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\r\n          x2 = finalise(x.times(x), wpr, 1);\r\n          denominator = rep = 1;\r\n        } else {\r\n          return finalise(sum, Ctor.precision = pr, rm, external = true);\r\n        }\r\n      } else {\r\n        Ctor.precision = pr;\r\n        return sum;\r\n      }\r\n    }\r\n\r\n    sum = t;\r\n    denominator += 2;\r\n  }\r\n}\r\n\r\n\r\n// \u00B1Infinity, NaN.\r\nfunction nonFiniteToString(x) {\r\n  // Unsigned.\r\n  return String(x.s * x.s / 0);\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from string `str`.\r\n */\r\nfunction parseDecimal(x, str) {\r\n  var e, i, len;\r\n\r\n  // TODO BigInt str: no need to check for decimal point, exponential form or leading zeros.\r\n  // Decimal point?\r\n  if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n  // Exponential form?\r\n  if ((i = str.search(/e/i)) > 0) {\r\n\r\n    // Determine exponent.\r\n    if (e < 0) e = i;\r\n    e += +str.slice(i + 1);\r\n    str = str.substring(0, i);\r\n  } else if (e < 0) {\r\n\r\n    // Integer.\r\n    e = str.length;\r\n  }\r\n\r\n  // Determine leading zeros.\r\n  for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n  // Determine trailing zeros.\r\n  for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\r\n  str = str.slice(i, len);\r\n\r\n  if (str) {\r\n    len -= i;\r\n    x.e = e = e - i - 1;\r\n    x.d = [];\r\n\r\n    // Transform base\r\n\r\n    // e is the base 10 exponent.\r\n    // i is where to slice str to get the first word of the digits array.\r\n    i = (e + 1) % LOG_BASE;\r\n    if (e < 0) i += LOG_BASE;\r\n\r\n    if (i < len) {\r\n      if (i) x.d.push(+str.slice(0, i));\r\n      for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\r\n      str = str.slice(i);\r\n      i = LOG_BASE - str.length;\r\n    } else {\r\n      i -= len;\r\n    }\r\n\r\n    for (; i--;) str += '0';\r\n    x.d.push(+str);\r\n\r\n    if (external) {\r\n\r\n      // Overflow?\r\n      if (x.e > x.constructor.maxE) {\r\n\r\n        // Infinity.\r\n        x.d = null;\r\n        x.e = NaN;\r\n\r\n      // Underflow?\r\n      } else if (x.e < x.constructor.minE) {\r\n\r\n        // Zero.\r\n        x.e = 0;\r\n        x.d = [0];\r\n        // x.constructor.underflow = true;\r\n      } // else x.constructor.underflow = false;\r\n    }\r\n  } else {\r\n\r\n    // Zero.\r\n    x.e = 0;\r\n    x.d = [0];\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\r\n */\r\nfunction parseOther(x, str) {\r\n  var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\r\n\r\n  if (str.indexOf('_') > -1) {\r\n    str = str.replace(/(\\d)_(?=\\d)/g, '$1');\r\n    if (isDecimal.test(str)) return parseDecimal(x, str);\r\n  } else if (str === 'Infinity' || str === 'NaN') {\r\n    if (!+str) x.s = NaN;\r\n    x.e = NaN;\r\n    x.d = null;\r\n    return x;\r\n  }\r\n\r\n  if (isHex.test(str))  {\r\n    base = 16;\r\n    str = str.toLowerCase();\r\n  } else if (isBinary.test(str))  {\r\n    base = 2;\r\n  } else if (isOctal.test(str))  {\r\n    base = 8;\r\n  } else {\r\n    throw Error(invalidArgument + str);\r\n  }\r\n\r\n  // Is there a binary exponent part?\r\n  i = str.search(/p/i);\r\n\r\n  if (i > 0) {\r\n    p = +str.slice(i + 1);\r\n    str = str.substring(2, i);\r\n  } else {\r\n    str = str.slice(2);\r\n  }\r\n\r\n  // Convert `str` as an integer then divide the result by `base` raised to a power such that the\r\n  // fraction part will be restored.\r\n  i = str.indexOf('.');\r\n  isFloat = i >= 0;\r\n  Ctor = x.constructor;\r\n\r\n  if (isFloat) {\r\n    str = str.replace('.', '');\r\n    len = str.length;\r\n    i = len - i;\r\n\r\n    // log[10](16) = 1.2041... , log[10](88) = 1.9444....\r\n    divisor = intPow(Ctor, new Ctor(base), i, i * 2);\r\n  }\r\n\r\n  xd = convertBase(str, base, BASE);\r\n  xe = xd.length - 1;\r\n\r\n  // Remove trailing zeros.\r\n  for (i = xe; xd[i] === 0; --i) xd.pop();\r\n  if (i < 0) return new Ctor(x.s * 0);\r\n  x.e = getBase10Exponent(xd, xe);\r\n  x.d = xd;\r\n  external = false;\r\n\r\n  // At what precision to perform the division to ensure exact conversion?\r\n  // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\r\n  // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\r\n  // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\r\n  // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\r\n  // Therefore using 4 * the number of digits of str will always be enough.\r\n  if (isFloat) x = divide(x, divisor, len * 4);\r\n\r\n  // Multiply by the binary exponent part if present.\r\n  if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\r\n  external = true;\r\n\r\n  return x;\r\n}\r\n\r\n\r\n/*\r\n * sin(x) = x - x^3/3! + x^5/5! - ...\r\n * |x| < pi/2\r\n *\r\n */\r\nfunction sine(Ctor, x) {\r\n  var k,\r\n    len = x.d.length;\r\n\r\n  if (len < 3) {\r\n    return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\r\n  }\r\n\r\n  // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\r\n  // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\r\n  // and  sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\r\n\r\n  // Estimate the optimum number of times to use the argument reduction.\r\n  k = 1.4 * Math.sqrt(len);\r\n  k = k > 16 ? 16 : k | 0;\r\n\r\n  x = x.times(1 / tinyPow(5, k));\r\n  x = taylorSeries(Ctor, 2, x, x);\r\n\r\n  // Reverse argument reduction\r\n  var sin2_x,\r\n    d5 = new Ctor(5),\r\n    d16 = new Ctor(16),\r\n    d20 = new Ctor(20);\r\n  for (; k--;) {\r\n    sin2_x = x.times(x);\r\n    x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\r\n  }\r\n\r\n  return x;\r\n}\r\n\r\n\r\n// Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\r\nfunction taylorSeries(Ctor, n, x, y, isHyperbolic) {\r\n  var j, t, u, x2,\r\n    i = 1,\r\n    pr = Ctor.precision,\r\n    k = Math.ceil(pr / LOG_BASE);\r\n\r\n  external = false;\r\n  x2 = x.times(x);\r\n  u = new Ctor(y);\r\n\r\n  for (;;) {\r\n    t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\r\n    u = isHyperbolic ? y.plus(t) : y.minus(t);\r\n    y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\r\n    t = u.plus(y);\r\n\r\n    if (t.d[k] !== void 0) {\r\n      for (j = k; t.d[j] === u.d[j] && j--;);\r\n      if (j == -1) break;\r\n    }\r\n\r\n    j = u;\r\n    u = y;\r\n    y = t;\r\n    t = j;\r\n    i++;\r\n  }\r\n\r\n  external = true;\r\n  t.d.length = k + 1;\r\n\r\n  return t;\r\n}\r\n\r\n\r\n// Exponent e must be positive and non-zero.\r\nfunction tinyPow(b, e) {\r\n  var n = b;\r\n  while (--e) n *= b;\r\n  return n;\r\n}\r\n\r\n\r\n// Return the absolute value of `x` reduced to less than or equal to half pi.\r\nfunction toLessThanHalfPi(Ctor, x) {\r\n  var t,\r\n    isNeg = x.s < 0,\r\n    pi = getPi(Ctor, Ctor.precision, 1),\r\n    halfPi = pi.times(0.5);\r\n\r\n  x = x.abs();\r\n\r\n  if (x.lte(halfPi)) {\r\n    quadrant = isNeg ? 4 : 1;\r\n    return x;\r\n  }\r\n\r\n  t = x.divToInt(pi);\r\n\r\n  if (t.isZero()) {\r\n    quadrant = isNeg ? 3 : 2;\r\n  } else {\r\n    x = x.minus(t.times(pi));\r\n\r\n    // 0 <= x < pi\r\n    if (x.lte(halfPi)) {\r\n      quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\r\n      return x;\r\n    }\r\n\r\n    quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\r\n  }\r\n\r\n  return x.minus(pi).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return the value of Decimal `x` as a string in base `baseOut`.\r\n *\r\n * If the optional `sd` argument is present include a binary exponent suffix.\r\n */\r\nfunction toStringBinary(x, baseOut, sd, rm) {\r\n  var base, e, i, k, len, roundUp, str, xd, y,\r\n    Ctor = x.constructor,\r\n    isExp = sd !== void 0;\r\n\r\n  if (isExp) {\r\n    checkInt32(sd, 1, MAX_DIGITS);\r\n    if (rm === void 0) rm = Ctor.rounding;\r\n    else checkInt32(rm, 0, 8);\r\n  } else {\r\n    sd = Ctor.precision;\r\n    rm = Ctor.rounding;\r\n  }\r\n\r\n  if (!x.isFinite()) {\r\n    str = nonFiniteToString(x);\r\n  } else {\r\n    str = finiteToString(x);\r\n    i = str.indexOf('.');\r\n\r\n    // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\r\n    // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\r\n    // minBinaryExponent = floor(decimalExponent * log[2](10))\r\n    // log[2](10) = 3.321928094887362347870319429489390175864\r\n\r\n    if (isExp) {\r\n      base = 2;\r\n      if (baseOut == 16) {\r\n        sd = sd * 4 - 3;\r\n      } else if (baseOut == 8) {\r\n        sd = sd * 3 - 2;\r\n      }\r\n    } else {\r\n      base = baseOut;\r\n    }\r\n\r\n    // Convert the number as an integer then divide the result by its base raised to a power such\r\n    // that the fraction part will be restored.\r\n\r\n    // Non-integer.\r\n    if (i >= 0) {\r\n      str = str.replace('.', '');\r\n      y = new Ctor(1);\r\n      y.e = str.length - i;\r\n      y.d = convertBase(finiteToString(y), 10, base);\r\n      y.e = y.d.length;\r\n    }\r\n\r\n    xd = convertBase(str, 10, base);\r\n    e = len = xd.length;\r\n\r\n    // Remove trailing zeros.\r\n    for (; xd[--len] == 0;) xd.pop();\r\n\r\n    if (!xd[0]) {\r\n      str = isExp ? '0p+0' : '0';\r\n    } else {\r\n      if (i < 0) {\r\n        e--;\r\n      } else {\r\n        x = new Ctor(x);\r\n        x.d = xd;\r\n        x.e = e;\r\n        x = divide(x, y, sd, rm, 0, base);\r\n        xd = x.d;\r\n        e = x.e;\r\n        roundUp = inexact;\r\n      }\r\n\r\n      // The rounding digit, i.e. the digit after the digit that may be rounded up.\r\n      i = xd[sd];\r\n      k = base / 2;\r\n      roundUp = roundUp || xd[sd + 1] !== void 0;\r\n\r\n      roundUp = rm < 4\r\n        ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\r\n        : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\r\n          rm === (x.s < 0 ? 8 : 7));\r\n\r\n      xd.length = sd;\r\n\r\n      if (roundUp) {\r\n\r\n        // Rounding up may mean the previous digit has to be rounded up and so on.\r\n        for (; ++xd[--sd] > base - 1;) {\r\n          xd[sd] = 0;\r\n          if (!sd) {\r\n            ++e;\r\n            xd.unshift(1);\r\n          }\r\n        }\r\n      }\r\n\r\n      // Determine trailing zeros.\r\n      for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n      // E.g. [4, 11, 15] becomes 4bf.\r\n      for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n\r\n      // Add binary exponent suffix?\r\n      if (isExp) {\r\n        if (len > 1) {\r\n          if (baseOut == 16 || baseOut == 8) {\r\n            i = baseOut == 16 ? 4 : 3;\r\n            for (--len; len % i; len++) str += '0';\r\n            xd = convertBase(str, base, baseOut);\r\n            for (len = xd.length; !xd[len - 1]; --len);\r\n\r\n            // xd[0] will always be be 1\r\n            for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\r\n          } else {\r\n            str = str.charAt(0) + '.' + str.slice(1);\r\n          }\r\n        }\r\n\r\n        str =  str + (e < 0 ? 'p' : 'p+') + e;\r\n      } else if (e < 0) {\r\n        for (; ++e;) str = '0' + str;\r\n        str = '0.' + str;\r\n      } else {\r\n        if (++e > len) for (e -= len; e-- ;) str += '0';\r\n        else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\r\n      }\r\n    }\r\n\r\n    str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\r\n  }\r\n\r\n  return x.s < 0 ? '-' + str : str;\r\n}\r\n\r\n\r\n// Does not strip trailing zeros.\r\nfunction truncate(arr, len) {\r\n  if (arr.length > len) {\r\n    arr.length = len;\r\n    return true;\r\n  }\r\n}\r\n\r\n\r\n// Decimal methods\r\n\r\n\r\n/*\r\n *  abs\r\n *  acos\r\n *  acosh\r\n *  add\r\n *  asin\r\n *  asinh\r\n *  atan\r\n *  atanh\r\n *  atan2\r\n *  cbrt\r\n *  ceil\r\n *  clamp\r\n *  clone\r\n *  config\r\n *  cos\r\n *  cosh\r\n *  div\r\n *  exp\r\n *  floor\r\n *  hypot\r\n *  ln\r\n *  log\r\n *  log2\r\n *  log10\r\n *  max\r\n *  min\r\n *  mod\r\n *  mul\r\n *  pow\r\n *  random\r\n *  round\r\n *  set\r\n *  sign\r\n *  sin\r\n *  sinh\r\n *  sqrt\r\n *  sub\r\n *  sum\r\n *  tan\r\n *  tanh\r\n *  trunc\r\n */\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the absolute value of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction abs(x) {\r\n  return new this(x).abs();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arccosine in radians of `x`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction acos(x) {\r\n  return new this(x).acos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction acosh(x) {\r\n  return new this(x).acosh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction add(x, y) {\r\n  return new this(x).plus(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction asin(x) {\r\n  return new this(x).asin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction asinh(x) {\r\n  return new this(x).asinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction atan(x) {\r\n  return new this(x).atan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\r\n * `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction atanh(x) {\r\n  return new this(x).atanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\r\n * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * Domain: [-Infinity, Infinity]\r\n * Range: [-pi, pi]\r\n *\r\n * y {number|string|bigint|Decimal} The y-coordinate.\r\n * x {number|string|bigint|Decimal} The x-coordinate.\r\n *\r\n * atan2(\u00B10, -0)               = \u00B1pi\r\n * atan2(\u00B10, +0)               = \u00B10\r\n * atan2(\u00B10, -x)               = \u00B1pi for x > 0\r\n * atan2(\u00B10, x)                = \u00B10 for x > 0\r\n * atan2(-y, \u00B10)               = -pi/2 for y > 0\r\n * atan2(y, \u00B10)                = pi/2 for y > 0\r\n * atan2(\u00B1y, -Infinity)        = \u00B1pi for finite y > 0\r\n * atan2(\u00B1y, +Infinity)        = \u00B10 for finite y > 0\r\n * atan2(\u00B1Infinity, x)         = \u00B1pi/2 for finite x\r\n * atan2(\u00B1Infinity, -Infinity) = \u00B13*pi/4\r\n * atan2(\u00B1Infinity, +Infinity) = \u00B1pi/4\r\n * atan2(NaN, x) = NaN\r\n * atan2(y, NaN) = NaN\r\n *\r\n */\r\nfunction atan2(y, x) {\r\n  y = new this(y);\r\n  x = new this(x);\r\n  var r,\r\n    pr = this.precision,\r\n    rm = this.rounding,\r\n    wpr = pr + 4;\r\n\r\n  // Either NaN\r\n  if (!y.s || !x.s) {\r\n    r = new this(NaN);\r\n\r\n  // Both \u00B1Infinity\r\n  } else if (!y.d && !x.d) {\r\n    r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\r\n    r.s = y.s;\r\n\r\n  // x is \u00B1Infinity or y is \u00B10\r\n  } else if (!x.d || y.isZero()) {\r\n    r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\r\n    r.s = y.s;\r\n\r\n  // y is \u00B1Infinity or x is \u00B10\r\n  } else if (!y.d || x.isZero()) {\r\n    r = getPi(this, wpr, 1).times(0.5);\r\n    r.s = y.s;\r\n\r\n  // Both non-zero and finite\r\n  } else if (x.s < 0) {\r\n    this.precision = wpr;\r\n    this.rounding = 1;\r\n    r = this.atan(divide(y, x, wpr, 1));\r\n    x = getPi(this, wpr, 1);\r\n    this.precision = pr;\r\n    this.rounding = rm;\r\n    r = y.s < 0 ? r.minus(x) : r.plus(x);\r\n  } else {\r\n    r = this.atan(divide(y, x, wpr, 1));\r\n  }\r\n\r\n  return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction cbrt(x) {\r\n  return new this(x).cbrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ceil(x) {\r\n  return finalise(x = new this(x), x.e + 1, 2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * min {number|string|bigint|Decimal}\r\n * max {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction clamp(x, min, max) {\r\n  return new this(x).clamp(min, max);\r\n}\r\n\r\n\r\n/*\r\n * Configure global settings for a Decimal constructor.\r\n *\r\n * `obj` is an object with one or more of the following properties,\r\n *\r\n *   precision  {number}\r\n *   rounding   {number}\r\n *   toExpNeg   {number}\r\n *   toExpPos   {number}\r\n *   maxE       {number}\r\n *   minE       {number}\r\n *   modulo     {number}\r\n *   crypto     {boolean|number}\r\n *   defaults   {true}\r\n *\r\n * E.g. Decimal.config({ precision: 20, rounding: 4 })\r\n *\r\n */\r\nfunction config(obj) {\r\n  if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\r\n  var i, p, v,\r\n    useDefaults = obj.defaults === true,\r\n    ps = [\r\n      'precision', 1, MAX_DIGITS,\r\n      'rounding', 0, 8,\r\n      'toExpNeg', -EXP_LIMIT, 0,\r\n      'toExpPos', 0, EXP_LIMIT,\r\n      'maxE', 0, EXP_LIMIT,\r\n      'minE', -EXP_LIMIT, 0,\r\n      'modulo', 0, 9\r\n    ];\r\n\r\n  for (i = 0; i < ps.length; i += 3) {\r\n    if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\r\n    if ((v = obj[p]) !== void 0) {\r\n      if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\r\n      else throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\r\n  if ((v = obj[p]) !== void 0) {\r\n    if (v === true || v === false || v === 0 || v === 1) {\r\n      if (v) {\r\n        if (typeof crypto != 'undefined' && crypto &&\r\n          (crypto.getRandomValues || crypto.randomBytes)) {\r\n          this[p] = true;\r\n        } else {\r\n          throw Error(cryptoUnavailable);\r\n        }\r\n      } else {\r\n        this[p] = false;\r\n      }\r\n    } else {\r\n      throw Error(invalidArgument + p + ': ' + v);\r\n    }\r\n  }\r\n\r\n  return this;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cos(x) {\r\n  return new this(x).cos();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction cosh(x) {\r\n  return new this(x).cosh();\r\n}\r\n\r\n\r\n/*\r\n * Create and return a Decimal constructor with the same configuration properties as this Decimal\r\n * constructor.\r\n *\r\n */\r\nfunction clone(obj) {\r\n  var i, p, ps;\r\n\r\n  /*\r\n   * The Decimal constructor and exported function.\r\n   * Return a new Decimal instance.\r\n   *\r\n   * v {number|string|bigint|Decimal} A numeric value.\r\n   *\r\n   */\r\n  function Decimal(v) {\r\n    var e, i, t,\r\n      x = this;\r\n\r\n    // Decimal called without new.\r\n    if (!(x instanceof Decimal)) return new Decimal(v);\r\n\r\n    // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\r\n    // which points to Object.\r\n    x.constructor = Decimal;\r\n\r\n    if (isDecimalInstance(v)) {\r\n      x.s = v.s;\r\n\r\n      if (external) {\r\n        if (!v.d || v.e > Decimal.maxE) {\r\n\r\n          // Infinity.\r\n          x.e = NaN;\r\n          x.d = null;\r\n        } else if (v.e < Decimal.minE) {\r\n\r\n          // Zero.\r\n          x.e = 0;\r\n          x.d = [0];\r\n        } else {\r\n          x.e = v.e;\r\n          x.d = v.d.slice();\r\n        }\r\n      } else {\r\n        x.e = v.e;\r\n        x.d = v.d ? v.d.slice() : v.d;\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    t = typeof v;\r\n\r\n    if (t === 'number') {\r\n      if (v === 0) {\r\n        x.s = 1 / v < 0 ? -1 : 1;\r\n        x.e = 0;\r\n        x.d = [0];\r\n        return;\r\n      }\r\n\r\n      if (v < 0) {\r\n        v = -v;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      // Fast path for small integers.\r\n      if (v === ~~v && v < 1e7) {\r\n        for (e = 0, i = v; i >= 10; i /= 10) e++;\r\n\r\n        if (external) {\r\n          if (e > Decimal.maxE) {\r\n            x.e = NaN;\r\n            x.d = null;\r\n          } else if (e < Decimal.minE) {\r\n            x.e = 0;\r\n            x.d = [0];\r\n          } else {\r\n            x.e = e;\r\n            x.d = [v];\r\n          }\r\n        } else {\r\n          x.e = e;\r\n          x.d = [v];\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      // Infinity or NaN?\r\n      if (v * 0 !== 0) {\r\n        if (!v) x.s = NaN;\r\n        x.e = NaN;\r\n        x.d = null;\r\n        return;\r\n      }\r\n\r\n      return parseDecimal(x, v.toString());\r\n    }\r\n\r\n    if (t === 'string') {\r\n      if ((i = v.charCodeAt(0)) === 45) {  // minus sign\r\n        v = v.slice(1);\r\n        x.s = -1;\r\n      } else {\r\n        if (i === 43) v = v.slice(1);  // plus sign\r\n        x.s = 1;\r\n      }\r\n\r\n      return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\r\n    }\r\n\r\n    if (t === 'bigint') {\r\n      if (v < 0) {\r\n        v = -v;\r\n        x.s = -1;\r\n      } else {\r\n        x.s = 1;\r\n      }\r\n\r\n      return parseDecimal(x, v.toString());\r\n    }\r\n\r\n    throw Error(invalidArgument + v);\r\n  }\r\n\r\n  Decimal.prototype = P;\r\n\r\n  Decimal.ROUND_UP = 0;\r\n  Decimal.ROUND_DOWN = 1;\r\n  Decimal.ROUND_CEIL = 2;\r\n  Decimal.ROUND_FLOOR = 3;\r\n  Decimal.ROUND_HALF_UP = 4;\r\n  Decimal.ROUND_HALF_DOWN = 5;\r\n  Decimal.ROUND_HALF_EVEN = 6;\r\n  Decimal.ROUND_HALF_CEIL = 7;\r\n  Decimal.ROUND_HALF_FLOOR = 8;\r\n  Decimal.EUCLID = 9;\r\n\r\n  Decimal.config = Decimal.set = config;\r\n  Decimal.clone = clone;\r\n  Decimal.isDecimal = isDecimalInstance;\r\n\r\n  Decimal.abs = abs;\r\n  Decimal.acos = acos;\r\n  Decimal.acosh = acosh;        // ES6\r\n  Decimal.add = add;\r\n  Decimal.asin = asin;\r\n  Decimal.asinh = asinh;        // ES6\r\n  Decimal.atan = atan;\r\n  Decimal.atanh = atanh;        // ES6\r\n  Decimal.atan2 = atan2;\r\n  Decimal.cbrt = cbrt;          // ES6\r\n  Decimal.ceil = ceil;\r\n  Decimal.clamp = clamp;\r\n  Decimal.cos = cos;\r\n  Decimal.cosh = cosh;          // ES6\r\n  Decimal.div = div;\r\n  Decimal.exp = exp;\r\n  Decimal.floor = floor;\r\n  Decimal.hypot = hypot;        // ES6\r\n  Decimal.ln = ln;\r\n  Decimal.log = log;\r\n  Decimal.log10 = log10;        // ES6\r\n  Decimal.log2 = log2;          // ES6\r\n  Decimal.max = max;\r\n  Decimal.min = min;\r\n  Decimal.mod = mod;\r\n  Decimal.mul = mul;\r\n  Decimal.pow = pow;\r\n  Decimal.random = random;\r\n  Decimal.round = round;\r\n  Decimal.sign = sign;          // ES6\r\n  Decimal.sin = sin;\r\n  Decimal.sinh = sinh;          // ES6\r\n  Decimal.sqrt = sqrt;\r\n  Decimal.sub = sub;\r\n  Decimal.sum = sum;\r\n  Decimal.tan = tan;\r\n  Decimal.tanh = tanh;          // ES6\r\n  Decimal.trunc = trunc;        // ES6\r\n\r\n  if (obj === void 0) obj = {};\r\n  if (obj) {\r\n    if (obj.defaults !== true) {\r\n      ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\r\n      for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\r\n    }\r\n  }\r\n\r\n  Decimal.config(obj);\r\n\r\n  return Decimal;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction div(x, y) {\r\n  return new this(x).div(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The power to which to raise the base of the natural log.\r\n *\r\n */\r\nfunction exp(x) {\r\n  return new this(x).exp();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction floor(x) {\r\n  return finalise(x = new this(x), x.e + 1, 3);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\r\n * rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction hypot() {\r\n  var i, n,\r\n    t = new this(0);\r\n\r\n  external = false;\r\n\r\n  for (i = 0; i < arguments.length;) {\r\n    n = new this(arguments[i++]);\r\n    if (!n.d) {\r\n      if (n.s) {\r\n        external = true;\r\n        return new this(1 / 0);\r\n      }\r\n      t = n;\r\n    } else if (t.d) {\r\n      t = t.plus(n.times(n));\r\n    }\r\n  }\r\n\r\n  external = true;\r\n\r\n  return t.sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\r\n * otherwise return false.\r\n *\r\n */\r\nfunction isDecimalInstance(obj) {\r\n  return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction ln(x) {\r\n  return new this(x).ln();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\r\n * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\r\n *\r\n * log[y](x)\r\n *\r\n * x {number|string|bigint|Decimal} The argument of the logarithm.\r\n * y {number|string|bigint|Decimal} The base of the logarithm.\r\n *\r\n */\r\nfunction log(x, y) {\r\n  return new this(x).log(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log2(x) {\r\n  return new this(x).log(2);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction log10(x) {\r\n  return new this(x).log(10);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction max() {\r\n  return maxOrMin(this, arguments, -1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction min() {\r\n  return maxOrMin(this, arguments, 1);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mod(x, y) {\r\n  return new this(x).mod(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction mul(x, y) {\r\n  return new this(x).mul(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} The base.\r\n * y {number|string|bigint|Decimal} The exponent.\r\n *\r\n */\r\nfunction pow(x, y) {\r\n  return new this(x).pow(y);\r\n}\r\n\r\n\r\n/*\r\n * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\r\n * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\r\n * are produced).\r\n *\r\n * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\r\n *\r\n */\r\nfunction random(sd) {\r\n  var d, e, k, n,\r\n    i = 0,\r\n    r = new this(1),\r\n    rd = [];\r\n\r\n  if (sd === void 0) sd = this.precision;\r\n  else checkInt32(sd, 1, MAX_DIGITS);\r\n\r\n  k = Math.ceil(sd / LOG_BASE);\r\n\r\n  if (!this.crypto) {\r\n    for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\r\n\r\n  // Browsers supporting crypto.getRandomValues.\r\n  } else if (crypto.getRandomValues) {\r\n    d = crypto.getRandomValues(new Uint32Array(k));\r\n\r\n    for (; i < k;) {\r\n      n = d[i];\r\n\r\n      // 0 <= n < 4294967296\r\n      // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\r\n      if (n >= 4.29e9) {\r\n        d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\r\n      } else {\r\n\r\n        // 0 <= n <= 4289999999\r\n        // 0 <= (n % 1e7) <= 9999999\r\n        rd[i++] = n % 1e7;\r\n      }\r\n    }\r\n\r\n  // Node.js supporting crypto.randomBytes.\r\n  } else if (crypto.randomBytes) {\r\n\r\n    // buffer\r\n    d = crypto.randomBytes(k *= 4);\r\n\r\n    for (; i < k;) {\r\n\r\n      // 0 <= n < 2147483648\r\n      n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\r\n\r\n      // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\r\n      if (n >= 2.14e9) {\r\n        crypto.randomBytes(4).copy(d, i);\r\n      } else {\r\n\r\n        // 0 <= n <= 2139999999\r\n        // 0 <= (n % 1e7) <= 9999999\r\n        rd.push(n % 1e7);\r\n        i += 4;\r\n      }\r\n    }\r\n\r\n    i = k / 4;\r\n  } else {\r\n    throw Error(cryptoUnavailable);\r\n  }\r\n\r\n  k = rd[--i];\r\n  sd %= LOG_BASE;\r\n\r\n  // Convert trailing digits to zeros according to sd.\r\n  if (k && sd) {\r\n    n = mathpow(10, LOG_BASE - sd);\r\n    rd[i] = (k / n | 0) * n;\r\n  }\r\n\r\n  // Remove trailing words which are zero.\r\n  for (; rd[i] === 0; i--) rd.pop();\r\n\r\n  // Zero?\r\n  if (i < 0) {\r\n    e = 0;\r\n    rd = [0];\r\n  } else {\r\n    e = -1;\r\n\r\n    // Remove leading words which are zero and adjust exponent accordingly.\r\n    for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\r\n\r\n    // Count the digits of the first word of rd to determine leading zeros.\r\n    for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\r\n\r\n    // Adjust the exponent for leading zeros of the first word of rd.\r\n    if (k < LOG_BASE) e -= LOG_BASE - k;\r\n  }\r\n\r\n  r.e = e;\r\n  r.d = rd;\r\n\r\n  return r;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\r\n *\r\n * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction round(x) {\r\n  return finalise(x = new this(x), x.e + 1, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return\r\n *   1    if x > 0,\r\n *  -1    if x < 0,\r\n *   0    if x is 0,\r\n *  -0    if x is -0,\r\n *   NaN  otherwise\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sign(x) {\r\n  x = new this(x);\r\n  return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sin(x) {\r\n  return new this(x).sin();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction sinh(x) {\r\n  return new this(x).sinh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sqrt(x) {\r\n  return new this(x).sqrt();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\r\n * using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n * y {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sub(x, y) {\r\n  return new this(x).sub(y);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * Only the result is rounded, not the intermediate calculations.\r\n *\r\n * arguments {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction sum() {\r\n  var i = 0,\r\n    args = arguments,\r\n    x = new this(args[i]);\r\n\r\n  external = false;\r\n  for (; x.s && ++i < args.length;) x = x.plus(args[i]);\r\n  external = true;\r\n\r\n  return finalise(x, this.precision, this.rounding);\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\r\n * digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tan(x) {\r\n  return new this(x).tan();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\r\n * significant digits using rounding mode `rounding`.\r\n *\r\n * x {number|string|bigint|Decimal} A value in radians.\r\n *\r\n */\r\nfunction tanh(x) {\r\n  return new this(x).tanh();\r\n}\r\n\r\n\r\n/*\r\n * Return a new Decimal whose value is `x` truncated to an integer.\r\n *\r\n * x {number|string|bigint|Decimal}\r\n *\r\n */\r\nfunction trunc(x) {\r\n  return finalise(x = new this(x), x.e + 1, 1);\r\n}\r\n\r\n\r\nP[Symbol.for('nodejs.util.inspect.custom')] = P.toString;\r\nP[Symbol.toStringTag] = 'Decimal';\r\n\r\n// Create and configure initial Decimal constructor.\r\nexport var Decimal = P.constructor = clone(DEFAULTS);\r\n\r\n// Create the internal constants from their string values.\r\nLN10 = new Decimal(LN10);\r\nPI = new Decimal(PI);\r\n\r\nexport default Decimal;\r\n", "/**\n * Transpose a matrix\n * @param {Array} mat\n * @returns {Array} ret\n * @private\n */\nexport function _switch(mat) {\n  var I = mat.length;\n  var J = mat[0].length;\n  var i, j;\n  var ret = [];\n\n  for (j = 0; j < J; j++) {\n    var tmp = [];\n\n    for (i = 0; i < I; i++) {\n      tmp.push(mat[i][j]);\n    }\n\n    ret.push(tmp);\n  }\n\n  return ret;\n}", "import { isCollection, isMatrix } from './is.js';\nimport { IndexError } from '../error/IndexError.js';\nimport { arraySize } from './array.js';\nimport { _switch } from './switch.js';\n/**\n * Test whether an array contains collections\n * @param {Array} array\n * @returns {boolean} Returns true when the array contains one or multiple\n *                    collections (Arrays or Matrices). Returns false otherwise.\n */\n\nexport function containsCollections(array) {\n  for (var i = 0; i < array.length; i++) {\n    if (isCollection(array[i])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n/**\n * Recursively loop over all elements in a given multi dimensional array\n * and invoke the callback on each of the elements.\n * @param {Array | Matrix} array\n * @param {Function} callback     The callback method is invoked with one\n *                                parameter: the current element in the array\n */\n\nexport function deepForEach(array, callback) {\n  if (isMatrix(array)) {\n    array = array.valueOf();\n  }\n\n  for (var i = 0, ii = array.length; i < ii; i++) {\n    var value = array[i];\n\n    if (Array.isArray(value)) {\n      deepForEach(value, callback);\n    } else {\n      callback(value);\n    }\n  }\n}\n/**\n * Execute the callback function element wise for each element in array and any\n * nested array\n * Returns an array with the results\n * @param {Array | Matrix} array\n * @param {Function} callback   The callback is called with two parameters:\n *                              value1 and value2, which contain the current\n *                              element of both arrays.\n * @param {boolean} [skipZeros] Invoke callback function for non-zero values only.\n *\n * @return {Array | Matrix} res\n */\n\nexport function deepMap(array, callback, skipZeros) {\n  if (array && typeof array.map === 'function') {\n    // TODO: replace array.map with a for loop to improve performance\n    return array.map(function (x) {\n      return deepMap(x, callback, skipZeros);\n    });\n  } else {\n    return callback(array);\n  }\n}\n/**\n * Reduce a given matrix or array to a new matrix or\n * array with one less dimension, applying the given\n * callback in the selected dimension.\n * @param {Array | Matrix} mat\n * @param {number} dim\n * @param {Function} callback\n * @return {Array | Matrix} res\n */\n\nexport function reduce(mat, dim, callback) {\n  var size = Array.isArray(mat) ? arraySize(mat) : mat.size();\n\n  if (dim < 0 || dim >= size.length) {\n    // TODO: would be more clear when throwing a DimensionError here\n    throw new IndexError(dim, size.length);\n  }\n\n  if (isMatrix(mat)) {\n    return mat.create(_reduce(mat.valueOf(), dim, callback));\n  } else {\n    return _reduce(mat, dim, callback);\n  }\n}\n/**\n * Recursively reduce a matrix\n * @param {Array} mat\n * @param {number} dim\n * @param {Function} callback\n * @returns {Array} ret\n * @private\n */\n\nfunction _reduce(mat, dim, callback) {\n  var i, ret, val, tran;\n\n  if (dim <= 0) {\n    if (!Array.isArray(mat[0])) {\n      val = mat[0];\n\n      for (i = 1; i < mat.length; i++) {\n        val = callback(val, mat[i]);\n      }\n\n      return val;\n    } else {\n      tran = _switch(mat);\n      ret = [];\n\n      for (i = 0; i < tran.length; i++) {\n        ret[i] = _reduce(tran[i], dim - 1, callback);\n      }\n\n      return ret;\n    }\n  } else {\n    ret = [];\n\n    for (i = 0; i < mat.length; i++) {\n      ret[i] = _reduce(mat[i], dim - 1, callback);\n    }\n\n    return ret;\n  }\n} // TODO: document function scatter\n\n\nexport function scatter(a, j, w, x, u, mark, cindex, f, inverse, update, value) {\n  // a arrays\n  var avalues = a._values;\n  var aindex = a._index;\n  var aptr = a._ptr; // vars\n\n  var k, k0, k1, i; // check we need to process values (pattern matrix)\n\n  if (x) {\n    // values in j\n    for (k0 = aptr[j], k1 = aptr[j + 1], k = k0; k < k1; k++) {\n      // row\n      i = aindex[k]; // check value exists in current j\n\n      if (w[i] !== mark) {\n        // i is new entry in j\n        w[i] = mark; // add i to pattern of C\n\n        cindex.push(i); // x(i) = A, check we need to call function this time\n\n        if (update) {\n          // copy value to workspace calling callback function\n          x[i] = inverse ? f(avalues[k], value) : f(value, avalues[k]); // function was called on current row\n\n          u[i] = mark;\n        } else {\n          // copy value to workspace\n          x[i] = avalues[k];\n        }\n      } else {\n        // i exists in C already\n        x[i] = inverse ? f(avalues[k], x[i]) : f(x[i], avalues[k]); // function was called on current row\n\n        u[i] = mark;\n      }\n    }\n  } else {\n    // values in j\n    for (k0 = aptr[j], k1 = aptr[j + 1], k = k0; k < k1; k++) {\n      // row\n      i = aindex[k]; // check value exists in current j\n\n      if (w[i] !== mark) {\n        // i is new entry in j\n        w[i] = mark; // add i to pattern of C\n\n        cindex.push(i);\n      } else {\n        // indicate function was called on current row\n        u[i] = mark;\n      }\n    }\n  }\n}", "import Decimal from 'decimal.js';\nimport { factory } from '../../utils/factory.js';\nimport { deepMap } from '../../utils/collection.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { createAlgorithm11 } from '../../type/matrix/utils/algorithm11.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nvar name = 'ceil';\nvar dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];\nexport var createCeilNumber = /* #__PURE__ */factory(name, ['typed', 'config', 'round'], _ref => {\n  var {\n    typed,\n    config,\n    round\n  } = _ref;\n  return typed(name, {\n    number: function number(x) {\n      if (nearlyEqual(x, round(x), config.epsilon)) {\n        return round(x);\n      } else {\n        return Math.ceil(x);\n      }\n    },\n    'number, number': function numberNumber(x, n) {\n      if (nearlyEqual(x, round(x, n), config.epsilon)) {\n        return round(x, n);\n      } else {\n        var [number, exponent] = \"\".concat(x, \"e\").split('e');\n        var result = Math.ceil(Number(\"\".concat(number, \"e\").concat(Number(exponent) + n)));\n        [number, exponent] = \"\".concat(result, \"e\").split('e');\n        return Number(\"\".concat(number, \"e\").concat(Number(exponent) - n));\n      }\n    }\n  });\n});\nexport var createCeil = /* #__PURE__ */factory(name, dependencies, _ref2 => {\n  var {\n    typed,\n    config,\n    round,\n    matrix,\n    equalScalar,\n    zeros,\n    DenseMatrix\n  } = _ref2;\n  var algorithm11 = createAlgorithm11({\n    typed,\n    equalScalar\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  var ceilNumber = createCeilNumber({\n    typed,\n    config,\n    round\n  });\n  /**\n   * Round a value towards plus infinity\n   * If `x` is complex, both real and imaginary part are rounded towards plus infinity.\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.ceil(x)\n   *    math.ceil(x, n)\n   *\n   * Examples:\n   *\n   *    math.ceil(3.2)               // returns number 4\n   *    math.ceil(3.8)               // returns number 4\n   *    math.ceil(-4.2)              // returns number -4\n   *    math.ceil(-4.7)              // returns number -4\n   *\n   *    math.ceil(3.212, 2)          // returns number 3.22\n   *    math.ceil(3.288, 2)          // returns number 3.29\n   *    math.ceil(-4.212, 2)         // returns number -4.21\n   *    math.ceil(-4.782, 2)         // returns number -4.78\n   *\n   *    const c = math.complex(3.24, -2.71)\n   *    math.ceil(c)                 // returns Complex 4 - 2i\n   *    math.ceil(c, 1)              // returns Complex 3.3 - 2.7i\n   *\n   *    math.ceil([3.2, 3.8, -4.7])  // returns Array [4, 4, -4]\n   *    math.ceil([3.21, 3.82, -4.71], 1)  // returns Array [3.3, 3.9, -4.7]\n   *\n   * See also:\n   *\n   *    floor, fix, round\n   *\n   * @param  {number | BigNumber | Fraction | Complex | Array | Matrix} x  Number to be rounded\n   * @param  {number | BigNumber | Array} [n=0]                            Number of decimals\n   * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value\n   */\n\n  return typed('ceil', {\n    number: ceilNumber.signatures.number,\n    'number,number': ceilNumber.signatures['number,number'],\n    Complex: function Complex(x) {\n      return x.ceil();\n    },\n    'Complex, number': function ComplexNumber(x, n) {\n      return x.ceil(n);\n    },\n    'Complex, BigNumber': function ComplexBigNumber(x, n) {\n      return x.ceil(n.toNumber());\n    },\n    BigNumber: function BigNumber(x) {\n      if (bigNearlyEqual(x, round(x), config.epsilon)) {\n        return round(x);\n      } else {\n        return x.ceil();\n      }\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {\n      if (bigNearlyEqual(x, round(x, n), config.epsilon)) {\n        return round(x, n);\n      } else {\n        return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_CEIL);\n      }\n    },\n    Fraction: function Fraction(x) {\n      return x.ceil();\n    },\n    'Fraction, number': function FractionNumber(x, n) {\n      return x.ceil(n);\n    },\n    'Fraction, BigNumber': function FractionBigNumber(x, n) {\n      return x.ceil(n.toNumber());\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      // deep map collection, skip zeros since ceil(0) = 0\n      return deepMap(x, this, true);\n    },\n    'Array, number | BigNumber': function ArrayNumberBigNumber(x, n) {\n      // deep map collection, skip zeros since ceil(0) = 0\n      return deepMap(x, i => this(i, n), true);\n    },\n    'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {\n      return algorithm11(x, y, this, false);\n    },\n    'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    },\n    'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {\n      if (equalScalar(x, 0)) return zeros(y.size(), y.storage());\n\n      if (y.storage() === 'dense') {\n        return algorithm14(y, x, this, true);\n      }\n\n      return algorithm12(y, x, this, true);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nimport { deepMap } from '../../utils/collection.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nvar name = 'fix';\nvar dependencies = ['typed', 'Complex', 'matrix', 'ceil', 'floor', 'equalScalar', 'zeros', 'DenseMatrix'];\nexport var createFixNumber = /* #__PURE__ */factory(name, ['typed', 'ceil', 'floor'], _ref => {\n  var {\n    typed,\n    ceil,\n    floor\n  } = _ref;\n  return typed(name, {\n    number: function number(x) {\n      return x > 0 ? floor(x) : ceil(x);\n    },\n    'number, number': function numberNumber(x, n) {\n      return x > 0 ? floor(x, n) : ceil(x, n);\n    }\n  });\n});\nexport var createFix = /* #__PURE__ */factory(name, dependencies, _ref2 => {\n  var {\n    typed,\n    Complex: _Complex,\n    matrix,\n    ceil,\n    floor,\n    equalScalar,\n    zeros,\n    DenseMatrix\n  } = _ref2;\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  var fixNumber = createFixNumber({\n    typed,\n    ceil,\n    floor\n  });\n  /**\n   * Round a value towards zero.\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.fix(x)\n   *    math.fix(x,n)\n   *\n   * Examples:\n   *\n   *    math.fix(3.2)                // returns number 3\n   *    math.fix(3.8)                // returns number 3\n   *    math.fix(-4.2)               // returns number -4\n   *    math.fix(-4.7)               // returns number -4\n   *\n   *    math.fix(3.12, 1)                // returns number 3.1\n   *    math.fix(3.18, 1)                // returns number 3.1\n   *    math.fix(-4.12, 1)               // returns number -4.1\n   *    math.fix(-4.17, 1)               // returns number -4.1\n   *\n   *    const c = math.complex(3.22, -2.78)\n   *    math.fix(c)                  // returns Complex 3 - 2i\n   *    math.fix(c, 1)               // returns Complex 3.2 - 2.7i\n   *\n   *    math.fix([3.2, 3.8, -4.7])      // returns Array [3, 3, -4]\n   *    math.fix([3.2, 3.8, -4.7], 1)   // returns Array [3.2, 3.8, -4.7]\n   *\n   * See also:\n   *\n   *    ceil, floor, round\n   *\n   * @param  {number | BigNumber | Fraction | Complex | Array | Matrix} x    Number to be rounded\n   * @param  {number | BigNumber | Array} [n=0]                             Number of decimals\n   * @return {number | BigNumber | Fraction | Complex | Array | Matrix}     Rounded value\n   */\n\n  return typed('fix', {\n    number: fixNumber.signatures.number,\n    'number, number | BigNumber': fixNumber.signatures['number,number'],\n    Complex: function Complex(x) {\n      return new _Complex(x.re > 0 ? Math.floor(x.re) : Math.ceil(x.re), x.im > 0 ? Math.floor(x.im) : Math.ceil(x.im));\n    },\n    'Complex, number': function ComplexNumber(x, n) {\n      return new _Complex(x.re > 0 ? floor(x.re, n) : ceil(x.re, n), x.im > 0 ? floor(x.im, n) : ceil(x.im, n));\n    },\n    'Complex, BigNumber': function ComplexBigNumber(x, bn) {\n      var n = bn.toNumber();\n      return new _Complex(x.re > 0 ? floor(x.re, n) : ceil(x.re, n), x.im > 0 ? floor(x.im, n) : ceil(x.im, n));\n    },\n    BigNumber: function BigNumber(x) {\n      return x.isNegative() ? ceil(x) : floor(x);\n    },\n    'BigNumber, number | BigNumber': function BigNumberNumberBigNumber(x, n) {\n      return x.isNegative() ? ceil(x, n) : floor(x, n);\n    },\n    Fraction: function Fraction(x) {\n      return x.s < 0 ? x.ceil() : x.floor();\n    },\n    'Fraction, number | BigNumber': function FractionNumberBigNumber(x, n) {\n      return x.s < 0 ? ceil(x, n) : floor(x, n);\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      // deep map collection, skip zeros since fix(0) = 0\n      return deepMap(x, this, true);\n    },\n    'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(x, n) {\n      // deep map collection, skip zeros since fix(0) = 0\n      return deepMap(x, i => this(i, n), true);\n    },\n    'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    },\n    'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {\n      if (equalScalar(x, 0)) return zeros(y.size(), y.storage());\n\n      if (y.storage() === 'dense') {\n        return algorithm14(y, x, this, true);\n      }\n\n      return algorithm12(y, x, this, true);\n    }\n  });\n});", "import Decimal from 'decimal.js';\nimport { factory } from '../../utils/factory.js';\nimport { deepMap } from '../../utils/collection.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { createAlgorithm11 } from '../../type/matrix/utils/algorithm11.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nvar name = 'floor';\nvar dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix'];\nexport var createFloorNumber = /* #__PURE__ */factory(name, ['typed', 'config', 'round'], _ref => {\n  var {\n    typed,\n    config,\n    round\n  } = _ref;\n  return typed(name, {\n    number: function number(x) {\n      if (nearlyEqual(x, round(x), config.epsilon)) {\n        return round(x);\n      } else {\n        return Math.floor(x);\n      }\n    },\n    'number, number': function numberNumber(x, n) {\n      if (nearlyEqual(x, round(x, n), config.epsilon)) {\n        return round(x, n);\n      } else {\n        var [number, exponent] = \"\".concat(x, \"e\").split('e');\n        var result = Math.floor(Number(\"\".concat(number, \"e\").concat(Number(exponent) + n)));\n        [number, exponent] = \"\".concat(result, \"e\").split('e');\n        return Number(\"\".concat(number, \"e\").concat(Number(exponent) - n));\n      }\n    }\n  });\n});\nexport var createFloor = /* #__PURE__ */factory(name, dependencies, _ref2 => {\n  var {\n    typed,\n    config,\n    round,\n    matrix,\n    equalScalar,\n    zeros,\n    DenseMatrix\n  } = _ref2;\n  var algorithm11 = createAlgorithm11({\n    typed,\n    equalScalar\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  var floorNumber = createFloorNumber({\n    typed,\n    config,\n    round\n  });\n  /**\n   * Round a value towards minus infinity.\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.floor(x)\n   *    math.floor(x, n)\n   *\n   * Examples:\n   *\n   *    math.floor(3.2)              // returns number 3\n   *    math.floor(3.8)              // returns number 3\n   *    math.floor(-4.2)             // returns number -5\n   *    math.floor(-4.7)             // returns number -5\n   *\n   *    math.floor(3.212, 2)          // returns number 3.21\n   *    math.floor(3.288, 2)          // returns number 3.28\n   *    math.floor(-4.212, 2)         // returns number -4.22\n   *    math.floor(-4.782, 2)         // returns number -4.79\n   *\n   *    const c = math.complex(3.24, -2.71)\n   *    math.floor(c)                 // returns Complex 3 - 3i\n   *    math.floor(c, 1)              // returns Complex 3.2 - 2.8i\n   *\n   *    math.floor([3.2, 3.8, -4.7])       // returns Array [3, 3, -5]\n   *    math.floor([3.21, 3.82, -4.71], 1)  // returns Array [3.2, 3.8, -4.8]\n   *\n   *    math.floor(math.tau, [2, 3])  // returns Array [6.28, 6.283]\n   *\n   *    // Note that floor(array, array) currently not implemented.\n   *\n   * See also:\n   *\n   *    ceil, fix, round\n   *\n   * @param  {number | BigNumber | Fraction | Complex | Array | Matrix} x  Number to be rounded\n   * @param  {number | BigNumber | Array} [n=0]                            Number of decimals\n   * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value\n   */\n\n  return typed('floor', {\n    number: floorNumber.signatures.number,\n    'number,number': floorNumber.signatures['number,number'],\n    Complex: function Complex(x) {\n      return x.floor();\n    },\n    'Complex, number': function ComplexNumber(x, n) {\n      return x.floor(n);\n    },\n    'Complex, BigNumber': function ComplexBigNumber(x, n) {\n      return x.floor(n.toNumber());\n    },\n    BigNumber: function BigNumber(x) {\n      if (bigNearlyEqual(x, round(x), config.epsilon)) {\n        return round(x);\n      } else {\n        return x.floor();\n      }\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {\n      if (bigNearlyEqual(x, round(x, n), config.epsilon)) {\n        return round(x, n);\n      } else {\n        return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_FLOOR);\n      }\n    },\n    Fraction: function Fraction(x) {\n      return x.floor();\n    },\n    'Fraction, number': function FractionNumber(x, n) {\n      return x.floor(n);\n    },\n    'Fraction, BigNumber': function FractionBigNumber(x, n) {\n      return x.floor(n.toNumber());\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      // deep map collection, skip zeros since floor(0) = 0\n      return deepMap(x, this, true);\n    },\n    'Array, number | BigNumber': function ArrayNumberBigNumber(x, n) {\n      // deep map collection, skip zeros since ceil(0) = 0\n      return deepMap(x, i => this(i, n), true);\n    },\n    'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {\n      return algorithm11(x, y, this, false);\n    },\n    'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'number | Complex | Fraction | BigNumber, Array': function numberComplexFractionBigNumberArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    },\n    'number | Complex | Fraction | BigNumber, Matrix': function numberComplexFractionBigNumberMatrix(x, y) {\n      if (equalScalar(x, 0)) return zeros(y.size(), y.storage());\n\n      if (y.storage() === 'dense') {\n        return algorithm14(y, x, this, true);\n      }\n\n      return algorithm12(y, x, this, true);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nimport { flatten } from '../../utils/array.js';\nvar name = 'hypot';\nvar dependencies = ['typed', 'abs', 'addScalar', 'divideScalar', 'multiplyScalar', 'sqrt', 'smaller', 'isPositive'];\nexport var createHypot = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    abs,\n    addScalar,\n    divideScalar,\n    multiplyScalar,\n    sqrt,\n    smaller,\n    isPositive\n  } = _ref;\n\n  /**\n   * Calculate the hypotenusa of a list with values. The hypotenusa is defined as:\n   *\n   *     hypot(a, b, c, ...) = sqrt(a^2 + b^2 + c^2 + ...)\n   *\n   * For matrix input, the hypotenusa is calculated for all values in the matrix.\n   *\n   * Syntax:\n   *\n   *     math.hypot(a, b, ...)\n   *     math.hypot([a, b, c, ...])\n   *\n   * Examples:\n   *\n   *     math.hypot(3, 4)      // 5\n   *     math.hypot(3, 4, 5)   // 7.0710678118654755\n   *     math.hypot([3, 4, 5]) // 7.0710678118654755\n   *     math.hypot(-2)        // 2\n   *\n   * See also:\n   *\n   *     abs, norm\n   *\n   * @param {... number | BigNumber | Array | Matrix} args    A list with numeric values or an Array or Matrix.\n   *                                                          Matrix and Array input is flattened and returns a\n   *                                                          single number for the whole matrix.\n   * @return {number | BigNumber} Returns the hypothenusa of the input values.\n   */\n  return typed(name, {\n    '... number | BigNumber': _hypot,\n    Array: function Array(x) {\n      return this.apply(this, flatten(x));\n    },\n    Matrix: function Matrix(x) {\n      return this.apply(this, flatten(x.toArray()));\n    }\n  });\n  /**\n   * Calculate the hypotenusa for an Array with values\n   * @param {Array.<number | BigNumber>} args\n   * @return {number | BigNumber} Returns the result\n   * @private\n   */\n\n  function _hypot(args) {\n    // code based on `hypot` from es6-shim:\n    // https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js#L1619-L1633\n    var result = 0;\n    var largest = 0;\n\n    for (var i = 0; i < args.length; i++) {\n      var value = abs(args[i]);\n\n      if (smaller(largest, value)) {\n        result = multiplyScalar(result, multiplyScalar(divideScalar(largest, value), divideScalar(largest, value)));\n        result = addScalar(result, 1);\n        largest = value;\n      } else {\n        result = addScalar(result, isPositive(value) ? multiplyScalar(divideScalar(value, largest), divideScalar(value, largest)) : value);\n      }\n    }\n\n    return multiplyScalar(largest, sqrt(result));\n  }\n});", "import { factory } from '../../utils/factory.js';\nimport { isNumber } from '../../utils/is.js';\nvar name = 'stirlingS2';\nvar dependencies = ['typed', 'addScalar', 'subtract', 'multiplyScalar', 'divideScalar', 'pow', 'factorial', 'combinations', 'isNegative', 'isInteger', 'number', '?bignumber', 'larger'];\nexport var createStirlingS2 = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    addScalar,\n    subtract,\n    multiplyScalar,\n    divideScalar,\n    pow,\n    factorial,\n    combinations,\n    isNegative,\n    isInteger,\n    number,\n    bignumber,\n    larger\n  } = _ref;\n  var smallCache = [];\n  var bigCache = [];\n  /**\n   * The Stirling numbers of the second kind, counts the number of ways to partition\n   * a set of n labelled objects into k nonempty unlabelled subsets.\n   * stirlingS2 only takes integer arguments.\n   * The following condition must be enforced: k <= n.\n   *\n   *  If n = k or k = 1 <= n, then s(n,k) = 1\n   *  If k = 0 < n, then s(n,k) = 0\n   *\n   * Note that if either n or k is supplied as a BigNumber, the result will be\n   * as well.\n   *\n   * Syntax:\n   *\n   *   math.stirlingS2(n, k)\n   *\n   * Examples:\n   *\n   *    math.stirlingS2(5, 3) //returns 25\n   *\n   * See also:\n   *\n   *    bellNumbers\n   *\n   * @param {Number | BigNumber} n    Total number of objects in the set\n   * @param {Number | BigNumber} k    Number of objects in the subset\n   * @return {Number | BigNumber}     S(n,k)\n   */\n\n  return typed(name, {\n    'number | BigNumber, number | BigNumber': function numberBigNumberNumberBigNumber(n, k) {\n      if (!isInteger(n) || isNegative(n) || !isInteger(k) || isNegative(k)) {\n        throw new TypeError('Non-negative integer value expected in function stirlingS2');\n      } else if (larger(k, n)) {\n        throw new TypeError('k must be less than or equal to n in function stirlingS2');\n      }\n\n      var big = !(isNumber(n) && isNumber(k));\n      var cache = big ? bigCache : smallCache;\n      var make = big ? bignumber : number;\n      var nn = number(n);\n      var nk = number(k);\n      /* See if we already have the value: */\n\n      if (cache[nn] && cache[nn].length > nk) {\n        return cache[nn][nk];\n      }\n      /* Fill the cache */\n\n\n      for (var m = 0; m <= nn; ++m) {\n        if (!cache[m]) {\n          cache[m] = [m === 0 ? make(1) : make(0)];\n        }\n\n        if (m === 0) continue;\n        var row = cache[m];\n        var prev = cache[m - 1];\n\n        for (var i = row.length; i <= m && i <= nk; ++i) {\n          if (i === m) {\n            row[i] = 1;\n          } else {\n            row[i] = addScalar(multiplyScalar(make(i), prev[i]), prev[i - 1]);\n          }\n        }\n      }\n\n      return cache[nn][nk];\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'bellNumbers';\nvar dependencies = ['typed', 'addScalar', 'isNegative', 'isInteger', 'stirlingS2'];\nexport var createBellNumbers = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    addScalar,\n    isNegative,\n    isInteger,\n    stirlingS2\n  } = _ref;\n\n  /**\n   * The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S.\n   * bellNumbers only takes integer arguments.\n   * The following condition must be enforced: n >= 0\n   *\n   * Syntax:\n   *\n   *   math.bellNumbers(n)\n   *\n   * Examples:\n   *\n   *    math.bellNumbers(3) // returns 5\n   *    math.bellNumbers(8) // returns 4140\n   *\n   * See also:\n   *\n   *    stirlingS2\n   *\n   * @param {Number | BigNumber} n    Total number of objects in the set\n   * @return {Number | BigNumber}     B(n)\n   */\n  return typed(name, {\n    'number | BigNumber': function numberBigNumber(n) {\n      if (!isInteger(n) || isNegative(n)) {\n        throw new TypeError('Non-negative integer value expected in function bellNumbers');\n      } // Sum (k=0, n) S(n,k).\n\n\n      var result = 0;\n\n      for (var i = 0; i <= n; i++) {\n        result = addScalar(result, stirlingS2(n, i));\n      }\n\n      return result;\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'catalan';\nvar dependencies = ['typed', 'addScalar', 'divideScalar', 'multiplyScalar', 'combinations', 'isNegative', 'isInteger'];\nexport var createCatalan = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    addScalar,\n    divideScalar,\n    multiplyScalar,\n    combinations,\n    isNegative,\n    isInteger\n  } = _ref;\n\n  /**\n   * The Catalan Numbers enumerate combinatorial structures of many different types.\n   * catalan only takes integer arguments.\n   * The following condition must be enforced: n >= 0\n   *\n   * Syntax:\n   *\n   *   math.catalan(n)\n   *\n   * Examples:\n   *\n   *    math.catalan(3) // returns 5\n   *    math.catalan(8) // returns 1430\n   *\n   * See also:\n   *\n   *    bellNumbers\n   *\n   * @param {Number | BigNumber} n    nth Catalan number\n   * @return {Number | BigNumber}     Cn(n)\n   */\n  return typed(name, {\n    'number | BigNumber': function numberBigNumber(n) {\n      if (!isInteger(n) || isNegative(n)) {\n        throw new TypeError('Non-negative integer value expected in function catalan');\n      }\n\n      return divideScalar(combinations(multiplyScalar(n, 2), n), addScalar(n, 1));\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'composition';\nvar dependencies = ['typed', 'addScalar', 'combinations', 'isNegative', 'isPositive', 'isInteger', 'larger'];\nexport var createComposition = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    addScalar,\n    combinations,\n    isPositive,\n    isNegative,\n    isInteger,\n    larger\n  } = _ref;\n\n  /**\n   * The composition counts of n into k parts.\n   *\n   * composition only takes integer arguments.\n   * The following condition must be enforced: k <= n.\n   *\n   * Syntax:\n   *\n   *   math.composition(n, k)\n   *\n   * Examples:\n   *\n   *    math.composition(5, 3) // returns 6\n   *\n   * See also:\n   *\n   *    combinations\n   *\n   * @param {Number | BigNumber} n    Total number of objects in the set\n   * @param {Number | BigNumber} k    Number of objects in the subset\n   * @return {Number | BigNumber}     Returns the composition counts of n into k parts.\n   */\n  return typed(name, {\n    'number | BigNumber, number | BigNumber': function numberBigNumberNumberBigNumber(n, k) {\n      if (!isInteger(n) || !isPositive(n) || !isInteger(k) || !isPositive(k)) {\n        throw new TypeError('Positive integer value expected in function composition');\n      } else if (larger(k, n)) {\n        throw new TypeError('k must be less than or equal to n in function composition');\n      }\n\n      return combinations(addScalar(n, -1), addScalar(k, -1));\n    }\n  });\n});", "export var version = '10.6.4'; // Note: This file is automatically generated when building math.js.\n// Changes made in this file will be overwritten.", "// (c) 2018, Mariusz Nowak\n// SPDX-License-Identifier: ISC\n// Derived from https://github.com/medikoo/lru-queue\nexport function lruQueue(limit) {\n  var size = 0;\n  var base = 1;\n  var queue = Object.create(null);\n  var map = Object.create(null);\n  var index = 0;\n\n  var del = function del(id) {\n    var oldIndex = map[id];\n    if (!oldIndex) return;\n    delete queue[oldIndex];\n    delete map[id];\n    --size;\n    if (base !== oldIndex) return;\n\n    if (!size) {\n      index = 0;\n      base = 1;\n      return;\n    }\n\n    while (!hasOwnProperty.call(queue, ++base)) {\n      continue;\n    }\n  };\n\n  limit = Math.abs(limit);\n  return {\n    hit: function hit(id) {\n      var oldIndex = map[id];\n      var nuIndex = ++index;\n      queue[nuIndex] = id;\n      map[id] = nuIndex;\n\n      if (!oldIndex) {\n        ++size;\n        if (size <= limit) return undefined;\n        id = queue[base];\n        del(id);\n        return id;\n      }\n\n      delete queue[oldIndex];\n      if (base !== oldIndex) return undefined;\n\n      while (!hasOwnProperty.call(queue, ++base)) {\n        continue;\n      }\n\n      return undefined;\n    },\n    delete: del,\n    clear: function clear() {\n      size = index = 0;\n      base = 1;\n      queue = Object.create(null);\n      map = Object.create(null);\n    }\n  };\n}", "// function utils\nimport { lruQueue } from './lruQueue.js';\n/**\n * Memoize a given function by caching the computed result.\n * The cache of a memoized function can be cleared by deleting the `cache`\n * property of the function.\n *\n * @param {function} fn                     The function to be memoized.\n *                                          Must be a pure function.\n * @param {Object} [options]\n * @param {function(args: Array): string} [options.hasher]\n *    A custom hash builder. Is JSON.stringify by default.\n * @param {number | undefined} [options.limit]\n *    Maximum number of values that may be cached. Undefined indicates\n *    unlimited (default)\n * @return {function}                       Returns the memoized function\n */\n\nexport function memoize(fn) {\n  var {\n    hasher,\n    limit\n  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  limit = limit == null ? Number.POSITIVE_INFINITY : limit;\n  hasher = hasher == null ? JSON.stringify : hasher;\n  return function memoize() {\n    if (typeof memoize.cache !== 'object') {\n      memoize.cache = {\n        values: new Map(),\n        lru: lruQueue(limit || Number.POSITIVE_INFINITY)\n      };\n    }\n\n    var args = [];\n\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    var hash = hasher(args);\n\n    if (memoize.cache.values.has(hash)) {\n      memoize.cache.lru.hit(hash);\n      return memoize.cache.values.get(hash);\n    }\n\n    var newVal = fn.apply(fn, args);\n    memoize.cache.values.set(hash, newVal);\n    memoize.cache.values.delete(memoize.cache.lru.hit(hash));\n    return newVal;\n  };\n}\n/**\n * Memoize a given function by caching all results and the arguments,\n * and comparing against the arguments of previous results before\n * executing again.\n * This is less performant than `memoize` which calculates a hash,\n * which is very fast to compare. Use `memoizeCompare` only when it is\n * not possible to create a unique serializable hash from the function\n * arguments.\n * The isEqual function must compare two sets of arguments\n * and return true when equal (can be a deep equality check for example).\n * @param {function} fn\n * @param {function(a: *, b: *) : boolean} isEqual\n * @returns {function}\n */\n\nexport function memoizeCompare(fn, isEqual) {\n  var memoize = function memoize() {\n    var args = [];\n\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    for (var c = 0; c < memoize.cache.length; c++) {\n      var cached = memoize.cache[c];\n\n      if (isEqual(args, cached.args)) {\n        // TODO: move this cache entry to the top so recently used entries move up?\n        return cached.res;\n      }\n    }\n\n    var res = fn.apply(fn, args);\n    memoize.cache.unshift({\n      args,\n      res\n    });\n    return res;\n  };\n\n  memoize.cache = [];\n  return memoize;\n}\n/**\n * Find the maximum number of arguments expected by a typed function.\n * @param {function} fn   A typed function\n * @return {number} Returns the maximum number of expected arguments.\n *                  Returns -1 when no signatures where found on the function.\n */\n\nexport function maxArgumentCount(fn) {\n  return Object.keys(fn.signatures || {}).reduce(function (args, signature) {\n    var count = (signature.match(/,/g) || []).length + 1;\n    return Math.max(args, count);\n  }, -1);\n}", "import { memoize } from '../function.js';\n/**\n * Calculate BigNumber e\n * @param {function} BigNumber   BigNumber constructor\n * @returns {BigNumber} Returns e\n */\n\nexport var createBigNumberE = memoize(function (BigNumber) {\n  return new BigNumber(1).exp();\n}, {\n  hasher\n});\n/**\n * Calculate BigNumber golden ratio, phi = (1+sqrt(5))/2\n * @param {function} BigNumber   BigNumber constructor\n * @returns {BigNumber} Returns phi\n */\n\nexport var createBigNumberPhi = memoize(function (BigNumber) {\n  return new BigNumber(1).plus(new BigNumber(5).sqrt()).div(2);\n}, {\n  hasher\n});\n/**\n * Calculate BigNumber pi.\n * @param {function} BigNumber   BigNumber constructor\n * @returns {BigNumber} Returns pi\n */\n\nexport var createBigNumberPi = memoize(function (BigNumber) {\n  return BigNumber.acos(-1);\n}, {\n  hasher\n});\n/**\n * Calculate BigNumber tau, tau = 2 * pi\n * @param {function} BigNumber   BigNumber constructor\n * @returns {BigNumber} Returns tau\n */\n\nexport var createBigNumberTau = memoize(function (BigNumber) {\n  return createBigNumberPi(BigNumber).times(2);\n}, {\n  hasher\n});\n/**\n * Create a hash for a BigNumber constructor function. The created has is\n * the configured precision\n * @param {Array} args         Supposed to contain a single entry with\n *                             a BigNumber constructor\n * @return {number} precision\n * @private\n */\n\nfunction hasher(args) {\n  return args[0].precision;\n}", "import { factory } from './utils/factory.js';\nimport { version } from './version.js';\nimport { createBigNumberE, createBigNumberPhi, createBigNumberPi, createBigNumberTau } from './utils/bignumber/constants.js';\nimport { pi, tau, e, phi } from './plain/number/index.js';\nexport var createTrue = /* #__PURE__ */factory('true', [], () => true);\nexport var createFalse = /* #__PURE__ */factory('false', [], () => false);\nexport var createNull = /* #__PURE__ */factory('null', [], () => null);\nexport var createInfinity = /* #__PURE__ */recreateFactory('Infinity', ['config', '?BigNumber'], _ref => {\n  var {\n    config,\n    BigNumber\n  } = _ref;\n  return config.number === 'BigNumber' ? new BigNumber(Infinity) : Infinity;\n});\nexport var createNaN = /* #__PURE__ */recreateFactory('NaN', ['config', '?BigNumber'], _ref2 => {\n  var {\n    config,\n    BigNumber\n  } = _ref2;\n  return config.number === 'BigNumber' ? new BigNumber(NaN) : NaN;\n});\nexport var createPi = /* #__PURE__ */recreateFactory('pi', ['config', '?BigNumber'], _ref3 => {\n  var {\n    config,\n    BigNumber\n  } = _ref3;\n  return config.number === 'BigNumber' ? createBigNumberPi(BigNumber) : pi;\n});\nexport var createTau = /* #__PURE__ */recreateFactory('tau', ['config', '?BigNumber'], _ref4 => {\n  var {\n    config,\n    BigNumber\n  } = _ref4;\n  return config.number === 'BigNumber' ? createBigNumberTau(BigNumber) : tau;\n});\nexport var createE = /* #__PURE__ */recreateFactory('e', ['config', '?BigNumber'], _ref5 => {\n  var {\n    config,\n    BigNumber\n  } = _ref5;\n  return config.number === 'BigNumber' ? createBigNumberE(BigNumber) : e;\n}); // golden ratio, (1+sqrt(5))/2\n\nexport var createPhi = /* #__PURE__ */recreateFactory('phi', ['config', '?BigNumber'], _ref6 => {\n  var {\n    config,\n    BigNumber\n  } = _ref6;\n  return config.number === 'BigNumber' ? createBigNumberPhi(BigNumber) : phi;\n});\nexport var createLN2 = /* #__PURE__ */recreateFactory('LN2', ['config', '?BigNumber'], _ref7 => {\n  var {\n    config,\n    BigNumber\n  } = _ref7;\n  return config.number === 'BigNumber' ? new BigNumber(2).ln() : Math.LN2;\n});\nexport var createLN10 = /* #__PURE__ */recreateFactory('LN10', ['config', '?BigNumber'], _ref8 => {\n  var {\n    config,\n    BigNumber\n  } = _ref8;\n  return config.number === 'BigNumber' ? new BigNumber(10).ln() : Math.LN10;\n});\nexport var createLOG2E = /* #__PURE__ */recreateFactory('LOG2E', ['config', '?BigNumber'], _ref9 => {\n  var {\n    config,\n    BigNumber\n  } = _ref9;\n  return config.number === 'BigNumber' ? new BigNumber(1).div(new BigNumber(2).ln()) : Math.LOG2E;\n});\nexport var createLOG10E = /* #__PURE__ */recreateFactory('LOG10E', ['config', '?BigNumber'], _ref10 => {\n  var {\n    config,\n    BigNumber\n  } = _ref10;\n  return config.number === 'BigNumber' ? new BigNumber(1).div(new BigNumber(10).ln()) : Math.LOG10E;\n});\nexport var createSQRT1_2 = /* #__PURE__ */recreateFactory( // eslint-disable-line camelcase\n'SQRT1_2', ['config', '?BigNumber'], _ref11 => {\n  var {\n    config,\n    BigNumber\n  } = _ref11;\n  return config.number === 'BigNumber' ? new BigNumber('0.5').sqrt() : Math.SQRT1_2;\n});\nexport var createSQRT2 = /* #__PURE__ */recreateFactory('SQRT2', ['config', '?BigNumber'], _ref12 => {\n  var {\n    config,\n    BigNumber\n  } = _ref12;\n  return config.number === 'BigNumber' ? new BigNumber(2).sqrt() : Math.SQRT2;\n});\nexport var createI = /* #__PURE__ */recreateFactory('i', ['Complex'], _ref13 => {\n  var {\n    Complex\n  } = _ref13;\n  return Complex.I;\n}); // for backward compatibility with v5\n\nexport var createUppercasePi = /* #__PURE__ */factory('PI', ['pi'], _ref14 => {\n  var {\n    pi\n  } = _ref14;\n  return pi;\n});\nexport var createUppercaseE = /* #__PURE__ */factory('E', ['e'], _ref15 => {\n  var {\n    e\n  } = _ref15;\n  return e;\n});\nexport var createVersion = /* #__PURE__ */factory('version', [], () => version); // helper function to create a factory with a flag recreateOnConfigChange\n// idea: allow passing optional properties to be attached to the factory function as 4th argument?\n\nfunction recreateFactory(name, dependencies, create) {\n  return factory(name, dependencies, create, {\n    recreateOnConfigChange: true\n  });\n}", "import { factory } from '../utils/factory.js';\nimport { deepMap } from '../utils/collection.js';\nvar name = 'number';\nvar dependencies = ['typed'];\n/**\n * Separates the radix, integer part, and fractional part of a non decimal number string\n * @param {string} input string to parse\n * @returns {object} the parts of the string or null if not a valid input\n */\n\nfunction getNonDecimalNumberParts(input) {\n  var nonDecimalWithRadixMatch = input.match(/(0[box])([0-9a-fA-F]*)\\.([0-9a-fA-F]*)/);\n\n  if (nonDecimalWithRadixMatch) {\n    var radix = {\n      '0b': 2,\n      '0o': 8,\n      '0x': 16\n    }[nonDecimalWithRadixMatch[1]];\n    var integerPart = nonDecimalWithRadixMatch[2];\n    var fractionalPart = nonDecimalWithRadixMatch[3];\n    return {\n      input,\n      radix,\n      integerPart,\n      fractionalPart\n    };\n  } else {\n    return null;\n  }\n}\n/**\n * Makes a number from a radix, and integer part, and a fractional part\n * @param {parts} [x] parts of the number string (from getNonDecimalNumberParts)\n * @returns {number} the number\n */\n\n\nfunction makeNumberFromNonDecimalParts(parts) {\n  var n = parseInt(parts.integerPart, parts.radix);\n  var f = 0;\n\n  for (var i = 0; i < parts.fractionalPart.length; i++) {\n    var digitValue = parseInt(parts.fractionalPart[i], parts.radix);\n    f += digitValue / Math.pow(parts.radix, i + 1);\n  }\n\n  var result = n + f;\n\n  if (isNaN(result)) {\n    throw new SyntaxError('String \"' + parts.input + '\" is no valid number');\n  }\n\n  return result;\n}\n\nexport var createNumber = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Create a number or convert a string, boolean, or unit to a number.\n   * When value is a matrix, all elements will be converted to number.\n   *\n   * Syntax:\n   *\n   *    math.number(value)\n   *    math.number(unit, valuelessUnit)\n   *\n   * Examples:\n   *\n   *    math.number(2)                         // returns number 2\n   *    math.number('7.2')                     // returns number 7.2\n   *    math.number(true)                      // returns number 1\n   *    math.number([true, false, true, true]) // returns [1, 0, 1, 1]\n   *    math.number(math.unit('52cm'), 'm')    // returns 0.52\n   *\n   * See also:\n   *\n   *    bignumber, boolean, complex, index, matrix, string, unit\n   *\n   * @param {string | number | BigNumber | Fraction | boolean | Array | Matrix | Unit | null} [value]  Value to be converted\n   * @param {Unit | string} [valuelessUnit] A valueless unit, used to convert a unit to a number\n   * @return {number | Array | Matrix} The created number\n   */\n  var number = typed('number', {\n    '': function _() {\n      return 0;\n    },\n    number: function number(x) {\n      return x;\n    },\n    string: function string(x) {\n      if (x === 'NaN') return NaN;\n      var nonDecimalNumberParts = getNonDecimalNumberParts(x);\n\n      if (nonDecimalNumberParts) {\n        return makeNumberFromNonDecimalParts(nonDecimalNumberParts);\n      }\n\n      var size = 0;\n      var wordSizeSuffixMatch = x.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);\n\n      if (wordSizeSuffixMatch) {\n        // x includes a size suffix like 0xffffi32, so we extract\n        // the suffix and remove it from x\n        size = Number(wordSizeSuffixMatch[2]);\n        x = wordSizeSuffixMatch[1];\n      }\n\n      var num = Number(x);\n\n      if (isNaN(num)) {\n        throw new SyntaxError('String \"' + x + '\" is no valid number');\n      }\n\n      if (wordSizeSuffixMatch) {\n        // x is a signed bin, oct, or hex literal\n        // num is the value of string x if x is interpreted as unsigned\n        if (num > 2 ** size - 1) {\n          // literal is too large for size suffix\n          throw new SyntaxError(\"String \\\"\".concat(x, \"\\\" is out of range\"));\n        } // check if the bit at index size - 1 is set and if so do the twos complement\n\n\n        if (num >= 2 ** (size - 1)) {\n          num = num - 2 ** size;\n        }\n      }\n\n      return num;\n    },\n    BigNumber: function BigNumber(x) {\n      return x.toNumber();\n    },\n    Fraction: function Fraction(x) {\n      return x.valueOf();\n    },\n    Unit: function Unit(x) {\n      throw new Error('Second argument with valueless unit expected');\n    },\n    null: function _null(x) {\n      return 0;\n    },\n    'Unit, string | Unit': function UnitStringUnit(unit, valuelessUnit) {\n      return unit.toNumber(valuelessUnit);\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      return deepMap(x, this);\n    }\n  }); // reviver function to parse a JSON object like:\n  //\n  //     {\"mathjs\":\"number\",\"value\":\"2.3\"}\n  //\n  // into a number 2.3\n\n  number.fromJSON = function (json) {\n    return parseFloat(json.value);\n  };\n\n  return number;\n});", "import { factory } from '../utils/factory.js';\nimport { deepMap } from '../utils/collection.js';\nimport { format } from '../utils/number.js';\nvar name = 'string';\nvar dependencies = ['typed'];\nexport var createString = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Create a string or convert any object into a string.\n   * Elements of Arrays and Matrices are processed element wise.\n   *\n   * Syntax:\n   *\n   *    math.string(value)\n   *\n   * Examples:\n   *\n   *    math.string(4.2)               // returns string '4.2'\n   *    math.string(math.complex(3, 2) // returns string '3 + 2i'\n   *\n   *    const u = math.unit(5, 'km')\n   *    math.string(u.to('m'))         // returns string '5000 m'\n   *\n   *    math.string([true, false])     // returns ['true', 'false']\n   *\n   * See also:\n   *\n   *    bignumber, boolean, complex, index, matrix, number, unit\n   *\n   * @param {* | Array | Matrix | null} [value]  A value to convert to a string\n   * @return {string | Array | Matrix} The created string\n   */\n  return typed(name, {\n    '': function _() {\n      return '';\n    },\n    number: format,\n    null: function _null(x) {\n      return 'null';\n    },\n    boolean: function boolean(x) {\n      return x + '';\n    },\n    string: function string(x) {\n      return x;\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      return deepMap(x, this);\n    },\n    any: function any(x) {\n      return String(x);\n    }\n  });\n});", "import { factory } from '../utils/factory.js';\nimport { deepMap } from '../utils/collection.js';\nvar name = 'boolean';\nvar dependencies = ['typed'];\nexport var createBoolean = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Create a boolean or convert a string or number to a boolean.\n   * In case of a number, `true` is returned for non-zero numbers, and `false` in\n   * case of zero.\n   * Strings can be `'true'` or `'false'`, or can contain a number.\n   * When value is a matrix, all elements will be converted to boolean.\n   *\n   * Syntax:\n   *\n   *    math.boolean(x)\n   *\n   * Examples:\n   *\n   *    math.boolean(0)     // returns false\n   *    math.boolean(1)     // returns true\n   *    math.boolean(-3)     // returns true\n   *    math.boolean('true')     // returns true\n   *    math.boolean('false')     // returns false\n   *    math.boolean([1, 0, 1, 1])     // returns [true, false, true, true]\n   *\n   * See also:\n   *\n   *    bignumber, complex, index, matrix, string, unit\n   *\n   * @param {string | number | boolean | Array | Matrix | null} value  A value of any type\n   * @return {boolean | Array | Matrix} The boolean value\n   */\n  return typed(name, {\n    '': function _() {\n      return false;\n    },\n    boolean: function boolean(x) {\n      return x;\n    },\n    number: function number(x) {\n      return !!x;\n    },\n    null: function _null(x) {\n      return false;\n    },\n    BigNumber: function BigNumber(x) {\n      return !x.isZero();\n    },\n    string: function string(x) {\n      // try case insensitive\n      var lcase = x.toLowerCase();\n\n      if (lcase === 'true') {\n        return true;\n      } else if (lcase === 'false') {\n        return false;\n      } // test whether value is a valid number\n\n\n      var num = Number(x);\n\n      if (x !== '' && !isNaN(num)) {\n        return !!num;\n      }\n\n      throw new Error('Cannot convert \"' + x + '\" to a boolean');\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      return deepMap(x, this);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'parser';\nvar dependencies = ['typed', 'Parser'];\nexport var createParser = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    Parser\n  } = _ref;\n\n  /**\n   * Create a parser. The function creates a new `math.Parser` object.\n   *\n   * Syntax:\n   *\n   *    math.parser()\n   *\n   * Examples:\n   *\n   *     const parser = new math.parser()\n   *\n   *     // evaluate expressions\n   *     const a = parser.evaluate('sqrt(3^2 + 4^2)') // 5\n   *     const b = parser.evaluate('sqrt(-4)')        // 2i\n   *     const c = parser.evaluate('2 inch in cm')    // 5.08 cm\n   *     const d = parser.evaluate('cos(45 deg)')     // 0.7071067811865476\n   *\n   *     // define variables and functions\n   *     parser.evaluate('x = 7 / 2')             // 3.5\n   *     parser.evaluate('x + 3')                 // 6.5\n   *     parser.evaluate('f(x, y) = x^y')         // f(x, y)\n   *     parser.evaluate('f(2, 3)')               // 8\n   *\n   *     // get and set variables and functions\n   *     const x = parser.get('x')                // 7\n   *     const f = parser.get('f')                // function\n   *     const g = f(3, 2)                        // 9\n   *     parser.set('h', 500)\n   *     const i = parser.evaluate('h / 2')       // 250\n   *     parser.set('hello', function (name) {\n   *       return 'hello, ' + name + '!'\n   *     })\n   *     parser.evaluate('hello(\"user\")')         // \"hello, user!\"\n   *\n   *     // clear defined functions and variables\n   *     parser.clear()\n   *\n   * See also:\n   *\n   *    evaluate, compile, parse\n   *\n   * @return {Parser} Parser\n   */\n  return typed(name, {\n    '': function _() {\n      return new Parser();\n    }\n  });\n});", "// Reserved keywords not allowed to use in the parser\nexport var keywords = new Set(['end']);", "import { isNode } from '../../utils/is.js';\nimport { keywords } from '../keywords.js';\nimport { deepStrictEqual } from '../../utils/object.js';\nimport { factory } from '../../utils/factory.js';\nimport { createMap } from '../../utils/map.js';\nvar name = 'Node';\nvar dependencies = ['mathWithTransform'];\nexport var createNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    mathWithTransform\n  } = _ref;\n\n  /**\n   * Node\n   */\n  function Node() {\n    if (!(this instanceof Node)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n  }\n  /**\n   * Evaluate the node\n   * @param {Object} [scope]  Scope to read/write variables\n   * @return {*}              Returns the result\n   */\n\n\n  Node.prototype.evaluate = function (scope) {\n    return this.compile().evaluate(scope);\n  };\n\n  Node.prototype.type = 'Node';\n  Node.prototype.isNode = true;\n  Node.prototype.comment = '';\n  /**\n   * Compile the node into an optimized, evauatable JavaScript function\n   * @return {{evaluate: function([Object])}} object\n   *                Returns an object with a function 'evaluate',\n   *                which can be invoked as expr.evaluate([scope: Object]),\n   *                where scope is an optional object with\n   *                variables.\n   */\n\n  Node.prototype.compile = function () {\n    var expr = this._compile(mathWithTransform, {});\n\n    var args = {};\n    var context = null;\n\n    function evaluate(scope) {\n      var s = createMap(scope);\n\n      _validateScope(s);\n\n      return expr(s, args, context);\n    }\n\n    return {\n      evaluate\n    };\n  };\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n\n  Node.prototype._compile = function (math, argNames) {\n    throw new Error('Method _compile should be implemented by type ' + this.type);\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  Node.prototype.forEach = function (callback) {\n    // must be implemented by each of the Node implementations\n    throw new Error('Cannot run forEach on a Node interface');\n  };\n  /**\n   * Create a new Node having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {OperatorNode} Returns a transformed copy of the node\n   */\n\n\n  Node.prototype.map = function (callback) {\n    // must be implemented by each of the Node implementations\n    throw new Error('Cannot run map on a Node interface');\n  };\n  /**\n   * Validate whether an object is a Node, for use with map\n   * @param {Node} node\n   * @returns {Node} Returns the input if it's a node, else throws an Error\n   * @protected\n   */\n\n\n  Node.prototype._ifNode = function (node) {\n    if (!isNode(node)) {\n      throw new TypeError('Callback function must return a Node');\n    }\n\n    return node;\n  };\n  /**\n   * Recursively traverse all nodes in a node tree. Executes given callback for\n   * this node and each of its child nodes.\n   * @param {function(node: Node, path: string, parent: Node)} callback\n   *          A callback called for every node in the node tree.\n   */\n\n\n  Node.prototype.traverse = function (callback) {\n    // execute callback for itself\n    // eslint-disable-next-line\n    callback(this, null, null); // recursively traverse over all childs of a node\n\n    function _traverse(node, callback) {\n      node.forEach(function (child, path, parent) {\n        callback(child, path, parent);\n\n        _traverse(child, callback);\n      });\n    }\n\n    _traverse(this, callback);\n  };\n  /**\n   * Recursively transform a node tree via a transform function.\n   *\n   * For example, to replace all nodes of type SymbolNode having name 'x' with a\n   * ConstantNode with value 2:\n   *\n   *     const res = Node.transform(function (node, path, parent) {\n   *       if (node && node.isSymbolNode) && (node.name === 'x')) {\n   *         return new ConstantNode(2)\n   *       }\n   *       else {\n   *         return node\n   *       }\n   *     })\n   *\n   * @param {function(node: Node, path: string, parent: Node) : Node} callback\n   *          A mapping function accepting a node, and returning\n   *          a replacement for the node or the original node.\n   *          Signature: callback(node: Node, index: string, parent: Node) : Node\n   * @return {Node} Returns the original node or its replacement\n   */\n\n\n  Node.prototype.transform = function (callback) {\n    function _transform(child, path, parent) {\n      var replacement = callback(child, path, parent);\n\n      if (replacement !== child) {\n        // stop iterating when the node is replaced\n        return replacement;\n      }\n\n      return child.map(_transform);\n    }\n\n    return _transform(this, null, null);\n  };\n  /**\n   * Find any node in the node tree matching given filter function. For example, to\n   * find all nodes of type SymbolNode having name 'x':\n   *\n   *     const results = Node.filter(function (node) {\n   *       return (node && node.isSymbolNode) && (node.name === 'x')\n   *     })\n   *\n   * @param {function(node: Node, path: string, parent: Node) : Node} callback\n   *            A test function returning true when a node matches, and false\n   *            otherwise. Function signature:\n   *            callback(node: Node, index: string, parent: Node) : boolean\n   * @return {Node[]} nodes       An array with nodes matching given filter criteria\n   */\n\n\n  Node.prototype.filter = function (callback) {\n    var nodes = [];\n    this.traverse(function (node, path, parent) {\n      if (callback(node, path, parent)) {\n        nodes.push(node);\n      }\n    });\n    return nodes;\n  };\n  /**\n   * Create a shallow clone of this node\n   * @return {Node}\n   */\n\n\n  Node.prototype.clone = function () {\n    // must be implemented by each of the Node implementations\n    throw new Error('Cannot clone a Node interface');\n  };\n  /**\n   * Create a deep clone of this node\n   * @return {Node}\n   */\n\n\n  Node.prototype.cloneDeep = function () {\n    return this.map(function (node) {\n      return node.cloneDeep();\n    });\n  };\n  /**\n   * Deep compare this node with another node.\n   * @param {Node} other\n   * @return {boolean} Returns true when both nodes are of the same type and\n   *                   contain the same values (as do their childs)\n   */\n\n\n  Node.prototype.equals = function (other) {\n    return other ? deepStrictEqual(this, other) : false;\n  };\n  /**\n   * Get string representation. (wrapper function)\n   *\n   * This function can get an object of the following form:\n   * {\n   *    handler: //This can be a callback function of the form\n   *             // \"function callback(node, options)\"or\n   *             // a map that maps function names (used in FunctionNodes)\n   *             // to callbacks\n   *    parenthesis: \"keep\" //the parenthesis option (This is optional)\n   * }\n   *\n   * @param {Object} [options]\n   * @return {string}\n   */\n\n\n  Node.prototype.toString = function (options) {\n    var customString = this._getCustomString(options);\n\n    if (typeof customString !== 'undefined') {\n      return customString;\n    }\n\n    return this._toString(options);\n  };\n  /**\n   * Get a JSON representation of the node\n   * Both .toJSON() and the static .fromJSON(json) should be implemented by all\n   * implementations of Node\n   * @returns {Object}\n   */\n\n\n  Node.prototype.toJSON = function () {\n    throw new Error('Cannot serialize object: toJSON not implemented by ' + this.type);\n  };\n  /**\n   * Get HTML representation. (wrapper function)\n   *\n   * This function can get an object of the following form:\n   * {\n   *    handler: //This can be a callback function of the form\n   *             // \"function callback(node, options)\" or\n   *             // a map that maps function names (used in FunctionNodes)\n   *             // to callbacks\n   *    parenthesis: \"keep\" //the parenthesis option (This is optional)\n   * }\n   *\n   * @param {Object} [options]\n   * @return {string}\n   */\n\n\n  Node.prototype.toHTML = function (options) {\n    var customString = this._getCustomString(options);\n\n    if (typeof customString !== 'undefined') {\n      return customString;\n    }\n\n    return this.toHTML(options);\n  };\n  /**\n   * Internal function to generate the string output.\n   * This has to be implemented by every Node\n   *\n   * @throws {Error}\n   */\n\n\n  Node.prototype._toString = function () {\n    // must be implemented by each of the Node implementations\n    throw new Error('_toString not implemented for ' + this.type);\n  };\n  /**\n   * Get LaTeX representation. (wrapper function)\n   *\n   * This function can get an object of the following form:\n   * {\n   *    handler: //This can be a callback function of the form\n   *             // \"function callback(node, options)\"or\n   *             // a map that maps function names (used in FunctionNodes)\n   *             // to callbacks\n   *    parenthesis: \"keep\" //the parenthesis option (This is optional)\n   * }\n   *\n   * @param {Object} [options]\n   * @return {string}\n   */\n\n\n  Node.prototype.toTex = function (options) {\n    var customString = this._getCustomString(options);\n\n    if (typeof customString !== 'undefined') {\n      return customString;\n    }\n\n    return this._toTex(options);\n  };\n  /**\n   * Internal function to generate the LaTeX output.\n   * This has to be implemented by every Node\n   *\n   * @param {Object} [options]\n   * @throws {Error}\n   */\n\n\n  Node.prototype._toTex = function (options) {\n    // must be implemented by each of the Node implementations\n    throw new Error('_toTex not implemented for ' + this.type);\n  };\n  /**\n   * Helper used by `to...` functions.\n   */\n\n\n  Node.prototype._getCustomString = function (options) {\n    if (options && typeof options === 'object') {\n      switch (typeof options.handler) {\n        case 'object':\n        case 'undefined':\n          return;\n\n        case 'function':\n          return options.handler(this, options);\n\n        default:\n          throw new TypeError('Object or function expected as callback');\n      }\n    }\n  };\n  /**\n   * Get identifier.\n   * @return {string}\n   */\n\n\n  Node.prototype.getIdentifier = function () {\n    return this.type;\n  };\n  /**\n   * Get the content of the current Node.\n   * @return {Node} node\n   **/\n\n\n  Node.prototype.getContent = function () {\n    return this;\n  };\n  /**\n   * Validate the symbol names of a scope.\n   * Throws an error when the scope contains an illegal symbol.\n   * @param {Object} scope\n   */\n\n\n  function _validateScope(scope) {\n    for (var symbol of [...keywords]) {\n      if (scope.has(symbol)) {\n        throw new Error('Scope contains an illegal symbol, \"' + symbol + '\" is a reserved keyword');\n      }\n    }\n  }\n\n  return Node;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { IndexError } from '../../../error/IndexError.js';\n/**\n * Transform zero-based indices to one-based indices in errors\n * @param {Error} err\n * @returns {Error | IndexError} Returns the transformed error\n */\n\nexport function errorTransform(err) {\n  if (err && err.isIndexError) {\n    return new IndexError(err.index + 1, err.min + 1, err.max !== undefined ? err.max + 1 : undefined);\n  }\n\n  return err;\n}", "import { errorTransform } from '../../transform/utils/errorTransform.js';\nimport { getSafeProperty } from '../../../utils/customs.js';\nexport function accessFactory(_ref) {\n  var {\n    subset\n  } = _ref;\n\n  /**\n   * Retrieve part of an object:\n   *\n   * - Retrieve a property from an object\n   * - Retrieve a part of a string\n   * - Retrieve a matrix subset\n   *\n   * @param {Object | Array | Matrix | string} object\n   * @param {Index} index\n   * @return {Object | Array | Matrix | string} Returns the subset\n   */\n  return function access(object, index) {\n    try {\n      if (Array.isArray(object)) {\n        return subset(object, index);\n      } else if (object && typeof object.subset === 'function') {\n        // Matrix\n        return object.subset(index);\n      } else if (typeof object === 'string') {\n        // TODO: move getStringSubset into a separate util file, use that\n        return subset(object, index);\n      } else if (typeof object === 'object') {\n        if (!index.isObjectProperty()) {\n          throw new TypeError('Cannot apply a numeric index as object property');\n        }\n\n        return getSafeProperty(object, index.getObjectProperty());\n      } else {\n        throw new TypeError('Cannot apply index: unsupported type of object');\n      }\n    } catch (err) {\n      throw errorTransform(err);\n    }\n  };\n}", "import { isAccessorNode, isArrayNode, isConstantNode, isFunctionNode, isIndexNode, isNode, isObjectNode, isParenthesisNode, isSymbolNode } from '../../utils/is.js';\nimport { getSafeProperty } from '../../utils/customs.js';\nimport { factory } from '../../utils/factory.js';\nimport { accessFactory } from './utils/access.js';\nvar name = 'AccessorNode';\nvar dependencies = ['subset', 'Node'];\nexport var createAccessorNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    subset,\n    Node\n  } = _ref;\n  var access = accessFactory({\n    subset\n  });\n  /**\n   * @constructor AccessorNode\n   * @extends {Node}\n   * Access an object property or get a matrix subset\n   *\n   * @param {Node} object                 The object from which to retrieve\n   *                                      a property or subset.\n   * @param {IndexNode} index             IndexNode containing ranges\n   */\n\n  function AccessorNode(object, index) {\n    if (!(this instanceof AccessorNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    if (!isNode(object)) {\n      throw new TypeError('Node expected for parameter \"object\"');\n    }\n\n    if (!isIndexNode(index)) {\n      throw new TypeError('IndexNode expected for parameter \"index\"');\n    }\n\n    this.object = object || null;\n    this.index = index; // readonly property name\n\n    Object.defineProperty(this, 'name', {\n      get: function () {\n        if (this.index) {\n          return this.index.isObjectProperty() ? this.index.getObjectProperty() : '';\n        } else {\n          return this.object.name || '';\n        }\n      }.bind(this),\n      set: function set() {\n        throw new Error('Cannot assign a new name, name is read-only');\n      }\n    });\n  }\n\n  AccessorNode.prototype = new Node();\n  AccessorNode.prototype.type = 'AccessorNode';\n  AccessorNode.prototype.isAccessorNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  AccessorNode.prototype._compile = function (math, argNames) {\n    var evalObject = this.object._compile(math, argNames);\n\n    var evalIndex = this.index._compile(math, argNames);\n\n    if (this.index.isObjectProperty()) {\n      var prop = this.index.getObjectProperty();\n      return function evalAccessorNode(scope, args, context) {\n        // get a property from an object evaluated using the scope.\n        return getSafeProperty(evalObject(scope, args, context), prop);\n      };\n    } else {\n      return function evalAccessorNode(scope, args, context) {\n        var object = evalObject(scope, args, context);\n        var index = evalIndex(scope, args, object); // we pass object here instead of context\n\n        return access(object, index);\n      };\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  AccessorNode.prototype.forEach = function (callback) {\n    callback(this.object, 'object', this);\n    callback(this.index, 'index', this);\n  };\n  /**\n   * Create a new AccessorNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {AccessorNode} Returns a transformed copy of the node\n   */\n\n\n  AccessorNode.prototype.map = function (callback) {\n    return new AccessorNode(this._ifNode(callback(this.object, 'object', this)), this._ifNode(callback(this.index, 'index', this)));\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {AccessorNode}\n   */\n\n\n  AccessorNode.prototype.clone = function () {\n    return new AccessorNode(this.object, this.index);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string}\n   */\n\n\n  AccessorNode.prototype._toString = function (options) {\n    var object = this.object.toString(options);\n\n    if (needParenthesis(this.object)) {\n      object = '(' + object + ')';\n    }\n\n    return object + this.index.toString(options);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string}\n   */\n\n\n  AccessorNode.prototype.toHTML = function (options) {\n    var object = this.object.toHTML(options);\n\n    if (needParenthesis(this.object)) {\n      object = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + object + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    return object + this.index.toHTML(options);\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string}\n   */\n\n\n  AccessorNode.prototype._toTex = function (options) {\n    var object = this.object.toTex(options);\n\n    if (needParenthesis(this.object)) {\n      object = '\\\\left(\\' + object + \\'\\\\right)';\n    }\n\n    return object + this.index.toTex(options);\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  AccessorNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'AccessorNode',\n      object: this.object,\n      index: this.index\n    };\n  };\n  /**\n   * Instantiate an AccessorNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"AccessorNode\", object: ..., index: ...}`,\n   *                       where mathjs is optional\n   * @returns {AccessorNode}\n   */\n\n\n  AccessorNode.fromJSON = function (json) {\n    return new AccessorNode(json.object, json.index);\n  };\n  /**\n   * Are parenthesis needed?\n   * @private\n   */\n\n\n  function needParenthesis(node) {\n    // TODO: maybe make a method on the nodes which tells whether they need parenthesis?\n    return !(isAccessorNode(node) || isArrayNode(node) || isConstantNode(node) || isFunctionNode(node) || isObjectNode(node) || isParenthesisNode(node) || isSymbolNode(node));\n  }\n\n  return AccessorNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isArrayNode, isNode } from '../../utils/is.js';\nimport { map } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'ArrayNode';\nvar dependencies = ['Node'];\nexport var createArrayNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * @constructor ArrayNode\n   * @extends {Node}\n   * Holds an 1-dimensional array with items\n   * @param {Node[]} [items]   1 dimensional array with items\n   */\n  function ArrayNode(items) {\n    if (!(this instanceof ArrayNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    this.items = items || []; // validate input\n\n    if (!Array.isArray(this.items) || !this.items.every(isNode)) {\n      throw new TypeError('Array containing Nodes expected');\n    }\n  }\n\n  ArrayNode.prototype = new Node();\n  ArrayNode.prototype.type = 'ArrayNode';\n  ArrayNode.prototype.isArrayNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  ArrayNode.prototype._compile = function (math, argNames) {\n    var evalItems = map(this.items, function (item) {\n      return item._compile(math, argNames);\n    });\n    var asMatrix = math.config.matrix !== 'Array';\n\n    if (asMatrix) {\n      var matrix = math.matrix;\n      return function evalArrayNode(scope, args, context) {\n        return matrix(map(evalItems, function (evalItem) {\n          return evalItem(scope, args, context);\n        }));\n      };\n    } else {\n      return function evalArrayNode(scope, args, context) {\n        return map(evalItems, function (evalItem) {\n          return evalItem(scope, args, context);\n        });\n      };\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  ArrayNode.prototype.forEach = function (callback) {\n    for (var i = 0; i < this.items.length; i++) {\n      var node = this.items[i];\n      callback(node, 'items[' + i + ']', this);\n    }\n  };\n  /**\n   * Create a new ArrayNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {ArrayNode} Returns a transformed copy of the node\n   */\n\n\n  ArrayNode.prototype.map = function (callback) {\n    var items = [];\n\n    for (var i = 0; i < this.items.length; i++) {\n      items[i] = this._ifNode(callback(this.items[i], 'items[' + i + ']', this));\n    }\n\n    return new ArrayNode(items);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {ArrayNode}\n   */\n\n\n  ArrayNode.prototype.clone = function () {\n    return new ArrayNode(this.items.slice(0));\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ArrayNode.prototype._toString = function (options) {\n    var items = this.items.map(function (node) {\n      return node.toString(options);\n    });\n    return '[' + items.join(', ') + ']';\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  ArrayNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'ArrayNode',\n      items: this.items\n    };\n  };\n  /**\n   * Instantiate an ArrayNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"ArrayNode\", items: [...]}`,\n   *                       where mathjs is optional\n   * @returns {ArrayNode}\n   */\n\n\n  ArrayNode.fromJSON = function (json) {\n    return new ArrayNode(json.items);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ArrayNode.prototype.toHTML = function (options) {\n    var items = this.items.map(function (node) {\n      return node.toHTML(options);\n    });\n    return '<span class=\"math-parenthesis math-square-parenthesis\">[</span>' + items.join('<span class=\"math-separator\">,</span>') + '<span class=\"math-parenthesis math-square-parenthesis\">]</span>';\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ArrayNode.prototype._toTex = function (options) {\n    function itemsToTex(items, nested) {\n      var mixedItems = items.some(isArrayNode) && !items.every(isArrayNode);\n      var itemsFormRow = nested || mixedItems;\n      var itemSep = itemsFormRow ? '&' : '\\\\\\\\';\n      var itemsTex = items.map(function (node) {\n        if (node.items) {\n          return itemsToTex(node.items, !nested);\n        } else {\n          return node.toTex(options);\n        }\n      }).join(itemSep);\n      return mixedItems || !itemsFormRow || itemsFormRow && !nested ? '\\\\begin{bmatrix}' + itemsTex + '\\\\end{bmatrix}' : itemsTex;\n    }\n\n    return itemsToTex(this.items, false);\n  };\n\n  return ArrayNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { errorTransform } from '../../transform/utils/errorTransform.js';\nimport { setSafeProperty } from '../../../utils/customs.js';\nexport function assignFactory(_ref) {\n  var {\n    subset,\n    matrix\n  } = _ref;\n\n  /**\n   * Replace part of an object:\n   *\n   * - Assign a property to an object\n   * - Replace a part of a string\n   * - Replace a matrix subset\n   *\n   * @param {Object | Array | Matrix | string} object\n   * @param {Index} index\n   * @param {*} value\n   * @return {Object | Array | Matrix | string} Returns the original object\n   *                                            except in case of a string\n   */\n  // TODO: change assign to return the value instead of the object\n  return function assign(object, index, value) {\n    try {\n      if (Array.isArray(object)) {\n        // we use matrix.subset here instead of the function subset because we must not clone the contents\n        return matrix(object).subset(index, value).valueOf();\n      } else if (object && typeof object.subset === 'function') {\n        // Matrix\n        return object.subset(index, value);\n      } else if (typeof object === 'string') {\n        // TODO: move setStringSubset into a separate util file, use that\n        return subset(object, index, value);\n      } else if (typeof object === 'object') {\n        if (!index.isObjectProperty()) {\n          throw TypeError('Cannot apply a numeric index as object property');\n        }\n\n        setSafeProperty(object, index.getObjectProperty(), value);\n        return object;\n      } else {\n        throw new TypeError('Cannot apply index: unsupported type of object');\n      }\n    } catch (err) {\n      throw errorTransform(err);\n    }\n  };\n}", "// list of identifiers of nodes in order of their precedence\n// also contains information about left/right associativity\n// and which other operator the operator is associative with\n// Example:\n// addition is associative with addition and subtraction, because:\n// (a+b)+c=a+(b+c)\n// (a+b)-c=a+(b-c)\n//\n// postfix operators are left associative, prefix operators\n// are right associative\n//\n// It's also possible to set the following properties:\n// latexParens: if set to false, this node doesn't need to be enclosed\n//              in parentheses when using LaTeX\n// latexLeftParens: if set to false, this !OperatorNode's!\n//                  left argument doesn't need to be enclosed\n//                  in parentheses\n// latexRightParens: the same for the right argument\nimport { hasOwnProperty } from '../utils/object.js';\nexport var properties = [{\n  // assignment\n  AssignmentNode: {},\n  FunctionAssignmentNode: {}\n}, {\n  // conditional expression\n  ConditionalNode: {\n    latexLeftParens: false,\n    latexRightParens: false,\n    latexParens: false // conditionals don't need parentheses in LaTeX because\n    // they are 2 dimensional\n\n  }\n}, {\n  // logical or\n  'OperatorNode:or': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // logical xor\n  'OperatorNode:xor': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // logical and\n  'OperatorNode:and': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // bitwise or\n  'OperatorNode:bitOr': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // bitwise xor\n  'OperatorNode:bitXor': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // bitwise and\n  'OperatorNode:bitAnd': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // relational operators\n  'OperatorNode:equal': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:unequal': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:smaller': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:larger': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:smallerEq': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:largerEq': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  RelationalNode: {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // bitshift operators\n  'OperatorNode:leftShift': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:rightArithShift': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:rightLogShift': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // unit conversion\n  'OperatorNode:to': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // range\n  RangeNode: {}\n}, {\n  // addition, subtraction\n  'OperatorNode:add': {\n    associativity: 'left',\n    associativeWith: ['OperatorNode:add', 'OperatorNode:subtract']\n  },\n  'OperatorNode:subtract': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // multiply, divide, modulus\n  'OperatorNode:multiply': {\n    associativity: 'left',\n    associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'Operator:dotMultiply', 'Operator:dotDivide']\n  },\n  'OperatorNode:divide': {\n    associativity: 'left',\n    associativeWith: [],\n    latexLeftParens: false,\n    latexRightParens: false,\n    latexParens: false // fractions don't require parentheses because\n    // they're 2 dimensional, so parens aren't needed\n    // in LaTeX\n\n  },\n  'OperatorNode:dotMultiply': {\n    associativity: 'left',\n    associativeWith: ['OperatorNode:multiply', 'OperatorNode:divide', 'OperatorNode:dotMultiply', 'OperatorNode:doDivide']\n  },\n  'OperatorNode:dotDivide': {\n    associativity: 'left',\n    associativeWith: []\n  },\n  'OperatorNode:mod': {\n    associativity: 'left',\n    associativeWith: []\n  }\n}, {\n  // unary prefix operators\n  'OperatorNode:unaryPlus': {\n    associativity: 'right'\n  },\n  'OperatorNode:unaryMinus': {\n    associativity: 'right'\n  },\n  'OperatorNode:bitNot': {\n    associativity: 'right'\n  },\n  'OperatorNode:not': {\n    associativity: 'right'\n  }\n}, {\n  // exponentiation\n  'OperatorNode:pow': {\n    associativity: 'right',\n    associativeWith: [],\n    latexRightParens: false // the exponent doesn't need parentheses in\n    // LaTeX because it's 2 dimensional\n    // (it's on top)\n\n  },\n  'OperatorNode:dotPow': {\n    associativity: 'right',\n    associativeWith: []\n  }\n}, {\n  // factorial\n  'OperatorNode:factorial': {\n    associativity: 'left'\n  }\n}, {\n  // matrix transpose\n  'OperatorNode:transpose': {\n    associativity: 'left'\n  }\n}];\n/**\n * Get the precedence of a Node.\n * Higher number for higher precedence, starting with 0.\n * Returns null if the precedence is undefined.\n *\n * @param {Node} _node\n * @param {string} parenthesis\n * @return {number | null}\n */\n\nexport function getPrecedence(_node, parenthesis) {\n  var node = _node;\n\n  if (parenthesis !== 'keep') {\n    // ParenthesisNodes are only ignored when not in 'keep' mode\n    node = _node.getContent();\n  }\n\n  var identifier = node.getIdentifier();\n\n  for (var i = 0; i < properties.length; i++) {\n    if (identifier in properties[i]) {\n      return i;\n    }\n  }\n\n  return null;\n}\n/**\n * Get the associativity of an operator (left or right).\n * Returns a string containing 'left' or 'right' or null if\n * the associativity is not defined.\n *\n * @param {Node} _node\n * @param {string} parenthesis\n * @return {string|null}\n * @throws {Error}\n */\n\nexport function getAssociativity(_node, parenthesis) {\n  var node = _node;\n\n  if (parenthesis !== 'keep') {\n    // ParenthesisNodes are only ignored when not in 'keep' mode\n    node = _node.getContent();\n  }\n\n  var identifier = node.getIdentifier();\n  var index = getPrecedence(node, parenthesis);\n\n  if (index === null) {\n    // node isn't in the list\n    return null;\n  }\n\n  var property = properties[index][identifier];\n\n  if (hasOwnProperty(property, 'associativity')) {\n    if (property.associativity === 'left') {\n      return 'left';\n    }\n\n    if (property.associativity === 'right') {\n      return 'right';\n    } // associativity is invalid\n\n\n    throw Error('\\'' + identifier + '\\' has the invalid associativity \\'' + property.associativity + '\\'.');\n  } // associativity is undefined\n\n\n  return null;\n}\n/**\n * Check if an operator is associative with another operator.\n * Returns either true or false or null if not defined.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @param {string} parenthesis\n * @return {boolean | null}\n */\n\nexport function isAssociativeWith(nodeA, nodeB, parenthesis) {\n  // ParenthesisNodes are only ignored when not in 'keep' mode\n  var a = parenthesis !== 'keep' ? nodeA.getContent() : nodeA;\n  var b = parenthesis !== 'keep' ? nodeA.getContent() : nodeB;\n  var identifierA = a.getIdentifier();\n  var identifierB = b.getIdentifier();\n  var index = getPrecedence(a, parenthesis);\n\n  if (index === null) {\n    // node isn't in the list\n    return null;\n  }\n\n  var property = properties[index][identifierA];\n\n  if (hasOwnProperty(property, 'associativeWith') && property.associativeWith instanceof Array) {\n    for (var i = 0; i < property.associativeWith.length; i++) {\n      if (property.associativeWith[i] === identifierB) {\n        return true;\n      }\n    }\n\n    return false;\n  } // associativeWith is not defined\n\n\n  return null;\n}", "import { isAccessorNode, isIndexNode, isNode, isSymbolNode } from '../../utils/is.js';\nimport { getSafeProperty, setSafeProperty } from '../../utils/customs.js';\nimport { factory } from '../../utils/factory.js';\nimport { accessFactory } from './utils/access.js';\nimport { assignFactory } from './utils/assign.js';\nimport { getPrecedence } from '../operators.js';\nvar name = 'AssignmentNode';\nvar dependencies = ['subset', '?matrix', // FIXME: should not be needed at all, should be handled by subset\n'Node'];\nexport var createAssignmentNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    subset,\n    matrix,\n    Node\n  } = _ref;\n  var access = accessFactory({\n    subset\n  });\n  var assign = assignFactory({\n    subset,\n    matrix\n  });\n  /**\n   * @constructor AssignmentNode\n   * @extends {Node}\n   *\n   * Define a symbol, like `a=3.2`, update a property like `a.b=3.2`, or\n   * replace a subset of a matrix like `A[2,2]=42`.\n   *\n   * Syntax:\n   *\n   *     new AssignmentNode(symbol, value)\n   *     new AssignmentNode(object, index, value)\n   *\n   * Usage:\n   *\n   *    new AssignmentNode(new SymbolNode('a'), new ConstantNode(2))                       // a=2\n   *    new AssignmentNode(new SymbolNode('a'), new IndexNode('b'), new ConstantNode(2))   // a.b=2\n   *    new AssignmentNode(new SymbolNode('a'), new IndexNode(1, 2), new ConstantNode(3))  // a[1,2]=3\n   *\n   * @param {SymbolNode | AccessorNode} object  Object on which to assign a value\n   * @param {IndexNode} [index=null]            Index, property name or matrix\n   *                                            index. Optional. If not provided\n   *                                            and `object` is a SymbolNode,\n   *                                            the property is assigned to the\n   *                                            global scope.\n   * @param {Node} value                        The value to be assigned\n   */\n\n  function AssignmentNode(object, index, value) {\n    if (!(this instanceof AssignmentNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    this.object = object;\n    this.index = value ? index : null;\n    this.value = value || index; // validate input\n\n    if (!isSymbolNode(object) && !isAccessorNode(object)) {\n      throw new TypeError('SymbolNode or AccessorNode expected as \"object\"');\n    }\n\n    if (isSymbolNode(object) && object.name === 'end') {\n      throw new Error('Cannot assign to symbol \"end\"');\n    }\n\n    if (this.index && !isIndexNode(this.index)) {\n      // index is optional\n      throw new TypeError('IndexNode expected as \"index\"');\n    }\n\n    if (!isNode(this.value)) {\n      throw new TypeError('Node expected as \"value\"');\n    } // readonly property name\n\n\n    Object.defineProperty(this, 'name', {\n      get: function () {\n        if (this.index) {\n          return this.index.isObjectProperty() ? this.index.getObjectProperty() : '';\n        } else {\n          return this.object.name || '';\n        }\n      }.bind(this),\n      set: function set() {\n        throw new Error('Cannot assign a new name, name is read-only');\n      }\n    });\n  }\n\n  AssignmentNode.prototype = new Node();\n  AssignmentNode.prototype.type = 'AssignmentNode';\n  AssignmentNode.prototype.isAssignmentNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  AssignmentNode.prototype._compile = function (math, argNames) {\n    var evalObject = this.object._compile(math, argNames);\n\n    var evalIndex = this.index ? this.index._compile(math, argNames) : null;\n\n    var evalValue = this.value._compile(math, argNames);\n\n    var name = this.object.name;\n\n    if (!this.index) {\n      // apply a variable to the scope, for example `a=2`\n      if (!isSymbolNode(this.object)) {\n        throw new TypeError('SymbolNode expected as object');\n      }\n\n      return function evalAssignmentNode(scope, args, context) {\n        var value = evalValue(scope, args, context);\n        scope.set(name, value);\n        return value;\n      };\n    } else if (this.index.isObjectProperty()) {\n      // apply an object property for example `a.b=2`\n      var prop = this.index.getObjectProperty();\n      return function evalAssignmentNode(scope, args, context) {\n        var object = evalObject(scope, args, context);\n        var value = evalValue(scope, args, context);\n        setSafeProperty(object, prop, value);\n        return value;\n      };\n    } else if (isSymbolNode(this.object)) {\n      // update a matrix subset, for example `a[2]=3`\n      return function evalAssignmentNode(scope, args, context) {\n        var childObject = evalObject(scope, args, context);\n        var value = evalValue(scope, args, context);\n        var index = evalIndex(scope, args, childObject); // Important:  we pass childObject instead of context\n\n        scope.set(name, assign(childObject, index, value));\n        return value;\n      };\n    } else {\n      // isAccessorNode(node.object) === true\n      // update a matrix subset, for example `a.b[2]=3`\n      // we will not use the compile function of the AccessorNode, but compile it\n      // ourselves here as we need the parent object of the AccessorNode:\n      // wee need to apply the updated object to parent object\n      var evalParentObject = this.object.object._compile(math, argNames);\n\n      if (this.object.index.isObjectProperty()) {\n        var parentProp = this.object.index.getObjectProperty();\n        return function evalAssignmentNode(scope, args, context) {\n          var parent = evalParentObject(scope, args, context);\n          var childObject = getSafeProperty(parent, parentProp);\n          var index = evalIndex(scope, args, childObject); // Important: we pass childObject instead of context\n\n          var value = evalValue(scope, args, context);\n          setSafeProperty(parent, parentProp, assign(childObject, index, value));\n          return value;\n        };\n      } else {\n        // if some parameters use the 'end' parameter, we need to calculate the size\n        var evalParentIndex = this.object.index._compile(math, argNames);\n\n        return function evalAssignmentNode(scope, args, context) {\n          var parent = evalParentObject(scope, args, context);\n          var parentIndex = evalParentIndex(scope, args, parent); // Important: we pass parent instead of context\n\n          var childObject = access(parent, parentIndex);\n          var index = evalIndex(scope, args, childObject); // Important:  we pass childObject instead of context\n\n          var value = evalValue(scope, args, context);\n          assign(parent, parentIndex, assign(childObject, index, value));\n          return value;\n        };\n      }\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  AssignmentNode.prototype.forEach = function (callback) {\n    callback(this.object, 'object', this);\n\n    if (this.index) {\n      callback(this.index, 'index', this);\n    }\n\n    callback(this.value, 'value', this);\n  };\n  /**\n   * Create a new AssignmentNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {AssignmentNode} Returns a transformed copy of the node\n   */\n\n\n  AssignmentNode.prototype.map = function (callback) {\n    var object = this._ifNode(callback(this.object, 'object', this));\n\n    var index = this.index ? this._ifNode(callback(this.index, 'index', this)) : null;\n\n    var value = this._ifNode(callback(this.value, 'value', this));\n\n    return new AssignmentNode(object, index, value);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {AssignmentNode}\n   */\n\n\n  AssignmentNode.prototype.clone = function () {\n    return new AssignmentNode(this.object, this.index, this.value);\n  };\n  /*\n   * Is parenthesis needed?\n   * @param {node} node\n   * @param {string} [parenthesis='keep']\n   * @private\n   */\n\n\n  function needParenthesis(node, parenthesis) {\n    if (!parenthesis) {\n      parenthesis = 'keep';\n    }\n\n    var precedence = getPrecedence(node, parenthesis);\n    var exprPrecedence = getPrecedence(node.value, parenthesis);\n    return parenthesis === 'all' || exprPrecedence !== null && exprPrecedence <= precedence;\n  }\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string}\n   */\n\n\n  AssignmentNode.prototype._toString = function (options) {\n    var object = this.object.toString(options);\n    var index = this.index ? this.index.toString(options) : '';\n    var value = this.value.toString(options);\n\n    if (needParenthesis(this, options && options.parenthesis)) {\n      value = '(' + value + ')';\n    }\n\n    return object + index + ' = ' + value;\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  AssignmentNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'AssignmentNode',\n      object: this.object,\n      index: this.index,\n      value: this.value\n    };\n  };\n  /**\n   * Instantiate an AssignmentNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"AssignmentNode\", object: ..., index: ..., value: ...}`,\n   *                       where mathjs is optional\n   * @returns {AssignmentNode}\n   */\n\n\n  AssignmentNode.fromJSON = function (json) {\n    return new AssignmentNode(json.object, json.index, json.value);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string}\n   */\n\n\n  AssignmentNode.prototype.toHTML = function (options) {\n    var object = this.object.toHTML(options);\n    var index = this.index ? this.index.toHTML(options) : '';\n    var value = this.value.toHTML(options);\n\n    if (needParenthesis(this, options && options.parenthesis)) {\n      value = '<span class=\"math-paranthesis math-round-parenthesis\">(</span>' + value + '<span class=\"math-paranthesis math-round-parenthesis\">)</span>';\n    }\n\n    return object + index + '<span class=\"math-operator math-assignment-operator math-variable-assignment-operator math-binary-operator\">=</span>' + value;\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string}\n   */\n\n\n  AssignmentNode.prototype._toTex = function (options) {\n    var object = this.object.toTex(options);\n    var index = this.index ? this.index.toTex(options) : '';\n    var value = this.value.toTex(options);\n\n    if (needParenthesis(this, options && options.parenthesis)) {\n      value = \"\\\\left(\".concat(value, \"\\\\right)\");\n    }\n\n    return object + index + ':=' + value;\n  };\n\n  return AssignmentNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isNode } from '../../utils/is.js';\nimport { forEach, map } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'BlockNode';\nvar dependencies = ['ResultSet', 'Node'];\nexport var createBlockNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    ResultSet,\n    Node\n  } = _ref;\n\n  /**\n   * @constructor BlockNode\n   * @extends {Node}\n   * Holds a set with blocks\n   * @param {Array.<{node: Node} | {node: Node, visible: boolean}>} blocks\n   *            An array with blocks, where a block is constructed as an Object\n   *            with properties block, which is a Node, and visible, which is\n   *            a boolean. The property visible is optional and is true by default\n   */\n  function BlockNode(blocks) {\n    if (!(this instanceof BlockNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    } // validate input, copy blocks\n\n\n    if (!Array.isArray(blocks)) throw new Error('Array expected');\n    this.blocks = blocks.map(function (block) {\n      var node = block && block.node;\n      var visible = block && block.visible !== undefined ? block.visible : true;\n      if (!isNode(node)) throw new TypeError('Property \"node\" must be a Node');\n      if (typeof visible !== 'boolean') throw new TypeError('Property \"visible\" must be a boolean');\n      return {\n        node,\n        visible\n      };\n    });\n  }\n\n  BlockNode.prototype = new Node();\n  BlockNode.prototype.type = 'BlockNode';\n  BlockNode.prototype.isBlockNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  BlockNode.prototype._compile = function (math, argNames) {\n    var evalBlocks = map(this.blocks, function (block) {\n      return {\n        evaluate: block.node._compile(math, argNames),\n        visible: block.visible\n      };\n    });\n    return function evalBlockNodes(scope, args, context) {\n      var results = [];\n      forEach(evalBlocks, function evalBlockNode(block) {\n        var result = block.evaluate(scope, args, context);\n\n        if (block.visible) {\n          results.push(result);\n        }\n      });\n      return new ResultSet(results);\n    };\n  };\n  /**\n   * Execute a callback for each of the child blocks of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  BlockNode.prototype.forEach = function (callback) {\n    for (var i = 0; i < this.blocks.length; i++) {\n      callback(this.blocks[i].node, 'blocks[' + i + '].node', this);\n    }\n  };\n  /**\n   * Create a new BlockNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {BlockNode} Returns a transformed copy of the node\n   */\n\n\n  BlockNode.prototype.map = function (callback) {\n    var blocks = [];\n\n    for (var i = 0; i < this.blocks.length; i++) {\n      var block = this.blocks[i];\n\n      var node = this._ifNode(callback(block.node, 'blocks[' + i + '].node', this));\n\n      blocks[i] = {\n        node,\n        visible: block.visible\n      };\n    }\n\n    return new BlockNode(blocks);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {BlockNode}\n   */\n\n\n  BlockNode.prototype.clone = function () {\n    var blocks = this.blocks.map(function (block) {\n      return {\n        node: block.node,\n        visible: block.visible\n      };\n    });\n    return new BlockNode(blocks);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  BlockNode.prototype._toString = function (options) {\n    return this.blocks.map(function (param) {\n      return param.node.toString(options) + (param.visible ? '' : ';');\n    }).join('\\n');\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  BlockNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'BlockNode',\n      blocks: this.blocks\n    };\n  };\n  /**\n   * Instantiate an BlockNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"BlockNode\", blocks: [{node: ..., visible: false}, ...]}`,\n   *                       where mathjs is optional\n   * @returns {BlockNode}\n   */\n\n\n  BlockNode.fromJSON = function (json) {\n    return new BlockNode(json.blocks);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  BlockNode.prototype.toHTML = function (options) {\n    return this.blocks.map(function (param) {\n      return param.node.toHTML(options) + (param.visible ? '' : '<span class=\"math-separator\">;</span>');\n    }).join('<span class=\"math-separator\"><br /></span>');\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  BlockNode.prototype._toTex = function (options) {\n    return this.blocks.map(function (param) {\n      return param.node.toTex(options) + (param.visible ? '' : ';');\n    }).join('\\\\;\\\\;\\n');\n  };\n\n  return BlockNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isBigNumber, isComplex, isNode, isUnit, typeOf } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nimport { getPrecedence } from '../operators.js';\nvar name = 'ConditionalNode';\nvar dependencies = ['Node'];\nexport var createConditionalNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * A lazy evaluating conditional operator: 'condition ? trueExpr : falseExpr'\n   *\n   * @param {Node} condition   Condition, must result in a boolean\n   * @param {Node} trueExpr    Expression evaluated when condition is true\n   * @param {Node} falseExpr   Expression evaluated when condition is true\n   *\n   * @constructor ConditionalNode\n   * @extends {Node}\n   */\n  function ConditionalNode(condition, trueExpr, falseExpr) {\n    if (!(this instanceof ConditionalNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    if (!isNode(condition)) throw new TypeError('Parameter condition must be a Node');\n    if (!isNode(trueExpr)) throw new TypeError('Parameter trueExpr must be a Node');\n    if (!isNode(falseExpr)) throw new TypeError('Parameter falseExpr must be a Node');\n    this.condition = condition;\n    this.trueExpr = trueExpr;\n    this.falseExpr = falseExpr;\n  }\n\n  ConditionalNode.prototype = new Node();\n  ConditionalNode.prototype.type = 'ConditionalNode';\n  ConditionalNode.prototype.isConditionalNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  ConditionalNode.prototype._compile = function (math, argNames) {\n    var evalCondition = this.condition._compile(math, argNames);\n\n    var evalTrueExpr = this.trueExpr._compile(math, argNames);\n\n    var evalFalseExpr = this.falseExpr._compile(math, argNames);\n\n    return function evalConditionalNode(scope, args, context) {\n      return testCondition(evalCondition(scope, args, context)) ? evalTrueExpr(scope, args, context) : evalFalseExpr(scope, args, context);\n    };\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  ConditionalNode.prototype.forEach = function (callback) {\n    callback(this.condition, 'condition', this);\n    callback(this.trueExpr, 'trueExpr', this);\n    callback(this.falseExpr, 'falseExpr', this);\n  };\n  /**\n   * Create a new ConditionalNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {ConditionalNode} Returns a transformed copy of the node\n   */\n\n\n  ConditionalNode.prototype.map = function (callback) {\n    return new ConditionalNode(this._ifNode(callback(this.condition, 'condition', this)), this._ifNode(callback(this.trueExpr, 'trueExpr', this)), this._ifNode(callback(this.falseExpr, 'falseExpr', this)));\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {ConditionalNode}\n   */\n\n\n  ConditionalNode.prototype.clone = function () {\n    return new ConditionalNode(this.condition, this.trueExpr, this.falseExpr);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ConditionalNode.prototype._toString = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var precedence = getPrecedence(this, parenthesis); // Enclose Arguments in parentheses if they are an OperatorNode\n    // or have lower or equal precedence\n    // NOTE: enclosing all OperatorNodes in parentheses is a decision\n    // purely based on aesthetics and readability\n\n    var condition = this.condition.toString(options);\n    var conditionPrecedence = getPrecedence(this.condition, parenthesis);\n\n    if (parenthesis === 'all' || this.condition.type === 'OperatorNode' || conditionPrecedence !== null && conditionPrecedence <= precedence) {\n      condition = '(' + condition + ')';\n    }\n\n    var trueExpr = this.trueExpr.toString(options);\n    var truePrecedence = getPrecedence(this.trueExpr, parenthesis);\n\n    if (parenthesis === 'all' || this.trueExpr.type === 'OperatorNode' || truePrecedence !== null && truePrecedence <= precedence) {\n      trueExpr = '(' + trueExpr + ')';\n    }\n\n    var falseExpr = this.falseExpr.toString(options);\n    var falsePrecedence = getPrecedence(this.falseExpr, parenthesis);\n\n    if (parenthesis === 'all' || this.falseExpr.type === 'OperatorNode' || falsePrecedence !== null && falsePrecedence <= precedence) {\n      falseExpr = '(' + falseExpr + ')';\n    }\n\n    return condition + ' ? ' + trueExpr + ' : ' + falseExpr;\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  ConditionalNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'ConditionalNode',\n      condition: this.condition,\n      trueExpr: this.trueExpr,\n      falseExpr: this.falseExpr\n    };\n  };\n  /**\n   * Instantiate an ConditionalNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"ConditionalNode\", \"condition\": ..., \"trueExpr\": ..., \"falseExpr\": ...}`,\n   *                       where mathjs is optional\n   * @returns {ConditionalNode}\n   */\n\n\n  ConditionalNode.fromJSON = function (json) {\n    return new ConditionalNode(json.condition, json.trueExpr, json.falseExpr);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ConditionalNode.prototype.toHTML = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var precedence = getPrecedence(this, parenthesis); // Enclose Arguments in parentheses if they are an OperatorNode\n    // or have lower or equal precedence\n    // NOTE: enclosing all OperatorNodes in parentheses is a decision\n    // purely based on aesthetics and readability\n\n    var condition = this.condition.toHTML(options);\n    var conditionPrecedence = getPrecedence(this.condition, parenthesis);\n\n    if (parenthesis === 'all' || this.condition.type === 'OperatorNode' || conditionPrecedence !== null && conditionPrecedence <= precedence) {\n      condition = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + condition + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    var trueExpr = this.trueExpr.toHTML(options);\n    var truePrecedence = getPrecedence(this.trueExpr, parenthesis);\n\n    if (parenthesis === 'all' || this.trueExpr.type === 'OperatorNode' || truePrecedence !== null && truePrecedence <= precedence) {\n      trueExpr = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + trueExpr + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    var falseExpr = this.falseExpr.toHTML(options);\n    var falsePrecedence = getPrecedence(this.falseExpr, parenthesis);\n\n    if (parenthesis === 'all' || this.falseExpr.type === 'OperatorNode' || falsePrecedence !== null && falsePrecedence <= precedence) {\n      falseExpr = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + falseExpr + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    return condition + '<span class=\"math-operator math-conditional-operator\">?</span>' + trueExpr + '<span class=\"math-operator math-conditional-operator\">:</span>' + falseExpr;\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ConditionalNode.prototype._toTex = function (options) {\n    return '\\\\begin{cases} {' + this.trueExpr.toTex(options) + '}, &\\\\quad{\\\\text{if }\\\\;' + this.condition.toTex(options) + '}\\\\\\\\{' + this.falseExpr.toTex(options) + '}, &\\\\quad{\\\\text{otherwise}}\\\\end{cases}';\n  };\n  /**\n   * Test whether a condition is met\n   * @param {*} condition\n   * @returns {boolean} true if condition is true or non-zero, else false\n   */\n\n\n  function testCondition(condition) {\n    if (typeof condition === 'number' || typeof condition === 'boolean' || typeof condition === 'string') {\n      return !!condition;\n    }\n\n    if (condition) {\n      if (isBigNumber(condition)) {\n        return !condition.isZero();\n      }\n\n      if (isComplex(condition)) {\n        return !!(condition.re || condition.im);\n      }\n\n      if (isUnit(condition)) {\n        return !!condition.value;\n      }\n    }\n\n    if (condition === null || condition === undefined) {\n      return false;\n    }\n\n    throw new TypeError('Unsupported type of condition \"' + typeOf(condition) + '\"');\n  }\n\n  return ConditionalNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "\"use strict\";\n\n// Map the characters to escape to their escaped values. The list is derived\n// from http://www.cespedes.org/blog/85/how-to-escape-latex-special-characters\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar defaultEscapes = {\n  \"{\": \"\\\\{\",\n  \"}\": \"\\\\}\",\n  \"\\\\\": \"\\\\textbackslash{}\",\n  \"#\": \"\\\\#\",\n  $: \"\\\\$\",\n  \"%\": \"\\\\%\",\n  \"&\": \"\\\\&\",\n  \"^\": \"\\\\textasciicircum{}\",\n  _: \"\\\\_\",\n  \"~\": \"\\\\textasciitilde{}\"\n};\nvar formatEscapes = {\n  \"\\u2013\": \"\\\\--\",\n  \"\\u2014\": \"\\\\---\",\n  \" \": \"~\",\n  \"\\t\": \"\\\\qquad{}\",\n  \"\\r\\n\": \"\\\\newline{}\",\n  \"\\n\": \"\\\\newline{}\"\n};\n\nvar defaultEscapeMapFn = function defaultEscapeMapFn(defaultEscapes, formatEscapes) {\n  return _extends({}, defaultEscapes, formatEscapes);\n};\n\n/**\n * Escape a string to be used in LaTeX documents.\n * @param {string} str the string to be escaped.\n * @param {boolean} params.preserveFormatting whether formatting escapes should\n *  be performed (default: false).\n * @param {function} params.escapeMapFn the function to modify the escape maps.\n * @return {string} the escaped string, ready to be used in LaTeX.\n */\nmodule.exports = function (str) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$preserveFormatti = _ref.preserveFormatting,\n      preserveFormatting = _ref$preserveFormatti === undefined ? false : _ref$preserveFormatti,\n      _ref$escapeMapFn = _ref.escapeMapFn,\n      escapeMapFn = _ref$escapeMapFn === undefined ? defaultEscapeMapFn : _ref$escapeMapFn;\n\n  var runningStr = String(str);\n  var result = \"\";\n\n  var escapes = escapeMapFn(_extends({}, defaultEscapes), preserveFormatting ? _extends({}, formatEscapes) : {});\n  var escapeKeys = Object.keys(escapes); // as it is reused later on\n\n  // Algorithm: Go through the string character by character, if it matches\n  // with one of the special characters then we'll replace it with the escaped\n  // version.\n\n  var _loop = function _loop() {\n    var specialCharFound = false;\n    escapeKeys.forEach(function (key, index) {\n      if (specialCharFound) {\n        return;\n      }\n      if (runningStr.length >= key.length && runningStr.slice(0, key.length) === key) {\n        result += escapes[escapeKeys[index]];\n        runningStr = runningStr.slice(key.length, runningStr.length);\n        specialCharFound = true;\n      }\n    });\n    if (!specialCharFound) {\n      result += runningStr.slice(0, 1);\n      runningStr = runningStr.slice(1, runningStr.length);\n    }\n  };\n\n  while (runningStr) {\n    _loop();\n  }\n  return result;\n};", "/* eslint no-template-curly-in-string: \"off\" */\nimport escapeLatexLib from 'escape-latex';\nimport { hasOwnProperty } from './object.js';\nexport var latexSymbols = {\n  // GREEK LETTERS\n  Alpha: 'A',\n  alpha: '\\\\alpha',\n  Beta: 'B',\n  beta: '\\\\beta',\n  Gamma: '\\\\Gamma',\n  gamma: '\\\\gamma',\n  Delta: '\\\\Delta',\n  delta: '\\\\delta',\n  Epsilon: 'E',\n  epsilon: '\\\\epsilon',\n  varepsilon: '\\\\varepsilon',\n  Zeta: 'Z',\n  zeta: '\\\\zeta',\n  Eta: 'H',\n  eta: '\\\\eta',\n  Theta: '\\\\Theta',\n  theta: '\\\\theta',\n  vartheta: '\\\\vartheta',\n  Iota: 'I',\n  iota: '\\\\iota',\n  Kappa: 'K',\n  kappa: '\\\\kappa',\n  varkappa: '\\\\varkappa',\n  Lambda: '\\\\Lambda',\n  lambda: '\\\\lambda',\n  Mu: 'M',\n  mu: '\\\\mu',\n  Nu: 'N',\n  nu: '\\\\nu',\n  Xi: '\\\\Xi',\n  xi: '\\\\xi',\n  Omicron: 'O',\n  omicron: 'o',\n  Pi: '\\\\Pi',\n  pi: '\\\\pi',\n  varpi: '\\\\varpi',\n  Rho: 'P',\n  rho: '\\\\rho',\n  varrho: '\\\\varrho',\n  Sigma: '\\\\Sigma',\n  sigma: '\\\\sigma',\n  varsigma: '\\\\varsigma',\n  Tau: 'T',\n  tau: '\\\\tau',\n  Upsilon: '\\\\Upsilon',\n  upsilon: '\\\\upsilon',\n  Phi: '\\\\Phi',\n  phi: '\\\\phi',\n  varphi: '\\\\varphi',\n  Chi: 'X',\n  chi: '\\\\chi',\n  Psi: '\\\\Psi',\n  psi: '\\\\psi',\n  Omega: '\\\\Omega',\n  omega: '\\\\omega',\n  // logic\n  true: '\\\\mathrm{True}',\n  false: '\\\\mathrm{False}',\n  // other\n  i: 'i',\n  // TODO use \\i ??\n  inf: '\\\\infty',\n  Inf: '\\\\infty',\n  infinity: '\\\\infty',\n  Infinity: '\\\\infty',\n  oo: '\\\\infty',\n  lim: '\\\\lim',\n  undefined: '\\\\mathbf{?}'\n};\nexport var latexOperators = {\n  transpose: '^\\\\top',\n  ctranspose: '^H',\n  factorial: '!',\n  pow: '^',\n  dotPow: '.^\\\\wedge',\n  // TODO find ideal solution\n  unaryPlus: '+',\n  unaryMinus: '-',\n  bitNot: '\\\\~',\n  // TODO find ideal solution\n  not: '\\\\neg',\n  multiply: '\\\\cdot',\n  divide: '\\\\frac',\n  // TODO how to handle that properly?\n  dotMultiply: '.\\\\cdot',\n  // TODO find ideal solution\n  dotDivide: '.:',\n  // TODO find ideal solution\n  mod: '\\\\mod',\n  add: '+',\n  subtract: '-',\n  to: '\\\\rightarrow',\n  leftShift: '<<',\n  rightArithShift: '>>',\n  rightLogShift: '>>>',\n  equal: '=',\n  unequal: '\\\\neq',\n  smaller: '<',\n  larger: '>',\n  smallerEq: '\\\\leq',\n  largerEq: '\\\\geq',\n  bitAnd: '\\\\&',\n  bitXor: '\\\\underline{|}',\n  bitOr: '|',\n  and: '\\\\wedge',\n  xor: '\\\\veebar',\n  or: '\\\\vee'\n};\nexport var latexFunctions = {\n  // arithmetic\n  abs: {\n    1: '\\\\left|${args[0]}\\\\right|'\n  },\n  add: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.add, \"${args[1]}\\\\right)\")\n  },\n  cbrt: {\n    1: '\\\\sqrt[3]{${args[0]}}'\n  },\n  ceil: {\n    1: '\\\\left\\\\lceil${args[0]}\\\\right\\\\rceil'\n  },\n  cube: {\n    1: '\\\\left(${args[0]}\\\\right)^3'\n  },\n  divide: {\n    2: '\\\\frac{${args[0]}}{${args[1]}}'\n  },\n  dotDivide: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.dotDivide, \"${args[1]}\\\\right)\")\n  },\n  dotMultiply: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.dotMultiply, \"${args[1]}\\\\right)\")\n  },\n  dotPow: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.dotPow, \"${args[1]}\\\\right)\")\n  },\n  exp: {\n    1: '\\\\exp\\\\left(${args[0]}\\\\right)'\n  },\n  expm1: \"\\\\left(e\".concat(latexOperators.pow, \"{${args[0]}}-1\\\\right)\"),\n  fix: {\n    1: '\\\\mathrm{${name}}\\\\left(${args[0]}\\\\right)'\n  },\n  floor: {\n    1: '\\\\left\\\\lfloor${args[0]}\\\\right\\\\rfloor'\n  },\n  gcd: '\\\\gcd\\\\left(${args}\\\\right)',\n  hypot: '\\\\hypot\\\\left(${args}\\\\right)',\n  log: {\n    1: '\\\\ln\\\\left(${args[0]}\\\\right)',\n    2: '\\\\log_{${args[1]}}\\\\left(${args[0]}\\\\right)'\n  },\n  log10: {\n    1: '\\\\log_{10}\\\\left(${args[0]}\\\\right)'\n  },\n  log1p: {\n    1: '\\\\ln\\\\left(${args[0]}+1\\\\right)',\n    2: '\\\\log_{${args[1]}}\\\\left(${args[0]}+1\\\\right)'\n  },\n  log2: '\\\\log_{2}\\\\left(${args[0]}\\\\right)',\n  mod: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.mod, \"${args[1]}\\\\right)\")\n  },\n  multiply: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.multiply, \"${args[1]}\\\\right)\")\n  },\n  norm: {\n    1: '\\\\left\\\\|${args[0]}\\\\right\\\\|',\n    2: undefined // use default template\n\n  },\n  nthRoot: {\n    2: '\\\\sqrt[${args[1]}]{${args[0]}}'\n  },\n  nthRoots: {\n    2: '\\\\{y : $y^{args[1]} = {${args[0]}}\\\\}'\n  },\n  pow: {\n    2: \"\\\\left(${args[0]}\\\\right)\".concat(latexOperators.pow, \"{${args[1]}}\")\n  },\n  round: {\n    1: '\\\\left\\\\lfloor${args[0]}\\\\right\\\\rceil',\n    2: undefined // use default template\n\n  },\n  sign: {\n    1: '\\\\mathrm{${name}}\\\\left(${args[0]}\\\\right)'\n  },\n  sqrt: {\n    1: '\\\\sqrt{${args[0]}}'\n  },\n  square: {\n    1: '\\\\left(${args[0]}\\\\right)^2'\n  },\n  subtract: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.subtract, \"${args[1]}\\\\right)\")\n  },\n  unaryMinus: {\n    1: \"\".concat(latexOperators.unaryMinus, \"\\\\left(${args[0]}\\\\right)\")\n  },\n  unaryPlus: {\n    1: \"\".concat(latexOperators.unaryPlus, \"\\\\left(${args[0]}\\\\right)\")\n  },\n  // bitwise\n  bitAnd: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.bitAnd, \"${args[1]}\\\\right)\")\n  },\n  bitNot: {\n    1: latexOperators.bitNot + '\\\\left(${args[0]}\\\\right)'\n  },\n  bitOr: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.bitOr, \"${args[1]}\\\\right)\")\n  },\n  bitXor: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.bitXor, \"${args[1]}\\\\right)\")\n  },\n  leftShift: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.leftShift, \"${args[1]}\\\\right)\")\n  },\n  rightArithShift: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.rightArithShift, \"${args[1]}\\\\right)\")\n  },\n  rightLogShift: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.rightLogShift, \"${args[1]}\\\\right)\")\n  },\n  // combinatorics\n  bellNumbers: {\n    1: '\\\\mathrm{B}_{${args[0]}}'\n  },\n  catalan: {\n    1: '\\\\mathrm{C}_{${args[0]}}'\n  },\n  stirlingS2: {\n    2: '\\\\mathrm{S}\\\\left(${args}\\\\right)'\n  },\n  // complex\n  arg: {\n    1: '\\\\arg\\\\left(${args[0]}\\\\right)'\n  },\n  conj: {\n    1: '\\\\left(${args[0]}\\\\right)^*'\n  },\n  im: {\n    1: '\\\\Im\\\\left\\\\lbrace${args[0]}\\\\right\\\\rbrace'\n  },\n  re: {\n    1: '\\\\Re\\\\left\\\\lbrace${args[0]}\\\\right\\\\rbrace'\n  },\n  // logical\n  and: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.and, \"${args[1]}\\\\right)\")\n  },\n  not: {\n    1: latexOperators.not + '\\\\left(${args[0]}\\\\right)'\n  },\n  or: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.or, \"${args[1]}\\\\right)\")\n  },\n  xor: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.xor, \"${args[1]}\\\\right)\")\n  },\n  // matrix\n  cross: {\n    2: '\\\\left(${args[0]}\\\\right)\\\\times\\\\left(${args[1]}\\\\right)'\n  },\n  ctranspose: {\n    1: \"\\\\left(${args[0]}\\\\right)\".concat(latexOperators.ctranspose)\n  },\n  det: {\n    1: '\\\\det\\\\left(${args[0]}\\\\right)'\n  },\n  dot: {\n    2: '\\\\left(${args[0]}\\\\cdot${args[1]}\\\\right)'\n  },\n  expm: {\n    1: '\\\\exp\\\\left(${args[0]}\\\\right)'\n  },\n  inv: {\n    1: '\\\\left(${args[0]}\\\\right)^{-1}'\n  },\n  pinv: {\n    1: '\\\\left(${args[0]}\\\\right)^{+}'\n  },\n  sqrtm: {\n    1: \"{${args[0]}}\".concat(latexOperators.pow, \"{\\\\frac{1}{2}}\")\n  },\n  trace: {\n    1: '\\\\mathrm{tr}\\\\left(${args[0]}\\\\right)'\n  },\n  transpose: {\n    1: \"\\\\left(${args[0]}\\\\right)\".concat(latexOperators.transpose)\n  },\n  // probability\n  combinations: {\n    2: '\\\\binom{${args[0]}}{${args[1]}}'\n  },\n  combinationsWithRep: {\n    2: '\\\\left(\\\\!\\\\!{\\\\binom{${args[0]}}{${args[1]}}}\\\\!\\\\!\\\\right)'\n  },\n  factorial: {\n    1: \"\\\\left(${args[0]}\\\\right)\".concat(latexOperators.factorial)\n  },\n  gamma: {\n    1: '\\\\Gamma\\\\left(${args[0]}\\\\right)'\n  },\n  lgamma: {\n    1: '\\\\ln\\\\Gamma\\\\left(${args[0]}\\\\right)'\n  },\n  // relational\n  equal: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.equal, \"${args[1]}\\\\right)\")\n  },\n  larger: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.larger, \"${args[1]}\\\\right)\")\n  },\n  largerEq: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.largerEq, \"${args[1]}\\\\right)\")\n  },\n  smaller: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.smaller, \"${args[1]}\\\\right)\")\n  },\n  smallerEq: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.smallerEq, \"${args[1]}\\\\right)\")\n  },\n  unequal: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.unequal, \"${args[1]}\\\\right)\")\n  },\n  // special\n  erf: {\n    1: 'erf\\\\left(${args[0]}\\\\right)'\n  },\n  // statistics\n  max: '\\\\max\\\\left(${args}\\\\right)',\n  min: '\\\\min\\\\left(${args}\\\\right)',\n  variance: '\\\\mathrm{Var}\\\\left(${args}\\\\right)',\n  // trigonometry\n  acos: {\n    1: '\\\\cos^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  acosh: {\n    1: '\\\\cosh^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  acot: {\n    1: '\\\\cot^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  acoth: {\n    1: '\\\\coth^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  acsc: {\n    1: '\\\\csc^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  acsch: {\n    1: '\\\\mathrm{csch}^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  asec: {\n    1: '\\\\sec^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  asech: {\n    1: '\\\\mathrm{sech}^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  asin: {\n    1: '\\\\sin^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  asinh: {\n    1: '\\\\sinh^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  atan: {\n    1: '\\\\tan^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  atan2: {\n    2: '\\\\mathrm{atan2}\\\\left(${args}\\\\right)'\n  },\n  atanh: {\n    1: '\\\\tanh^{-1}\\\\left(${args[0]}\\\\right)'\n  },\n  cos: {\n    1: '\\\\cos\\\\left(${args[0]}\\\\right)'\n  },\n  cosh: {\n    1: '\\\\cosh\\\\left(${args[0]}\\\\right)'\n  },\n  cot: {\n    1: '\\\\cot\\\\left(${args[0]}\\\\right)'\n  },\n  coth: {\n    1: '\\\\coth\\\\left(${args[0]}\\\\right)'\n  },\n  csc: {\n    1: '\\\\csc\\\\left(${args[0]}\\\\right)'\n  },\n  csch: {\n    1: '\\\\mathrm{csch}\\\\left(${args[0]}\\\\right)'\n  },\n  sec: {\n    1: '\\\\sec\\\\left(${args[0]}\\\\right)'\n  },\n  sech: {\n    1: '\\\\mathrm{sech}\\\\left(${args[0]}\\\\right)'\n  },\n  sin: {\n    1: '\\\\sin\\\\left(${args[0]}\\\\right)'\n  },\n  sinh: {\n    1: '\\\\sinh\\\\left(${args[0]}\\\\right)'\n  },\n  tan: {\n    1: '\\\\tan\\\\left(${args[0]}\\\\right)'\n  },\n  tanh: {\n    1: '\\\\tanh\\\\left(${args[0]}\\\\right)'\n  },\n  // unit\n  to: {\n    2: \"\\\\left(${args[0]}\".concat(latexOperators.to, \"${args[1]}\\\\right)\")\n  },\n  // utils\n  numeric: function numeric(node, options) {\n    // Not sure if this is strictly right but should work correctly for the vast majority of use cases.\n    return node.args[0].toTex();\n  },\n  // type\n  number: {\n    0: '0',\n    1: '\\\\left(${args[0]}\\\\right)',\n    2: '\\\\left(\\\\left(${args[0]}\\\\right)${args[1]}\\\\right)'\n  },\n  string: {\n    0: '\\\\mathtt{\"\"}',\n    1: '\\\\mathrm{string}\\\\left(${args[0]}\\\\right)'\n  },\n  bignumber: {\n    0: '0',\n    1: '\\\\left(${args[0]}\\\\right)'\n  },\n  complex: {\n    0: '0',\n    1: '\\\\left(${args[0]}\\\\right)',\n    2: \"\\\\left(\\\\left(${args[0]}\\\\right)+\".concat(latexSymbols.i, \"\\\\cdot\\\\left(${args[1]}\\\\right)\\\\right)\")\n  },\n  matrix: {\n    0: '\\\\begin{bmatrix}\\\\end{bmatrix}',\n    1: '\\\\left(${args[0]}\\\\right)',\n    2: '\\\\left(${args[0]}\\\\right)'\n  },\n  sparse: {\n    0: '\\\\begin{bsparse}\\\\end{bsparse}',\n    1: '\\\\left(${args[0]}\\\\right)'\n  },\n  unit: {\n    1: '\\\\left(${args[0]}\\\\right)',\n    2: '\\\\left(\\\\left(${args[0]}\\\\right)${args[1]}\\\\right)'\n  }\n};\nexport var defaultTemplate = '\\\\mathrm{${name}}\\\\left(${args}\\\\right)';\nvar latexUnits = {\n  deg: '^\\\\circ'\n};\nexport function escapeLatex(string) {\n  return escapeLatexLib(string, {\n    preserveFormatting: true\n  });\n} // @param {string} name\n// @param {boolean} isUnit\n\nexport function toSymbol(name, isUnit) {\n  isUnit = typeof isUnit === 'undefined' ? false : isUnit;\n\n  if (isUnit) {\n    if (hasOwnProperty(latexUnits, name)) {\n      return latexUnits[name];\n    }\n\n    return '\\\\mathrm{' + escapeLatex(name) + '}';\n  }\n\n  if (hasOwnProperty(latexSymbols, name)) {\n    return latexSymbols[name];\n  }\n\n  return escapeLatex(name);\n}", "import { format } from '../../utils/string.js';\nimport { typeOf } from '../../utils/is.js';\nimport { escapeLatex } from '../../utils/latex.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'ConstantNode';\nvar dependencies = ['Node'];\nexport var createConstantNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * A ConstantNode holds a constant value like a number or string.\n   *\n   * Usage:\n   *\n   *     new ConstantNode(2.3)\n   *     new ConstantNode('hello')\n   *\n   * @param {*} value    Value can be any type (number, BigNumber, string, ...)\n   * @constructor ConstantNode\n   * @extends {Node}\n   */\n  function ConstantNode(value) {\n    if (!(this instanceof ConstantNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    this.value = value;\n  }\n\n  ConstantNode.prototype = new Node();\n  ConstantNode.prototype.type = 'ConstantNode';\n  ConstantNode.prototype.isConstantNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  ConstantNode.prototype._compile = function (math, argNames) {\n    var value = this.value;\n    return function evalConstantNode() {\n      return value;\n    };\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  ConstantNode.prototype.forEach = function (callback) {// nothing to do, we don't have childs\n  };\n  /**\n   * Create a new ConstantNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node) : Node} callback\n   * @returns {ConstantNode} Returns a clone of the node\n   */\n\n\n  ConstantNode.prototype.map = function (callback) {\n    return this.clone();\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {ConstantNode}\n   */\n\n\n  ConstantNode.prototype.clone = function () {\n    return new ConstantNode(this.value);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ConstantNode.prototype._toString = function (options) {\n    return format(this.value, options);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ConstantNode.prototype.toHTML = function (options) {\n    var value = this._toString(options);\n\n    switch (typeOf(this.value)) {\n      case 'number':\n      case 'BigNumber':\n      case 'Fraction':\n        return '<span class=\"math-number\">' + value + '</span>';\n\n      case 'string':\n        return '<span class=\"math-string\">' + value + '</span>';\n\n      case 'boolean':\n        return '<span class=\"math-boolean\">' + value + '</span>';\n\n      case 'null':\n        return '<span class=\"math-null-symbol\">' + value + '</span>';\n\n      case 'undefined':\n        return '<span class=\"math-undefined\">' + value + '</span>';\n\n      default:\n        return '<span class=\"math-symbol\">' + value + '</span>';\n    }\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  ConstantNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'ConstantNode',\n      value: this.value\n    };\n  };\n  /**\n   * Instantiate a ConstantNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"SymbolNode\", value: 2.3}`,\n   *                       where mathjs is optional\n   * @returns {ConstantNode}\n   */\n\n\n  ConstantNode.fromJSON = function (json) {\n    return new ConstantNode(json.value);\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ConstantNode.prototype._toTex = function (options) {\n    var value = this._toString(options);\n\n    switch (typeOf(this.value)) {\n      case 'string':\n        return '\\\\mathtt{' + escapeLatex(value) + '}';\n\n      case 'number':\n      case 'BigNumber':\n        {\n          if (!isFinite(this.value)) {\n            return this.value.valueOf() < 0 ? '-\\\\infty' : '\\\\infty';\n          }\n\n          var index = value.toLowerCase().indexOf('e');\n\n          if (index !== -1) {\n            return value.substring(0, index) + '\\\\cdot10^{' + value.substring(index + 1) + '}';\n          }\n        }\n        return value;\n\n      case 'Fraction':\n        return this.value.toLatex();\n\n      default:\n        return value;\n    }\n  };\n\n  return ConstantNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isNode } from '../../utils/is.js';\nimport { keywords } from '../keywords.js';\nimport { escape } from '../../utils/string.js';\nimport { forEach, join } from '../../utils/array.js';\nimport { toSymbol } from '../../utils/latex.js';\nimport { getPrecedence } from '../operators.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'FunctionAssignmentNode';\nvar dependencies = ['typed', 'Node'];\nexport var createFunctionAssignmentNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    Node\n  } = _ref;\n\n  /**\n   * @constructor FunctionAssignmentNode\n   * @extends {Node}\n   * Function assignment\n   *\n   * @param {string} name           Function name\n   * @param {string[] | Array.<{name: string, type: string}>} params\n   *                                Array with function parameter names, or an\n   *                                array with objects containing the name\n   *                                and type of the parameter\n   * @param {Node} expr             The function expression\n   */\n  function FunctionAssignmentNode(name, params, expr) {\n    if (!(this instanceof FunctionAssignmentNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    } // validate input\n\n\n    if (typeof name !== 'string') throw new TypeError('String expected for parameter \"name\"');\n    if (!Array.isArray(params)) throw new TypeError('Array containing strings or objects expected for parameter \"params\"');\n    if (!isNode(expr)) throw new TypeError('Node expected for parameter \"expr\"');\n    if (keywords.has(name)) throw new Error('Illegal function name, \"' + name + '\" is a reserved keyword');\n    this.name = name;\n    this.params = params.map(function (param) {\n      return param && param.name || param;\n    });\n    this.types = params.map(function (param) {\n      return param && param.type || 'any';\n    });\n    this.expr = expr;\n  }\n\n  FunctionAssignmentNode.prototype = new Node();\n  FunctionAssignmentNode.prototype.type = 'FunctionAssignmentNode';\n  FunctionAssignmentNode.prototype.isFunctionAssignmentNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  FunctionAssignmentNode.prototype._compile = function (math, argNames) {\n    var childArgNames = Object.create(argNames);\n    forEach(this.params, function (param) {\n      childArgNames[param] = true;\n    }); // compile the function expression with the child args\n\n    var evalExpr = this.expr._compile(math, childArgNames);\n\n    var name = this.name;\n    var params = this.params;\n    var signature = join(this.types, ',');\n    var syntax = name + '(' + join(this.params, ', ') + ')';\n    return function evalFunctionAssignmentNode(scope, args, context) {\n      var signatures = {};\n\n      signatures[signature] = function () {\n        var childArgs = Object.create(args);\n\n        for (var i = 0; i < params.length; i++) {\n          childArgs[params[i]] = arguments[i];\n        }\n\n        return evalExpr(scope, childArgs, context);\n      };\n\n      var fn = typed(name, signatures);\n      fn.syntax = syntax;\n      scope.set(name, fn);\n      return fn;\n    };\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  FunctionAssignmentNode.prototype.forEach = function (callback) {\n    callback(this.expr, 'expr', this);\n  };\n  /**\n   * Create a new FunctionAssignmentNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {FunctionAssignmentNode} Returns a transformed copy of the node\n   */\n\n\n  FunctionAssignmentNode.prototype.map = function (callback) {\n    var expr = this._ifNode(callback(this.expr, 'expr', this));\n\n    return new FunctionAssignmentNode(this.name, this.params.slice(0), expr);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {FunctionAssignmentNode}\n   */\n\n\n  FunctionAssignmentNode.prototype.clone = function () {\n    return new FunctionAssignmentNode(this.name, this.params.slice(0), this.expr);\n  };\n  /**\n   * Is parenthesis needed?\n   * @param {Node} node\n   * @param {Object} parenthesis\n   * @private\n   */\n\n\n  function needParenthesis(node, parenthesis) {\n    var precedence = getPrecedence(node, parenthesis);\n    var exprPrecedence = getPrecedence(node.expr, parenthesis);\n    return parenthesis === 'all' || exprPrecedence !== null && exprPrecedence <= precedence;\n  }\n  /**\n   * get string representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  FunctionAssignmentNode.prototype._toString = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var expr = this.expr.toString(options);\n\n    if (needParenthesis(this, parenthesis)) {\n      expr = '(' + expr + ')';\n    }\n\n    return this.name + '(' + this.params.join(', ') + ') = ' + expr;\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  FunctionAssignmentNode.prototype.toJSON = function () {\n    var types = this.types;\n    return {\n      mathjs: 'FunctionAssignmentNode',\n      name: this.name,\n      params: this.params.map(function (param, index) {\n        return {\n          name: param,\n          type: types[index]\n        };\n      }),\n      expr: this.expr\n    };\n  };\n  /**\n   * Instantiate an FunctionAssignmentNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"FunctionAssignmentNode\", name: ..., params: ..., expr: ...}`,\n   *                       where mathjs is optional\n   * @returns {FunctionAssignmentNode}\n   */\n\n\n  FunctionAssignmentNode.fromJSON = function (json) {\n    return new FunctionAssignmentNode(json.name, json.params, json.expr);\n  };\n  /**\n   * get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  FunctionAssignmentNode.prototype.toHTML = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var params = [];\n\n    for (var i = 0; i < this.params.length; i++) {\n      params.push('<span class=\"math-symbol math-parameter\">' + escape(this.params[i]) + '</span>');\n    }\n\n    var expr = this.expr.toHTML(options);\n\n    if (needParenthesis(this, parenthesis)) {\n      expr = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + expr + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    return '<span class=\"math-function\">' + escape(this.name) + '</span>' + '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + params.join('<span class=\"math-separator\">,</span>') + '<span class=\"math-parenthesis math-round-parenthesis\">)</span><span class=\"math-operator math-assignment-operator math-variable-assignment-operator math-binary-operator\">=</span>' + expr;\n  };\n  /**\n   * get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  FunctionAssignmentNode.prototype._toTex = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var expr = this.expr.toTex(options);\n\n    if (needParenthesis(this, parenthesis)) {\n      expr = \"\\\\left(\".concat(expr, \"\\\\right)\");\n    }\n\n    return '\\\\mathrm{' + this.name + '}\\\\left(' + this.params.map(toSymbol).join(',') + '\\\\right):=' + expr;\n  };\n\n  return FunctionAssignmentNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { map } from '../../utils/array.js';\nimport { getSafeProperty } from '../../utils/customs.js';\nimport { factory } from '../../utils/factory.js';\nimport { isArray, isConstantNode, isMatrix, isNode, isString, typeOf } from '../../utils/is.js';\nimport { escape } from '../../utils/string.js';\nvar name = 'IndexNode';\nvar dependencies = ['Node', 'size'];\nexport var createIndexNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node,\n    size\n  } = _ref;\n\n  /**\n   * @constructor IndexNode\n   * @extends Node\n   *\n   * Describes a subset of a matrix or an object property.\n   * Cannot be used on its own, needs to be used within an AccessorNode or\n   * AssignmentNode.\n   *\n   * @param {Node[]} dimensions\n   * @param {boolean} [dotNotation=false]  Optional property describing whether\n   *                                       this index was written using dot\n   *                                       notation like `a.b`, or using bracket\n   *                                       notation like `a[\"b\"]` (default).\n   *                                       Used to stringify an IndexNode.\n   */\n  function IndexNode(dimensions, dotNotation) {\n    if (!(this instanceof IndexNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    this.dimensions = dimensions;\n    this.dotNotation = dotNotation || false; // validate input\n\n    if (!Array.isArray(dimensions) || !dimensions.every(isNode)) {\n      throw new TypeError('Array containing Nodes expected for parameter \"dimensions\"');\n    }\n\n    if (this.dotNotation && !this.isObjectProperty()) {\n      throw new Error('dotNotation only applicable for object properties');\n    }\n  }\n\n  IndexNode.prototype = new Node();\n  IndexNode.prototype.type = 'IndexNode';\n  IndexNode.prototype.isIndexNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  IndexNode.prototype._compile = function (math, argNames) {\n    // TODO: implement support for bignumber (currently bignumbers are silently\n    //       reduced to numbers when changing the value to zero-based)\n    // TODO: Optimization: when the range values are ConstantNodes,\n    //       we can beforehand resolve the zero-based value\n    // optimization for a simple object property\n    var evalDimensions = map(this.dimensions, function (dimension, i) {\n      var needsEnd = dimension.filter(node => node.isSymbolNode && node.name === 'end').length > 0;\n\n      if (needsEnd) {\n        // SymbolNode 'end' is used inside the index,\n        // like in `A[end]` or `A[end - 2]`\n        var childArgNames = Object.create(argNames);\n        childArgNames.end = true;\n\n        var _evalDimension = dimension._compile(math, childArgNames);\n\n        return function evalDimension(scope, args, context) {\n          if (!isMatrix(context) && !isArray(context) && !isString(context)) {\n            throw new TypeError('Cannot resolve \"end\": ' + 'context must be a Matrix, Array, or string but is ' + typeOf(context));\n          }\n\n          var s = size(context).valueOf();\n          var childArgs = Object.create(args);\n          childArgs.end = s[i];\n          return _evalDimension(scope, childArgs, context);\n        };\n      } else {\n        // SymbolNode `end` not used\n        return dimension._compile(math, argNames);\n      }\n    });\n    var index = getSafeProperty(math, 'index');\n    return function evalIndexNode(scope, args, context) {\n      var dimensions = map(evalDimensions, function (evalDimension) {\n        return evalDimension(scope, args, context);\n      });\n      return index(...dimensions);\n    };\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  IndexNode.prototype.forEach = function (callback) {\n    for (var i = 0; i < this.dimensions.length; i++) {\n      callback(this.dimensions[i], 'dimensions[' + i + ']', this);\n    }\n  };\n  /**\n   * Create a new IndexNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {IndexNode} Returns a transformed copy of the node\n   */\n\n\n  IndexNode.prototype.map = function (callback) {\n    var dimensions = [];\n\n    for (var i = 0; i < this.dimensions.length; i++) {\n      dimensions[i] = this._ifNode(callback(this.dimensions[i], 'dimensions[' + i + ']', this));\n    }\n\n    return new IndexNode(dimensions, this.dotNotation);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {IndexNode}\n   */\n\n\n  IndexNode.prototype.clone = function () {\n    return new IndexNode(this.dimensions.slice(0), this.dotNotation);\n  };\n  /**\n   * Test whether this IndexNode contains a single property name\n   * @return {boolean}\n   */\n\n\n  IndexNode.prototype.isObjectProperty = function () {\n    return this.dimensions.length === 1 && isConstantNode(this.dimensions[0]) && typeof this.dimensions[0].value === 'string';\n  };\n  /**\n   * Returns the property name if IndexNode contains a property.\n   * If not, returns null.\n   * @return {string | null}\n   */\n\n\n  IndexNode.prototype.getObjectProperty = function () {\n    return this.isObjectProperty() ? this.dimensions[0].value : null;\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  IndexNode.prototype._toString = function (options) {\n    // format the parameters like \"[1, 0:5]\"\n    return this.dotNotation ? '.' + this.getObjectProperty() : '[' + this.dimensions.join(', ') + ']';\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  IndexNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'IndexNode',\n      dimensions: this.dimensions,\n      dotNotation: this.dotNotation\n    };\n  };\n  /**\n   * Instantiate an IndexNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"IndexNode\", dimensions: [...], dotNotation: false}`,\n   *                       where mathjs is optional\n   * @returns {IndexNode}\n   */\n\n\n  IndexNode.fromJSON = function (json) {\n    return new IndexNode(json.dimensions, json.dotNotation);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  IndexNode.prototype.toHTML = function (options) {\n    // format the parameters like \"[1, 0:5]\"\n    var dimensions = [];\n\n    for (var i = 0; i < this.dimensions.length; i++) {\n      dimensions[i] = this.dimensions[i].toHTML();\n    }\n\n    if (this.dotNotation) {\n      return '<span class=\"math-operator math-accessor-operator\">.</span>' + '<span class=\"math-symbol math-property\">' + escape(this.getObjectProperty()) + '</span>';\n    } else {\n      return '<span class=\"math-parenthesis math-square-parenthesis\">[</span>' + dimensions.join('<span class=\"math-separator\">,</span>') + '<span class=\"math-parenthesis math-square-parenthesis\">]</span>';\n    }\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  IndexNode.prototype._toTex = function (options) {\n    var dimensions = this.dimensions.map(function (range) {\n      return range.toTex(options);\n    });\n    return this.dotNotation ? '.' + this.getObjectProperty() + '' : '_{' + dimensions.join(',') + '}';\n  };\n\n  return IndexNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isNode } from '../../utils/is.js';\nimport { escape, stringify } from '../../utils/string.js';\nimport { isSafeProperty } from '../../utils/customs.js';\nimport { hasOwnProperty } from '../../utils/object.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'ObjectNode';\nvar dependencies = ['Node'];\nexport var createObjectNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * @constructor ObjectNode\n   * @extends {Node}\n   * Holds an object with keys/values\n   * @param {Object.<string, Node>} [properties]   object with key/value pairs\n   */\n  function ObjectNode(properties) {\n    if (!(this instanceof ObjectNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    this.properties = properties || {}; // validate input\n\n    if (properties) {\n      if (!(typeof properties === 'object') || !Object.keys(properties).every(function (key) {\n        return isNode(properties[key]);\n      })) {\n        throw new TypeError('Object containing Nodes expected');\n      }\n    }\n  }\n\n  ObjectNode.prototype = new Node();\n  ObjectNode.prototype.type = 'ObjectNode';\n  ObjectNode.prototype.isObjectNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  ObjectNode.prototype._compile = function (math, argNames) {\n    var evalEntries = {};\n\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        // we stringify/parse the key here to resolve unicode characters,\n        // so you cannot create a key like {\"co\\\\u006Estructor\": null}\n        var stringifiedKey = stringify(key);\n        var parsedKey = JSON.parse(stringifiedKey);\n\n        if (!isSafeProperty(this.properties, parsedKey)) {\n          throw new Error('No access to property \"' + parsedKey + '\"');\n        }\n\n        evalEntries[parsedKey] = this.properties[key]._compile(math, argNames);\n      }\n    }\n\n    return function evalObjectNode(scope, args, context) {\n      var obj = {};\n\n      for (var _key in evalEntries) {\n        if (hasOwnProperty(evalEntries, _key)) {\n          obj[_key] = evalEntries[_key](scope, args, context);\n        }\n      }\n\n      return obj;\n    };\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  ObjectNode.prototype.forEach = function (callback) {\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        callback(this.properties[key], 'properties[' + stringify(key) + ']', this);\n      }\n    }\n  };\n  /**\n   * Create a new ObjectNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {ObjectNode} Returns a transformed copy of the node\n   */\n\n\n  ObjectNode.prototype.map = function (callback) {\n    var properties = {};\n\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        properties[key] = this._ifNode(callback(this.properties[key], 'properties[' + stringify(key) + ']', this));\n      }\n    }\n\n    return new ObjectNode(properties);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {ObjectNode}\n   */\n\n\n  ObjectNode.prototype.clone = function () {\n    var properties = {};\n\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        properties[key] = this.properties[key];\n      }\n    }\n\n    return new ObjectNode(properties);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ObjectNode.prototype._toString = function (options) {\n    var entries = [];\n\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        entries.push(stringify(key) + ': ' + this.properties[key].toString(options));\n      }\n    }\n\n    return '{' + entries.join(', ') + '}';\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  ObjectNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'ObjectNode',\n      properties: this.properties\n    };\n  };\n  /**\n   * Instantiate an OperatorNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"ObjectNode\", \"properties\": {...}}`,\n   *                       where mathjs is optional\n   * @returns {ObjectNode}\n   */\n\n\n  ObjectNode.fromJSON = function (json) {\n    return new ObjectNode(json.properties);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ObjectNode.prototype.toHTML = function (options) {\n    var entries = [];\n\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        entries.push('<span class=\"math-symbol math-property\">' + escape(key) + '</span>' + '<span class=\"math-operator math-assignment-operator math-property-assignment-operator math-binary-operator\">:</span>' + this.properties[key].toHTML(options));\n      }\n    }\n\n    return '<span class=\"math-parenthesis math-curly-parenthesis\">{</span>' + entries.join('<span class=\"math-separator\">,</span>') + '<span class=\"math-parenthesis math-curly-parenthesis\">}</span>';\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  ObjectNode.prototype._toTex = function (options) {\n    var entries = [];\n\n    for (var key in this.properties) {\n      if (hasOwnProperty(this.properties, key)) {\n        entries.push('\\\\mathbf{' + key + ':} & ' + this.properties[key].toTex(options) + '\\\\\\\\');\n      }\n    }\n\n    return \"\\\\left\\\\{\\\\begin{array}{ll}\".concat(entries.join('\\n'), \"\\\\end{array}\\\\right\\\\}\");\n  };\n\n  return ObjectNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isNode } from '../../utils/is.js';\nimport { map } from '../../utils/array.js';\nimport { escape } from '../../utils/string.js';\nimport { getSafeProperty, isSafeMethod } from '../../utils/customs.js';\nimport { getAssociativity, getPrecedence, isAssociativeWith, properties } from '../operators.js';\nimport { latexOperators } from '../../utils/latex.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'OperatorNode';\nvar dependencies = ['Node'];\nexport var createOperatorNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * @constructor OperatorNode\n   * @extends {Node}\n   * An operator with two arguments, like 2+3\n   *\n   * @param {string} op           Operator name, for example '+'\n   * @param {string} fn           Function name, for example 'add'\n   * @param {Node[]} args         Operator arguments\n   * @param {boolean} [implicit]  Is this an implicit multiplication?\n   * @param {boolean} [isPercentage] Is this an percentage Operation?\n   */\n  function OperatorNode(op, fn, args, implicit, isPercentage) {\n    if (!(this instanceof OperatorNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    } // validate input\n\n\n    if (typeof op !== 'string') {\n      throw new TypeError('string expected for parameter \"op\"');\n    }\n\n    if (typeof fn !== 'string') {\n      throw new TypeError('string expected for parameter \"fn\"');\n    }\n\n    if (!Array.isArray(args) || !args.every(isNode)) {\n      throw new TypeError('Array containing Nodes expected for parameter \"args\"');\n    }\n\n    this.implicit = implicit === true;\n    this.isPercentage = isPercentage === true;\n    this.op = op;\n    this.fn = fn;\n    this.args = args || [];\n  }\n\n  OperatorNode.prototype = new Node();\n  OperatorNode.prototype.type = 'OperatorNode';\n  OperatorNode.prototype.isOperatorNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  OperatorNode.prototype._compile = function (math, argNames) {\n    // validate fn\n    if (typeof this.fn !== 'string' || !isSafeMethod(math, this.fn)) {\n      if (!math[this.fn]) {\n        throw new Error('Function ' + this.fn + ' missing in provided namespace \"math\"');\n      } else {\n        throw new Error('No access to function \"' + this.fn + '\"');\n      }\n    }\n\n    var fn = getSafeProperty(math, this.fn);\n    var evalArgs = map(this.args, function (arg) {\n      return arg._compile(math, argNames);\n    });\n\n    if (evalArgs.length === 1) {\n      var evalArg0 = evalArgs[0];\n      return function evalOperatorNode(scope, args, context) {\n        return fn(evalArg0(scope, args, context));\n      };\n    } else if (evalArgs.length === 2) {\n      var _evalArg = evalArgs[0];\n      var evalArg1 = evalArgs[1];\n      return function evalOperatorNode(scope, args, context) {\n        return fn(_evalArg(scope, args, context), evalArg1(scope, args, context));\n      };\n    } else {\n      return function evalOperatorNode(scope, args, context) {\n        return fn.apply(null, map(evalArgs, function (evalArg) {\n          return evalArg(scope, args, context);\n        }));\n      };\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  OperatorNode.prototype.forEach = function (callback) {\n    for (var i = 0; i < this.args.length; i++) {\n      callback(this.args[i], 'args[' + i + ']', this);\n    }\n  };\n  /**\n   * Create a new OperatorNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {OperatorNode} Returns a transformed copy of the node\n   */\n\n\n  OperatorNode.prototype.map = function (callback) {\n    var args = [];\n\n    for (var i = 0; i < this.args.length; i++) {\n      args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));\n    }\n\n    return new OperatorNode(this.op, this.fn, args, this.implicit, this.isPercentage);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {OperatorNode}\n   */\n\n\n  OperatorNode.prototype.clone = function () {\n    return new OperatorNode(this.op, this.fn, this.args.slice(0), this.implicit, this.isPercentage);\n  };\n  /**\n   * Check whether this is an unary OperatorNode:\n   * has exactly one argument, like `-a`.\n   * @return {boolean} Returns true when an unary operator node, false otherwise.\n   */\n\n\n  OperatorNode.prototype.isUnary = function () {\n    return this.args.length === 1;\n  };\n  /**\n   * Check whether this is a binary OperatorNode:\n   * has exactly two arguments, like `a + b`.\n   * @return {boolean} Returns true when a binary operator node, false otherwise.\n   */\n\n\n  OperatorNode.prototype.isBinary = function () {\n    return this.args.length === 2;\n  };\n  /**\n   * Calculate which parentheses are necessary. Gets an OperatorNode\n   * (which is the root of the tree) and an Array of Nodes\n   * (this.args) and returns an array where 'true' means that an argument\n   * has to be enclosed in parentheses whereas 'false' means the opposite.\n   *\n   * @param {OperatorNode} root\n   * @param {string} parenthesis\n   * @param {Node[]} args\n   * @param {boolean} latex\n   * @return {boolean[]}\n   * @private\n   */\n\n\n  function calculateNecessaryParentheses(root, parenthesis, implicit, args, latex) {\n    // precedence of the root OperatorNode\n    var precedence = getPrecedence(root, parenthesis);\n    var associativity = getAssociativity(root, parenthesis);\n\n    if (parenthesis === 'all' || args.length > 2 && root.getIdentifier() !== 'OperatorNode:add' && root.getIdentifier() !== 'OperatorNode:multiply') {\n      return args.map(function (arg) {\n        switch (arg.getContent().type) {\n          // Nodes that don't need extra parentheses\n          case 'ArrayNode':\n          case 'ConstantNode':\n          case 'SymbolNode':\n          case 'ParenthesisNode':\n            return false;\n\n          default:\n            return true;\n        }\n      });\n    }\n\n    var result;\n\n    switch (args.length) {\n      case 0:\n        result = [];\n        break;\n\n      case 1:\n        // unary operators\n        {\n          // precedence of the operand\n          var operandPrecedence = getPrecedence(args[0], parenthesis); // handle special cases for LaTeX, where some of the parentheses aren't needed\n\n          if (latex && operandPrecedence !== null) {\n            var operandIdentifier;\n            var rootIdentifier;\n\n            if (parenthesis === 'keep') {\n              operandIdentifier = args[0].getIdentifier();\n              rootIdentifier = root.getIdentifier();\n            } else {\n              // Ignore Parenthesis Nodes when not in 'keep' mode\n              operandIdentifier = args[0].getContent().getIdentifier();\n              rootIdentifier = root.getContent().getIdentifier();\n            }\n\n            if (properties[precedence][rootIdentifier].latexLeftParens === false) {\n              result = [false];\n              break;\n            }\n\n            if (properties[operandPrecedence][operandIdentifier].latexParens === false) {\n              result = [false];\n              break;\n            }\n          }\n\n          if (operandPrecedence === null) {\n            // if the operand has no defined precedence, no parens are needed\n            result = [false];\n            break;\n          }\n\n          if (operandPrecedence <= precedence) {\n            // if the operands precedence is lower, parens are needed\n            result = [true];\n            break;\n          } // otherwise, no parens needed\n\n\n          result = [false];\n        }\n        break;\n\n      case 2:\n        // binary operators\n        {\n          var lhsParens; // left hand side needs parenthesis?\n          // precedence of the left hand side\n\n          var lhsPrecedence = getPrecedence(args[0], parenthesis); // is the root node associative with the left hand side\n\n          var assocWithLhs = isAssociativeWith(root, args[0], parenthesis);\n\n          if (lhsPrecedence === null) {\n            // if the left hand side has no defined precedence, no parens are needed\n            // FunctionNode for example\n            lhsParens = false;\n          } else if (lhsPrecedence === precedence && associativity === 'right' && !assocWithLhs) {\n            // In case of equal precedence, if the root node is left associative\n            // parens are **never** necessary for the left hand side.\n            // If it is right associative however, parens are necessary\n            // if the root node isn't associative with the left hand side\n            lhsParens = true;\n          } else if (lhsPrecedence < precedence) {\n            lhsParens = true;\n          } else {\n            lhsParens = false;\n          }\n\n          var rhsParens; // right hand side needs parenthesis?\n          // precedence of the right hand side\n\n          var rhsPrecedence = getPrecedence(args[1], parenthesis); // is the root node associative with the right hand side?\n\n          var assocWithRhs = isAssociativeWith(root, args[1], parenthesis);\n\n          if (rhsPrecedence === null) {\n            // if the right hand side has no defined precedence, no parens are needed\n            // FunctionNode for example\n            rhsParens = false;\n          } else if (rhsPrecedence === precedence && associativity === 'left' && !assocWithRhs) {\n            // In case of equal precedence, if the root node is right associative\n            // parens are **never** necessary for the right hand side.\n            // If it is left associative however, parens are necessary\n            // if the root node isn't associative with the right hand side\n            rhsParens = true;\n          } else if (rhsPrecedence < precedence) {\n            rhsParens = true;\n          } else {\n            rhsParens = false;\n          } // handle special cases for LaTeX, where some of the parentheses aren't needed\n\n\n          if (latex) {\n            var _rootIdentifier;\n\n            var lhsIdentifier;\n            var rhsIdentifier;\n\n            if (parenthesis === 'keep') {\n              _rootIdentifier = root.getIdentifier();\n              lhsIdentifier = root.args[0].getIdentifier();\n              rhsIdentifier = root.args[1].getIdentifier();\n            } else {\n              // Ignore ParenthesisNodes when not in 'keep' mode\n              _rootIdentifier = root.getContent().getIdentifier();\n              lhsIdentifier = root.args[0].getContent().getIdentifier();\n              rhsIdentifier = root.args[1].getContent().getIdentifier();\n            }\n\n            if (lhsPrecedence !== null) {\n              if (properties[precedence][_rootIdentifier].latexLeftParens === false) {\n                lhsParens = false;\n              }\n\n              if (properties[lhsPrecedence][lhsIdentifier].latexParens === false) {\n                lhsParens = false;\n              }\n            }\n\n            if (rhsPrecedence !== null) {\n              if (properties[precedence][_rootIdentifier].latexRightParens === false) {\n                rhsParens = false;\n              }\n\n              if (properties[rhsPrecedence][rhsIdentifier].latexParens === false) {\n                rhsParens = false;\n              }\n            }\n          }\n\n          result = [lhsParens, rhsParens];\n        }\n        break;\n\n      default:\n        if (root.getIdentifier() === 'OperatorNode:add' || root.getIdentifier() === 'OperatorNode:multiply') {\n          result = args.map(function (arg) {\n            var argPrecedence = getPrecedence(arg, parenthesis);\n            var assocWithArg = isAssociativeWith(root, arg, parenthesis);\n            var argAssociativity = getAssociativity(arg, parenthesis);\n\n            if (argPrecedence === null) {\n              // if the argument has no defined precedence, no parens are needed\n              return false;\n            } else if (precedence === argPrecedence && associativity === argAssociativity && !assocWithArg) {\n              return true;\n            } else if (argPrecedence < precedence) {\n              return true;\n            }\n\n            return false;\n          });\n        }\n\n        break;\n    } // handles an edge case of 'auto' parentheses with implicit multiplication of ConstantNode\n    // In that case print parentheses for ParenthesisNodes even though they normally wouldn't be\n    // printed.\n\n\n    if (args.length >= 2 && root.getIdentifier() === 'OperatorNode:multiply' && root.implicit && parenthesis === 'auto' && implicit === 'hide') {\n      result = args.map(function (arg, index) {\n        var isParenthesisNode = arg.getIdentifier() === 'ParenthesisNode';\n\n        if (result[index] || isParenthesisNode) {\n          // put in parenthesis?\n          return true;\n        }\n\n        return false;\n      });\n    }\n\n    return result;\n  }\n  /**\n   * Get string representation.\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  OperatorNode.prototype._toString = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var implicit = options && options.implicit ? options.implicit : 'hide';\n    var args = this.args;\n    var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);\n\n    if (args.length === 1) {\n      // unary operators\n      var assoc = getAssociativity(this, parenthesis);\n      var operand = args[0].toString(options);\n\n      if (parens[0]) {\n        operand = '(' + operand + ')';\n      } // for example for \"not\", we want a space between operand and argument\n\n\n      var opIsNamed = /[a-zA-Z]+/.test(this.op);\n\n      if (assoc === 'right') {\n        // prefix operator\n        return this.op + (opIsNamed ? ' ' : '') + operand;\n      } else if (assoc === 'left') {\n        // postfix\n        return operand + (opIsNamed ? ' ' : '') + this.op;\n      } // fall back to postfix\n\n\n      return operand + this.op;\n    } else if (args.length === 2) {\n      var lhs = args[0].toString(options); // left hand side\n\n      var rhs = args[1].toString(options); // right hand side\n\n      if (parens[0]) {\n        // left hand side in parenthesis?\n        lhs = '(' + lhs + ')';\n      }\n\n      if (parens[1]) {\n        // right hand side in parenthesis?\n        rhs = '(' + rhs + ')';\n      }\n\n      if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {\n        return lhs + ' ' + rhs;\n      }\n\n      return lhs + ' ' + this.op + ' ' + rhs;\n    } else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {\n      var stringifiedArgs = args.map(function (arg, index) {\n        arg = arg.toString(options);\n\n        if (parens[index]) {\n          // put in parenthesis?\n          arg = '(' + arg + ')';\n        }\n\n        return arg;\n      });\n\n      if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {\n        return stringifiedArgs.join(' ');\n      }\n\n      return stringifiedArgs.join(' ' + this.op + ' ');\n    } else {\n      // fallback to formatting as a function call\n      return this.fn + '(' + this.args.join(', ') + ')';\n    }\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  OperatorNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'OperatorNode',\n      op: this.op,\n      fn: this.fn,\n      args: this.args,\n      implicit: this.implicit,\n      isPercentage: this.isPercentage\n    };\n  };\n  /**\n   * Instantiate an OperatorNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"OperatorNode\", \"op\": \"+\", \"fn\": \"add\", \"args\": [...], \"implicit\": false, \"isPercentage\":false}`,\n   *                       where mathjs is optional\n   * @returns {OperatorNode}\n   */\n\n\n  OperatorNode.fromJSON = function (json) {\n    return new OperatorNode(json.op, json.fn, json.args, json.implicit, json.isPercentage);\n  };\n  /**\n   * Get HTML representation.\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  OperatorNode.prototype.toHTML = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var implicit = options && options.implicit ? options.implicit : 'hide';\n    var args = this.args;\n    var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, false);\n\n    if (args.length === 1) {\n      // unary operators\n      var assoc = getAssociativity(this, parenthesis);\n      var operand = args[0].toHTML(options);\n\n      if (parens[0]) {\n        operand = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + operand + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n      }\n\n      if (assoc === 'right') {\n        // prefix operator\n        return '<span class=\"math-operator math-unary-operator math-lefthand-unary-operator\">' + escape(this.op) + '</span>' + operand;\n      } else {\n        // postfix when assoc === 'left' or undefined\n        return operand + '<span class=\"math-operator math-unary-operator math-righthand-unary-operator\">' + escape(this.op) + '</span>';\n      }\n    } else if (args.length === 2) {\n      // binary operatoes\n      var lhs = args[0].toHTML(options); // left hand side\n\n      var rhs = args[1].toHTML(options); // right hand side\n\n      if (parens[0]) {\n        // left hand side in parenthesis?\n        lhs = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + lhs + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n      }\n\n      if (parens[1]) {\n        // right hand side in parenthesis?\n        rhs = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + rhs + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n      }\n\n      if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {\n        return lhs + '<span class=\"math-operator math-binary-operator math-implicit-binary-operator\"></span>' + rhs;\n      }\n\n      return lhs + '<span class=\"math-operator math-binary-operator math-explicit-binary-operator\">' + escape(this.op) + '</span>' + rhs;\n    } else {\n      var stringifiedArgs = args.map(function (arg, index) {\n        arg = arg.toHTML(options);\n\n        if (parens[index]) {\n          // put in parenthesis?\n          arg = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + arg + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n        }\n\n        return arg;\n      });\n\n      if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {\n        if (this.implicit && this.getIdentifier() === 'OperatorNode:multiply' && implicit === 'hide') {\n          return stringifiedArgs.join('<span class=\"math-operator math-binary-operator math-implicit-binary-operator\"></span>');\n        }\n\n        return stringifiedArgs.join('<span class=\"math-operator math-binary-operator math-explicit-binary-operator\">' + escape(this.op) + '</span>');\n      } else {\n        // fallback to formatting as a function call\n        return '<span class=\"math-function\">' + escape(this.fn) + '</span><span class=\"math-paranthesis math-round-parenthesis\">(</span>' + stringifiedArgs.join('<span class=\"math-separator\">,</span>') + '<span class=\"math-paranthesis math-round-parenthesis\">)</span>';\n      }\n    }\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  OperatorNode.prototype._toTex = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var implicit = options && options.implicit ? options.implicit : 'hide';\n    var args = this.args;\n    var parens = calculateNecessaryParentheses(this, parenthesis, implicit, args, true);\n    var op = latexOperators[this.fn];\n    op = typeof op === 'undefined' ? this.op : op; // fall back to using this.op\n\n    if (args.length === 1) {\n      // unary operators\n      var assoc = getAssociativity(this, parenthesis);\n      var operand = args[0].toTex(options);\n\n      if (parens[0]) {\n        operand = \"\\\\left(\".concat(operand, \"\\\\right)\");\n      }\n\n      if (assoc === 'right') {\n        // prefix operator\n        return op + operand;\n      } else if (assoc === 'left') {\n        // postfix operator\n        return operand + op;\n      } // fall back to postfix\n\n\n      return operand + op;\n    } else if (args.length === 2) {\n      // binary operators\n      var lhs = args[0]; // left hand side\n\n      var lhsTex = lhs.toTex(options);\n\n      if (parens[0]) {\n        lhsTex = \"\\\\left(\".concat(lhsTex, \"\\\\right)\");\n      }\n\n      var rhs = args[1]; // right hand side\n\n      var rhsTex = rhs.toTex(options);\n\n      if (parens[1]) {\n        rhsTex = \"\\\\left(\".concat(rhsTex, \"\\\\right)\");\n      } // handle some exceptions (due to the way LaTeX works)\n\n\n      var lhsIdentifier;\n\n      if (parenthesis === 'keep') {\n        lhsIdentifier = lhs.getIdentifier();\n      } else {\n        // Ignore ParenthesisNodes if in 'keep' mode\n        lhsIdentifier = lhs.getContent().getIdentifier();\n      }\n\n      switch (this.getIdentifier()) {\n        case 'OperatorNode:divide':\n          // op contains '\\\\frac' at this point\n          return op + '{' + lhsTex + '}' + '{' + rhsTex + '}';\n\n        case 'OperatorNode:pow':\n          lhsTex = '{' + lhsTex + '}';\n          rhsTex = '{' + rhsTex + '}';\n\n          switch (lhsIdentifier) {\n            case 'ConditionalNode': //\n\n            case 'OperatorNode:divide':\n              lhsTex = \"\\\\left(\".concat(lhsTex, \"\\\\right)\");\n          }\n\n          break;\n\n        case 'OperatorNode:multiply':\n          if (this.implicit && implicit === 'hide') {\n            return lhsTex + '~' + rhsTex;\n          }\n\n      }\n\n      return lhsTex + op + rhsTex;\n    } else if (args.length > 2 && (this.getIdentifier() === 'OperatorNode:add' || this.getIdentifier() === 'OperatorNode:multiply')) {\n      var texifiedArgs = args.map(function (arg, index) {\n        arg = arg.toTex(options);\n\n        if (parens[index]) {\n          arg = \"\\\\left(\".concat(arg, \"\\\\right)\");\n        }\n\n        return arg;\n      });\n\n      if (this.getIdentifier() === 'OperatorNode:multiply' && this.implicit) {\n        return texifiedArgs.join('~');\n      }\n\n      return texifiedArgs.join(op);\n    } else {\n      // fall back to formatting as a function call\n      // as this is a fallback, it doesn't use\n      // fancy function names\n      return '\\\\mathrm{' + this.fn + '}\\\\left(' + args.map(function (arg) {\n        return arg.toTex(options);\n      }).join(',') + '\\\\right)';\n    }\n  };\n  /**\n   * Get identifier.\n   * @return {string}\n   */\n\n\n  OperatorNode.prototype.getIdentifier = function () {\n    return this.type + ':' + this.fn;\n  };\n\n  return OperatorNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isNode } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'ParenthesisNode';\nvar dependencies = ['Node'];\nexport var createParenthesisNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * @constructor ParenthesisNode\n   * @extends {Node}\n   * A parenthesis node describes manual parenthesis from the user input\n   * @param {Node} content\n   * @extends {Node}\n   */\n  function ParenthesisNode(content) {\n    if (!(this instanceof ParenthesisNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    } // validate input\n\n\n    if (!isNode(content)) {\n      throw new TypeError('Node expected for parameter \"content\"');\n    }\n\n    this.content = content;\n  }\n\n  ParenthesisNode.prototype = new Node();\n  ParenthesisNode.prototype.type = 'ParenthesisNode';\n  ParenthesisNode.prototype.isParenthesisNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  ParenthesisNode.prototype._compile = function (math, argNames) {\n    return this.content._compile(math, argNames);\n  };\n  /**\n   * Get the content of the current Node.\n   * @return {Node} content\n   * @override\n   **/\n\n\n  ParenthesisNode.prototype.getContent = function () {\n    return this.content.getContent();\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  ParenthesisNode.prototype.forEach = function (callback) {\n    callback(this.content, 'content', this);\n  };\n  /**\n   * Create a new ParenthesisNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node) : Node} callback\n   * @returns {ParenthesisNode} Returns a clone of the node\n   */\n\n\n  ParenthesisNode.prototype.map = function (callback) {\n    var content = callback(this.content, 'content', this);\n    return new ParenthesisNode(content);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {ParenthesisNode}\n   */\n\n\n  ParenthesisNode.prototype.clone = function () {\n    return new ParenthesisNode(this.content);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ParenthesisNode.prototype._toString = function (options) {\n    if (!options || options && !options.parenthesis || options && options.parenthesis === 'keep') {\n      return '(' + this.content.toString(options) + ')';\n    }\n\n    return this.content.toString(options);\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  ParenthesisNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'ParenthesisNode',\n      content: this.content\n    };\n  };\n  /**\n   * Instantiate an ParenthesisNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"ParenthesisNode\", \"content\": ...}`,\n   *                       where mathjs is optional\n   * @returns {ParenthesisNode}\n   */\n\n\n  ParenthesisNode.fromJSON = function (json) {\n    return new ParenthesisNode(json.content);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ParenthesisNode.prototype.toHTML = function (options) {\n    if (!options || options && !options.parenthesis || options && options.parenthesis === 'keep') {\n      return '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + this.content.toHTML(options) + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    return this.content.toHTML(options);\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  ParenthesisNode.prototype._toTex = function (options) {\n    if (!options || options && !options.parenthesis || options && options.parenthesis === 'keep') {\n      return \"\\\\left(\".concat(this.content.toTex(options), \"\\\\right)\");\n    }\n\n    return this.content.toTex(options);\n  };\n\n  return ParenthesisNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { isNode, isSymbolNode } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nimport { getPrecedence } from '../operators.js';\nvar name = 'RangeNode';\nvar dependencies = ['Node'];\nexport var createRangeNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * @constructor RangeNode\n   * @extends {Node}\n   * create a range\n   * @param {Node} start  included lower-bound\n   * @param {Node} end    included upper-bound\n   * @param {Node} [step] optional step\n   */\n  function RangeNode(start, end, step) {\n    if (!(this instanceof RangeNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    } // validate inputs\n\n\n    if (!isNode(start)) throw new TypeError('Node expected');\n    if (!isNode(end)) throw new TypeError('Node expected');\n    if (step && !isNode(step)) throw new TypeError('Node expected');\n    if (arguments.length > 3) throw new Error('Too many arguments');\n    this.start = start; // included lower-bound\n\n    this.end = end; // included upper-bound\n\n    this.step = step || null; // optional step\n  }\n\n  RangeNode.prototype = new Node();\n  RangeNode.prototype.type = 'RangeNode';\n  RangeNode.prototype.isRangeNode = true;\n  /**\n   * Check whether the RangeNode needs the `end` symbol to be defined.\n   * This end is the size of the Matrix in current dimension.\n   * @return {boolean}\n   */\n\n  RangeNode.prototype.needsEnd = function () {\n    // find all `end` symbols in this RangeNode\n    var endSymbols = this.filter(function (node) {\n      return isSymbolNode(node) && node.name === 'end';\n    });\n    return endSymbols.length > 0;\n  };\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n\n  RangeNode.prototype._compile = function (math, argNames) {\n    var range = math.range;\n\n    var evalStart = this.start._compile(math, argNames);\n\n    var evalEnd = this.end._compile(math, argNames);\n\n    if (this.step) {\n      var evalStep = this.step._compile(math, argNames);\n\n      return function evalRangeNode(scope, args, context) {\n        return range(evalStart(scope, args, context), evalEnd(scope, args, context), evalStep(scope, args, context));\n      };\n    } else {\n      return function evalRangeNode(scope, args, context) {\n        return range(evalStart(scope, args, context), evalEnd(scope, args, context));\n      };\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  RangeNode.prototype.forEach = function (callback) {\n    callback(this.start, 'start', this);\n    callback(this.end, 'end', this);\n\n    if (this.step) {\n      callback(this.step, 'step', this);\n    }\n  };\n  /**\n   * Create a new RangeNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {RangeNode} Returns a transformed copy of the node\n   */\n\n\n  RangeNode.prototype.map = function (callback) {\n    return new RangeNode(this._ifNode(callback(this.start, 'start', this)), this._ifNode(callback(this.end, 'end', this)), this.step && this._ifNode(callback(this.step, 'step', this)));\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {RangeNode}\n   */\n\n\n  RangeNode.prototype.clone = function () {\n    return new RangeNode(this.start, this.end, this.step && this.step);\n  };\n  /**\n   * Calculate the necessary parentheses\n   * @param {Node} node\n   * @param {string} parenthesis\n   * @return {Object} parentheses\n   * @private\n   */\n\n\n  function calculateNecessaryParentheses(node, parenthesis) {\n    var precedence = getPrecedence(node, parenthesis);\n    var parens = {};\n    var startPrecedence = getPrecedence(node.start, parenthesis);\n    parens.start = startPrecedence !== null && startPrecedence <= precedence || parenthesis === 'all';\n\n    if (node.step) {\n      var stepPrecedence = getPrecedence(node.step, parenthesis);\n      parens.step = stepPrecedence !== null && stepPrecedence <= precedence || parenthesis === 'all';\n    }\n\n    var endPrecedence = getPrecedence(node.end, parenthesis);\n    parens.end = endPrecedence !== null && endPrecedence <= precedence || parenthesis === 'all';\n    return parens;\n  }\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  RangeNode.prototype._toString = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var parens = calculateNecessaryParentheses(this, parenthesis); // format string as start:step:stop\n\n    var str;\n    var start = this.start.toString(options);\n\n    if (parens.start) {\n      start = '(' + start + ')';\n    }\n\n    str = start;\n\n    if (this.step) {\n      var step = this.step.toString(options);\n\n      if (parens.step) {\n        step = '(' + step + ')';\n      }\n\n      str += ':' + step;\n    }\n\n    var end = this.end.toString(options);\n\n    if (parens.end) {\n      end = '(' + end + ')';\n    }\n\n    str += ':' + end;\n    return str;\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  RangeNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'RangeNode',\n      start: this.start,\n      end: this.end,\n      step: this.step\n    };\n  };\n  /**\n   * Instantiate an RangeNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"RangeNode\", \"start\": ..., \"end\": ..., \"step\": ...}`,\n   *                       where mathjs is optional\n   * @returns {RangeNode}\n   */\n\n\n  RangeNode.fromJSON = function (json) {\n    return new RangeNode(json.start, json.end, json.step);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  RangeNode.prototype.toHTML = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var parens = calculateNecessaryParentheses(this, parenthesis); // format string as start:step:stop\n\n    var str;\n    var start = this.start.toHTML(options);\n\n    if (parens.start) {\n      start = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + start + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    str = start;\n\n    if (this.step) {\n      var step = this.step.toHTML(options);\n\n      if (parens.step) {\n        step = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + step + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n      }\n\n      str += '<span class=\"math-operator math-range-operator\">:</span>' + step;\n    }\n\n    var end = this.end.toHTML(options);\n\n    if (parens.end) {\n      end = '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + end + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>';\n    }\n\n    str += '<span class=\"math-operator math-range-operator\">:</span>' + end;\n    return str;\n  };\n  /**\n   * Get LaTeX representation\n   * @params {Object} options\n   * @return {string} str\n   */\n\n\n  RangeNode.prototype._toTex = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var parens = calculateNecessaryParentheses(this, parenthesis);\n    var str = this.start.toTex(options);\n\n    if (parens.start) {\n      str = \"\\\\left(\".concat(str, \"\\\\right)\");\n    }\n\n    if (this.step) {\n      var step = this.step.toTex(options);\n\n      if (parens.step) {\n        step = \"\\\\left(\".concat(step, \"\\\\right)\");\n      }\n\n      str += ':' + step;\n    }\n\n    var end = this.end.toTex(options);\n\n    if (parens.end) {\n      end = \"\\\\left(\".concat(end, \"\\\\right)\");\n    }\n\n    str += ':' + end;\n    return str;\n  };\n\n  return RangeNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { getPrecedence } from '../operators.js';\nimport { escape } from '../../utils/string.js';\nimport { getSafeProperty } from '../../utils/customs.js';\nimport { latexOperators } from '../../utils/latex.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'RelationalNode';\nvar dependencies = ['Node'];\nexport var createRelationalNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    Node\n  } = _ref;\n\n  /**\n   * A node representing a chained conditional expression, such as 'x > y > z'\n   *\n   * @param {String[]} conditionals   An array of conditional operators used to compare the parameters\n   * @param {Node[]} params   The parameters that will be compared\n   *\n   * @constructor RelationalNode\n   * @extends {Node}\n   */\n  function RelationalNode(conditionals, params) {\n    if (!(this instanceof RelationalNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    if (!Array.isArray(conditionals)) throw new TypeError('Parameter conditionals must be an array');\n    if (!Array.isArray(params)) throw new TypeError('Parameter params must be an array');\n    if (conditionals.length !== params.length - 1) throw new TypeError('Parameter params must contain exactly one more element than parameter conditionals');\n    this.conditionals = conditionals;\n    this.params = params;\n  }\n\n  RelationalNode.prototype = new Node();\n  RelationalNode.prototype.type = 'RelationalNode';\n  RelationalNode.prototype.isRelationalNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  RelationalNode.prototype._compile = function (math, argNames) {\n    var self = this;\n    var compiled = this.params.map(p => p._compile(math, argNames));\n    return function evalRelationalNode(scope, args, context) {\n      var evalLhs;\n      var evalRhs = compiled[0](scope, args, context);\n\n      for (var i = 0; i < self.conditionals.length; i++) {\n        evalLhs = evalRhs;\n        evalRhs = compiled[i + 1](scope, args, context);\n        var condFn = getSafeProperty(math, self.conditionals[i]);\n\n        if (!condFn(evalLhs, evalRhs)) {\n          return false;\n        }\n      }\n\n      return true;\n    };\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  RelationalNode.prototype.forEach = function (callback) {\n    this.params.forEach((n, i) => callback(n, 'params[' + i + ']', this), this);\n  };\n  /**\n   * Create a new RelationalNode having its childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {RelationalNode} Returns a transformed copy of the node\n   */\n\n\n  RelationalNode.prototype.map = function (callback) {\n    return new RelationalNode(this.conditionals.slice(), this.params.map((n, i) => this._ifNode(callback(n, 'params[' + i + ']', this)), this));\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {RelationalNode}\n   */\n\n\n  RelationalNode.prototype.clone = function () {\n    return new RelationalNode(this.conditionals, this.params);\n  };\n  /**\n   * Get string representation.\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  RelationalNode.prototype._toString = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var precedence = getPrecedence(this, parenthesis);\n    var paramStrings = this.params.map(function (p, index) {\n      var paramPrecedence = getPrecedence(p, parenthesis);\n      return parenthesis === 'all' || paramPrecedence !== null && paramPrecedence <= precedence ? '(' + p.toString(options) + ')' : p.toString(options);\n    });\n    var operatorMap = {\n      equal: '==',\n      unequal: '!=',\n      smaller: '<',\n      larger: '>',\n      smallerEq: '<=',\n      largerEq: '>='\n    };\n    var ret = paramStrings[0];\n\n    for (var i = 0; i < this.conditionals.length; i++) {\n      ret += ' ' + operatorMap[this.conditionals[i]] + ' ' + paramStrings[i + 1];\n    }\n\n    return ret;\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  RelationalNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'RelationalNode',\n      conditionals: this.conditionals,\n      params: this.params\n    };\n  };\n  /**\n   * Instantiate a RelationalNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"RelationalNode\", \"condition\": ..., \"trueExpr\": ..., \"falseExpr\": ...}`,\n   *                       where mathjs is optional\n   * @returns {RelationalNode}\n   */\n\n\n  RelationalNode.fromJSON = function (json) {\n    return new RelationalNode(json.conditionals, json.params);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  RelationalNode.prototype.toHTML = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var precedence = getPrecedence(this, parenthesis);\n    var paramStrings = this.params.map(function (p, index) {\n      var paramPrecedence = getPrecedence(p, parenthesis);\n      return parenthesis === 'all' || paramPrecedence !== null && paramPrecedence <= precedence ? '<span class=\"math-parenthesis math-round-parenthesis\">(</span>' + p.toHTML(options) + '<span class=\"math-parenthesis math-round-parenthesis\">)</span>' : p.toHTML(options);\n    });\n    var operatorMap = {\n      equal: '==',\n      unequal: '!=',\n      smaller: '<',\n      larger: '>',\n      smallerEq: '<=',\n      largerEq: '>='\n    };\n    var ret = paramStrings[0];\n\n    for (var i = 0; i < this.conditionals.length; i++) {\n      ret += '<span class=\"math-operator math-binary-operator math-explicit-binary-operator\">' + escape(operatorMap[this.conditionals[i]]) + '</span>' + paramStrings[i + 1];\n    }\n\n    return ret;\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  RelationalNode.prototype._toTex = function (options) {\n    var parenthesis = options && options.parenthesis ? options.parenthesis : 'keep';\n    var precedence = getPrecedence(this, parenthesis);\n    var paramStrings = this.params.map(function (p, index) {\n      var paramPrecedence = getPrecedence(p, parenthesis);\n      return parenthesis === 'all' || paramPrecedence !== null && paramPrecedence <= precedence ? '\\\\left(' + p.toTex(options) + '\\right)' : p.toTex(options);\n    });\n    var ret = paramStrings[0];\n\n    for (var i = 0; i < this.conditionals.length; i++) {\n      ret += latexOperators[this.conditionals[i]] + paramStrings[i + 1];\n    }\n\n    return ret;\n  };\n\n  return RelationalNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { escape } from '../../utils/string.js';\nimport { getSafeProperty } from '../../utils/customs.js';\nimport { factory } from '../../utils/factory.js';\nimport { toSymbol } from '../../utils/latex.js';\nvar name = 'SymbolNode';\nvar dependencies = ['math', '?Unit', 'Node'];\nexport var createSymbolNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    math,\n    Unit,\n    Node\n  } = _ref;\n\n  /**\n   * Check whether some name is a valueless unit like \"inch\".\n   * @param {string} name\n   * @return {boolean}\n   */\n  function isValuelessUnit(name) {\n    return Unit ? Unit.isValuelessUnit(name) : false;\n  }\n  /**\n   * @constructor SymbolNode\n   * @extends {Node}\n   * A symbol node can hold and resolve a symbol\n   * @param {string} name\n   * @extends {Node}\n   */\n\n\n  function SymbolNode(name) {\n    if (!(this instanceof SymbolNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    } // validate input\n\n\n    if (typeof name !== 'string') throw new TypeError('String expected for parameter \"name\"');\n    this.name = name;\n  }\n\n  SymbolNode.prototype = new Node();\n  SymbolNode.prototype.type = 'SymbolNode';\n  SymbolNode.prototype.isSymbolNode = true;\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n  SymbolNode.prototype._compile = function (math, argNames) {\n    var name = this.name;\n\n    if (argNames[name] === true) {\n      // this is a FunctionAssignment argument\n      // (like an x when inside the expression of a function assignment `f(x) = ...`)\n      return function (scope, args, context) {\n        return args[name];\n      };\n    } else if (name in math) {\n      return function (scope, args, context) {\n        return scope.has(name) ? scope.get(name) : getSafeProperty(math, name);\n      };\n    } else {\n      var isUnit = isValuelessUnit(name);\n      return function (scope, args, context) {\n        return scope.has(name) ? scope.get(name) : isUnit ? new Unit(null, name) : SymbolNode.onUndefinedSymbol(name);\n      };\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  SymbolNode.prototype.forEach = function (callback) {// nothing to do, we don't have childs\n  };\n  /**\n   * Create a new SymbolNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node) : Node} callback\n   * @returns {SymbolNode} Returns a clone of the node\n   */\n\n\n  SymbolNode.prototype.map = function (callback) {\n    return this.clone();\n  };\n  /**\n   * Throws an error 'Undefined symbol {name}'\n   * @param {string} name\n   */\n\n\n  SymbolNode.onUndefinedSymbol = function (name) {\n    throw new Error('Undefined symbol ' + name);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {SymbolNode}\n   */\n\n\n  SymbolNode.prototype.clone = function () {\n    return new SymbolNode(this.name);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  SymbolNode.prototype._toString = function (options) {\n    return this.name;\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  SymbolNode.prototype.toHTML = function (options) {\n    var name = escape(this.name);\n\n    if (name === 'true' || name === 'false') {\n      return '<span class=\"math-symbol math-boolean\">' + name + '</span>';\n    } else if (name === 'i') {\n      return '<span class=\"math-symbol math-imaginary-symbol\">' + name + '</span>';\n    } else if (name === 'Infinity') {\n      return '<span class=\"math-symbol math-infinity-symbol\">' + name + '</span>';\n    } else if (name === 'NaN') {\n      return '<span class=\"math-symbol math-nan-symbol\">' + name + '</span>';\n    } else if (name === 'null') {\n      return '<span class=\"math-symbol math-null-symbol\">' + name + '</span>';\n    } else if (name === 'undefined') {\n      return '<span class=\"math-symbol math-undefined-symbol\">' + name + '</span>';\n    }\n\n    return '<span class=\"math-symbol\">' + name + '</span>';\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  SymbolNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'SymbolNode',\n      name: this.name\n    };\n  };\n  /**\n   * Instantiate a SymbolNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"SymbolNode\", name: \"x\"}`,\n   *                       where mathjs is optional\n   * @returns {SymbolNode}\n   */\n\n\n  SymbolNode.fromJSON = function (json) {\n    return new SymbolNode(json.name);\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n\n  SymbolNode.prototype._toTex = function (options) {\n    var isUnit = false;\n\n    if (typeof math[this.name] === 'undefined' && isValuelessUnit(this.name)) {\n      isUnit = true;\n    }\n\n    var symbol = toSymbol(this.name, isUnit);\n\n    if (symbol[0] === '\\\\') {\n      // no space needed if the symbol starts with '\\'\n      return symbol;\n    } // the space prevents symbols from breaking stuff like '\\cdot' if it's written right before the symbol\n\n\n    return ' ' + symbol;\n  };\n\n  return SymbolNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import { createEmptyMap, assign } from './map.js';\n/**\n * Create a new scope which can access the parent scope,\n * but does not affect it when written. This is suitable for variable definitions\n * within a block node, or function definition.\n *\n * If parent scope has a createSubScope method, it delegates to that. Otherwise,\n * creates an empty map, and copies the parent scope to it, adding in\n * the remaining `args`.\n *\n * @param {Map} parentScope\n * @param  {...any} args\n * @returns {Map}\n */\n\nexport function createSubScope(parentScope) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  if (typeof parentScope.createSubScope === 'function') {\n    return assign(parentScope.createSubScope(), ...args);\n  }\n\n  return assign(createEmptyMap(), parentScope, ...args);\n}", "import { isAccessorNode, isFunctionAssignmentNode, isIndexNode, isNode, isSymbolNode } from '../../utils/is.js';\nimport { escape, format } from '../../utils/string.js';\nimport { hasOwnProperty } from '../../utils/object.js';\nimport { getSafeProperty, validateSafeMethod } from '../../utils/customs.js';\nimport { createSubScope } from '../../utils/scope.js';\nimport { factory } from '../../utils/factory.js';\nimport { defaultTemplate, latexFunctions } from '../../utils/latex.js';\nvar name = 'FunctionNode';\nvar dependencies = ['math', 'Node', 'SymbolNode'];\nexport var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    math,\n    Node,\n    SymbolNode\n  } = _ref;\n\n  /**\n   * @constructor FunctionNode\n   * @extends {./Node}\n   * invoke a list with arguments on a node\n   * @param {./Node | string} fn Node resolving with a function on which to invoke\n   *                             the arguments, typically a SymboNode or AccessorNode\n   * @param {./Node[]} args\n   */\n  function FunctionNode(fn, args) {\n    if (!(this instanceof FunctionNode)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    if (typeof fn === 'string') {\n      fn = new SymbolNode(fn);\n    } // validate input\n\n\n    if (!isNode(fn)) throw new TypeError('Node expected as parameter \"fn\"');\n\n    if (!Array.isArray(args) || !args.every(isNode)) {\n      throw new TypeError('Array containing Nodes expected for parameter \"args\"');\n    }\n\n    this.fn = fn;\n    this.args = args || []; // readonly property name\n\n    Object.defineProperty(this, 'name', {\n      get: function () {\n        return this.fn.name || '';\n      }.bind(this),\n      set: function set() {\n        throw new Error('Cannot assign a new name, name is read-only');\n      }\n    });\n  }\n\n  FunctionNode.prototype = new Node();\n  FunctionNode.prototype.type = 'FunctionNode';\n  FunctionNode.prototype.isFunctionNode = true;\n  /* format to fixed length */\n\n  var strin = entity => format(entity, {\n    truncate: 78\n  });\n  /**\n   * Compile a node into a JavaScript function.\n   * This basically pre-calculates as much as possible and only leaves open\n   * calculations which depend on a dynamic scope with variables.\n   * @param {Object} math     Math.js namespace with functions and constants.\n   * @param {Object} argNames An object with argument names as key and `true`\n   *                          as value. Used in the SymbolNode to optimize\n   *                          for arguments from user assigned functions\n   *                          (see FunctionAssignmentNode) or special symbols\n   *                          like `end` (see IndexNode).\n   * @return {function} Returns a function which can be called like:\n   *                        evalNode(scope: Object, args: Object, context: *)\n   */\n\n\n  FunctionNode.prototype._compile = function (math, argNames) {\n    if (!(this instanceof FunctionNode)) {\n      throw new TypeError('No valid FunctionNode');\n    } // compile arguments\n\n\n    var evalArgs = this.args.map(arg => arg._compile(math, argNames));\n\n    if (isSymbolNode(this.fn)) {\n      var _name = this.fn.name;\n\n      if (!argNames[_name]) {\n        // we can statically determine whether the function has an rawArgs property\n        var fn = _name in math ? getSafeProperty(math, _name) : undefined;\n        var isRaw = typeof fn === 'function' && fn.rawArgs === true;\n\n        var resolveFn = scope => {\n          var value;\n\n          if (scope.has(_name)) {\n            value = scope.get(_name);\n          } else if (_name in math) {\n            value = getSafeProperty(math, _name);\n          } else {\n            return FunctionNode.onUndefinedFunction(_name);\n          }\n\n          if (typeof value === 'function') {\n            return value;\n          }\n\n          throw new TypeError(\"'\".concat(_name, \"' is not a function; its value is:\\n  \").concat(strin(value)));\n        };\n\n        if (isRaw) {\n          // pass unevaluated parameters (nodes) to the function\n          // \"raw\" evaluation\n          var rawArgs = this.args;\n          return function evalFunctionNode(scope, args, context) {\n            var fn = resolveFn(scope);\n            return fn(rawArgs, math, createSubScope(scope, args), scope);\n          };\n        } else {\n          // \"regular\" evaluation\n          switch (evalArgs.length) {\n            case 0:\n              return function evalFunctionNode(scope, args, context) {\n                var fn = resolveFn(scope);\n                return fn();\n              };\n\n            case 1:\n              return function evalFunctionNode(scope, args, context) {\n                var fn = resolveFn(scope);\n                var evalArg0 = evalArgs[0];\n                return fn(evalArg0(scope, args, context));\n              };\n\n            case 2:\n              return function evalFunctionNode(scope, args, context) {\n                var fn = resolveFn(scope);\n                var evalArg0 = evalArgs[0];\n                var evalArg1 = evalArgs[1];\n                return fn(evalArg0(scope, args, context), evalArg1(scope, args, context));\n              };\n\n            default:\n              return function evalFunctionNode(scope, args, context) {\n                var fn = resolveFn(scope);\n                var values = evalArgs.map(evalArg => evalArg(scope, args, context));\n                return fn(...values);\n              };\n          }\n        }\n      } else {\n        // the function symbol is an argName\n        var _rawArgs = this.args;\n        return function evalFunctionNode(scope, args, context) {\n          var fn = args[_name];\n\n          if (typeof fn !== 'function') {\n            throw new TypeError(\"Argument '\".concat(_name, \"' was not a function; received: \").concat(strin(fn)));\n          }\n\n          if (fn.rawArgs) {\n            return fn(_rawArgs, math, createSubScope(scope, args), scope); // \"raw\" evaluation\n          } else {\n            var values = evalArgs.map(evalArg => evalArg(scope, args, context));\n            return fn.apply(fn, values);\n          }\n        };\n      }\n    } else if (isAccessorNode(this.fn) && isIndexNode(this.fn.index) && this.fn.index.isObjectProperty()) {\n      // execute the function with the right context: the object of the AccessorNode\n      var evalObject = this.fn.object._compile(math, argNames);\n\n      var prop = this.fn.index.getObjectProperty();\n      var _rawArgs2 = this.args;\n      return function evalFunctionNode(scope, args, context) {\n        var object = evalObject(scope, args, context);\n        validateSafeMethod(object, prop);\n        var isRaw = object[prop] && object[prop].rawArgs;\n\n        if (isRaw) {\n          return object[prop](_rawArgs2, math, createSubScope(scope, args), scope); // \"raw\" evaluation\n        } else {\n          // \"regular\" evaluation\n          var values = evalArgs.map(evalArg => evalArg(scope, args, context));\n          return object[prop].apply(object, values);\n        }\n      };\n    } else {\n      // node.fn.isAccessorNode && !node.fn.index.isObjectProperty()\n      // we have to dynamically determine whether the function has a rawArgs property\n      var fnExpr = this.fn.toString();\n\n      var evalFn = this.fn._compile(math, argNames);\n\n      var _rawArgs3 = this.args;\n      return function evalFunctionNode(scope, args, context) {\n        var fn = evalFn(scope, args, context);\n\n        if (typeof fn !== 'function') {\n          throw new TypeError(\"Expression '\".concat(fnExpr, \"' did not evaluate to a function; value is:\") + \"\\n  \".concat(strin(fn)));\n        }\n\n        if (fn.rawArgs) {\n          return fn(_rawArgs3, math, createSubScope(scope, args), scope); // \"raw\" evaluation\n        } else {\n          // \"regular\" evaluation\n          var values = evalArgs.map(evalArg => evalArg(scope, args, context));\n          return fn.apply(fn, values);\n        }\n      };\n    }\n  };\n  /**\n   * Execute a callback for each of the child nodes of this node\n   * @param {function(child: Node, path: string, parent: Node)} callback\n   */\n\n\n  FunctionNode.prototype.forEach = function (callback) {\n    callback(this.fn, 'fn', this);\n\n    for (var i = 0; i < this.args.length; i++) {\n      callback(this.args[i], 'args[' + i + ']', this);\n    }\n  };\n  /**\n   * Create a new FunctionNode having it's childs be the results of calling\n   * the provided callback function for each of the childs of the original node.\n   * @param {function(child: Node, path: string, parent: Node): Node} callback\n   * @returns {FunctionNode} Returns a transformed copy of the node\n   */\n\n\n  FunctionNode.prototype.map = function (callback) {\n    var fn = this._ifNode(callback(this.fn, 'fn', this));\n\n    var args = [];\n\n    for (var i = 0; i < this.args.length; i++) {\n      args[i] = this._ifNode(callback(this.args[i], 'args[' + i + ']', this));\n    }\n\n    return new FunctionNode(fn, args);\n  };\n  /**\n   * Create a clone of this node, a shallow copy\n   * @return {FunctionNode}\n   */\n\n\n  FunctionNode.prototype.clone = function () {\n    return new FunctionNode(this.fn, this.args.slice(0));\n  };\n  /**\n   * Throws an error 'Undefined function {name}'\n   * @param {string} name\n   */\n\n\n  FunctionNode.onUndefinedFunction = function (name) {\n    throw new Error('Undefined function ' + name);\n  }; // backup Node's toString function\n  // @private\n\n\n  var nodeToString = FunctionNode.prototype.toString;\n  /**\n   * Get string representation. (wrapper function)\n   * This overrides parts of Node's toString function.\n   * If callback is an object containing callbacks, it\n   * calls the correct callback for the current node,\n   * otherwise it falls back to calling Node's toString\n   * function.\n   *\n   * @param {Object} options\n   * @return {string} str\n   * @override\n   */\n\n  FunctionNode.prototype.toString = function (options) {\n    var customString;\n    var name = this.fn.toString(options);\n\n    if (options && typeof options.handler === 'object' && hasOwnProperty(options.handler, name)) {\n      // callback is a map of callback functions\n      customString = options.handler[name](this, options);\n    }\n\n    if (typeof customString !== 'undefined') {\n      return customString;\n    } // fall back to Node's toString\n\n\n    return nodeToString.call(this, options);\n  };\n  /**\n   * Get string representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  FunctionNode.prototype._toString = function (options) {\n    var args = this.args.map(function (arg) {\n      return arg.toString(options);\n    });\n    var fn = isFunctionAssignmentNode(this.fn) ? '(' + this.fn.toString(options) + ')' : this.fn.toString(options); // format the arguments like \"add(2, 4.2)\"\n\n    return fn + '(' + args.join(', ') + ')';\n  };\n  /**\n   * Get a JSON representation of the node\n   * @returns {Object}\n   */\n\n\n  FunctionNode.prototype.toJSON = function () {\n    return {\n      mathjs: 'FunctionNode',\n      fn: this.fn,\n      args: this.args\n    };\n  };\n  /**\n   * Instantiate an AssignmentNode from its JSON representation\n   * @param {Object} json  An object structured like\n   *                       `{\"mathjs\": \"FunctionNode\", fn: ..., args: ...}`,\n   *                       where mathjs is optional\n   * @returns {FunctionNode}\n   */\n\n\n  FunctionNode.fromJSON = function (json) {\n    return new FunctionNode(json.fn, json.args);\n  };\n  /**\n   * Get HTML representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  FunctionNode.prototype.toHTML = function (options) {\n    var args = this.args.map(function (arg) {\n      return arg.toHTML(options);\n    }); // format the arguments like \"add(2, 4.2)\"\n\n    return '<span class=\"math-function\">' + escape(this.fn) + '</span><span class=\"math-paranthesis math-round-parenthesis\">(</span>' + args.join('<span class=\"math-separator\">,</span>') + '<span class=\"math-paranthesis math-round-parenthesis\">)</span>';\n  };\n  /*\n   * Expand a LaTeX template\n   *\n   * @param {string} template\n   * @param {Node} node\n   * @param {Object} options\n   * @private\n   **/\n\n\n  function expandTemplate(template, node, options) {\n    var latex = ''; // Match everything of the form ${identifier} or ${identifier[2]} or $$\n    // while submatching identifier and 2 (in the second case)\n\n    var regex = /\\$(?:\\{([a-z_][a-z_0-9]*)(?:\\[([0-9]+)\\])?\\}|\\$)/gi;\n    var inputPos = 0; // position in the input string\n\n    var match;\n\n    while ((match = regex.exec(template)) !== null) {\n      // go through all matches\n      // add everything in front of the match to the LaTeX string\n      latex += template.substring(inputPos, match.index);\n      inputPos = match.index;\n\n      if (match[0] === '$$') {\n        // escaped dollar sign\n        latex += '$';\n        inputPos++;\n      } else {\n        // template parameter\n        inputPos += match[0].length;\n        var property = node[match[1]];\n\n        if (!property) {\n          throw new ReferenceError('Template: Property ' + match[1] + ' does not exist.');\n        }\n\n        if (match[2] === undefined) {\n          // no square brackets\n          switch (typeof property) {\n            case 'string':\n              latex += property;\n              break;\n\n            case 'object':\n              if (isNode(property)) {\n                latex += property.toTex(options);\n              } else if (Array.isArray(property)) {\n                // make array of Nodes into comma separated list\n                latex += property.map(function (arg, index) {\n                  if (isNode(arg)) {\n                    return arg.toTex(options);\n                  }\n\n                  throw new TypeError('Template: ' + match[1] + '[' + index + '] is not a Node.');\n                }).join(',');\n              } else {\n                throw new TypeError('Template: ' + match[1] + ' has to be a Node, String or array of Nodes');\n              }\n\n              break;\n\n            default:\n              throw new TypeError('Template: ' + match[1] + ' has to be a Node, String or array of Nodes');\n          }\n        } else {\n          // with square brackets\n          if (isNode(property[match[2]] && property[match[2]])) {\n            latex += property[match[2]].toTex(options);\n          } else {\n            throw new TypeError('Template: ' + match[1] + '[' + match[2] + '] is not a Node.');\n          }\n        }\n      }\n    }\n\n    latex += template.slice(inputPos); // append rest of the template\n\n    return latex;\n  } // backup Node's toTex function\n  // @private\n\n\n  var nodeToTex = FunctionNode.prototype.toTex;\n  /**\n   * Get LaTeX representation. (wrapper function)\n   * This overrides parts of Node's toTex function.\n   * If callback is an object containing callbacks, it\n   * calls the correct callback for the current node,\n   * otherwise it falls back to calling Node's toTex\n   * function.\n   *\n   * @param {Object} options\n   * @return {string}\n   */\n\n  FunctionNode.prototype.toTex = function (options) {\n    var customTex;\n\n    if (options && typeof options.handler === 'object' && hasOwnProperty(options.handler, this.name)) {\n      // callback is a map of callback functions\n      customTex = options.handler[this.name](this, options);\n    }\n\n    if (typeof customTex !== 'undefined') {\n      return customTex;\n    } // fall back to Node's toTex\n\n\n    return nodeToTex.call(this, options);\n  };\n  /**\n   * Get LaTeX representation\n   * @param {Object} options\n   * @return {string} str\n   */\n\n\n  FunctionNode.prototype._toTex = function (options) {\n    var args = this.args.map(function (arg) {\n      // get LaTeX of the arguments\n      return arg.toTex(options);\n    });\n    var latexConverter;\n\n    if (latexFunctions[this.name]) {\n      latexConverter = latexFunctions[this.name];\n    } // toTex property on the function itself\n\n\n    if (math[this.name] && (typeof math[this.name].toTex === 'function' || typeof math[this.name].toTex === 'object' || typeof math[this.name].toTex === 'string')) {\n      // .toTex is a callback function\n      latexConverter = math[this.name].toTex;\n    }\n\n    var customToTex;\n\n    switch (typeof latexConverter) {\n      case 'function':\n        // a callback function\n        customToTex = latexConverter(this, options);\n        break;\n\n      case 'string':\n        // a template string\n        customToTex = expandTemplate(latexConverter, this, options);\n        break;\n\n      case 'object':\n        // an object with different \"converters\" for different numbers of arguments\n        switch (typeof latexConverter[args.length]) {\n          case 'function':\n            customToTex = latexConverter[args.length](this, options);\n            break;\n\n          case 'string':\n            customToTex = expandTemplate(latexConverter[args.length], this, options);\n            break;\n        }\n\n    }\n\n    if (typeof customToTex !== 'undefined') {\n      return customToTex;\n    }\n\n    return expandTemplate(defaultTemplate, this, options);\n  };\n  /**\n   * Get identifier.\n   * @return {string}\n   */\n\n\n  FunctionNode.prototype.getIdentifier = function () {\n    return this.type + ':' + this.name;\n  };\n\n  return FunctionNode;\n}, {\n  isClass: true,\n  isNode: true\n});", "import _extends from \"@babel/runtime/helpers/extends\";\nimport { factory } from '../utils/factory.js';\nimport { isAccessorNode, isConstantNode, isFunctionNode, isOperatorNode, isSymbolNode } from '../utils/is.js';\nimport { deepMap } from '../utils/collection.js';\nimport { hasOwnProperty } from '../utils/object.js';\nvar name = 'parse';\nvar dependencies = ['typed', 'numeric', 'config', 'AccessorNode', 'ArrayNode', 'AssignmentNode', 'BlockNode', 'ConditionalNode', 'ConstantNode', 'FunctionAssignmentNode', 'FunctionNode', 'IndexNode', 'ObjectNode', 'OperatorNode', 'ParenthesisNode', 'RangeNode', 'RelationalNode', 'SymbolNode'];\nexport var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    numeric,\n    config,\n    AccessorNode,\n    ArrayNode,\n    AssignmentNode,\n    BlockNode,\n    ConditionalNode,\n    ConstantNode,\n    FunctionAssignmentNode,\n    FunctionNode,\n    IndexNode,\n    ObjectNode,\n    OperatorNode,\n    ParenthesisNode,\n    RangeNode,\n    RelationalNode,\n    SymbolNode\n  } = _ref;\n\n  /**\n   * Parse an expression. Returns a node tree, which can be evaluated by\n   * invoking node.evaluate().\n   *\n   * Note the evaluating arbitrary expressions may involve security risks,\n   * see [https://mathjs.org/docs/expressions/security.html](https://mathjs.org/docs/expressions/security.html) for more information.\n   *\n   * Syntax:\n   *\n   *     math.parse(expr)\n   *     math.parse(expr, options)\n   *     math.parse([expr1, expr2, expr3, ...])\n   *     math.parse([expr1, expr2, expr3, ...], options)\n   *\n   * Example:\n   *\n   *     const node1 = math.parse('sqrt(3^2 + 4^2)')\n   *     node1.compile().evaluate() // 5\n   *\n   *     let scope = {a:3, b:4}\n   *     const node2 = math.parse('a * b') // 12\n   *     const code2 = node2.compile()\n   *     code2.evaluate(scope) // 12\n   *     scope.a = 5\n   *     code2.evaluate(scope) // 20\n   *\n   *     const nodes = math.parse(['a = 3', 'b = 4', 'a * b'])\n   *     nodes[2].compile().evaluate() // 12\n   *\n   * See also:\n   *\n   *     evaluate, compile\n   *\n   * @param {string | string[] | Matrix} expr          Expression to be parsed\n   * @param {{nodes: Object<string, Node>}} [options]  Available options:\n   *                                                   - `nodes` a set of custom nodes\n   * @return {Node | Node[]} node\n   * @throws {Error}\n   */\n  var parse = typed(name, {\n    string: function string(expression) {\n      return parseStart(expression, {});\n    },\n    'Array | Matrix': function ArrayMatrix(expressions) {\n      return parseMultiple(expressions, {});\n    },\n    'string, Object': function stringObject(expression, options) {\n      var extraNodes = options.nodes !== undefined ? options.nodes : {};\n      return parseStart(expression, extraNodes);\n    },\n    'Array | Matrix, Object': parseMultiple\n  });\n\n  function parseMultiple(expressions) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var extraNodes = options.nodes !== undefined ? options.nodes : {}; // parse an array or matrix with expressions\n\n    return deepMap(expressions, function (elem) {\n      if (typeof elem !== 'string') throw new TypeError('String expected');\n      return parseStart(elem, extraNodes);\n    });\n  } // token types enumeration\n\n\n  var TOKENTYPE = {\n    NULL: 0,\n    DELIMITER: 1,\n    NUMBER: 2,\n    SYMBOL: 3,\n    UNKNOWN: 4\n  }; // map with all delimiters\n\n  var DELIMITERS = {\n    ',': true,\n    '(': true,\n    ')': true,\n    '[': true,\n    ']': true,\n    '{': true,\n    '}': true,\n    '\"': true,\n    '\\'': true,\n    ';': true,\n    '+': true,\n    '-': true,\n    '*': true,\n    '.*': true,\n    '/': true,\n    './': true,\n    '%': true,\n    '^': true,\n    '.^': true,\n    '~': true,\n    '!': true,\n    '&': true,\n    '|': true,\n    '^|': true,\n    '=': true,\n    ':': true,\n    '?': true,\n    '==': true,\n    '!=': true,\n    '<': true,\n    '>': true,\n    '<=': true,\n    '>=': true,\n    '<<': true,\n    '>>': true,\n    '>>>': true\n  }; // map with all named delimiters\n\n  var NAMED_DELIMITERS = {\n    mod: true,\n    to: true,\n    in: true,\n    and: true,\n    xor: true,\n    or: true,\n    not: true\n  };\n  var CONSTANTS = {\n    true: true,\n    false: false,\n    null: null,\n    undefined\n  };\n  var NUMERIC_CONSTANTS = ['NaN', 'Infinity'];\n\n  function initialState() {\n    return {\n      extraNodes: {},\n      // current extra nodes, must be careful not to mutate\n      expression: '',\n      // current expression\n      comment: '',\n      // last parsed comment\n      index: 0,\n      // current index in expr\n      token: '',\n      // current token\n      tokenType: TOKENTYPE.NULL,\n      // type of the token\n      nestingLevel: 0,\n      // level of nesting inside parameters, used to ignore newline characters\n      conditionalLevel: null // when a conditional is being parsed, the level of the conditional is stored here\n\n    };\n  }\n  /**\n   * View upto `length` characters of the expression starting at the current character.\n   *\n   * @param {Object} state\n   * @param {number} [length=1] Number of characters to view\n   * @returns {string}\n   * @private\n   */\n\n\n  function currentString(state, length) {\n    return state.expression.substr(state.index, length);\n  }\n  /**\n   * View the current character. Returns '' if end of expression is reached.\n   *\n   * @param {Object} state\n   * @returns {string}\n   * @private\n   */\n\n\n  function currentCharacter(state) {\n    return currentString(state, 1);\n  }\n  /**\n   * Get the next character from the expression.\n   * The character is stored into the char c. If the end of the expression is\n   * reached, the function puts an empty string in c.\n   * @private\n   */\n\n\n  function next(state) {\n    state.index++;\n  }\n  /**\n   * Preview the previous character from the expression.\n   * @return {string} cNext\n   * @private\n   */\n\n\n  function prevCharacter(state) {\n    return state.expression.charAt(state.index - 1);\n  }\n  /**\n   * Preview the next character from the expression.\n   * @return {string} cNext\n   * @private\n   */\n\n\n  function nextCharacter(state) {\n    return state.expression.charAt(state.index + 1);\n  }\n  /**\n   * Get next token in the current string expr.\n   * The token and token type are available as token and tokenType\n   * @private\n   */\n\n\n  function getToken(state) {\n    state.tokenType = TOKENTYPE.NULL;\n    state.token = '';\n    state.comment = ''; // skip over ignored characters:\n\n    while (true) {\n      // comments:\n      if (currentCharacter(state) === '#') {\n        while (currentCharacter(state) !== '\\n' && currentCharacter(state) !== '') {\n          state.comment += currentCharacter(state);\n          next(state);\n        }\n      } // whitespace: space, tab, and newline when inside parameters\n\n\n      if (parse.isWhitespace(currentCharacter(state), state.nestingLevel)) {\n        next(state);\n      } else {\n        break;\n      }\n    } // check for end of expression\n\n\n    if (currentCharacter(state) === '') {\n      // token is still empty\n      state.tokenType = TOKENTYPE.DELIMITER;\n      return;\n    } // check for new line character\n\n\n    if (currentCharacter(state) === '\\n' && !state.nestingLevel) {\n      state.tokenType = TOKENTYPE.DELIMITER;\n      state.token = currentCharacter(state);\n      next(state);\n      return;\n    }\n\n    var c1 = currentCharacter(state);\n    var c2 = currentString(state, 2);\n    var c3 = currentString(state, 3);\n\n    if (c3.length === 3 && DELIMITERS[c3]) {\n      state.tokenType = TOKENTYPE.DELIMITER;\n      state.token = c3;\n      next(state);\n      next(state);\n      next(state);\n      return;\n    } // check for delimiters consisting of 2 characters\n\n\n    if (c2.length === 2 && DELIMITERS[c2]) {\n      state.tokenType = TOKENTYPE.DELIMITER;\n      state.token = c2;\n      next(state);\n      next(state);\n      return;\n    } // check for delimiters consisting of 1 character\n\n\n    if (DELIMITERS[c1]) {\n      state.tokenType = TOKENTYPE.DELIMITER;\n      state.token = c1;\n      next(state);\n      return;\n    } // check for a number\n\n\n    if (parse.isDigitDot(c1)) {\n      state.tokenType = TOKENTYPE.NUMBER; // check for binary, octal, or hex\n\n      var _c = currentString(state, 2);\n\n      if (_c === '0b' || _c === '0o' || _c === '0x') {\n        state.token += currentCharacter(state);\n        next(state);\n        state.token += currentCharacter(state);\n        next(state);\n\n        while (parse.isHexDigit(currentCharacter(state))) {\n          state.token += currentCharacter(state);\n          next(state);\n        }\n\n        if (currentCharacter(state) === '.') {\n          // this number has a radix point\n          state.token += '.';\n          next(state); // get the digits after the radix\n\n          while (parse.isHexDigit(currentCharacter(state))) {\n            state.token += currentCharacter(state);\n            next(state);\n          }\n        } else if (currentCharacter(state) === 'i') {\n          // this number has a word size suffix\n          state.token += 'i';\n          next(state); // get the word size\n\n          while (parse.isDigit(currentCharacter(state))) {\n            state.token += currentCharacter(state);\n            next(state);\n          }\n        }\n\n        return;\n      } // get number, can have a single dot\n\n\n      if (currentCharacter(state) === '.') {\n        state.token += currentCharacter(state);\n        next(state);\n\n        if (!parse.isDigit(currentCharacter(state))) {\n          // this is no number, it is just a dot (can be dot notation)\n          state.tokenType = TOKENTYPE.DELIMITER;\n          return;\n        }\n      } else {\n        while (parse.isDigit(currentCharacter(state))) {\n          state.token += currentCharacter(state);\n          next(state);\n        }\n\n        if (parse.isDecimalMark(currentCharacter(state), nextCharacter(state))) {\n          state.token += currentCharacter(state);\n          next(state);\n        }\n      }\n\n      while (parse.isDigit(currentCharacter(state))) {\n        state.token += currentCharacter(state);\n        next(state);\n      } // check for exponential notation like \"2.3e-4\", \"1.23e50\" or \"2e+4\"\n\n\n      if (currentCharacter(state) === 'E' || currentCharacter(state) === 'e') {\n        if (parse.isDigit(nextCharacter(state)) || nextCharacter(state) === '-' || nextCharacter(state) === '+') {\n          state.token += currentCharacter(state);\n          next(state);\n\n          if (currentCharacter(state) === '+' || currentCharacter(state) === '-') {\n            state.token += currentCharacter(state);\n            next(state);\n          } // Scientific notation MUST be followed by an exponent\n\n\n          if (!parse.isDigit(currentCharacter(state))) {\n            throw createSyntaxError(state, 'Digit expected, got \"' + currentCharacter(state) + '\"');\n          }\n\n          while (parse.isDigit(currentCharacter(state))) {\n            state.token += currentCharacter(state);\n            next(state);\n          }\n\n          if (parse.isDecimalMark(currentCharacter(state), nextCharacter(state))) {\n            throw createSyntaxError(state, 'Digit expected, got \"' + currentCharacter(state) + '\"');\n          }\n        } else if (nextCharacter(state) === '.') {\n          next(state);\n          throw createSyntaxError(state, 'Digit expected, got \"' + currentCharacter(state) + '\"');\n        }\n      }\n\n      return;\n    } // check for variables, functions, named operators\n\n\n    if (parse.isAlpha(currentCharacter(state), prevCharacter(state), nextCharacter(state))) {\n      while (parse.isAlpha(currentCharacter(state), prevCharacter(state), nextCharacter(state)) || parse.isDigit(currentCharacter(state))) {\n        state.token += currentCharacter(state);\n        next(state);\n      }\n\n      if (hasOwnProperty(NAMED_DELIMITERS, state.token)) {\n        state.tokenType = TOKENTYPE.DELIMITER;\n      } else {\n        state.tokenType = TOKENTYPE.SYMBOL;\n      }\n\n      return;\n    } // something unknown is found, wrong characters -> a syntax error\n\n\n    state.tokenType = TOKENTYPE.UNKNOWN;\n\n    while (currentCharacter(state) !== '') {\n      state.token += currentCharacter(state);\n      next(state);\n    }\n\n    throw createSyntaxError(state, 'Syntax error in part \"' + state.token + '\"');\n  }\n  /**\n   * Get next token and skip newline tokens\n   */\n\n\n  function getTokenSkipNewline(state) {\n    do {\n      getToken(state);\n    } while (state.token === '\\n'); // eslint-disable-line no-unmodified-loop-condition\n\n  }\n  /**\n   * Open parameters.\n   * New line characters will be ignored until closeParams(state) is called\n   */\n\n\n  function openParams(state) {\n    state.nestingLevel++;\n  }\n  /**\n   * Close parameters.\n   * New line characters will no longer be ignored\n   */\n\n\n  function closeParams(state) {\n    state.nestingLevel--;\n  }\n  /**\n   * Checks whether the current character `c` is a valid alpha character:\n   *\n   * - A latin letter (upper or lower case) Ascii: a-z, A-Z\n   * - An underscore                        Ascii: _\n   * - A dollar sign                        Ascii: $\n   * - A latin letter with accents          Unicode: \\u00C0 - \\u02AF\n   * - A greek letter                       Unicode: \\u0370 - \\u03FF\n   * - A mathematical alphanumeric symbol   Unicode: \\u{1D400} - \\u{1D7FF} excluding invalid code points\n   *\n   * The previous and next characters are needed to determine whether\n   * this character is part of a unicode surrogate pair.\n   *\n   * @param {string} c      Current character in the expression\n   * @param {string} cPrev  Previous character\n   * @param {string} cNext  Next character\n   * @return {boolean}\n   */\n\n\n  parse.isAlpha = function isAlpha(c, cPrev, cNext) {\n    return parse.isValidLatinOrGreek(c) || parse.isValidMathSymbol(c, cNext) || parse.isValidMathSymbol(cPrev, c);\n  };\n  /**\n   * Test whether a character is a valid latin, greek, or letter-like character\n   * @param {string} c\n   * @return {boolean}\n   */\n\n\n  parse.isValidLatinOrGreek = function isValidLatinOrGreek(c) {\n    return /^[a-zA-Z_$\\u00C0-\\u02AF\\u0370-\\u03FF\\u2100-\\u214F]$/.test(c);\n  };\n  /**\n   * Test whether two given 16 bit characters form a surrogate pair of a\n   * unicode math symbol.\n   *\n   * https://unicode-table.com/en/\n   * https://www.wikiwand.com/en/Mathematical_operators_and_symbols_in_Unicode\n   *\n   * Note: In ES6 will be unicode aware:\n   * https://stackoverflow.com/questions/280712/javascript-unicode-regexes\n   * https://mathiasbynens.be/notes/es6-unicode-regex\n   *\n   * @param {string} high\n   * @param {string} low\n   * @return {boolean}\n   */\n\n\n  parse.isValidMathSymbol = function isValidMathSymbol(high, low) {\n    return /^[\\uD835]$/.test(high) && /^[\\uDC00-\\uDFFF]$/.test(low) && /^[^\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]$/.test(low);\n  };\n  /**\n   * Check whether given character c is a white space character: space, tab, or enter\n   * @param {string} c\n   * @param {number} nestingLevel\n   * @return {boolean}\n   */\n\n\n  parse.isWhitespace = function isWhitespace(c, nestingLevel) {\n    // TODO: also take '\\r' carriage return as newline? Or does that give problems on mac?\n    return c === ' ' || c === '\\t' || c === '\\n' && nestingLevel > 0;\n  };\n  /**\n   * Test whether the character c is a decimal mark (dot).\n   * This is the case when it's not the start of a delimiter '.*', './', or '.^'\n   * @param {string} c\n   * @param {string} cNext\n   * @return {boolean}\n   */\n\n\n  parse.isDecimalMark = function isDecimalMark(c, cNext) {\n    return c === '.' && cNext !== '/' && cNext !== '*' && cNext !== '^';\n  };\n  /**\n   * checks if the given char c is a digit or dot\n   * @param {string} c   a string with one character\n   * @return {boolean}\n   */\n\n\n  parse.isDigitDot = function isDigitDot(c) {\n    return c >= '0' && c <= '9' || c === '.';\n  };\n  /**\n   * checks if the given char c is a digit\n   * @param {string} c   a string with one character\n   * @return {boolean}\n   */\n\n\n  parse.isDigit = function isDigit(c) {\n    return c >= '0' && c <= '9';\n  };\n  /**\n   * checks if the given char c is a hex digit\n   * @param {string} c   a string with one character\n   * @return {boolean}\n   */\n\n\n  parse.isHexDigit = function isHexDigit(c) {\n    return c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F';\n  };\n  /**\n   * Start of the parse levels below, in order of precedence\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseStart(expression, extraNodes) {\n    var state = initialState();\n\n    _extends(state, {\n      expression,\n      extraNodes\n    });\n\n    getToken(state);\n    var node = parseBlock(state); // check for garbage at the end of the expression\n    // an expression ends with a empty character '' and tokenType DELIMITER\n\n    if (state.token !== '') {\n      if (state.tokenType === TOKENTYPE.DELIMITER) {\n        // user entered a not existing operator like \"//\"\n        // TODO: give hints for aliases, for example with \"<>\" give as hint \" did you mean !== ?\"\n        throw createError(state, 'Unexpected operator ' + state.token);\n      } else {\n        throw createSyntaxError(state, 'Unexpected part \"' + state.token + '\"');\n      }\n    }\n\n    return node;\n  }\n  /**\n   * Parse a block with expressions. Expressions can be separated by a newline\n   * character '\\n', or by a semicolon ';'. In case of a semicolon, no output\n   * of the preceding line is returned.\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseBlock(state) {\n    var node;\n    var blocks = [];\n    var visible;\n\n    if (state.token !== '' && state.token !== '\\n' && state.token !== ';') {\n      node = parseAssignment(state);\n      node.comment = state.comment;\n    } // TODO: simplify this loop\n\n\n    while (state.token === '\\n' || state.token === ';') {\n      // eslint-disable-line no-unmodified-loop-condition\n      if (blocks.length === 0 && node) {\n        visible = state.token !== ';';\n        blocks.push({\n          node,\n          visible\n        });\n      }\n\n      getToken(state);\n\n      if (state.token !== '\\n' && state.token !== ';' && state.token !== '') {\n        node = parseAssignment(state);\n        node.comment = state.comment;\n        visible = state.token !== ';';\n        blocks.push({\n          node,\n          visible\n        });\n      }\n    }\n\n    if (blocks.length > 0) {\n      return new BlockNode(blocks);\n    } else {\n      if (!node) {\n        node = new ConstantNode(undefined);\n        node.comment = state.comment;\n      }\n\n      return node;\n    }\n  }\n  /**\n   * Assignment of a function or variable,\n   * - can be a variable like 'a=2.3'\n   * - or a updating an existing variable like 'matrix(2,3:5)=[6,7,8]'\n   * - defining a function like 'f(x) = x^2'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseAssignment(state) {\n    var name, args, value, valid;\n    var node = parseConditional(state);\n\n    if (state.token === '=') {\n      if (isSymbolNode(node)) {\n        // parse a variable assignment like 'a = 2/3'\n        name = node.name;\n        getTokenSkipNewline(state);\n        value = parseAssignment(state);\n        return new AssignmentNode(new SymbolNode(name), value);\n      } else if (isAccessorNode(node)) {\n        // parse a matrix subset assignment like 'A[1,2] = 4'\n        getTokenSkipNewline(state);\n        value = parseAssignment(state);\n        return new AssignmentNode(node.object, node.index, value);\n      } else if (isFunctionNode(node) && isSymbolNode(node.fn)) {\n        // parse function assignment like 'f(x) = x^2'\n        valid = true;\n        args = [];\n        name = node.name;\n        node.args.forEach(function (arg, index) {\n          if (isSymbolNode(arg)) {\n            args[index] = arg.name;\n          } else {\n            valid = false;\n          }\n        });\n\n        if (valid) {\n          getTokenSkipNewline(state);\n          value = parseAssignment(state);\n          return new FunctionAssignmentNode(name, args, value);\n        }\n      }\n\n      throw createSyntaxError(state, 'Invalid left hand side of assignment operator =');\n    }\n\n    return node;\n  }\n  /**\n   * conditional operation\n   *\n   *     condition ? truePart : falsePart\n   *\n   * Note: conditional operator is right-associative\n   *\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseConditional(state) {\n    var node = parseLogicalOr(state);\n\n    while (state.token === '?') {\n      // eslint-disable-line no-unmodified-loop-condition\n      // set a conditional level, the range operator will be ignored as long\n      // as conditionalLevel === state.nestingLevel.\n      var prev = state.conditionalLevel;\n      state.conditionalLevel = state.nestingLevel;\n      getTokenSkipNewline(state);\n      var condition = node;\n      var trueExpr = parseAssignment(state);\n      if (state.token !== ':') throw createSyntaxError(state, 'False part of conditional expression expected');\n      state.conditionalLevel = null;\n      getTokenSkipNewline(state);\n      var falseExpr = parseAssignment(state); // Note: check for conditional operator again, right associativity\n\n      node = new ConditionalNode(condition, trueExpr, falseExpr); // restore the previous conditional level\n\n      state.conditionalLevel = prev;\n    }\n\n    return node;\n  }\n  /**\n   * logical or, 'x or y'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseLogicalOr(state) {\n    var node = parseLogicalXor(state);\n\n    while (state.token === 'or') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getTokenSkipNewline(state);\n      node = new OperatorNode('or', 'or', [node, parseLogicalXor(state)]);\n    }\n\n    return node;\n  }\n  /**\n   * logical exclusive or, 'x xor y'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseLogicalXor(state) {\n    var node = parseLogicalAnd(state);\n\n    while (state.token === 'xor') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getTokenSkipNewline(state);\n      node = new OperatorNode('xor', 'xor', [node, parseLogicalAnd(state)]);\n    }\n\n    return node;\n  }\n  /**\n   * logical and, 'x and y'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseLogicalAnd(state) {\n    var node = parseBitwiseOr(state);\n\n    while (state.token === 'and') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getTokenSkipNewline(state);\n      node = new OperatorNode('and', 'and', [node, parseBitwiseOr(state)]);\n    }\n\n    return node;\n  }\n  /**\n   * bitwise or, 'x | y'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseBitwiseOr(state) {\n    var node = parseBitwiseXor(state);\n\n    while (state.token === '|') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getTokenSkipNewline(state);\n      node = new OperatorNode('|', 'bitOr', [node, parseBitwiseXor(state)]);\n    }\n\n    return node;\n  }\n  /**\n   * bitwise exclusive or (xor), 'x ^| y'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseBitwiseXor(state) {\n    var node = parseBitwiseAnd(state);\n\n    while (state.token === '^|') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getTokenSkipNewline(state);\n      node = new OperatorNode('^|', 'bitXor', [node, parseBitwiseAnd(state)]);\n    }\n\n    return node;\n  }\n  /**\n   * bitwise and, 'x & y'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseBitwiseAnd(state) {\n    var node = parseRelational(state);\n\n    while (state.token === '&') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getTokenSkipNewline(state);\n      node = new OperatorNode('&', 'bitAnd', [node, parseRelational(state)]);\n    }\n\n    return node;\n  }\n  /**\n   * Parse a chained conditional, like 'a > b >= c'\n   * @return {Node} node\n   */\n\n\n  function parseRelational(state) {\n    var params = [parseShift(state)];\n    var conditionals = [];\n    var operators = {\n      '==': 'equal',\n      '!=': 'unequal',\n      '<': 'smaller',\n      '>': 'larger',\n      '<=': 'smallerEq',\n      '>=': 'largerEq'\n    };\n\n    while (hasOwnProperty(operators, state.token)) {\n      // eslint-disable-line no-unmodified-loop-condition\n      var cond = {\n        name: state.token,\n        fn: operators[state.token]\n      };\n      conditionals.push(cond);\n      getTokenSkipNewline(state);\n      params.push(parseShift(state));\n    }\n\n    if (params.length === 1) {\n      return params[0];\n    } else if (params.length === 2) {\n      return new OperatorNode(conditionals[0].name, conditionals[0].fn, params);\n    } else {\n      return new RelationalNode(conditionals.map(c => c.fn), params);\n    }\n  }\n  /**\n   * Bitwise left shift, bitwise right arithmetic shift, bitwise right logical shift\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseShift(state) {\n    var node, name, fn, params;\n    node = parseConversion(state);\n    var operators = {\n      '<<': 'leftShift',\n      '>>': 'rightArithShift',\n      '>>>': 'rightLogShift'\n    };\n\n    while (hasOwnProperty(operators, state.token)) {\n      name = state.token;\n      fn = operators[name];\n      getTokenSkipNewline(state);\n      params = [node, parseConversion(state)];\n      node = new OperatorNode(name, fn, params);\n    }\n\n    return node;\n  }\n  /**\n   * conversion operators 'to' and 'in'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseConversion(state) {\n    var node, name, fn, params;\n    node = parseRange(state);\n    var operators = {\n      to: 'to',\n      in: 'to' // alias of 'to'\n\n    };\n\n    while (hasOwnProperty(operators, state.token)) {\n      name = state.token;\n      fn = operators[name];\n      getTokenSkipNewline(state);\n\n      if (name === 'in' && state.token === '') {\n        // end of expression -> this is the unit 'in' ('inch')\n        node = new OperatorNode('*', 'multiply', [node, new SymbolNode('in')], true);\n      } else {\n        // operator 'a to b' or 'a in b'\n        params = [node, parseRange(state)];\n        node = new OperatorNode(name, fn, params);\n      }\n    }\n\n    return node;\n  }\n  /**\n   * parse range, \"start:end\", \"start:step:end\", \":\", \"start:\", \":end\", etc\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseRange(state) {\n    var node;\n    var params = [];\n\n    if (state.token === ':') {\n      // implicit start=1 (one-based)\n      node = new ConstantNode(1);\n    } else {\n      // explicit start\n      node = parseAddSubtract(state);\n    }\n\n    if (state.token === ':' && state.conditionalLevel !== state.nestingLevel) {\n      // we ignore the range operator when a conditional operator is being processed on the same level\n      params.push(node); // parse step and end\n\n      while (state.token === ':' && params.length < 3) {\n        // eslint-disable-line no-unmodified-loop-condition\n        getTokenSkipNewline(state);\n\n        if (state.token === ')' || state.token === ']' || state.token === ',' || state.token === '') {\n          // implicit end\n          params.push(new SymbolNode('end'));\n        } else {\n          // explicit end\n          params.push(parseAddSubtract(state));\n        }\n      }\n\n      if (params.length === 3) {\n        // params = [start, step, end]\n        node = new RangeNode(params[0], params[2], params[1]); // start, end, step\n      } else {\n        // length === 2\n        // params = [start, end]\n        node = new RangeNode(params[0], params[1]); // start, end\n      }\n    }\n\n    return node;\n  }\n  /**\n   * add or subtract\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseAddSubtract(state) {\n    var node, name, fn, params;\n    node = parseMultiplyDivide(state);\n    var operators = {\n      '+': 'add',\n      '-': 'subtract'\n    };\n\n    while (hasOwnProperty(operators, state.token)) {\n      name = state.token;\n      fn = operators[name];\n      getTokenSkipNewline(state);\n      var rightNode = parseMultiplyDivide(state);\n\n      if (rightNode.isPercentage) {\n        params = [node, new OperatorNode('*', 'multiply', [node, rightNode])];\n      } else {\n        params = [node, rightNode];\n      }\n\n      node = new OperatorNode(name, fn, params);\n    }\n\n    return node;\n  }\n  /**\n   * multiply, divide, modulus\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseMultiplyDivide(state) {\n    var node, last, name, fn;\n    node = parseImplicitMultiplication(state);\n    last = node;\n    var operators = {\n      '*': 'multiply',\n      '.*': 'dotMultiply',\n      '/': 'divide',\n      './': 'dotDivide'\n    };\n\n    while (true) {\n      if (hasOwnProperty(operators, state.token)) {\n        // explicit operators\n        name = state.token;\n        fn = operators[name];\n        getTokenSkipNewline(state);\n        last = parseImplicitMultiplication(state);\n        node = new OperatorNode(name, fn, [node, last]);\n      } else {\n        break;\n      }\n    }\n\n    return node;\n  }\n  /**\n   * implicit multiplication\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseImplicitMultiplication(state) {\n    var node, last;\n    node = parseRule2(state);\n    last = node;\n\n    while (true) {\n      if (state.tokenType === TOKENTYPE.SYMBOL || state.token === 'in' && isConstantNode(node) || state.tokenType === TOKENTYPE.NUMBER && !isConstantNode(last) && (!isOperatorNode(last) || last.op === '!') || state.token === '(') {\n        // parse implicit multiplication\n        //\n        // symbol:      implicit multiplication like '2a', '(2+3)a', 'a b'\n        // number:      implicit multiplication like '(2+3)2'\n        // parenthesis: implicit multiplication like '2(3+4)', '(3+4)(1+2)'\n        last = parseRule2(state);\n        node = new OperatorNode('*', 'multiply', [node, last], true\n        /* implicit */\n        );\n      } else {\n        break;\n      }\n    }\n\n    return node;\n  }\n  /**\n   * Infamous \"rule 2\" as described in https://github.com/josdejong/mathjs/issues/792#issuecomment-361065370\n   * Explicit division gets higher precedence than implicit multiplication\n   * when the division matches this pattern: [number] / [number] [symbol]\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseRule2(state) {\n    var node = parsePercentage(state);\n    var last = node;\n    var tokenStates = [];\n\n    while (true) {\n      // Match the \"number /\" part of the pattern \"number / number symbol\"\n      if (state.token === '/' && isConstantNode(last)) {\n        // Look ahead to see if the next token is a number\n        tokenStates.push(_extends({}, state));\n        getTokenSkipNewline(state); // Match the \"number / number\" part of the pattern\n\n        if (state.tokenType === TOKENTYPE.NUMBER) {\n          // Look ahead again\n          tokenStates.push(_extends({}, state));\n          getTokenSkipNewline(state); // Match the \"symbol\" part of the pattern, or a left parenthesis\n\n          if (state.tokenType === TOKENTYPE.SYMBOL || state.token === '(') {\n            // We've matched the pattern \"number / number symbol\".\n            // Rewind once and build the \"number / number\" node; the symbol will be consumed later\n            _extends(state, tokenStates.pop());\n\n            tokenStates.pop();\n            last = parsePercentage(state);\n            node = new OperatorNode('/', 'divide', [node, last]);\n          } else {\n            // Not a match, so rewind\n            tokenStates.pop();\n\n            _extends(state, tokenStates.pop());\n\n            break;\n          }\n        } else {\n          // Not a match, so rewind\n          _extends(state, tokenStates.pop());\n\n          break;\n        }\n      } else {\n        break;\n      }\n    }\n\n    return node;\n  }\n  /**\n   * percentage or mod\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parsePercentage(state) {\n    var node, name, fn, params;\n    node = parseUnary(state);\n    var operators = {\n      '%': 'mod',\n      mod: 'mod'\n    };\n\n    while (hasOwnProperty(operators, state.token)) {\n      name = state.token;\n      fn = operators[name];\n      getTokenSkipNewline(state);\n\n      if (name === '%' && state.tokenType === TOKENTYPE.DELIMITER && state.token !== '(') {\n        // If the expression contains only %, then treat that as /100\n        node = new OperatorNode('/', 'divide', [node, new ConstantNode(100)], false, true);\n      } else {\n        params = [node, parseUnary(state)];\n        node = new OperatorNode(name, fn, params);\n      }\n    }\n\n    return node;\n  }\n  /**\n   * Unary plus and minus, and logical and bitwise not\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseUnary(state) {\n    var name, params, fn;\n    var operators = {\n      '-': 'unaryMinus',\n      '+': 'unaryPlus',\n      '~': 'bitNot',\n      not: 'not'\n    };\n\n    if (hasOwnProperty(operators, state.token)) {\n      fn = operators[state.token];\n      name = state.token;\n      getTokenSkipNewline(state);\n      params = [parseUnary(state)];\n      return new OperatorNode(name, fn, params);\n    }\n\n    return parsePow(state);\n  }\n  /**\n   * power\n   * Note: power operator is right associative\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parsePow(state) {\n    var node, name, fn, params;\n    node = parseLeftHandOperators(state);\n\n    if (state.token === '^' || state.token === '.^') {\n      name = state.token;\n      fn = name === '^' ? 'pow' : 'dotPow';\n      getTokenSkipNewline(state);\n      params = [node, parseUnary(state)]; // Go back to unary, we can have '2^-3'\n\n      node = new OperatorNode(name, fn, params);\n    }\n\n    return node;\n  }\n  /**\n   * Left hand operators: factorial x!, ctranspose x'\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseLeftHandOperators(state) {\n    var node, name, fn, params;\n    node = parseCustomNodes(state);\n    var operators = {\n      '!': 'factorial',\n      '\\'': 'ctranspose'\n    };\n\n    while (hasOwnProperty(operators, state.token)) {\n      name = state.token;\n      fn = operators[name];\n      getToken(state);\n      params = [node];\n      node = new OperatorNode(name, fn, params);\n      node = parseAccessors(state, node);\n    }\n\n    return node;\n  }\n  /**\n   * Parse a custom node handler. A node handler can be used to process\n   * nodes in a custom way, for example for handling a plot.\n   *\n   * A handler must be passed as second argument of the parse function.\n   * - must extend math.Node\n   * - must contain a function _compile(defs: Object) : string\n   * - must contain a function find(filter: Object) : Node[]\n   * - must contain a function toString() : string\n   * - the constructor is called with a single argument containing all parameters\n   *\n   * For example:\n   *\n   *     nodes = {\n   *       'plot': PlotHandler\n   *     }\n   *\n   * The constructor of the handler is called as:\n   *\n   *     node = new PlotHandler(params)\n   *\n   * The handler will be invoked when evaluating an expression like:\n   *\n   *     node = math.parse('plot(sin(x), x)', nodes)\n   *\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseCustomNodes(state) {\n    var params = [];\n\n    if (state.tokenType === TOKENTYPE.SYMBOL && hasOwnProperty(state.extraNodes, state.token)) {\n      var CustomNode = state.extraNodes[state.token];\n      getToken(state); // parse parameters\n\n      if (state.token === '(') {\n        params = [];\n        openParams(state);\n        getToken(state);\n\n        if (state.token !== ')') {\n          params.push(parseAssignment(state)); // parse a list with parameters\n\n          while (state.token === ',') {\n            // eslint-disable-line no-unmodified-loop-condition\n            getToken(state);\n            params.push(parseAssignment(state));\n          }\n        }\n\n        if (state.token !== ')') {\n          throw createSyntaxError(state, 'Parenthesis ) expected');\n        }\n\n        closeParams(state);\n        getToken(state);\n      } // create a new custom node\n      // noinspection JSValidateTypes\n\n\n      return new CustomNode(params);\n    }\n\n    return parseSymbol(state);\n  }\n  /**\n   * parse symbols: functions, variables, constants, units\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseSymbol(state) {\n    var node, name;\n\n    if (state.tokenType === TOKENTYPE.SYMBOL || state.tokenType === TOKENTYPE.DELIMITER && state.token in NAMED_DELIMITERS) {\n      name = state.token;\n      getToken(state);\n\n      if (hasOwnProperty(CONSTANTS, name)) {\n        // true, false, null, ...\n        node = new ConstantNode(CONSTANTS[name]);\n      } else if (NUMERIC_CONSTANTS.indexOf(name) !== -1) {\n        // NaN, Infinity\n        node = new ConstantNode(numeric(name, 'number'));\n      } else {\n        node = new SymbolNode(name);\n      } // parse function parameters and matrix index\n\n\n      node = parseAccessors(state, node);\n      return node;\n    }\n\n    return parseDoubleQuotesString(state);\n  }\n  /**\n   * parse accessors:\n   * - function invocation in round brackets (...), for example sqrt(2)\n   * - index enclosed in square brackets [...], for example A[2,3]\n   * - dot notation for properties, like foo.bar\n   * @param {Object} state\n   * @param {Node} node    Node on which to apply the parameters. If there\n   *                       are no parameters in the expression, the node\n   *                       itself is returned\n   * @param {string[]} [types]  Filter the types of notations\n   *                            can be ['(', '[', '.']\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseAccessors(state, node, types) {\n    var params;\n\n    while ((state.token === '(' || state.token === '[' || state.token === '.') && (!types || types.indexOf(state.token) !== -1)) {\n      // eslint-disable-line no-unmodified-loop-condition\n      params = [];\n\n      if (state.token === '(') {\n        if (isSymbolNode(node) || isAccessorNode(node)) {\n          // function invocation like fn(2, 3) or obj.fn(2, 3)\n          openParams(state);\n          getToken(state);\n\n          if (state.token !== ')') {\n            params.push(parseAssignment(state)); // parse a list with parameters\n\n            while (state.token === ',') {\n              // eslint-disable-line no-unmodified-loop-condition\n              getToken(state);\n              params.push(parseAssignment(state));\n            }\n          }\n\n          if (state.token !== ')') {\n            throw createSyntaxError(state, 'Parenthesis ) expected');\n          }\n\n          closeParams(state);\n          getToken(state);\n          node = new FunctionNode(node, params);\n        } else {\n          // implicit multiplication like (2+3)(4+5) or sqrt(2)(1+2)\n          // don't parse it here but let it be handled by parseImplicitMultiplication\n          // with correct precedence\n          return node;\n        }\n      } else if (state.token === '[') {\n        // index notation like variable[2, 3]\n        openParams(state);\n        getToken(state);\n\n        if (state.token !== ']') {\n          params.push(parseAssignment(state)); // parse a list with parameters\n\n          while (state.token === ',') {\n            // eslint-disable-line no-unmodified-loop-condition\n            getToken(state);\n            params.push(parseAssignment(state));\n          }\n        }\n\n        if (state.token !== ']') {\n          throw createSyntaxError(state, 'Parenthesis ] expected');\n        }\n\n        closeParams(state);\n        getToken(state);\n        node = new AccessorNode(node, new IndexNode(params));\n      } else {\n        // dot notation like variable.prop\n        getToken(state);\n\n        if (state.tokenType !== TOKENTYPE.SYMBOL) {\n          throw createSyntaxError(state, 'Property name expected after dot');\n        }\n\n        params.push(new ConstantNode(state.token));\n        getToken(state);\n        var dotNotation = true;\n        node = new AccessorNode(node, new IndexNode(params, dotNotation));\n      }\n    }\n\n    return node;\n  }\n  /**\n   * Parse a double quotes string.\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseDoubleQuotesString(state) {\n    var node, str;\n\n    if (state.token === '\"') {\n      str = parseDoubleQuotesStringToken(state); // create constant\n\n      node = new ConstantNode(str); // parse index parameters\n\n      node = parseAccessors(state, node);\n      return node;\n    }\n\n    return parseSingleQuotesString(state);\n  }\n  /**\n   * Parse a string surrounded by double quotes \"...\"\n   * @return {string}\n   */\n\n\n  function parseDoubleQuotesStringToken(state) {\n    var str = '';\n\n    while (currentCharacter(state) !== '' && currentCharacter(state) !== '\"') {\n      if (currentCharacter(state) === '\\\\') {\n        // escape character, immediately process the next\n        // character to prevent stopping at a next '\\\"'\n        str += currentCharacter(state);\n        next(state);\n      }\n\n      str += currentCharacter(state);\n      next(state);\n    }\n\n    getToken(state);\n\n    if (state.token !== '\"') {\n      throw createSyntaxError(state, 'End of string \" expected');\n    }\n\n    getToken(state);\n    return JSON.parse('\"' + str + '\"'); // unescape escaped characters\n  }\n  /**\n   * Parse a single quotes string.\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseSingleQuotesString(state) {\n    var node, str;\n\n    if (state.token === '\\'') {\n      str = parseSingleQuotesStringToken(state); // create constant\n\n      node = new ConstantNode(str); // parse index parameters\n\n      node = parseAccessors(state, node);\n      return node;\n    }\n\n    return parseMatrix(state);\n  }\n  /**\n   * Parse a string surrounded by single quotes '...'\n   * @return {string}\n   */\n\n\n  function parseSingleQuotesStringToken(state) {\n    var str = '';\n\n    while (currentCharacter(state) !== '' && currentCharacter(state) !== '\\'') {\n      if (currentCharacter(state) === '\\\\') {\n        // escape character, immediately process the next\n        // character to prevent stopping at a next '\\''\n        str += currentCharacter(state);\n        next(state);\n      }\n\n      str += currentCharacter(state);\n      next(state);\n    }\n\n    getToken(state);\n\n    if (state.token !== '\\'') {\n      throw createSyntaxError(state, 'End of string \\' expected');\n    }\n\n    getToken(state);\n    return JSON.parse('\"' + str + '\"'); // unescape escaped characters\n  }\n  /**\n   * parse the matrix\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseMatrix(state) {\n    var array, params, rows, cols;\n\n    if (state.token === '[') {\n      // matrix [...]\n      openParams(state);\n      getToken(state);\n\n      if (state.token !== ']') {\n        // this is a non-empty matrix\n        var row = parseRow(state);\n\n        if (state.token === ';') {\n          // 2 dimensional array\n          rows = 1;\n          params = [row]; // the rows of the matrix are separated by dot-comma's\n\n          while (state.token === ';') {\n            // eslint-disable-line no-unmodified-loop-condition\n            getToken(state);\n            params[rows] = parseRow(state);\n            rows++;\n          }\n\n          if (state.token !== ']') {\n            throw createSyntaxError(state, 'End of matrix ] expected');\n          }\n\n          closeParams(state);\n          getToken(state); // check if the number of columns matches in all rows\n\n          cols = params[0].items.length;\n\n          for (var r = 1; r < rows; r++) {\n            if (params[r].items.length !== cols) {\n              throw createError(state, 'Column dimensions mismatch ' + '(' + params[r].items.length + ' !== ' + cols + ')');\n            }\n          }\n\n          array = new ArrayNode(params);\n        } else {\n          // 1 dimensional vector\n          if (state.token !== ']') {\n            throw createSyntaxError(state, 'End of matrix ] expected');\n          }\n\n          closeParams(state);\n          getToken(state);\n          array = row;\n        }\n      } else {\n        // this is an empty matrix \"[ ]\"\n        closeParams(state);\n        getToken(state);\n        array = new ArrayNode([]);\n      }\n\n      return parseAccessors(state, array);\n    }\n\n    return parseObject(state);\n  }\n  /**\n   * Parse a single comma-separated row from a matrix, like 'a, b, c'\n   * @return {ArrayNode} node\n   */\n\n\n  function parseRow(state) {\n    var params = [parseAssignment(state)];\n    var len = 1;\n\n    while (state.token === ',') {\n      // eslint-disable-line no-unmodified-loop-condition\n      getToken(state); // parse expression\n\n      params[len] = parseAssignment(state);\n      len++;\n    }\n\n    return new ArrayNode(params);\n  }\n  /**\n   * parse an object, enclosed in angle brackets{...}, for example {value: 2}\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseObject(state) {\n    if (state.token === '{') {\n      openParams(state);\n      var key;\n      var properties = {};\n\n      do {\n        getToken(state);\n\n        if (state.token !== '}') {\n          // parse key\n          if (state.token === '\"') {\n            key = parseDoubleQuotesStringToken(state);\n          } else if (state.token === '\\'') {\n            key = parseSingleQuotesStringToken(state);\n          } else if (state.tokenType === TOKENTYPE.SYMBOL || state.tokenType === TOKENTYPE.DELIMITER && state.token in NAMED_DELIMITERS) {\n            key = state.token;\n            getToken(state);\n          } else {\n            throw createSyntaxError(state, 'Symbol or string expected as object key');\n          } // parse key/value separator\n\n\n          if (state.token !== ':') {\n            throw createSyntaxError(state, 'Colon : expected after object key');\n          }\n\n          getToken(state); // parse key\n\n          properties[key] = parseAssignment(state);\n        }\n      } while (state.token === ','); // eslint-disable-line no-unmodified-loop-condition\n\n\n      if (state.token !== '}') {\n        throw createSyntaxError(state, 'Comma , or bracket } expected after object value');\n      }\n\n      closeParams(state);\n      getToken(state);\n      var node = new ObjectNode(properties); // parse index parameters\n\n      node = parseAccessors(state, node);\n      return node;\n    }\n\n    return parseNumber(state);\n  }\n  /**\n   * parse a number\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseNumber(state) {\n    var numberStr;\n\n    if (state.tokenType === TOKENTYPE.NUMBER) {\n      // this is a number\n      numberStr = state.token;\n      getToken(state);\n      return new ConstantNode(numeric(numberStr, config.number));\n    }\n\n    return parseParentheses(state);\n  }\n  /**\n   * parentheses\n   * @return {Node} node\n   * @private\n   */\n\n\n  function parseParentheses(state) {\n    var node; // check if it is a parenthesized expression\n\n    if (state.token === '(') {\n      // parentheses (...)\n      openParams(state);\n      getToken(state);\n      node = parseAssignment(state); // start again\n\n      if (state.token !== ')') {\n        throw createSyntaxError(state, 'Parenthesis ) expected');\n      }\n\n      closeParams(state);\n      getToken(state);\n      node = new ParenthesisNode(node);\n      node = parseAccessors(state, node);\n      return node;\n    }\n\n    return parseEnd(state);\n  }\n  /**\n   * Evaluated when the expression is not yet ended but expected to end\n   * @return {Node} res\n   * @private\n   */\n\n\n  function parseEnd(state) {\n    if (state.token === '') {\n      // syntax error or unexpected end of expression\n      throw createSyntaxError(state, 'Unexpected end of expression');\n    } else {\n      throw createSyntaxError(state, 'Value expected');\n    }\n  }\n  /**\n   * Shortcut for getting the current row value (one based)\n   * Returns the line of the currently handled expression\n   * @private\n   */\n\n  /* TODO: implement keeping track on the row number\n  function row () {\n    return null\n  }\n  */\n\n  /**\n   * Shortcut for getting the current col value (one based)\n   * Returns the column (position) where the last state.token starts\n   * @private\n   */\n\n\n  function col(state) {\n    return state.index - state.token.length + 1;\n  }\n  /**\n   * Create an error\n   * @param {Object} state\n   * @param {string} message\n   * @return {SyntaxError} instantiated error\n   * @private\n   */\n\n\n  function createSyntaxError(state, message) {\n    var c = col(state);\n    var error = new SyntaxError(message + ' (char ' + c + ')');\n    error.char = c;\n    return error;\n  }\n  /**\n   * Create an error\n   * @param {Object} state\n   * @param {string} message\n   * @return {Error} instantiated error\n   * @private\n   */\n\n\n  function createError(state, message) {\n    var c = col(state);\n    var error = new SyntaxError(message + ' (char ' + c + ')');\n    error.char = c;\n    return error;\n  }\n\n  return parse;\n});", "import { deepMap } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'compile';\nvar dependencies = ['typed', 'parse'];\nexport var createCompile = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    parse\n  } = _ref;\n\n  /**\n   * Parse and compile an expression.\n   * Returns a an object with a function `evaluate([scope])` to evaluate the\n   * compiled expression.\n   *\n   * Syntax:\n   *\n   *     math.compile(expr)                       // returns one node\n   *     math.compile([expr1, expr2, expr3, ...]) // returns an array with nodes\n   *\n   * Examples:\n   *\n   *     const code1 = math.compile('sqrt(3^2 + 4^2)')\n   *     code1.evaluate() // 5\n   *\n   *     let scope = {a: 3, b: 4}\n   *     const code2 = math.compile('a * b') // 12\n   *     code2.evaluate(scope) // 12\n   *     scope.a = 5\n   *     code2.evaluate(scope) // 20\n   *\n   *     const nodes = math.compile(['a = 3', 'b = 4', 'a * b'])\n   *     nodes[2].evaluate() // 12\n   *\n   * See also:\n   *\n   *    parse, evaluate\n   *\n   * @param {string | string[] | Array | Matrix} expr\n   *            The expression to be compiled\n   * @return {{evaluate: Function} | Array.<{evaluate: Function}>} code\n   *            An object with the compiled expression\n   * @throws {Error}\n   */\n  return typed(name, {\n    string: function string(expr) {\n      return parse(expr).compile();\n    },\n    'Array | Matrix': function ArrayMatrix(expr) {\n      return deepMap(expr, function (entry) {\n        return parse(entry).compile();\n      });\n    }\n  });\n});", "import { deepMap } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nimport { createEmptyMap } from '../../utils/map.js';\nvar name = 'evaluate';\nvar dependencies = ['typed', 'parse'];\nexport var createEvaluate = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    parse\n  } = _ref;\n\n  /**\n   * Evaluate an expression.\n   *\n   * Note the evaluating arbitrary expressions may involve security risks,\n   * see [https://mathjs.org/docs/expressions/security.html](https://mathjs.org/docs/expressions/security.html) for more information.\n   *\n   * Syntax:\n   *\n   *     math.evaluate(expr)\n   *     math.evaluate(expr, scope)\n   *     math.evaluate([expr1, expr2, expr3, ...])\n   *     math.evaluate([expr1, expr2, expr3, ...], scope)\n   *\n   * Example:\n   *\n   *     math.evaluate('(2+3)/4')                // 1.25\n   *     math.evaluate('sqrt(3^2 + 4^2)')        // 5\n   *     math.evaluate('sqrt(-4)')               // 2i\n   *     math.evaluate(['a=3', 'b=4', 'a*b'])    // [3, 4, 12]\n   *\n   *     let scope = {a:3, b:4}\n   *     math.evaluate('a * b', scope)           // 12\n   *\n   * See also:\n   *\n   *    parse, compile\n   *\n   * @param {string | string[] | Matrix} expr   The expression to be evaluated\n   * @param {Object} [scope]                    Scope to read/write variables\n   * @return {*} The result of the expression\n   * @throws {Error}\n   */\n  return typed(name, {\n    string: function string(expr) {\n      var scope = createEmptyMap();\n      return parse(expr).compile().evaluate(scope);\n    },\n    'string, Map | Object': function stringMapObject(expr, scope) {\n      return parse(expr).compile().evaluate(scope);\n    },\n    'Array | Matrix': function ArrayMatrix(expr) {\n      var scope = createEmptyMap();\n      return deepMap(expr, function (entry) {\n        return parse(entry).compile().evaluate(scope);\n      });\n    },\n    'Array | Matrix, Map | Object': function ArrayMatrixMapObject(expr, scope) {\n      return deepMap(expr, function (entry) {\n        return parse(entry).compile().evaluate(scope);\n      });\n    }\n  });\n});", "import { factory } from '../utils/factory.js';\nimport { createEmptyMap, toObject } from '../utils/map.js';\nvar name = 'Parser';\nvar dependencies = ['evaluate'];\nexport var createParserClass = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    evaluate\n  } = _ref;\n\n  /**\n   * @constructor Parser\n   * Parser contains methods to evaluate or parse expressions, and has a number\n   * of convenience methods to get, set, and remove variables from memory. Parser\n   * keeps a scope containing variables in memory, which is used for all\n   * evaluations.\n   *\n   * Methods:\n   *    const result = parser.evaluate(expr)  // evaluate an expression\n   *    const value = parser.get(name)        // retrieve a variable from the parser\n   *    const values = parser.getAll()        // retrieve all defined variables\n   *    parser.set(name, value)               // set a variable in the parser\n   *    parser.remove(name)                   // clear a variable from the\n   *                                          // parsers scope\n   *    parser.clear()                        // clear the parsers scope\n   *\n   * Example usage:\n   *    const parser = new Parser()\n   *    // Note: there is a convenience method which can be used instead:\n   *    // const parser = new math.parser()\n   *\n   *    // evaluate expressions\n   *    parser.evaluate('sqrt(3^2 + 4^2)')        // 5\n   *    parser.evaluate('sqrt(-4)')               // 2i\n   *    parser.evaluate('2 inch in cm')           // 5.08 cm\n   *    parser.evaluate('cos(45 deg)')            // 0.7071067811865476\n   *\n   *    // define variables and functions\n   *    parser.evaluate('x = 7 / 2')              // 3.5\n   *    parser.evaluate('x + 3')                  // 6.5\n   *    parser.evaluate('f(x, y) = x^y')          // f(x, y)\n   *    parser.evaluate('f(2, 3)')                // 8\n   *\n   *    // get and set variables and functions\n   *    const x = parser.get('x')                 // 7\n   *    const f = parser.get('f')                 // function\n   *    const g = f(3, 2)                         // 9\n   *    parser.set('h', 500)\n   *    const i = parser.evaluate('h / 2')        // 250\n   *    parser.set('hello', function (name) {\n   *        return 'hello, ' + name + '!'\n   *    })\n   *    parser.evaluate('hello(\"user\")')          // \"hello, user!\"\n   *\n   *    // clear defined functions and variables\n   *    parser.clear()\n   *\n   */\n  function Parser() {\n    if (!(this instanceof Parser)) {\n      throw new SyntaxError('Constructor must be called with the new operator');\n    }\n\n    Object.defineProperty(this, 'scope', {\n      value: createEmptyMap(),\n      writable: false\n    });\n  }\n  /**\n   * Attach type information\n   */\n\n\n  Parser.prototype.type = 'Parser';\n  Parser.prototype.isParser = true;\n  /**\n   * Parse and evaluate the given expression\n   * @param {string | string[]} expr   A string containing an expression,\n   *                                   for example \"2+3\", or a list with expressions\n   * @return {*} result     The result, or undefined when the expression was empty\n   * @throws {Error}\n   */\n\n  Parser.prototype.evaluate = function (expr) {\n    // TODO: validate arguments\n    return evaluate(expr, this.scope);\n  };\n  /**\n   * Get a variable (a function or variable) by name from the parsers scope.\n   * Returns undefined when not found\n   * @param {string} name\n   * @return {* | undefined} value\n   */\n\n\n  Parser.prototype.get = function (name) {\n    // TODO: validate arguments\n    if (this.scope.has(name)) {\n      return this.scope.get(name);\n    }\n  };\n  /**\n   * Get a map with all defined variables\n   * @return {Object} values\n   */\n\n\n  Parser.prototype.getAll = function () {\n    return toObject(this.scope);\n  };\n  /**\n   * Get a map with all defined variables\n   * @return {Map} values\n   */\n\n\n  Parser.prototype.getAllAsMap = function () {\n    return this.scope;\n  };\n  /**\n   * Set a symbol (a function or variable) by name from the parsers scope.\n   * @param {string} name\n   * @param {* | undefined} value\n   */\n\n\n  Parser.prototype.set = function (name, value) {\n    this.scope.set(name, value);\n    return value;\n  };\n  /**\n   * Remove a variable from the parsers scope\n   * @param {string} name\n   */\n\n\n  Parser.prototype.remove = function (name) {\n    this.scope.delete(name);\n  };\n  /**\n   * Clear the scope with variables and functions\n   */\n\n\n  Parser.prototype.clear = function () {\n    this.scope.clear();\n  };\n\n  return Parser;\n}, {\n  isClass: true\n});", "import { factory } from '../../utils/factory.js';\nimport { arraySize } from '../../utils/array.js';\nimport { isMatrix } from '../../utils/is.js';\nimport { IndexError } from '../../error/IndexError.js';\nvar name = 'apply';\nvar dependencies = ['typed', 'isInteger'];\nexport var createApply = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    isInteger\n  } = _ref;\n\n  /**\n   * Apply a function that maps an array to a scalar\n   * along a given axis of a matrix or array.\n   * Returns a new matrix or array with one less dimension than the input.\n   *\n   * Syntax:\n   *\n   *     math.apply(A, dim, callback)\n   *\n   * Where:\n   *\n   * - `dim: number` is a zero-based dimension over which to concatenate the matrices.\n   *\n   * Examples:\n   *\n   *    const A = [[1, 2], [3, 4]]\n   *    const sum = math.sum\n   *\n   *    math.apply(A, 0, sum)             // returns [4, 6]\n   *    math.apply(A, 1, sum)             // returns [3, 7]\n   *\n   * See also:\n   *\n   *    map, filter, forEach\n   *\n   * @param {Array | Matrix} array   The input Matrix\n   * @param {number} dim             The dimension along which the callback is applied\n   * @param {Function} callback      The callback function that is applied. This Function\n   *                                 should take an array or 1-d matrix as an input and\n   *                                 return a number.\n   * @return {Array | Matrix} res    The residual matrix with the function applied over some dimension.\n   */\n  return typed(name, {\n    'Array | Matrix, number | BigNumber, function': function ArrayMatrixNumberBigNumberFunction(mat, dim, callback) {\n      if (!isInteger(dim)) {\n        throw new TypeError('Integer number expected for dimension');\n      }\n\n      var size = Array.isArray(mat) ? arraySize(mat) : mat.size();\n\n      if (dim < 0 || dim >= size.length) {\n        throw new IndexError(dim, size.length);\n      }\n\n      if (isMatrix(mat)) {\n        return mat.create(_apply(mat.valueOf(), dim, callback));\n      } else {\n        return _apply(mat, dim, callback);\n      }\n    }\n  });\n});\n/**\n * Recursively reduce a matrix\n * @param {Array} mat\n * @param {number} dim\n * @param {Function} callback\n * @returns {Array} ret\n * @private\n */\n\nfunction _apply(mat, dim, callback) {\n  var i, ret, tran;\n\n  if (dim <= 0) {\n    if (!Array.isArray(mat[0])) {\n      return callback(mat);\n    } else {\n      tran = _switch(mat);\n      ret = [];\n\n      for (i = 0; i < tran.length; i++) {\n        ret[i] = _apply(tran[i], dim - 1, callback);\n      }\n\n      return ret;\n    }\n  } else {\n    ret = [];\n\n    for (i = 0; i < mat.length; i++) {\n      ret[i] = _apply(mat[i], dim - 1, callback);\n    }\n\n    return ret;\n  }\n}\n/**\n * Transpose a matrix\n * @param {Array} mat\n * @returns {Array} ret\n * @private\n */\n\n\nfunction _switch(mat) {\n  var I = mat.length;\n  var J = mat[0].length;\n  var i, j;\n  var ret = [];\n\n  for (j = 0; j < J; j++) {\n    var tmp = [];\n\n    for (i = 0; i < I; i++) {\n      tmp.push(mat[i][j]);\n    }\n\n    ret.push(tmp);\n  }\n\n  return ret;\n}", "import { filter, filterRegExp } from '../../utils/array.js';\nimport { maxArgumentCount } from '../../utils/function.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'filter';\nvar dependencies = ['typed'];\nexport var createFilter = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Filter the items in an array or one dimensional matrix.\n   *\n   * Syntax:\n   *\n   *    math.filter(x, test)\n   *\n   * Examples:\n   *\n   *    function isPositive (x) {\n   *      return x > 0\n   *    }\n   *    math.filter([6, -2, -1, 4, 3], isPositive) // returns [6, 4, 3]\n   *\n   *    math.filter([\"23\", \"foo\", \"100\", \"55\", \"bar\"], /[0-9]+/) // returns [\"23\", \"100\", \"55\"]\n   *\n   * See also:\n   *\n   *    forEach, map, sort\n   *\n   * @param {Matrix | Array} x    A one dimensional matrix or array to filter\n   * @param {Function | RegExp} test\n   *        A function or regular expression to test items.\n   *        All entries for which `test` returns true are returned.\n   *        When `test` is a function, it is invoked with three parameters:\n   *        the value of the element, the index of the element, and the\n   *        matrix/array being traversed. The function must return a boolean.\n   * @return {Matrix | Array} Returns the filtered matrix.\n   */\n  return typed('filter', {\n    'Array, function': _filterCallback,\n    'Matrix, function': function MatrixFunction(x, test) {\n      return x.create(_filterCallback(x.toArray(), test));\n    },\n    'Array, RegExp': filterRegExp,\n    'Matrix, RegExp': function MatrixRegExp(x, test) {\n      return x.create(filterRegExp(x.toArray(), test));\n    }\n  });\n});\n/**\n * Filter values in a callback given a callback function\n * @param {Array} x\n * @param {Function} callback\n * @return {Array} Returns the filtered array\n * @private\n */\n\nfunction _filterCallback(x, callback) {\n  // figure out what number of arguments the callback function expects\n  var args = maxArgumentCount(callback);\n  return filter(x, function (value, index, array) {\n    // invoke the callback function with the right number of arguments\n    if (args === 1) {\n      return callback(value);\n    } else if (args === 2) {\n      return callback(value, [index]);\n    } else {\n      // 3 or -1\n      return callback(value, [index], array);\n    }\n  });\n}", "import { maxArgumentCount } from '../../utils/function.js';\nimport { forEach as forEachArray } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'forEach';\nvar dependencies = ['typed'];\nexport var createForEach = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Iterate over all elements of a matrix/array, and executes the given callback function.\n   *\n   * Syntax:\n   *\n   *    math.forEach(x, callback)\n   *\n   * Examples:\n   *\n   *    math.forEach([1, 2, 3], function(value) {\n   *      console.log(value)\n   *    })\n   *    // outputs 1, 2, 3\n   *\n   * See also:\n   *\n   *    filter, map, sort\n   *\n   * @param {Matrix | Array} x    The matrix to iterate on.\n   * @param {Function} callback   The callback function is invoked with three\n   *                              parameters: the value of the element, the index\n   *                              of the element, and the Matrix/array being traversed.\n   */\n  return typed(name, {\n    'Array, function': _forEach,\n    'Matrix, function': function MatrixFunction(x, callback) {\n      return x.forEach(callback);\n    }\n  });\n});\n/**\n * forEach for a multi dimensional array\n * @param {Array} array\n * @param {Function} callback\n * @private\n */\n\nfunction _forEach(array, callback) {\n  // figure out what number of arguments the callback function expects\n  var args = maxArgumentCount(callback);\n\n  var recurse = function recurse(value, index) {\n    if (Array.isArray(value)) {\n      forEachArray(value, function (child, i) {\n        // we create a copy of the index array and append the new index value\n        recurse(child, index.concat(i));\n      });\n    } else {\n      // invoke the callback function with the right number of arguments\n      if (args === 1) {\n        callback(value);\n      } else if (args === 2) {\n        callback(value, index);\n      } else {\n        // 3 or -1\n        callback(value, index, array);\n      }\n    }\n  };\n\n  recurse(array, []);\n}", "import { maxArgumentCount } from '../../utils/function.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'map';\nvar dependencies = ['typed'];\nexport var createMap = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Create a new matrix or array with the results of a callback function executed on\n   * each entry of a given matrix/array.\n   *\n   * For each entry of the input, the callback is invoked with three arguments:\n   * the value of the entry, the index at which that entry occurs, and the full\n   * matrix/array being traversed. Note that because the matrix/array might be\n   * multidimensional, the \"index\" argument is always an array of numbers giving\n   * the index in each dimension. This is true even for vectors: the \"index\"\n   * argument is an array of length 1, rather than simply a number.\n   *\n   * Syntax:\n   *\n   *    math.map(x, callback)\n   *\n   * Examples:\n   *\n   *    math.map([1, 2, 3], function(value) {\n   *      return value * value\n   *    })  // returns [1, 4, 9]\n   *\n   *    // The calling convention for the callback can cause subtleties:\n   *    math.map([1, 2, 3], math.format)\n   *    // throws TypeError: map attempted to call 'format(1,[0])' but argument 2 of type Array does not match expected type number or function or Object or string or boolean\n   *    // [This happens because `format` _can_ take a second argument,\n   *    // but its semantics don't match that of the 2nd argument `map` provides]\n   *\n   *    // To avoid this error, use a function that takes exactly the\n   *    // desired arguments:\n   *    math.map([1, 2, 3], x => math.format(x)) // returns ['1', '2', '3']\n   *\n   * See also:\n   *\n   *    filter, forEach, sort\n   *\n   * @param {Matrix | Array} x    The input to iterate on.\n   * @param {Function} callback\n   *     The function to call (as described above) on each entry of the input\n   * @return {Matrix | array}\n   *     Transformed map of x; always has the same type and shape as x\n   */\n  return typed(name, {\n    'Array, function': _map,\n    'Matrix, function': function MatrixFunction(x, callback) {\n      return x.map(callback);\n    }\n  });\n});\n/**\n * Map for a multi dimensional array\n * @param {Array} array\n * @param {Function} callback\n * @return {Array}\n * @private\n */\n\nfunction _map(array, callback) {\n  // figure out what number of arguments the callback function expects\n  var args = maxArgumentCount(callback);\n\n  var recurse = function recurse(value, index) {\n    if (Array.isArray(value)) {\n      return value.map(function (child, i) {\n        // we create a copy of the index array and append the new index value\n        return recurse(child, index.concat(i));\n      });\n    } else {\n      try {\n        // invoke the callback function with the right number of arguments\n        if (args === 1) {\n          return callback(value);\n        } else if (args === 2) {\n          return callback(value, index);\n        } else {\n          // 3 or -1\n          return callback(value, index, array);\n        }\n      } catch (err) {\n        // But maybe the arguments still weren't right\n        if (err instanceof TypeError && 'data' in err && err.data.category === 'wrongType') {\n          var newmsg = \"map attempted to call '\".concat(err.data.fn, \"(\").concat(value);\n          var indexString = JSON.stringify(index);\n\n          if (args === 2) {\n            newmsg += ',' + indexString;\n          } else if (args !== 1) {\n            newmsg += \",\".concat(indexString, \",\").concat(array);\n          }\n\n          newmsg += \")' but argument \".concat(err.data.index + 1, \" of type \");\n          newmsg += \"\".concat(err.data.actual, \" does not match expected type \");\n          newmsg += err.data.expected.join(' or ');\n          throw new TypeError(newmsg);\n        }\n\n        throw err;\n      }\n    }\n  };\n\n  return recurse(array, []);\n}", "import { factory } from '../../utils/factory.js';\nimport { noBignumber, noMatrix } from '../../utils/noop.js';\nvar name = 'range';\nvar dependencies = ['typed', 'config', '?matrix', '?bignumber', 'smaller', 'smallerEq', 'larger', 'largerEq'];\nexport var createRange = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix,\n    bignumber,\n    smaller,\n    smallerEq,\n    larger,\n    largerEq\n  } = _ref;\n\n  /**\n   * Create an array from a range.\n   * By default, the range end is excluded. This can be customized by providing\n   * an extra parameter `includeEnd`.\n   *\n   * Syntax:\n   *\n   *     math.range(str [, includeEnd])               // Create a range from a string,\n   *                                                  // where the string contains the\n   *                                                  // start, optional step, and end,\n   *                                                  // separated by a colon.\n   *     math.range(start, end [, includeEnd])        // Create a range with start and\n   *                                                  // end and a step size of 1.\n   *     math.range(start, end, step [, includeEnd])  // Create a range with start, step,\n   *                                                  // and end.\n   *\n   * Where:\n   *\n   * - `str: string`\n   *   A string 'start:end' or 'start:step:end'\n   * - `start: {number | BigNumber}`\n   *   Start of the range\n   * - `end: number | BigNumber`\n   *   End of the range, excluded by default, included when parameter includeEnd=true\n   * - `step: number | BigNumber`\n   *   Step size. Default value is 1.\n   * - `includeEnd: boolean`\n   *   Option to specify whether to include the end or not. False by default.\n   *\n   * Examples:\n   *\n   *     math.range(2, 6)        // [2, 3, 4, 5]\n   *     math.range(2, -3, -1)   // [2, 1, 0, -1, -2]\n   *     math.range('2:1:6')     // [2, 3, 4, 5]\n   *     math.range(2, 6, true)  // [2, 3, 4, 5, 6]\n   *\n   * See also:\n   *\n   *     ones, zeros, size, subset\n   *\n   * @param {*} args   Parameters describing the ranges `start`, `end`, and optional `step`.\n   * @return {Array | Matrix} range\n   */\n  return typed(name, {\n    // TODO: simplify signatures when typed-function supports default values and optional arguments\n    // TODO: a number or boolean should not be converted to string here\n    string: _strRange,\n    'string, boolean': _strRange,\n    'number, number': function numberNumber(start, end) {\n      return _out(_rangeEx(start, end, 1));\n    },\n    'number, number, number': function numberNumberNumber(start, end, step) {\n      return _out(_rangeEx(start, end, step));\n    },\n    'number, number, boolean': function numberNumberBoolean(start, end, includeEnd) {\n      return includeEnd ? _out(_rangeInc(start, end, 1)) : _out(_rangeEx(start, end, 1));\n    },\n    'number, number, number, boolean': function numberNumberNumberBoolean(start, end, step, includeEnd) {\n      return includeEnd ? _out(_rangeInc(start, end, step)) : _out(_rangeEx(start, end, step));\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(start, end) {\n      var BigNumber = start.constructor;\n      return _out(_bigRangeEx(start, end, new BigNumber(1)));\n    },\n    'BigNumber, BigNumber, BigNumber': function BigNumberBigNumberBigNumber(start, end, step) {\n      return _out(_bigRangeEx(start, end, step));\n    },\n    'BigNumber, BigNumber, boolean': function BigNumberBigNumberBoolean(start, end, includeEnd) {\n      var BigNumber = start.constructor;\n      return includeEnd ? _out(_bigRangeInc(start, end, new BigNumber(1))) : _out(_bigRangeEx(start, end, new BigNumber(1)));\n    },\n    'BigNumber, BigNumber, BigNumber, boolean': function BigNumberBigNumberBigNumberBoolean(start, end, step, includeEnd) {\n      return includeEnd ? _out(_bigRangeInc(start, end, step)) : _out(_bigRangeEx(start, end, step));\n    }\n  });\n\n  function _out(arr) {\n    if (config.matrix === 'Matrix') {\n      return matrix ? matrix(arr) : noMatrix();\n    }\n\n    return arr;\n  }\n\n  function _strRange(str, includeEnd) {\n    var r = _parse(str);\n\n    if (!r) {\n      throw new SyntaxError('String \"' + str + '\" is no valid range');\n    }\n\n    var fn;\n\n    if (config.number === 'BigNumber') {\n      if (bignumber === undefined) {\n        noBignumber();\n      }\n\n      fn = includeEnd ? _bigRangeInc : _bigRangeEx;\n      return _out(fn(bignumber(r.start), bignumber(r.end), bignumber(r.step)));\n    } else {\n      fn = includeEnd ? _rangeInc : _rangeEx;\n      return _out(fn(r.start, r.end, r.step));\n    }\n  }\n  /**\n   * Create a range with numbers. End is excluded\n   * @param {number} start\n   * @param {number} end\n   * @param {number} step\n   * @returns {Array} range\n   * @private\n   */\n\n\n  function _rangeEx(start, end, step) {\n    var array = [];\n    var x = start;\n\n    if (step > 0) {\n      while (smaller(x, end)) {\n        array.push(x);\n        x += step;\n      }\n    } else if (step < 0) {\n      while (larger(x, end)) {\n        array.push(x);\n        x += step;\n      }\n    }\n\n    return array;\n  }\n  /**\n   * Create a range with numbers. End is included\n   * @param {number} start\n   * @param {number} end\n   * @param {number} step\n   * @returns {Array} range\n   * @private\n   */\n\n\n  function _rangeInc(start, end, step) {\n    var array = [];\n    var x = start;\n\n    if (step > 0) {\n      while (smallerEq(x, end)) {\n        array.push(x);\n        x += step;\n      }\n    } else if (step < 0) {\n      while (largerEq(x, end)) {\n        array.push(x);\n        x += step;\n      }\n    }\n\n    return array;\n  }\n  /**\n   * Create a range with big numbers. End is excluded\n   * @param {BigNumber} start\n   * @param {BigNumber} end\n   * @param {BigNumber} step\n   * @returns {Array} range\n   * @private\n   */\n\n\n  function _bigRangeEx(start, end, step) {\n    var zero = bignumber(0);\n    var array = [];\n    var x = start;\n\n    if (step.gt(zero)) {\n      while (smaller(x, end)) {\n        array.push(x);\n        x = x.plus(step);\n      }\n    } else if (step.lt(zero)) {\n      while (larger(x, end)) {\n        array.push(x);\n        x = x.plus(step);\n      }\n    }\n\n    return array;\n  }\n  /**\n   * Create a range with big numbers. End is included\n   * @param {BigNumber} start\n   * @param {BigNumber} end\n   * @param {BigNumber} step\n   * @returns {Array} range\n   * @private\n   */\n\n\n  function _bigRangeInc(start, end, step) {\n    var zero = bignumber(0);\n    var array = [];\n    var x = start;\n\n    if (step.gt(zero)) {\n      while (smallerEq(x, end)) {\n        array.push(x);\n        x = x.plus(step);\n      }\n    } else if (step.lt(zero)) {\n      while (largerEq(x, end)) {\n        array.push(x);\n        x = x.plus(step);\n      }\n    }\n\n    return array;\n  }\n  /**\n   * Parse a string into a range,\n   * The string contains the start, optional step, and end, separated by a colon.\n   * If the string does not contain a valid range, null is returned.\n   * For example str='0:2:11'.\n   * @param {string} str\n   * @return {{start: number, end: number, step: number} | null} range Object containing properties start, end, step\n   * @private\n   */\n\n\n  function _parse(str) {\n    var args = str.split(':'); // number\n\n    var nums = args.map(function (arg) {\n      // use Number and not parseFloat as Number returns NaN on invalid garbage in the string\n      return Number(arg);\n    });\n    var invalid = nums.some(function (num) {\n      return isNaN(num);\n    });\n\n    if (invalid) {\n      return null;\n    }\n\n    switch (nums.length) {\n      case 2:\n        return {\n          start: nums[0],\n          end: nums[1],\n          step: 1\n        };\n\n      case 3:\n        return {\n          start: nums[0],\n          end: nums[2],\n          step: nums[1]\n        };\n\n      default:\n        return null;\n    }\n  }\n});", "import { arraySize } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { noMatrix } from '../../utils/noop.js';\nvar name = 'size';\nvar dependencies = ['typed', 'config', '?matrix'];\nexport var createSize = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix\n  } = _ref;\n\n  /**\n   * Calculate the size of a matrix or scalar.\n   *\n   * Syntax:\n   *\n   *     math.size(x)\n   *\n   * Examples:\n   *\n   *     math.size(2.3)                  // returns []\n   *     math.size('hello world')        // returns [11]\n   *\n   *     const A = [[1, 2, 3], [4, 5, 6]]\n   *     math.size(A)                    // returns [2, 3]\n   *     math.size(math.range(1,6))      // returns [5]\n   *\n   * See also:\n   *\n   *     count, resize, squeeze, subset\n   *\n   * @param {boolean | number | Complex | Unit | string | Array | Matrix} x  A matrix\n   * @return {Array | Matrix} A vector with size of `x`.\n   */\n  return typed(name, {\n    Matrix: function Matrix(x) {\n      return x.create(x.size());\n    },\n    Array: arraySize,\n    string: function string(x) {\n      return config.matrix === 'Array' ? [x.length] : matrix([x.length]);\n    },\n    'number | Complex | BigNumber | Unit | boolean | null': function numberComplexBigNumberUnitBooleanNull(x) {\n      // scalar\n      return config.matrix === 'Array' ? [] : matrix ? matrix([]) : noMatrix();\n    }\n  });\n});", "import { isMatrix } from '../../utils/is.js';\nimport { isInteger } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'partitionSelect';\nvar dependencies = ['typed', 'isNumeric', 'isNaN', 'compare'];\nexport var createPartitionSelect = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    isNumeric,\n    isNaN,\n    compare\n  } = _ref;\n  var asc = compare;\n\n  var desc = (a, b) => -compare(a, b);\n  /**\n   * Partition-based selection of an array or 1D matrix.\n   * Will find the kth smallest value, and mutates the input array.\n   * Uses Quickselect.\n   *\n   * Syntax:\n   *\n   *    math.partitionSelect(x, k)\n   *    math.partitionSelect(x, k, compare)\n   *\n   * Examples:\n   *\n   *    math.partitionSelect([5, 10, 1], 2)           // returns 10\n   *    math.partitionSelect(['C', 'B', 'A', 'D'], 1) // returns 'B'\n   *\n   *    function sortByLength (a, b) {\n   *      return a.length - b.length\n   *    }\n   *    math.partitionSelect(['Langdon', 'Tom', 'Sara'], 2, sortByLength) // returns 'Langdon'\n   *\n   * See also:\n   *\n   *    sort\n   *\n   * @param {Matrix | Array} x    A one dimensional matrix or array to sort\n   * @param {Number} k            The kth smallest value to be retrieved zero-based index\n   * @param {Function | 'asc' | 'desc'} [compare='asc']\n   *        An optional comparator function. The function is called as\n   *        `compare(a, b)`, and must return 1 when a > b, -1 when a < b,\n   *        and 0 when a == b.\n   * @return {*} Returns the kth lowest value.\n   */\n\n\n  return typed(name, {\n    'Array | Matrix, number': function ArrayMatrixNumber(x, k) {\n      return _partitionSelect(x, k, asc);\n    },\n    'Array | Matrix, number, string': function ArrayMatrixNumberString(x, k, compare) {\n      if (compare === 'asc') {\n        return _partitionSelect(x, k, asc);\n      } else if (compare === 'desc') {\n        return _partitionSelect(x, k, desc);\n      } else {\n        throw new Error('Compare string must be \"asc\" or \"desc\"');\n      }\n    },\n    'Array | Matrix, number, function': _partitionSelect\n  });\n\n  function _partitionSelect(x, k, compare) {\n    if (!isInteger(k) || k < 0) {\n      throw new Error('k must be a non-negative integer');\n    }\n\n    if (isMatrix(x)) {\n      var size = x.size();\n\n      if (size.length > 1) {\n        throw new Error('Only one dimensional matrices supported');\n      }\n\n      return quickSelect(x.valueOf(), k, compare);\n    }\n\n    if (Array.isArray(x)) {\n      return quickSelect(x, k, compare);\n    }\n  }\n  /**\n   * Quickselect algorithm.\n   * Code adapted from:\n   * https://blog.teamleadnet.com/2012/07/quick-select-algorithm-find-kth-element.html\n   *\n   * @param {Array} arr\n   * @param {Number} k\n   * @param {Function} compare\n   * @private\n   */\n\n\n  function quickSelect(arr, k, compare) {\n    if (k >= arr.length) {\n      throw new Error('k out of bounds');\n    } // check for NaN values since these can cause an infinite while loop\n\n\n    for (var i = 0; i < arr.length; i++) {\n      if (isNumeric(arr[i]) && isNaN(arr[i])) {\n        return arr[i]; // return NaN\n      }\n    }\n\n    var from = 0;\n    var to = arr.length - 1; // if from == to we reached the kth element\n\n    while (from < to) {\n      var r = from;\n      var w = to;\n      var pivot = arr[Math.floor(Math.random() * (to - from + 1)) + from]; // stop if the reader and writer meets\n\n      while (r < w) {\n        // arr[r] >= pivot\n        if (compare(arr[r], pivot) >= 0) {\n          // put the large values at the end\n          var tmp = arr[w];\n          arr[w] = arr[r];\n          arr[r] = tmp;\n          --w;\n        } else {\n          // the value is smaller than the pivot, skip\n          ++r;\n        }\n      } // if we stepped up (r++) we need to step one down (arr[r] > pivot)\n\n\n      if (compare(arr[r], pivot) > 0) {\n        --r;\n      } // the r pointer is on the end of the first k elements\n\n\n      if (k <= r) {\n        to = r;\n      } else {\n        from = r + 1;\n      }\n    }\n\n    return arr[k];\n  }\n});", "import { factory } from '../../utils/factory.js';\nimport { isInteger } from '../../utils/number.js';\nimport { product } from '../../utils/product.js';\nvar name = 'combinationsWithRep';\nvar dependencies = ['typed'];\nexport var createCombinationsWithRep = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Compute the number of ways of picking `k` unordered outcomes from `n`\n   * possibilities, allowing individual outcomes to be repeated more than once.\n   *\n   * CombinationsWithRep only takes integer arguments.\n   * The following condition must be enforced: k <= n + k -1.\n   *\n   * Syntax:\n   *\n   *     math.combinationsWithRep(n, k)\n   *\n   * Examples:\n   *\n   *    math.combinationsWithRep(7, 5) // returns 462\n   *\n   * See also:\n   *\n   *    combinations, permutations, factorial\n   *\n   * @param {number | BigNumber} n    Total number of objects in the set\n   * @param {number | BigNumber} k    Number of objects in the subset\n   * @return {number | BigNumber}     Number of possible combinations with replacement.\n   */\n  return typed(name, {\n    'number, number': function numberNumber(n, k) {\n      if (!isInteger(n) || n < 0) {\n        throw new TypeError('Positive integer value expected in function combinationsWithRep');\n      }\n\n      if (!isInteger(k) || k < 0) {\n        throw new TypeError('Positive integer value expected in function combinationsWithRep');\n      }\n\n      if (n < 1) {\n        throw new TypeError('k must be less than or equal to n + k - 1');\n      }\n\n      if (k < n - 1) {\n        var _prodrange = product(n, n + k - 1);\n\n        return _prodrange / product(1, k);\n      }\n\n      var prodrange = product(k + 1, n + k - 1);\n      return prodrange / product(1, n - 1);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(n, k) {\n      var BigNumber = n.constructor;\n      var result, i;\n      var one = new BigNumber(1);\n      var nMinusOne = n.minus(one);\n\n      if (!isPositiveInteger(n) || !isPositiveInteger(k)) {\n        throw new TypeError('Positive integer value expected in function combinationsWithRep');\n      }\n\n      if (n.lt(one)) {\n        throw new TypeError('k must be less than or equal to n + k - 1 in function combinationsWithRep');\n      }\n\n      result = one;\n\n      if (k.lt(nMinusOne)) {\n        for (i = one; i.lte(nMinusOne); i = i.plus(one)) {\n          result = result.times(k.plus(i)).dividedBy(i);\n        }\n      } else {\n        for (i = one; i.lte(k); i = i.plus(one)) {\n          result = result.times(nMinusOne.plus(i)).dividedBy(i);\n        }\n      }\n\n      return result;\n    }\n  });\n});\n/**\n * Test whether BigNumber n is a positive integer\n * @param {BigNumber} n\n * @returns {boolean} isPositiveInteger\n */\n\nfunction isPositiveInteger(n) {\n  return n.isInteger() && n.gte(0);\n}", "import { deepMap } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'factorial';\nvar dependencies = ['typed', 'gamma'];\nexport var createFactorial = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    gamma\n  } = _ref;\n\n  /**\n   * Compute the factorial of a value\n   *\n   * Factorial only supports an integer value as argument.\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.factorial(n)\n   *\n   * Examples:\n   *\n   *    math.factorial(5)    // returns 120\n   *    math.factorial(3)    // returns 6\n   *\n   * See also:\n   *\n   *    combinations, combinationsWithRep, gamma, permutations\n   *\n   * @param {number | BigNumber | Array | Matrix} n   An integer number\n   * @return {number | BigNumber | Array | Matrix}    The factorial of `n`\n   */\n  return typed(name, {\n    number: function number(n) {\n      if (n < 0) {\n        throw new Error('Value must be non-negative');\n      }\n\n      return gamma(n + 1);\n    },\n    BigNumber: function BigNumber(n) {\n      if (n.isNegative()) {\n        throw new Error('Value must be non-negative');\n      }\n\n      return gamma(n.plus(1));\n    },\n    'Array | Matrix': function ArrayMatrix(n) {\n      return deepMap(n, this);\n    }\n  });\n});", "import { deepForEach } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'multinomial';\nvar dependencies = ['typed', 'add', 'divide', 'multiply', 'factorial', 'isInteger', 'isPositive'];\nexport var createMultinomial = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    divide,\n    multiply,\n    factorial,\n    isInteger,\n    isPositive\n  } = _ref;\n\n  /**\n   * Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities.\n   *\n   * multinomial takes one array of integers as an argument.\n   * The following condition must be enforced: every ai <= 0\n   *\n   * Syntax:\n   *\n   *     math.multinomial(a) // a is an array type\n   *\n   * Examples:\n   *\n   *    math.multinomial([1,2,1]) // returns 12\n   *\n   * See also:\n   *\n   *    combinations, factorial\n   *\n   * @param {number[] | BigNumber[]} a    Integer numbers of objects in the subset\n   * @return {Number | BigNumber}         Multinomial coefficient.\n   */\n  return typed(name, {\n    'Array | Matrix': function ArrayMatrix(a) {\n      var sum = 0;\n      var denom = 1;\n      deepForEach(a, function (ai) {\n        if (!isInteger(ai) || !isPositive(ai)) {\n          throw new TypeError('Positive integer value expected in function multinomial');\n        }\n\n        sum = add(sum, ai);\n        denom = multiply(denom, factorial(ai));\n      });\n      return divide(factorial(sum), denom);\n    }\n  });\n});", "import { isInteger } from '../../utils/number.js';\nimport { product } from '../../utils/product.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'permutations';\nvar dependencies = ['typed', 'factorial'];\nexport var createPermutations = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    factorial\n  } = _ref;\n\n  /**\n   * Compute the number of ways of obtaining an ordered subset of `k` elements\n   * from a set of `n` elements.\n   *\n   * Permutations only takes integer arguments.\n   * The following condition must be enforced: k <= n.\n   *\n   * Syntax:\n   *\n   *     math.permutations(n)\n   *     math.permutations(n, k)\n   *\n   * Examples:\n   *\n   *    math.permutations(5)     // 120\n   *    math.permutations(5, 3)  // 60\n   *\n   * See also:\n   *\n   *    combinations, combinationsWithRep, factorial\n   *\n   * @param {number | BigNumber} n   The number of objects in total\n   * @param {number | BigNumber} [k] The number of objects in the subset\n   * @return {number | BigNumber}    The number of permutations\n   */\n  return typed(name, {\n    'number | BigNumber': factorial,\n    'number, number': function numberNumber(n, k) {\n      if (!isInteger(n) || n < 0) {\n        throw new TypeError('Positive integer value expected in function permutations');\n      }\n\n      if (!isInteger(k) || k < 0) {\n        throw new TypeError('Positive integer value expected in function permutations');\n      }\n\n      if (k > n) {\n        throw new TypeError('second argument k must be less than or equal to first argument n');\n      } // Permute n objects, k at a time\n\n\n      return product(n - k + 1, n);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(n, k) {\n      var result, i;\n\n      if (!isPositiveInteger(n) || !isPositiveInteger(k)) {\n        throw new TypeError('Positive integer value expected in function permutations');\n      }\n\n      if (k.gt(n)) {\n        throw new TypeError('second argument k must be less than or equal to first argument n');\n      }\n\n      var one = n.mul(0).add(1);\n      result = one;\n\n      for (i = n.minus(k).plus(1); i.lte(n); i = i.plus(1)) {\n        result = result.times(i);\n      }\n\n      return result;\n    } // TODO: implement support for collection in permutations\n\n  });\n});\n/**\n * Test whether BigNumber n is a positive integer\n * @param {BigNumber} n\n * @returns {boolean} isPositiveInteger\n */\n\nfunction isPositiveInteger(n) {\n  return n.isInteger() && n.gte(0);\n}", "// A port of an algorithm by Johannes Baag\u00F8e <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baag\u00F8e <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n  var me = this, mash = Mash();\n\n  me.next = function() {\n    var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n    me.s0 = me.s1;\n    me.s1 = me.s2;\n    return me.s2 = t - (me.c = t | 0);\n  };\n\n  // Apply the seeding algorithm from Baagoe.\n  me.c = 1;\n  me.s0 = mash(' ');\n  me.s1 = mash(' ');\n  me.s2 = mash(' ');\n  me.s0 -= mash(seed);\n  if (me.s0 < 0) { me.s0 += 1; }\n  me.s1 -= mash(seed);\n  if (me.s1 < 0) { me.s1 += 1; }\n  me.s2 -= mash(seed);\n  if (me.s2 < 0) { me.s2 += 1; }\n  mash = null;\n}\n\nfunction copy(f, t) {\n  t.c = f.c;\n  t.s0 = f.s0;\n  t.s1 = f.s1;\n  t.s2 = f.s2;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new Alea(seed),\n      state = opts && opts.state,\n      prng = xg.next;\n  prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n  prng.double = function() {\n    return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n  };\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nfunction Mash() {\n  var n = 0xefc8249d;\n\n  var mash = function(data) {\n    data = String(data);\n    for (var i = 0; i < data.length; i++) {\n      n += data.charCodeAt(i);\n      var h = 0.02519603282416938 * n;\n      n = h >>> 0;\n      h -= n;\n      h *= n;\n      n = h >>> 0;\n      h -= n;\n      n += h * 0x100000000; // 2^32\n    }\n    return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n  };\n\n  return mash;\n}\n\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.alea = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia.  See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  me.x = 0;\n  me.y = 0;\n  me.z = 0;\n  me.w = 0;\n\n  // Set up generator function.\n  me.next = function() {\n    var t = me.x ^ (me.x << 11);\n    me.x = me.y;\n    me.y = me.z;\n    me.z = me.w;\n    return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n  };\n\n  if (seed === (seed | 0)) {\n    // Integer seed.\n    me.x = seed;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 64; k++) {\n    me.x ^= strseed.charCodeAt(k) | 0;\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.x = f.x;\n  t.y = f.y;\n  t.z = f.z;\n  t.w = f.w;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xor128 = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia.  See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  // Set up generator function.\n  me.next = function() {\n    var t = (me.x ^ (me.x >>> 2));\n    me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n    return (me.d = (me.d + 362437 | 0)) +\n       (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n  };\n\n  me.x = 0;\n  me.y = 0;\n  me.z = 0;\n  me.w = 0;\n  me.v = 0;\n\n  if (seed === (seed | 0)) {\n    // Integer seed.\n    me.x = seed;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 64; k++) {\n    me.x ^= strseed.charCodeAt(k) | 0;\n    if (k == strseed.length) {\n      me.d = me.x << 10 ^ me.x >>> 4;\n    }\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.x = f.x;\n  t.y = f.y;\n  t.z = f.z;\n  t.w = f.w;\n  t.v = f.v;\n  t.d = f.d;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xorwow = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "// A Javascript implementaion of the \"xorshift7\" algorithm by\n// Fran\u00E7ois Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this;\n\n  // Set up generator function.\n  me.next = function() {\n    // Update xor generator.\n    var X = me.x, i = me.i, t, v, w;\n    t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n    t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n    t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n    t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n    t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n    X[i] = v;\n    me.i = (i + 1) & 7;\n    return v;\n  };\n\n  function init(me, seed) {\n    var j, w, X = [];\n\n    if (seed === (seed | 0)) {\n      // Seed state array using a 32-bit integer.\n      w = X[0] = seed;\n    } else {\n      // Seed state using a string.\n      seed = '' + seed;\n      for (j = 0; j < seed.length; ++j) {\n        X[j & 7] = (X[j & 7] << 15) ^\n            (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n      }\n    }\n    // Enforce an array length of 8, not all zeroes.\n    while (X.length < 8) X.push(0);\n    for (j = 0; j < 8 && X[j] === 0; ++j);\n    if (j == 8) w = X[7] = -1; else w = X[j];\n\n    me.x = X;\n    me.i = 0;\n\n    // Discard an initial 256 values.\n    for (j = 256; j > 0; --j) {\n      me.next();\n    }\n  }\n\n  init(me, seed);\n}\n\nfunction copy(f, t) {\n  t.x = f.x.slice();\n  t.i = f.i;\n  return t;\n}\n\nfunction impl(seed, opts) {\n  if (seed == null) seed = +(new Date);\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (state.x) copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xorshift7 = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n", "// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated.  For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1);                        // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897);   // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C.  This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this;\n\n  // Set up generator function.\n  me.next = function() {\n    var w = me.w,\n        X = me.X, i = me.i, t, v;\n    // Update Weyl generator.\n    me.w = w = (w + 0x61c88647) | 0;\n    // Update xor generator.\n    v = X[(i + 34) & 127];\n    t = X[i = ((i + 1) & 127)];\n    v ^= v << 13;\n    t ^= t << 17;\n    v ^= v >>> 15;\n    t ^= t >>> 12;\n    // Update Xor generator array state.\n    v = X[i] = v ^ t;\n    me.i = i;\n    // Result is the combination.\n    return (v + (w ^ (w >>> 16))) | 0;\n  };\n\n  function init(me, seed) {\n    var t, v, i, j, w, X = [], limit = 128;\n    if (seed === (seed | 0)) {\n      // Numeric seeds initialize v, which is used to generates X.\n      v = seed;\n      seed = null;\n    } else {\n      // String seeds are mixed into v and X one character at a time.\n      seed = seed + '\\0';\n      v = 0;\n      limit = Math.max(limit, seed.length);\n    }\n    // Initialize circular array and weyl value.\n    for (i = 0, j = -32; j < limit; ++j) {\n      // Put the unicode characters into the array, and shuffle them.\n      if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n      // After 32 shuffles, take v as the starting w value.\n      if (j === 0) w = v;\n      v ^= v << 10;\n      v ^= v >>> 15;\n      v ^= v << 4;\n      v ^= v >>> 13;\n      if (j >= 0) {\n        w = (w + 0x61c88647) | 0;     // Weyl.\n        t = (X[j & 127] ^= (v + w));  // Combine xor and weyl to init array.\n        i = (0 == t) ? i + 1 : 0;     // Count zeroes.\n      }\n    }\n    // We have detected all zeroes; make the key nonzero.\n    if (i >= 128) {\n      X[(seed && seed.length || 0) & 127] = -1;\n    }\n    // Run the generator 512 times to further mix the state before using it.\n    // Factoring this as a function slows the main generator, so it is just\n    // unrolled here.  The weyl generator is not advanced while warming up.\n    i = 127;\n    for (j = 4 * 128; j > 0; --j) {\n      v = X[(i + 34) & 127];\n      t = X[i = ((i + 1) & 127)];\n      v ^= v << 13;\n      t ^= t << 17;\n      v ^= v >>> 15;\n      t ^= t >>> 12;\n      X[i] = v ^ t;\n    }\n    // Storing state as object members is faster than using closure variables.\n    me.w = w;\n    me.X = X;\n    me.i = i;\n  }\n\n  init(me, seed);\n}\n\nfunction copy(f, t) {\n  t.i = f.i;\n  t.w = f.w;\n  t.X = f.X.slice();\n  return t;\n};\n\nfunction impl(seed, opts) {\n  if (seed == null) seed = +(new Date);\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (state.X) copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.xor4096 = impl;\n}\n\n})(\n  this,                                     // window object or global\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n", "// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n  var me = this, strseed = '';\n\n  // Set up generator function.\n  me.next = function() {\n    var b = me.b, c = me.c, d = me.d, a = me.a;\n    b = (b << 25) ^ (b >>> 7) ^ c;\n    c = (c - d) | 0;\n    d = (d << 24) ^ (d >>> 8) ^ a;\n    a = (a - b) | 0;\n    me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n    me.c = c = (c - d) | 0;\n    me.d = (d << 16) ^ (c >>> 16) ^ a;\n    return me.a = (a - b) | 0;\n  };\n\n  /* The following is non-inverted tyche, which has better internal\n   * bit diffusion, but which is about 25% slower than tyche-i in JS.\n  me.next = function() {\n    var a = me.a, b = me.b, c = me.c, d = me.d;\n    a = (me.a + me.b | 0) >>> 0;\n    d = me.d ^ a; d = d << 16 ^ d >>> 16;\n    c = me.c + d | 0;\n    b = me.b ^ c; b = b << 12 ^ d >>> 20;\n    me.a = a = a + b | 0;\n    d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n    me.c = c = c + d | 0;\n    b = b ^ c;\n    return me.b = (b << 7 ^ b >>> 25);\n  }\n  */\n\n  me.a = 0;\n  me.b = 0;\n  me.c = 2654435769 | 0;\n  me.d = 1367130551;\n\n  if (seed === Math.floor(seed)) {\n    // Integer seed.\n    me.a = (seed / 0x100000000) | 0;\n    me.b = seed | 0;\n  } else {\n    // String seed.\n    strseed += seed;\n  }\n\n  // Mix in string seed, then discard an initial batch of 64 values.\n  for (var k = 0; k < strseed.length + 20; k++) {\n    me.b ^= strseed.charCodeAt(k) | 0;\n    me.next();\n  }\n}\n\nfunction copy(f, t) {\n  t.a = f.a;\n  t.b = f.b;\n  t.c = f.c;\n  t.d = f.d;\n  return t;\n};\n\nfunction impl(seed, opts) {\n  var xg = new XorGen(seed),\n      state = opts && opts.state,\n      prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n  prng.double = function() {\n    do {\n      var top = xg.next() >>> 11,\n          bot = (xg.next() >>> 0) / 0x100000000,\n          result = (top + bot) / (1 << 21);\n    } while (result === 0);\n    return result;\n  };\n  prng.int32 = xg.next;\n  prng.quick = prng;\n  if (state) {\n    if (typeof(state) == 'object') copy(state, xg);\n    prng.state = function() { return copy(xg, {}); }\n  }\n  return prng;\n}\n\nif (module && module.exports) {\n  module.exports = impl;\n} else if (define && define.amd) {\n  define(function() { return impl; });\n} else {\n  this.tychei = impl;\n}\n\n})(\n  this,\n  (typeof module) == 'object' && module,    // present in node.js\n  (typeof define) == 'function' && define   // present with an AMD loader\n);\n\n\n", "", "/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256,        // each RC4 output is 0 <= x < 256\n    chunks = 6,         // at least six RC4 outputs for each double\n    digits = 52,        // there are 52 significant digits in a double\n    rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n    significance = math.pow(2, digits),\n    overflow = significance * 2,\n    mask = width - 1,\n    nodecrypto;         // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n  var key = [];\n  options = (options == true) ? { entropy: true } : (options || {});\n\n  // Flatten the seed string or build one from local entropy if needed.\n  var shortseed = mixkey(flatten(\n    options.entropy ? [seed, tostring(pool)] :\n    (seed == null) ? autoseed() : seed, 3), key);\n\n  // Use the seed to initialize an ARC4 generator.\n  var arc4 = new ARC4(key);\n\n  // This function returns a random double in [0, 1) that contains\n  // randomness in every bit of the mantissa of the IEEE 754 value.\n  var prng = function() {\n    var n = arc4.g(chunks),             // Start with a numerator n < 2 ^ 48\n        d = startdenom,                 //   and denominator d = 2 ^ 48.\n        x = 0;                          //   and no 'extra last byte'.\n    while (n < significance) {          // Fill up all significant digits by\n      n = (n + x) * width;              //   shifting numerator and\n      d *= width;                       //   denominator and generating a\n      x = arc4.g(1);                    //   new least-significant-byte.\n    }\n    while (n >= overflow) {             // To avoid rounding up, before adding\n      n /= 2;                           //   last byte, shift everything\n      d /= 2;                           //   right using integer math until\n      x >>>= 1;                         //   we have exactly the desired bits.\n    }\n    return (n + x) / d;                 // Form the number within [0, 1).\n  };\n\n  prng.int32 = function() { return arc4.g(4) | 0; }\n  prng.quick = function() { return arc4.g(4) / 0x100000000; }\n  prng.double = prng;\n\n  // Mix the randomness into accumulated entropy.\n  mixkey(tostring(arc4.S), pool);\n\n  // Calling convention: what to return as a function of prng, seed, is_math.\n  return (options.pass || callback ||\n      function(prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) { copy(state, arc4); }\n          // Only provide the .state method if requested via options.state.\n          prng.state = function() { return copy(arc4, {}); }\n        }\n\n        // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n        if (is_math_call) { math[rngname] = prng; return seed; }\n\n        // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(\n  prng,\n  shortseed,\n  'global' in options ? options.global : (this == math),\n  options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation.  The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4.  Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n  var t, keylen = key.length,\n      me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n  // The empty key [] is treated as [0].\n  if (!keylen) { key = [keylen++]; }\n\n  // Set up S using the standard key scheduling algorithm.\n  while (i < width) {\n    s[i] = i++;\n  }\n  for (i = 0; i < width; i++) {\n    s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n    s[j] = t;\n  }\n\n  // The \"g\" method returns the next (count) outputs as one number.\n  (me.g = function(count) {\n    // Using instance members instead of closure state nearly doubles speed.\n    var t, r = 0,\n        i = me.i, j = me.j, s = me.S;\n    while (count--) {\n      t = s[i = mask & (i + 1)];\n      r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n    }\n    me.i = i; me.j = j;\n    return r;\n    // For robust unpredictability, the function call below automatically\n    // discards an initial batch of values.  This is called RC4-drop[256].\n    // See http://google.com/search?q=rsa+fluhrer+response&btnI\n  })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n  t.i = f.i;\n  t.j = f.j;\n  t.S = f.S.slice();\n  return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n  var result = [], typ = (typeof obj), prop;\n  if (depth && typ == 'object') {\n    for (prop in obj) {\n      try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n    }\n  }\n  return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n  var stringseed = seed + '', smear, j = 0;\n  while (j < stringseed.length) {\n    key[mask & j] =\n      mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n  }\n  return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n  try {\n    var out;\n    if (nodecrypto && (out = nodecrypto.randomBytes)) {\n      // The use of 'out' to remember randomBytes makes tight minified code.\n      out = out(width);\n    } else {\n      out = new Uint8Array(width);\n      (global.crypto || global.msCrypto).getRandomValues(out);\n    }\n    return tostring(out);\n  } catch (e) {\n    var browser = global.navigator,\n        plugins = browser && browser.plugins;\n    return [+new Date, global, plugins, global.screen, tostring(pool)];\n  }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n  return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool.  Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n  module.exports = seedrandom;\n  // When in node.js, try using crypto package for autoseeding.\n  try {\n    nodecrypto = require('crypto');\n  } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n  define(function() { return seedrandom; });\n} else {\n  // When included as a plain script, set up Math.seedrandom global.\n  math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n  // global: `self` in browsers (including strict mode and web workers),\n  // otherwise `this` in Node and other environments\n  (typeof self !== 'undefined') ? self : this,\n  [],     // pool: entropy pool starts empty\n  Math    // math: package containing random, pow, and seedrandom\n);\n", "// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random();       // 0 <= x < 1.  Every bit is random.\n// var x = random.quick(); // 0 <= x < 1.  32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baag\u00F8e.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by Fran\u00E7ois Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three.  It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures.  Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n", "import seedrandom from 'seedrandom';\nvar singletonRandom = /* #__PURE__ */seedrandom(Date.now());\nexport function createRng(randomSeed) {\n  var random; // create a new random generator with given seed\n\n  function setSeed(seed) {\n    random = seed === null ? singletonRandom : seedrandom(String(seed));\n  } // initialize a seeded pseudo random number generator with config's random seed\n\n\n  setSeed(randomSeed); // wrapper function so the rng can be updated via generator\n\n  function rng() {\n    return random();\n  }\n\n  return rng;\n}", "import { flatten } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { isMatrix, isNumber } from '../../utils/is.js';\nimport { createRng } from './util/seededRNG.js';\nvar name = 'pickRandom';\nvar dependencies = ['typed', 'config', '?on'];\nexport var createPickRandom = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    on\n  } = _ref;\n  // seeded pseudo random number generator\n  var rng = createRng(config.randomSeed);\n\n  if (on) {\n    on('config', function (curr, prev) {\n      if (curr.randomSeed !== prev.randomSeed) {\n        rng = createRng(curr.randomSeed);\n      }\n    });\n  }\n  /**\n   * Random pick one or more values from a one dimensional array.\n   * Array elements are picked using a random function with uniform or weighted distribution.\n   *\n   * Syntax:\n   *\n   *     math.pickRandom(array)\n   *     math.pickRandom(array, number)\n   *     math.pickRandom(array, weights)\n   *     math.pickRandom(array, number, weights)\n   *     math.pickRandom(array, weights, number)\n   *     math.pickRandom(array, { weights, number, elementWise })\n   *\n   * Examples:\n   *\n   *     math.pickRandom([3, 6, 12, 2])                  // returns one of the values in the array\n   *     math.pickRandom([3, 6, 12, 2], 2)               // returns an array of two of the values in the array\n   *     math.pickRandom([3, 6, 12, 2], { number: 2 })   // returns an array of two of the values in the array\n   *     math.pickRandom([3, 6, 12, 2], [1, 3, 2, 1])    // returns one of the values in the array with weighted distribution\n   *     math.pickRandom([3, 6, 12, 2], 2, [1, 3, 2, 1]) // returns an array of two of the values in the array with weighted distribution\n   *     math.pickRandom([3, 6, 12, 2], [1, 3, 2, 1], 2) // returns an array of two of the values in the array with weighted distribution\n   *\n   *     math.pickRandom([{x: 1.0, y: 2.0}, {x: 1.1, y: 2.0}], { elementWise: false })\n   *         // returns one of the items in the array\n   *\n   * See also:\n   *\n   *     random, randomInt\n   *\n   * @param {Array | Matrix} array     A one dimensional array\n   * @param {Int} number               An int or float\n   * @param {Array | Matrix} weights   An array of ints or floats\n   * @return {number | Array}          Returns a single random value from array when number is 1 or undefined.\n   *                                   Returns an array with the configured number of elements when number is > 1.\n   */\n\n\n  return typed(name, {\n    'Array | Matrix': function ArrayMatrix(possibles) {\n      return _pickRandom(possibles, {});\n    },\n    'Array | Matrix, Object': function ArrayMatrixObject(possibles, options) {\n      return _pickRandom(possibles, options);\n    },\n    'Array | Matrix, number': function ArrayMatrixNumber(possibles, number) {\n      return _pickRandom(possibles, {\n        number\n      });\n    },\n    'Array | Matrix, Array | Matrix': function ArrayMatrixArrayMatrix(possibles, weights) {\n      return _pickRandom(possibles, {\n        weights\n      });\n    },\n    'Array | Matrix, Array | Matrix, number': function ArrayMatrixArrayMatrixNumber(possibles, weights, number) {\n      return _pickRandom(possibles, {\n        number,\n        weights\n      });\n    },\n    'Array | Matrix, number, Array | Matrix': function ArrayMatrixNumberArrayMatrix(possibles, number, weights) {\n      return _pickRandom(possibles, {\n        number,\n        weights\n      });\n    }\n  });\n  /**\n   * @param {Array | Matrix} possibles\n   * @param {{\n   *   number?: number,\n   *   weights?: Array | Matrix,\n   *   elementWise: boolean\n   * }} options\n   * @returns {number | Array}\n   * @private\n   */\n\n  function _pickRandom(possibles, _ref2) {\n    var {\n      number,\n      weights,\n      elementWise = true\n    } = _ref2;\n    var single = typeof number === 'undefined';\n\n    if (single) {\n      number = 1;\n    }\n\n    var createMatrix = isMatrix(possibles) ? possibles.create : isMatrix(weights) ? weights.create : null;\n    possibles = possibles.valueOf(); // get Array\n\n    if (weights) {\n      weights = weights.valueOf(); // get Array\n    }\n\n    if (elementWise === true) {\n      possibles = flatten(possibles);\n      weights = flatten(weights);\n    }\n\n    var totalWeights = 0;\n\n    if (typeof weights !== 'undefined') {\n      if (weights.length !== possibles.length) {\n        throw new Error('Weights must have the same length as possibles');\n      }\n\n      for (var i = 0, len = weights.length; i < len; i++) {\n        if (!isNumber(weights[i]) || weights[i] < 0) {\n          throw new Error('Weights must be an array of positive numbers');\n        }\n\n        totalWeights += weights[i];\n      }\n    }\n\n    var length = possibles.length;\n    var result = [];\n    var pick;\n\n    while (result.length < number) {\n      if (typeof weights === 'undefined') {\n        pick = possibles[Math.floor(rng() * length)];\n      } else {\n        var randKey = rng() * totalWeights;\n\n        for (var _i = 0, _len = possibles.length; _i < _len; _i++) {\n          randKey -= weights[_i];\n\n          if (randKey < 0) {\n            pick = possibles[_i];\n            break;\n          }\n        }\n      }\n\n      result.push(pick);\n    }\n\n    return single ? result[0] : createMatrix ? createMatrix(result) : result;\n  }\n});", "/**\n * This is a util function for generating a random matrix recursively.\n * @param {number[]} size\n * @param {function} random\n * @returns {Array}\n */\nexport function randomMatrix(size, random) {\n  var data = [];\n  size = size.slice(0);\n\n  if (size.length > 1) {\n    for (var i = 0, length = size.shift(); i < length; i++) {\n      data.push(randomMatrix(size, random));\n    }\n  } else {\n    for (var _i = 0, _length = size.shift(); _i < _length; _i++) {\n      data.push(random());\n    }\n  }\n\n  return data;\n}", "import { factory } from '../../utils/factory.js';\nimport { isMatrix } from '../../utils/is.js';\nimport { createRng } from './util/seededRNG.js';\nimport { randomMatrix } from './util/randomMatrix.js';\nvar name = 'random';\nvar dependencies = ['typed', 'config', '?on'];\nexport var createRandom = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    on\n  } = _ref;\n  // seeded pseudo random number generator\n  var rng = createRng(config.randomSeed);\n\n  if (on) {\n    on('config', function (curr, prev) {\n      if (curr.randomSeed !== prev.randomSeed) {\n        rng = createRng(curr.randomSeed);\n      }\n    });\n  }\n  /**\n   * Return a random number larger or equal to `min` and smaller than `max`\n   * using a uniform distribution.\n   *\n   * Syntax:\n   *\n   *     math.random()                // generate a random number between 0 and 1\n   *     math.random(max)             // generate a random number between 0 and max\n   *     math.random(min, max)        // generate a random number between min and max\n   *     math.random(size)            // generate a matrix with random numbers between 0 and 1\n   *     math.random(size, max)       // generate a matrix with random numbers between 0 and max\n   *     math.random(size, min, max)  // generate a matrix with random numbers between min and max\n   *\n   * Examples:\n   *\n   *     math.random()       // returns a random number between 0 and 1\n   *     math.random(100)    // returns a random number between 0 and 100\n   *     math.random(30, 40) // returns a random number between 30 and 40\n   *     math.random([2, 3]) // returns a 2x3 matrix with random numbers between 0 and 1\n   *\n   * See also:\n   *\n   *     randomInt, pickRandom\n   *\n   * @param {Array | Matrix} [size] If provided, an array or matrix with given\n   *                                size and filled with random values is returned\n   * @param {number} [min]  Minimum boundary for the random value, included\n   * @param {number} [max]  Maximum boundary for the random value, excluded\n   * @return {number | Array | Matrix} A random number\n   */\n\n\n  return typed(name, {\n    '': () => _random(0, 1),\n    number: max => _random(0, max),\n    'number, number': (min, max) => _random(min, max),\n    'Array | Matrix': size => _randomMatrix(size, 0, 1),\n    'Array | Matrix, number': (size, max) => _randomMatrix(size, 0, max),\n    'Array | Matrix, number, number': (size, min, max) => _randomMatrix(size, min, max)\n  });\n\n  function _randomMatrix(size, min, max) {\n    var res = randomMatrix(size.valueOf(), () => _random(min, max));\n    return isMatrix(size) ? size.create(res) : res;\n  }\n\n  function _random(min, max) {\n    return min + rng() * (max - min);\n  }\n}); // number only implementation of random, no matrix support\n// TODO: there is quite some duplicate code in both createRandom and createRandomNumber, can we improve that?\n\nexport var createRandomNumber = /* #__PURE__ */factory(name, ['typed', 'config', '?on'], _ref2 => {\n  var {\n    typed,\n    config,\n    on,\n    matrix\n  } = _ref2;\n  // seeded pseudo random number generator1\n  var rng = createRng(config.randomSeed);\n\n  if (on) {\n    on('config', function (curr, prev) {\n      if (curr.randomSeed !== prev.randomSeed) {\n        rng = createRng(curr.randomSeed);\n      }\n    });\n  }\n\n  return typed(name, {\n    '': () => _random(0, 1),\n    number: max => _random(0, max),\n    'number, number': (min, max) => _random(min, max)\n  });\n\n  function _random(min, max) {\n    return min + rng() * (max - min);\n  }\n});", "import { factory } from '../../utils/factory.js';\nimport { randomMatrix } from './util/randomMatrix.js';\nimport { createRng } from './util/seededRNG.js';\nimport { isMatrix } from '../../utils/is.js';\nvar name = 'randomInt';\nvar dependencies = ['typed', 'config', '?on'];\nexport var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    on\n  } = _ref;\n  // seeded pseudo random number generator\n  var rng = createRng(config.randomSeed);\n\n  if (on) {\n    on('config', function (curr, prev) {\n      if (curr.randomSeed !== prev.randomSeed) {\n        rng = createRng(curr.randomSeed);\n      }\n    });\n  }\n  /**\n   * Return a random integer number larger or equal to `min` and smaller than `max`\n   * using a uniform distribution.\n   *\n   * Syntax:\n   *\n   *     math.randomInt()                // generate a random integer between 0 and 1\n   *     math.randomInt(max)             // generate a random integer between 0 and max\n   *     math.randomInt(min, max)        // generate a random integer between min and max\n   *     math.randomInt(size)            // generate a matrix with random integer between 0 and 1\n   *     math.randomInt(size, max)       // generate a matrix with random integer between 0 and max\n   *     math.randomInt(size, min, max)  // generate a matrix with random integer between min and max\n   *\n   * Examples:\n   *\n   *     math.randomInt(100)    // returns a random integer between 0 and 100\n   *     math.randomInt(30, 40) // returns a random integer between 30 and 40\n   *     math.randomInt([2, 3]) // returns a 2x3 matrix with random integers between 0 and 1\n   *\n   * See also:\n   *\n   *     random, pickRandom\n   *\n   * @param {Array | Matrix} [size] If provided, an array or matrix with given\n   *                                size and filled with random values is returned\n   * @param {number} [min]  Minimum boundary for the random value, included\n   * @param {number} [max]  Maximum boundary for the random value, excluded\n   * @return {number | Array | Matrix} A random integer value\n   */\n\n\n  return typed(name, {\n    '': () => _randomInt(0, 1),\n    number: max => _randomInt(0, max),\n    'number, number': (min, max) => _randomInt(min, max),\n    'Array | Matrix': size => _randomIntMatrix(size, 0, 1),\n    'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max),\n    'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max)\n  });\n\n  function _randomIntMatrix(size, min, max) {\n    var res = randomMatrix(size.valueOf(), () => _randomInt(min, max));\n    return isMatrix(size) ? size.create(res) : res;\n  }\n\n  function _randomInt(min, max) {\n    return Math.floor(min + rng() * (max - min));\n  }\n});", "import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { complexEquals } from '../../utils/complex.js';\nvar name = 'equalScalar';\nvar dependencies = ['typed', 'config'];\nexport var createEqualScalar = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config\n  } = _ref;\n\n  /**\n   * Test whether two scalar values are nearly equal.\n   *\n   * @param  {number | BigNumber | Fraction | boolean | Complex | Unit} x   First value to compare\n   * @param  {number | BigNumber | Fraction | boolean | Complex} y          Second value to compare\n   * @return {boolean}                                                  Returns true when the compared values are equal, else returns false\n   * @private\n   */\n  return typed(name, {\n    'boolean, boolean': function booleanBoolean(x, y) {\n      return x === y;\n    },\n    'number, number': function numberNumber(x, y) {\n      return nearlyEqual(x, y, config.epsilon);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {\n      return x.eq(y) || bigNearlyEqual(x, y, config.epsilon);\n    },\n    'Fraction, Fraction': function FractionFraction(x, y) {\n      return x.equals(y);\n    },\n    'Complex, Complex': function ComplexComplex(x, y) {\n      return complexEquals(x, y, config.epsilon);\n    },\n    'Unit, Unit': function UnitUnit(x, y) {\n      if (!x.equalBase(y)) {\n        throw new Error('Cannot compare units with different base');\n      }\n\n      return this(x.value, y.value);\n    }\n  });\n});\nexport var createEqualScalarNumber = factory(name, ['typed', 'config'], _ref2 => {\n  var {\n    typed,\n    config\n  } = _ref2;\n  return typed(name, {\n    'number, number': function numberNumber(x, y) {\n      return nearlyEqual(x, y, config.epsilon);\n    }\n  });\n});", "import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nimport { createAlgorithm05 } from '../../type/matrix/utils/algorithm05.js';\nvar name = 'compare';\nvar dependencies = ['typed', 'config', 'matrix', 'equalScalar', 'BigNumber', 'Fraction', 'DenseMatrix'];\nexport var createCompare = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    equalScalar,\n    matrix,\n    BigNumber,\n    Fraction,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm05 = createAlgorithm05({\n    typed,\n    equalScalar\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.\n   *\n   * x and y are considered equal when the relative difference between x and y\n   * is smaller than the configured epsilon. The function cannot be used to\n   * compare values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.compare(x, y)\n   *\n   * Examples:\n   *\n   *    math.compare(6, 1)           // returns 1\n   *    math.compare(2, 3)           // returns -1\n   *    math.compare(7, 7)           // returns 0\n   *    math.compare('10', '2')      // returns 1\n   *    math.compare('1000', '1e3')  // returns 0\n   *\n   *    const a = math.unit('5 cm')\n   *    const b = math.unit('40 mm')\n   *    math.compare(a, b)           // returns 1\n   *\n   *    math.compare(2, [1, 2, 3])   // returns [1, 0, -1]\n   *\n   * See also:\n   *\n   *    equal, unequal, smaller, smallerEq, larger, largerEq, compareNatural, compareText\n   *\n   * @param  {number | BigNumber | Fraction | Unit | string | Array | Matrix} x First value to compare\n   * @param  {number | BigNumber | Fraction | Unit | string | Array | Matrix} y Second value to compare\n   * @return {number | BigNumber | Fraction | Array | Matrix} Returns the result of the comparison:\n   *                                                          1 when x > y, -1 when x < y, and 0 when x == y.\n   */\n\n  return typed(name, {\n    'boolean, boolean': function booleanBoolean(x, y) {\n      return x === y ? 0 : x > y ? 1 : -1;\n    },\n    'number, number': function numberNumber(x, y) {\n      return nearlyEqual(x, y, config.epsilon) ? 0 : x > y ? 1 : -1;\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {\n      return bigNearlyEqual(x, y, config.epsilon) ? new BigNumber(0) : new BigNumber(x.cmp(y));\n    },\n    'Fraction, Fraction': function FractionFraction(x, y) {\n      return new Fraction(x.compare(y));\n    },\n    'Complex, Complex': function ComplexComplex() {\n      throw new TypeError('No ordering relation is defined for complex numbers');\n    },\n    'Unit, Unit': function UnitUnit(x, y) {\n      if (!x.equalBase(y)) {\n        throw new Error('Cannot compare units with different base');\n      }\n\n      return this(x.value, y.value);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm05(x, y, this);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, this, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, this, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, this);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, this, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, this, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, this, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, this, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    }\n  });\n});\nexport var createCompareNumber = /* #__PURE__ */factory(name, ['typed', 'config'], _ref2 => {\n  var {\n    typed,\n    config\n  } = _ref2;\n  return typed(name, {\n    'number, number': function numberNumber(x, y) {\n      return nearlyEqual(x, y, config.epsilon) ? 0 : x > y ? 1 : -1;\n    }\n  });\n});", "/*\r\n * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license\r\n * Author: Jim Palmer (based on chunking idea from Dave Koelle)\r\n */\r\n/*jshint unused:false */\r\nmodule.exports = function naturalSort (a, b) {\r\n\t\"use strict\";\r\n\tvar re = /(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\r\n\t\tsre = /(^[ ]*|[ ]*$)/g,\r\n\t\tdre = /(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,\r\n\t\thre = /^0x[0-9a-f]+$/i,\r\n\t\tore = /^0/,\r\n\t\ti = function(s) { return naturalSort.insensitive && ('' + s).toLowerCase() || '' + s; },\r\n\t\t// convert all to strings strip whitespace\r\n\t\tx = i(a).replace(sre, '') || '',\r\n\t\ty = i(b).replace(sre, '') || '',\r\n\t\t// chunk/tokenize\r\n\t\txN = x.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\tyN = y.replace(re, '\\0$1\\0').replace(/\\0$/,'').replace(/^\\0/,'').split('\\0'),\r\n\t\t// numeric, hex or date detection\r\n\t\txD = parseInt(x.match(hre), 16) || (xN.length !== 1 && x.match(dre) && Date.parse(x)),\r\n\t\tyD = parseInt(y.match(hre), 16) || xD && y.match(dre) && Date.parse(y) || null,\r\n\t\toFxNcL, oFyNcL;\r\n\t// first try and sort Hex codes or Dates\r\n\tif (yD) {\r\n\t\tif ( xD < yD ) { return -1; }\r\n\t\telse if ( xD > yD ) { return 1; }\r\n\t}\r\n\t// natural sorting through split numeric strings and default strings\r\n\tfor(var cLoc=0, numS=Math.max(xN.length, yN.length); cLoc < numS; cLoc++) {\r\n\t\t// find floats not starting with '0', string or 0 if not defined (Clint Priest)\r\n\t\toFxNcL = !(xN[cLoc] || '').match(ore) && parseFloat(xN[cLoc]) || xN[cLoc] || 0;\r\n\t\toFyNcL = !(yN[cLoc] || '').match(ore) && parseFloat(yN[cLoc]) || yN[cLoc] || 0;\r\n\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\r\n\t\tif (isNaN(oFxNcL) !== isNaN(oFyNcL)) { return (isNaN(oFxNcL)) ? 1 : -1; }\r\n\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\r\n\t\telse if (typeof oFxNcL !== typeof oFyNcL) {\r\n\t\t\toFxNcL += '';\r\n\t\t\toFyNcL += '';\r\n\t\t}\r\n\t\tif (oFxNcL < oFyNcL) { return -1; }\r\n\t\tif (oFxNcL > oFyNcL) { return 1; }\r\n\t}\r\n\treturn 0;\r\n};\r\n", "import naturalSort from 'javascript-natural-sort';\nimport { isDenseMatrix, isSparseMatrix, typeOf } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'compareNatural';\nvar dependencies = ['typed', 'compare'];\nexport var createCompareNatural = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    compare\n  } = _ref;\n  var compareBooleans = compare.signatures['boolean,boolean'];\n  /**\n   * Compare two values of any type in a deterministic, natural way.\n   *\n   * For numeric values, the function works the same as `math.compare`.\n   * For types of values that can't be compared mathematically,\n   * the function compares in a natural way.\n   *\n   * For numeric values, x and y are considered equal when the relative\n   * difference between x and y is smaller than the configured epsilon.\n   * The function cannot be used to compare values smaller than\n   * approximately 2.22e-16.\n   *\n   * For Complex numbers, first the real parts are compared. If equal,\n   * the imaginary parts are compared.\n   *\n   * Strings are compared with a natural sorting algorithm, which\n   * orders strings in a \"logic\" way following some heuristics.\n   * This differs from the function `compare`, which converts the string\n   * into a numeric value and compares that. The function `compareText`\n   * on the other hand compares text lexically.\n   *\n   * Arrays and Matrices are compared value by value until there is an\n   * unequal pair of values encountered. Objects are compared by sorted\n   * keys until the keys or their values are unequal.\n   *\n   * Syntax:\n   *\n   *    math.compareNatural(x, y)\n   *\n   * Examples:\n   *\n   *    math.compareNatural(6, 1)              // returns 1\n   *    math.compareNatural(2, 3)              // returns -1\n   *    math.compareNatural(7, 7)              // returns 0\n   *\n   *    math.compareNatural('10', '2')         // returns 1\n   *    math.compareText('10', '2')            // returns -1\n   *    math.compare('10', '2')                // returns 1\n   *\n   *    math.compareNatural('Answer: 10', 'Answer: 2') // returns 1\n   *    math.compareText('Answer: 10', 'Answer: 2')    // returns -1\n   *    math.compare('Answer: 10', 'Answer: 2')\n   *        // Error: Cannot convert \"Answer: 10\" to a number\n   *\n   *    const a = math.unit('5 cm')\n   *    const b = math.unit('40 mm')\n   *    math.compareNatural(a, b)              // returns 1\n   *\n   *    const c = math.complex('2 + 3i')\n   *    const d = math.complex('2 + 4i')\n   *    math.compareNatural(c, d)              // returns -1\n   *\n   *    math.compareNatural([1, 2, 4], [1, 2, 3]) // returns 1\n   *    math.compareNatural([1, 2, 3], [1, 2])    // returns 1\n   *    math.compareNatural([1, 5], [1, 2, 3])    // returns 1\n   *    math.compareNatural([1, 2], [1, 2])       // returns 0\n   *\n   *    math.compareNatural({a: 2}, {a: 4})       // returns -1\n   *\n   * See also:\n   *\n   *    compare, compareText\n   *\n   * @param  {*} x First value to compare\n   * @param  {*} y Second value to compare\n   * @return {number} Returns the result of the comparison:\n   *                  1 when x > y, -1 when x < y, and 0 when x == y.\n   */\n\n  return typed(name, {\n    'any, any': function anyAny(x, y) {\n      var typeX = typeOf(x);\n      var typeY = typeOf(y);\n      var c; // numeric types\n\n      if ((typeX === 'number' || typeX === 'BigNumber' || typeX === 'Fraction') && (typeY === 'number' || typeY === 'BigNumber' || typeY === 'Fraction')) {\n        c = compare(x, y);\n\n        if (c.toString() !== '0') {\n          // c can be number, BigNumber, or Fraction\n          return c > 0 ? 1 : -1; // return a number\n        } else {\n          return naturalSort(typeX, typeY);\n        }\n      } // matrix types\n\n\n      if (typeX === 'Array' || typeX === 'Matrix' || typeY === 'Array' || typeY === 'Matrix') {\n        c = compareMatricesAndArrays(this, x, y);\n\n        if (c !== 0) {\n          return c;\n        } else {\n          return naturalSort(typeX, typeY);\n        }\n      } // in case of different types, order by name of type, i.e. 'BigNumber' < 'Complex'\n\n\n      if (typeX !== typeY) {\n        return naturalSort(typeX, typeY);\n      }\n\n      if (typeX === 'Complex') {\n        return compareComplexNumbers(x, y);\n      }\n\n      if (typeX === 'Unit') {\n        if (x.equalBase(y)) {\n          return this(x.value, y.value);\n        } // compare by units\n\n\n        return compareArrays(this, x.formatUnits(), y.formatUnits());\n      }\n\n      if (typeX === 'boolean') {\n        return compareBooleans(x, y);\n      }\n\n      if (typeX === 'string') {\n        return naturalSort(x, y);\n      }\n\n      if (typeX === 'Object') {\n        return compareObjects(this, x, y);\n      }\n\n      if (typeX === 'null') {\n        return 0;\n      }\n\n      if (typeX === 'undefined') {\n        return 0;\n      } // this should not occur...\n\n\n      throw new TypeError('Unsupported type of value \"' + typeX + '\"');\n    }\n  });\n  /**\n   * Compare mixed matrix/array types, by converting to same-shaped array.\n   * This comparator is non-deterministic regarding input types.\n   * @param {Array | SparseMatrix | DenseMatrix | *} x\n   * @param {Array | SparseMatrix | DenseMatrix | *} y\n   * @returns {number} Returns the comparison result: -1, 0, or 1\n   */\n\n  function compareMatricesAndArrays(compareNatural, x, y) {\n    if (isSparseMatrix(x) && isSparseMatrix(y)) {\n      return compareArrays(compareNatural, x.toJSON().values, y.toJSON().values);\n    }\n\n    if (isSparseMatrix(x)) {\n      // note: convert to array is expensive\n      return compareMatricesAndArrays(compareNatural, x.toArray(), y);\n    }\n\n    if (isSparseMatrix(y)) {\n      // note: convert to array is expensive\n      return compareMatricesAndArrays(compareNatural, x, y.toArray());\n    } // convert DenseArray into Array\n\n\n    if (isDenseMatrix(x)) {\n      return compareMatricesAndArrays(compareNatural, x.toJSON().data, y);\n    }\n\n    if (isDenseMatrix(y)) {\n      return compareMatricesAndArrays(compareNatural, x, y.toJSON().data);\n    } // convert scalars to array\n\n\n    if (!Array.isArray(x)) {\n      return compareMatricesAndArrays(compareNatural, [x], y);\n    }\n\n    if (!Array.isArray(y)) {\n      return compareMatricesAndArrays(compareNatural, x, [y]);\n    }\n\n    return compareArrays(compareNatural, x, y);\n  }\n  /**\n   * Compare two Arrays\n   *\n   * - First, compares value by value\n   * - Next, if all corresponding values are equal,\n   *   look at the length: longest array will be considered largest\n   *\n   * @param {Array} x\n   * @param {Array} y\n   * @returns {number} Returns the comparison result: -1, 0, or 1\n   */\n\n\n  function compareArrays(compareNatural, x, y) {\n    // compare each value\n    for (var i = 0, ii = Math.min(x.length, y.length); i < ii; i++) {\n      var v = compareNatural(x[i], y[i]);\n\n      if (v !== 0) {\n        return v;\n      }\n    } // compare the size of the arrays\n\n\n    if (x.length > y.length) {\n      return 1;\n    }\n\n    if (x.length < y.length) {\n      return -1;\n    } // both Arrays have equal size and content\n\n\n    return 0;\n  }\n  /**\n   * Compare two objects\n   *\n   * - First, compare sorted property names\n   * - Next, compare the property values\n   *\n   * @param {Object} x\n   * @param {Object} y\n   * @returns {number} Returns the comparison result: -1, 0, or 1\n   */\n\n\n  function compareObjects(compareNatural, x, y) {\n    var keysX = Object.keys(x);\n    var keysY = Object.keys(y); // compare keys\n\n    keysX.sort(naturalSort);\n    keysY.sort(naturalSort);\n    var c = compareArrays(compareNatural, keysX, keysY);\n\n    if (c !== 0) {\n      return c;\n    } // compare values\n\n\n    for (var i = 0; i < keysX.length; i++) {\n      var v = compareNatural(x[keysX[i]], y[keysY[i]]);\n\n      if (v !== 0) {\n        return v;\n      }\n    }\n\n    return 0;\n  }\n});\n/**\n * Compare two complex numbers, `x` and `y`:\n *\n * - First, compare the real values of `x` and `y`\n * - If equal, compare the imaginary values of `x` and `y`\n *\n * @params {Complex} x\n * @params {Complex} y\n * @returns {number} Returns the comparison result: -1, 0, or 1\n */\n\nfunction compareComplexNumbers(x, y) {\n  if (x.re > y.re) {\n    return 1;\n  }\n\n  if (x.re < y.re) {\n    return -1;\n  }\n\n  if (x.im > y.im) {\n    return 1;\n  }\n\n  if (x.im < y.im) {\n    return -1;\n  }\n\n  return 0;\n}", "import { compareText as _compareText } from '../../utils/string.js';\nimport { factory } from '../../utils/factory.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nvar name = 'compareText';\nvar dependencies = ['typed', 'matrix'];\nexport var createCompareText = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    matrix\n  } = _ref;\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Compare two strings lexically. Comparison is case sensitive.\n   * Returns 1 when x > y, -1 when x < y, and 0 when x == y.\n   *\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.compareText(x, y)\n   *\n   * Examples:\n   *\n   *    math.compareText('B', 'A')     // returns 1\n   *    math.compareText('2', '10')    // returns 1\n   *    math.compare('2', '10')        // returns -1\n   *    math.compareNatural('2', '10') // returns -1\n   *\n   *    math.compareText('B', ['A', 'B', 'C']) // returns [1, 0, -1]\n   *\n   * See also:\n   *\n   *    equal, equalText, compare, compareNatural\n   *\n   * @param  {string | Array | DenseMatrix} x First string to compare\n   * @param  {string | Array | DenseMatrix} y Second string to compare\n   * @return {number | Array | DenseMatrix} Returns the result of the comparison:\n   *                                        1 when x > y, -1 when x < y, and 0 when x == y.\n   */\n\n  return typed(name, {\n    'any, any': _compareText,\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, _compareText);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, _compareText, false);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, _compareText, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, _compareText, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, _compareText, true).valueOf();\n    }\n  });\n});\nexport var createCompareTextNumber = /* #__PURE__ */factory(name, ['typed'], _ref2 => {\n  var {\n    typed\n  } = _ref2;\n  return typed(name, {\n    'any, any': _compareText\n  });\n});", "import { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm07 } from '../../type/matrix/utils/algorithm07.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nvar name = 'equal';\nvar dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix'];\nexport var createEqual = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    matrix,\n    equalScalar,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm07 = createAlgorithm07({\n    typed,\n    DenseMatrix\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Test whether two values are equal.\n   *\n   * The function tests whether the relative difference between x and y is\n   * smaller than the configured epsilon. The function cannot be used to\n   * compare values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * In case of complex numbers, x.re must equal y.re, and x.im must equal y.im.\n   *\n   * Values `null` and `undefined` are compared strictly, thus `null` is only\n   * equal to `null` and nothing else, and `undefined` is only equal to\n   * `undefined` and nothing else. Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.equal(x, y)\n   *\n   * Examples:\n   *\n   *    math.equal(2 + 2, 3)         // returns false\n   *    math.equal(2 + 2, 4)         // returns true\n   *\n   *    const a = math.unit('50 cm')\n   *    const b = math.unit('5 m')\n   *    math.equal(a, b)             // returns true\n   *\n   *    const c = [2, 5, 1]\n   *    const d = [2, 7, 1]\n   *\n   *    math.equal(c, d)             // returns [true, false, true]\n   *    math.deepEqual(c, d)         // returns false\n   *\n   *    math.equal(\"1000\", \"1e3\")    // returns true\n   *    math.equal(0, null)          // returns false\n   *\n   * See also:\n   *\n   *    unequal, smaller, smallerEq, larger, largerEq, compare, deepEqual, equalText\n   *\n   * @param  {number | BigNumber | boolean | Complex | Unit | string | Array | Matrix} x First value to compare\n   * @param  {number | BigNumber | boolean | Complex | Unit | string | Array | Matrix} y Second value to compare\n   * @return {boolean | Array | Matrix} Returns true when the compared values are equal, else returns false\n   */\n\n  return typed(name, {\n    'any, any': function anyAny(x, y) {\n      // strict equality for null and undefined?\n      if (x === null) {\n        return y === null;\n      }\n\n      if (y === null) {\n        return x === null;\n      }\n\n      if (x === undefined) {\n        return y === undefined;\n      }\n\n      if (y === undefined) {\n        return x === undefined;\n      }\n\n      return equalScalar(x, y);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm07(x, y, equalScalar);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, equalScalar, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, equalScalar, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, equalScalar);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, equalScalar, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, equalScalar, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, equalScalar, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, equalScalar, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, equalScalar, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, equalScalar, true).valueOf();\n    }\n  });\n});\nexport var createEqualNumber = factory(name, ['typed', 'equalScalar'], _ref2 => {\n  var {\n    typed,\n    equalScalar\n  } = _ref2;\n  return typed(name, {\n    'any, any': function anyAny(x, y) {\n      // strict equality for null and undefined?\n      if (x === null) {\n        return y === null;\n      }\n\n      if (y === null) {\n        return x === null;\n      }\n\n      if (x === undefined) {\n        return y === undefined;\n      }\n\n      if (y === undefined) {\n        return x === undefined;\n      }\n\n      return equalScalar(x, y);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'equalText';\nvar dependencies = ['typed', 'compareText', 'isZero'];\nexport var createEqualText = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    compareText,\n    isZero\n  } = _ref;\n\n  /**\n   * Check equality of two strings. Comparison is case sensitive.\n   *\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.equalText(x, y)\n   *\n   * Examples:\n   *\n   *    math.equalText('Hello', 'Hello')     // returns true\n   *    math.equalText('a', 'A')             // returns false\n   *    math.equal('2e3', '2000')            // returns true\n   *    math.equalText('2e3', '2000')        // returns false\n   *\n   *    math.equalText('B', ['A', 'B', 'C']) // returns [false, true, false]\n   *\n   * See also:\n   *\n   *    equal, compareText, compare, compareNatural\n   *\n   * @param  {string | Array | DenseMatrix} x First string to compare\n   * @param  {string | Array | DenseMatrix} y Second string to compare\n   * @return {number | Array | DenseMatrix} Returns true if the values are equal, and false if not.\n   */\n  return typed(name, {\n    'any, any': function anyAny(x, y) {\n      return isZero(compareText(x, y));\n    }\n  });\n});", "import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm07 } from '../../type/matrix/utils/algorithm07.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nvar name = 'smaller';\nvar dependencies = ['typed', 'config', 'matrix', 'DenseMatrix'];\nexport var createSmaller = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm07 = createAlgorithm07({\n    typed,\n    DenseMatrix\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Test whether value x is smaller than y.\n   *\n   * The function returns true when x is smaller than y and the relative\n   * difference between x and y is smaller than the configured epsilon. The\n   * function cannot be used to compare values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.smaller(x, y)\n   *\n   * Examples:\n   *\n   *    math.smaller(2, 3)            // returns true\n   *    math.smaller(5, 2 * 2)        // returns false\n   *\n   *    const a = math.unit('5 cm')\n   *    const b = math.unit('2 inch')\n   *    math.smaller(a, b)            // returns true\n   *\n   * See also:\n   *\n   *    equal, unequal, smallerEq, smaller, smallerEq, compare\n   *\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} x First value to compare\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare\n   * @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false\n   */\n\n  return typed(name, {\n    'boolean, boolean': function booleanBoolean(x, y) {\n      return x < y;\n    },\n    'number, number': function numberNumber(x, y) {\n      return x < y && !nearlyEqual(x, y, config.epsilon);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {\n      return x.lt(y) && !bigNearlyEqual(x, y, config.epsilon);\n    },\n    'Fraction, Fraction': function FractionFraction(x, y) {\n      return x.compare(y) === -1;\n    },\n    'Complex, Complex': function ComplexComplex(x, y) {\n      throw new TypeError('No ordering relation is defined for complex numbers');\n    },\n    'Unit, Unit': function UnitUnit(x, y) {\n      if (!x.equalBase(y)) {\n        throw new Error('Cannot compare units with different base');\n      }\n\n      return this(x.value, y.value);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm07(x, y, this);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, this, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, this, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, this);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, this, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, this, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, this, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, this, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    }\n  });\n});\nexport var createSmallerNumber = /* #__PURE__ */factory(name, ['typed', 'config'], _ref2 => {\n  var {\n    typed,\n    config\n  } = _ref2;\n  return typed(name, {\n    'number, number': function numberNumber(x, y) {\n      return x < y && !nearlyEqual(x, y, config.epsilon);\n    }\n  });\n});", "import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm07 } from '../../type/matrix/utils/algorithm07.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nvar name = 'smallerEq';\nvar dependencies = ['typed', 'config', 'matrix', 'DenseMatrix'];\nexport var createSmallerEq = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm07 = createAlgorithm07({\n    typed,\n    DenseMatrix\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Test whether value x is smaller or equal to y.\n   *\n   * The function returns true when x is smaller than y or the relative\n   * difference between x and y is smaller than the configured epsilon. The\n   * function cannot be used to compare values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.smallerEq(x, y)\n   *\n   * Examples:\n   *\n   *    math.smaller(1 + 2, 3)        // returns false\n   *    math.smallerEq(1 + 2, 3)      // returns true\n   *\n   * See also:\n   *\n   *    equal, unequal, smaller, larger, largerEq, compare\n   *\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} x First value to compare\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare\n   * @return {boolean | Array | Matrix} Returns true when the x is smaller than y, else returns false\n   */\n\n  return typed(name, {\n    'boolean, boolean': function booleanBoolean(x, y) {\n      return x <= y;\n    },\n    'number, number': function numberNumber(x, y) {\n      return x <= y || nearlyEqual(x, y, config.epsilon);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {\n      return x.lte(y) || bigNearlyEqual(x, y, config.epsilon);\n    },\n    'Fraction, Fraction': function FractionFraction(x, y) {\n      return x.compare(y) !== 1;\n    },\n    'Complex, Complex': function ComplexComplex() {\n      throw new TypeError('No ordering relation is defined for complex numbers');\n    },\n    'Unit, Unit': function UnitUnit(x, y) {\n      if (!x.equalBase(y)) {\n        throw new Error('Cannot compare units with different base');\n      }\n\n      return this(x.value, y.value);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm07(x, y, this);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, this, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, this, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, this);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, this, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, this, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, this, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, this, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    }\n  });\n});\nexport var createSmallerEqNumber = /* #__PURE__ */factory(name, ['typed', 'config'], _ref2 => {\n  var {\n    typed,\n    config\n  } = _ref2;\n  return typed(name, {\n    'number, number': function numberNumber(x, y) {\n      return x <= y || nearlyEqual(x, y, config.epsilon);\n    }\n  });\n});", "import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm07 } from '../../type/matrix/utils/algorithm07.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nvar name = 'larger';\nvar dependencies = ['typed', 'config', 'matrix', 'DenseMatrix'];\nexport var createLarger = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm07 = createAlgorithm07({\n    typed,\n    DenseMatrix\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Test whether value x is larger than y.\n   *\n   * The function returns true when x is larger than y and the relative\n   * difference between x and y is larger than the configured epsilon. The\n   * function cannot be used to compare values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.larger(x, y)\n   *\n   * Examples:\n   *\n   *    math.larger(2, 3)             // returns false\n   *    math.larger(5, 2 + 2)         // returns true\n   *\n   *    const a = math.unit('5 cm')\n   *    const b = math.unit('2 inch')\n   *    math.larger(a, b)             // returns false\n   *\n   * See also:\n   *\n   *    equal, unequal, smaller, smallerEq, largerEq, compare\n   *\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} x First value to compare\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare\n   * @return {boolean | Array | Matrix} Returns true when the x is larger than y, else returns false\n   */\n\n  return typed(name, {\n    'boolean, boolean': function booleanBoolean(x, y) {\n      return x > y;\n    },\n    'number, number': function numberNumber(x, y) {\n      return x > y && !nearlyEqual(x, y, config.epsilon);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {\n      return x.gt(y) && !bigNearlyEqual(x, y, config.epsilon);\n    },\n    'Fraction, Fraction': function FractionFraction(x, y) {\n      return x.compare(y) === 1;\n    },\n    'Complex, Complex': function ComplexComplex() {\n      throw new TypeError('No ordering relation is defined for complex numbers');\n    },\n    'Unit, Unit': function UnitUnit(x, y) {\n      if (!x.equalBase(y)) {\n        throw new Error('Cannot compare units with different base');\n      }\n\n      return this(x.value, y.value);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm07(x, y, this);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, this, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, this, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, this);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, this, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, this, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, this, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, this, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    }\n  });\n});\nexport var createLargerNumber = /* #__PURE__ */factory(name, ['typed', 'config'], _ref2 => {\n  var {\n    typed,\n    config\n  } = _ref2;\n  return typed(name, {\n    'number, number': function numberNumber(x, y) {\n      return x > y && !nearlyEqual(x, y, config.epsilon);\n    }\n  });\n});", "import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';\nimport { nearlyEqual } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm07 } from '../../type/matrix/utils/algorithm07.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nvar name = 'largerEq';\nvar dependencies = ['typed', 'config', 'matrix', 'DenseMatrix'];\nexport var createLargerEq = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm07 = createAlgorithm07({\n    typed,\n    DenseMatrix\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Test whether value x is larger or equal to y.\n   *\n   * The function returns true when x is larger than y or the relative\n   * difference between x and y is smaller than the configured epsilon. The\n   * function cannot be used to compare values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.largerEq(x, y)\n   *\n   * Examples:\n   *\n   *    math.larger(2, 1 + 1)         // returns false\n   *    math.largerEq(2, 1 + 1)       // returns true\n   *\n   * See also:\n   *\n   *    equal, unequal, smaller, smallerEq, larger, compare\n   *\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} x First value to compare\n   * @param  {number | BigNumber | Fraction | boolean | Unit | string | Array | Matrix} y Second value to compare\n   * @return {boolean | Array | Matrix} Returns true when the x is larger or equal to y, else returns false\n   */\n\n  return typed(name, {\n    'boolean, boolean': function booleanBoolean(x, y) {\n      return x >= y;\n    },\n    'number, number': function numberNumber(x, y) {\n      return x >= y || nearlyEqual(x, y, config.epsilon);\n    },\n    'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {\n      return x.gte(y) || bigNearlyEqual(x, y, config.epsilon);\n    },\n    'Fraction, Fraction': function FractionFraction(x, y) {\n      return x.compare(y) !== -1;\n    },\n    'Complex, Complex': function ComplexComplex() {\n      throw new TypeError('No ordering relation is defined for complex numbers');\n    },\n    'Unit, Unit': function UnitUnit(x, y) {\n      if (!x.equalBase(y)) {\n        throw new Error('Cannot compare units with different base');\n      }\n\n      return this(x.value, y.value);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm07(x, y, this);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, this, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, this, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, this);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, this, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, this, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, this, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, this, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, this, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, this, true).valueOf();\n    }\n  });\n});\nexport var createLargerEqNumber = /* #__PURE__ */factory(name, ['typed', 'config'], _ref2 => {\n  var {\n    typed,\n    config\n  } = _ref2;\n  return typed(name, {\n    'number, number': function numberNumber(x, y) {\n      return x >= y || nearlyEqual(x, y, config.epsilon);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'deepEqual';\nvar dependencies = ['typed', 'equal'];\nexport var createDeepEqual = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    equal\n  } = _ref;\n\n  /**\n   * Test element wise whether two matrices are equal.\n   * The function accepts both matrices and scalar values.\n   *\n   * Strings are compared by their numerical value.\n   *\n   * Syntax:\n   *\n   *    math.deepEqual(x, y)\n   *\n   * Examples:\n   *\n   *    math.deepEqual(2, 4)   // returns false\n   *\n   *    a = [2, 5, 1]\n   *    b = [2, 7, 1]\n   *\n   *    math.deepEqual(a, b)   // returns false\n   *    math.equal(a, b)       // returns [true, false, true]\n   *\n   * See also:\n   *\n   *    equal, unequal\n   *\n   * @param  {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} x First matrix to compare\n   * @param  {number | BigNumber | Fraction | Complex | Unit | Array | Matrix} y Second matrix to compare\n   * @return {number | BigNumber | Fraction | Complex | Unit | Array | Matrix}\n   *            Returns true when the input matrices have the same size and each of their elements is equal.\n   */\n  return typed(name, {\n    'any, any': function anyAny(x, y) {\n      return _deepEqual(x.valueOf(), y.valueOf());\n    }\n  });\n  /**\n   * Test whether two arrays have the same size and all elements are equal\n   * @param {Array | *} x\n   * @param {Array | *} y\n   * @return {boolean} Returns true if both arrays are deep equal\n   */\n\n  function _deepEqual(x, y) {\n    if (Array.isArray(x)) {\n      if (Array.isArray(y)) {\n        var len = x.length;\n\n        if (len !== y.length) {\n          return false;\n        }\n\n        for (var i = 0; i < len; i++) {\n          if (!_deepEqual(x[i], y[i])) {\n            return false;\n          }\n        }\n\n        return true;\n      } else {\n        return false;\n      }\n    } else {\n      if (Array.isArray(y)) {\n        return false;\n      } else {\n        return equal(x, y);\n      }\n    }\n  }\n});", "import { factory } from '../../utils/factory.js';\nimport { createAlgorithm03 } from '../../type/matrix/utils/algorithm03.js';\nimport { createAlgorithm07 } from '../../type/matrix/utils/algorithm07.js';\nimport { createAlgorithm12 } from '../../type/matrix/utils/algorithm12.js';\nimport { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';\nimport { createAlgorithm13 } from '../../type/matrix/utils/algorithm13.js';\nvar name = 'unequal';\nvar dependencies = ['typed', 'config', 'equalScalar', 'matrix', 'DenseMatrix'];\nexport var createUnequal = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    equalScalar,\n    matrix,\n    DenseMatrix\n  } = _ref;\n  var algorithm03 = createAlgorithm03({\n    typed\n  });\n  var algorithm07 = createAlgorithm07({\n    typed,\n    DenseMatrix\n  });\n  var algorithm12 = createAlgorithm12({\n    typed,\n    DenseMatrix\n  });\n  var algorithm13 = createAlgorithm13({\n    typed\n  });\n  var algorithm14 = createAlgorithm14({\n    typed\n  });\n  /**\n   * Test whether two values are unequal.\n   *\n   * The function tests whether the relative difference between x and y is\n   * larger than the configured epsilon. The function cannot be used to compare\n   * values smaller than approximately 2.22e-16.\n   *\n   * For matrices, the function is evaluated element wise.\n   * In case of complex numbers, x.re must unequal y.re, or x.im must unequal y.im.\n   * Strings are compared by their numerical value.\n   *\n   * Values `null` and `undefined` are compared strictly, thus `null` is unequal\n   * with everything except `null`, and `undefined` is unequal with everything\n   * except `undefined`.\n   *\n   * Syntax:\n   *\n   *    math.unequal(x, y)\n   *\n   * Examples:\n   *\n   *    math.unequal(2 + 2, 3)       // returns true\n   *    math.unequal(2 + 2, 4)       // returns false\n   *\n   *    const a = math.unit('50 cm')\n   *    const b = math.unit('5 m')\n   *    math.unequal(a, b)           // returns false\n   *\n   *    const c = [2, 5, 1]\n   *    const d = [2, 7, 1]\n   *\n   *    math.unequal(c, d)           // returns [false, true, false]\n   *    math.deepEqual(c, d)         // returns false\n   *\n   *    math.unequal(0, null)        // returns true\n   * See also:\n   *\n   *    equal, deepEqual, smaller, smallerEq, larger, largerEq, compare\n   *\n   * @param  {number | BigNumber | Fraction | boolean | Complex | Unit | string | Array | Matrix | undefined} x First value to compare\n   * @param  {number | BigNumber | Fraction | boolean | Complex | Unit | string | Array | Matrix | undefined} y Second value to compare\n   * @return {boolean | Array | Matrix} Returns true when the compared values are unequal, else returns false\n   */\n\n  return typed('unequal', {\n    'any, any': function anyAny(x, y) {\n      // strict equality for null and undefined?\n      if (x === null) {\n        return y !== null;\n      }\n\n      if (y === null) {\n        return x !== null;\n      }\n\n      if (x === undefined) {\n        return y !== undefined;\n      }\n\n      if (y === undefined) {\n        return x !== undefined;\n      }\n\n      return _unequal(x, y);\n    },\n    'SparseMatrix, SparseMatrix': function SparseMatrixSparseMatrix(x, y) {\n      return algorithm07(x, y, _unequal);\n    },\n    'SparseMatrix, DenseMatrix': function SparseMatrixDenseMatrix(x, y) {\n      return algorithm03(y, x, _unequal, true);\n    },\n    'DenseMatrix, SparseMatrix': function DenseMatrixSparseMatrix(x, y) {\n      return algorithm03(x, y, _unequal, false);\n    },\n    'DenseMatrix, DenseMatrix': function DenseMatrixDenseMatrix(x, y) {\n      return algorithm13(x, y, _unequal);\n    },\n    'Array, Array': function ArrayArray(x, y) {\n      // use matrix implementation\n      return this(matrix(x), matrix(y)).valueOf();\n    },\n    'Array, Matrix': function ArrayMatrix(x, y) {\n      // use matrix implementation\n      return this(matrix(x), y);\n    },\n    'Matrix, Array': function MatrixArray(x, y) {\n      // use matrix implementation\n      return this(x, matrix(y));\n    },\n    'SparseMatrix, any': function SparseMatrixAny(x, y) {\n      return algorithm12(x, y, _unequal, false);\n    },\n    'DenseMatrix, any': function DenseMatrixAny(x, y) {\n      return algorithm14(x, y, _unequal, false);\n    },\n    'any, SparseMatrix': function anySparseMatrix(x, y) {\n      return algorithm12(y, x, _unequal, true);\n    },\n    'any, DenseMatrix': function anyDenseMatrix(x, y) {\n      return algorithm14(y, x, _unequal, true);\n    },\n    'Array, any': function ArrayAny(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(x), y, _unequal, false).valueOf();\n    },\n    'any, Array': function anyArray(x, y) {\n      // use matrix implementation\n      return algorithm14(matrix(y), x, _unequal, true).valueOf();\n    }\n  });\n\n  function _unequal(x, y) {\n    return !equalScalar(x, y);\n  }\n});\nexport var createUnequalNumber = factory(name, ['typed', 'equalScalar'], _ref2 => {\n  var {\n    typed,\n    equalScalar\n  } = _ref2;\n  return typed(name, {\n    'any, any': function anyAny(x, y) {\n      // strict equality for null and undefined?\n      if (x === null) {\n        return y !== null;\n      }\n\n      if (y === null) {\n        return x !== null;\n      }\n\n      if (x === undefined) {\n        return y !== undefined;\n      }\n\n      if (y === undefined) {\n        return x !== undefined;\n      }\n\n      return !equalScalar(x, y);\n    }\n  });\n});", "/* eslint-disable no-loss-of-precision */\nimport { deepMap } from '../../utils/collection.js';\nimport { sign } from '../../utils/number.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'erf';\nvar dependencies = ['typed'];\nexport var createErf = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Compute the erf function of a value using a rational Chebyshev\n   * approximations for different intervals of x.\n   *\n   * This is a translation of W. J. Cody's Fortran implementation from 1987\n   * ( https://www.netlib.org/specfun/erf ). See the AMS publication\n   * \"Rational Chebyshev Approximations for the Error Function\" by W. J. Cody\n   * for an explanation of this process.\n   *\n   * For matrices, the function is evaluated element wise.\n   *\n   * Syntax:\n   *\n   *    math.erf(x)\n   *\n   * Examples:\n   *\n   *    math.erf(0.2)    // returns 0.22270258921047847\n   *    math.erf(-0.5)   // returns -0.5204998778130465\n   *    math.erf(4)      // returns 0.9999999845827421\n   *\n   * @param {number | Array | Matrix} x   A real number\n   * @return {number | Array | Matrix}    The erf of `x`\n   */\n  return typed('name', {\n    number: function number(x) {\n      var y = Math.abs(x);\n\n      if (y >= MAX_NUM) {\n        return sign(x);\n      }\n\n      if (y <= THRESH) {\n        return sign(x) * erf1(y);\n      }\n\n      if (y <= 4.0) {\n        return sign(x) * (1 - erfc2(y));\n      }\n\n      return sign(x) * (1 - erfc3(y));\n    },\n    'Array | Matrix': function ArrayMatrix(n) {\n      return deepMap(n, this);\n    } // TODO: For complex numbers, use the approximation for the Faddeeva function\n    //  from \"More Efficient Computation of the Complex Error Function\" (AMS)\n\n  });\n  /**\n   * Approximates the error function erf() for x <= 0.46875 using this function:\n   *               n\n   * erf(x) = x * sum (p_j * x^(2j)) / (q_j * x^(2j))\n   *              j=0\n   */\n\n  function erf1(y) {\n    var ysq = y * y;\n    var xnum = P[0][4] * ysq;\n    var xden = ysq;\n    var i;\n\n    for (i = 0; i < 3; i += 1) {\n      xnum = (xnum + P[0][i]) * ysq;\n      xden = (xden + Q[0][i]) * ysq;\n    }\n\n    return y * (xnum + P[0][3]) / (xden + Q[0][3]);\n  }\n  /**\n   * Approximates the complement of the error function erfc() for\n   * 0.46875 <= x <= 4.0 using this function:\n   *                       n\n   * erfc(x) = e^(-x^2) * sum (p_j * x^j) / (q_j * x^j)\n   *                      j=0\n   */\n\n\n  function erfc2(y) {\n    var xnum = P[1][8] * y;\n    var xden = y;\n    var i;\n\n    for (i = 0; i < 7; i += 1) {\n      xnum = (xnum + P[1][i]) * y;\n      xden = (xden + Q[1][i]) * y;\n    }\n\n    var result = (xnum + P[1][7]) / (xden + Q[1][7]);\n    var ysq = parseInt(y * 16) / 16;\n    var del = (y - ysq) * (y + ysq);\n    return Math.exp(-ysq * ysq) * Math.exp(-del) * result;\n  }\n  /**\n   * Approximates the complement of the error function erfc() for x > 4.0 using\n   * this function:\n   *\n   * erfc(x) = (e^(-x^2) / x) * [ 1/sqrt(pi) +\n   *               n\n   *    1/(x^2) * sum (p_j * x^(-2j)) / (q_j * x^(-2j)) ]\n   *              j=0\n   */\n\n\n  function erfc3(y) {\n    var ysq = 1 / (y * y);\n    var xnum = P[2][5] * ysq;\n    var xden = ysq;\n    var i;\n\n    for (i = 0; i < 4; i += 1) {\n      xnum = (xnum + P[2][i]) * ysq;\n      xden = (xden + Q[2][i]) * ysq;\n    }\n\n    var result = ysq * (xnum + P[2][4]) / (xden + Q[2][4]);\n    result = (SQRPI - result) / y;\n    ysq = parseInt(y * 16) / 16;\n    var del = (y - ysq) * (y + ysq);\n    return Math.exp(-ysq * ysq) * Math.exp(-del) * result;\n  }\n});\n/**\n * Upper bound for the first approximation interval, 0 <= x <= THRESH\n * @constant\n */\n\nvar THRESH = 0.46875;\n/**\n * Constant used by W. J. Cody's Fortran77 implementation to denote sqrt(pi)\n * @constant\n */\n\nvar SQRPI = 5.6418958354775628695e-1;\n/**\n * Coefficients for each term of the numerator sum (p_j) for each approximation\n * interval (see W. J. Cody's paper for more details)\n * @constant\n */\n\nvar P = [[3.16112374387056560e00, 1.13864154151050156e02, 3.77485237685302021e02, 3.20937758913846947e03, 1.85777706184603153e-1], [5.64188496988670089e-1, 8.88314979438837594e00, 6.61191906371416295e01, 2.98635138197400131e02, 8.81952221241769090e02, 1.71204761263407058e03, 2.05107837782607147e03, 1.23033935479799725e03, 2.15311535474403846e-8], [3.05326634961232344e-1, 3.60344899949804439e-1, 1.25781726111229246e-1, 1.60837851487422766e-2, 6.58749161529837803e-4, 1.63153871373020978e-2]];\n/**\n * Coefficients for each term of the denominator sum (q_j) for each approximation\n * interval (see W. J. Cody's paper for more details)\n * @constant\n */\n\nvar Q = [[2.36012909523441209e01, 2.44024637934444173e02, 1.28261652607737228e03, 2.84423683343917062e03], [1.57449261107098347e01, 1.17693950891312499e02, 5.37181101862009858e02, 1.62138957456669019e03, 3.29079923573345963e03, 4.36261909014324716e03, 3.43936767414372164e03, 1.23033935480374942e03], [2.56852019228982242e00, 1.87295284992346047e00, 5.27905102951428412e-1, 6.05183413124413191e-2, 2.33520497626869185e-3]];\n/**\n * Maximum/minimum safe numbers to input to erf() (in ES6+, this number is\n * Number.[MAX|MIN]_SAFE_INTEGER). erf() for all numbers beyond this limit will\n * return 1\n */\n\nvar MAX_NUM = Math.pow(2, 53);", "import { flatten } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'mode';\nvar dependencies = ['typed', 'isNaN', 'isNumeric'];\nexport var createMode = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    isNaN,\n    isNumeric\n  } = _ref;\n\n  /**\n  * Computes the mode of a set of numbers or a list with values(numbers or characters).\n  * If there are more than one modes, it returns a list of those values.\n  *\n  * Syntax:\n  *\n  *     math.mode(a, b, c, ...)\n  *     math.mode(A)\n  *\n  * Examples:\n  *\n  *     math.mode(2, 1, 4, 3, 1)                            // returns [1]\n  *     math.mode([1, 2.7, 3.2, 4, 2.7])                    // returns [2.7]\n  *     math.mode(1, 4, 6, 1, 6)                             // returns [1, 6]\n  *     math.mode('a','a','b','c')                           // returns [\"a\"]\n  *     math.mode(1, 1.5, 'abc')                             // returns [1, 1.5, \"abc\"]\n  *\n  * See also:\n  *\n  *     median,\n  *     mean\n  *\n  * @param {... *} args  A single matrix\n  * @return {*} The mode of all values\n  */\n  return typed(name, {\n    'Array | Matrix': _mode,\n    '...': function _(args) {\n      return _mode(args);\n    }\n  });\n  /**\n   * Calculates the mode in an 1-dimensional array\n   * @param {Array} values\n   * @return {Array} mode\n   * @private\n   */\n\n  function _mode(values) {\n    values = flatten(values.valueOf());\n    var num = values.length;\n\n    if (num === 0) {\n      throw new Error('Cannot calculate mode of an empty array');\n    }\n\n    var count = {};\n    var mode = [];\n    var max = 0;\n\n    for (var i = 0; i < values.length; i++) {\n      var value = values[i];\n\n      if (isNumeric(value) && isNaN(value)) {\n        throw new Error('Cannot calculate mode of an array containing NaN values');\n      }\n\n      if (!(value in count)) {\n        count[value] = 0;\n      }\n\n      count[value]++;\n\n      if (count[value] === max) {\n        mode.push(value);\n      } else if (count[value] > max) {\n        max = count[value];\n        mode = [value];\n      }\n    }\n\n    return mode;\n  }\n});", "import { typeOf } from '../../../utils/is.js';\n/**\n * Improve error messages for statistics functions. Errors are typically\n * thrown in an internally used function like larger, causing the error\n * not to mention the function (like max) which is actually used by the user.\n *\n * @param {Error} err\n * @param {String} fnName\n * @param {*} [value]\n * @return {Error}\n */\n\nexport function improveErrorMessage(err, fnName, value) {\n  // TODO: add information with the index (also needs transform in expression parser)\n  var details;\n\n  if (String(err).indexOf('Unexpected type') !== -1) {\n    details = arguments.length > 2 ? ' (type: ' + typeOf(value) + ', value: ' + JSON.stringify(value) + ')' : ' (type: ' + err.data.actual + ')';\n    return new TypeError('Cannot calculate ' + fnName + ', unexpected type of argument' + details);\n  }\n\n  if (String(err).indexOf('complex numbers') !== -1) {\n    details = arguments.length > 2 ? ' (type: ' + typeOf(value) + ', value: ' + JSON.stringify(value) + ')' : '';\n    return new TypeError('Cannot calculate ' + fnName + ', no ordering relation is defined for complex numbers' + details);\n  }\n\n  return err;\n}", "import { deepForEach } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'prod';\nvar dependencies = ['typed', 'config', 'multiplyScalar', 'numeric'];\nexport var createProd = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    multiplyScalar,\n    numeric\n  } = _ref;\n\n  /**\n   * Compute the product of a matrix or a list with values.\n   * In case of a (multi dimensional) array or matrix, the sum of all\n   * elements will be calculated.\n   *\n   * Syntax:\n   *\n   *     math.prod(a, b, c, ...)\n   *     math.prod(A)\n   *\n   * Examples:\n   *\n   *     math.multiply(2, 3)           // returns 6\n   *     math.prod(2, 3)               // returns 6\n   *     math.prod(2, 3, 4)            // returns 24\n   *     math.prod([2, 3, 4])          // returns 24\n   *     math.prod([[2, 5], [4, 3]])   // returns 120\n   *\n   * See also:\n   *\n   *    mean, median, min, max, sum, std, variance\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The product of all values\n   */\n  return typed(name, {\n    // prod([a, b, c, d, ...])\n    'Array | Matrix': _prod,\n    // prod([a, b, c, d, ...], dim)\n    'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(array, dim) {\n      // TODO: implement prod(A, dim)\n      throw new Error('prod(A, dim) is not yet supported'); // return reduce(arguments[0], arguments[1], math.prod)\n    },\n    // prod(a, b, c, d, ...)\n    '...': function _(args) {\n      return _prod(args);\n    }\n  });\n  /**\n   * Recursively calculate the product of an n-dimensional array\n   * @param {Array} array\n   * @return {number} prod\n   * @private\n   */\n\n  function _prod(array) {\n    var prod;\n    deepForEach(array, function (value) {\n      try {\n        prod = prod === undefined ? value : multiplyScalar(prod, value);\n      } catch (err) {\n        throw improveErrorMessage(err, 'prod', value);\n      }\n    }); // make sure returning numeric value: parse a string into a numeric value\n\n    if (typeof prod === 'string') {\n      prod = numeric(prod, config.number);\n    }\n\n    if (prod === undefined) {\n      throw new Error('Cannot calculate prod of an empty array');\n    }\n\n    return prod;\n  }\n});", "import { deepForEach, reduce, containsCollections } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'max';\nvar dependencies = ['typed', 'config', 'numeric', 'larger'];\nexport var createMax = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    numeric,\n    larger\n  } = _ref;\n\n  /**\n   * Compute the maximum value of a matrix or a  list with values.\n   * In case of a multi dimensional array, the maximum of the flattened array\n   * will be calculated. When `dim` is provided, the maximum over the selected\n   * dimension will be calculated. Parameter `dim` is zero-based.\n   *\n   * Syntax:\n   *\n   *     math.max(a, b, c, ...)\n   *     math.max(A)\n   *     math.max(A, dim)\n   *\n   * Examples:\n   *\n   *     math.max(2, 1, 4, 3)                  // returns 4\n   *     math.max([2, 1, 4, 3])                // returns 4\n   *\n   *     // maximum over a specified dimension (zero-based)\n   *     math.max([[2, 5], [4, 3], [1, 7]], 0) // returns [4, 7]\n   *     math.max([[2, 5], [4, 3]], [1, 7], 1) // returns [5, 4, 7]\n   *\n   *     math.max(2.7, 7.1, -4.5, 2.0, 4.1)    // returns 7.1\n   *     math.min(2.7, 7.1, -4.5, 2.0, 4.1)    // returns -4.5\n   *\n   * See also:\n   *\n   *    mean, median, min, prod, std, sum, variance\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The maximum value\n   */\n  return typed(name, {\n    // max([a, b, c, d, ...])\n    'Array | Matrix': _max,\n    // max([a, b, c, d, ...], dim)\n    'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(array, dim) {\n      return reduce(array, dim.valueOf(), _largest);\n    },\n    // max(a, b, c, d, ...)\n    '...': function _(args) {\n      if (containsCollections(args)) {\n        throw new TypeError('Scalar values expected in function max');\n      }\n\n      return _max(args);\n    }\n  });\n  /**\n   * Return the largest of two values\n   * @param {*} x\n   * @param {*} y\n   * @returns {*} Returns x when x is largest, or y when y is largest\n   * @private\n   */\n\n  function _largest(x, y) {\n    try {\n      return larger(x, y) ? x : y;\n    } catch (err) {\n      throw improveErrorMessage(err, 'max', y);\n    }\n  }\n  /**\n   * Recursively calculate the maximum value in an n-dimensional array\n   * @param {Array} array\n   * @return {number} max\n   * @private\n   */\n\n\n  function _max(array) {\n    var res;\n    deepForEach(array, function (value) {\n      try {\n        if (isNaN(value) && typeof value === 'number') {\n          res = NaN;\n        } else if (res === undefined || larger(value, res)) {\n          res = value;\n        }\n      } catch (err) {\n        throw improveErrorMessage(err, 'max', value);\n      }\n    });\n\n    if (res === undefined) {\n      throw new Error('Cannot calculate max of an empty array');\n    } // make sure returning numeric value: parse a string into a numeric value\n\n\n    if (typeof res === 'string') {\n      res = numeric(res, config.number);\n    }\n\n    return res;\n  }\n});", "import { containsCollections, deepForEach, reduce } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'min';\nvar dependencies = ['typed', 'config', 'numeric', 'smaller'];\nexport var createMin = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    numeric,\n    smaller\n  } = _ref;\n\n  /**\n   * Compute the minimum value of a matrix or a  list of values.\n   * In case of a multi dimensional array, the minimum of the flattened array\n   * will be calculated. When `dim` is provided, the minimum over the selected\n   * dimension will be calculated. Parameter `dim` is zero-based.\n   *\n   * Syntax:\n   *\n   *     math.min(a, b, c, ...)\n   *     math.min(A)\n   *     math.min(A, dim)\n   *\n   * Examples:\n   *\n   *     math.min(2, 1, 4, 3)                  // returns 1\n   *     math.min([2, 1, 4, 3])                // returns 1\n   *\n   *     // minimum over a specified dimension (zero-based)\n   *     math.min([[2, 5], [4, 3], [1, 7]], 0) // returns [1, 3]\n   *     math.min([[2, 5], [4, 3], [1, 7]], 1) // returns [2, 3, 1]\n   *\n   *     math.max(2.7, 7.1, -4.5, 2.0, 4.1)    // returns 7.1\n   *     math.min(2.7, 7.1, -4.5, 2.0, 4.1)    // returns -4.5\n   *\n   * See also:\n   *\n   *    mean, median, max, prod, std, sum, variance\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The minimum value\n   */\n  return typed(name, {\n    // min([a, b, c, d, ...])\n    'Array | Matrix': _min,\n    // min([a, b, c, d, ...], dim)\n    'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(array, dim) {\n      return reduce(array, dim.valueOf(), _smallest);\n    },\n    // min(a, b, c, d, ...)\n    '...': function _(args) {\n      if (containsCollections(args)) {\n        throw new TypeError('Scalar values expected in function min');\n      }\n\n      return _min(args);\n    }\n  });\n  /**\n   * Return the smallest of two values\n   * @param {*} x\n   * @param {*} y\n   * @returns {*} Returns x when x is smallest, or y when y is smallest\n   * @private\n   */\n\n  function _smallest(x, y) {\n    try {\n      return smaller(x, y) ? x : y;\n    } catch (err) {\n      throw improveErrorMessage(err, 'min', y);\n    }\n  }\n  /**\n   * Recursively calculate the minimum value in an n-dimensional array\n   * @param {Array} array\n   * @return {number} min\n   * @private\n   */\n\n\n  function _min(array) {\n    var min;\n    deepForEach(array, function (value) {\n      try {\n        if (isNaN(value) && typeof value === 'number') {\n          min = NaN;\n        } else if (min === undefined || smaller(value, min)) {\n          min = value;\n        }\n      } catch (err) {\n        throw improveErrorMessage(err, 'min', value);\n      }\n    });\n\n    if (min === undefined) {\n      throw new Error('Cannot calculate min of an empty array');\n    } // make sure returning numeric value: parse a string into a numeric value\n\n\n    if (typeof min === 'string') {\n      min = numeric(min, config.number);\n    }\n\n    return min;\n  }\n});", "import { containsCollections, deepForEach, reduce } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'sum';\nvar dependencies = ['typed', 'config', 'add', 'numeric'];\nexport var createSum = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    add,\n    numeric\n  } = _ref;\n\n  /**\n   * Compute the sum of a matrix or a list with values.\n   * In case of a (multi dimensional) array or matrix, the sum of all\n   * elements will be calculated.\n   *\n   * Syntax:\n   *\n   *     math.sum(a, b, c, ...)\n   *     math.sum(A)\n   *\n   * Examples:\n   *\n   *     math.sum(2, 1, 4, 3)               // returns 10\n   *     math.sum([2, 1, 4, 3])             // returns 10\n   *     math.sum([[2, 5], [4, 3], [1, 7]]) // returns 22\n   *\n   * See also:\n   *\n   *    mean, median, min, max, prod, std, variance, cumsum\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The sum of all values\n   */\n  return typed(name, {\n    // sum([a, b, c, d, ...])\n    'Array | Matrix': _sum,\n    // sum([a, b, c, d, ...], dim)\n    'Array | Matrix, number | BigNumber': _nsumDim,\n    // sum(a, b, c, d, ...)\n    '...': function _(args) {\n      if (containsCollections(args)) {\n        throw new TypeError('Scalar values expected in function sum');\n      }\n\n      return _sum(args);\n    }\n  });\n  /**\n   * Recursively calculate the sum of an n-dimensional array\n   * @param {Array | Matrix} array\n   * @return {number} sum\n   * @private\n   */\n\n  function _sum(array) {\n    var sum;\n    deepForEach(array, function (value) {\n      try {\n        sum = sum === undefined ? value : add(sum, value);\n      } catch (err) {\n        throw improveErrorMessage(err, 'sum', value);\n      }\n    }); // make sure returning numeric value: parse a string into a numeric value\n\n    if (sum === undefined) {\n      sum = numeric(0, config.number);\n    }\n\n    if (typeof sum === 'string') {\n      sum = numeric(sum, config.number);\n    }\n\n    return sum;\n  }\n\n  function _nsumDim(array, dim) {\n    try {\n      var sum = reduce(array, dim, add);\n      return sum;\n    } catch (err) {\n      throw improveErrorMessage(err, 'sum');\n    }\n  }\n});", "import { containsCollections } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nimport { _switch } from '../../utils/switch.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nimport { arraySize } from '../../utils/array.js';\nimport { IndexError } from '../../error/IndexError.js';\nvar name = 'cumsum';\nvar dependencies = ['typed', 'add', 'unaryPlus'];\nexport var createCumSum = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    unaryPlus\n  } = _ref;\n\n  /**\n   * Compute the cumulative sum of a matrix or a list with values.\n   * In case of a (multi dimensional) array or matrix, the cumulative sums\n   * along a specified dimension (defaulting to the first) will be calculated.\n   *\n   * Syntax:\n   *\n   *     math.cumsum(a, b, c, ...)\n   *     math.cumsum(A)\n   *\n   * Examples:\n   *\n   *     math.cumsum(2, 1, 4, 3)               // returns [2, 3, 7, 10]\n   *     math.cumsum([2, 1, 4, 3])             // returns [2, 3, 7, 10]\n   *     math.cumsum([[1, 2], [3, 4]])         // returns [[1, 2], [4, 6]]\n   *     math.cumsum([[1, 2], [3, 4]], 0)      // returns [[1, 2], [4, 6]]\n   *     math.cumsum([[1, 2], [3, 4]], 1)      // returns [[1, 3], [3, 7]]\n   *     math.cumsum([[2, 5], [4, 3], [1, 7]]) // returns [[2, 5], [6, 8], [7, 15]]\n   *\n   * See also:\n   *\n   *    mean, median, min, max, prod, std, variance, sum\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The cumulative sum of all values\n   */\n  return typed(name, {\n    // sum([a, b, c, d, ...])\n    Array: _cumsum,\n    Matrix: function Matrix(matrix) {\n      return matrix.create(_cumsum(matrix.valueOf()));\n    },\n    // sum([a, b, c, d, ...], dim)\n    'Array, number | BigNumber': _ncumSumDim,\n    'Matrix, number | BigNumber': function MatrixNumberBigNumber(matrix, dim) {\n      return matrix.create(_ncumSumDim(matrix.valueOf(), dim));\n    },\n    // cumsum(a, b, c, d, ...)\n    '...': function _(args) {\n      if (containsCollections(args)) {\n        throw new TypeError('All values expected to be scalar in function cumsum');\n      }\n\n      return _cumsum(args);\n    }\n  });\n  /**\n     * Recursively calculate the cumulative sum of an n-dimensional array\n     * @param {Array} array\n     * @return {number} cumsum\n     * @private\n     */\n\n  function _cumsum(array) {\n    try {\n      return _cumsummap(array);\n    } catch (err) {\n      throw improveErrorMessage(err, name);\n    }\n  }\n\n  function _cumsummap(array) {\n    if (array.length === 0) {\n      return [];\n    }\n\n    var sums = [unaryPlus(array[0])]; // unaryPlus converts to number if need be\n\n    for (var i = 1; i < array.length; ++i) {\n      // Must use add below and not addScalar for the case of summing a\n      // 2+-dimensional array along the 0th dimension (the row vectors,\n      // or higher-d analogues, are literally added to each other).\n      sums.push(add(sums[i - 1], array[i]));\n    }\n\n    return sums;\n  }\n\n  function _ncumSumDim(array, dim) {\n    var size = arraySize(array);\n\n    if (dim < 0 || dim >= size.length) {\n      // TODO: would be more clear when throwing a DimensionError here\n      throw new IndexError(dim, size.length);\n    }\n\n    try {\n      return _cumsumDimensional(array, dim);\n    } catch (err) {\n      throw improveErrorMessage(err, name);\n    }\n  }\n  /* Possible TODO: Refactor _reduce in collection.js to be able to work here as well */\n\n\n  function _cumsumDimensional(mat, dim) {\n    var i, ret, tran;\n\n    if (dim <= 0) {\n      var initialValue = mat[0][0];\n\n      if (!Array.isArray(initialValue)) {\n        return _cumsummap(mat);\n      } else {\n        tran = _switch(mat);\n        ret = [];\n\n        for (i = 0; i < tran.length; i++) {\n          ret[i] = _cumsumDimensional(tran[i], dim - 1);\n        }\n\n        return ret;\n      }\n    } else {\n      ret = [];\n\n      for (i = 0; i < mat.length; i++) {\n        ret[i] = _cumsumDimensional(mat[i], dim - 1);\n      }\n\n      return ret;\n    }\n  }\n});", "import { containsCollections, deepForEach, reduce } from '../../utils/collection.js';\nimport { arraySize } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'mean';\nvar dependencies = ['typed', 'add', 'divide'];\nexport var createMean = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    divide\n  } = _ref;\n\n  /**\n   * Compute the mean value of matrix or a list with values.\n   * In case of a multi dimensional array, the mean of the flattened array\n   * will be calculated. When `dim` is provided, the maximum over the selected\n   * dimension will be calculated. Parameter `dim` is zero-based.\n   *\n   * Syntax:\n   *\n   *     math.mean(a, b, c, ...)\n   *     math.mean(A)\n   *     math.mean(A, dim)\n   *\n   * Examples:\n   *\n   *     math.mean(2, 1, 4, 3)                     // returns 2.5\n   *     math.mean([1, 2.7, 3.2, 4])               // returns 2.725\n   *\n   *     math.mean([[2, 5], [6, 3], [1, 7]], 0)    // returns [3, 5]\n   *     math.mean([[2, 5], [6, 3], [1, 7]], 1)    // returns [3.5, 4.5, 4]\n   *\n   * See also:\n   *\n   *     median, min, max, sum, prod, std, variance\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The mean of all values\n   */\n  return typed(name, {\n    // mean([a, b, c, d, ...])\n    'Array | Matrix': _mean,\n    // mean([a, b, c, d, ...], dim)\n    'Array | Matrix, number | BigNumber': _nmeanDim,\n    // mean(a, b, c, d, ...)\n    '...': function _(args) {\n      if (containsCollections(args)) {\n        throw new TypeError('Scalar values expected in function mean');\n      }\n\n      return _mean(args);\n    }\n  });\n  /**\n   * Calculate the mean value in an n-dimensional array, returning a\n   * n-1 dimensional array\n   * @param {Array} array\n   * @param {number} dim\n   * @return {number} mean\n   * @private\n   */\n\n  function _nmeanDim(array, dim) {\n    try {\n      var sum = reduce(array, dim, add);\n      var s = Array.isArray(array) ? arraySize(array) : array.size();\n      return divide(sum, s[dim]);\n    } catch (err) {\n      throw improveErrorMessage(err, 'mean');\n    }\n  }\n  /**\n   * Recursively calculate the mean value in an n-dimensional array\n   * @param {Array} array\n   * @return {number} mean\n   * @private\n   */\n\n\n  function _mean(array) {\n    var sum;\n    var num = 0;\n    deepForEach(array, function (value) {\n      try {\n        sum = sum === undefined ? value : add(sum, value);\n        num++;\n      } catch (err) {\n        throw improveErrorMessage(err, 'mean', value);\n      }\n    });\n\n    if (num === 0) {\n      throw new Error('Cannot calculate the mean of an empty array');\n    }\n\n    return divide(sum, num);\n  }\n});", "import { containsCollections } from '../../utils/collection.js';\nimport { flatten } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'median';\nvar dependencies = ['typed', 'add', 'divide', 'compare', 'partitionSelect'];\nexport var createMedian = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    divide,\n    compare,\n    partitionSelect\n  } = _ref;\n\n  /**\n   * Recursively calculate the median of an n-dimensional array\n   * @param {Array} array\n   * @return {Number} median\n   * @private\n   */\n  function _median(array) {\n    try {\n      array = flatten(array.valueOf());\n      var num = array.length;\n\n      if (num === 0) {\n        throw new Error('Cannot calculate median of an empty array');\n      }\n\n      if (num % 2 === 0) {\n        // even: return the average of the two middle values\n        var mid = num / 2 - 1;\n        var right = partitionSelect(array, mid + 1); // array now partitioned at mid + 1, take max of left part\n\n        var left = array[mid];\n\n        for (var i = 0; i < mid; ++i) {\n          if (compare(array[i], left) > 0) {\n            left = array[i];\n          }\n        }\n\n        return middle2(left, right);\n      } else {\n        // odd: return the middle value\n        var m = partitionSelect(array, (num - 1) / 2);\n        return middle(m);\n      }\n    } catch (err) {\n      throw improveErrorMessage(err, 'median');\n    }\n  } // helper function to type check the middle value of the array\n\n\n  var middle = typed({\n    'number | BigNumber | Complex | Unit': function numberBigNumberComplexUnit(value) {\n      return value;\n    }\n  }); // helper function to type check the two middle value of the array\n\n  var middle2 = typed({\n    'number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit': function numberBigNumberComplexUnitNumberBigNumberComplexUnit(left, right) {\n      return divide(add(left, right), 2);\n    }\n  });\n  /**\n   * Compute the median of a matrix or a list with values. The values are\n   * sorted and the middle value is returned. In case of an even number of\n   * values, the average of the two middle values is returned.\n   * Supported types of values are: Number, BigNumber, Unit\n   *\n   * In case of a (multi dimensional) array or matrix, the median of all\n   * elements will be calculated.\n   *\n   * Syntax:\n   *\n   *     math.median(a, b, c, ...)\n   *     math.median(A)\n   *\n   * Examples:\n   *\n   *     math.median(5, 2, 7)        // returns 5\n   *     math.median([3, -1, 5, 7])  // returns 4\n   *\n   * See also:\n   *\n   *     mean, min, max, sum, prod, std, variance, quantileSeq\n   *\n   * @param {... *} args  A single matrix or or multiple scalar values\n   * @return {*} The median\n   */\n\n  return typed(name, {\n    // median([a, b, c, d, ...])\n    'Array | Matrix': _median,\n    // median([a, b, c, d, ...], dim)\n    'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(array, dim) {\n      // TODO: implement median(A, dim)\n      throw new Error('median(A, dim) is not yet supported'); // return reduce(arguments[0], arguments[1], ...)\n    },\n    // median(a, b, c, d, ...)\n    '...': function _(args) {\n      if (containsCollections(args)) {\n        throw new TypeError('Scalar values expected in function median');\n      }\n\n      return _median(args);\n    }\n  });\n});", "import { flatten } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar name = 'mad';\nvar dependencies = ['typed', 'abs', 'map', 'median', 'subtract'];\nexport var createMad = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    abs,\n    map,\n    median,\n    subtract\n  } = _ref;\n\n  /**\n   * Compute the median absolute deviation of a matrix or a list with values.\n   * The median absolute deviation is defined as the median of the absolute\n   * deviations from the median.\n   *\n   * Syntax:\n   *\n   *     math.mad(a, b, c, ...)\n   *     math.mad(A)\n   *\n   * Examples:\n   *\n   *     math.mad(10, 20, 30)             // returns 10\n   *     math.mad([1, 2, 3])              // returns 1\n   *     math.mad([[1, 2, 3], [4, 5, 6]]) // returns 1.5\n   *\n   * See also:\n   *\n   *     median, mean, std, abs\n   *\n   * @param {Array | Matrix} array\n   *                        A single matrix or multiple scalar values.\n   * @return {*} The median absolute deviation.\n   */\n  return typed(name, {\n    // mad([a, b, c, d, ...])\n    'Array | Matrix': _mad,\n    // mad(a, b, c, d, ...)\n    '...': function _(args) {\n      return _mad(args);\n    }\n  });\n\n  function _mad(array) {\n    array = flatten(array.valueOf());\n\n    if (array.length === 0) {\n      throw new Error('Cannot calculate median absolute deviation (mad) of an empty array');\n    }\n\n    try {\n      var med = median(array);\n      return median(map(array, function (value) {\n        return abs(subtract(value, med));\n      }));\n    } catch (err) {\n      if (err instanceof TypeError && err.message.indexOf('median') !== -1) {\n        throw new TypeError(err.message.replace('median', 'mad'));\n      } else {\n        throw improveErrorMessage(err, 'mad');\n      }\n    }\n  }\n});", "import { deepForEach } from '../../utils/collection.js';\nimport { isBigNumber } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nimport { improveErrorMessage } from './utils/improveErrorMessage.js';\nvar DEFAULT_NORMALIZATION = 'unbiased';\nvar name = 'variance';\nvar dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'apply', 'isNaN'];\nexport var createVariance = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    subtract,\n    multiply,\n    divide,\n    apply,\n    isNaN\n  } = _ref;\n\n  /**\n   * Compute the variance of a matrix or a  list with values.\n   * In case of a (multi dimensional) array or matrix, the variance over all\n   * elements will be calculated.\n   *\n   * Additionally, it is possible to compute the variance along the rows\n   * or columns of a matrix by specifying the dimension as the second argument.\n   *\n   * Optionally, the type of normalization can be specified as the final\n   * parameter. The parameter `normalization` can be one of the following values:\n   *\n   * - 'unbiased' (default) The sum of squared errors is divided by (n - 1)\n   * - 'uncorrected'        The sum of squared errors is divided by n\n   * - 'biased'             The sum of squared errors is divided by (n + 1)\n   *\n   *\n   * Note that older browser may not like the variable name `var`. In that\n   * case, the function can be called as `math['var'](...)` instead of\n   * `math.var(...)`.\n   *\n   * Syntax:\n   *\n   *     math.variance(a, b, c, ...)\n   *     math.variance(A)\n   *     math.variance(A, normalization)\n   *     math.variance(A, dimension)\n   *     math.variance(A, dimension, normalization)\n   *\n   * Examples:\n   *\n   *     math.variance(2, 4, 6)                     // returns 4\n   *     math.variance([2, 4, 6, 8])                // returns 6.666666666666667\n   *     math.variance([2, 4, 6, 8], 'uncorrected') // returns 5\n   *     math.variance([2, 4, 6, 8], 'biased')      // returns 4\n   *\n   *     math.variance([[1, 2, 3], [4, 5, 6]])      // returns 3.5\n   *     math.variance([[1, 2, 3], [4, 6, 8]], 0)   // returns [4.5, 8, 12.5]\n   *     math.variance([[1, 2, 3], [4, 6, 8]], 1)   // returns [1, 4]\n   *     math.variance([[1, 2, 3], [4, 6, 8]], 1, 'biased') // returns [0.5, 2]\n   *\n   * See also:\n   *\n   *    mean, median, max, min, prod, std, sum\n   *\n   * @param {Array | Matrix} array\n   *                        A single matrix or or multiple scalar values\n   * @param {string} [normalization='unbiased']\n   *                        Determines how to normalize the variance.\n   *                        Choose 'unbiased' (default), 'uncorrected', or 'biased'.\n   * @param dimension {number | BigNumber}\n   *                        Determines the axis to compute the variance for a matrix\n   * @return {*} The variance\n   */\n  return typed(name, {\n    // variance([a, b, c, d, ...])\n    'Array | Matrix': function ArrayMatrix(array) {\n      return _var(array, DEFAULT_NORMALIZATION);\n    },\n    // variance([a, b, c, d, ...], normalization)\n    'Array | Matrix, string': _var,\n    // variance([a, b, c, c, ...], dim)\n    'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(array, dim) {\n      return _varDim(array, dim, DEFAULT_NORMALIZATION);\n    },\n    // variance([a, b, c, c, ...], dim, normalization)\n    'Array | Matrix, number | BigNumber, string': _varDim,\n    // variance(a, b, c, d, ...)\n    '...': function _(args) {\n      return _var(args, DEFAULT_NORMALIZATION);\n    }\n  });\n  /**\n   * Recursively calculate the variance of an n-dimensional array\n   * @param {Array} array\n   * @param {string} normalization\n   *                        Determines how to normalize the variance:\n   *                        - 'unbiased'    The sum of squared errors is divided by (n - 1)\n   *                        - 'uncorrected' The sum of squared errors is divided by n\n   *                        - 'biased'      The sum of squared errors is divided by (n + 1)\n   * @return {number | BigNumber} variance\n   * @private\n   */\n\n  function _var(array, normalization) {\n    var sum;\n    var num = 0;\n\n    if (array.length === 0) {\n      throw new SyntaxError('Function variance requires one or more parameters (0 provided)');\n    } // calculate the mean and number of elements\n\n\n    deepForEach(array, function (value) {\n      try {\n        sum = sum === undefined ? value : add(sum, value);\n        num++;\n      } catch (err) {\n        throw improveErrorMessage(err, 'variance', value);\n      }\n    });\n    if (num === 0) throw new Error('Cannot calculate variance of an empty array');\n    var mean = divide(sum, num); // calculate the variance\n\n    sum = undefined;\n    deepForEach(array, function (value) {\n      var diff = subtract(value, mean);\n      sum = sum === undefined ? multiply(diff, diff) : add(sum, multiply(diff, diff));\n    });\n\n    if (isNaN(sum)) {\n      return sum;\n    }\n\n    switch (normalization) {\n      case 'uncorrected':\n        return divide(sum, num);\n\n      case 'biased':\n        return divide(sum, num + 1);\n\n      case 'unbiased':\n        {\n          var zero = isBigNumber(sum) ? sum.mul(0) : 0;\n          return num === 1 ? zero : divide(sum, num - 1);\n        }\n\n      default:\n        throw new Error('Unknown normalization \"' + normalization + '\". ' + 'Choose \"unbiased\" (default), \"uncorrected\", or \"biased\".');\n    }\n  }\n\n  function _varDim(array, dim, normalization) {\n    try {\n      if (array.length === 0) {\n        throw new SyntaxError('Function variance requires one or more parameters (0 provided)');\n      }\n\n      return apply(array, dim, x => _var(x, normalization));\n    } catch (err) {\n      throw improveErrorMessage(err, 'variance');\n    }\n  }\n});", "import { isBigNumber, isCollection, isNumber } from '../../utils/is.js';\nimport { isInteger } from '../../utils/number.js';\nimport { flatten } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'quantileSeq';\nvar dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare'];\nexport var createQuantileSeq = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    multiply,\n    partitionSelect,\n    compare\n  } = _ref;\n\n  /**\n   * Compute the prob order quantile of a matrix or a list with values.\n   * The sequence is sorted and the middle value is returned.\n   * Supported types of sequence values are: Number, BigNumber, Unit\n   * Supported types of probability are: Number, BigNumber\n   *\n   * In case of a (multi dimensional) array or matrix, the prob order quantile\n   * of all elements will be calculated.\n   *\n   * Syntax:\n   *\n   *     math.quantileSeq(A, prob[, sorted])\n   *     math.quantileSeq(A, [prob1, prob2, ...][, sorted])\n   *     math.quantileSeq(A, N[, sorted])\n   *\n   * Examples:\n   *\n   *     math.quantileSeq([3, -1, 5, 7], 0.5)         // returns 4\n   *     math.quantileSeq([3, -1, 5, 7], [1/3, 2/3])  // returns [3, 5]\n   *     math.quantileSeq([3, -1, 5, 7], 2)           // returns [3, 5]\n   *     math.quantileSeq([-1, 3, 5, 7], 0.5, true)   // returns 4\n   *\n   * See also:\n   *\n   *     median, mean, min, max, sum, prod, std, variance\n   *\n   * @param {Array, Matrix} data                A single matrix or Array\n   * @param {Number, BigNumber, Array} probOrN  prob is the order of the quantile, while N is\n   *                                            the amount of evenly distributed steps of\n   *                                            probabilities; only one of these options can\n   *                                            be provided\n   * @param {Boolean} sorted=false              is data sorted in ascending order\n   * @return {Number, BigNumber, Unit, Array}   Quantile(s)\n   */\n  function quantileSeq(data, probOrN, sorted) {\n    var probArr, dataArr, one;\n\n    if (arguments.length < 2 || arguments.length > 3) {\n      throw new SyntaxError('Function quantileSeq requires two or three parameters');\n    }\n\n    if (isCollection(data)) {\n      sorted = sorted || false;\n\n      if (typeof sorted === 'boolean') {\n        dataArr = data.valueOf();\n\n        if (isNumber(probOrN)) {\n          if (probOrN < 0) {\n            throw new Error('N/prob must be non-negative');\n          }\n\n          if (probOrN <= 1) {\n            // quantileSeq([a, b, c, d, ...], prob[,sorted])\n            return _quantileSeq(dataArr, probOrN, sorted);\n          }\n\n          if (probOrN > 1) {\n            // quantileSeq([a, b, c, d, ...], N[,sorted])\n            if (!isInteger(probOrN)) {\n              throw new Error('N must be a positive integer');\n            }\n\n            var nPlusOne = probOrN + 1;\n            probArr = new Array(probOrN);\n\n            for (var i = 0; i < probOrN;) {\n              probArr[i] = _quantileSeq(dataArr, ++i / nPlusOne, sorted);\n            }\n\n            return probArr;\n          }\n        }\n\n        if (isBigNumber(probOrN)) {\n          var BigNumber = probOrN.constructor;\n\n          if (probOrN.isNegative()) {\n            throw new Error('N/prob must be non-negative');\n          }\n\n          one = new BigNumber(1);\n\n          if (probOrN.lte(one)) {\n            // quantileSeq([a, b, c, d, ...], prob[,sorted])\n            return new BigNumber(_quantileSeq(dataArr, probOrN, sorted));\n          }\n\n          if (probOrN.gt(one)) {\n            // quantileSeq([a, b, c, d, ...], N[,sorted])\n            if (!probOrN.isInteger()) {\n              throw new Error('N must be a positive integer');\n            } // largest possible Array length is 2^32-1\n            // 2^32 < 10^15, thus safe conversion guaranteed\n\n\n            var intN = probOrN.toNumber();\n\n            if (intN > 4294967295) {\n              throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');\n            }\n\n            var _nPlusOne = new BigNumber(intN + 1);\n\n            probArr = new Array(intN);\n\n            for (var _i = 0; _i < intN;) {\n              probArr[_i] = new BigNumber(_quantileSeq(dataArr, new BigNumber(++_i).div(_nPlusOne), sorted));\n            }\n\n            return probArr;\n          }\n        }\n\n        if (Array.isArray(probOrN)) {\n          // quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])\n          probArr = new Array(probOrN.length);\n\n          for (var _i2 = 0; _i2 < probArr.length; ++_i2) {\n            var currProb = probOrN[_i2];\n\n            if (isNumber(currProb)) {\n              if (currProb < 0 || currProb > 1) {\n                throw new Error('Probability must be between 0 and 1, inclusive');\n              }\n            } else if (isBigNumber(currProb)) {\n              one = new currProb.constructor(1);\n\n              if (currProb.isNegative() || currProb.gt(one)) {\n                throw new Error('Probability must be between 0 and 1, inclusive');\n              }\n            } else {\n              throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function\n            }\n\n            probArr[_i2] = _quantileSeq(dataArr, currProb, sorted);\n          }\n\n          return probArr;\n        }\n\n        throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function\n      }\n\n      throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function\n    }\n\n    throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function\n  }\n  /**\n   * Calculate the prob order quantile of an n-dimensional array.\n   *\n   * @param {Array} array\n   * @param {Number, BigNumber} prob\n   * @param {Boolean} sorted\n   * @return {Number, BigNumber, Unit} prob order quantile\n   * @private\n   */\n\n\n  function _quantileSeq(array, prob, sorted) {\n    var flat = flatten(array);\n    var len = flat.length;\n\n    if (len === 0) {\n      throw new Error('Cannot calculate quantile of an empty sequence');\n    }\n\n    if (isNumber(prob)) {\n      var _index = prob * (len - 1);\n\n      var _fracPart = _index % 1;\n\n      if (_fracPart === 0) {\n        var value = sorted ? flat[_index] : partitionSelect(flat, _index);\n        validate(value);\n        return value;\n      }\n\n      var _integerPart = Math.floor(_index);\n\n      var _left;\n\n      var _right;\n\n      if (sorted) {\n        _left = flat[_integerPart];\n        _right = flat[_integerPart + 1];\n      } else {\n        _right = partitionSelect(flat, _integerPart + 1); // max of partition is kth largest\n\n        _left = flat[_integerPart];\n\n        for (var i = 0; i < _integerPart; ++i) {\n          if (compare(flat[i], _left) > 0) {\n            _left = flat[i];\n          }\n        }\n      }\n\n      validate(_left);\n      validate(_right); // Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]\n\n      return add(multiply(_left, 1 - _fracPart), multiply(_right, _fracPart));\n    } // If prob is a BigNumber\n\n\n    var index = prob.times(len - 1);\n\n    if (index.isInteger()) {\n      index = index.toNumber();\n\n      var _value = sorted ? flat[index] : partitionSelect(flat, index);\n\n      validate(_value);\n      return _value;\n    }\n\n    var integerPart = index.floor();\n    var fracPart = index.minus(integerPart);\n    var integerPartNumber = integerPart.toNumber();\n    var left;\n    var right;\n\n    if (sorted) {\n      left = flat[integerPartNumber];\n      right = flat[integerPartNumber + 1];\n    } else {\n      right = partitionSelect(flat, integerPartNumber + 1); // max of partition is kth largest\n\n      left = flat[integerPartNumber];\n\n      for (var _i3 = 0; _i3 < integerPartNumber; ++_i3) {\n        if (compare(flat[_i3], left) > 0) {\n          left = flat[_i3];\n        }\n      }\n    }\n\n    validate(left);\n    validate(right); // Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]\n\n    var one = new fracPart.constructor(1);\n    return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));\n  }\n  /**\n   * Check if array value types are valid, throw error otherwise.\n   * @param {number | BigNumber | Unit} x\n   * @param {number | BigNumber | Unit} x\n   * @private\n   */\n\n\n  var validate = typed({\n    'number | BigNumber | Unit': function numberBigNumberUnit(x) {\n      return x;\n    }\n  });\n  return quantileSeq;\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'std';\nvar dependencies = ['typed', 'sqrt', 'variance'];\nexport var createStd = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    sqrt,\n    variance\n  } = _ref;\n\n  /**\n   * Compute the standard deviation of a matrix or a  list with values.\n   * The standard deviations is defined as the square root of the variance:\n   * `std(A) = sqrt(variance(A))`.\n   * In case of a (multi dimensional) array or matrix, the standard deviation\n   * over all elements will be calculated by default, unless an axis is specified\n   * in which case the standard deviation will be computed along that axis.\n   *\n   * Additionally, it is possible to compute the standard deviation along the rows\n   * or columns of a matrix by specifying the dimension as the second argument.\n   *\n   * Optionally, the type of normalization can be specified as the final\n   * parameter. The parameter `normalization` can be one of the following values:\n   *\n   * - 'unbiased' (default) The sum of squared errors is divided by (n - 1)\n   * - 'uncorrected'        The sum of squared errors is divided by n\n   * - 'biased'             The sum of squared errors is divided by (n + 1)\n   *\n   *\n   * Syntax:\n   *\n   *     math.std(a, b, c, ...)\n   *     math.std(A)\n   *     math.std(A, normalization)\n   *     math.std(A, dimension)\n   *     math.std(A, dimension, normalization)\n   *\n   * Examples:\n   *\n   *     math.std(2, 4, 6)                     // returns 2\n   *     math.std([2, 4, 6, 8])                // returns 2.581988897471611\n   *     math.std([2, 4, 6, 8], 'uncorrected') // returns 2.23606797749979\n   *     math.std([2, 4, 6, 8], 'biased')      // returns 2\n   *\n   *     math.std([[1, 2, 3], [4, 5, 6]])      // returns 1.8708286933869707\n   *     math.std([[1, 2, 3], [4, 6, 8]], 0)    // returns [2.1213203435596424, 2.8284271247461903, 3.5355339059327378]\n   *     math.std([[1, 2, 3], [4, 6, 8]], 1)    // returns [1, 2]\n   *     math.std([[1, 2, 3], [4, 6, 8]], 1, 'biased') // returns [0.7071067811865476, 1.4142135623730951]\n   *\n   * See also:\n   *\n   *    mean, median, max, min, prod, sum, variance\n   *\n   * @param {Array | Matrix} array\n   *                        A single matrix or or multiple scalar values\n   * @param {string} [normalization='unbiased']\n   *                        Determines how to normalize the variance.\n   *                        Choose 'unbiased' (default), 'uncorrected', or 'biased'.\n   * @param dimension {number | BigNumber}\n   *                        Determines the axis to compute the standard deviation for a matrix\n   * @return {*} The standard deviation\n   */\n  return typed(name, {\n    // std([a, b, c, d, ...])\n    'Array | Matrix': _std,\n    // std([a, b, c, d, ...], normalization)\n    'Array | Matrix, string': _std,\n    // std([a, b, c, c, ...], dim)\n    'Array | Matrix, number | BigNumber': _std,\n    // std([a, b, c, c, ...], dim, normalization)\n    'Array | Matrix, number | BigNumber, string': _std,\n    // std(a, b, c, d, ...)\n    '...': function _(args) {\n      return _std(args);\n    }\n  });\n\n  function _std(array, normalization) {\n    if (array.length === 0) {\n      throw new SyntaxError('Function std requires one or more parameters (0 provided)');\n    }\n\n    try {\n      return sqrt(variance.apply(null, arguments));\n    } catch (err) {\n      if (err instanceof TypeError && err.message.indexOf(' variance') !== -1) {\n        throw new TypeError(err.message.replace(' variance', ' std'));\n      } else {\n        throw err;\n      }\n    }\n  }\n});", "import { format as formatString } from '../../utils/string.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'format';\nvar dependencies = ['typed'];\nexport var createFormat = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Format a value of any type into a string.\n   *\n   * Syntax:\n   *\n   *    math.format(value)\n   *    math.format(value, options)\n   *    math.format(value, precision)\n   *    math.format(value, callback)\n   *\n   * Where:\n   *\n   *  - `value: *`\n   *    The value to be formatted\n   *  - `options: Object`\n   *    An object with formatting options. Available options:\n   *    - `notation: string`\n   *      Number notation. Choose from:\n   *      - 'fixed'\n   *        Always use regular number notation.\n   *        For example '123.40' and '14000000'\n   *      - 'exponential'\n   *        Always use exponential notation.\n   *        For example '1.234e+2' and '1.4e+7'\n   *      - 'engineering'\n   *        Always use engineering notation: always have exponential notation,\n   *        and select the exponent to be a multiple of 3.\n   *        For example '123.4e+0' and '14.0e+6'\n   *      - 'auto' (default)\n   *        Regular number notation for numbers having an absolute value between\n   *        `lower` and `upper` bounds, and uses exponential notation elsewhere.\n   *        Lower bound is included, upper bound is excluded.\n   *        For example '123.4' and '1.4e7'.\n   *      - 'bin', 'oct, or 'hex'\n   *        Format the number using binary, octal, or hexadecimal notation.\n   *        For example '0b1101' and '0x10fe'.\n   *    - `wordSize: number`\n   *      The word size in bits to use for formatting in binary, octal, or\n   *      hexadecimal notation. To be used only with 'bin', 'oct', or 'hex'\n   *      values for 'notation' option. When this option is defined the value\n   *      is formatted as a signed twos complement integer of the given word\n   *      size and the size suffix is appended to the output.\n   *      For example format(-1, {notation: 'hex', wordSize: 8}) === '0xffi8'.\n   *      Default value is undefined.\n   *    - `precision: number`\n   *      Limit the number of digits of the formatted value.\n   *      For regular numbers, must be a number between 0 and 16.\n   *      For bignumbers, the maximum depends on the configured precision,\n   *      see function `config()`.\n   *      In case of notations 'exponential', 'engineering', and 'auto', `precision`\n   *      defines the total number of significant digits returned.\n   *      In case of notation 'fixed', `precision` defines the number of\n   *      significant digits after the decimal point.\n   *      `precision` is undefined by default.\n   *    - `lowerExp: number`\n   *      Exponent determining the lower boundary for formatting a value with\n   *      an exponent when `notation='auto`. Default value is `-3`.\n   *    - `upperExp: number`\n   *      Exponent determining the upper boundary for formatting a value with\n   *      an exponent when `notation='auto`. Default value is `5`.\n   *    - `fraction: string`. Available values: 'ratio' (default) or 'decimal'.\n   *      For example `format(fraction(1, 3))` will output '1/3' when 'ratio' is\n   *      configured, and will output `0.(3)` when 'decimal' is configured.\n   *    - `truncate: number`. Specifies the maximum allowed length of the\n   *      returned string. If it would have been longer, the excess characters\n   *      are deleted and replaced with `'...'`.\n   * - `callback: function`\n   *   A custom formatting function, invoked for all numeric elements in `value`,\n   *   for example all elements of a matrix, or the real and imaginary\n   *   parts of a complex number. This callback can be used to override the\n   *   built-in numeric notation with any type of formatting. Function `callback`\n   *   is called with `value` as parameter and must return a string.\n   *\n   * When `value` is an Object:\n   *\n   * - When the object contains a property `format` being a function, this function\n   *   is invoked as `value.format(options)` and the result is returned.\n   * - When the object has its own `toString` method, this method is invoked\n   *   and the result is returned.\n   * - In other cases the function will loop over all object properties and\n   *   return JSON object notation like '{\"a\": 2, \"b\": 3}'.\n   *\n   * When value is a function:\n   *\n   * - When the function has a property `syntax`, it returns this\n   *   syntax description.\n   * - In other cases, a string `'function'` is returned.\n   *\n   * Examples:\n   *\n   *    math.format(6.4)                                        // returns '6.4'\n   *    math.format(1240000)                                    // returns '1.24e6'\n   *    math.format(1/3)                                        // returns '0.3333333333333333'\n   *    math.format(1/3, 3)                                     // returns '0.333'\n   *    math.format(21385, 2)                                   // returns '21000'\n   *    math.format(12e8, {notation: 'fixed'})                  // returns '1200000000'\n   *    math.format(2.3,  {notation: 'fixed', precision: 4})    // returns '2.3000'\n   *    math.format(52.8, {notation: 'exponential'})            // returns '5.28e+1'\n   *    math.format(12400,{notation: 'engineering'})            // returns '12.400e+3'\n   *    math.format(2000, {lowerExp: -2, upperExp: 2})          // returns '2e+3'\n   *\n   *    function formatCurrency(value) {\n   *      // return currency notation with two digits:\n   *      return '$' + value.toFixed(2)\n   *\n   *      // you could also use math.format inside the callback:\n   *      // return '$' + math.format(value, {notation: 'fixed', precision: 2})\n   *    }\n   *    math.format([2.1, 3, 0.016], formatCurrency)            // returns '[$2.10, $3.00, $0.02]'\n   *\n   * See also:\n   *\n   *    print\n   *\n   * @param {*} value                               Value to be stringified\n   * @param {Object | Function | number} [options]  Formatting options\n   * @return {string} The formatted value\n   */\n  return typed(name, {\n    any: formatString,\n    'any, Object | function | number': formatString\n  });\n});", "import { format } from '../../utils/string.js';\nimport { isString } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'print';\nvar dependencies = ['typed'];\nexport var createPrint = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Interpolate values into a string template.\n   *\n   * Syntax:\n   *\n   *     math.print(template, values)\n   *     math.print(template, values, precision)\n   *     math.print(template, values, options)\n   *\n   * Example usage:\n   *\n   *     // the following outputs: 'Lucy is 5 years old'\n   *     math.print('Lucy is $age years old', {age: 5})\n   *\n   *     // the following outputs: 'The value of pi is 3.141592654'\n   *     math.print('The value of pi is $pi', {pi: math.pi}, 10)\n   *\n   *     // the following outputs: 'hello Mary! The date is 2013-03-23'\n   *     math.print('Hello $user.name! The date is $date', {\n   *       user: {\n   *         name: 'Mary',\n   *       },\n   *       date: new Date(2013, 2, 23).toISOString().substring(0, 10)\n   *     })\n   *\n   *     // the following outputs: 'My favorite fruits are apples and bananas !'\n   *     math.print('My favorite fruits are $0 and $1 !', [\n   *       'apples',\n   *       'bananas'\n   *     ])\n   *\n   * See also:\n   *\n   *     format\n   *\n   * @param {string} template           A string containing variable placeholders.\n   * @param {Object | Array | Matrix}   values An object or array containing variables\n   *                                    which will be filled in in the template.\n   * @param {number | Object} [options] Formatting options,\n   *                                    or the number of digits to format numbers.\n   *                                    See function math.format for a description\n   *                                    of all options.\n   * @return {string} Interpolated string\n   */\n  return typed(name, {\n    // note: Matrix will be converted automatically to an Array\n    'string, Object | Array': _print,\n    'string, Object | Array, number | Object': _print\n  });\n});\n/**\n * Interpolate values into a string template.\n * @param {string} template\n * @param {Object} values\n * @param {number | Object} [options]\n * @returns {string} Interpolated string\n * @private\n */\n\nfunction _print(template, values, options) {\n  return template.replace(/\\$([\\w.]+)/g, function (original, key) {\n    var keys = key.split('.');\n    var value = values[keys.shift()];\n\n    while (keys.length && value !== undefined) {\n      var k = keys.shift();\n      value = k ? value[k] : value + '.';\n    }\n\n    if (value !== undefined) {\n      if (!isString(value)) {\n        return format(value, options);\n      } else {\n        return value;\n      }\n    }\n\n    return original;\n  });\n}", "import { errorTransform } from './utils/errorTransform.js';\nimport { factory } from '../../utils/factory.js';\nimport { createApply } from '../../function/matrix/apply.js';\nimport { isBigNumber, isNumber } from '../../utils/is.js';\nvar name = 'apply';\nvar dependencies = ['typed', 'isInteger'];\n/**\n * Attach a transform function to math.apply\n * Adds a property transform containing the transform function.\n *\n * This transform changed the last `dim` parameter of function apply\n * from one-based to zero based\n */\n\nexport var createApplyTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    isInteger\n  } = _ref;\n  var apply = createApply({\n    typed,\n    isInteger\n  }); // @see: comment of concat itself\n\n  return typed('apply', {\n    '...any': function any(args) {\n      // change dim from one-based to zero-based\n      var dim = args[1];\n\n      if (isNumber(dim)) {\n        args[1] = dim - 1;\n      } else if (isBigNumber(dim)) {\n        args[1] = dim.minus(1);\n      }\n\n      try {\n        return apply.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { isSymbolNode } from '../../../utils/is.js';\nimport { createSubScope } from '../../../utils/scope.js';\n/**\n * Compile an inline expression like \"x > 0\"\n * @param {Node} expression\n * @param {Object} math\n * @param {Object} scope\n * @return {function} Returns a function with one argument which fills in the\n *                    undefined variable (like \"x\") and evaluates the expression\n */\n\nexport function compileInlineExpression(expression, math, scope) {\n  // find an undefined symbol\n  var symbol = expression.filter(function (node) {\n    return isSymbolNode(node) && !(node.name in math) && !scope.has(node.name);\n  })[0];\n\n  if (!symbol) {\n    throw new Error('No undefined variable found in inline expression \"' + expression + '\"');\n  } // create a test function for this equation\n\n\n  var name = symbol.name; // variable name\n\n  var subScope = createSubScope(scope);\n  var eq = expression.compile();\n  return function inlineExpression(x) {\n    subScope.set(name, x);\n    return eq.evaluate(subScope);\n  };\n}", "import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';\nimport { filter, filterRegExp } from '../../utils/array.js';\nimport { maxArgumentCount } from '../../utils/function.js';\nimport { compileInlineExpression } from './utils/compileInlineExpression.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'filter';\nvar dependencies = ['typed'];\nexport var createFilterTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Attach a transform function to math.filter\n   * Adds a property transform containing the transform function.\n   *\n   * This transform adds support for equations as test function for math.filter,\n   * so you can do something like 'filter([3, -2, 5], x > 0)'.\n   */\n  function filterTransform(args, math, scope) {\n    var x, callback;\n\n    if (args[0]) {\n      x = args[0].compile().evaluate(scope);\n    }\n\n    if (args[1]) {\n      if (isSymbolNode(args[1]) || isFunctionAssignmentNode(args[1])) {\n        // a function pointer, like filter([3, -2, 5], myTestFunction)\n        callback = args[1].compile().evaluate(scope);\n      } else {\n        // an expression like filter([3, -2, 5], x > 0)\n        callback = compileInlineExpression(args[1], math, scope);\n      }\n    }\n\n    return filter(x, callback);\n  }\n\n  filterTransform.rawArgs = true; // one based version of function filter\n\n  var filter = typed('filter', {\n    'Array, function': _filter,\n    'Matrix, function': function MatrixFunction(x, test) {\n      return x.create(_filter(x.toArray(), test));\n    },\n    'Array, RegExp': filterRegExp,\n    'Matrix, RegExp': function MatrixRegExp(x, test) {\n      return x.create(filterRegExp(x.toArray(), test));\n    }\n  });\n  return filterTransform;\n}, {\n  isTransformFunction: true\n});\n/**\n * Filter values in a callback given a callback function\n *\n * !!! Passes a one-based index !!!\n *\n * @param {Array} x\n * @param {Function} callback\n * @return {Array} Returns the filtered array\n * @private\n */\n\nfunction _filter(x, callback) {\n  // figure out what number of arguments the callback function expects\n  var args = maxArgumentCount(callback);\n  return filter(x, function (value, index, array) {\n    // invoke the callback function with the right number of arguments\n    if (args === 1) {\n      return callback(value);\n    } else if (args === 2) {\n      return callback(value, [index + 1]);\n    } else {\n      // 3 or -1\n      return callback(value, [index + 1], array);\n    }\n  });\n}", "import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';\nimport { maxArgumentCount } from '../../utils/function.js';\nimport { forEach } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { compileInlineExpression } from './utils/compileInlineExpression.js';\nvar name = 'forEach';\nvar dependencies = ['typed'];\nexport var createForEachTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Attach a transform function to math.forEach\n   * Adds a property transform containing the transform function.\n   *\n   * This transform creates a one-based index instead of a zero-based index\n   */\n  function forEachTransform(args, math, scope) {\n    var x, callback;\n\n    if (args[0]) {\n      x = args[0].compile().evaluate(scope);\n    }\n\n    if (args[1]) {\n      if (isSymbolNode(args[1]) || isFunctionAssignmentNode(args[1])) {\n        // a function pointer, like forEach([3, -2, 5], myTestFunction)\n        callback = args[1].compile().evaluate(scope);\n      } else {\n        // an expression like forEach([3, -2, 5], x > 0 ? callback1(x) : callback2(x) )\n        callback = compileInlineExpression(args[1], math, scope);\n      }\n    }\n\n    return _forEach(x, callback);\n  }\n\n  forEachTransform.rawArgs = true; // one-based version of forEach\n\n  var _forEach = typed('forEach', {\n    'Array | Matrix, function': function ArrayMatrixFunction(array, callback) {\n      // figure out what number of arguments the callback function expects\n      var args = maxArgumentCount(callback);\n\n      var recurse = function recurse(value, index) {\n        if (Array.isArray(value)) {\n          forEach(value, function (child, i) {\n            // we create a copy of the index array and append the new index value\n            recurse(child, index.concat(i + 1)); // one based index, hence i+1\n          });\n        } else {\n          // invoke the callback function with the right number of arguments\n          if (args === 1) {\n            callback(value);\n          } else if (args === 2) {\n            callback(value, index);\n          } else {\n            // 3 or -1\n            callback(value, index, array);\n          }\n        }\n      };\n\n      recurse(array.valueOf(), []); // pass Array\n    }\n  });\n\n  return forEachTransform;\n}, {\n  isTransformFunction: true\n});", "import { isFunctionAssignmentNode, isSymbolNode } from '../../utils/is.js';\nimport { maxArgumentCount } from '../../utils/function.js';\nimport { map } from '../../utils/array.js';\nimport { factory } from '../../utils/factory.js';\nimport { compileInlineExpression } from './utils/compileInlineExpression.js';\nvar name = 'map';\nvar dependencies = ['typed'];\nexport var createMapTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Attach a transform function to math.map\n   * Adds a property transform containing the transform function.\n   *\n   * This transform creates a one-based index instead of a zero-based index\n   */\n  function mapTransform(args, math, scope) {\n    var x, callback;\n\n    if (args[0]) {\n      x = args[0].compile().evaluate(scope);\n    }\n\n    if (args[1]) {\n      if (isSymbolNode(args[1]) || isFunctionAssignmentNode(args[1])) {\n        // a function pointer, like filter([3, -2, 5], myTestFunction)\n        callback = args[1].compile().evaluate(scope);\n      } else {\n        // an expression like filter([3, -2, 5], x > 0)\n        callback = compileInlineExpression(args[1], math, scope);\n      }\n    }\n\n    return map(x, callback);\n  }\n\n  mapTransform.rawArgs = true; // one-based version of map function\n\n  var map = typed('map', {\n    'Array, function': function ArrayFunction(x, callback) {\n      return _map(x, callback, x);\n    },\n    'Matrix, function': function MatrixFunction(x, callback) {\n      return x.create(_map(x.valueOf(), callback, x));\n    }\n  });\n  return mapTransform;\n}, {\n  isTransformFunction: true\n});\n/**\n * Map for a multi dimensional array. One-based indexes\n * @param {Array} array\n * @param {function} callback\n * @param {Array} orig\n * @return {Array}\n * @private\n */\n\nfunction _map(array, callback, orig) {\n  // figure out what number of arguments the callback function expects\n  var argsCount = maxArgumentCount(callback);\n\n  function recurse(value, index) {\n    if (Array.isArray(value)) {\n      return map(value, function (child, i) {\n        // we create a copy of the index array and append the new index value\n        return recurse(child, index.concat(i + 1)); // one based index, hence i + 1\n      });\n    } else {\n      // invoke the (typed) callback function with the right number of arguments\n      if (argsCount === 1) {\n        return callback(value);\n      } else if (argsCount === 2) {\n        return callback(value, index);\n      } else {\n        // 3 or -1\n        return callback(value, index, orig);\n      }\n    }\n  }\n\n  return recurse(array, []);\n}", "import { isBigNumber, isCollection, isNumber } from '../../../utils/is.js';\n/**\n * Change last argument dim from one-based to zero-based.\n */\n\nexport function lastDimToZeroBase(args) {\n  if (args.length === 2 && isCollection(args[0])) {\n    args = args.slice();\n    var dim = args[1];\n\n    if (isNumber(dim)) {\n      args[1] = dim - 1;\n    } else if (isBigNumber(dim)) {\n      args[1] = dim.minus(1);\n    }\n  }\n\n  return args;\n}", "import { factory } from '../../utils/factory.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { createMax } from '../../function/statistics/max.js';\nimport { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';\nvar name = 'max';\nvar dependencies = ['typed', 'config', 'numeric', 'larger'];\nexport var createMaxTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    numeric,\n    larger\n  } = _ref;\n  var max = createMax({\n    typed,\n    config,\n    numeric,\n    larger\n  });\n  /**\n   * Attach a transform function to math.max\n   * Adds a property transform containing the transform function.\n   *\n   * This transform changed the last `dim` parameter of function max\n   * from one-based to zero based\n   */\n\n  return typed('max', {\n    '...any': function any(args) {\n      args = lastDimToZeroBase(args);\n\n      try {\n        return max.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { factory } from '../../utils/factory.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { createMean } from '../../function/statistics/mean.js';\nimport { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';\nvar name = 'mean';\nvar dependencies = ['typed', 'add', 'divide'];\nexport var createMeanTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    divide\n  } = _ref;\n  var mean = createMean({\n    typed,\n    add,\n    divide\n  });\n  /**\n   * Attach a transform function to math.mean\n   * Adds a property transform containing the transform function.\n   *\n   * This transform changed the last `dim` parameter of function mean\n   * from one-based to zero based\n   */\n\n  return typed('mean', {\n    '...any': function any(args) {\n      args = lastDimToZeroBase(args);\n\n      try {\n        return mean.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { factory } from '../../utils/factory.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { createMin } from '../../function/statistics/min.js';\nimport { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';\nvar name = 'min';\nvar dependencies = ['typed', 'config', 'numeric', 'smaller'];\nexport var createMinTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    numeric,\n    smaller\n  } = _ref;\n  var min = createMin({\n    typed,\n    config,\n    numeric,\n    smaller\n  });\n  /**\n   * Attach a transform function to math.min\n   * Adds a property transform containing the transform function.\n   *\n   * This transform changed the last `dim` parameter of function min\n   * from one-based to zero based\n   */\n\n  return typed('min', {\n    '...any': function any(args) {\n      args = lastDimToZeroBase(args);\n\n      try {\n        return min.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { factory } from '../../utils/factory.js';\nimport { createRange } from '../../function/matrix/range.js';\nvar name = 'range';\nvar dependencies = ['typed', 'config', '?matrix', '?bignumber', 'smaller', 'smallerEq', 'larger', 'largerEq'];\nexport var createRangeTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    matrix,\n    bignumber,\n    smaller,\n    smallerEq,\n    larger,\n    largerEq\n  } = _ref;\n  var range = createRange({\n    typed,\n    config,\n    matrix,\n    bignumber,\n    smaller,\n    smallerEq,\n    larger,\n    largerEq\n  });\n  /**\n   * Attach a transform function to math.range\n   * Adds a property transform containing the transform function.\n   *\n   * This transform creates a range which includes the end value\n   */\n\n  return typed('range', {\n    '...any': function any(args) {\n      var lastIndex = args.length - 1;\n      var last = args[lastIndex];\n\n      if (typeof last !== 'boolean') {\n        // append a parameter includeEnd=true\n        args.push(true);\n      }\n\n      return range.apply(null, args);\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { factory } from '../../utils/factory.js';\nimport { createStd } from '../../function/statistics/std.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';\nvar name = 'std';\nvar dependencies = ['typed', 'sqrt', 'variance'];\n/**\n * Attach a transform function to math.std\n * Adds a property transform containing the transform function.\n *\n * This transform changed the `dim` parameter of function std\n * from one-based to zero based\n */\n\nexport var createStdTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    sqrt,\n    variance\n  } = _ref;\n  var std = createStd({\n    typed,\n    sqrt,\n    variance\n  });\n  return typed('std', {\n    '...any': function any(args) {\n      args = lastDimToZeroBase(args);\n\n      try {\n        return std.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { factory } from '../../utils/factory.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { createSum } from '../../function/statistics/sum.js';\nimport { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';\n/**\n * Attach a transform function to math.sum\n * Adds a property transform containing the transform function.\n *\n * This transform changed the last `dim` parameter of function sum\n * from one-based to zero based\n */\n\nvar name = 'sum';\nvar dependencies = ['typed', 'config', 'add', 'numeric'];\nexport var createSumTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    config,\n    add,\n    numeric\n  } = _ref;\n  var sum = createSum({\n    typed,\n    config,\n    add,\n    numeric\n  });\n  return typed(name, {\n    '...any': function any(args) {\n      args = lastDimToZeroBase(args);\n\n      try {\n        return sum.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { isBigNumber, isCollection, isNumber } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { createCumSum } from '../../function/statistics/cumsum.js';\n/**\n * Attach a transform function to math.sum\n * Adds a property transform containing the transform function.\n *\n * This transform changed the last `dim` parameter of function sum\n * from one-based to zero based\n */\n\nvar name = 'cumsum';\nvar dependencies = ['typed', 'add', 'unaryPlus'];\nexport var createCumSumTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    unaryPlus\n  } = _ref;\n  var cumsum = createCumSum({\n    typed,\n    add,\n    unaryPlus\n  });\n  return typed(name, {\n    '...any': function any(args) {\n      // change last argument dim from one-based to zero-based\n      if (args.length === 2 && isCollection(args[0])) {\n        var dim = args[1];\n\n        if (isNumber(dim)) {\n          args[1] = dim - 1;\n        } else if (isBigNumber(dim)) {\n          args[1] = dim.minus(1);\n        }\n      }\n\n      try {\n        return cumsum.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { factory } from '../../utils/factory.js';\nimport { errorTransform } from './utils/errorTransform.js';\nimport { createVariance } from '../../function/statistics/variance.js';\nimport { lastDimToZeroBase } from './utils/lastDimToZeroBase.js';\nvar name = 'variance';\nvar dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'apply', 'isNaN'];\n/**\n * Attach a transform function to math.var\n * Adds a property transform containing the transform function.\n *\n * This transform changed the `dim` parameter of function var\n * from one-based to zero based\n */\n\nexport var createVarianceTransform = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    add,\n    subtract,\n    multiply,\n    divide,\n    apply,\n    isNaN\n  } = _ref;\n  var variance = createVariance({\n    typed,\n    add,\n    subtract,\n    multiply,\n    divide,\n    apply,\n    isNaN\n  });\n  return typed(name, {\n    '...any': function any(args) {\n      args = lastDimToZeroBase(args);\n\n      try {\n        return variance.apply(null, args);\n      } catch (err) {\n        throw errorTransform(err);\n      }\n    }\n  });\n}, {\n  isTransformFunction: true\n});", "import { clone as objectClone } from '../../utils/object.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'clone';\nvar dependencies = ['typed'];\nexport var createClone = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Clone an object. Will make a deep copy of the data.\n   *\n   * Syntax:\n   *\n   *     math.clone(x)\n   *\n   * Examples:\n   *\n   *    math.clone(3.5)                   // returns number 3.5\n   *    math.clone(math.complex('2-4i') // returns Complex 2 - 4i\n   *    math.clone(math.unit(45, 'deg'))  // returns Unit 45 deg\n   *    math.clone([[1, 2], [3, 4]])      // returns Array [[1, 2], [3, 4]]\n   *    math.clone(\"hello world\")         // returns string \"hello world\"\n   *\n   * @param {*} x   Object to be cloned\n   * @return {*} A clone of object x\n   */\n  return typed(name, {\n    any: objectClone\n  });\n});", "import { deepMap } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'isNumeric';\nvar dependencies = ['typed'];\nexport var createIsNumeric = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Test whether a value is an numeric value.\n   *\n   * The function is evaluated element-wise in case of Array or Matrix input.\n   *\n   * Syntax:\n   *\n   *     math.isNumeric(x)\n   *\n   * Examples:\n   *\n   *    math.isNumeric(2)                     // returns true\n   *    math.isNumeric('2')                   // returns false\n   *    math.hasNumericValue('2')             // returns true\n   *    math.isNumeric(0)                     // returns true\n   *    math.isNumeric(math.bignumber(500))   // returns true\n   *    math.isNumeric(math.fraction(4))      // returns true\n   *    math.isNumeric(math.complex('2-4i')   // returns false\n   *    math.isNumeric([2.3, 'foo', false])   // returns [true, false, true]\n   *\n   * See also:\n   *\n   *    isZero, isPositive, isNegative, isInteger, hasNumericValue\n   *\n   * @param {*} x       Value to be tested\n   * @return {boolean}  Returns true when `x` is a `number`, `BigNumber`,\n   *                    `Fraction`, or `boolean`. Returns false for other types.\n   *                    Throws an error in case of unknown types.\n   */\n  return typed(name, {\n    'number | BigNumber | Fraction | boolean': function numberBigNumberFractionBoolean() {\n      return true;\n    },\n    'Complex | Unit | string | null | undefined | Node': function ComplexUnitStringNullUndefinedNode() {\n      return false;\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      return deepMap(x, this);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nvar name = 'hasNumericValue';\nvar dependencies = ['typed', 'isNumeric'];\nexport var createHasNumericValue = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed,\n    isNumeric\n  } = _ref;\n\n  /**\n   * Test whether a value is an numeric value.\n   *\n   * In case of a string, true is returned if the string contains a numeric value.\n   *\n   * Syntax:\n   *\n   *     math.hasNumericValue(x)\n   *\n   * Examples:\n   *\n   *    math.hasNumericValue(2)                     // returns true\n   *    math.hasNumericValue('2')                   // returns true\n   *    math.isNumeric('2')                         // returns false\n   *    math.hasNumericValue(0)                     // returns true\n   *    math.hasNumericValue(math.bignumber(500))   // returns true\n   *    math.hasNumericValue(math.fraction(4))      // returns true\n   *    math.hasNumericValue(math.complex('2-4i')   // returns false\n   *    math.hasNumericValue([2.3, 'foo', false])   // returns [true, false, true]\n   *\n   * See also:\n   *\n   *    isZero, isPositive, isNegative, isInteger, isNumeric\n   *\n   * @param {*} x       Value to be tested\n   * @return {boolean}  Returns true when `x` is a `number`, `BigNumber`,\n   *                    `Fraction`, `Boolean`, or a `String` containing number. Returns false for other types.\n   *                    Throws an error in case of unknown types.\n   */\n  return typed(name, {\n    string: function string(x) {\n      return x.trim().length > 0 && !isNaN(Number(x));\n    },\n    any: function any(x) {\n      return isNumeric(x);\n    }\n  });\n});", "import { factory } from '../../utils/factory.js';\nimport { typeOf as _typeOf } from '../../utils/is.js';\nvar name = 'typeOf';\nvar dependencies = ['typed'];\nexport var createTypeOf = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Determine the type of a variable.\n   *\n   * Function `typeOf` recognizes the following types of objects:\n   *\n   * Object                 | Returns       | Example\n   * ---------------------- | ------------- | ------------------------------------------\n   * null                   | `'null'`      | `math.typeOf(null)`\n   * number                 | `'number'`    | `math.typeOf(3.5)`\n   * boolean                | `'boolean'`   | `math.typeOf(true)`\n   * string                 | `'string'`    | `math.typeOf('hello world')`\n   * Array                  | `'Array'`     | `math.typeOf([1, 2, 3])`\n   * Date                   | `'Date'`      | `math.typeOf(new Date())`\n   * Function               | `'Function'`  | `math.typeOf(function () {})`\n   * Object                 | `'Object'`    | `math.typeOf({a: 2, b: 3})`\n   * RegExp                 | `'RegExp'`    | `math.typeOf(/a regexp/)`\n   * undefined              | `'undefined'` | `math.typeOf(undefined)`\n   * math.BigNumber         | `'BigNumber'` | `math.typeOf(math.bignumber('2.3e500'))`\n   * math.Chain             | `'Chain'`     | `math.typeOf(math.chain(2))`\n   * math.Complex           | `'Complex'`   | `math.typeOf(math.complex(2, 3))`\n   * math.Fraction          | `'Fraction'`  | `math.typeOf(math.fraction(1, 3))`\n   * math.Help              | `'Help'`      | `math.typeOf(math.help('sqrt'))`\n   * math.Help              | `'Help'`      | `math.typeOf(math.help('sqrt'))`\n   * math.Index             | `'Index'`     | `math.typeOf(math.index(1, 3))`\n   * math.Matrix            | `'Matrix'`    | `math.typeOf(math.matrix([[1,2], [3, 4]]))`\n   * math.Range             | `'Range'`     | `math.typeOf(math.range(0, 10))`\n   * math.ResultSet         | `'ResultSet'` | `math.typeOf(math.evaluate('a=2\\nb=3'))`\n   * math.Unit              | `'Unit'`      | `math.typeOf(math.unit('45 deg'))`\n   * math.AccessorNode            | `'AccessorNode'`            | `math.typeOf(math.parse('A[2]'))`\n   * math.ArrayNode               | `'ArrayNode'`               | `math.typeOf(math.parse('[1,2,3]'))`\n   * math.AssignmentNode          | `'AssignmentNode'`          | `math.typeOf(math.parse('x=2'))`\n   * math.BlockNode               | `'BlockNode'`               | `math.typeOf(math.parse('a=2; b=3'))`\n   * math.ConditionalNode         | `'ConditionalNode'`         | `math.typeOf(math.parse('x<0 ? -x : x'))`\n   * math.ConstantNode            | `'ConstantNode'`            | `math.typeOf(math.parse('2.3'))`\n   * math.FunctionAssignmentNode  | `'FunctionAssignmentNode'`  | `math.typeOf(math.parse('f(x)=x^2'))`\n   * math.FunctionNode            | `'FunctionNode'`            | `math.typeOf(math.parse('sqrt(4)'))`\n   * math.IndexNode               | `'IndexNode'`               | `math.typeOf(math.parse('A[2]').index)`\n   * math.ObjectNode              | `'ObjectNode'`              | `math.typeOf(math.parse('{a:2}'))`\n   * math.ParenthesisNode         | `'ParenthesisNode'`         | `math.typeOf(math.parse('(2+3)'))`\n   * math.RangeNode               | `'RangeNode'`               | `math.typeOf(math.parse('1:10'))`\n   * math.SymbolNode              | `'SymbolNode'`              | `math.typeOf(math.parse('x'))`\n   *\n   * Syntax:\n   *\n   *    math.typeOf(x)\n   *\n   * Examples:\n   *\n   *    math.typeOf(3.5)                     // returns 'number'\n   *    math.typeOf(math.complex('2-4i'))    // returns 'Complex'\n   *    math.typeOf(math.unit('45 deg'))     // returns 'Unit'\n   *    math.typeOf('hello world')           // returns 'string'\n   *\n   * @param {*} x     The variable for which to test the type.\n   * @return {string} Returns the name of the type. Primitive types are lower case,\n   *                  non-primitive types are upper-camel-case.\n   *                  For example 'number', 'string', 'Array', 'Date'.\n   */\n  return typed(name, {\n    any: _typeOf\n  });\n});", "import { deepMap } from '../../utils/collection.js';\nimport { factory } from '../../utils/factory.js';\nvar name = 'isPrime';\nvar dependencies = ['typed'];\nexport var createIsPrime = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    typed\n  } = _ref;\n\n  /**\n   * Test whether a value is prime: has no divisors other than itself and one.\n   * The function supports type `number`, `bignumber`.\n   *\n   * The function is evaluated element-wise in case of Array or Matrix input.\n   *\n   * Syntax:\n   *\n   *     math.isPrime(x)\n   *\n   * Examples:\n   *\n   *    math.isPrime(3)                     // returns true\n   *    math.isPrime(-2)                    // returns false\n   *    math.isPrime(0)                     // returns false\n   *    math.isPrime(-0)                    // returns false\n   *    math.isPrime(0.5)                   // returns false\n   *    math.isPrime('2')                   // returns true\n   *    math.isPrime([2, 17, 100])           // returns [true, true, false]\n   *\n   * See also:\n   *\n   *    isNumeric, isZero, isNegative, isInteger\n   *\n   * @param {number | BigNumber | Array | Matrix} x  Value to be tested\n   * @return {boolean}  Returns true when `x` is larger than zero.\n   *                    Throws an error in case of an unknown data type.\n   */\n  return typed(name, {\n    number: function number(x) {\n      if (x * 0 !== 0) {\n        return false;\n      }\n\n      if (x <= 3) {\n        return x > 1;\n      }\n\n      if (x % 2 === 0 || x % 3 === 0) {\n        return false;\n      }\n\n      for (var i = 5; i * i <= x; i += 6) {\n        if (x % i === 0 || x % (i + 2) === 0) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n    BigNumber: function BigNumber(n) {\n      if (n.toNumber() * 0 !== 0) {\n        return false;\n      }\n\n      if (n.lte(3)) return n.gt(1);\n      if (n.mod(2).eq(0) || n.mod(3).eq(0)) return false;\n\n      if (n.lt(Math.pow(2, 32))) {\n        var x = n.toNumber();\n\n        for (var i = 5; i * i <= x; i += 6) {\n          if (x % i === 0 || x % (i + 2) === 0) {\n            return false;\n          }\n        }\n\n        return true;\n      }\n\n      function modPow(base, exponent, modulus) {\n        // exponent can be huge, use non-recursive variant\n        var accumulator = 1;\n\n        while (!exponent.eq(0)) {\n          if (exponent.mod(2).eq(0)) {\n            exponent = exponent.div(2);\n            base = base.mul(base).mod(modulus);\n          } else {\n            exponent = exponent.sub(1);\n            accumulator = base.mul(accumulator).mod(modulus);\n          }\n        }\n\n        return accumulator;\n      } // https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test#Deterministic_variants\n\n\n      var Decimal = n.constructor.clone({\n        precision: n.toFixed(0).length * 2\n      });\n      n = new Decimal(n);\n      var r = 0;\n      var d = n.sub(1);\n\n      while (d.mod(2).eq(0)) {\n        d = d.div(2);\n        r += 1;\n      }\n\n      var bases = null; // https://en.wikipedia.org/wiki/Miller\u2013Rabin_primality_test#Testing_against_small_sets_of_bases\n\n      if (n.lt('3317044064679887385961981')) {\n        bases = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41].filter(x => x < n);\n      } else {\n        var max = Math.min(n.toNumber() - 2, Math.floor(2 * Math.pow(n.toFixed(0).length * Math.log(10), 2)));\n        bases = [];\n\n        for (var _i = 2; _i <= max; _i += 1) {\n          bases.push(max);\n        }\n      }\n\n      for (var _i2 = 0; _i2 < bases.length; _i2 += 1) {\n        var a = bases[_i2];\n        var adn = modPow(n.sub(n).add(a), d, n);\n\n        if (!adn.eq(1)) {\n          for (var _i3 = 0, _x = adn; !_x.eq(n.sub(1)); _i3 += 1, _x = _x.mul(_x).mod(n)) {\n            if (_i3 === r - 1) {\n              return false;\n            }\n          }\n        }\n      }\n\n      return true;\n    },\n    'Array | Matrix': function ArrayMatrix(x) {\n      return deepMap(x, this);\n    }\n  });\n});", "import { typeOf } from '../../utils/is.js';\nimport { factory } from '../../utils/factory.js';\nimport { noBignumber, noFraction } from '../../utils/noop.js';\nvar name = 'numeric';\nvar dependencies = ['number', '?bignumber', '?fraction'];\nexport var createNumeric = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    number: _number,\n    bignumber,\n    fraction\n  } = _ref;\n  var validInputTypes = {\n    string: true,\n    number: true,\n    BigNumber: true,\n    Fraction: true\n  }; // Load the conversion functions for each output type\n\n  var validOutputTypes = {\n    number: x => _number(x),\n    BigNumber: bignumber ? x => bignumber(x) : noBignumber,\n    Fraction: fraction ? x => fraction(x) : noFraction\n  };\n  /**\n   * Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.\n   *\n   * Syntax:\n   *\n   *    math.numeric(x)\n   *\n   * Examples:\n   *\n   *    math.numeric('4')                           // returns number 4\n   *    math.numeric('4', 'number')                 // returns number 4\n   *    math.numeric('4', 'BigNumber')              // returns BigNumber 4\n   *    math.numeric('4', 'Fraction')               // returns Fraction 4\n   *    math.numeric(4, 'Fraction')                 // returns Fraction 4\n   *    math.numeric(math.fraction(2, 5), 'number') // returns number 0.4\n   *\n   * See also:\n   *\n   *    number, fraction, bignumber, string, format\n   *\n   * @param {string | number | BigNumber | Fraction } value\n   *              A numeric value or a string containing a numeric value\n   * @param {string} outputType\n   *              Desired numeric output type.\n   *              Available values: 'number', 'BigNumber', or 'Fraction'\n   * @return {number | BigNumber | Fraction}\n   *              Returns an instance of the numeric in the requested type\n   */\n\n  return function numeric(value, outputType) {\n    var inputType = typeOf(value);\n\n    if (!(inputType in validInputTypes)) {\n      throw new TypeError('Cannot convert ' + value + ' of type \"' + inputType + '\"; valid input types are ' + Object.keys(validInputTypes).join(', '));\n    }\n\n    if (!(outputType in validOutputTypes)) {\n      throw new TypeError('Cannot convert ' + value + ' to type \"' + outputType + '\"; valid output types are ' + Object.keys(validOutputTypes).join(', '));\n    }\n\n    if (outputType === inputType) {\n      return value;\n    } else {\n      return validOutputTypes[outputType](value);\n    }\n  };\n});", "import { factory } from '../utils/factory.js';\nvar name = 'reviver';\nvar dependencies = ['classes'];\nexport var createReviver = /* #__PURE__ */factory(name, dependencies, _ref => {\n  var {\n    classes\n  } = _ref;\n\n  /**\n   * Instantiate mathjs data types from their JSON representation\n   * @param {string} key\n   * @param {*} value\n   * @returns {*} Returns the revived object\n   */\n  return function reviver(key, value) {\n    var constructor = classes[value && value.mathjs];\n\n    if (constructor && typeof constructor.fromJSON === 'function') {\n      return constructor.fromJSON(value);\n    }\n\n    return value;\n  };\n});", "import { factory } from '../utils/factory.js';\nvar name = 'replacer';\nvar dependencies = [];\nexport var createReplacer = /* #__PURE__ */factory(name, dependencies, () => {\n  /**\n   * Stringify data types into their JSON representation.\n   * Most data types can be serialized using their `.toJSON` method,\n   * but not all, for example the number `Infinity`. For these cases you have\n   * to use the replacer. Example usage:\n   *\n   *     JSON.stringify([2, Infinity], math.replacer)\n   *\n   * @param {string} key\n   * @param {*} value\n   * @returns {*} Returns the replaced object\n   */\n  return function replacer(key, value) {\n    // the numeric values Infinitiy, -Infinity, and NaN cannot be serialized to JSON\n    if (typeof value === 'number' && (!isFinite(value) || isNaN(value))) {\n      return {\n        mathjs: 'number',\n        value: String(value)\n      };\n    }\n\n    return value;\n  };\n});", "import { absNumber, acoshNumber, acosNumber, acothNumber, acotNumber, acschNumber, acscNumber, addNumber, andNumber, asechNumber, asecNumber, asinhNumber, asinNumber, atan2Number, atanhNumber, atanNumber, bitAndNumber, bitNotNumber, bitOrNumber, bitXorNumber, cbrtNumber, combinationsNumber, coshNumber, cosNumber, cothNumber, cotNumber, cschNumber, cscNumber, cubeNumber, divideNumber, expm1Number, expNumber, gammaNumber, gcdNumber, isIntegerNumber, isNaNNumber, isNegativeNumber, isPositiveNumber, isZeroNumber, lcmNumber, leftShiftNumber, lgammaNumber, log10Number, log1pNumber, log2Number, logNumber, modNumber, multiplyNumber, normNumber, notNumber, nthRootNumber, orNumber, powNumber, rightArithShiftNumber, rightLogShiftNumber, roundNumber, sechNumber, secNumber, signNumber, sinhNumber, sinNumber, sqrtNumber, squareNumber, subtractNumber, tanhNumber, tanNumber, unaryMinusNumber, unaryPlusNumber, xgcdNumber, xorNumber } from './plain/number/index.js';\nimport { factory } from './utils/factory.js';\nimport { noIndex, noMatrix, noSubset } from './utils/noop.js'; // ----------------------------------------------------------------------------\n// classes and functions\n// core\n\nexport { createTyped } from './core/function/typed.js'; // classes\n\nexport { createResultSet } from './type/resultset/ResultSet.js';\nexport { createRangeClass } from './type/matrix/Range.js';\nexport { createHelpClass } from './expression/Help.js';\nexport { createChainClass } from './type/chain/Chain.js';\nexport { createHelp } from './expression/function/help.js';\nexport { createChain } from './type/chain/function/chain.js'; // algebra\n\nexport { createResolve } from './function/algebra/resolve.js';\nexport { createSimplify } from './function/algebra/simplify.js';\nexport { createSimplifyCore } from './function/algebra/simplifyCore.js';\nexport { createDerivative } from './function/algebra/derivative.js';\nexport { createRationalize } from './function/algebra/rationalize.js'; // arithmetic\n\nexport var createUnaryMinus = /* #__PURE__ */createNumberFactory('unaryMinus', unaryMinusNumber);\nexport var createUnaryPlus = /* #__PURE__ */createNumberFactory('unaryPlus', unaryPlusNumber);\nexport var createAbs = /* #__PURE__ */createNumberFactory('abs', absNumber);\nexport var createAddScalar = /* #__PURE__ */createNumberFactory('addScalar', addNumber);\nexport var createCbrt = /* #__PURE__ */createNumberFactory('cbrt', cbrtNumber);\nexport { createCeilNumber as createCeil } from './function/arithmetic/ceil.js';\nexport var createCube = /* #__PURE__ */createNumberFactory('cube', cubeNumber);\nexport var createExp = /* #__PURE__ */createNumberFactory('exp', expNumber);\nexport var createExpm1 = /* #__PURE__ */createNumberFactory('expm1', expm1Number);\nexport { createFixNumber as createFix } from './function/arithmetic/fix.js';\nexport { createFloorNumber as createFloor } from './function/arithmetic/floor.js';\nexport var createGcd = /* #__PURE__ */createNumberFactory('gcd', gcdNumber);\nexport var createLcm = /* #__PURE__ */createNumberFactory('lcm', lcmNumber);\nexport var createLog10 = /* #__PURE__ */createNumberFactory('log10', log10Number);\nexport var createLog2 = /* #__PURE__ */createNumberFactory('log2', log2Number);\nexport var createMod = /* #__PURE__ */createNumberFactory('mod', modNumber);\nexport var createMultiplyScalar = /* #__PURE__ */createNumberFactory('multiplyScalar', multiplyNumber);\nexport var createMultiply = /* #__PURE__ */createNumberFactory('multiply', multiplyNumber);\nexport var createNthRoot = /* #__PURE__ */createNumberOptionalSecondArgFactory('nthRoot', nthRootNumber);\nexport var createSign = /* #__PURE__ */createNumberFactory('sign', signNumber);\nexport var createSqrt = /* #__PURE__ */createNumberFactory('sqrt', sqrtNumber);\nexport var createSquare = /* #__PURE__ */createNumberFactory('square', squareNumber);\nexport var createSubtract = /* #__PURE__ */createNumberFactory('subtract', subtractNumber);\nexport var createXgcd = /* #__PURE__ */createNumberFactory('xgcd', xgcdNumber);\nexport var createDivideScalar = /* #__PURE__ */createNumberFactory('divideScalar', divideNumber);\nexport var createPow = /* #__PURE__ */createNumberFactory('pow', powNumber);\nexport var createRound = /* #__PURE__ */createNumberOptionalSecondArgFactory('round', roundNumber);\nexport var createLog = /* #__PURE__ */createNumberOptionalSecondArgFactory('log', logNumber);\nexport var createLog1p = /* #__PURE__ */createNumberFactory('log1p', log1pNumber);\nexport var createAdd = /* #__PURE__ */createNumberFactory('add', addNumber);\nexport { createHypot } from './function/arithmetic/hypot.js';\nexport var createNorm = /* #__PURE__ */createNumberFactory('norm', normNumber);\nexport var createDivide = /* #__PURE__ */createNumberFactory('divide', divideNumber); // bitwise\n\nexport var createBitAnd = /* #__PURE__ */createNumberFactory('bitAnd', bitAndNumber);\nexport var createBitNot = /* #__PURE__ */createNumberFactory('bitNot', bitNotNumber);\nexport var createBitOr = /* #__PURE__ */createNumberFactory('bitOr', bitOrNumber);\nexport var createBitXor = /* #__PURE__ */createNumberFactory('bitXor', bitXorNumber);\nexport var createLeftShift = /* #__PURE__ */createNumberFactory('leftShift', leftShiftNumber);\nexport var createRightArithShift = /* #__PURE__ */createNumberFactory('rightArithShift', rightArithShiftNumber);\nexport var createRightLogShift = /* #__PURE__ */createNumberFactory('rightLogShift', rightLogShiftNumber); // combinatorics\n\nexport { createStirlingS2 } from './function/combinatorics/stirlingS2.js';\nexport { createBellNumbers } from './function/combinatorics/bellNumbers.js';\nexport { createCatalan } from './function/combinatorics/catalan.js';\nexport { createComposition } from './function/combinatorics/composition.js'; // constants\n\nexport { createE, createUppercaseE, createFalse, // createI,\ncreateInfinity, createLN10, createLN2, createLOG10E, createLOG2E, createNaN, createNull, createPhi, createPi, createUppercasePi, createSQRT1_2, // eslint-disable-line camelcase\ncreateSQRT2, createTau, createTrue, createVersion } from './constants.js'; // create\n\nexport { createNumber } from './type/number.js';\nexport { createString } from './type/string.js';\nexport { createBoolean } from './type/boolean.js';\nexport { createParser } from './expression/function/parser.js'; // expression\n\nexport { createNode } from './expression/node/Node.js';\nexport { createAccessorNode } from './expression/node/AccessorNode.js';\nexport { createArrayNode } from './expression/node/ArrayNode.js';\nexport { createAssignmentNode } from './expression/node/AssignmentNode.js';\nexport { createBlockNode } from './expression/node/BlockNode.js';\nexport { createConditionalNode } from './expression/node/ConditionalNode.js';\nexport { createConstantNode } from './expression/node/ConstantNode.js';\nexport { createFunctionAssignmentNode } from './expression/node/FunctionAssignmentNode.js';\nexport { createIndexNode } from './expression/node/IndexNode.js';\nexport { createObjectNode } from './expression/node/ObjectNode.js';\nexport { createOperatorNode } from './expression/node/OperatorNode.js';\nexport { createParenthesisNode } from './expression/node/ParenthesisNode.js';\nexport { createRangeNode } from './expression/node/RangeNode.js';\nexport { createRelationalNode } from './expression/node/RelationalNode.js';\nexport { createSymbolNode } from './expression/node/SymbolNode.js';\nexport { createFunctionNode } from './expression/node/FunctionNode.js';\nexport { createParse } from './expression/parse.js';\nexport { createCompile } from './expression/function/compile.js';\nexport { createEvaluate } from './expression/function/evaluate.js';\nexport { createParserClass } from './expression/Parser.js'; // logical\n\nexport var createAnd = /* #__PURE__ */createNumberFactory('and', andNumber);\nexport var createNot = /* #__PURE__ */createNumberFactory('not', notNumber);\nexport var createOr = /* #__PURE__ */createNumberFactory('or', orNumber);\nexport var createXor = /* #__PURE__ */createNumberFactory('xor', xorNumber); // matrix\n\nexport { createApply } from './function/matrix/apply.js';\nexport { createFilter } from './function/matrix/filter.js';\nexport { createForEach } from './function/matrix/forEach.js';\nexport { createMap } from './function/matrix/map.js';\nexport { createRange } from './function/matrix/range.js';\nexport { createSize } from './function/matrix/size.js'; // FIXME: create a lightweight \"number\" implementation of subset only supporting plain objects/arrays\n\nexport var createIndex = /* #__PURE__ */factory('index', [], () => noIndex);\nexport var createMatrix = /* #__PURE__ */factory('matrix', [], () => noMatrix); // FIXME: needed now because subset transform needs it. Remove the need for it in subset\n\nexport var createSubset = /* #__PURE__ */factory('subset', [], () => noSubset); // TODO: provide number+array implementations for map, filter, forEach, zeros, ...?\n// TODO: create range implementation for range?\n\nexport { createPartitionSelect } from './function/matrix/partitionSelect.js'; // probability\n\nexport var createCombinations = createNumberFactory('combinations', combinationsNumber);\nexport var createGamma = createNumberFactory('gamma', gammaNumber);\nexport var createLgamma = createNumberFactory('lgamma', lgammaNumber);\nexport { createCombinationsWithRep } from './function/probability/combinationsWithRep.js';\nexport { createFactorial } from './function/probability/factorial.js';\nexport { createMultinomial } from './function/probability/multinomial.js';\nexport { createPermutations } from './function/probability/permutations.js';\nexport { createPickRandom } from './function/probability/pickRandom.js';\nexport { createRandomNumber as createRandom } from './function/probability/random.js';\nexport { createRandomInt } from './function/probability/randomInt.js'; // relational\n\nexport { createEqualScalarNumber as createEqualScalar } from './function/relational/equalScalar.js';\nexport { createCompareNumber as createCompare } from './function/relational/compare.js';\nexport { createCompareNatural } from './function/relational/compareNatural.js';\nexport { createCompareTextNumber as createCompareText } from './function/relational/compareText.js';\nexport { createEqualNumber as createEqual } from './function/relational/equal.js';\nexport { createEqualText } from './function/relational/equalText.js';\nexport { createSmallerNumber as createSmaller } from './function/relational/smaller.js';\nexport { createSmallerEqNumber as createSmallerEq } from './function/relational/smallerEq.js';\nexport { createLargerNumber as createLarger } from './function/relational/larger.js';\nexport { createLargerEqNumber as createLargerEq } from './function/relational/largerEq.js';\nexport { createDeepEqual } from './function/relational/deepEqual.js';\nexport { createUnequalNumber as createUnequal } from './function/relational/unequal.js'; // special\n\nexport { createErf } from './function/special/erf.js'; // statistics\n\nexport { createMode } from './function/statistics/mode.js';\nexport { createProd } from './function/statistics/prod.js';\nexport { createMax } from './function/statistics/max.js';\nexport { createMin } from './function/statistics/min.js';\nexport { createSum } from './function/statistics/sum.js';\nexport { createCumSum } from './function/statistics/cumsum.js';\nexport { createMean } from './function/statistics/mean.js';\nexport { createMedian } from './function/statistics/median.js';\nexport { createMad } from './function/statistics/mad.js';\nexport { createVariance } from './function/statistics/variance.js';\nexport { createQuantileSeq } from './function/statistics/quantileSeq.js';\nexport { createStd } from './function/statistics/std.js'; // string\n\nexport { createFormat } from './function/string/format.js';\nexport { createPrint } from './function/string/print.js'; // trigonometry\n\nexport var createAcos = /* #__PURE__ */createNumberFactory('acos', acosNumber);\nexport var createAcosh = /* #__PURE__ */createNumberFactory('acosh', acoshNumber);\nexport var createAcot = /* #__PURE__ */createNumberFactory('acot', acotNumber);\nexport var createAcoth = /* #__PURE__ */createNumberFactory('acoth', acothNumber);\nexport var createAcsc = /* #__PURE__ */createNumberFactory('acsc', acscNumber);\nexport var createAcsch = /* #__PURE__ */createNumberFactory('acsch', acschNumber);\nexport var createAsec = /* #__PURE__ */createNumberFactory('asec', asecNumber);\nexport var createAsech = /* #__PURE__ */createNumberFactory('asech', asechNumber);\nexport var createAsin = /* #__PURE__ */createNumberFactory('asin', asinNumber);\nexport var createAsinh = /* #__PURE__ */createNumberFactory('asinh', asinhNumber);\nexport var createAtan = /* #__PURE__ */createNumberFactory('atan', atanNumber);\nexport var createAtan2 = /* #__PURE__ */createNumberFactory('atan2', atan2Number);\nexport var createAtanh = /* #__PURE__ */createNumberFactory('atanh', atanhNumber);\nexport var createCos = /* #__PURE__ */createNumberFactory('cos', cosNumber);\nexport var createCosh = /* #__PURE__ */createNumberFactory('cosh', coshNumber);\nexport var createCot = /* #__PURE__ */createNumberFactory('cot', cotNumber);\nexport var createCoth = /* #__PURE__ */createNumberFactory('coth', cothNumber);\nexport var createCsc = /* #__PURE__ */createNumberFactory('csc', cscNumber);\nexport var createCsch = /* #__PURE__ */createNumberFactory('csch', cschNumber);\nexport var createSec = /* #__PURE__ */createNumberFactory('sec', secNumber);\nexport var createSech = /* #__PURE__ */createNumberFactory('sech', sechNumber);\nexport var createSin = /* #__PURE__ */createNumberFactory('sin', sinNumber);\nexport var createSinh = /* #__PURE__ */createNumberFactory('sinh', sinhNumber);\nexport var createTan = /* #__PURE__ */createNumberFactory('tan', tanNumber);\nexport var createTanh = /* #__PURE__ */createNumberFactory('tanh', tanhNumber); // transforms\n\nexport { createApplyTransform } from './expression/transform/apply.transform.js';\nexport { createFilterTransform } from './expression/transform/filter.transform.js';\nexport { createForEachTransform } from './expression/transform/forEach.transform.js';\nexport { createMapTransform } from './expression/transform/map.transform.js';\nexport { createMaxTransform } from './expression/transform/max.transform.js';\nexport { createMeanTransform } from './expression/transform/mean.transform.js';\nexport { createMinTransform } from './expression/transform/min.transform.js';\nexport { createRangeTransform } from './expression/transform/range.transform.js';\nexport var createSubsetTransform = /* #__PURE__ */factory('subset', [], () => noSubset, {\n  isTransformFunction: true\n});\nexport { createStdTransform } from './expression/transform/std.transform.js';\nexport { createSumTransform } from './expression/transform/sum.transform.js';\nexport { createCumSumTransform } from './expression/transform/cumsum.transform.js';\nexport { createVarianceTransform } from './expression/transform/variance.transform.js'; // utils\n\nexport { createClone } from './function/utils/clone.js';\nexport var createIsInteger = /* #__PURE__ */createNumberFactory('isInteger', isIntegerNumber);\nexport var createIsNegative = /* #__PURE__ */createNumberFactory('isNegative', isNegativeNumber);\nexport { createIsNumeric } from './function/utils/isNumeric.js';\nexport { createHasNumericValue } from './function/utils/hasNumericValue.js';\nexport var createIsPositive = /* #__PURE__ */createNumberFactory('isPositive', isPositiveNumber);\nexport var createIsZero = /* #__PURE__ */createNumberFactory('isZero', isZeroNumber);\nexport var createIsNaN = /* #__PURE__ */createNumberFactory('isNaN', isNaNNumber);\nexport { createTypeOf } from './function/utils/typeOf.js';\nexport { createIsPrime } from './function/utils/isPrime.js';\nexport { createNumeric } from './function/utils/numeric.js'; // json\n\nexport { createReviver } from './json/reviver.js';\nexport { createReplacer } from './json/replacer.js'; // helper functions to create a factory function for a function which only needs typed-function\n\nfunction createNumberFactory(name, fn) {\n  return factory(name, ['typed'], _ref => {\n    var {\n      typed\n    } = _ref;\n    return typed(fn);\n  });\n}\n\nfunction createNumberOptionalSecondArgFactory(name, fn) {\n  return factory(name, ['typed'], _ref2 => {\n    var {\n      typed\n    } = _ref2;\n    return typed({\n      number: fn,\n      'number,number': fn\n    });\n  });\n}", "/**\n * THIS FILE IS AUTO-GENERATED\n * DON'T MAKE CHANGES HERE\n */\nimport { config } from './configReadonly.js';\nimport { createE, createFalse, createIndex, createInfinity, createLN10, createLOG10E, createMatrix, createNaN, createNull, createPhi, createRangeClass, createReplacer, createResultSet, createSQRT1_2, // eslint-disable-line camelcase\ncreateSubset, createTau, createTyped, createUnaryPlus, createVersion, createXor, createAbs, createAcos, createAcot, createAcsc, createAdd, createAnd, createAsec, createAsin, createAtan, createAtanh, createBitAnd, createBitOr, createBoolean, createCbrt, createCombinations, createCompare, createCompareText, createCos, createCot, createCsc, createCube, createDivide, createEqualScalar, createErf, createExp, createFilter, createForEach, createFormat, createGamma, createIsInteger, createIsNegative, createIsPositive, createIsZero, createLOG2E, createLargerEq, createLeftShift, createLog, createLog1p, createMap, createMean, createMod, createMultiply, createNot, createNumber, createOr, createPi, createPow, createRandom, createRightLogShift, createSQRT2, createSech, createSin, createSize, createSmallerEq, createSquare, createString, createSubtract, createTanh, createTypeOf, createUnequal, createXgcd, createAcoth, createAddScalar, createAsech, createBitNot, createClone, createCompareNatural, createCosh, createCsch, createDivideScalar, createEqualText, createExpm1, createIsNumeric, createLN2, createLcm, createLog10, createMultiplyScalar, createNthRoot, createPickRandom, createRandomInt, createRightArithShift, createSec, createSinh, createSqrt, createTan, createUnaryMinus, createAcosh, createApply, createAsinh, createBitXor, createCombinationsWithRep, createCumSum, createEqual, createFactorial, createHasNumericValue, createIsNaN, createLarger, createLog2, createMode, createNorm, createPartitionSelect, createPrint, createQuantileSeq, createRound, createSmaller, createStirlingS2, createTrue, createVariance, createAcsch, createAtan2, createCatalan, createComposition, createDeepEqual, createFloor, createHypot, createLgamma, createMedian, createMultinomial, createPermutations, createRange, createSign, createStd, createCeil, createCoth, createFix, createIsPrime, createNumeric, createProd, createSum, createBellNumbers, createGcd, createMad, createMax, createMin } from '../factoriesNumber.js';\nexport var e = /* #__PURE__ */createE({\n  config\n});\nexport var _false = /* #__PURE__ */createFalse({});\nexport var index = /* #__PURE__ */createIndex({});\nexport var _Infinity = /* #__PURE__ */createInfinity({\n  config\n});\nexport var LN10 = /* #__PURE__ */createLN10({\n  config\n});\nexport var LOG10E = /* #__PURE__ */createLOG10E({\n  config\n});\nexport var matrix = /* #__PURE__ */createMatrix({});\nexport var _NaN = /* #__PURE__ */createNaN({\n  config\n});\nexport var _null = /* #__PURE__ */createNull({});\nexport var phi = /* #__PURE__ */createPhi({\n  config\n});\nexport var Range = /* #__PURE__ */createRangeClass({});\nexport var replacer = /* #__PURE__ */createReplacer({});\nexport var ResultSet = /* #__PURE__ */createResultSet({});\nexport var SQRT1_2 = /* #__PURE__ */createSQRT1_2({\n  config\n});\nexport var subset = /* #__PURE__ */createSubset({});\nexport var tau = /* #__PURE__ */createTau({\n  config\n});\nexport var typed = /* #__PURE__ */createTyped({});\nexport var unaryPlus = /* #__PURE__ */createUnaryPlus({\n  typed\n});\nexport var version = /* #__PURE__ */createVersion({});\nexport var xor = /* #__PURE__ */createXor({\n  typed\n});\nexport var abs = /* #__PURE__ */createAbs({\n  typed\n});\nexport var acos = /* #__PURE__ */createAcos({\n  typed\n});\nexport var acot = /* #__PURE__ */createAcot({\n  typed\n});\nexport var acsc = /* #__PURE__ */createAcsc({\n  typed\n});\nexport var add = /* #__PURE__ */createAdd({\n  typed\n});\nexport var and = /* #__PURE__ */createAnd({\n  typed\n});\nexport var asec = /* #__PURE__ */createAsec({\n  typed\n});\nexport var asin = /* #__PURE__ */createAsin({\n  typed\n});\nexport var atan = /* #__PURE__ */createAtan({\n  typed\n});\nexport var atanh = /* #__PURE__ */createAtanh({\n  typed\n});\nexport var bitAnd = /* #__PURE__ */createBitAnd({\n  typed\n});\nexport var bitOr = /* #__PURE__ */createBitOr({\n  typed\n});\nexport var boolean = /* #__PURE__ */createBoolean({\n  typed\n});\nexport var cbrt = /* #__PURE__ */createCbrt({\n  typed\n});\nexport var combinations = /* #__PURE__ */createCombinations({\n  typed\n});\nexport var compare = /* #__PURE__ */createCompare({\n  config,\n  typed\n});\nexport var compareText = /* #__PURE__ */createCompareText({\n  typed\n});\nexport var cos = /* #__PURE__ */createCos({\n  typed\n});\nexport var cot = /* #__PURE__ */createCot({\n  typed\n});\nexport var csc = /* #__PURE__ */createCsc({\n  typed\n});\nexport var cube = /* #__PURE__ */createCube({\n  typed\n});\nexport var divide = /* #__PURE__ */createDivide({\n  typed\n});\nexport var equalScalar = /* #__PURE__ */createEqualScalar({\n  config,\n  typed\n});\nexport var erf = /* #__PURE__ */createErf({\n  typed\n});\nexport var exp = /* #__PURE__ */createExp({\n  typed\n});\nexport var filter = /* #__PURE__ */createFilter({\n  typed\n});\nexport var forEach = /* #__PURE__ */createForEach({\n  typed\n});\nexport var format = /* #__PURE__ */createFormat({\n  typed\n});\nexport var gamma = /* #__PURE__ */createGamma({\n  typed\n});\nexport var isInteger = /* #__PURE__ */createIsInteger({\n  typed\n});\nexport var isNegative = /* #__PURE__ */createIsNegative({\n  typed\n});\nexport var isPositive = /* #__PURE__ */createIsPositive({\n  typed\n});\nexport var isZero = /* #__PURE__ */createIsZero({\n  typed\n});\nexport var LOG2E = /* #__PURE__ */createLOG2E({\n  config\n});\nexport var largerEq = /* #__PURE__ */createLargerEq({\n  config,\n  typed\n});\nexport var leftShift = /* #__PURE__ */createLeftShift({\n  typed\n});\nexport var log = /* #__PURE__ */createLog({\n  typed\n});\nexport var log1p = /* #__PURE__ */createLog1p({\n  typed\n});\nexport var map = /* #__PURE__ */createMap({\n  typed\n});\nexport var mean = /* #__PURE__ */createMean({\n  add,\n  divide,\n  typed\n});\nexport var mod = /* #__PURE__ */createMod({\n  typed\n});\nexport var multiply = /* #__PURE__ */createMultiply({\n  typed\n});\nexport var not = /* #__PURE__ */createNot({\n  typed\n});\nexport var number = /* #__PURE__ */createNumber({\n  typed\n});\nexport var or = /* #__PURE__ */createOr({\n  typed\n});\nexport var pi = /* #__PURE__ */createPi({\n  config\n});\nexport var pow = /* #__PURE__ */createPow({\n  typed\n});\nexport var random = /* #__PURE__ */createRandom({\n  config,\n  typed\n});\nexport var rightLogShift = /* #__PURE__ */createRightLogShift({\n  typed\n});\nexport var SQRT2 = /* #__PURE__ */createSQRT2({\n  config\n});\nexport var sech = /* #__PURE__ */createSech({\n  typed\n});\nexport var sin = /* #__PURE__ */createSin({\n  typed\n});\nexport var size = /* #__PURE__ */createSize({\n  matrix,\n  config,\n  typed\n});\nexport var smallerEq = /* #__PURE__ */createSmallerEq({\n  config,\n  typed\n});\nexport var square = /* #__PURE__ */createSquare({\n  typed\n});\nexport var string = /* #__PURE__ */createString({\n  typed\n});\nexport var subtract = /* #__PURE__ */createSubtract({\n  typed\n});\nexport var tanh = /* #__PURE__ */createTanh({\n  typed\n});\nexport var typeOf = /* #__PURE__ */createTypeOf({\n  typed\n});\nexport var unequal = /* #__PURE__ */createUnequal({\n  equalScalar,\n  typed\n});\nexport var xgcd = /* #__PURE__ */createXgcd({\n  typed\n});\nexport var acoth = /* #__PURE__ */createAcoth({\n  typed\n});\nexport var addScalar = /* #__PURE__ */createAddScalar({\n  typed\n});\nexport var asech = /* #__PURE__ */createAsech({\n  typed\n});\nexport var bitNot = /* #__PURE__ */createBitNot({\n  typed\n});\nexport var clone = /* #__PURE__ */createClone({\n  typed\n});\nexport var compareNatural = /* #__PURE__ */createCompareNatural({\n  compare,\n  typed\n});\nexport var cosh = /* #__PURE__ */createCosh({\n  typed\n});\nexport var csch = /* #__PURE__ */createCsch({\n  typed\n});\nexport var divideScalar = /* #__PURE__ */createDivideScalar({\n  typed\n});\nexport var equalText = /* #__PURE__ */createEqualText({\n  compareText,\n  isZero,\n  typed\n});\nexport var expm1 = /* #__PURE__ */createExpm1({\n  typed\n});\nexport var isNumeric = /* #__PURE__ */createIsNumeric({\n  typed\n});\nexport var LN2 = /* #__PURE__ */createLN2({\n  config\n});\nexport var lcm = /* #__PURE__ */createLcm({\n  typed\n});\nexport var log10 = /* #__PURE__ */createLog10({\n  typed\n});\nexport var multiplyScalar = /* #__PURE__ */createMultiplyScalar({\n  typed\n});\nexport var nthRoot = /* #__PURE__ */createNthRoot({\n  typed\n});\nexport var pickRandom = /* #__PURE__ */createPickRandom({\n  config,\n  typed\n});\nexport var randomInt = /* #__PURE__ */createRandomInt({\n  config,\n  typed\n});\nexport var rightArithShift = /* #__PURE__ */createRightArithShift({\n  typed\n});\nexport var sec = /* #__PURE__ */createSec({\n  typed\n});\nexport var sinh = /* #__PURE__ */createSinh({\n  typed\n});\nexport var sqrt = /* #__PURE__ */createSqrt({\n  typed\n});\nexport var tan = /* #__PURE__ */createTan({\n  typed\n});\nexport var unaryMinus = /* #__PURE__ */createUnaryMinus({\n  typed\n});\nexport var acosh = /* #__PURE__ */createAcosh({\n  typed\n});\nexport var apply = /* #__PURE__ */createApply({\n  isInteger,\n  typed\n});\nexport var asinh = /* #__PURE__ */createAsinh({\n  typed\n});\nexport var bitXor = /* #__PURE__ */createBitXor({\n  typed\n});\nexport var combinationsWithRep = /* #__PURE__ */createCombinationsWithRep({\n  typed\n});\nexport var cumsum = /* #__PURE__ */createCumSum({\n  add,\n  typed,\n  unaryPlus\n});\nexport var equal = /* #__PURE__ */createEqual({\n  equalScalar,\n  typed\n});\nexport var factorial = /* #__PURE__ */createFactorial({\n  gamma,\n  typed\n});\nexport var hasNumericValue = /* #__PURE__ */createHasNumericValue({\n  isNumeric,\n  typed\n});\nexport var isNaN = /* #__PURE__ */createIsNaN({\n  typed\n});\nexport var larger = /* #__PURE__ */createLarger({\n  config,\n  typed\n});\nexport var log2 = /* #__PURE__ */createLog2({\n  typed\n});\nexport var mode = /* #__PURE__ */createMode({\n  isNaN,\n  isNumeric,\n  typed\n});\nexport var norm = /* #__PURE__ */createNorm({\n  typed\n});\nexport var partitionSelect = /* #__PURE__ */createPartitionSelect({\n  compare,\n  isNaN,\n  isNumeric,\n  typed\n});\nexport var print = /* #__PURE__ */createPrint({\n  typed\n});\nexport var quantileSeq = /* #__PURE__ */createQuantileSeq({\n  add,\n  compare,\n  multiply,\n  partitionSelect,\n  typed\n});\nexport var round = /* #__PURE__ */createRound({\n  typed\n});\nexport var smaller = /* #__PURE__ */createSmaller({\n  config,\n  typed\n});\nexport var stirlingS2 = /* #__PURE__ */createStirlingS2({\n  addScalar,\n  combinations,\n  divideScalar,\n  factorial,\n  isInteger,\n  isNegative,\n  larger,\n  multiplyScalar,\n  number,\n  pow,\n  subtract,\n  typed\n});\nexport var _true = /* #__PURE__ */createTrue({});\nexport var variance = /* #__PURE__ */createVariance({\n  add,\n  apply,\n  divide,\n  isNaN,\n  multiply,\n  subtract,\n  typed\n});\nexport var acsch = /* #__PURE__ */createAcsch({\n  typed\n});\nexport var atan2 = /* #__PURE__ */createAtan2({\n  typed\n});\nexport var catalan = /* #__PURE__ */createCatalan({\n  addScalar,\n  combinations,\n  divideScalar,\n  isInteger,\n  isNegative,\n  multiplyScalar,\n  typed\n});\nexport var composition = /* #__PURE__ */createComposition({\n  addScalar,\n  combinations,\n  isInteger,\n  isNegative,\n  isPositive,\n  larger,\n  typed\n});\nexport var deepEqual = /* #__PURE__ */createDeepEqual({\n  equal,\n  typed\n});\nexport var floor = /* #__PURE__ */createFloor({\n  config,\n  round,\n  typed\n});\nexport var hypot = /* #__PURE__ */createHypot({\n  abs,\n  addScalar,\n  divideScalar,\n  isPositive,\n  multiplyScalar,\n  smaller,\n  sqrt,\n  typed\n});\nexport var lgamma = /* #__PURE__ */createLgamma({\n  typed\n});\nexport var median = /* #__PURE__ */createMedian({\n  add,\n  compare,\n  divide,\n  partitionSelect,\n  typed\n});\nexport var multinomial = /* #__PURE__ */createMultinomial({\n  add,\n  divide,\n  factorial,\n  isInteger,\n  isPositive,\n  multiply,\n  typed\n});\nexport var permutations = /* #__PURE__ */createPermutations({\n  factorial,\n  typed\n});\nexport var range = /* #__PURE__ */createRange({\n  matrix,\n  config,\n  larger,\n  largerEq,\n  smaller,\n  smallerEq,\n  typed\n});\nexport var sign = /* #__PURE__ */createSign({\n  typed\n});\nexport var std = /* #__PURE__ */createStd({\n  sqrt,\n  typed,\n  variance\n});\nexport var ceil = /* #__PURE__ */createCeil({\n  config,\n  round,\n  typed\n});\nexport var coth = /* #__PURE__ */createCoth({\n  typed\n});\nexport var fix = /* #__PURE__ */createFix({\n  ceil,\n  floor,\n  typed\n});\nexport var isPrime = /* #__PURE__ */createIsPrime({\n  typed\n});\nexport var numeric = /* #__PURE__ */createNumeric({\n  number\n});\nexport var prod = /* #__PURE__ */createProd({\n  config,\n  multiplyScalar,\n  numeric,\n  typed\n});\nexport var sum = /* #__PURE__ */createSum({\n  add,\n  config,\n  numeric,\n  typed\n});\nexport var bellNumbers = /* #__PURE__ */createBellNumbers({\n  addScalar,\n  isInteger,\n  isNegative,\n  stirlingS2,\n  typed\n});\nexport var gcd = /* #__PURE__ */createGcd({\n  typed\n});\nexport var mad = /* #__PURE__ */createMad({\n  abs,\n  map,\n  median,\n  subtract,\n  typed\n});\nexport var max = /* #__PURE__ */createMax({\n  config,\n  larger,\n  numeric,\n  typed\n});\nexport var min = /* #__PURE__ */createMin({\n  config,\n  numeric,\n  smaller,\n  typed\n});", "import _extends from \"@babel/runtime/helpers/extends\";\n\n/**\n * THIS FILE IS AUTO-GENERATED\n * DON'T MAKE CHANGES HERE\n */\nimport { config } from './configReadonly.js';\nimport { createChainClass, createChain, createNode, createObjectNode, createRangeNode, createRelationalNode, createReviver, createSymbolNode, createAccessorNode, createAssignmentNode, createBlockNode, createConditionalNode, createFunctionNode, createIndexNode, createOperatorNode, createConstantNode, createFunctionAssignmentNode, createParenthesisNode, createArrayNode, createSimplifyCore, createParse, createResolve, createCompile, createEvaluate, createHelpClass, createParserClass, createSimplify, createDerivative, createRationalize, createHelp, createParser, createCumSumTransform, createApplyTransform, createFilterTransform, createForEachTransform, createMapTransform, createMeanTransform, createSubsetTransform, createVarianceTransform, createMaxTransform, createMinTransform, createRangeTransform, createStdTransform, createSumTransform } from '../factoriesNumber.js';\nimport { e, _false, index, _Infinity, LN10, LOG10E, matrix, _NaN, _null, phi, Range, replacer, ResultSet, SQRT1_2, // eslint-disable-line camelcase\nsubset, tau, typed, unaryPlus, version, xor, abs, acos, acot, acsc, add, and, asec, asin, atan, atanh, bitAnd, bitOr, boolean, cbrt, combinations, compare, compareText, cos, cot, csc, cube, divide, equalScalar, erf, exp, filter, forEach, format, gamma, isInteger, isNegative, isPositive, isZero, LOG2E, largerEq, leftShift, log, log1p, map, mean, mod, multiply, not, number, or, pi, pow, random, rightLogShift, SQRT2, sech, sin, size, smallerEq, square, string, subtract, tanh, typeOf, unequal, xgcd, acoth, addScalar, asech, bitNot, clone, compareNatural, cosh, csch, divideScalar, equalText, expm1, isNumeric, LN2, lcm, log10, multiplyScalar, nthRoot, pickRandom, randomInt, rightArithShift, sec, sinh, sqrt, tan, unaryMinus, acosh, apply, asinh, bitXor, combinationsWithRep, cumsum, equal, factorial, hasNumericValue, isNaN, larger, log2, mode, norm, partitionSelect, print, quantileSeq, round, smaller, stirlingS2, _true, variance, acsch, atan2, catalan, composition, deepEqual, floor, hypot, lgamma, median, multinomial, permutations, range, sign, std, ceil, coth, fix, isPrime, numeric, prod, sum, bellNumbers, gcd, mad, max, min } from './pureFunctionsNumber.generated.js';\nvar math = {}; // NOT pure!\n\nvar mathWithTransform = {}; // NOT pure!\n\nvar classes = {}; // NOT pure!\n\nexport var Chain = createChainClass({\n  math\n});\nexport var chain = createChain({\n  Chain,\n  typed\n});\nexport var Node = createNode({\n  mathWithTransform\n});\nexport var ObjectNode = createObjectNode({\n  Node\n});\nexport var RangeNode = createRangeNode({\n  Node\n});\nexport var RelationalNode = createRelationalNode({\n  Node\n});\nexport var reviver = createReviver({\n  classes\n});\nexport var SymbolNode = createSymbolNode({\n  Node,\n  math\n});\nexport var AccessorNode = createAccessorNode({\n  Node,\n  subset\n});\nexport var AssignmentNode = createAssignmentNode({\n  matrix,\n  Node,\n  subset\n});\nexport var BlockNode = createBlockNode({\n  Node,\n  ResultSet\n});\nexport var ConditionalNode = createConditionalNode({\n  Node\n});\nexport var FunctionNode = createFunctionNode({\n  Node,\n  SymbolNode,\n  math\n});\nexport var IndexNode = createIndexNode({\n  Node,\n  size\n});\nexport var OperatorNode = createOperatorNode({\n  Node\n});\nexport var ConstantNode = createConstantNode({\n  Node\n});\nexport var FunctionAssignmentNode = createFunctionAssignmentNode({\n  Node,\n  typed\n});\nexport var ParenthesisNode = createParenthesisNode({\n  Node\n});\nexport var ArrayNode = createArrayNode({\n  Node\n});\nexport var simplifyCore = createSimplifyCore({\n  AccessorNode,\n  ArrayNode,\n  ConstantNode,\n  FunctionNode,\n  IndexNode,\n  ObjectNode,\n  OperatorNode,\n  ParenthesisNode,\n  SymbolNode,\n  add,\n  divide,\n  equal,\n  isZero,\n  multiply,\n  pow,\n  subtract\n});\nexport var parse = createParse({\n  AccessorNode,\n  ArrayNode,\n  AssignmentNode,\n  BlockNode,\n  ConditionalNode,\n  ConstantNode,\n  FunctionAssignmentNode,\n  FunctionNode,\n  IndexNode,\n  ObjectNode,\n  OperatorNode,\n  ParenthesisNode,\n  RangeNode,\n  RelationalNode,\n  SymbolNode,\n  config,\n  numeric,\n  typed\n});\nexport var resolve = createResolve({\n  ConstantNode,\n  FunctionNode,\n  OperatorNode,\n  ParenthesisNode,\n  parse\n});\nexport var compile = createCompile({\n  parse,\n  typed\n});\nexport var evaluate = createEvaluate({\n  parse,\n  typed\n});\nexport var Help = createHelpClass({\n  parse\n});\nexport var Parser = createParserClass({\n  evaluate\n});\nexport var simplify = createSimplify({\n  AccessorNode,\n  ArrayNode,\n  ConstantNode,\n  FunctionNode,\n  IndexNode,\n  ObjectNode,\n  OperatorNode,\n  ParenthesisNode,\n  SymbolNode,\n  add,\n  config,\n  divide,\n  equal,\n  isZero,\n  mathWithTransform,\n  matrix,\n  multiply,\n  parse,\n  pow,\n  resolve,\n  simplifyCore,\n  subtract,\n  typed\n});\nexport var derivative = createDerivative({\n  ConstantNode,\n  FunctionNode,\n  OperatorNode,\n  ParenthesisNode,\n  SymbolNode,\n  config,\n  equal,\n  isZero,\n  numeric,\n  parse,\n  simplify,\n  typed\n});\nexport var rationalize = createRationalize({\n  AccessorNode,\n  ArrayNode,\n  ConstantNode,\n  FunctionNode,\n  IndexNode,\n  ObjectNode,\n  OperatorNode,\n  ParenthesisNode,\n  SymbolNode,\n  add,\n  config,\n  divide,\n  equal,\n  isZero,\n  mathWithTransform,\n  matrix,\n  multiply,\n  parse,\n  pow,\n  simplify,\n  simplifyCore,\n  subtract,\n  typed\n});\nexport var help = createHelp({\n  Help,\n  mathWithTransform,\n  typed\n});\nexport var parser = createParser({\n  Parser,\n  typed\n});\n\n_extends(math, {\n  e,\n  false: _false,\n  index,\n  Infinity: _Infinity,\n  LN10,\n  LOG10E,\n  matrix,\n  NaN: _NaN,\n  null: _null,\n  phi,\n  replacer,\n  SQRT1_2,\n  subset,\n  tau,\n  typed,\n  unaryPlus,\n  'E': e,\n  version,\n  xor,\n  abs,\n  acos,\n  acot,\n  acsc,\n  add,\n  and,\n  asec,\n  asin,\n  atan,\n  atanh,\n  bitAnd,\n  bitOr,\n  boolean,\n  cbrt,\n  chain,\n  combinations,\n  compare,\n  compareText,\n  cos,\n  cot,\n  csc,\n  cube,\n  divide,\n  equalScalar,\n  erf,\n  exp,\n  filter,\n  forEach,\n  format,\n  gamma,\n  isInteger,\n  isNegative,\n  isPositive,\n  isZero,\n  LOG2E,\n  largerEq,\n  leftShift,\n  log,\n  log1p,\n  map,\n  mean,\n  mod,\n  multiply,\n  not,\n  number,\n  or,\n  pi,\n  pow,\n  random,\n  reviver,\n  rightLogShift,\n  SQRT2,\n  sech,\n  sin,\n  size,\n  smallerEq,\n  square,\n  string,\n  subtract,\n  tanh,\n  typeOf,\n  unequal,\n  xgcd,\n  acoth,\n  addScalar,\n  asech,\n  bitNot,\n  clone,\n  compareNatural,\n  cosh,\n  csch,\n  divideScalar,\n  equalText,\n  expm1,\n  isNumeric,\n  LN2,\n  lcm,\n  log10,\n  multiplyScalar,\n  nthRoot,\n  pickRandom,\n  randomInt,\n  rightArithShift,\n  sec,\n  sinh,\n  sqrt,\n  tan,\n  unaryMinus,\n  acosh,\n  apply,\n  asinh,\n  bitXor,\n  combinationsWithRep,\n  cumsum,\n  equal,\n  factorial,\n  hasNumericValue,\n  isNaN,\n  larger,\n  log2,\n  mode,\n  norm,\n  partitionSelect,\n  print,\n  quantileSeq,\n  round,\n  smaller,\n  stirlingS2,\n  true: _true,\n  variance,\n  acsch,\n  atan2,\n  catalan,\n  composition,\n  deepEqual,\n  floor,\n  hypot,\n  lgamma,\n  median,\n  multinomial,\n  permutations,\n  range,\n  sign,\n  std,\n  'PI': pi,\n  ceil,\n  coth,\n  fix,\n  isPrime,\n  numeric,\n  prod,\n  simplifyCore,\n  sum,\n  bellNumbers,\n  gcd,\n  mad,\n  max,\n  parse,\n  resolve,\n  compile,\n  evaluate,\n  simplify,\n  derivative,\n  min,\n  rationalize,\n  help,\n  parser,\n  config\n});\n\n_extends(mathWithTransform, math, {\n  cumsum: createCumSumTransform({\n    add,\n    typed,\n    unaryPlus\n  }),\n  apply: createApplyTransform({\n    isInteger,\n    typed\n  }),\n  filter: createFilterTransform({\n    typed\n  }),\n  forEach: createForEachTransform({\n    typed\n  }),\n  map: createMapTransform({\n    typed\n  }),\n  mean: createMeanTransform({\n    add,\n    divide,\n    typed\n  }),\n  subset: createSubsetTransform({}),\n  variance: createVarianceTransform({\n    add,\n    apply,\n    divide,\n    isNaN,\n    multiply,\n    subtract,\n    typed\n  }),\n  max: createMaxTransform({\n    config,\n    larger,\n    numeric,\n    typed\n  }),\n  min: createMinTransform({\n    config,\n    numeric,\n    smaller,\n    typed\n  }),\n  range: createRangeTransform({\n    matrix,\n    config,\n    larger,\n    largerEq,\n    smaller,\n    smallerEq,\n    typed\n  }),\n  std: createStdTransform({\n    sqrt,\n    typed,\n    variance\n  }),\n  sum: createSumTransform({\n    add,\n    config,\n    numeric,\n    typed\n  })\n});\n\n_extends(classes, {\n  Chain,\n  Range,\n  ResultSet,\n  Node,\n  ObjectNode,\n  RangeNode,\n  RelationalNode,\n  SymbolNode,\n  AccessorNode,\n  AssignmentNode,\n  BlockNode,\n  ConditionalNode,\n  FunctionNode,\n  IndexNode,\n  OperatorNode,\n  ConstantNode,\n  FunctionAssignmentNode,\n  ParenthesisNode,\n  ArrayNode,\n  Help,\n  Parser\n});\n\nChain.createProxy(math);\nexport { embeddedDocs as docs } from '../expression/embeddedDocs/embeddedDocs.js';", "// util functions\nexport { isAccessorNode, isArray, isArrayNode, isAssignmentNode, isBigNumber, isBlockNode, isBoolean, isChain, isCollection, isComplex, isConditionalNode, isConstantNode, isDate, isDenseMatrix, isFraction, isFunction, isFunctionAssignmentNode, isFunctionNode, isHelp, isIndex, isIndexNode, isMatrix, isNode, isNull, isNumber, isString, isUndefined, isObject, isObjectNode, isOperatorNode, isParenthesisNode, isRange, isRangeNode, isRegExp, isResultSet, isSparseMatrix, isSymbolNode, isUnit } from '../utils/is.js';", "/**\n * THIS FILE IS AUTO-GENERATED\n * DON'T MAKE CHANGES HERE\n */\nexport { absDependencies } from './dependenciesNumber/dependenciesAbs.generated.js';\nexport { AccessorNodeDependencies } from './dependenciesNumber/dependenciesAccessorNode.generated.js';\nexport { acosDependencies } from './dependenciesNumber/dependenciesAcos.generated.js';\nexport { acoshDependencies } from './dependenciesNumber/dependenciesAcosh.generated.js';\nexport { acotDependencies } from './dependenciesNumber/dependenciesAcot.generated.js';\nexport { acothDependencies } from './dependenciesNumber/dependenciesAcoth.generated.js';\nexport { acscDependencies } from './dependenciesNumber/dependenciesAcsc.generated.js';\nexport { acschDependencies } from './dependenciesNumber/dependenciesAcsch.generated.js';\nexport { addDependencies } from './dependenciesNumber/dependenciesAdd.generated.js';\nexport { addScalarDependencies } from './dependenciesNumber/dependenciesAddScalar.generated.js';\nexport { andDependencies } from './dependenciesNumber/dependenciesAnd.generated.js';\nexport { applyDependencies } from './dependenciesNumber/dependenciesApply.generated.js';\nexport { applyTransformDependencies } from './dependenciesNumber/dependenciesApplyTransform.generated.js';\nexport { ArrayNodeDependencies } from './dependenciesNumber/dependenciesArrayNode.generated.js';\nexport { asecDependencies } from './dependenciesNumber/dependenciesAsec.generated.js';\nexport { asechDependencies } from './dependenciesNumber/dependenciesAsech.generated.js';\nexport { asinDependencies } from './dependenciesNumber/dependenciesAsin.generated.js';\nexport { asinhDependencies } from './dependenciesNumber/dependenciesAsinh.generated.js';\nexport { AssignmentNodeDependencies } from './dependenciesNumber/dependenciesAssignmentNode.generated.js';\nexport { atanDependencies } from './dependenciesNumber/dependenciesAtan.generated.js';\nexport { atan2Dependencies } from './dependenciesNumber/dependenciesAtan2.generated.js';\nexport { atanhDependencies } from './dependenciesNumber/dependenciesAtanh.generated.js';\nexport { bellNumbersDependencies } from './dependenciesNumber/dependenciesBellNumbers.generated.js';\nexport { bitAndDependencies } from './dependenciesNumber/dependenciesBitAnd.generated.js';\nexport { bitNotDependencies } from './dependenciesNumber/dependenciesBitNot.generated.js';\nexport { bitOrDependencies } from './dependenciesNumber/dependenciesBitOr.generated.js';\nexport { bitXorDependencies } from './dependenciesNumber/dependenciesBitXor.generated.js';\nexport { BlockNodeDependencies } from './dependenciesNumber/dependenciesBlockNode.generated.js';\nexport { booleanDependencies } from './dependenciesNumber/dependenciesBoolean.generated.js';\nexport { catalanDependencies } from './dependenciesNumber/dependenciesCatalan.generated.js';\nexport { cbrtDependencies } from './dependenciesNumber/dependenciesCbrt.generated.js';\nexport { ceilDependencies } from './dependenciesNumber/dependenciesCeil.generated.js';\nexport { chainDependencies } from './dependenciesNumber/dependenciesChain.generated.js';\nexport { ChainDependencies } from './dependenciesNumber/dependenciesChainClass.generated.js';\nexport { cloneDependencies } from './dependenciesNumber/dependenciesClone.generated.js';\nexport { combinationsDependencies } from './dependenciesNumber/dependenciesCombinations.generated.js';\nexport { combinationsWithRepDependencies } from './dependenciesNumber/dependenciesCombinationsWithRep.generated.js';\nexport { compareDependencies } from './dependenciesNumber/dependenciesCompare.generated.js';\nexport { compareNaturalDependencies } from './dependenciesNumber/dependenciesCompareNatural.generated.js';\nexport { compareTextDependencies } from './dependenciesNumber/dependenciesCompareText.generated.js';\nexport { compileDependencies } from './dependenciesNumber/dependenciesCompile.generated.js';\nexport { compositionDependencies } from './dependenciesNumber/dependenciesComposition.generated.js';\nexport { ConditionalNodeDependencies } from './dependenciesNumber/dependenciesConditionalNode.generated.js';\nexport { ConstantNodeDependencies } from './dependenciesNumber/dependenciesConstantNode.generated.js';\nexport { cosDependencies } from './dependenciesNumber/dependenciesCos.generated.js';\nexport { coshDependencies } from './dependenciesNumber/dependenciesCosh.generated.js';\nexport { cotDependencies } from './dependenciesNumber/dependenciesCot.generated.js';\nexport { cothDependencies } from './dependenciesNumber/dependenciesCoth.generated.js';\nexport { cscDependencies } from './dependenciesNumber/dependenciesCsc.generated.js';\nexport { cschDependencies } from './dependenciesNumber/dependenciesCsch.generated.js';\nexport { cubeDependencies } from './dependenciesNumber/dependenciesCube.generated.js';\nexport { cumsumDependencies } from './dependenciesNumber/dependenciesCumSum.generated.js';\nexport { cumsumTransformDependencies } from './dependenciesNumber/dependenciesCumSumTransform.generated.js';\nexport { deepEqualDependencies } from './dependenciesNumber/dependenciesDeepEqual.generated.js';\nexport { derivativeDependencies } from './dependenciesNumber/dependenciesDerivative.generated.js';\nexport { divideDependencies } from './dependenciesNumber/dependenciesDivide.generated.js';\nexport { divideScalarDependencies } from './dependenciesNumber/dependenciesDivideScalar.generated.js';\nexport { eDependencies } from './dependenciesNumber/dependenciesE.generated.js';\nexport { equalDependencies } from './dependenciesNumber/dependenciesEqual.generated.js';\nexport { equalScalarDependencies } from './dependenciesNumber/dependenciesEqualScalar.generated.js';\nexport { equalTextDependencies } from './dependenciesNumber/dependenciesEqualText.generated.js';\nexport { erfDependencies } from './dependenciesNumber/dependenciesErf.generated.js';\nexport { evaluateDependencies } from './dependenciesNumber/dependenciesEvaluate.generated.js';\nexport { expDependencies } from './dependenciesNumber/dependenciesExp.generated.js';\nexport { expm1Dependencies } from './dependenciesNumber/dependenciesExpm1.generated.js';\nexport { factorialDependencies } from './dependenciesNumber/dependenciesFactorial.generated.js';\nexport { falseDependencies } from './dependenciesNumber/dependenciesFalse.generated.js';\nexport { filterDependencies } from './dependenciesNumber/dependenciesFilter.generated.js';\nexport { filterTransformDependencies } from './dependenciesNumber/dependenciesFilterTransform.generated.js';\nexport { fixDependencies } from './dependenciesNumber/dependenciesFix.generated.js';\nexport { floorDependencies } from './dependenciesNumber/dependenciesFloor.generated.js';\nexport { forEachDependencies } from './dependenciesNumber/dependenciesForEach.generated.js';\nexport { forEachTransformDependencies } from './dependenciesNumber/dependenciesForEachTransform.generated.js';\nexport { formatDependencies } from './dependenciesNumber/dependenciesFormat.generated.js';\nexport { FunctionAssignmentNodeDependencies } from './dependenciesNumber/dependenciesFunctionAssignmentNode.generated.js';\nexport { FunctionNodeDependencies } from './dependenciesNumber/dependenciesFunctionNode.generated.js';\nexport { gammaDependencies } from './dependenciesNumber/dependenciesGamma.generated.js';\nexport { gcdDependencies } from './dependenciesNumber/dependenciesGcd.generated.js';\nexport { hasNumericValueDependencies } from './dependenciesNumber/dependenciesHasNumericValue.generated.js';\nexport { helpDependencies } from './dependenciesNumber/dependenciesHelp.generated.js';\nexport { HelpDependencies } from './dependenciesNumber/dependenciesHelpClass.generated.js';\nexport { hypotDependencies } from './dependenciesNumber/dependenciesHypot.generated.js';\nexport { indexDependencies } from './dependenciesNumber/dependenciesIndex.generated.js';\nexport { IndexNodeDependencies } from './dependenciesNumber/dependenciesIndexNode.generated.js';\nexport { InfinityDependencies } from './dependenciesNumber/dependenciesInfinity.generated.js';\nexport { isIntegerDependencies } from './dependenciesNumber/dependenciesIsInteger.generated.js';\nexport { isNaNDependencies } from './dependenciesNumber/dependenciesIsNaN.generated.js';\nexport { isNegativeDependencies } from './dependenciesNumber/dependenciesIsNegative.generated.js';\nexport { isNumericDependencies } from './dependenciesNumber/dependenciesIsNumeric.generated.js';\nexport { isPositiveDependencies } from './dependenciesNumber/dependenciesIsPositive.generated.js';\nexport { isPrimeDependencies } from './dependenciesNumber/dependenciesIsPrime.generated.js';\nexport { isZeroDependencies } from './dependenciesNumber/dependenciesIsZero.generated.js';\nexport { LN10Dependencies } from './dependenciesNumber/dependenciesLN10.generated.js';\nexport { LN2Dependencies } from './dependenciesNumber/dependenciesLN2.generated.js';\nexport { LOG10EDependencies } from './dependenciesNumber/dependenciesLOG10E.generated.js';\nexport { LOG2EDependencies } from './dependenciesNumber/dependenciesLOG2E.generated.js';\nexport { largerDependencies } from './dependenciesNumber/dependenciesLarger.generated.js';\nexport { largerEqDependencies } from './dependenciesNumber/dependenciesLargerEq.generated.js';\nexport { lcmDependencies } from './dependenciesNumber/dependenciesLcm.generated.js';\nexport { leftShiftDependencies } from './dependenciesNumber/dependenciesLeftShift.generated.js';\nexport { lgammaDependencies } from './dependenciesNumber/dependenciesLgamma.generated.js';\nexport { logDependencies } from './dependenciesNumber/dependenciesLog.generated.js';\nexport { log10Dependencies } from './dependenciesNumber/dependenciesLog10.generated.js';\nexport { log1pDependencies } from './dependenciesNumber/dependenciesLog1p.generated.js';\nexport { log2Dependencies } from './dependenciesNumber/dependenciesLog2.generated.js';\nexport { madDependencies } from './dependenciesNumber/dependenciesMad.generated.js';\nexport { mapDependencies } from './dependenciesNumber/dependenciesMap.generated.js';\nexport { mapTransformDependencies } from './dependenciesNumber/dependenciesMapTransform.generated.js';\nexport { matrixDependencies } from './dependenciesNumber/dependenciesMatrix.generated.js';\nexport { maxDependencies } from './dependenciesNumber/dependenciesMax.generated.js';\nexport { maxTransformDependencies } from './dependenciesNumber/dependenciesMaxTransform.generated.js';\nexport { meanDependencies } from './dependenciesNumber/dependenciesMean.generated.js';\nexport { meanTransformDependencies } from './dependenciesNumber/dependenciesMeanTransform.generated.js';\nexport { medianDependencies } from './dependenciesNumber/dependenciesMedian.generated.js';\nexport { minDependencies } from './dependenciesNumber/dependenciesMin.generated.js';\nexport { minTransformDependencies } from './dependenciesNumber/dependenciesMinTransform.generated.js';\nexport { modDependencies } from './dependenciesNumber/dependenciesMod.generated.js';\nexport { modeDependencies } from './dependenciesNumber/dependenciesMode.generated.js';\nexport { multinomialDependencies } from './dependenciesNumber/dependenciesMultinomial.generated.js';\nexport { multiplyDependencies } from './dependenciesNumber/dependenciesMultiply.generated.js';\nexport { multiplyScalarDependencies } from './dependenciesNumber/dependenciesMultiplyScalar.generated.js';\nexport { NaNDependencies } from './dependenciesNumber/dependenciesNaN.generated.js';\nexport { NodeDependencies } from './dependenciesNumber/dependenciesNode.generated.js';\nexport { normDependencies } from './dependenciesNumber/dependenciesNorm.generated.js';\nexport { notDependencies } from './dependenciesNumber/dependenciesNot.generated.js';\nexport { nthRootDependencies } from './dependenciesNumber/dependenciesNthRoot.generated.js';\nexport { nullDependencies } from './dependenciesNumber/dependenciesNull.generated.js';\nexport { numberDependencies } from './dependenciesNumber/dependenciesNumber.generated.js';\nexport { numericDependencies } from './dependenciesNumber/dependenciesNumeric.generated.js';\nexport { ObjectNodeDependencies } from './dependenciesNumber/dependenciesObjectNode.generated.js';\nexport { OperatorNodeDependencies } from './dependenciesNumber/dependenciesOperatorNode.generated.js';\nexport { orDependencies } from './dependenciesNumber/dependenciesOr.generated.js';\nexport { ParenthesisNodeDependencies } from './dependenciesNumber/dependenciesParenthesisNode.generated.js';\nexport { parseDependencies } from './dependenciesNumber/dependenciesParse.generated.js';\nexport { parserDependencies } from './dependenciesNumber/dependenciesParser.generated.js';\nexport { ParserDependencies } from './dependenciesNumber/dependenciesParserClass.generated.js';\nexport { partitionSelectDependencies } from './dependenciesNumber/dependenciesPartitionSelect.generated.js';\nexport { permutationsDependencies } from './dependenciesNumber/dependenciesPermutations.generated.js';\nexport { phiDependencies } from './dependenciesNumber/dependenciesPhi.generated.js';\nexport { piDependencies } from './dependenciesNumber/dependenciesPi.generated.js';\nexport { pickRandomDependencies } from './dependenciesNumber/dependenciesPickRandom.generated.js';\nexport { powDependencies } from './dependenciesNumber/dependenciesPow.generated.js';\nexport { printDependencies } from './dependenciesNumber/dependenciesPrint.generated.js';\nexport { prodDependencies } from './dependenciesNumber/dependenciesProd.generated.js';\nexport { quantileSeqDependencies } from './dependenciesNumber/dependenciesQuantileSeq.generated.js';\nexport { randomDependencies } from './dependenciesNumber/dependenciesRandom.generated.js';\nexport { randomIntDependencies } from './dependenciesNumber/dependenciesRandomInt.generated.js';\nexport { rangeDependencies } from './dependenciesNumber/dependenciesRange.generated.js';\nexport { RangeDependencies } from './dependenciesNumber/dependenciesRangeClass.generated.js';\nexport { RangeNodeDependencies } from './dependenciesNumber/dependenciesRangeNode.generated.js';\nexport { rangeTransformDependencies } from './dependenciesNumber/dependenciesRangeTransform.generated.js';\nexport { rationalizeDependencies } from './dependenciesNumber/dependenciesRationalize.generated.js';\nexport { RelationalNodeDependencies } from './dependenciesNumber/dependenciesRelationalNode.generated.js';\nexport { replacerDependencies } from './dependenciesNumber/dependenciesReplacer.generated.js';\nexport { resolveDependencies } from './dependenciesNumber/dependenciesResolve.generated.js';\nexport { ResultSetDependencies } from './dependenciesNumber/dependenciesResultSet.generated.js';\nexport { reviverDependencies } from './dependenciesNumber/dependenciesReviver.generated.js';\nexport { rightArithShiftDependencies } from './dependenciesNumber/dependenciesRightArithShift.generated.js';\nexport { rightLogShiftDependencies } from './dependenciesNumber/dependenciesRightLogShift.generated.js';\nexport { roundDependencies } from './dependenciesNumber/dependenciesRound.generated.js';\nexport { SQRT1_2Dependencies } from './dependenciesNumber/dependenciesSQRT1_2.generated.js'; // eslint-disable-line camelcase\n\nexport { SQRT2Dependencies } from './dependenciesNumber/dependenciesSQRT2.generated.js';\nexport { secDependencies } from './dependenciesNumber/dependenciesSec.generated.js';\nexport { sechDependencies } from './dependenciesNumber/dependenciesSech.generated.js';\nexport { signDependencies } from './dependenciesNumber/dependenciesSign.generated.js';\nexport { simplifyDependencies } from './dependenciesNumber/dependenciesSimplify.generated.js';\nexport { simplifyCoreDependencies } from './dependenciesNumber/dependenciesSimplifyCore.generated.js';\nexport { sinDependencies } from './dependenciesNumber/dependenciesSin.generated.js';\nexport { sinhDependencies } from './dependenciesNumber/dependenciesSinh.generated.js';\nexport { sizeDependencies } from './dependenciesNumber/dependenciesSize.generated.js';\nexport { smallerDependencies } from './dependenciesNumber/dependenciesSmaller.generated.js';\nexport { smallerEqDependencies } from './dependenciesNumber/dependenciesSmallerEq.generated.js';\nexport { sqrtDependencies } from './dependenciesNumber/dependenciesSqrt.generated.js';\nexport { squareDependencies } from './dependenciesNumber/dependenciesSquare.generated.js';\nexport { stdDependencies } from './dependenciesNumber/dependenciesStd.generated.js';\nexport { stdTransformDependencies } from './dependenciesNumber/dependenciesStdTransform.generated.js';\nexport { stirlingS2Dependencies } from './dependenciesNumber/dependenciesStirlingS2.generated.js';\nexport { stringDependencies } from './dependenciesNumber/dependenciesString.generated.js';\nexport { subsetDependencies } from './dependenciesNumber/dependenciesSubset.generated.js';\nexport { subsetTransformDependencies } from './dependenciesNumber/dependenciesSubsetTransform.generated.js';\nexport { subtractDependencies } from './dependenciesNumber/dependenciesSubtract.generated.js';\nexport { sumDependencies } from './dependenciesNumber/dependenciesSum.generated.js';\nexport { sumTransformDependencies } from './dependenciesNumber/dependenciesSumTransform.generated.js';\nexport { SymbolNodeDependencies } from './dependenciesNumber/dependenciesSymbolNode.generated.js';\nexport { tanDependencies } from './dependenciesNumber/dependenciesTan.generated.js';\nexport { tanhDependencies } from './dependenciesNumber/dependenciesTanh.generated.js';\nexport { tauDependencies } from './dependenciesNumber/dependenciesTau.generated.js';\nexport { trueDependencies } from './dependenciesNumber/dependenciesTrue.generated.js';\nexport { typeOfDependencies } from './dependenciesNumber/dependenciesTypeOf.generated.js';\nexport { typedDependencies } from './dependenciesNumber/dependenciesTyped.generated.js';\nexport { unaryMinusDependencies } from './dependenciesNumber/dependenciesUnaryMinus.generated.js';\nexport { unaryPlusDependencies } from './dependenciesNumber/dependenciesUnaryPlus.generated.js';\nexport { unequalDependencies } from './dependenciesNumber/dependenciesUnequal.generated.js';\nexport { EDependencies } from './dependenciesNumber/dependenciesUppercaseE.generated.js';\nexport { PIDependencies } from './dependenciesNumber/dependenciesUppercasePi.generated.js';\nexport { varianceDependencies } from './dependenciesNumber/dependenciesVariance.generated.js';\nexport { varianceTransformDependencies } from './dependenciesNumber/dependenciesVarianceTransform.generated.js';\nexport { versionDependencies } from './dependenciesNumber/dependenciesVersion.generated.js';\nexport { xgcdDependencies } from './dependenciesNumber/dependenciesXgcd.generated.js';\nexport { xorDependencies } from './dependenciesNumber/dependenciesXor.generated.js';\nexport { all } from './allFactoriesNumber.js';", "// configuration\nexport { config } from './configReadonly.js'; // functions and constants\n\nexport * from './pureFunctionsNumber.generated.js';\nexport * from './impureFunctionsNumber.generated.js';\nexport * from './typeChecks.js'; // error classes\n\nexport { IndexError } from '../error/IndexError.js';\nexport { DimensionError } from '../error/DimensionError.js';\nexport { ArgumentsError } from '../error/ArgumentsError.js'; // dependency groups\n\nexport * from './dependenciesNumber.generated.js'; // factory functions\n\nexport * from '../factoriesNumber.js'; // core\n\nexport { create } from '../core/create.js';\nexport { factory } from '../utils/factory.js';", "export * from './entry/mainNumber.js';", "import { openURL } from './window_manager';\nimport { showToastMessage } from './show_toast_message';\nimport { initializeTomSelect } from './tom_select';\nimport { round as mathjsRound } from 'mathjs/number';\n\nexport function updateZadanaUhradaLabels() {\n  const sumVal = Array.from(\n    this.element.querySelectorAll(\n      '#zadana-uhradas .payment:not([style=\"display: none;\"]) input[id*=\"_suma\"]'\n    ),\n    input => parseNumber(input.value)\n  ).reduce((sum, value) => sum + value, 0);\n\n  const paymentVal = round(\n    sumVal +\n      parseNumber(\n        document.querySelector('#label-paying-the-invoice')?.innerHTML\n      )\n  );\n\n  this.element.querySelector('#label-manual-payments').textContent =\n    formatNumber(sumVal);\n  this.element.querySelector('#label-payments').textContent =\n    formatNumber(paymentVal);\n\n  const chboxEl = document.querySelector('#pay_fully');\n\n  if (paymentVal && chboxEl) {\n    chboxEl.removeAttribute('disabled');\n    chboxEl.checked = false;\n  }\n}\n\nexport async function appendAnalytUcetSelect(value, select) {\n  try {\n    const url = new URL('/analyt_ucets', location);\n    url.searchParams.set('synt_ucet_id', value);\n\n    const json = await getJSON(url);\n    const tsObj = select.tomselect;\n\n    if (!tsObj) return;\n\n    tsObj.clear();\n    tsObj.destroy();\n    select.innerHTML = `<option value label=\" \"></option>`;\n\n    json.forEach((ucet, i) => {\n      select.innerHTML += `<option ${\n        i === 0 ? 'selected=\"selected\"' : ''\n      } data-kod=\"${ucet.kod}\" data-concated=\"${ucet.kod} - ${\n        ucet.nazov\n      }\" value=\"${ucet.id}\">${ucet.kod}</option>\n\t\t\t`;\n    });\n\n    initializeTomSelect([select]);\n\n    tsObj.focus();\n  } catch (err) {\n    throw err;\n  }\n}\n\nexport async function getJSON(url) {\n  try {\n    const res = await fetch(url);\n\n    if (!res.ok) return throwError(res);\n\n    return await res.json();\n  } catch (err) {\n    throw err;\n  }\n}\n\nexport async function postJSON(url, body, method = 'POST') {\n  try {\n    const res = await fetch(url, {\n      method: method,\n      headers: {\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\")?.content\n      },\n      body: JSON.stringify(body)\n    });\n\n    if (!res.ok) return throwError(res);\n\n    const json = await res.json();\n\n    return json;\n  } catch (err) {\n    throw err;\n  }\n}\n\nexport async function deleteJSON(url) {\n  try {\n    const res = await fetch(url, {\n      method: 'DELETE',\n      headers: {\n        Accept: 'application/json, text/plain, text/html, */*',\n        'Content-Type': 'application/json',\n        'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\")?.content\n      }\n    });\n\n    if (!res.ok) return throwError(res);\n\n    const json = await res.json();\n\n    return json;\n  } catch (err) {\n    throw err;\n  }\n}\n\nexport async function getFormData(url) {\n  try {\n    const res = await fetch(url);\n\n    if (!res.ok) return throwError(res);\n\n    return res;\n  } catch (err) {\n    throw err;\n  }\n}\n\nexport async function postFormData(url, body) {\n  try {\n    const res = await fetch(url, {\n      method: 'POST',\n      headers: {\n        'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\")?.content\n      },\n      body: body\n    });\n\n    if (!res.ok) return throwError(res);\n\n    return res;\n  } catch (err) {\n    throw err;\n  }\n}\n\nconst throwError = async res => {\n  const body = await res.text();\n  const [contentType] = res.headers\n    .get('Content-Type')\n    .split(';')\n    .map(str => str.trim());\n\n  throw new Error(\n    contentType === 'text/plain'\n      ? `\u26A0\uFE0F ${body}`\n      : `\uD83D\uDD25 <strong>Request finished with ${res.statusText} (${res.status})</strong>`\n  );\n};\n\nexport const round = function (number, precision = 2) {\n  // old way\n  // Math.round(number * 10 ** precision) / 10 ** precision;\n\n  return mathjsRound(number || 0, precision);\n};\n\nexport const parseNumber = number => {\n  const result = +(number ?? 0)\n    .toString()\n    .replace(/\\s+/g, '')\n    .replace(/\\u00A0/g, '')\n    .replace(/&nbsp;/g, '')\n    .replace(',', '.');\n\n  return isNaN(result) ? 0 : result;\n};\n\nexport const formatNumber = (number, precision = 2) =>\n  new Intl.NumberFormat('sk-SK', {\n    style: 'decimal',\n    minimumFractionDigits: precision ?? 2,\n    maximumFractionDigits: precision ?? 2\n  }).format(parseNumber(number));\n\nexport const changeItemSzcp = (target, item, suffix) => {\n  if (confirm('Nastavi\u0165 zadan\u00E9 SZ\u010CP aj na polo\u017Ekach dokladu?')) {\n    document.querySelectorAll(item).forEach(udp => {\n      udp\n        .querySelector(`select[id*=${suffix}]`)\n        .tomselect.setValue(target.value);\n    });\n  }\n\n  setTimeout(() => {\n    target.tomselect.close();\n  }, 250);\n};\n\nexport const onSyntUcetChange = async function (e) {\n  try {\n    const { parent } = e.target.dataset;\n\n    if (!parent) return;\n\n    const analytUcetEl = e.target\n      .closest(parent)\n      .querySelector('select[id*=\"_analyt_ucet_id\"]');\n\n    if (!e.target.value) {\n      analytUcetEl.tomselect.setValue(null, false);\n      analytUcetEl.tomselect.clearOptions();\n\n      return;\n    }\n\n    const json = await getJSON(`/analyt_ucets?synt_ucet_id=${e.target.value}`);\n\n    if (analytUcetEl.tomselect) {\n      analytUcetEl.tomselect.clear();\n      analytUcetEl.tomselect.destroy();\n    }\n\n    analytUcetEl.innerHTML = `<option value label=\" \"></option>`;\n\n    json.forEach((ucet, i) => {\n      analytUcetEl.innerHTML += `<option ${\n        i === 0 ? 'selected=\"selected\"' : ''\n      } data-kod=\"${ucet.kod}\" data-concated=\"${ucet.kod} - ${\n        ucet.nazov\n      }\" value=\"${ucet.id}\">${ucet.kod}</option>`;\n    });\n\n    initializeTomSelect([analytUcetEl]);\n\n    analytUcetEl.tomselect.focus();\n  } catch (err) {\n    showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n  }\n};\n\nexport const popupHelpers = {\n  onSubmitButton() {\n    window.onbeforeunload = null;\n  },\n  onStornoButton(e) {\n    window.onbeforeunload = null;\n\n    const invalidHref =\n      (e.target.hasAttribute('href') && e.target.getAttribute('href') === '') ||\n      !e.target.hasAttribute('href');\n\n    if (invalidHref) {\n      // most likely a copied record with an error message\n      // backid is lost in backend, use window.location.pathname.split('/')[1] instead\n      if (window.location.search.includes('backid')) {\n        const id = new URLSearchParams(window.location.search).get('backid');\n\n        openURL(`/${window.location.pathname.split('/')[1]}/${id}`, {\n          target: '_self'\n        });\n      } else {\n        window.close();\n      }\n    }\n  }\n};\n\nexport const simpleCardMethods = {\n  show(e) {\n    if (e.target.closest('.table__buttons')) return;\n\n    const { href } = e.currentTarget.dataset;\n\n    if (!href) return;\n\n    window.location = href;\n  },\n  async delete(e) {\n    e.preventDefault();\n\n    const btnEl = e.target?.closest('[type=\"submit\"]');\n    btnEl?.setAttribute('disabled', 'disabled');\n\n    try {\n      const parent = e.target.closest('tr.table__item');\n      const { href, confirm: confirmMessage } = parent.dataset;\n\n      if (!confirm(confirmMessage)) return;\n\n      const json = await deleteJSON(href);\n      const { status, message } = json;\n\n      if (status) return window.location.reload();\n      if (message)\n        showToastMessage(message, { autohide: false, type: 'bg-danger' });\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      btnEl?.removeAttribute('disabled');\n    }\n  }\n};\n\nexport const appendCanvas = async function (e, block) {\n  try {\n    const url = new URL(\n      `/${location.pathname\n        .split('/')\n        .filter(s => s)\n        .shift()\n        .dasherize()}/append-canvas`,\n      location\n    );\n    const { method, id } = e.currentTarget.dataset;\n\n    url.searchParams.set('method', method);\n    if (id) url.searchParams.set('id', id);\n\n    const canvas = document.querySelector('#canvas');\n    const canvasObj = new bootstrap.Offcanvas(canvas);\n\n    if (method.includes('import')) {\n      canvas.classList.add('offcanvas-start');\n    } else if (method.includes('sk_quick_search')) {\n      canvas.classList.add('offcanvas-bottom');\n    } else {\n      canvas.classList.add('offcanvas-end');\n    }\n\n    canvas.addEventListener('hidden.bs.offcanvas', event => {\n      canvas.classList.remove(\n        'offcanvas-end',\n        'offcanvas-start',\n        'offcanvas-bottom'\n      );\n    });\n\n    const json = await getJSON(url);\n\n    if (json.html) canvas.innerHTML = json.html;\n\n    setTimeout(() => {\n      //TODO: why this have to be in setTimeout?\n      // doesnt show animation without it\n      canvasObj.show();\n    }, 100);\n\n    if (block) block(canvas, method);\n  } catch (err) {\n    showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n  }\n};\n\nif (!String.prototype.dasherize) {\n  String.prototype.dasherize = function () {\n    return this.replace(\n      /^([A-Z])|[\\s\\._](\\w)/g,\n      function (match, p1, p2, offset) {\n        if (p2) return '-' + p2.toLowerCase();\n        return p1.toLowerCase();\n      }\n    );\n  };\n}\n\nexport const eightyPercent = function (\n  e,\n  block,\n  type = 'pd',\n  optionName = 'PHM 20%'\n) {\n  try {\n    const parentEl = e.target.closest(`.${type}-polozka`);\n    const sumaSdphEl = parentEl.querySelector('[name$=\"[suma_s_dph]\"]');\n    const hundredVal = parseNumber(sumaSdphEl.value);\n\n    if (!sumaSdphEl.value) return;\n\n    sumaSdphEl.value = formatNumber(hundredVal * 0.8);\n\n    document.querySelector(`#${type}_polozkas .add-fields`).click();\n\n    const addedEl = [\n      ...document.querySelectorAll(\n        `#${type}_polozkas .${type}-polozka:not([style=\"display: none;\"])`\n      )\n    ].pop();\n    const typEl = addedEl.querySelector(`[name$=\"[${type}_typ_id]\"]`);\n    const phm20El =\n      [...typEl.options].filter(o => o.innerHTML.includes(optionName)).pop() ||\n      [...typEl.options].pop();\n\n    if (!phm20El) return;\n\n    [\n      e.target.closest('button'),\n      addedEl.querySelector(`[data-action$=\"#eightyPercent\"]`)\n    ].forEach(el => el.setAttribute('disabled', 'disabled'));\n\n    typEl.tomselect.setValue(phm20El.value, false);\n    addedEl.querySelector('[name$=\"[suma_s_dph]\"]').value = formatNumber(\n      hundredVal * 0.2\n    );\n\n    this[`on${capitalize(type)}TypChange`]({ target: typEl });\n\n    block(parentEl, addedEl);\n  } catch (err) {\n    showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n  }\n};\n\nexport const capitalize = str => str.charAt(0).toUpperCase() + str.slice(1);\n\nexport const getCurrentController = url =>\n  url.pathname\n    .split('/')\n    .filter(el => el)\n    .shift()\n    .dasherize();\n\nexport const getStimulusController = (\n  controllerName,\n  node = document.querySelector('main[role=\"main\"]')\n) =>\n  window.Stimulus.dispatcher.application.getControllerForElementAndIdentifier(\n    node,\n    controllerName\n  );\n\n/**\n * Executes a method on a Stimulus controller when it's ready\n * @param {string} controllerName - The name of the controller\n * @param {string} methodName - The name of the method to call\n * @param {Array} args - Arguments to pass to the method\n * @param {HTMLElement} node - The node to find the controller on (defaults to main element)\n * @param {number} maxAttempts - Maximum number of attempts to find the controller (defaults to 10)\n * @param {number} interval - Interval between attempts in milliseconds (defaults to 100)\n * @returns {Promise} - Resolves with the result of the method call or rejects if controller not found\n */\nexport const whenControllerReady = (\n  controllerName,\n  methodName,\n  args = [],\n  node = document.querySelector('main[role=\"main\"]'),\n  maxAttempts = 10,\n  interval = 100\n) => {\n  return new Promise((resolve, reject) => {\n    let attempts = 0;\n\n    const tryGetController = () => {\n      const controller = getStimulusController(controllerName, node);\n\n      if (controller && typeof controller[methodName] === 'function') {\n        // Controller is ready, call the method\n        const result = controller[methodName](...args);\n        resolve(result);\n        return;\n      }\n\n      attempts++;\n\n      if (attempts >= maxAttempts) {\n        // Give up after max attempts\n        reject(\n          new Error(\n            `Controller \"${controllerName}\" or method \"${methodName}\" not found after ${maxAttempts} attempts`\n          )\n        );\n        return;\n      }\n\n      // Try again after interval\n      setTimeout(tryGetController, interval);\n    };\n\n    // Start trying to get the controller\n    tryGetController();\n  });\n};\n\nexport const showFilter = async function (e) {\n  const parent = this.element.parentElement;\n  const filterId = parent.querySelector('select[id$=\"_filter_id\"]').value;\n  const [abbrev] = document.title.toLowerCase().split(' - ');\n\n  if (!abbrev) return;\n\n  openURL(`/${abbrev}_filters/${filterId ? filterId : 'new'}.html`, {\n    parentUrl: new URL(location)\n  });\n};\n\nexport const showRecord = function (e) {\n  e.preventDefault();\n\n  const parent =\n    e.target.closest('.payment') ||\n    e.target.closest('.record') ||\n    e.target.closest('.invoice') ||\n    e.target.closest('.assigned') ||\n    e.target.closest('tr[role=\"button\"]') ||\n    e.target.closest('button[type=\"button\"]');\n  const { href } = parent.dataset;\n\n  if (!href) return;\n\n  openURL(href, { parentUrl: new URL(location) });\n};\n\nexport const open = function (e) {\n  const target = e.target;\n  const button = target.closest('button');\n\n  if (!button) return;\n\n  const { href, dereference, tab } = button.dataset;\n\n  if (!href) return;\n\n  openURL(href, {\n    parentUrl: new URL(location),\n    dereference: dereference === 'true',\n    tab: tab === 'true'\n  });\n};\n\nexport const callCalcSumFunction = function () {\n  if (window?.calcSumCount) window.calcSumCount();\n  if (this?.calcSumCount) this.calcSumCount();\n};\n\nexport const showSkladovaKarta = function (e) {\n  const target = e.target;\n  let id =\n    target\n      .closest('.input-group')\n      ?.querySelector('select.tom-select[id*=\"_skladova_karta_id\"]')?.value ||\n    'new';\n\n  openURL(`/skladova_kartas/${id}`, {\n    parentUrl: new URL(location.toString())\n  });\n};\n\nexport const reloadDanovyPomerOptions = async function (\n  date,\n  selectedValue = null\n) {\n  try {\n    const danovyPomersArr = this.element.querySelectorAll(\n      'select[id$=\"_danovy_pomer_id\"]'\n    );\n    const url = new URL('/danovy_pomers.json', location);\n\n    if (date) url.searchParams.set('date', date);\n\n    const json = await getJSON(url.toString());\n\n    danovyPomersArr.forEach(select => {\n      const selected = selectedValue || 1;\n\n      // Clear existing options\n      select.tomselect.destroy();\n      select.innerHTML = '';\n\n      // Add new options from JSON\n      json.forEach(option => {\n        const optionElement = document.createElement('option');\n\n        optionElement.value = option.id;\n        optionElement.textContent = option.concated;\n\n        select.appendChild(optionElement);\n      });\n\n      // Restore selected value if it still exists in new options\n      if (selected && select.querySelector(`option[value=\"${selected}\"]`)) {\n        select.value = selected;\n      }\n    });\n\n    initializeTomSelect(danovyPomersArr);\n  } catch (err) {\n    showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n  }\n};\n\nexport const updateDanovyPomerSelectboxes = function () {\n  const danovyPomersArr = document.querySelectorAll(\n    '[data-danovy-pomer-selectbox-target=\"selectbox\"]'\n  );\n\n  danovyPomersArr.forEach(select => {\n    const controller = getStimulusController(\n      'danovy-pomer-selectbox',\n      select.closest('[data-controller=\"danovy-pomer-selectbox\"]')\n    );\n\n    controller?.connect();\n  });\n};\n\nexport const onPartnerChange = async function (e) {\n  const partnerId = e.target.value;\n\n  if (!partnerId) {\n    document.querySelector('#collapse_partner').replaceChildren();\n    return;\n  }\n\n  try {\n    const response = await getFormData(`/partners/${partnerId}/info`);\n\n    window.Turbo.renderStreamMessage(await response.text());\n  } catch (err) {\n    showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n  }\n};\n\nexport const onDodavatelChange = async function (e) {\n  const dodavatelId = e.target.value;\n\n  if (!dodavatelId) {\n    document.querySelector('#collapse_dodavatel').replaceChildren();\n    return;\n  }\n\n  try {\n    const response = await getFormData(`/dodavatels/${dodavatelId}/info`);\n\n    window.Turbo.renderStreamMessage(await response.text());\n  } catch (err) {\n    showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n  }\n};\n", "export default [\n  'bank_vypis_index',\n  'dp_ppo_index',\n  'dodaci_list_index',\n  'dosla_faktura_index',\n  'dosla_zalohova_faktura_index',\n  'objednavka_index',\n  'odoslana_faktura_index',\n  'odoslana_zalohova_faktura_index',\n  'partner_index',\n  'prijemka_vydajka_index',\n  'pokladnicny_doklad_index',\n  'predajka_index',\n  'uctovny_doklad_index',\n  'upomienka_index',\n  'vykaz_index',\n  'zapocet_index',\n  'zavazok_index',\n];\n", "export default [\n  'dosla_fakturas_show',\n  'odoslana_fakturas_show',\n  'upomienkas_show',\n  'zapocets_show',\n  'zavazoks_show',\n];\n", "export default [\n  'bank_vypis_show_new',\n  'dosla_faktura_show_new',\n  'pokladnicny_doklad_show_new',\n];\n", "export default [\n  'bv_filter_update',\n  'df_filter_update',\n  'dpf_filter_update',\n  'hk_filter_update',\n  'pd_filter_update',\n  'of_filter_update',\n  'opf_filter_update',\n  'sk_filter_update',\n  'uden_filter_update',\n  'ud_filter_update',\n  'zav_filter_update',\n];\n", "export default ['bv_typs_update', 'pd_typs_update', 'df_typs_update'];\n", "import consumer from './consumer';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport {\n  parseNumber,\n  formatNumber,\n  getStimulusController,\n  updateDanovyPomerSelectboxes\n} from '../utils';\nimport indexTargets from './targets/indices';\nimport showTargets from './targets/shows';\nimport showNewsTargets from './targets/show_news';\nimport filterProperties from './properties/filters';\nimport typsProperties from './properties/typs';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport { initializeTomSelect } from '../tom_select';\n\nconsumer.subscriptions.create('NotificationsChannel', {\n  connected() {\n    console.log('notifications_channel connected');\n\n    const baseHandler = (targets, handler) =>\n      targets.reduce((hash, target) => {\n        hash[target] = handler;\n\n        return hash;\n      }, {});\n\n    this.handlers = {\n      ...baseHandler(indexTargets, handleIndex),\n      ...baseHandler(filterProperties, handleFilter),\n      ...baseHandler(showTargets, handleShow),\n      ...baseHandler(showNewsTargets, handleShowNew),\n      ...baseHandler(typsProperties, handleTyps),\n      ...baseHandler(['danovy_pomers_update'], updateDanovyPomerSelectboxes),\n      bank_ucet_update: handleBankUcetUpdate,\n      evid_update: handleEvidUpdate,\n      sklad_update: handleSkladUpdate,\n      partners_update: handlePartnersUpdate,\n      pokladna_update: handlePokladnaUpdate,\n      vykaz_update: handleVykazUpdate,\n      sk_kateg_update: handleFilter,\n      ciselny_rads_update: handleCiselnyRadUpdate,\n      ciselny_rads_destroy: handleCiselnyRadsDestroy,\n      analyt_ucets_update: handleAnalytUcetsUpdate,\n      analyt_ucets_destroy: handleAnalytUcetsDestroy,\n      firma_destroy: () =>\n        location.replace(location.origin.replace(/\\d{5,}/, 'public')),\n      firma_create: data =>\n        location.replace(location.origin.replace(/\\d{5,}|public/, data.schema)),\n      firma_public_user_create: handleFirmaPublicUserCreate,\n      firma_public_user_destroy: handleFirmaPublicUserDestroy,\n      progress_bar: handleProgressBar,\n      of_druh_polozkies_update: handleOfDruhPolozkiesUpdate,\n      advance_invoice: handleAdvanceInvoice,\n      hosp_roky_update: handleHospRokyUpdate\n    };\n  },\n\n  disconnected() {\n    console.log('notifications_channel disconnected');\n  },\n\n  received(data) {\n    const { target, property } = data;\n\n    if (this.handlers[target || property]) {\n      this.handlers[target || property](data);\n\n      return;\n    }\n\n    if (!data.message) return;\n\n    showToastMessage(\n      data.message,\n      data.status === 'success'\n        ? {}\n        : {\n            autohide: false,\n            type: 'bg-danger'\n          }\n    );\n  }\n});\n\nconst triggerStrimulusAction = function (actionName) {\n  const element = document.querySelector(`[data-action$=\"#${actionName}\"]`);\n\n  if (!element) return;\n\n  element.dispatchEvent(new Event('force-update'));\n};\n\nconst addNewlyAdded = function (html, update = false) {\n  const newlyAdded = document.querySelector('#newly_added');\n  const table = newlyAdded.querySelector('table#list_newly_added tbody');\n\n  if (!update) {\n    if (newlyAdded.hasAttribute('hidden')) {\n      newlyAdded.removeAttribute('hidden');\n      const reflow = newlyAdded.offsetHeight;\n      newlyAdded.classList.add('show');\n    }\n\n    return table.insertAdjacentHTML('beforeend', html);\n  }\n\n  const tr = document.createElement('tbody');\n\n  tr.innerHTML = html;\n\n  const addedTr = table.querySelector(\n    `tr[data-href=\"${tr.querySelector('tbody tr').dataset.href}\"]`\n  );\n\n  if (!addedTr) return;\n\n  addedTr.remove();\n  table.insertAdjacentHTML('beforeend', html);\n};\n\nconst updateSelectbox = function (\n  selector = [] || '',\n  data = [],\n  customTextValueBlock,\n  customOptionDatasetBlock\n) {\n  let selects = [];\n  if (NodeList.prototype.isPrototypeOf(selector)) {\n    selects = selector;\n  } else if (typeof selector === 'string') {\n    selects = document.querySelectorAll(selector);\n  } else {\n    alert('Unsupported selector type');\n  }\n\n  if (selects.length == 0) return;\n\n  selects.forEach(select => {\n    const tomselect = select.tomselect;\n    const selectedValue = tomselect.getValue().toString();\n    tomselect.clear(true);\n    tomselect.clearOptions();\n    tomselect.destroy();\n\n    select.innerHTML = '';\n\n    if (select.dataset.allowClear === 'true') {\n      select.append(new Option());\n    }\n\n    data.forEach(item => {\n      let textValue = item.kod;\n\n      if (customTextValueBlock) textValue = customTextValueBlock(select, item);\n\n      let option = new Option(textValue, item.id);\n\n      if (customOptionDatasetBlock)\n        option = customOptionDatasetBlock(option, item);\n\n      select.append(option);\n    });\n\n    initializeTomSelect([select]);\n    select.tomselect.setValue(selectedValue ? selectedValue : null, true);\n  });\n\n  const name = selects[0].name;\n  if (\n    ['df_typ_id', 'pd_typ_id', 'bv_typ_id', 'of_druh_polozky_id'].some(el =>\n      name.endsWith(`[${el}]`)\n    )\n  ) {\n    const params = name.match(/\\b\\w+/g); // \"dosla_faktura[df_polozkas_attributes][0][df_typ_id]\" => ['dosla_faktura', 'df_polozkas_attributes', '0', 'df_typ_id']\n    const parent = params[0];\n    const child = params[1].replace('_attributes', '');\n    const cisMena = document.querySelector('[name$=\"[cis_mena_id]\"]');\n\n    // do not update on partner modal\n    if (parent === 'partner') return;\n\n    let url = new URL(\n      `/${parent.replace(/_/g, '-')}s/update-add-field`,\n      location\n    );\n\n    url.searchParams.set('class', parent);\n    url.searchParams.set('target_id', child);\n\n    if (!cisMena) return;\n\n    url.searchParams.set('cis_mena_id', cisMena.value);\n\n    makeRequest(url)\n      .then(response => {\n        window.Turbo.renderStreamMessage(response.html);\n      })\n      .catch(error => {\n        showToastMessage(error.message, {\n          autohide: false,\n          type: 'bg-danger'\n        });\n      });\n  }\n};\n\nconst handleIndex = function (data) {\n  const { okruh, property, message, status } = data;\n\n  if (\n    !document.querySelector(\n      `form[data-update-list=\"list\"][action=\"/lists/filter?oid=${okruh}\"]`\n    ) &&\n    property !== 'vykaz_refresh'\n  )\n    return;\n\n  const baseHandler = (suffix, handler) =>\n    indexTargets.reduce((hash, property) => {\n      hash[property.replace('_index', suffix)] = handler;\n\n      return hash;\n    }, {});\n\n  const propertyHandlers = {\n    ...baseHandler('_refresh', dataParam => refreshList.call(this, dataParam)),\n    ...baseHandler('_deleted', dataParam => markRemoved.call(this, dataParam)),\n    ...baseHandler('_new', dataParam =>\n      addNewlyAdded.call(this, dataParam.html)\n    ),\n    ...baseHandler('_update', dataParam =>\n      addNewlyAdded.call(this, dataParam.html, true)\n    ),\n    ...baseHandler('_render', dataParam => {\n      const { turbo_stream: turbo } = dataParam;\n      if (turbo) window.Turbo.renderStreamMessage(turbo);\n    })\n  };\n\n  if (!propertyHandlers[property]) {\n    return showToastMessage(\n      message,\n      status === 'success'\n        ? {}\n        : {\n            autohide: false,\n            type: 'bg-danger'\n          }\n    );\n  }\n\n  propertyHandlers[property](data);\n};\n\nconst refreshList = function (data) {\n  const { okruh, property, message, status, target } = data;\n\n  if (property !== 'vykaz_refresh') return;\n\n  switch (target) {\n    case 'dp_ppo_index':\n      document.querySelector('[data-action=\"dp-ppos-index#refresh\"]')?.click();\n      return;\n    case 'vykaz_index':\n      document\n        .querySelector('[data-vykazs-index-target=\"submitButtons\"]')\n        ?.click();\n      return;\n    default:\n      break;\n  }\n\n  alert(`Refresh list for property: ${property} not implemented`);\n};\n\nconst markRemoved = function (data) {\n  const { target, id, message } = data;\n\n  showToastMessage(message);\n\n  let row = document.querySelector(\n    `table#list tr.item[data-href$=\"${target\n      .toString()\n      .replace('_index', '')}s/${id}\"]`\n  );\n\n  // special case for bank_vypis(es)_xxx\n  if (!row) {\n    row = document.querySelector(\n      `table#list tr.item[data-href$=\"${target\n        .toString()\n        .replace('_index', '')}es/${id}\"]`\n    );\n  }\n\n  if (!row) return;\n\n  row.classList.remove('bg-warning-200');\n  row.classList.add('bg-danger');\n  row.setAttribute('data-message', message);\n};\n\nconst handleFilter = function (data) {\n  const { message, selector } = data;\n\n  if (message) showToastMessage(message);\n\n  updateSelectbox(selector, data.data, (_, option) => {\n    return option.nazov;\n  });\n};\n\nconst handleShow = function (data) {\n  const { selector, property, ids } = data;\n\n  // specific record\n  if (document.querySelector(selector)) return updateRecord(data);\n\n  // any record\n  if (!document.querySelector('form[id*=\"_faktura\"]')) return;\n\n  if (property === 'uctovne_zaradenies_update') {\n    updateSelectbox(\n      'select[name$=\"[uctovne_zaradenie_id]\"]',\n      data.data,\n      (_, option) => {\n        return option.nazov;\n      }\n    );\n  }\n\n  if (property === 'delete_manual_payments') {\n    ids.forEach(id => {\n      const payment = document.querySelector(\n        `#zadana-uhradas div[data-id=\"${id}\"]`\n      );\n\n      if (!payment) return;\n\n      payment.remove();\n\n      typeof window.updateZadanaUhradaLabels === 'undefined'\n        ? triggerStrimulusAction('updateZadanaUhradaLabels')\n        : window.updateZadanaUhradaLabels();\n    });\n  }\n};\n\nconst updateRecord = function (data) {\n  const { property, action, html, id, message, status } = data;\n\n  if (property === 'partial_invoice') {\n    const table = document.querySelector('#priradene_ciastocne table tbody');\n\n    switch (action) {\n      case 'add':\n        table.insertAdjacentHTML('beforeend', html);\n        break;\n      case 'delete':\n        table.querySelector(`tr[data-id=\"${id}\"]`).remove();\n        break;\n      default:\n        table.querySelector(`tr[data-id=\"${id}\"]`).innerHTML = html\n          .replace(`<tr data-id=\"${id}\">`, '')\n          .replace('</tr>', '');\n    }\n\n    const sums = Array.from(table.querySelectorAll('tr:not(.info)')).reduce(\n      (obj, tr) => {\n        obj.withVat += parseNumber(tr.querySelector('.with-vat').innerHTML);\n        obj.withoutVat += parseNumber(\n          tr.querySelector('.without-vat').innerHTML\n        );\n\n        return obj;\n      },\n      { withVat: 0, withoutVat: 0 }\n    );\n\n    document.querySelector('#label-partial-with-vat').innerHTML = formatNumber(\n      sums.withVat\n    );\n\n    document.querySelector('#label-partial-without-vat').innerHTML =\n      formatNumber(sums.withoutVat);\n\n    triggerStrimulusAction('onZlavaPercKeyup');\n\n    return showSubmitButton(table);\n  }\n\n  showToastMessage(\n    message,\n    status === 'success'\n      ? {}\n      : {\n          autohide: false,\n          type: 'bg-danger'\n        }\n  );\n\n  if (!html) return;\n\n  window.Turbo.renderStreamMessage(html);\n};\n\nconst handleShowNew = function (data) {\n  if (\n    !document.querySelector(\n      `form[id*=\"${data.target.toString().replace('_show_new', '')}\"]`\n    )\n  )\n    return;\n\n  if (data.property !== 'assign_records') return;\n\n  const visibleAssignedTable = [\n    ...document.querySelectorAll('table#assigned')\n  ].filter(dom => dom.getClientRects().length !== 0)[0];\n\n  if (visibleAssignedTable) visibleAssignedTable.innerHTML = data.html;\n\n  updatePartnerElements(visibleAssignedTable, data.option);\n\n  const sumaB = visibleAssignedTable.querySelector('[name$=\"[suma_b]\"]');\n  if (sumaB) {\n    triggerStrimulusAction('onSumaBKeyup');\n    sumaB.dispatchEvent(new Event('keyup', { bubbles: true }));\n  }\n  showSubmitButton(document.querySelector('table#assigned'));\n};\n\nconst updatePartnerElements = function (table, option) {\n  const partnerSel = document.querySelector('select[name$=\"[partner_id]\"]');\n  const partnerInp = document.querySelector('input[name$=\"[partner_id]\"]');\n\n  if (\n    table.querySelectorAll(\n      'table#assigned tr.assigned input[name$=\"[_destroy]\"]:not([value=\"true\"])'\n    ).length === 0\n  ) {\n    partnerSel.tomselect\n      ? partnerSel.tomselect.enable()\n      : partnerSel.removeAttribute('disabled');\n\n    return partnerInp.setAttribute('disabled', 'disabled');\n  }\n\n  if (partnerSel.tomselect) partnerSel.tomselect.destroy();\n\n  partnerSel.innerHTML = option;\n\n  initializeTomSelect([partnerSel]);\n  partnerSel.tomselect.disable();\n\n  partnerInp.value = partnerSel.value;\n  partnerInp.removeAttribute('disabled');\n};\n\nconst handleBankUcetUpdate = data =>\n  updateSelectbox.call(this, data.selector, data.data, null, (option, item) => {\n    option.dataset.kod = item.kod_banky;\n\n    return option;\n  });\n\nconst handleVykazUpdate = function (data) {\n  updateSelectbox.call(\n    this,\n    data.selector,\n    data.data,\n    (select, option) => {\n      return option.nazov;\n    },\n    (option, item) => {\n      if (item.zostava) option.dataset.zostava = item.zostava;\n\n      option.dataset.custom = !item.protected;\n      if (item.stredisko_id) option.dataset.strediskoId = item.stredisko_id;\n      if (item.zakazka_id) option.dataset.zakazkaId = item.zakazka_id;\n      if (item.cinnost_id) option.dataset.cinnostId = item.cinnost_id;\n      if (item.pracovnik_id) option.dataset.pracovnikId = item.pracovnik_id;\n      if (item.tuj) option.dataset.tuj = item.tuj;\n\n      return option;\n    }\n  );\n};\n\nconst handlePokladnaUpdate = data =>\n  updateSelectbox.call(this, data.selector, data.data, null, (option, item) => {\n    option.dataset.crPrijemId = item.ciselny_rad_p;\n    option.dataset.crVydajId = item.ciselny_rad_v;\n    option.dataset.cisMenaId = item.cis_mena_id;\n    option.dataset.cisMenaKod = item.cis_mena_kod;\n\n    return option;\n  });\n\nconst handleHospRokyUpdate = function (data) {\n  updateSelectbox.call(this, data.selector, data.data, (option, item) => {\n    return item.year;\n  });\n};\n\nconst handleTyps = function (data) {\n  const filteredData = data.data.filter(record => {\n    if (\n      document.querySelector(`form[class^=\"edit_\"][method=\"post\"]`) === null &&\n      typeof record.zobraz === 'boolean' &&\n      !record.zobraz\n    ) {\n      return;\n    }\n\n    const znamienko = document.querySelector('#pokladnicny_doklad_znamienko');\n    if (znamienko && parseInt(record.znamienko) !== parseInt(znamienko.value)) {\n      return;\n    }\n\n    return record;\n  });\n\n  updateSelectbox(\n    `select[name$=\"[${data.property.toString().replace('s_update', '')}_id]\"]`,\n    filteredData,\n    (_, item) => {\n      return item.nazov;\n    },\n    (option, item) => {\n      option.dataset.accounts = item.accounts;\n      option.dataset.predmet = item.predmet;\n\n      if (item.danovy_pomer_id) {\n        option.dataset.danovyPomer = item.danovy_pomer_id;\n      }\n\n      if (item.dph_perc) {\n        option.dataset.dphPerc = parseNumber(item.dph_perc);\n      }\n\n      return option;\n    }\n  );\n};\n\nconst handlePartnersUpdate = function (data) {\n  const element = document.querySelector(data.selector);\n\n  if (!element) return;\n\n  const tomselect = element.tomselect;\n\n  if (\n    element.dataset.loadingData === 'false' ||\n    (element.dataset.loadingData === 'true' &&\n      data.data.id &&\n      !tomselect.getOption(data.data.id))\n  ) {\n    return;\n  }\n\n  updateSelectbox.call(\n    this,\n    data.selector,\n    Array.isArray(data.data) ? data.data : [data.data],\n    (_, option) => {\n      return `${option.text}`;\n    },\n    (option, item) => {\n      option.dataset.zeroVat = item.data.zero_vat ?? item.data.zeroVat ?? false;\n\n      return option;\n    }\n  );\n};\n\nconst handleEvidUpdate = data =>\n  updateSelectbox.call(\n    this,\n    data.selector,\n    data.data,\n    (select, option) => {\n      return select.dataset.text\n        ? option[select.dataset.text]\n        : option.concated;\n    },\n    (option, item) => {\n      if (document.querySelector(data.selector)?.dataset?.text) return option;\n\n      // only when dataset.text not present should dataset.kod be assigned\n      option.dataset.kod = item.kod;\n\n      return option;\n    }\n  );\n\nconst handleSkladUpdate = data =>\n  updateSelectbox.call(\n    this,\n    data.selector,\n    data.data,\n    (select, option) => {\n      return option.kod;\n    },\n    (option, item) => {\n      option.dataset.stredisko = item.stredisko_id;\n      option.dataset.zakazka = item.zakazka_id;\n      option.dataset.cinnost = item.cinnost_id;\n      option.dataset.pracovnik = item.pracovnik_id;\n      option.dataset.skladId = item.sklad_id;\n\n      return option;\n    }\n  );\n\nconst handleCiselnyRadUpdate = function (data) {\n  const ciselnyRad = document.querySelector('select[id*=\"_ciselny_rad_id\"]');\n\n  if (\n    !ciselnyRad ||\n    document\n      .querySelector(\n        `select[id*=\"${ciselnyRad.id.replace('_ciselny_rad_', '_evidencia_')}\"]`\n      )\n      .tomselect.getValue() !== data.evidencia_id.toString()\n  )\n    return;\n\n  updateSelectbox(\n    `#${ciselnyRad.id}`,\n    data.data,\n    (select, option) => {\n      return select.dataset.concated\n        ? `${option.kod} - ${option.nazov}`\n        : option.kod;\n    },\n    (option, item) => {\n      if (!ciselnyRad?.dataset?.concated) return option;\n\n      // only when dataset.concated is present should dataset.kod be assigned\n      option.dataset.kod = item.kod;\n\n      return option;\n    }\n  );\n};\n\nconst handleCiselnyRadsDestroy = function (data) {\n  const ciselnyRad = document.querySelector('select[id*=\"_ciselny_rad_id\"]');\n\n  if (\n    !ciselnyRad ||\n    document\n      .querySelector(\n        `select[id*=\"${ciselnyRad.id.replace('_ciselny_rad_', '_evidencia_')}\"]`\n      )\n      .tomselect.getValue() !== data.evidencia_id.toString()\n  )\n    return;\n\n  if (ciselnyRad.tomselect.getValue() === data.id.toString()) {\n    ciselnyRad.tomselect.setValue(null, true);\n  }\n\n  ciselnyRad.tomselect.removeOption(data.id);\n\n  if (ciselnyRad.dataset.allowClear !== 'true') {\n    ciselnyRad.tomselect.setValue(\n      ciselnyRad.tomselect.options[Object.keys(ciselnyRad.tomselect.options)[0]]\n        .value,\n      true\n    );\n  }\n\n  ciselnyRad.tomselect.refreshOptions(false);\n  showToastMessage(data.message);\n};\n\nconst handleAnalytUcetsUpdate = function (data) {\n  const syntUcets = document.querySelectorAll(\n    `select[id$=\"_synt_ucet_id\"] option[value=\"${data.synt_ucet_id}\"]`\n  );\n\n  if (document.querySelector('table#uctovny_rozvrh'))\n    document\n      .querySelector('#search_analyt_ucet')\n      .dispatchEvent(new Event('keyup', { bubbles: true }));\n\n  if (syntUcets.length === 0) return;\n\n  syntUcets.forEach(ucet => {\n    const wrapper = ucet\n      .closest('select')\n      .nextElementSibling.querySelector(\n        `.ts-control .item[data-value=\"${data.synt_ucet_id}\"]`\n      ); // is selected\n\n    if (!wrapper) return;\n\n    const parent = ucet.closest('.input-group[id*=\"synt_analyt_ucet\"]');\n\n    if (!parent) return;\n\n    updateSelectbox(\n      parent.querySelectorAll(`select[id$=\"_analyt_ucet_id\"]`),\n      data.data,\n      (_, item) => {\n        return item.nazov;\n      },\n      (option, item) => {\n        option.dataset.concated = `${item.kod} - ${item.nazov}`;\n        option.dataset.kod = item.kod;\n\n        return option;\n      }\n    );\n  });\n};\n\nconst handleAnalytUcetsDestroy = function (data) {\n  const analytUcet = document.querySelectorAll('select[id*=\"_analyt_ucet_id\"]');\n\n  if (document.querySelector('table#uctovny_rozvrh')) {\n    document\n      .querySelector('#search_analyt_ucet')\n      .dispatchEvent(new Event('keyup', { bubbles: true }));\n\n    showToastMessage(data.message);\n  }\n\n  if (analytUcet.length === 0) return;\n\n  analytUcet.forEach(au => {\n    if (\n      !au\n        .closest('.input-group[id*=\"synt_analyt_ucet\"]')\n        .querySelector(\n          `select[id*=\"${au.id.replace('_analyt_ucet_id', '_synt_ucet_id')}\"]`\n        )\n        .nextElementSibling.querySelector(\n          `.ts-control .item[data-value=\"${data.synt_ucet_id}\"]`\n        )\n    )\n      return;\n\n    if (au.tomselect.getValue() === data.id.toString()) {\n      au.tomselect.setValue(null, true);\n    }\n\n    au.tomselect.removeOption(data.id);\n\n    if (au.dataset.allowClear !== 'true') {\n      au.tomselect.setValue(\n        au.tomselect.options[Object.keys(au.tomselect.options)[0]].value,\n        true\n      );\n    }\n\n    au.tomselect.refreshOptions(false);\n    showToastMessage(data.message);\n  });\n};\n\nconst handleProgressBar = function (data) {\n  if (\n    !document.querySelector(data.selector) ||\n    document.querySelector(data.selector).length === 0\n  )\n    return;\n\n  document\n    .querySelector('.offcanvas.show')\n    ?.querySelector('.btn-close[data-bs-dismiss=\"offcanvas\"]')\n    ?.click();\n\n  showToastMessage(data.message, {\n    createElement: false,\n    autohide: false\n  });\n};\n\nconst handleOfDruhPolozkiesUpdate = data =>\n  updateSelectbox.call(\n    this,\n    'select[name$=\"[of_druh_polozky_id]\"]',\n    data.data,\n    (_, option) => {\n      return option.nazov;\n    },\n    (option, item) => {\n      if (item.predmet) {\n        option.dataset.predmet = item.predmet;\n      }\n\n      if (item.dph) {\n        option.dataset.dphPerc = parseNumber(item.dph);\n      }\n\n      if (item.cena_jednotkova) {\n        option.dataset.cenaJednotkova = item.cena_jednotkova;\n      }\n\n      if (item.mnozstvo_text) {\n        option.dataset.mnozstvoText = item.mnozstvo_text;\n      }\n\n      if (item.cena_bez_dph) {\n        option.dataset.cenaBezDph = item.cena_bez_dph;\n      }\n\n      return option;\n    }\n  );\n\nconst handleAdvanceInvoice = function (data) {\n  if (!document.querySelector(data.selector)) return;\n\n  const table = document.querySelector('#assigned_payments table tbody');\n\n  switch (data.action) {\n    case 'add':\n      table.insertAdjacentHTML('beforeend', data.html);\n      break;\n    case 'delete':\n      table.querySelector(`tr[data-id=\"${data.id}\"]`).remove();\n      break;\n    default:\n      table.querySelector(`tr[data-id=\"${data.id}\"]`).outerHTML = data.html;\n  }\n\n  const cost = Array.from(table.querySelectorAll('tr:not(.info)')).reduce(\n    (acc, tr) => acc + parseNumber(tr.querySelector('.with-vat').innerHTML),\n    0\n  );\n\n  document.querySelector('#label-paying-the-invoice').innerHTML =\n    formatNumber(cost);\n\n  if (typeof window.updateZadanaUhradaLabels === 'undefined') {\n    triggerStrimulusAction('updateZadanaUhradaLabels');\n  } else {\n    window.updateZadanaUhradaLabels();\n  }\n\n  showSubmitButton(table);\n};\n\nconst handleFirmaPublicUserCreate = function (data) {\n  const selectEl = document.querySelector('#kod_firmy');\n\n  if (!selectEl?.tomselect) return;\n\n  selectEl.tomselect.addOption({\n    value: data.id,\n    text: data.nazov_firmy\n  });\n  selectEl.tomselect.refreshOptions(false);\n};\n\nconst handleFirmaPublicUserDestroy = function (data) {\n  const selectEl = document.querySelector('#kod_firmy');\n\n  if (!selectEl?.tomselect) return;\n\n  const wasSelected = +selectEl.tomselect.getValue() === data.id;\n\n  if (wasSelected)\n    return location.replace(location.origin.replace(/\\d{5,}/, 'public'));\n\n  selectEl.tomselect.removeOption(data.id);\n  selectEl.tomselect.refreshOptions(false);\n};\n", "/*!\n * FilePond 4.31.1\n * Licensed under MIT, https://opensource.org/licenses/MIT/\n * Please visit https://pqina.nl/filepond/ for details.\n */\n\n/* eslint-disable */\n\n(function(global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined'\n        ? factory(exports)\n        : typeof define === 'function' && define.amd\n        ? define(['exports'], factory)\n        : ((global = global || self), factory((global.FilePond = {})));\n})(this, function(exports) {\n    'use strict';\n\n    var isNode = function isNode(value) {\n        return value instanceof HTMLElement;\n    };\n\n    var createStore = function createStore(initialState) {\n        var queries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n        var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n        // internal state\n        var state = Object.assign({}, initialState);\n\n        // contains all actions for next frame, is clear when actions are requested\n        var actionQueue = [];\n        var dispatchQueue = [];\n\n        // returns a duplicate of the current state\n        var getState = function getState() {\n            return Object.assign({}, state);\n        };\n\n        // returns a duplicate of the actions array and clears the actions array\n        var processActionQueue = function processActionQueue() {\n            // create copy of actions queue\n            var queue = [].concat(actionQueue);\n\n            // clear actions queue (we don't want no double actions)\n            actionQueue.length = 0;\n\n            return queue;\n        };\n\n        // processes actions that might block the main UI thread\n        var processDispatchQueue = function processDispatchQueue() {\n            // create copy of actions queue\n            var queue = [].concat(dispatchQueue);\n\n            // clear actions queue (we don't want no double actions)\n            dispatchQueue.length = 0;\n\n            // now dispatch these actions\n            queue.forEach(function(_ref) {\n                var type = _ref.type,\n                    data = _ref.data;\n                dispatch(type, data);\n            });\n        };\n\n        // adds a new action, calls its handler and\n        var dispatch = function dispatch(type, data, isBlocking) {\n            // is blocking action (should never block if document is hidden)\n            if (isBlocking && !document.hidden) {\n                dispatchQueue.push({ type: type, data: data });\n                return;\n            }\n\n            // if this action has a handler, handle the action\n            if (actionHandlers[type]) {\n                actionHandlers[type](data);\n            }\n\n            // now add action\n            actionQueue.push({\n                type: type,\n                data: data,\n            });\n        };\n\n        var query = function query(str) {\n            var _queryHandles;\n            for (\n                var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n                _key < _len;\n                _key++\n            ) {\n                args[_key - 1] = arguments[_key];\n            }\n            return queryHandles[str]\n                ? (_queryHandles = queryHandles)[str].apply(_queryHandles, args)\n                : null;\n        };\n\n        var api = {\n            getState: getState,\n            processActionQueue: processActionQueue,\n            processDispatchQueue: processDispatchQueue,\n            dispatch: dispatch,\n            query: query,\n        };\n\n        var queryHandles = {};\n        queries.forEach(function(query) {\n            queryHandles = Object.assign({}, query(state), {}, queryHandles);\n        });\n\n        var actionHandlers = {};\n        actions.forEach(function(action) {\n            actionHandlers = Object.assign({}, action(dispatch, query, state), {}, actionHandlers);\n        });\n\n        return api;\n    };\n\n    var defineProperty = function defineProperty(obj, property, definition) {\n        if (typeof definition === 'function') {\n            obj[property] = definition;\n            return;\n        }\n        Object.defineProperty(obj, property, Object.assign({}, definition));\n    };\n\n    var forin = function forin(obj, cb) {\n        for (var key in obj) {\n            if (!obj.hasOwnProperty(key)) {\n                continue;\n            }\n\n            cb(key, obj[key]);\n        }\n    };\n\n    var createObject = function createObject(definition) {\n        var obj = {};\n        forin(definition, function(property) {\n            defineProperty(obj, property, definition[property]);\n        });\n        return obj;\n    };\n\n    var attr = function attr(node, name) {\n        var value = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        if (value === null) {\n            return node.getAttribute(name) || node.hasAttribute(name);\n        }\n        node.setAttribute(name, value);\n    };\n\n    var ns = 'http://www.w3.org/2000/svg';\n    var svgElements = ['svg', 'path']; // only svg elements used\n\n    var isSVGElement = function isSVGElement(tag) {\n        return svgElements.includes(tag);\n    };\n\n    var createElement = function createElement(tag, className) {\n        var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n        if (typeof className === 'object') {\n            attributes = className;\n            className = null;\n        }\n        var element = isSVGElement(tag)\n            ? document.createElementNS(ns, tag)\n            : document.createElement(tag);\n        if (className) {\n            if (isSVGElement(tag)) {\n                attr(element, 'class', className);\n            } else {\n                element.className = className;\n            }\n        }\n        forin(attributes, function(name, value) {\n            attr(element, name, value);\n        });\n        return element;\n    };\n\n    var appendChild = function appendChild(parent) {\n        return function(child, index) {\n            if (typeof index !== 'undefined' && parent.children[index]) {\n                parent.insertBefore(child, parent.children[index]);\n            } else {\n                parent.appendChild(child);\n            }\n        };\n    };\n\n    var appendChildView = function appendChildView(parent, childViews) {\n        return function(view, index) {\n            if (typeof index !== 'undefined') {\n                childViews.splice(index, 0, view);\n            } else {\n                childViews.push(view);\n            }\n\n            return view;\n        };\n    };\n\n    var removeChildView = function removeChildView(parent, childViews) {\n        return function(view) {\n            // remove from child views\n            childViews.splice(childViews.indexOf(view), 1);\n\n            // remove the element\n            if (view.element.parentNode) {\n                parent.removeChild(view.element);\n            }\n\n            return view;\n        };\n    };\n\n    var IS_BROWSER = (function() {\n        return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n    })();\n    var isBrowser = function isBrowser() {\n        return IS_BROWSER;\n    };\n\n    var testElement = isBrowser() ? createElement('svg') : {};\n    var getChildCount =\n        'children' in testElement\n            ? function(el) {\n                  return el.children.length;\n              }\n            : function(el) {\n                  return el.childNodes.length;\n              };\n\n    var getViewRect = function getViewRect(elementRect, childViews, offset, scale) {\n        var left = offset[0] || elementRect.left;\n        var top = offset[1] || elementRect.top;\n        var right = left + elementRect.width;\n        var bottom = top + elementRect.height * (scale[1] || 1);\n\n        var rect = {\n            // the rectangle of the element itself\n            element: Object.assign({}, elementRect),\n\n            // the rectangle of the element expanded to contain its children, does not include any margins\n            inner: {\n                left: elementRect.left,\n                top: elementRect.top,\n                right: elementRect.right,\n                bottom: elementRect.bottom,\n            },\n\n            // the rectangle of the element expanded to contain its children including own margin and child margins\n            // margins will be added after we've recalculated the size\n            outer: {\n                left: left,\n                top: top,\n                right: right,\n                bottom: bottom,\n            },\n        };\n\n        // expand rect to fit all child rectangles\n        childViews\n            .filter(function(childView) {\n                return !childView.isRectIgnored();\n            })\n            .map(function(childView) {\n                return childView.rect;\n            })\n            .forEach(function(childViewRect) {\n                expandRect(rect.inner, Object.assign({}, childViewRect.inner));\n                expandRect(rect.outer, Object.assign({}, childViewRect.outer));\n            });\n\n        // calculate inner width and height\n        calculateRectSize(rect.inner);\n\n        // append additional margin (top and left margins are included in top and left automatically)\n        rect.outer.bottom += rect.element.marginBottom;\n        rect.outer.right += rect.element.marginRight;\n\n        // calculate outer width and height\n        calculateRectSize(rect.outer);\n\n        return rect;\n    };\n\n    var expandRect = function expandRect(parent, child) {\n        // adjust for parent offset\n        child.top += parent.top;\n        child.right += parent.left;\n        child.bottom += parent.top;\n        child.left += parent.left;\n\n        if (child.bottom > parent.bottom) {\n            parent.bottom = child.bottom;\n        }\n\n        if (child.right > parent.right) {\n            parent.right = child.right;\n        }\n    };\n\n    var calculateRectSize = function calculateRectSize(rect) {\n        rect.width = rect.right - rect.left;\n        rect.height = rect.bottom - rect.top;\n    };\n\n    var isNumber = function isNumber(value) {\n        return typeof value === 'number';\n    };\n\n    /**\n     * Determines if position is at destination\n     * @param position\n     * @param destination\n     * @param velocity\n     * @param errorMargin\n     * @returns {boolean}\n     */\n    var thereYet = function thereYet(position, destination, velocity) {\n        var errorMargin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.001;\n        return Math.abs(position - destination) < errorMargin && Math.abs(velocity) < errorMargin;\n    };\n\n    /**\n     * Spring animation\n     */\n    var spring =\n        // default options\n        function spring() // method definition\n        {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n                _ref$stiffness = _ref.stiffness,\n                stiffness = _ref$stiffness === void 0 ? 0.5 : _ref$stiffness,\n                _ref$damping = _ref.damping,\n                damping = _ref$damping === void 0 ? 0.75 : _ref$damping,\n                _ref$mass = _ref.mass,\n                mass = _ref$mass === void 0 ? 10 : _ref$mass;\n            var target = null;\n            var position = null;\n            var velocity = 0;\n            var resting = false;\n\n            // updates spring state\n            var interpolate = function interpolate(ts, skipToEndState) {\n                // in rest, don't animate\n                if (resting) return;\n\n                // need at least a target or position to do springy things\n                if (!(isNumber(target) && isNumber(position))) {\n                    resting = true;\n                    velocity = 0;\n                    return;\n                }\n\n                // calculate spring force\n                var f = -(position - target) * stiffness;\n\n                // update velocity by adding force based on mass\n                velocity += f / mass;\n\n                // update position by adding velocity\n                position += velocity;\n\n                // slow down based on amount of damping\n                velocity *= damping;\n\n                // we've arrived if we're near target and our velocity is near zero\n                if (thereYet(position, target, velocity) || skipToEndState) {\n                    position = target;\n                    velocity = 0;\n                    resting = true;\n\n                    // we done\n                    api.onupdate(position);\n                    api.oncomplete(position);\n                } else {\n                    // progress update\n                    api.onupdate(position);\n                }\n            };\n\n            /**\n             * Set new target value\n             * @param value\n             */\n            var setTarget = function setTarget(value) {\n                // if currently has no position, set target and position to this value\n                if (isNumber(value) && !isNumber(position)) {\n                    position = value;\n                }\n\n                // next target value will not be animated to\n                if (target === null) {\n                    target = value;\n                    position = value;\n                }\n\n                // let start moving to target\n                target = value;\n\n                // already at target\n                if (position === target || typeof target === 'undefined') {\n                    // now resting as target is current position, stop moving\n                    resting = true;\n                    velocity = 0;\n\n                    // done!\n                    api.onupdate(position);\n                    api.oncomplete(position);\n\n                    return;\n                }\n\n                resting = false;\n            };\n\n            // need 'api' to call onupdate callback\n            var api = createObject({\n                interpolate: interpolate,\n                target: {\n                    set: setTarget,\n                    get: function get() {\n                        return target;\n                    },\n                },\n\n                resting: {\n                    get: function get() {\n                        return resting;\n                    },\n                },\n\n                onupdate: function onupdate(value) {},\n                oncomplete: function oncomplete(value) {},\n            });\n\n            return api;\n        };\n\n    var easeLinear = function easeLinear(t) {\n        return t;\n    };\n    var easeInOutQuad = function easeInOutQuad(t) {\n        return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n    };\n\n    var tween =\n        // default values\n        function tween() // method definition\n        {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n                _ref$duration = _ref.duration,\n                duration = _ref$duration === void 0 ? 500 : _ref$duration,\n                _ref$easing = _ref.easing,\n                easing = _ref$easing === void 0 ? easeInOutQuad : _ref$easing,\n                _ref$delay = _ref.delay,\n                delay = _ref$delay === void 0 ? 0 : _ref$delay;\n            var start = null;\n            var t;\n            var p;\n            var resting = true;\n            var reverse = false;\n            var target = null;\n\n            var interpolate = function interpolate(ts, skipToEndState) {\n                if (resting || target === null) return;\n\n                if (start === null) {\n                    start = ts;\n                }\n\n                if (ts - start < delay) return;\n\n                t = ts - start - delay;\n\n                if (t >= duration || skipToEndState) {\n                    t = 1;\n                    p = reverse ? 0 : 1;\n                    api.onupdate(p * target);\n                    api.oncomplete(p * target);\n                    resting = true;\n                } else {\n                    p = t / duration;\n                    api.onupdate((t >= 0 ? easing(reverse ? 1 - p : p) : 0) * target);\n                }\n            };\n\n            // need 'api' to call onupdate callback\n            var api = createObject({\n                interpolate: interpolate,\n                target: {\n                    get: function get() {\n                        return reverse ? 0 : target;\n                    },\n                    set: function set(value) {\n                        // is initial value\n                        if (target === null) {\n                            target = value;\n                            api.onupdate(value);\n                            api.oncomplete(value);\n                            return;\n                        }\n\n                        // want to tween to a smaller value and have a current value\n                        if (value < target) {\n                            target = 1;\n                            reverse = true;\n                        } else {\n                            // not tweening to a smaller value\n                            reverse = false;\n                            target = value;\n                        }\n\n                        // let's go!\n                        resting = false;\n                        start = null;\n                    },\n                },\n\n                resting: {\n                    get: function get() {\n                        return resting;\n                    },\n                },\n\n                onupdate: function onupdate(value) {},\n                oncomplete: function oncomplete(value) {},\n            });\n\n            return api;\n        };\n\n    var animator = {\n        spring: spring,\n        tween: tween,\n    };\n\n    /*\n                       { type: 'spring', stiffness: .5, damping: .75, mass: 10 };\n                       { translation: { type: 'spring', ... }, ... }\n                       { translation: { x: { type: 'spring', ... } } }\n                      */\n    var createAnimator = function createAnimator(definition, category, property) {\n        // default is single definition\n        // we check if transform is set, if so, we check if property is set\n        var def =\n            definition[category] && typeof definition[category][property] === 'object'\n                ? definition[category][property]\n                : definition[category] || definition;\n\n        var type = typeof def === 'string' ? def : def.type;\n        var props = typeof def === 'object' ? Object.assign({}, def) : {};\n\n        return animator[type] ? animator[type](props) : null;\n    };\n\n    var addGetSet = function addGetSet(keys, obj, props) {\n        var overwrite = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n        obj = Array.isArray(obj) ? obj : [obj];\n        obj.forEach(function(o) {\n            keys.forEach(function(key) {\n                var name = key;\n                var getter = function getter() {\n                    return props[key];\n                };\n                var setter = function setter(value) {\n                    return (props[key] = value);\n                };\n\n                if (typeof key === 'object') {\n                    name = key.key;\n                    getter = key.getter || getter;\n                    setter = key.setter || setter;\n                }\n\n                if (o[name] && !overwrite) {\n                    return;\n                }\n\n                o[name] = {\n                    get: getter,\n                    set: setter,\n                };\n            });\n        });\n    };\n\n    // add to state,\n    // add getters and setters to internal and external api (if not set)\n    // setup animators\n\n    var animations = function animations(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewInternalAPI = _ref.viewInternalAPI,\n            viewExternalAPI = _ref.viewExternalAPI;\n        // initial properties\n        var initialProps = Object.assign({}, viewProps);\n\n        // list of all active animations\n        var animations = [];\n\n        // setup animators\n        forin(mixinConfig, function(property, animation) {\n            var animator = createAnimator(animation);\n            if (!animator) {\n                return;\n            }\n\n            // when the animator updates, update the view state value\n            animator.onupdate = function(value) {\n                viewProps[property] = value;\n            };\n\n            // set animator target\n            animator.target = initialProps[property];\n\n            // when value is set, set the animator target value\n            var prop = {\n                key: property,\n                setter: function setter(value) {\n                    // if already at target, we done!\n                    if (animator.target === value) {\n                        return;\n                    }\n\n                    animator.target = value;\n                },\n                getter: function getter() {\n                    return viewProps[property];\n                },\n            };\n\n            // add getters and setters\n            addGetSet([prop], [viewInternalAPI, viewExternalAPI], viewProps, true);\n\n            // add it to the list for easy updating from the _write method\n            animations.push(animator);\n        });\n\n        // expose internal write api\n        return {\n            write: function write(ts) {\n                var skipToEndState = document.hidden;\n                var resting = true;\n                animations.forEach(function(animation) {\n                    if (!animation.resting) resting = false;\n                    animation.interpolate(ts, skipToEndState);\n                });\n                return resting;\n            },\n            destroy: function destroy() {},\n        };\n    };\n\n    var addEvent = function addEvent(element) {\n        return function(type, fn) {\n            element.addEventListener(type, fn);\n        };\n    };\n\n    var removeEvent = function removeEvent(element) {\n        return function(type, fn) {\n            element.removeEventListener(type, fn);\n        };\n    };\n\n    // mixin\n    var listeners = function listeners(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewInternalAPI = _ref.viewInternalAPI,\n            viewExternalAPI = _ref.viewExternalAPI,\n            viewState = _ref.viewState,\n            view = _ref.view;\n        var events = [];\n\n        var add = addEvent(view.element);\n        var remove = removeEvent(view.element);\n\n        viewExternalAPI.on = function(type, fn) {\n            events.push({\n                type: type,\n                fn: fn,\n            });\n\n            add(type, fn);\n        };\n\n        viewExternalAPI.off = function(type, fn) {\n            events.splice(\n                events.findIndex(function(event) {\n                    return event.type === type && event.fn === fn;\n                }),\n                1\n            );\n\n            remove(type, fn);\n        };\n\n        return {\n            write: function write() {\n                // not busy\n                return true;\n            },\n            destroy: function destroy() {\n                events.forEach(function(event) {\n                    remove(event.type, event.fn);\n                });\n            },\n        };\n    };\n\n    // add to external api and link to props\n\n    var apis = function apis(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewExternalAPI = _ref.viewExternalAPI;\n        addGetSet(mixinConfig, viewExternalAPI, viewProps);\n    };\n\n    var isDefined = function isDefined(value) {\n        return value != null;\n    };\n\n    // add to state,\n    // add getters and setters to internal and external api (if not set)\n    // set initial state based on props in viewProps\n    // apply as transforms each frame\n\n    var defaults = {\n        opacity: 1,\n        scaleX: 1,\n        scaleY: 1,\n        translateX: 0,\n        translateY: 0,\n        rotateX: 0,\n        rotateY: 0,\n        rotateZ: 0,\n        originX: 0,\n        originY: 0,\n    };\n\n    var styles = function styles(_ref) {\n        var mixinConfig = _ref.mixinConfig,\n            viewProps = _ref.viewProps,\n            viewInternalAPI = _ref.viewInternalAPI,\n            viewExternalAPI = _ref.viewExternalAPI,\n            view = _ref.view;\n        // initial props\n        var initialProps = Object.assign({}, viewProps);\n\n        // current props\n        var currentProps = {};\n\n        // we will add those properties to the external API and link them to the viewState\n        addGetSet(mixinConfig, [viewInternalAPI, viewExternalAPI], viewProps);\n\n        // override rect on internal and external rect getter so it takes in account transforms\n        var getOffset = function getOffset() {\n            return [viewProps['translateX'] || 0, viewProps['translateY'] || 0];\n        };\n\n        var getScale = function getScale() {\n            return [viewProps['scaleX'] || 0, viewProps['scaleY'] || 0];\n        };\n        var getRect = function getRect() {\n            return view.rect\n                ? getViewRect(view.rect, view.childViews, getOffset(), getScale())\n                : null;\n        };\n        viewInternalAPI.rect = { get: getRect };\n        viewExternalAPI.rect = { get: getRect };\n\n        // apply view props\n        mixinConfig.forEach(function(key) {\n            viewProps[key] =\n                typeof initialProps[key] === 'undefined' ? defaults[key] : initialProps[key];\n        });\n\n        // expose api\n        return {\n            write: function write() {\n                // see if props have changed\n                if (!propsHaveChanged(currentProps, viewProps)) {\n                    return;\n                }\n\n                // moves element to correct position on screen\n                applyStyles(view.element, viewProps);\n\n                // store new transforms\n                Object.assign(currentProps, Object.assign({}, viewProps));\n\n                // no longer busy\n                return true;\n            },\n            destroy: function destroy() {},\n        };\n    };\n\n    var propsHaveChanged = function propsHaveChanged(currentProps, newProps) {\n        // different amount of keys\n        if (Object.keys(currentProps).length !== Object.keys(newProps).length) {\n            return true;\n        }\n\n        // lets analyze the individual props\n        for (var prop in newProps) {\n            if (newProps[prop] !== currentProps[prop]) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n\n    var applyStyles = function applyStyles(element, _ref2) {\n        var opacity = _ref2.opacity,\n            perspective = _ref2.perspective,\n            translateX = _ref2.translateX,\n            translateY = _ref2.translateY,\n            scaleX = _ref2.scaleX,\n            scaleY = _ref2.scaleY,\n            rotateX = _ref2.rotateX,\n            rotateY = _ref2.rotateY,\n            rotateZ = _ref2.rotateZ,\n            originX = _ref2.originX,\n            originY = _ref2.originY,\n            width = _ref2.width,\n            height = _ref2.height;\n\n        var transforms = '';\n        var styles = '';\n\n        // handle transform origin\n        if (isDefined(originX) || isDefined(originY)) {\n            styles += 'transform-origin: ' + (originX || 0) + 'px ' + (originY || 0) + 'px;';\n        }\n\n        // transform order is relevant\n        // 0. perspective\n        if (isDefined(perspective)) {\n            transforms += 'perspective(' + perspective + 'px) ';\n        }\n\n        // 1. translate\n        if (isDefined(translateX) || isDefined(translateY)) {\n            transforms +=\n                'translate3d(' + (translateX || 0) + 'px, ' + (translateY || 0) + 'px, 0) ';\n        }\n\n        // 2. scale\n        if (isDefined(scaleX) || isDefined(scaleY)) {\n            transforms +=\n                'scale3d(' +\n                (isDefined(scaleX) ? scaleX : 1) +\n                ', ' +\n                (isDefined(scaleY) ? scaleY : 1) +\n                ', 1) ';\n        }\n\n        // 3. rotate\n        if (isDefined(rotateZ)) {\n            transforms += 'rotateZ(' + rotateZ + 'rad) ';\n        }\n\n        if (isDefined(rotateX)) {\n            transforms += 'rotateX(' + rotateX + 'rad) ';\n        }\n\n        if (isDefined(rotateY)) {\n            transforms += 'rotateY(' + rotateY + 'rad) ';\n        }\n\n        // add transforms\n        if (transforms.length) {\n            styles += 'transform:' + transforms + ';';\n        }\n\n        // add opacity\n        if (isDefined(opacity)) {\n            styles += 'opacity:' + opacity + ';';\n\n            // if we reach zero, we make the element inaccessible\n            if (opacity === 0) {\n                styles += 'visibility:hidden;';\n            }\n\n            // if we're below 100% opacity this element can't be clicked\n            if (opacity < 1) {\n                styles += 'pointer-events:none;';\n            }\n        }\n\n        // add height\n        if (isDefined(height)) {\n            styles += 'height:' + height + 'px;';\n        }\n\n        // add width\n        if (isDefined(width)) {\n            styles += 'width:' + width + 'px;';\n        }\n\n        // apply styles\n        var elementCurrentStyle = element.elementCurrentStyle || '';\n\n        // if new styles does not match current styles, lets update!\n        if (styles.length !== elementCurrentStyle.length || styles !== elementCurrentStyle) {\n            element.style.cssText = styles;\n            // store current styles so we can compare them to new styles later on\n            // _not_ getting the style value is faster\n            element.elementCurrentStyle = styles;\n        }\n    };\n\n    var Mixins = {\n        styles: styles,\n        listeners: listeners,\n        animations: animations,\n        apis: apis,\n    };\n\n    var updateRect = function updateRect() {\n        var rect = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        var element = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n        if (!element.layoutCalculated) {\n            rect.paddingTop = parseInt(style.paddingTop, 10) || 0;\n            rect.marginTop = parseInt(style.marginTop, 10) || 0;\n            rect.marginRight = parseInt(style.marginRight, 10) || 0;\n            rect.marginBottom = parseInt(style.marginBottom, 10) || 0;\n            rect.marginLeft = parseInt(style.marginLeft, 10) || 0;\n            element.layoutCalculated = true;\n        }\n\n        rect.left = element.offsetLeft || 0;\n        rect.top = element.offsetTop || 0;\n        rect.width = element.offsetWidth || 0;\n        rect.height = element.offsetHeight || 0;\n\n        rect.right = rect.left + rect.width;\n        rect.bottom = rect.top + rect.height;\n\n        rect.scrollTop = element.scrollTop;\n\n        rect.hidden = element.offsetParent === null;\n\n        return rect;\n    };\n\n    var createView =\n        // default view definition\n        function createView() {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n                _ref$tag = _ref.tag,\n                tag = _ref$tag === void 0 ? 'div' : _ref$tag,\n                _ref$name = _ref.name,\n                name = _ref$name === void 0 ? null : _ref$name,\n                _ref$attributes = _ref.attributes,\n                attributes = _ref$attributes === void 0 ? {} : _ref$attributes,\n                _ref$read = _ref.read,\n                read = _ref$read === void 0 ? function() {} : _ref$read,\n                _ref$write = _ref.write,\n                write = _ref$write === void 0 ? function() {} : _ref$write,\n                _ref$create = _ref.create,\n                create = _ref$create === void 0 ? function() {} : _ref$create,\n                _ref$destroy = _ref.destroy,\n                destroy = _ref$destroy === void 0 ? function() {} : _ref$destroy,\n                _ref$filterFrameActio = _ref.filterFrameActionsForChild,\n                filterFrameActionsForChild =\n                    _ref$filterFrameActio === void 0\n                        ? function(child, actions) {\n                              return actions;\n                          }\n                        : _ref$filterFrameActio,\n                _ref$didCreateView = _ref.didCreateView,\n                didCreateView = _ref$didCreateView === void 0 ? function() {} : _ref$didCreateView,\n                _ref$didWriteView = _ref.didWriteView,\n                didWriteView = _ref$didWriteView === void 0 ? function() {} : _ref$didWriteView,\n                _ref$ignoreRect = _ref.ignoreRect,\n                ignoreRect = _ref$ignoreRect === void 0 ? false : _ref$ignoreRect,\n                _ref$ignoreRectUpdate = _ref.ignoreRectUpdate,\n                ignoreRectUpdate = _ref$ignoreRectUpdate === void 0 ? false : _ref$ignoreRectUpdate,\n                _ref$mixins = _ref.mixins,\n                mixins = _ref$mixins === void 0 ? [] : _ref$mixins;\n            return function(\n                // each view requires reference to store\n                store\n            ) {\n                var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n                // root element should not be changed\n                var element = createElement(tag, 'filepond--' + name, attributes);\n\n                // style reference should also not be changed\n                var style = window.getComputedStyle(element, null);\n\n                // element rectangle\n                var rect = updateRect();\n                var frameRect = null;\n\n                // rest state\n                var isResting = false;\n\n                // pretty self explanatory\n                var childViews = [];\n\n                // loaded mixins\n                var activeMixins = [];\n\n                // references to created children\n                var ref = {};\n\n                // state used for each instance\n                var state = {};\n\n                // list of writers that will be called to update this view\n                var writers = [\n                    write, // default writer\n                ];\n\n                var readers = [\n                    read, // default reader\n                ];\n\n                var destroyers = [\n                    destroy, // default destroy\n                ];\n\n                // core view methods\n                var getElement = function getElement() {\n                    return element;\n                };\n                var getChildViews = function getChildViews() {\n                    return childViews.concat();\n                };\n                var getReference = function getReference() {\n                    return ref;\n                };\n                var createChildView = function createChildView(store) {\n                    return function(view, props) {\n                        return view(store, props);\n                    };\n                };\n                var getRect = function getRect() {\n                    if (frameRect) {\n                        return frameRect;\n                    }\n                    frameRect = getViewRect(rect, childViews, [0, 0], [1, 1]);\n                    return frameRect;\n                };\n                var getStyle = function getStyle() {\n                    return style;\n                };\n\n                /**\n                 * Read data from DOM\n                 * @private\n                 */\n                var _read = function _read() {\n                    frameRect = null;\n\n                    // read child views\n                    childViews.forEach(function(child) {\n                        return child._read();\n                    });\n\n                    var shouldUpdate = !(ignoreRectUpdate && rect.width && rect.height);\n                    if (shouldUpdate) {\n                        updateRect(rect, element, style);\n                    }\n\n                    // readers\n                    var api = { root: internalAPI, props: props, rect: rect };\n                    readers.forEach(function(reader) {\n                        return reader(api);\n                    });\n                };\n\n                /**\n                 * Write data to DOM\n                 * @private\n                 */\n                var _write = function _write(ts, frameActions, shouldOptimize) {\n                    // if no actions, we assume that the view is resting\n                    var resting = frameActions.length === 0;\n\n                    // writers\n                    writers.forEach(function(writer) {\n                        var writerResting = writer({\n                            props: props,\n                            root: internalAPI,\n                            actions: frameActions,\n                            timestamp: ts,\n                            shouldOptimize: shouldOptimize,\n                        });\n\n                        if (writerResting === false) {\n                            resting = false;\n                        }\n                    });\n\n                    // run mixins\n                    activeMixins.forEach(function(mixin) {\n                        // if one of the mixins is still busy after write operation, we are not resting\n                        var mixinResting = mixin.write(ts);\n                        if (mixinResting === false) {\n                            resting = false;\n                        }\n                    });\n\n                    // updates child views that are currently attached to the DOM\n                    childViews\n                        .filter(function(child) {\n                            return !!child.element.parentNode;\n                        })\n                        .forEach(function(child) {\n                            // if a child view is not resting, we are not resting\n                            var childResting = child._write(\n                                ts,\n                                filterFrameActionsForChild(child, frameActions),\n                                shouldOptimize\n                            );\n\n                            if (!childResting) {\n                                resting = false;\n                            }\n                        });\n\n                    // append new elements to DOM and update those\n                    childViews\n                        //.filter(child => !child.element.parentNode)\n                        .forEach(function(child, index) {\n                            // skip\n                            if (child.element.parentNode) {\n                                return;\n                            }\n\n                            // append to DOM\n                            internalAPI.appendChild(child.element, index);\n\n                            // call read (need to know the size of these elements)\n                            child._read();\n\n                            // re-call write\n                            child._write(\n                                ts,\n                                filterFrameActionsForChild(child, frameActions),\n                                shouldOptimize\n                            );\n\n                            // we just added somthing to the dom, no rest\n                            resting = false;\n                        });\n\n                    // update resting state\n                    isResting = resting;\n\n                    didWriteView({\n                        props: props,\n                        root: internalAPI,\n                        actions: frameActions,\n                        timestamp: ts,\n                    });\n\n                    // let parent know if we are resting\n                    return resting;\n                };\n\n                var _destroy = function _destroy() {\n                    activeMixins.forEach(function(mixin) {\n                        return mixin.destroy();\n                    });\n                    destroyers.forEach(function(destroyer) {\n                        destroyer({ root: internalAPI, props: props });\n                    });\n                    childViews.forEach(function(child) {\n                        return child._destroy();\n                    });\n                };\n\n                // sharedAPI\n                var sharedAPIDefinition = {\n                    element: {\n                        get: getElement,\n                    },\n\n                    style: {\n                        get: getStyle,\n                    },\n\n                    childViews: {\n                        get: getChildViews,\n                    },\n                };\n\n                // private API definition\n                var internalAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n                    rect: {\n                        get: getRect,\n                    },\n\n                    // access to custom children references\n                    ref: {\n                        get: getReference,\n                    },\n\n                    // dom modifiers\n                    is: function is(needle) {\n                        return name === needle;\n                    },\n                    appendChild: appendChild(element),\n                    createChildView: createChildView(store),\n                    linkView: function linkView(view) {\n                        childViews.push(view);\n                        return view;\n                    },\n                    unlinkView: function unlinkView(view) {\n                        childViews.splice(childViews.indexOf(view), 1);\n                    },\n                    appendChildView: appendChildView(element, childViews),\n                    removeChildView: removeChildView(element, childViews),\n                    registerWriter: function registerWriter(writer) {\n                        return writers.push(writer);\n                    },\n                    registerReader: function registerReader(reader) {\n                        return readers.push(reader);\n                    },\n                    registerDestroyer: function registerDestroyer(destroyer) {\n                        return destroyers.push(destroyer);\n                    },\n                    invalidateLayout: function invalidateLayout() {\n                        return (element.layoutCalculated = false);\n                    },\n\n                    // access to data store\n                    dispatch: store.dispatch,\n                    query: store.query,\n                });\n\n                // public view API methods\n                var externalAPIDefinition = {\n                    element: {\n                        get: getElement,\n                    },\n\n                    childViews: {\n                        get: getChildViews,\n                    },\n\n                    rect: {\n                        get: getRect,\n                    },\n\n                    resting: {\n                        get: function get() {\n                            return isResting;\n                        },\n                    },\n\n                    isRectIgnored: function isRectIgnored() {\n                        return ignoreRect;\n                    },\n                    _read: _read,\n                    _write: _write,\n                    _destroy: _destroy,\n                };\n\n                // mixin API methods\n                var mixinAPIDefinition = Object.assign({}, sharedAPIDefinition, {\n                    rect: {\n                        get: function get() {\n                            return rect;\n                        },\n                    },\n                });\n\n                // add mixin functionality\n                Object.keys(mixins)\n                    .sort(function(a, b) {\n                        // move styles to the back of the mixin list (so adjustments of other mixins are applied to the props correctly)\n                        if (a === 'styles') {\n                            return 1;\n                        } else if (b === 'styles') {\n                            return -1;\n                        }\n                        return 0;\n                    })\n                    .forEach(function(key) {\n                        var mixinAPI = Mixins[key]({\n                            mixinConfig: mixins[key],\n                            viewProps: props,\n                            viewState: state,\n                            viewInternalAPI: internalAPIDefinition,\n                            viewExternalAPI: externalAPIDefinition,\n                            view: createObject(mixinAPIDefinition),\n                        });\n\n                        if (mixinAPI) {\n                            activeMixins.push(mixinAPI);\n                        }\n                    });\n\n                // construct private api\n                var internalAPI = createObject(internalAPIDefinition);\n\n                // create the view\n                create({\n                    root: internalAPI,\n                    props: props,\n                });\n\n                // append created child views to root node\n                var childCount = getChildCount(element); // need to know the current child count so appending happens in correct order\n                childViews.forEach(function(child, index) {\n                    internalAPI.appendChild(child.element, childCount + index);\n                });\n\n                // call did create\n                didCreateView(internalAPI);\n\n                // expose public api\n                return createObject(externalAPIDefinition);\n            };\n        };\n\n    var createPainter = function createPainter(read, write) {\n        var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 60;\n\n        var name = '__framePainter';\n\n        // set global painter\n        if (window[name]) {\n            window[name].readers.push(read);\n            window[name].writers.push(write);\n            return;\n        }\n\n        window[name] = {\n            readers: [read],\n            writers: [write],\n        };\n\n        var painter = window[name];\n\n        var interval = 1000 / fps;\n        var last = null;\n        var id = null;\n        var requestTick = null;\n        var cancelTick = null;\n\n        var setTimerType = function setTimerType() {\n            if (document.hidden) {\n                requestTick = function requestTick() {\n                    return window.setTimeout(function() {\n                        return tick(performance.now());\n                    }, interval);\n                };\n                cancelTick = function cancelTick() {\n                    return window.clearTimeout(id);\n                };\n            } else {\n                requestTick = function requestTick() {\n                    return window.requestAnimationFrame(tick);\n                };\n                cancelTick = function cancelTick() {\n                    return window.cancelAnimationFrame(id);\n                };\n            }\n        };\n\n        document.addEventListener('visibilitychange', function() {\n            if (cancelTick) cancelTick();\n            setTimerType();\n            tick(performance.now());\n        });\n\n        var tick = function tick(ts) {\n            // queue next tick\n            id = requestTick(tick);\n\n            // limit fps\n            if (!last) {\n                last = ts;\n            }\n\n            var delta = ts - last;\n\n            if (delta <= interval) {\n                // skip frame\n                return;\n            }\n\n            // align next frame\n            last = ts - (delta % interval);\n\n            // update view\n            painter.readers.forEach(function(read) {\n                return read();\n            });\n            painter.writers.forEach(function(write) {\n                return write(ts);\n            });\n        };\n\n        setTimerType();\n        tick(performance.now());\n\n        return {\n            pause: function pause() {\n                cancelTick(id);\n            },\n        };\n    };\n\n    var createRoute = function createRoute(routes, fn) {\n        return function(_ref) {\n            var root = _ref.root,\n                props = _ref.props,\n                _ref$actions = _ref.actions,\n                actions = _ref$actions === void 0 ? [] : _ref$actions,\n                timestamp = _ref.timestamp,\n                shouldOptimize = _ref.shouldOptimize;\n            actions\n                .filter(function(action) {\n                    return routes[action.type];\n                })\n                .forEach(function(action) {\n                    return routes[action.type]({\n                        root: root,\n                        props: props,\n                        action: action.data,\n                        timestamp: timestamp,\n                        shouldOptimize: shouldOptimize,\n                    });\n                });\n\n            if (fn) {\n                fn({\n                    root: root,\n                    props: props,\n                    actions: actions,\n                    timestamp: timestamp,\n                    shouldOptimize: shouldOptimize,\n                });\n            }\n        };\n    };\n\n    var insertBefore = function insertBefore(newNode, referenceNode) {\n        return referenceNode.parentNode.insertBefore(newNode, referenceNode);\n    };\n\n    var insertAfter = function insertAfter(newNode, referenceNode) {\n        return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n    };\n\n    var isArray = function isArray(value) {\n        return Array.isArray(value);\n    };\n\n    var isEmpty = function isEmpty(value) {\n        return value == null;\n    };\n\n    var trim = function trim(str) {\n        return str.trim();\n    };\n\n    var toString = function toString(value) {\n        return '' + value;\n    };\n\n    var toArray = function toArray(value) {\n        var splitter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ',';\n        if (isEmpty(value)) {\n            return [];\n        }\n        if (isArray(value)) {\n            return value;\n        }\n        return toString(value)\n            .split(splitter)\n            .map(trim)\n            .filter(function(str) {\n                return str.length;\n            });\n    };\n\n    var isBoolean = function isBoolean(value) {\n        return typeof value === 'boolean';\n    };\n\n    var toBoolean = function toBoolean(value) {\n        return isBoolean(value) ? value : value === 'true';\n    };\n\n    var isString = function isString(value) {\n        return typeof value === 'string';\n    };\n\n    var toNumber = function toNumber(value) {\n        return isNumber(value)\n            ? value\n            : isString(value)\n            ? toString(value).replace(/[a-z]+/gi, '')\n            : 0;\n    };\n\n    var toInt = function toInt(value) {\n        return parseInt(toNumber(value), 10);\n    };\n\n    var toFloat = function toFloat(value) {\n        return parseFloat(toNumber(value));\n    };\n\n    var isInt = function isInt(value) {\n        return isNumber(value) && isFinite(value) && Math.floor(value) === value;\n    };\n\n    var toBytes = function toBytes(value) {\n        var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n        // is in bytes\n        if (isInt(value)) {\n            return value;\n        }\n\n        // is natural file size\n        var naturalFileSize = toString(value).trim();\n\n        // if is value in megabytes\n        if (/MB$/i.test(naturalFileSize)) {\n            naturalFileSize = naturalFileSize.replace(/MB$i/, '').trim();\n            return toInt(naturalFileSize) * base * base;\n        }\n\n        // if is value in kilobytes\n        if (/KB/i.test(naturalFileSize)) {\n            naturalFileSize = naturalFileSize.replace(/KB$i/, '').trim();\n            return toInt(naturalFileSize) * base;\n        }\n\n        return toInt(naturalFileSize);\n    };\n\n    var isFunction = function isFunction(value) {\n        return typeof value === 'function';\n    };\n\n    var toFunctionReference = function toFunctionReference(string) {\n        var ref = self;\n        var levels = string.split('.');\n        var level = null;\n        while ((level = levels.shift())) {\n            ref = ref[level];\n            if (!ref) {\n                return null;\n            }\n        }\n        return ref;\n    };\n\n    var methods = {\n        process: 'POST',\n        patch: 'PATCH',\n        revert: 'DELETE',\n        fetch: 'GET',\n        restore: 'GET',\n        load: 'GET',\n    };\n\n    var createServerAPI = function createServerAPI(outline) {\n        var api = {};\n\n        api.url = isString(outline) ? outline : outline.url || '';\n        api.timeout = outline.timeout ? parseInt(outline.timeout, 10) : 0;\n        api.headers = outline.headers ? outline.headers : {};\n\n        forin(methods, function(key) {\n            api[key] = createAction(key, outline[key], methods[key], api.timeout, api.headers);\n        });\n\n        // remove process if no url or process on outline\n        api.process = outline.process || isString(outline) || outline.url ? api.process : null;\n\n        // special treatment for remove\n        api.remove = outline.remove || null;\n\n        // remove generic headers from api object\n        delete api.headers;\n\n        return api;\n    };\n\n    var createAction = function createAction(name, outline, method, timeout, headers) {\n        // is explicitely set to null so disable\n        if (outline === null) {\n            return null;\n        }\n\n        // if is custom function, done! Dev handles everything.\n        if (typeof outline === 'function') {\n            return outline;\n        }\n\n        // build action object\n        var action = {\n            url: method === 'GET' || method === 'PATCH' ? '?' + name + '=' : '',\n            method: method,\n            headers: headers,\n            withCredentials: false,\n            timeout: timeout,\n            onload: null,\n            ondata: null,\n            onerror: null,\n        };\n\n        // is a single url\n        if (isString(outline)) {\n            action.url = outline;\n            return action;\n        }\n\n        // overwrite\n        Object.assign(action, outline);\n\n        // see if should reformat headers;\n        if (isString(action.headers)) {\n            var parts = action.headers.split(/:(.+)/);\n            action.headers = {\n                header: parts[0],\n                value: parts[1],\n            };\n        }\n\n        // if is bool withCredentials\n        action.withCredentials = toBoolean(action.withCredentials);\n\n        return action;\n    };\n\n    var toServerAPI = function toServerAPI(value) {\n        return createServerAPI(value);\n    };\n\n    var isNull = function isNull(value) {\n        return value === null;\n    };\n\n    var isObject = function isObject(value) {\n        return typeof value === 'object' && value !== null;\n    };\n\n    var isAPI = function isAPI(value) {\n        return (\n            isObject(value) &&\n            isString(value.url) &&\n            isObject(value.process) &&\n            isObject(value.revert) &&\n            isObject(value.restore) &&\n            isObject(value.fetch)\n        );\n    };\n\n    var getType = function getType(value) {\n        if (isArray(value)) {\n            return 'array';\n        }\n\n        if (isNull(value)) {\n            return 'null';\n        }\n\n        if (isInt(value)) {\n            return 'int';\n        }\n\n        if (/^[0-9]+ ?(?:GB|MB|KB)$/gi.test(value)) {\n            return 'bytes';\n        }\n\n        if (isAPI(value)) {\n            return 'api';\n        }\n\n        return typeof value;\n    };\n\n    var replaceSingleQuotes = function replaceSingleQuotes(str) {\n        return str\n            .replace(/{\\s*'/g, '{\"')\n            .replace(/'\\s*}/g, '\"}')\n            .replace(/'\\s*:/g, '\":')\n            .replace(/:\\s*'/g, ':\"')\n            .replace(/,\\s*'/g, ',\"')\n            .replace(/'\\s*,/g, '\",');\n    };\n\n    var conversionTable = {\n        array: toArray,\n        boolean: toBoolean,\n        int: function int(value) {\n            return getType(value) === 'bytes' ? toBytes(value) : toInt(value);\n        },\n        number: toFloat,\n        float: toFloat,\n        bytes: toBytes,\n        string: function string(value) {\n            return isFunction(value) ? value : toString(value);\n        },\n        function: function _function(value) {\n            return toFunctionReference(value);\n        },\n        serverapi: toServerAPI,\n        object: function object(value) {\n            try {\n                return JSON.parse(replaceSingleQuotes(value));\n            } catch (e) {\n                return null;\n            }\n        },\n    };\n\n    var convertTo = function convertTo(value, type) {\n        return conversionTable[type](value);\n    };\n\n    var getValueByType = function getValueByType(newValue, defaultValue, valueType) {\n        // can always assign default value\n        if (newValue === defaultValue) {\n            return newValue;\n        }\n\n        // get the type of the new value\n        var newValueType = getType(newValue);\n\n        // is valid type?\n        if (newValueType !== valueType) {\n            // is string input, let's attempt to convert\n            var convertedValue = convertTo(newValue, valueType);\n\n            // what is the type now\n            newValueType = getType(convertedValue);\n\n            // no valid conversions found\n            if (convertedValue === null) {\n                throw 'Trying to assign value with incorrect type to \"' +\n                    option +\n                    '\", allowed type: \"' +\n                    valueType +\n                    '\"';\n            } else {\n                newValue = convertedValue;\n            }\n        }\n\n        // assign new value\n        return newValue;\n    };\n\n    var createOption = function createOption(defaultValue, valueType) {\n        var currentValue = defaultValue;\n        return {\n            enumerable: true,\n            get: function get() {\n                return currentValue;\n            },\n            set: function set(newValue) {\n                currentValue = getValueByType(newValue, defaultValue, valueType);\n            },\n        };\n    };\n\n    var createOptions = function createOptions(options) {\n        var obj = {};\n        forin(options, function(prop) {\n            var optionDefinition = options[prop];\n            obj[prop] = createOption(optionDefinition[0], optionDefinition[1]);\n        });\n        return createObject(obj);\n    };\n\n    var createInitialState = function createInitialState(options) {\n        return {\n            // model\n            items: [],\n\n            // timeout used for calling update items\n            listUpdateTimeout: null,\n\n            // timeout used for stacking metadata updates\n            itemUpdateTimeout: null,\n\n            // queue of items waiting to be processed\n            processingQueue: [],\n\n            // options\n            options: createOptions(options),\n        };\n    };\n\n    var fromCamels = function fromCamels(string) {\n        var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n        return string\n            .split(/(?=[A-Z])/)\n            .map(function(part) {\n                return part.toLowerCase();\n            })\n            .join(separator);\n    };\n\n    var createOptionAPI = function createOptionAPI(store, options) {\n        var obj = {};\n        forin(options, function(key) {\n            obj[key] = {\n                get: function get() {\n                    return store.getState().options[key];\n                },\n                set: function set(value) {\n                    store.dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n                        value: value,\n                    });\n                },\n            };\n        });\n        return obj;\n    };\n\n    var createOptionActions = function createOptionActions(options) {\n        return function(dispatch, query, state) {\n            var obj = {};\n            forin(options, function(key) {\n                var name = fromCamels(key, '_').toUpperCase();\n\n                obj['SET_' + name] = function(action) {\n                    try {\n                        state.options[key] = action.value;\n                    } catch (e) {} // nope, failed\n\n                    // we successfully set the value of this option\n                    dispatch('DID_SET_' + name, { value: state.options[key] });\n                };\n            });\n            return obj;\n        };\n    };\n\n    var createOptionQueries = function createOptionQueries(options) {\n        return function(state) {\n            var obj = {};\n            forin(options, function(key) {\n                obj['GET_' + fromCamels(key, '_').toUpperCase()] = function(action) {\n                    return state.options[key];\n                };\n            });\n            return obj;\n        };\n    };\n\n    var InteractionMethod = {\n        API: 1,\n        DROP: 2,\n        BROWSE: 3,\n        PASTE: 4,\n        NONE: 5,\n    };\n\n    var getUniqueId = function getUniqueId() {\n        return Math.random()\n            .toString(36)\n            .substring(2, 11);\n    };\n\n    function _typeof(obj) {\n        if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') {\n            _typeof = function(obj) {\n                return typeof obj;\n            };\n        } else {\n            _typeof = function(obj) {\n                return obj &&\n                    typeof Symbol === 'function' &&\n                    obj.constructor === Symbol &&\n                    obj !== Symbol.prototype\n                    ? 'symbol'\n                    : typeof obj;\n            };\n        }\n\n        return _typeof(obj);\n    }\n\n    var REACT_ELEMENT_TYPE;\n\n    function _jsx(type, props, key, children) {\n        if (!REACT_ELEMENT_TYPE) {\n            REACT_ELEMENT_TYPE =\n                (typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element')) ||\n                0xeac7;\n        }\n\n        var defaultProps = type && type.defaultProps;\n        var childrenLength = arguments.length - 3;\n\n        if (!props && childrenLength !== 0) {\n            props = {\n                children: void 0,\n            };\n        }\n\n        if (props && defaultProps) {\n            for (var propName in defaultProps) {\n                if (props[propName] === void 0) {\n                    props[propName] = defaultProps[propName];\n                }\n            }\n        } else if (!props) {\n            props = defaultProps || {};\n        }\n\n        if (childrenLength === 1) {\n            props.children = children;\n        } else if (childrenLength > 1) {\n            var childArray = new Array(childrenLength);\n\n            for (var i = 0; i < childrenLength; i++) {\n                childArray[i] = arguments[i + 3];\n            }\n\n            props.children = childArray;\n        }\n\n        return {\n            $$typeof: REACT_ELEMENT_TYPE,\n            type: type,\n            key: key === undefined ? null : '' + key,\n            ref: null,\n            props: props,\n            _owner: null,\n        };\n    }\n\n    function _asyncIterator(iterable) {\n        var method;\n\n        if (typeof Symbol !== 'undefined') {\n            if (Symbol.asyncIterator) {\n                method = iterable[Symbol.asyncIterator];\n                if (method != null) return method.call(iterable);\n            }\n\n            if (Symbol.iterator) {\n                method = iterable[Symbol.iterator];\n                if (method != null) return method.call(iterable);\n            }\n        }\n\n        throw new TypeError('Object is not async iterable');\n    }\n\n    function _AwaitValue(value) {\n        this.wrapped = value;\n    }\n\n    function _AsyncGenerator(gen) {\n        var front, back;\n\n        function send(key, arg) {\n            return new Promise(function(resolve, reject) {\n                var request = {\n                    key: key,\n                    arg: arg,\n                    resolve: resolve,\n                    reject: reject,\n                    next: null,\n                };\n\n                if (back) {\n                    back = back.next = request;\n                } else {\n                    front = back = request;\n                    resume(key, arg);\n                }\n            });\n        }\n\n        function resume(key, arg) {\n            try {\n                var result = gen[key](arg);\n                var value = result.value;\n                var wrappedAwait = value instanceof _AwaitValue;\n                Promise.resolve(wrappedAwait ? value.wrapped : value).then(\n                    function(arg) {\n                        if (wrappedAwait) {\n                            resume('next', arg);\n                            return;\n                        }\n\n                        settle(result.done ? 'return' : 'normal', arg);\n                    },\n                    function(err) {\n                        resume('throw', err);\n                    }\n                );\n            } catch (err) {\n                settle('throw', err);\n            }\n        }\n\n        function settle(type, value) {\n            switch (type) {\n                case 'return':\n                    front.resolve({\n                        value: value,\n                        done: true,\n                    });\n                    break;\n\n                case 'throw':\n                    front.reject(value);\n                    break;\n\n                default:\n                    front.resolve({\n                        value: value,\n                        done: false,\n                    });\n                    break;\n            }\n\n            front = front.next;\n\n            if (front) {\n                resume(front.key, front.arg);\n            } else {\n                back = null;\n            }\n        }\n\n        this._invoke = send;\n\n        if (typeof gen.return !== 'function') {\n            this.return = undefined;\n        }\n    }\n\n    if (typeof Symbol === 'function' && Symbol.asyncIterator) {\n        _AsyncGenerator.prototype[Symbol.asyncIterator] = function() {\n            return this;\n        };\n    }\n\n    _AsyncGenerator.prototype.next = function(arg) {\n        return this._invoke('next', arg);\n    };\n\n    _AsyncGenerator.prototype.throw = function(arg) {\n        return this._invoke('throw', arg);\n    };\n\n    _AsyncGenerator.prototype.return = function(arg) {\n        return this._invoke('return', arg);\n    };\n\n    function _wrapAsyncGenerator(fn) {\n        return function() {\n            return new _AsyncGenerator(fn.apply(this, arguments));\n        };\n    }\n\n    function _awaitAsyncGenerator(value) {\n        return new _AwaitValue(value);\n    }\n\n    function _asyncGeneratorDelegate(inner, awaitWrap) {\n        var iter = {},\n            waiting = false;\n\n        function pump(key, value) {\n            waiting = true;\n            value = new Promise(function(resolve) {\n                resolve(inner[key](value));\n            });\n            return {\n                done: false,\n                value: awaitWrap(value),\n            };\n        }\n\n        if (typeof Symbol === 'function' && Symbol.iterator) {\n            iter[Symbol.iterator] = function() {\n                return this;\n            };\n        }\n\n        iter.next = function(value) {\n            if (waiting) {\n                waiting = false;\n                return value;\n            }\n\n            return pump('next', value);\n        };\n\n        if (typeof inner.throw === 'function') {\n            iter.throw = function(value) {\n                if (waiting) {\n                    waiting = false;\n                    throw value;\n                }\n\n                return pump('throw', value);\n            };\n        }\n\n        if (typeof inner.return === 'function') {\n            iter.return = function(value) {\n                return pump('return', value);\n            };\n        }\n\n        return iter;\n    }\n\n    function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n        try {\n            var info = gen[key](arg);\n            var value = info.value;\n        } catch (error) {\n            reject(error);\n            return;\n        }\n\n        if (info.done) {\n            resolve(value);\n        } else {\n            Promise.resolve(value).then(_next, _throw);\n        }\n    }\n\n    function _asyncToGenerator(fn) {\n        return function() {\n            var self = this,\n                args = arguments;\n            return new Promise(function(resolve, reject) {\n                var gen = fn.apply(self, args);\n\n                function _next(value) {\n                    asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'next', value);\n                }\n\n                function _throw(err) {\n                    asyncGeneratorStep(gen, resolve, reject, _next, _throw, 'throw', err);\n                }\n\n                _next(undefined);\n            });\n        };\n    }\n\n    function _classCallCheck(instance, Constructor) {\n        if (!(instance instanceof Constructor)) {\n            throw new TypeError('Cannot call a class as a function');\n        }\n    }\n\n    function _defineProperties(target, props) {\n        for (var i = 0; i < props.length; i++) {\n            var descriptor = props[i];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if ('value' in descriptor) descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n        }\n    }\n\n    function _createClass(Constructor, protoProps, staticProps) {\n        if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n        if (staticProps) _defineProperties(Constructor, staticProps);\n        return Constructor;\n    }\n\n    function _defineEnumerableProperties(obj, descs) {\n        for (var key in descs) {\n            var desc = descs[key];\n            desc.configurable = desc.enumerable = true;\n            if ('value' in desc) desc.writable = true;\n            Object.defineProperty(obj, key, desc);\n        }\n\n        if (Object.getOwnPropertySymbols) {\n            var objectSymbols = Object.getOwnPropertySymbols(descs);\n\n            for (var i = 0; i < objectSymbols.length; i++) {\n                var sym = objectSymbols[i];\n                var desc = descs[sym];\n                desc.configurable = desc.enumerable = true;\n                if ('value' in desc) desc.writable = true;\n                Object.defineProperty(obj, sym, desc);\n            }\n        }\n\n        return obj;\n    }\n\n    function _defaults(obj, defaults) {\n        var keys = Object.getOwnPropertyNames(defaults);\n\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n            if (value && value.configurable && obj[key] === undefined) {\n                Object.defineProperty(obj, key, value);\n            }\n        }\n\n        return obj;\n    }\n\n    function _defineProperty(obj, key, value) {\n        if (key in obj) {\n            Object.defineProperty(obj, key, {\n                value: value,\n                enumerable: true,\n                configurable: true,\n                writable: true,\n            });\n        } else {\n            obj[key] = value;\n        }\n\n        return obj;\n    }\n\n    function _extends() {\n        _extends =\n            Object.assign ||\n            function(target) {\n                for (var i = 1; i < arguments.length; i++) {\n                    var source = arguments[i];\n\n                    for (var key in source) {\n                        if (Object.prototype.hasOwnProperty.call(source, key)) {\n                            target[key] = source[key];\n                        }\n                    }\n                }\n\n                return target;\n            };\n\n        return _extends.apply(this, arguments);\n    }\n\n    function _objectSpread(target) {\n        for (var i = 1; i < arguments.length; i++) {\n            var source = arguments[i] != null ? arguments[i] : {};\n            var ownKeys = Object.keys(source);\n\n            if (typeof Object.getOwnPropertySymbols === 'function') {\n                ownKeys = ownKeys.concat(\n                    Object.getOwnPropertySymbols(source).filter(function(sym) {\n                        return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n                    })\n                );\n            }\n\n            ownKeys.forEach(function(key) {\n                _defineProperty(target, key, source[key]);\n            });\n        }\n\n        return target;\n    }\n\n    function ownKeys(object, enumerableOnly) {\n        var keys = Object.keys(object);\n\n        if (Object.getOwnPropertySymbols) {\n            var symbols = Object.getOwnPropertySymbols(object);\n            if (enumerableOnly)\n                symbols = symbols.filter(function(sym) {\n                    return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n                });\n            keys.push.apply(keys, symbols);\n        }\n\n        return keys;\n    }\n\n    function _objectSpread2(target) {\n        for (var i = 1; i < arguments.length; i++) {\n            var source = arguments[i] != null ? arguments[i] : {};\n\n            if (i % 2) {\n                ownKeys(source, true).forEach(function(key) {\n                    _defineProperty(target, key, source[key]);\n                });\n            } else if (Object.getOwnPropertyDescriptors) {\n                Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n            } else {\n                ownKeys(source).forEach(function(key) {\n                    Object.defineProperty(\n                        target,\n                        key,\n                        Object.getOwnPropertyDescriptor(source, key)\n                    );\n                });\n            }\n        }\n\n        return target;\n    }\n\n    function _inherits(subClass, superClass) {\n        if (typeof superClass !== 'function' && superClass !== null) {\n            throw new TypeError('Super expression must either be null or a function');\n        }\n\n        subClass.prototype = Object.create(superClass && superClass.prototype, {\n            constructor: {\n                value: subClass,\n                writable: true,\n                configurable: true,\n            },\n        });\n        if (superClass) _setPrototypeOf(subClass, superClass);\n    }\n\n    function _inheritsLoose(subClass, superClass) {\n        subClass.prototype = Object.create(superClass.prototype);\n        subClass.prototype.constructor = subClass;\n        subClass.__proto__ = superClass;\n    }\n\n    function _getPrototypeOf(o) {\n        _getPrototypeOf = Object.setPrototypeOf\n            ? Object.getPrototypeOf\n            : function _getPrototypeOf(o) {\n                  return o.__proto__ || Object.getPrototypeOf(o);\n              };\n        return _getPrototypeOf(o);\n    }\n\n    function _setPrototypeOf(o, p) {\n        _setPrototypeOf =\n            Object.setPrototypeOf ||\n            function _setPrototypeOf(o, p) {\n                o.__proto__ = p;\n                return o;\n            };\n\n        return _setPrototypeOf(o, p);\n    }\n\n    function isNativeReflectConstruct() {\n        if (typeof Reflect === 'undefined' || !Reflect.construct) return false;\n        if (Reflect.construct.sham) return false;\n        if (typeof Proxy === 'function') return true;\n\n        try {\n            Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    function _construct(Parent, args, Class) {\n        if (isNativeReflectConstruct()) {\n            _construct = Reflect.construct;\n        } else {\n            _construct = function _construct(Parent, args, Class) {\n                var a = [null];\n                a.push.apply(a, args);\n                var Constructor = Function.bind.apply(Parent, a);\n                var instance = new Constructor();\n                if (Class) _setPrototypeOf(instance, Class.prototype);\n                return instance;\n            };\n        }\n\n        return _construct.apply(null, arguments);\n    }\n\n    function _isNativeFunction(fn) {\n        return Function.toString.call(fn).indexOf('[native code]') !== -1;\n    }\n\n    function _wrapNativeSuper(Class) {\n        var _cache = typeof Map === 'function' ? new Map() : undefined;\n\n        _wrapNativeSuper = function _wrapNativeSuper(Class) {\n            if (Class === null || !_isNativeFunction(Class)) return Class;\n\n            if (typeof Class !== 'function') {\n                throw new TypeError('Super expression must either be null or a function');\n            }\n\n            if (typeof _cache !== 'undefined') {\n                if (_cache.has(Class)) return _cache.get(Class);\n\n                _cache.set(Class, Wrapper);\n            }\n\n            function Wrapper() {\n                return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n            }\n\n            Wrapper.prototype = Object.create(Class.prototype, {\n                constructor: {\n                    value: Wrapper,\n                    enumerable: false,\n                    writable: true,\n                    configurable: true,\n                },\n            });\n            return _setPrototypeOf(Wrapper, Class);\n        };\n\n        return _wrapNativeSuper(Class);\n    }\n\n    function _instanceof(left, right) {\n        if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) {\n            return !!right[Symbol.hasInstance](left);\n        } else {\n            return left instanceof right;\n        }\n    }\n\n    function _interopRequireDefault(obj) {\n        return obj && obj.__esModule\n            ? obj\n            : {\n                  default: obj,\n              };\n    }\n\n    function _interopRequireWildcard(obj) {\n        if (obj && obj.__esModule) {\n            return obj;\n        } else {\n            var newObj = {};\n\n            if (obj != null) {\n                for (var key in obj) {\n                    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                        var desc =\n                            Object.defineProperty && Object.getOwnPropertyDescriptor\n                                ? Object.getOwnPropertyDescriptor(obj, key)\n                                : {};\n\n                        if (desc.get || desc.set) {\n                            Object.defineProperty(newObj, key, desc);\n                        } else {\n                            newObj[key] = obj[key];\n                        }\n                    }\n                }\n            }\n\n            newObj.default = obj;\n            return newObj;\n        }\n    }\n\n    function _newArrowCheck(innerThis, boundThis) {\n        if (innerThis !== boundThis) {\n            throw new TypeError('Cannot instantiate an arrow function');\n        }\n    }\n\n    function _objectDestructuringEmpty(obj) {\n        if (obj == null) throw new TypeError('Cannot destructure undefined');\n    }\n\n    function _objectWithoutPropertiesLoose(source, excluded) {\n        if (source == null) return {};\n        var target = {};\n        var sourceKeys = Object.keys(source);\n        var key, i;\n\n        for (i = 0; i < sourceKeys.length; i++) {\n            key = sourceKeys[i];\n            if (excluded.indexOf(key) >= 0) continue;\n            target[key] = source[key];\n        }\n\n        return target;\n    }\n\n    function _objectWithoutProperties(source, excluded) {\n        if (source == null) return {};\n\n        var target = _objectWithoutPropertiesLoose(source, excluded);\n\n        var key, i;\n\n        if (Object.getOwnPropertySymbols) {\n            var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n            for (i = 0; i < sourceSymbolKeys.length; i++) {\n                key = sourceSymbolKeys[i];\n                if (excluded.indexOf(key) >= 0) continue;\n                if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n                target[key] = source[key];\n            }\n        }\n\n        return target;\n    }\n\n    function _assertThisInitialized(self) {\n        if (self === void 0) {\n            throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n        }\n\n        return self;\n    }\n\n    function _possibleConstructorReturn(self, call) {\n        if (call && (typeof call === 'object' || typeof call === 'function')) {\n            return call;\n        }\n\n        return _assertThisInitialized(self);\n    }\n\n    function _superPropBase(object, property) {\n        while (!Object.prototype.hasOwnProperty.call(object, property)) {\n            object = _getPrototypeOf(object);\n            if (object === null) break;\n        }\n\n        return object;\n    }\n\n    function _get(target, property, receiver) {\n        if (typeof Reflect !== 'undefined' && Reflect.get) {\n            _get = Reflect.get;\n        } else {\n            _get = function _get(target, property, receiver) {\n                var base = _superPropBase(target, property);\n\n                if (!base) return;\n                var desc = Object.getOwnPropertyDescriptor(base, property);\n\n                if (desc.get) {\n                    return desc.get.call(receiver);\n                }\n\n                return desc.value;\n            };\n        }\n\n        return _get(target, property, receiver || target);\n    }\n\n    function set(target, property, value, receiver) {\n        if (typeof Reflect !== 'undefined' && Reflect.set) {\n            set = Reflect.set;\n        } else {\n            set = function set(target, property, value, receiver) {\n                var base = _superPropBase(target, property);\n\n                var desc;\n\n                if (base) {\n                    desc = Object.getOwnPropertyDescriptor(base, property);\n\n                    if (desc.set) {\n                        desc.set.call(receiver, value);\n                        return true;\n                    } else if (!desc.writable) {\n                        return false;\n                    }\n                }\n\n                desc = Object.getOwnPropertyDescriptor(receiver, property);\n\n                if (desc) {\n                    if (!desc.writable) {\n                        return false;\n                    }\n\n                    desc.value = value;\n                    Object.defineProperty(receiver, property, desc);\n                } else {\n                    _defineProperty(receiver, property, value);\n                }\n\n                return true;\n            };\n        }\n\n        return set(target, property, value, receiver);\n    }\n\n    function _set(target, property, value, receiver, isStrict) {\n        var s = set(target, property, value, receiver || target);\n\n        if (!s && isStrict) {\n            throw new Error('failed to set property');\n        }\n\n        return value;\n    }\n\n    function _taggedTemplateLiteral(strings, raw) {\n        if (!raw) {\n            raw = strings.slice(0);\n        }\n\n        return Object.freeze(\n            Object.defineProperties(strings, {\n                raw: {\n                    value: Object.freeze(raw),\n                },\n            })\n        );\n    }\n\n    function _taggedTemplateLiteralLoose(strings, raw) {\n        if (!raw) {\n            raw = strings.slice(0);\n        }\n\n        strings.raw = raw;\n        return strings;\n    }\n\n    function _temporalRef(val, name) {\n        if (val === _temporalUndefined) {\n            throw new ReferenceError(name + ' is not defined - temporal dead zone');\n        } else {\n            return val;\n        }\n    }\n\n    function _readOnlyError(name) {\n        throw new Error('\"' + name + '\" is read-only');\n    }\n\n    function _classNameTDZError(name) {\n        throw new Error('Class \"' + name + '\" cannot be referenced in computed property keys.');\n    }\n\n    var _temporalUndefined = {};\n\n    function _slicedToArray(arr, i) {\n        return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n    }\n\n    function _slicedToArrayLoose(arr, i) {\n        return _arrayWithHoles(arr) || _iterableToArrayLimitLoose(arr, i) || _nonIterableRest();\n    }\n\n    function _toArray(arr) {\n        return _arrayWithHoles(arr) || _iterableToArray(arr) || _nonIterableRest();\n    }\n\n    function _toConsumableArray(arr) {\n        return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n    }\n\n    function _arrayWithoutHoles(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n            return arr2;\n        }\n    }\n\n    function _arrayWithHoles(arr) {\n        if (Array.isArray(arr)) return arr;\n    }\n\n    function _iterableToArray(iter) {\n        if (\n            Symbol.iterator in Object(iter) ||\n            Object.prototype.toString.call(iter) === '[object Arguments]'\n        )\n            return Array.from(iter);\n    }\n\n    function _iterableToArrayLimit(arr, i) {\n        var _arr = [];\n        var _n = true;\n        var _d = false;\n        var _e = undefined;\n\n        try {\n            for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                _arr.push(_s.value);\n\n                if (i && _arr.length === i) break;\n            }\n        } catch (err) {\n            _d = true;\n            _e = err;\n        } finally {\n            try {\n                if (!_n && _i['return'] != null) _i['return']();\n            } finally {\n                if (_d) throw _e;\n            }\n        }\n\n        return _arr;\n    }\n\n    function _iterableToArrayLimitLoose(arr, i) {\n        var _arr = [];\n\n        for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done; ) {\n            _arr.push(_step.value);\n\n            if (i && _arr.length === i) break;\n        }\n\n        return _arr;\n    }\n\n    function _nonIterableSpread() {\n        throw new TypeError('Invalid attempt to spread non-iterable instance');\n    }\n\n    function _nonIterableRest() {\n        throw new TypeError('Invalid attempt to destructure non-iterable instance');\n    }\n\n    function _skipFirstGeneratorNext(fn) {\n        return function() {\n            var it = fn.apply(this, arguments);\n            it.next();\n            return it;\n        };\n    }\n\n    function _toPrimitive(input, hint) {\n        if (typeof input !== 'object' || input === null) return input;\n        var prim = input[Symbol.toPrimitive];\n\n        if (prim !== undefined) {\n            var res = prim.call(input, hint || 'default');\n            if (typeof res !== 'object') return res;\n            throw new TypeError('@@toPrimitive must return a primitive value.');\n        }\n\n        return (hint === 'string' ? String : Number)(input);\n    }\n\n    function _toPropertyKey(arg) {\n        var key = _toPrimitive(arg, 'string');\n\n        return typeof key === 'symbol' ? key : String(key);\n    }\n\n    function _initializerWarningHelper(descriptor, context) {\n        throw new Error(\n            'Decorating class property failed. Please ensure that ' +\n                'proposal-class-properties is enabled and set to use loose mode. ' +\n                'To use proposal-class-properties in spec mode with decorators, wait for ' +\n                'the next major version of decorators in stage 2.'\n        );\n    }\n\n    function _initializerDefineProperty(target, property, descriptor, context) {\n        if (!descriptor) return;\n        Object.defineProperty(target, property, {\n            enumerable: descriptor.enumerable,\n            configurable: descriptor.configurable,\n            writable: descriptor.writable,\n            value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,\n        });\n    }\n\n    function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n        var desc = {};\n        Object.keys(descriptor).forEach(function(key) {\n            desc[key] = descriptor[key];\n        });\n        desc.enumerable = !!desc.enumerable;\n        desc.configurable = !!desc.configurable;\n\n        if ('value' in desc || desc.initializer) {\n            desc.writable = true;\n        }\n\n        desc = decorators\n            .slice()\n            .reverse()\n            .reduce(function(desc, decorator) {\n                return decorator(target, property, desc) || desc;\n            }, desc);\n\n        if (context && desc.initializer !== void 0) {\n            desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n            desc.initializer = undefined;\n        }\n\n        if (desc.initializer === void 0) {\n            Object.defineProperty(target, property, desc);\n            desc = null;\n        }\n\n        return desc;\n    }\n\n    var id = 0;\n\n    function _classPrivateFieldLooseKey(name) {\n        return '__private_' + id++ + '_' + name;\n    }\n\n    function _classPrivateFieldLooseBase(receiver, privateKey) {\n        if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n            throw new TypeError('attempted to use private field on non-instance');\n        }\n\n        return receiver;\n    }\n\n    function _classPrivateFieldGet(receiver, privateMap) {\n        var descriptor = privateMap.get(receiver);\n\n        if (!descriptor) {\n            throw new TypeError('attempted to get private field on non-instance');\n        }\n\n        if (descriptor.get) {\n            return descriptor.get.call(receiver);\n        }\n\n        return descriptor.value;\n    }\n\n    function _classPrivateFieldSet(receiver, privateMap, value) {\n        var descriptor = privateMap.get(receiver);\n\n        if (!descriptor) {\n            throw new TypeError('attempted to set private field on non-instance');\n        }\n\n        if (descriptor.set) {\n            descriptor.set.call(receiver, value);\n        } else {\n            if (!descriptor.writable) {\n                throw new TypeError('attempted to set read only private field');\n            }\n\n            descriptor.value = value;\n        }\n\n        return value;\n    }\n\n    function _classPrivateFieldDestructureSet(receiver, privateMap) {\n        if (!privateMap.has(receiver)) {\n            throw new TypeError('attempted to set private field on non-instance');\n        }\n\n        var descriptor = privateMap.get(receiver);\n\n        if (descriptor.set) {\n            if (!('__destrObj' in descriptor)) {\n                descriptor.__destrObj = {\n                    set value(v) {\n                        descriptor.set.call(receiver, v);\n                    },\n                };\n            }\n\n            return descriptor.__destrObj;\n        } else {\n            if (!descriptor.writable) {\n                throw new TypeError('attempted to set read only private field');\n            }\n\n            return descriptor;\n        }\n    }\n\n    function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {\n        if (receiver !== classConstructor) {\n            throw new TypeError('Private static access of wrong provenance');\n        }\n\n        return descriptor.value;\n    }\n\n    function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {\n        if (receiver !== classConstructor) {\n            throw new TypeError('Private static access of wrong provenance');\n        }\n\n        if (!descriptor.writable) {\n            throw new TypeError('attempted to set read only private field');\n        }\n\n        descriptor.value = value;\n        return value;\n    }\n\n    function _classStaticPrivateMethodGet(receiver, classConstructor, method) {\n        if (receiver !== classConstructor) {\n            throw new TypeError('Private static access of wrong provenance');\n        }\n\n        return method;\n    }\n\n    function _classStaticPrivateMethodSet() {\n        throw new TypeError('attempted to set read only static private field');\n    }\n\n    function _decorate(decorators, factory, superClass, mixins) {\n        var api = _getDecoratorsApi();\n\n        if (mixins) {\n            for (var i = 0; i < mixins.length; i++) {\n                api = mixins[i](api);\n            }\n        }\n\n        var r = factory(function initialize(O) {\n            api.initializeInstanceElements(O, decorated.elements);\n        }, superClass);\n        var decorated = api.decorateClass(\n            _coalesceClassElements(r.d.map(_createElementDescriptor)),\n            decorators\n        );\n        api.initializeClassElements(r.F, decorated.elements);\n        return api.runClassFinishers(r.F, decorated.finishers);\n    }\n\n    function _getDecoratorsApi() {\n        _getDecoratorsApi = function() {\n            return api;\n        };\n\n        var api = {\n            elementsDefinitionOrder: [['method'], ['field']],\n            initializeInstanceElements: function(O, elements) {\n                ['method', 'field'].forEach(function(kind) {\n                    elements.forEach(function(element) {\n                        if (element.kind === kind && element.placement === 'own') {\n                            this.defineClassElement(O, element);\n                        }\n                    }, this);\n                }, this);\n            },\n            initializeClassElements: function(F, elements) {\n                var proto = F.prototype;\n                ['method', 'field'].forEach(function(kind) {\n                    elements.forEach(function(element) {\n                        var placement = element.placement;\n\n                        if (\n                            element.kind === kind &&\n                            (placement === 'static' || placement === 'prototype')\n                        ) {\n                            var receiver = placement === 'static' ? F : proto;\n                            this.defineClassElement(receiver, element);\n                        }\n                    }, this);\n                }, this);\n            },\n            defineClassElement: function(receiver, element) {\n                var descriptor = element.descriptor;\n\n                if (element.kind === 'field') {\n                    var initializer = element.initializer;\n                    descriptor = {\n                        enumerable: descriptor.enumerable,\n                        writable: descriptor.writable,\n                        configurable: descriptor.configurable,\n                        value: initializer === void 0 ? void 0 : initializer.call(receiver),\n                    };\n                }\n\n                Object.defineProperty(receiver, element.key, descriptor);\n            },\n            decorateClass: function(elements, decorators) {\n                var newElements = [];\n                var finishers = [];\n                var placements = {\n                    static: [],\n                    prototype: [],\n                    own: [],\n                };\n                elements.forEach(function(element) {\n                    this.addElementPlacement(element, placements);\n                }, this);\n                elements.forEach(function(element) {\n                    if (!_hasDecorators(element)) return newElements.push(element);\n                    var elementFinishersExtras = this.decorateElement(element, placements);\n                    newElements.push(elementFinishersExtras.element);\n                    newElements.push.apply(newElements, elementFinishersExtras.extras);\n                    finishers.push.apply(finishers, elementFinishersExtras.finishers);\n                }, this);\n\n                if (!decorators) {\n                    return {\n                        elements: newElements,\n                        finishers: finishers,\n                    };\n                }\n\n                var result = this.decorateConstructor(newElements, decorators);\n                finishers.push.apply(finishers, result.finishers);\n                result.finishers = finishers;\n                return result;\n            },\n            addElementPlacement: function(element, placements, silent) {\n                var keys = placements[element.placement];\n\n                if (!silent && keys.indexOf(element.key) !== -1) {\n                    throw new TypeError('Duplicated element (' + element.key + ')');\n                }\n\n                keys.push(element.key);\n            },\n            decorateElement: function(element, placements) {\n                var extras = [];\n                var finishers = [];\n\n                for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {\n                    var keys = placements[element.placement];\n                    keys.splice(keys.indexOf(element.key), 1);\n                    var elementObject = this.fromElementDescriptor(element);\n                    var elementFinisherExtras = this.toElementFinisherExtras(\n                        (0, decorators[i])(elementObject) || elementObject\n                    );\n                    element = elementFinisherExtras.element;\n                    this.addElementPlacement(element, placements);\n\n                    if (elementFinisherExtras.finisher) {\n                        finishers.push(elementFinisherExtras.finisher);\n                    }\n\n                    var newExtras = elementFinisherExtras.extras;\n\n                    if (newExtras) {\n                        for (var j = 0; j < newExtras.length; j++) {\n                            this.addElementPlacement(newExtras[j], placements);\n                        }\n\n                        extras.push.apply(extras, newExtras);\n                    }\n                }\n\n                return {\n                    element: element,\n                    finishers: finishers,\n                    extras: extras,\n                };\n            },\n            decorateConstructor: function(elements, decorators) {\n                var finishers = [];\n\n                for (var i = decorators.length - 1; i >= 0; i--) {\n                    var obj = this.fromClassDescriptor(elements);\n                    var elementsAndFinisher = this.toClassDescriptor(\n                        (0, decorators[i])(obj) || obj\n                    );\n\n                    if (elementsAndFinisher.finisher !== undefined) {\n                        finishers.push(elementsAndFinisher.finisher);\n                    }\n\n                    if (elementsAndFinisher.elements !== undefined) {\n                        elements = elementsAndFinisher.elements;\n\n                        for (var j = 0; j < elements.length - 1; j++) {\n                            for (var k = j + 1; k < elements.length; k++) {\n                                if (\n                                    elements[j].key === elements[k].key &&\n                                    elements[j].placement === elements[k].placement\n                                ) {\n                                    throw new TypeError(\n                                        'Duplicated element (' + elements[j].key + ')'\n                                    );\n                                }\n                            }\n                        }\n                    }\n                }\n\n                return {\n                    elements: elements,\n                    finishers: finishers,\n                };\n            },\n            fromElementDescriptor: function(element) {\n                var obj = {\n                    kind: element.kind,\n                    key: element.key,\n                    placement: element.placement,\n                    descriptor: element.descriptor,\n                };\n                var desc = {\n                    value: 'Descriptor',\n                    configurable: true,\n                };\n                Object.defineProperty(obj, Symbol.toStringTag, desc);\n                if (element.kind === 'field') obj.initializer = element.initializer;\n                return obj;\n            },\n            toElementDescriptors: function(elementObjects) {\n                if (elementObjects === undefined) return;\n                return _toArray(elementObjects).map(function(elementObject) {\n                    var element = this.toElementDescriptor(elementObject);\n                    this.disallowProperty(elementObject, 'finisher', 'An element descriptor');\n                    this.disallowProperty(elementObject, 'extras', 'An element descriptor');\n                    return element;\n                }, this);\n            },\n            toElementDescriptor: function(elementObject) {\n                var kind = String(elementObject.kind);\n\n                if (kind !== 'method' && kind !== 'field') {\n                    throw new TypeError(\n                        'An element descriptor\\'s .kind property must be either \"method\" or' +\n                            ' \"field\", but a decorator created an element descriptor with' +\n                            ' .kind \"' +\n                            kind +\n                            '\"'\n                    );\n                }\n\n                var key = _toPropertyKey(elementObject.key);\n\n                var placement = String(elementObject.placement);\n\n                if (placement !== 'static' && placement !== 'prototype' && placement !== 'own') {\n                    throw new TypeError(\n                        'An element descriptor\\'s .placement property must be one of \"static\",' +\n                            ' \"prototype\" or \"own\", but a decorator created an element descriptor' +\n                            ' with .placement \"' +\n                            placement +\n                            '\"'\n                    );\n                }\n\n                var descriptor = elementObject.descriptor;\n                this.disallowProperty(elementObject, 'elements', 'An element descriptor');\n                var element = {\n                    kind: kind,\n                    key: key,\n                    placement: placement,\n                    descriptor: Object.assign({}, descriptor),\n                };\n\n                if (kind !== 'field') {\n                    this.disallowProperty(elementObject, 'initializer', 'A method descriptor');\n                } else {\n                    this.disallowProperty(\n                        descriptor,\n                        'get',\n                        'The property descriptor of a field descriptor'\n                    );\n                    this.disallowProperty(\n                        descriptor,\n                        'set',\n                        'The property descriptor of a field descriptor'\n                    );\n                    this.disallowProperty(\n                        descriptor,\n                        'value',\n                        'The property descriptor of a field descriptor'\n                    );\n                    element.initializer = elementObject.initializer;\n                }\n\n                return element;\n            },\n            toElementFinisherExtras: function(elementObject) {\n                var element = this.toElementDescriptor(elementObject);\n\n                var finisher = _optionalCallableProperty(elementObject, 'finisher');\n\n                var extras = this.toElementDescriptors(elementObject.extras);\n                return {\n                    element: element,\n                    finisher: finisher,\n                    extras: extras,\n                };\n            },\n            fromClassDescriptor: function(elements) {\n                var obj = {\n                    kind: 'class',\n                    elements: elements.map(this.fromElementDescriptor, this),\n                };\n                var desc = {\n                    value: 'Descriptor',\n                    configurable: true,\n                };\n                Object.defineProperty(obj, Symbol.toStringTag, desc);\n                return obj;\n            },\n            toClassDescriptor: function(obj) {\n                var kind = String(obj.kind);\n\n                if (kind !== 'class') {\n                    throw new TypeError(\n                        'A class descriptor\\'s .kind property must be \"class\", but a decorator' +\n                            ' created a class descriptor with .kind \"' +\n                            kind +\n                            '\"'\n                    );\n                }\n\n                this.disallowProperty(obj, 'key', 'A class descriptor');\n                this.disallowProperty(obj, 'placement', 'A class descriptor');\n                this.disallowProperty(obj, 'descriptor', 'A class descriptor');\n                this.disallowProperty(obj, 'initializer', 'A class descriptor');\n                this.disallowProperty(obj, 'extras', 'A class descriptor');\n\n                var finisher = _optionalCallableProperty(obj, 'finisher');\n\n                var elements = this.toElementDescriptors(obj.elements);\n                return {\n                    elements: elements,\n                    finisher: finisher,\n                };\n            },\n            runClassFinishers: function(constructor, finishers) {\n                for (var i = 0; i < finishers.length; i++) {\n                    var newConstructor = (0, finishers[i])(constructor);\n\n                    if (newConstructor !== undefined) {\n                        if (typeof newConstructor !== 'function') {\n                            throw new TypeError('Finishers must return a constructor.');\n                        }\n\n                        constructor = newConstructor;\n                    }\n                }\n\n                return constructor;\n            },\n            disallowProperty: function(obj, name, objectType) {\n                if (obj[name] !== undefined) {\n                    throw new TypeError(objectType + \" can't have a .\" + name + ' property.');\n                }\n            },\n        };\n        return api;\n    }\n\n    function _createElementDescriptor(def) {\n        var key = _toPropertyKey(def.key);\n\n        var descriptor;\n\n        if (def.kind === 'method') {\n            descriptor = {\n                value: def.value,\n                writable: true,\n                configurable: true,\n                enumerable: false,\n            };\n        } else if (def.kind === 'get') {\n            descriptor = {\n                get: def.value,\n                configurable: true,\n                enumerable: false,\n            };\n        } else if (def.kind === 'set') {\n            descriptor = {\n                set: def.value,\n                configurable: true,\n                enumerable: false,\n            };\n        } else if (def.kind === 'field') {\n            descriptor = {\n                configurable: true,\n                writable: true,\n                enumerable: true,\n            };\n        }\n\n        var element = {\n            kind: def.kind === 'field' ? 'field' : 'method',\n            key: key,\n            placement: def.static ? 'static' : def.kind === 'field' ? 'own' : 'prototype',\n            descriptor: descriptor,\n        };\n        if (def.decorators) element.decorators = def.decorators;\n        if (def.kind === 'field') element.initializer = def.value;\n        return element;\n    }\n\n    function _coalesceGetterSetter(element, other) {\n        if (element.descriptor.get !== undefined) {\n            other.descriptor.get = element.descriptor.get;\n        } else {\n            other.descriptor.set = element.descriptor.set;\n        }\n    }\n\n    function _coalesceClassElements(elements) {\n        var newElements = [];\n\n        var isSameElement = function(other) {\n            return (\n                other.kind === 'method' &&\n                other.key === element.key &&\n                other.placement === element.placement\n            );\n        };\n\n        for (var i = 0; i < elements.length; i++) {\n            var element = elements[i];\n            var other;\n\n            if (element.kind === 'method' && (other = newElements.find(isSameElement))) {\n                if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {\n                    if (_hasDecorators(element) || _hasDecorators(other)) {\n                        throw new ReferenceError(\n                            'Duplicated methods (' + element.key + \") can't be decorated.\"\n                        );\n                    }\n\n                    other.descriptor = element.descriptor;\n                } else {\n                    if (_hasDecorators(element)) {\n                        if (_hasDecorators(other)) {\n                            throw new ReferenceError(\n                                \"Decorators can't be placed on different accessors with for \" +\n                                    'the same property (' +\n                                    element.key +\n                                    ').'\n                            );\n                        }\n\n                        other.decorators = element.decorators;\n                    }\n\n                    _coalesceGetterSetter(element, other);\n                }\n            } else {\n                newElements.push(element);\n            }\n        }\n\n        return newElements;\n    }\n\n    function _hasDecorators(element) {\n        return element.decorators && element.decorators.length;\n    }\n\n    function _isDataDescriptor(desc) {\n        return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);\n    }\n\n    function _optionalCallableProperty(obj, name) {\n        var value = obj[name];\n\n        if (value !== undefined && typeof value !== 'function') {\n            throw new TypeError(\"Expected '\" + name + \"' to be a function\");\n        }\n\n        return value;\n    }\n\n    function _classPrivateMethodGet(receiver, privateSet, fn) {\n        if (!privateSet.has(receiver)) {\n            throw new TypeError('attempted to get private field on non-instance');\n        }\n\n        return fn;\n    }\n\n    function _classPrivateMethodSet() {\n        throw new TypeError('attempted to reassign private method');\n    }\n\n    function _wrapRegExp(re, groups) {\n        _wrapRegExp = function(re, groups) {\n            return new BabelRegExp(re, groups);\n        };\n\n        var _RegExp = _wrapNativeSuper(RegExp);\n\n        var _super = RegExp.prototype;\n\n        var _groups = new WeakMap();\n\n        function BabelRegExp(re, groups) {\n            var _this = _RegExp.call(this, re);\n\n            _groups.set(_this, groups);\n\n            return _this;\n        }\n\n        _inherits(BabelRegExp, _RegExp);\n\n        BabelRegExp.prototype.exec = function(str) {\n            var result = _super.exec.call(this, str);\n\n            if (result) result.groups = buildGroups(result, this);\n            return result;\n        };\n\n        BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {\n            if (typeof substitution === 'string') {\n                var groups = _groups.get(this);\n\n                return _super[Symbol.replace].call(\n                    this,\n                    str,\n                    substitution.replace(/\\$<([^>]+)>/g, function(_, name) {\n                        return '$' + groups[name];\n                    })\n                );\n            } else if (typeof substitution === 'function') {\n                var _this = this;\n\n                return _super[Symbol.replace].call(this, str, function() {\n                    var args = [];\n                    args.push.apply(args, arguments);\n\n                    if (typeof args[args.length - 1] !== 'object') {\n                        args.push(buildGroups(args, _this));\n                    }\n\n                    return substitution.apply(this, args);\n                });\n            } else {\n                return _super[Symbol.replace].call(this, str, substitution);\n            }\n        };\n\n        function buildGroups(result, re) {\n            var g = _groups.get(re);\n\n            return Object.keys(g).reduce(function(groups, name) {\n                groups[name] = result[g[name]];\n                return groups;\n            }, Object.create(null));\n        }\n\n        return _wrapRegExp.apply(this, arguments);\n    }\n\n    var arrayRemove = function arrayRemove(arr, index) {\n        return arr.splice(index, 1);\n    };\n\n    var run = function run(cb, sync) {\n        if (sync) {\n            cb();\n        } else if (document.hidden) {\n            Promise.resolve(1).then(cb);\n        } else {\n            setTimeout(cb, 0);\n        }\n    };\n\n    var on = function on() {\n        var listeners = [];\n        var off = function off(event, cb) {\n            arrayRemove(\n                listeners,\n                listeners.findIndex(function(listener) {\n                    return listener.event === event && (listener.cb === cb || !cb);\n                })\n            );\n        };\n        var _fire = function fire(event, args, sync) {\n            listeners\n                .filter(function(listener) {\n                    return listener.event === event;\n                })\n                .map(function(listener) {\n                    return listener.cb;\n                })\n                .forEach(function(cb) {\n                    return run(function() {\n                        return cb.apply(void 0, _toConsumableArray(args));\n                    }, sync);\n                });\n        };\n        return {\n            fireSync: function fireSync(event) {\n                for (\n                    var _len = arguments.length,\n                        args = new Array(_len > 1 ? _len - 1 : 0),\n                        _key = 1;\n                    _key < _len;\n                    _key++\n                ) {\n                    args[_key - 1] = arguments[_key];\n                }\n                _fire(event, args, true);\n            },\n            fire: function fire(event) {\n                for (\n                    var _len2 = arguments.length,\n                        args = new Array(_len2 > 1 ? _len2 - 1 : 0),\n                        _key2 = 1;\n                    _key2 < _len2;\n                    _key2++\n                ) {\n                    args[_key2 - 1] = arguments[_key2];\n                }\n                _fire(event, args, false);\n            },\n            on: function on(event, cb) {\n                listeners.push({ event: event, cb: cb });\n            },\n            onOnce: function onOnce(event, _cb) {\n                listeners.push({\n                    event: event,\n                    cb: function cb() {\n                        off(event, _cb);\n                        _cb.apply(void 0, arguments);\n                    },\n                });\n            },\n            off: off,\n        };\n    };\n\n    var copyObjectPropertiesToObject = function copyObjectPropertiesToObject(\n        src,\n        target,\n        excluded\n    ) {\n        Object.getOwnPropertyNames(src)\n            .filter(function(property) {\n                return !excluded.includes(property);\n            })\n            .forEach(function(key) {\n                return Object.defineProperty(\n                    target,\n                    key,\n                    Object.getOwnPropertyDescriptor(src, key)\n                );\n            });\n    };\n\n    var PRIVATE = [\n        'fire',\n        'process',\n        'revert',\n        'load',\n        'on',\n        'off',\n        'onOnce',\n        'retryLoad',\n        'extend',\n        'archive',\n        'archived',\n        'release',\n        'released',\n        'requestProcessing',\n        'freeze',\n    ];\n\n    var createItemAPI = function createItemAPI(item) {\n        var api = {};\n        copyObjectPropertiesToObject(item, api, PRIVATE);\n        return api;\n    };\n\n    var removeReleasedItems = function removeReleasedItems(items) {\n        items.forEach(function(item, index) {\n            if (item.released) {\n                arrayRemove(items, index);\n            }\n        });\n    };\n\n    var ItemStatus = {\n        INIT: 1,\n        IDLE: 2,\n        PROCESSING_QUEUED: 9,\n        PROCESSING: 3,\n        PROCESSING_COMPLETE: 5,\n        PROCESSING_ERROR: 6,\n        PROCESSING_REVERT_ERROR: 10,\n        LOADING: 7,\n        LOAD_ERROR: 8,\n    };\n\n    var FileOrigin = {\n        INPUT: 1,\n        LIMBO: 2,\n        LOCAL: 3,\n    };\n\n    var getNonNumeric = function getNonNumeric(str) {\n        return /[^0-9]+/.exec(str);\n    };\n\n    var getDecimalSeparator = function getDecimalSeparator() {\n        return getNonNumeric((1.1).toLocaleString())[0];\n    };\n\n    var getThousandsSeparator = function getThousandsSeparator() {\n        // Added for browsers that do not return the thousands separator (happend on native browser Android 4.4.4)\n        // We check against the normal toString output and if they're the same return a comma when decimal separator is a dot\n        var decimalSeparator = getDecimalSeparator();\n        var thousandsStringWithSeparator = (1000.0).toLocaleString();\n        var thousandsStringWithoutSeparator = (1000.0).toString();\n        if (thousandsStringWithSeparator !== thousandsStringWithoutSeparator) {\n            return getNonNumeric(thousandsStringWithSeparator)[0];\n        }\n        return decimalSeparator === '.' ? ',' : '.';\n    };\n\n    var Type = {\n        BOOLEAN: 'boolean',\n        INT: 'int',\n        NUMBER: 'number',\n        STRING: 'string',\n        ARRAY: 'array',\n        OBJECT: 'object',\n        FUNCTION: 'function',\n        ACTION: 'action',\n        SERVER_API: 'serverapi',\n        REGEX: 'regex',\n    };\n\n    // all registered filters\n    var filters = [];\n\n    // loops over matching filters and passes options to each filter, returning the mapped results\n    var applyFilterChain = function applyFilterChain(key, value, utils) {\n        return new Promise(function(resolve, reject) {\n            // find matching filters for this key\n            var matchingFilters = filters\n                .filter(function(f) {\n                    return f.key === key;\n                })\n                .map(function(f) {\n                    return f.cb;\n                });\n\n            // resolve now\n            if (matchingFilters.length === 0) {\n                resolve(value);\n                return;\n            }\n\n            // first filter to kick things of\n            var initialFilter = matchingFilters.shift();\n\n            // chain filters\n            matchingFilters\n                .reduce(\n                    // loop over promises passing value to next promise\n                    function(current, next) {\n                        return current.then(function(value) {\n                            return next(value, utils);\n                        });\n                    },\n\n                    // call initial filter, will return a promise\n                    initialFilter(value, utils)\n\n                    // all executed\n                )\n                .then(function(value) {\n                    return resolve(value);\n                })\n                .catch(function(error) {\n                    return reject(error);\n                });\n        });\n    };\n\n    var applyFilters = function applyFilters(key, value, utils) {\n        return filters\n            .filter(function(f) {\n                return f.key === key;\n            })\n            .map(function(f) {\n                return f.cb(value, utils);\n            });\n    };\n\n    // adds a new filter to the list\n    var addFilter = function addFilter(key, cb) {\n        return filters.push({ key: key, cb: cb });\n    };\n\n    var extendDefaultOptions = function extendDefaultOptions(additionalOptions) {\n        return Object.assign(defaultOptions, additionalOptions);\n    };\n\n    var getOptions = function getOptions() {\n        return Object.assign({}, defaultOptions);\n    };\n\n    var setOptions = function setOptions(opts) {\n        forin(opts, function(key, value) {\n            // key does not exist, so this option cannot be set\n            if (!defaultOptions[key]) {\n                return;\n            }\n            defaultOptions[key][0] = getValueByType(\n                value,\n                defaultOptions[key][0],\n                defaultOptions[key][1]\n            );\n        });\n    };\n\n    // default options on app\n    var defaultOptions = {\n        // the id to add to the root element\n        id: [null, Type.STRING],\n\n        // input field name to use\n        name: ['filepond', Type.STRING],\n\n        // disable the field\n        disabled: [false, Type.BOOLEAN],\n\n        // classname to put on wrapper\n        className: [null, Type.STRING],\n\n        // is the field required\n        required: [false, Type.BOOLEAN],\n\n        // Allow media capture when value is set\n        captureMethod: [null, Type.STRING],\n        // - \"camera\", \"microphone\" or \"camcorder\",\n        // - Does not work with multiple on apple devices\n        // - If set, acceptedFileTypes must be made to match with media wildcard \"image/*\", \"audio/*\" or \"video/*\"\n\n        // sync `acceptedFileTypes` property with `accept` attribute\n        allowSyncAcceptAttribute: [true, Type.BOOLEAN],\n\n        // Feature toggles\n        allowDrop: [true, Type.BOOLEAN], // Allow dropping of files\n        allowBrowse: [true, Type.BOOLEAN], // Allow browsing the file system\n        allowPaste: [true, Type.BOOLEAN], // Allow pasting files\n        allowMultiple: [false, Type.BOOLEAN], // Allow multiple files (disabled by default, as multiple attribute is also required on input to allow multiple)\n        allowReplace: [true, Type.BOOLEAN], // Allow dropping a file on other file to replace it (only works when multiple is set to false)\n        allowRevert: [true, Type.BOOLEAN], // Allows user to revert file upload\n        allowRemove: [true, Type.BOOLEAN], // Allow user to remove a file\n        allowProcess: [true, Type.BOOLEAN], // Allows user to process a file, when set to false, this removes the file upload button\n        allowReorder: [false, Type.BOOLEAN], // Allow reordering of files\n        allowDirectoriesOnly: [false, Type.BOOLEAN], // Allow only selecting directories with browse (no support for filtering dnd at this point)\n\n        // Try store file if `server` not set\n        storeAsFile: [false, Type.BOOLEAN],\n\n        // Revert mode\n        forceRevert: [false, Type.BOOLEAN], // Set to 'force' to require the file to be reverted before removal\n\n        // Input requirements\n        maxFiles: [null, Type.INT], // Max number of files\n        checkValidity: [false, Type.BOOLEAN], // Enables custom validity messages\n\n        // Where to put file\n        itemInsertLocationFreedom: [true, Type.BOOLEAN], // Set to false to always add items to begin or end of list\n        itemInsertLocation: ['before', Type.STRING], // Default index in list to add items that have been dropped at the top of the list\n        itemInsertInterval: [75, Type.INT],\n\n        // Drag 'n Drop related\n        dropOnPage: [false, Type.BOOLEAN], // Allow dropping of files anywhere on page (prevents browser from opening file if dropped outside of Up)\n        dropOnElement: [true, Type.BOOLEAN], // Drop needs to happen on element (set to false to also load drops outside of Up)\n        dropValidation: [false, Type.BOOLEAN], // Enable or disable validating files on drop\n        ignoredFiles: [['.ds_store', 'thumbs.db', 'desktop.ini'], Type.ARRAY],\n\n        // Upload related\n        instantUpload: [true, Type.BOOLEAN], // Should upload files immediately on drop\n        maxParallelUploads: [2, Type.INT], // Maximum files to upload in parallel\n        allowMinimumUploadDuration: [true, Type.BOOLEAN], // if true uploads take at least 750 ms, this ensures the user sees the upload progress giving trust the upload actually happened\n\n        // Chunks\n        chunkUploads: [false, Type.BOOLEAN], // Enable chunked uploads\n        chunkForce: [false, Type.BOOLEAN], // Force use of chunk uploads even for files smaller than chunk size\n        chunkSize: [5000000, Type.INT], // Size of chunks (5MB default)\n        chunkRetryDelays: [[500, 1000, 3000], Type.ARRAY], // Amount of times to retry upload of a chunk when it fails\n\n        // The server api end points to use for uploading (see docs)\n        server: [null, Type.SERVER_API],\n\n        // File size calculations, can set to 1024, this is only used for display, properties use file size base 1000\n        fileSizeBase: [1000, Type.INT],\n\n        // Labels and status messages\n        labelFileSizeBytes: ['bytes', Type.STRING],\n        labelFileSizeKilobytes: ['KB', Type.STRING],\n        labelFileSizeMegabytes: ['MB', Type.STRING],\n        labelFileSizeGigabytes: ['GB', Type.STRING],\n\n        labelDecimalSeparator: [getDecimalSeparator(), Type.STRING], // Default is locale separator\n        labelThousandsSeparator: [getThousandsSeparator(), Type.STRING], // Default is locale separator\n\n        labelIdle: [\n            'Drag & Drop your files or <span class=\"filepond--label-action\">Browse</span>',\n            Type.STRING,\n        ],\n\n        labelInvalidField: ['Field contains invalid files', Type.STRING],\n        labelFileWaitingForSize: ['Waiting for size', Type.STRING],\n        labelFileSizeNotAvailable: ['Size not available', Type.STRING],\n        labelFileCountSingular: ['file in list', Type.STRING],\n        labelFileCountPlural: ['files in list', Type.STRING],\n        labelFileLoading: ['Loading', Type.STRING],\n        labelFileAdded: ['Added', Type.STRING], // assistive only\n        labelFileLoadError: ['Error during load', Type.STRING],\n        labelFileRemoved: ['Removed', Type.STRING], // assistive only\n        labelFileRemoveError: ['Error during remove', Type.STRING],\n        labelFileProcessing: ['Uploading', Type.STRING],\n        labelFileProcessingComplete: ['Upload complete', Type.STRING],\n        labelFileProcessingAborted: ['Upload cancelled', Type.STRING],\n        labelFileProcessingError: ['Error during upload', Type.STRING],\n        labelFileProcessingRevertError: ['Error during revert', Type.STRING],\n\n        labelTapToCancel: ['tap to cancel', Type.STRING],\n        labelTapToRetry: ['tap to retry', Type.STRING],\n        labelTapToUndo: ['tap to undo', Type.STRING],\n\n        labelButtonRemoveItem: ['Remove', Type.STRING],\n        labelButtonAbortItemLoad: ['Abort', Type.STRING],\n        labelButtonRetryItemLoad: ['Retry', Type.STRING],\n        labelButtonAbortItemProcessing: ['Cancel', Type.STRING],\n        labelButtonUndoItemProcessing: ['Undo', Type.STRING],\n        labelButtonRetryItemProcessing: ['Retry', Type.STRING],\n        labelButtonProcessItem: ['Upload', Type.STRING],\n\n        // make sure width and height plus viewpox are even numbers so icons are nicely centered\n        iconRemove: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.586 13l-2.293 2.293a1 1 0 0 0 1.414 1.414L13 14.414l2.293 2.293a1 1 0 0 0 1.414-1.414L14.414 13l2.293-2.293a1 1 0 0 0-1.414-1.414L13 11.586l-2.293-2.293a1 1 0 0 0-1.414 1.414L11.586 13z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconProcess: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14 10.414v3.585a1 1 0 0 1-2 0v-3.585l-1.293 1.293a1 1 0 0 1-1.414-1.415l3-3a1 1 0 0 1 1.414 0l3 3a1 1 0 0 1-1.414 1.415L14 10.414zM9 18a1 1 0 0 1 0-2h8a1 1 0 0 1 0 2H9z\" fill=\"currentColor\" fill-rule=\"evenodd\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconRetry: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.81 9.185l-.038.02A4.997 4.997 0 0 0 8 13.683a5 5 0 0 0 5 5 5 5 0 0 0 5-5 1 1 0 0 1 2 0A7 7 0 1 1 9.722 7.496l-.842-.21a.999.999 0 1 1 .484-1.94l3.23.806c.535.133.86.675.73 1.21l-.804 3.233a.997.997 0 0 1-1.21.73.997.997 0 0 1-.73-1.21l.23-.928v-.002z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconUndo: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.185 10.81l.02-.038A4.997 4.997 0 0 1 13.683 8a5 5 0 0 1 5 5 5 5 0 0 1-5 5 1 1 0 0 0 0 2A7 7 0 1 0 7.496 9.722l-.21-.842a.999.999 0 1 0-1.94.484l.806 3.23c.133.535.675.86 1.21.73l3.233-.803a.997.997 0 0 0 .73-1.21.997.997 0 0 0-1.21-.73l-.928.23-.002-.001z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        iconDone: [\n            '<svg width=\"26\" height=\"26\" viewBox=\"0 0 26 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M18.293 9.293a1 1 0 0 1 1.414 1.414l-7.002 7a1 1 0 0 1-1.414 0l-3.998-4a1 1 0 1 1 1.414-1.414L12 15.586l6.294-6.293z\" fill=\"currentColor\" fill-rule=\"nonzero\"/></svg>',\n            Type.STRING,\n        ],\n\n        // event handlers\n        oninit: [null, Type.FUNCTION],\n        onwarning: [null, Type.FUNCTION],\n        onerror: [null, Type.FUNCTION],\n        onactivatefile: [null, Type.FUNCTION],\n        oninitfile: [null, Type.FUNCTION],\n        onaddfilestart: [null, Type.FUNCTION],\n        onaddfileprogress: [null, Type.FUNCTION],\n        onaddfile: [null, Type.FUNCTION],\n        onprocessfilestart: [null, Type.FUNCTION],\n        onprocessfileprogress: [null, Type.FUNCTION],\n        onprocessfileabort: [null, Type.FUNCTION],\n        onprocessfilerevert: [null, Type.FUNCTION],\n        onprocessfile: [null, Type.FUNCTION],\n        onprocessfiles: [null, Type.FUNCTION],\n        onremovefile: [null, Type.FUNCTION],\n        onpreparefile: [null, Type.FUNCTION],\n        onupdatefiles: [null, Type.FUNCTION],\n        onreorderfiles: [null, Type.FUNCTION],\n\n        // hooks\n        beforeDropFile: [null, Type.FUNCTION],\n        beforeAddFile: [null, Type.FUNCTION],\n        beforeRemoveFile: [null, Type.FUNCTION],\n        beforePrepareFile: [null, Type.FUNCTION],\n\n        // styles\n        stylePanelLayout: [null, Type.STRING], // null 'integrated', 'compact', 'circle'\n        stylePanelAspectRatio: [null, Type.STRING], // null or '3:2' or 1\n        styleItemPanelAspectRatio: [null, Type.STRING],\n        styleButtonRemoveItemPosition: ['left', Type.STRING],\n        styleButtonProcessItemPosition: ['right', Type.STRING],\n        styleLoadIndicatorPosition: ['right', Type.STRING],\n        styleProgressIndicatorPosition: ['right', Type.STRING],\n        styleButtonRemoveItemAlign: [false, Type.BOOLEAN],\n\n        // custom initial files array\n        files: [[], Type.ARRAY],\n\n        // show support by displaying credits\n        credits: [['https://pqina.nl/', 'Powered by PQINA'], Type.ARRAY],\n    };\n\n    var getItemByQuery = function getItemByQuery(items, query) {\n        // just return first index\n        if (isEmpty(query)) {\n            return items[0] || null;\n        }\n\n        // query is index\n        if (isInt(query)) {\n            return items[query] || null;\n        }\n\n        // if query is item, get the id\n        if (typeof query === 'object') {\n            query = query.id;\n        }\n\n        // assume query is a string and return item by id\n        return (\n            items.find(function(item) {\n                return item.id === query;\n            }) || null\n        );\n    };\n\n    var getNumericAspectRatioFromString = function getNumericAspectRatioFromString(aspectRatio) {\n        if (isEmpty(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (/:/.test(aspectRatio)) {\n            var parts = aspectRatio.split(':');\n            return parts[1] / parts[0];\n        }\n        return parseFloat(aspectRatio);\n    };\n\n    var getActiveItems = function getActiveItems(items) {\n        return items.filter(function(item) {\n            return !item.archived;\n        });\n    };\n\n    var Status = {\n        EMPTY: 0,\n        IDLE: 1, // waiting\n        ERROR: 2, // a file is in error state\n        BUSY: 3, // busy processing or loading\n        READY: 4, // all files uploaded\n    };\n\n    var res = null;\n    var canUpdateFileInput = function canUpdateFileInput() {\n        if (res === null) {\n            try {\n                var dataTransfer = new DataTransfer();\n                dataTransfer.items.add(new File(['hello world'], 'This_Works.txt'));\n                var el = document.createElement('input');\n                el.setAttribute('type', 'file');\n                el.files = dataTransfer.files;\n                res = el.files.length === 1;\n            } catch (err) {\n                res = false;\n            }\n        }\n        return res;\n    };\n\n    var ITEM_ERROR = [\n        ItemStatus.LOAD_ERROR,\n        ItemStatus.PROCESSING_ERROR,\n        ItemStatus.PROCESSING_REVERT_ERROR,\n    ];\n\n    var ITEM_BUSY = [\n        ItemStatus.LOADING,\n        ItemStatus.PROCESSING,\n        ItemStatus.PROCESSING_QUEUED,\n        ItemStatus.INIT,\n    ];\n\n    var ITEM_READY = [ItemStatus.PROCESSING_COMPLETE];\n\n    var isItemInErrorState = function isItemInErrorState(item) {\n        return ITEM_ERROR.includes(item.status);\n    };\n    var isItemInBusyState = function isItemInBusyState(item) {\n        return ITEM_BUSY.includes(item.status);\n    };\n    var isItemInReadyState = function isItemInReadyState(item) {\n        return ITEM_READY.includes(item.status);\n    };\n\n    var isAsync = function isAsync(state) {\n        return (\n            isObject(state.options.server) &&\n            (isObject(state.options.server.process) || isFunction(state.options.server.process))\n        );\n    };\n\n    var queries = function queries(state) {\n        return {\n            GET_STATUS: function GET_STATUS() {\n                var items = getActiveItems(state.items);\n                var EMPTY = Status.EMPTY,\n                    ERROR = Status.ERROR,\n                    BUSY = Status.BUSY,\n                    IDLE = Status.IDLE,\n                    READY = Status.READY;\n\n                if (items.length === 0) return EMPTY;\n\n                if (items.some(isItemInErrorState)) return ERROR;\n\n                if (items.some(isItemInBusyState)) return BUSY;\n\n                if (items.some(isItemInReadyState)) return READY;\n\n                return IDLE;\n            },\n\n            GET_ITEM: function GET_ITEM(query) {\n                return getItemByQuery(state.items, query);\n            },\n\n            GET_ACTIVE_ITEM: function GET_ACTIVE_ITEM(query) {\n                return getItemByQuery(getActiveItems(state.items), query);\n            },\n\n            GET_ACTIVE_ITEMS: function GET_ACTIVE_ITEMS() {\n                return getActiveItems(state.items);\n            },\n\n            GET_ITEMS: function GET_ITEMS() {\n                return state.items;\n            },\n\n            GET_ITEM_NAME: function GET_ITEM_NAME(query) {\n                var item = getItemByQuery(state.items, query);\n                return item ? item.filename : null;\n            },\n\n            GET_ITEM_SIZE: function GET_ITEM_SIZE(query) {\n                var item = getItemByQuery(state.items, query);\n                return item ? item.fileSize : null;\n            },\n\n            GET_STYLES: function GET_STYLES() {\n                return Object.keys(state.options)\n                    .filter(function(key) {\n                        return /^style/.test(key);\n                    })\n                    .map(function(option) {\n                        return {\n                            name: option,\n                            value: state.options[option],\n                        };\n                    });\n            },\n\n            GET_PANEL_ASPECT_RATIO: function GET_PANEL_ASPECT_RATIO() {\n                var isShapeCircle = /circle/.test(state.options.stylePanelLayout);\n                var aspectRatio = isShapeCircle\n                    ? 1\n                    : getNumericAspectRatioFromString(state.options.stylePanelAspectRatio);\n                return aspectRatio;\n            },\n\n            GET_ITEM_PANEL_ASPECT_RATIO: function GET_ITEM_PANEL_ASPECT_RATIO() {\n                return state.options.styleItemPanelAspectRatio;\n            },\n\n            GET_ITEMS_BY_STATUS: function GET_ITEMS_BY_STATUS(status) {\n                return getActiveItems(state.items).filter(function(item) {\n                    return item.status === status;\n                });\n            },\n\n            GET_TOTAL_ITEMS: function GET_TOTAL_ITEMS() {\n                return getActiveItems(state.items).length;\n            },\n\n            SHOULD_UPDATE_FILE_INPUT: function SHOULD_UPDATE_FILE_INPUT() {\n                return state.options.storeAsFile && canUpdateFileInput() && !isAsync(state);\n            },\n\n            IS_ASYNC: function IS_ASYNC() {\n                return isAsync(state);\n            },\n\n            GET_FILE_SIZE_LABELS: function GET_FILE_SIZE_LABELS(query) {\n                return {\n                    labelBytes: query('GET_LABEL_FILE_SIZE_BYTES') || undefined,\n                    labelKilobytes: query('GET_LABEL_FILE_SIZE_KILOBYTES') || undefined,\n                    labelMegabytes: query('GET_LABEL_FILE_SIZE_MEGABYTES') || undefined,\n                    labelGigabytes: query('GET_LABEL_FILE_SIZE_GIGABYTES') || undefined,\n                };\n            },\n        };\n    };\n\n    var hasRoomForItem = function hasRoomForItem(state) {\n        var count = getActiveItems(state.items).length;\n\n        // if cannot have multiple items, to add one item it should currently not contain items\n        if (!state.options.allowMultiple) {\n            return count === 0;\n        }\n\n        // if allows multiple items, we check if a max item count has been set, if not, there's no limit\n        var maxFileCount = state.options.maxFiles;\n        if (maxFileCount === null) {\n            return true;\n        }\n\n        // we check if the current count is smaller than the max count, if so, another file can still be added\n        if (count < maxFileCount) {\n            return true;\n        }\n\n        // no more room for another file\n        return false;\n    };\n\n    var limit = function limit(value, min, max) {\n        return Math.max(Math.min(max, value), min);\n    };\n\n    var arrayInsert = function arrayInsert(arr, index, item) {\n        return arr.splice(index, 0, item);\n    };\n\n    var insertItem = function insertItem(items, item, index) {\n        if (isEmpty(item)) {\n            return null;\n        }\n\n        // if index is undefined, append\n        if (typeof index === 'undefined') {\n            items.push(item);\n            return item;\n        }\n\n        // limit the index to the size of the items array\n        index = limit(index, 0, items.length);\n\n        // add item to array\n        arrayInsert(items, index, item);\n\n        // expose\n        return item;\n    };\n\n    var isBase64DataURI = function isBase64DataURI(str) {\n        return /^\\s*data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s]*)\\s*$/i.test(\n            str\n        );\n    };\n\n    var getFilenameFromURL = function getFilenameFromURL(url) {\n        return ('' + url)\n            .split('/')\n            .pop()\n            .split('?')\n            .shift();\n    };\n\n    var getExtensionFromFilename = function getExtensionFromFilename(name) {\n        return name.split('.').pop();\n    };\n\n    var guesstimateExtension = function guesstimateExtension(type) {\n        // if no extension supplied, exit here\n        if (typeof type !== 'string') {\n            return '';\n        }\n\n        // get subtype\n        var subtype = type.split('/').pop();\n\n        // is svg subtype\n        if (/svg/.test(subtype)) {\n            return 'svg';\n        }\n\n        if (/zip|compressed/.test(subtype)) {\n            return 'zip';\n        }\n\n        if (/plain/.test(subtype)) {\n            return 'txt';\n        }\n\n        if (/msword/.test(subtype)) {\n            return 'doc';\n        }\n\n        // if is valid subtype\n        if (/[a-z]+/.test(subtype)) {\n            // always use jpg extension\n            if (subtype === 'jpeg') {\n                return 'jpg';\n            }\n\n            // return subtype\n            return subtype;\n        }\n\n        return '';\n    };\n\n    var leftPad = function leftPad(value) {\n        var padding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n        return (padding + value).slice(-padding.length);\n    };\n\n    var getDateString = function getDateString() {\n        var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\n        return (\n            date.getFullYear() +\n            '-' +\n            leftPad(date.getMonth() + 1, '00') +\n            '-' +\n            leftPad(date.getDate(), '00') +\n            '_' +\n            leftPad(date.getHours(), '00') +\n            '-' +\n            leftPad(date.getMinutes(), '00') +\n            '-' +\n            leftPad(date.getSeconds(), '00')\n        );\n    };\n\n    var getFileFromBlob = function getFileFromBlob(blob, filename) {\n        var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var extension = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var file =\n            typeof type === 'string'\n                ? blob.slice(0, blob.size, type)\n                : blob.slice(0, blob.size, blob.type);\n        file.lastModifiedDate = new Date();\n\n        // copy relative path\n        if (blob._relativePath) file._relativePath = blob._relativePath;\n\n        // if blob has name property, use as filename if no filename supplied\n        if (!isString(filename)) {\n            filename = getDateString();\n        }\n\n        // if filename supplied but no extension and filename has extension\n        if (filename && extension === null && getExtensionFromFilename(filename)) {\n            file.name = filename;\n        } else {\n            extension = extension || guesstimateExtension(file.type);\n            file.name = filename + (extension ? '.' + extension : '');\n        }\n\n        return file;\n    };\n\n    var getBlobBuilder = function getBlobBuilder() {\n        return (window.BlobBuilder =\n            window.BlobBuilder ||\n            window.WebKitBlobBuilder ||\n            window.MozBlobBuilder ||\n            window.MSBlobBuilder);\n    };\n\n    var createBlob = function createBlob(arrayBuffer, mimeType) {\n        var BB = getBlobBuilder();\n\n        if (BB) {\n            var bb = new BB();\n            bb.append(arrayBuffer);\n            return bb.getBlob(mimeType);\n        }\n\n        return new Blob([arrayBuffer], {\n            type: mimeType,\n        });\n    };\n\n    var getBlobFromByteStringWithMimeType = function getBlobFromByteStringWithMimeType(\n        byteString,\n        mimeType\n    ) {\n        var ab = new ArrayBuffer(byteString.length);\n        var ia = new Uint8Array(ab);\n\n        for (var i = 0; i < byteString.length; i++) {\n            ia[i] = byteString.charCodeAt(i);\n        }\n\n        return createBlob(ab, mimeType);\n    };\n\n    var getMimeTypeFromBase64DataURI = function getMimeTypeFromBase64DataURI(dataURI) {\n        return (/^data:(.+);/.exec(dataURI) || [])[1] || null;\n    };\n\n    var getBase64DataFromBase64DataURI = function getBase64DataFromBase64DataURI(dataURI) {\n        // get data part of string (remove data:image/jpeg...,)\n        var data = dataURI.split(',')[1];\n\n        // remove any whitespace as that causes InvalidCharacterError in IE\n        return data.replace(/\\s/g, '');\n    };\n\n    var getByteStringFromBase64DataURI = function getByteStringFromBase64DataURI(dataURI) {\n        return atob(getBase64DataFromBase64DataURI(dataURI));\n    };\n\n    var getBlobFromBase64DataURI = function getBlobFromBase64DataURI(dataURI) {\n        var mimeType = getMimeTypeFromBase64DataURI(dataURI);\n        var byteString = getByteStringFromBase64DataURI(dataURI);\n\n        return getBlobFromByteStringWithMimeType(byteString, mimeType);\n    };\n\n    var getFileFromBase64DataURI = function getFileFromBase64DataURI(dataURI, filename, extension) {\n        return getFileFromBlob(getBlobFromBase64DataURI(dataURI), filename, null, extension);\n    };\n\n    var getFileNameFromHeader = function getFileNameFromHeader(header) {\n        // test if is content disposition header, if not exit\n        if (!/^content-disposition:/i.test(header)) return null;\n\n        // get filename parts\n        var matches = header\n            .split(/filename=|filename\\*=.+''/)\n            .splice(1)\n            .map(function(name) {\n                return name.trim().replace(/^[\"']|[;\"']{0,2}$/g, '');\n            })\n            .filter(function(name) {\n                return name.length;\n            });\n\n        return matches.length ? decodeURI(matches[matches.length - 1]) : null;\n    };\n\n    var getFileSizeFromHeader = function getFileSizeFromHeader(header) {\n        if (/content-length:/i.test(header)) {\n            var size = header.match(/[0-9]+/)[0];\n            return size ? parseInt(size, 10) : null;\n        }\n        return null;\n    };\n\n    var getTranfserIdFromHeader = function getTranfserIdFromHeader(header) {\n        if (/x-content-transfer-id:/i.test(header)) {\n            var id = (header.split(':')[1] || '').trim();\n            return id || null;\n        }\n        return null;\n    };\n\n    var getFileInfoFromHeaders = function getFileInfoFromHeaders(headers) {\n        var info = {\n            source: null,\n            name: null,\n            size: null,\n        };\n\n        var rows = headers.split('\\n');\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n        try {\n            for (\n                var _iterator = rows[Symbol.iterator](), _step;\n                !(_iteratorNormalCompletion = (_step = _iterator.next()).done);\n                _iteratorNormalCompletion = true\n            ) {\n                var header = _step.value;\n\n                var name = getFileNameFromHeader(header);\n                if (name) {\n                    info.name = name;\n                    continue;\n                }\n\n                var size = getFileSizeFromHeader(header);\n                if (size) {\n                    info.size = size;\n                    continue;\n                }\n\n                var source = getTranfserIdFromHeader(header);\n                if (source) {\n                    info.source = source;\n                    continue;\n                }\n            }\n        } catch (err) {\n            _didIteratorError = true;\n            _iteratorError = err;\n        } finally {\n            try {\n                if (!_iteratorNormalCompletion && _iterator.return != null) {\n                    _iterator.return();\n                }\n            } finally {\n                if (_didIteratorError) {\n                    throw _iteratorError;\n                }\n            }\n        }\n\n        return info;\n    };\n\n    var createFileLoader = function createFileLoader(fetchFn) {\n        var state = {\n            source: null,\n            complete: false,\n            progress: 0,\n            size: null,\n            timestamp: null,\n            duration: 0,\n            request: null,\n        };\n\n        var getProgress = function getProgress() {\n            return state.progress;\n        };\n        var abort = function abort() {\n            if (state.request && state.request.abort) {\n                state.request.abort();\n            }\n        };\n\n        // load source\n        var load = function load() {\n            // get quick reference\n            var source = state.source;\n\n            api.fire('init', source);\n\n            // Load Files\n            if (source instanceof File) {\n                api.fire('load', source);\n            } else if (source instanceof Blob) {\n                // Load blobs, set default name to current date\n                api.fire('load', getFileFromBlob(source, source.name));\n            } else if (isBase64DataURI(source)) {\n                // Load base 64, set default name to current date\n                api.fire('load', getFileFromBase64DataURI(source));\n            } else {\n                // Deal as if is external URL, let's load it!\n                loadURL(source);\n            }\n        };\n\n        // loads a url\n        var loadURL = function loadURL(url) {\n            // is remote url and no fetch method supplied\n            if (!fetchFn) {\n                api.fire('error', {\n                    type: 'error',\n                    body: \"Can't load URL\",\n                    code: 400,\n                });\n\n                return;\n            }\n\n            // set request start\n            state.timestamp = Date.now();\n\n            // load file\n            state.request = fetchFn(\n                url,\n                function(response) {\n                    // update duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // done!\n                    state.complete = true;\n\n                    // turn blob response into a file\n                    if (response instanceof Blob) {\n                        response = getFileFromBlob(\n                            response,\n                            response.name || getFilenameFromURL(url)\n                        );\n                    }\n\n                    api.fire(\n                        'load',\n                        // if has received blob, we go with blob, if no response, we return null\n                        response instanceof Blob ? response : response ? response.body : null\n                    );\n                },\n                function(error) {\n                    api.fire(\n                        'error',\n                        typeof error === 'string'\n                            ? {\n                                  type: 'error',\n                                  code: 0,\n                                  body: error,\n                              }\n                            : error\n                    );\n                },\n                function(computable, current, total) {\n                    // collected some meta data already\n                    if (total) {\n                        state.size = total;\n                    }\n\n                    // update duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // if we can't compute progress, we're not going to fire progress events\n                    if (!computable) {\n                        state.progress = null;\n                        return;\n                    }\n\n                    // update progress percentage\n                    state.progress = current / total;\n\n                    // expose\n                    api.fire('progress', state.progress);\n                },\n                function() {\n                    api.fire('abort');\n                },\n                function(response) {\n                    var fileinfo = getFileInfoFromHeaders(\n                        typeof response === 'string' ? response : response.headers\n                    );\n                    api.fire('meta', {\n                        size: state.size || fileinfo.size,\n                        filename: fileinfo.name,\n                        source: fileinfo.source,\n                    });\n                }\n            );\n        };\n\n        var api = Object.assign({}, on(), {\n            setSource: function setSource(source) {\n                return (state.source = source);\n            },\n            getProgress: getProgress, // file load progress\n            abort: abort, // abort file load\n            load: load, // start load\n        });\n\n        return api;\n    };\n\n    var isGet = function isGet(method) {\n        return /GET|HEAD/.test(method);\n    };\n\n    var sendRequest = function sendRequest(data, url, options) {\n        var api = {\n            onheaders: function onheaders() {},\n            onprogress: function onprogress() {},\n            onload: function onload() {},\n            ontimeout: function ontimeout() {},\n            onerror: function onerror() {},\n            onabort: function onabort() {},\n            abort: function abort() {\n                aborted = true;\n                xhr.abort();\n            },\n        };\n\n        // timeout identifier, only used when timeout is defined\n        var aborted = false;\n        var headersReceived = false;\n\n        // set default options\n        options = Object.assign(\n            {\n                method: 'POST',\n                headers: {},\n                withCredentials: false,\n            },\n            options\n        );\n\n        // encode url\n        url = encodeURI(url);\n\n        // if method is GET, add any received data to url\n\n        if (isGet(options.method) && data) {\n            url =\n                '' +\n                url +\n                encodeURIComponent(typeof data === 'string' ? data : JSON.stringify(data));\n        }\n\n        // create request\n        var xhr = new XMLHttpRequest();\n\n        // progress of load\n        var process = isGet(options.method) ? xhr : xhr.upload;\n        process.onprogress = function(e) {\n            // no progress event when aborted ( onprogress is called once after abort() )\n            if (aborted) {\n                return;\n            }\n\n            api.onprogress(e.lengthComputable, e.loaded, e.total);\n        };\n\n        // tries to get header info to the app as fast as possible\n        xhr.onreadystatechange = function() {\n            // not interesting in these states ('unsent' and 'openend' as they don't give us any additional info)\n            if (xhr.readyState < 2) {\n                return;\n            }\n\n            // no server response\n            if (xhr.readyState === 4 && xhr.status === 0) {\n                return;\n            }\n\n            if (headersReceived) {\n                return;\n            }\n\n            headersReceived = true;\n\n            // we've probably received some useful data in response headers\n            api.onheaders(xhr);\n        };\n\n        // load successful\n        xhr.onload = function() {\n            // is classified as valid response\n            if (xhr.status >= 200 && xhr.status < 300) {\n                api.onload(xhr);\n            } else {\n                api.onerror(xhr);\n            }\n        };\n\n        // error during load\n        xhr.onerror = function() {\n            return api.onerror(xhr);\n        };\n\n        // request aborted\n        xhr.onabort = function() {\n            aborted = true;\n            api.onabort();\n        };\n\n        // request timeout\n        xhr.ontimeout = function() {\n            return api.ontimeout(xhr);\n        };\n\n        // open up open up!\n        xhr.open(options.method, url, true);\n\n        // set timeout if defined (do it after open so IE11 plays ball)\n        if (isInt(options.timeout)) {\n            xhr.timeout = options.timeout;\n        }\n\n        // add headers\n        Object.keys(options.headers).forEach(function(key) {\n            var value = unescape(encodeURIComponent(options.headers[key]));\n            xhr.setRequestHeader(key, value);\n        });\n\n        // set type of response\n        if (options.responseType) {\n            xhr.responseType = options.responseType;\n        }\n\n        // set credentials\n        if (options.withCredentials) {\n            xhr.withCredentials = true;\n        }\n\n        // let's send our data\n        xhr.send(data);\n\n        return api;\n    };\n\n    var createResponse = function createResponse(type, code, body, headers) {\n        return {\n            type: type,\n            code: code,\n            body: body,\n            headers: headers,\n        };\n    };\n\n    var createTimeoutResponse = function createTimeoutResponse(cb) {\n        return function(xhr) {\n            cb(createResponse('error', 0, 'Timeout', xhr.getAllResponseHeaders()));\n        };\n    };\n\n    var hasQS = function hasQS(str) {\n        return /\\?/.test(str);\n    };\n    var buildURL = function buildURL() {\n        var url = '';\n        for (var _len = arguments.length, parts = new Array(_len), _key = 0; _key < _len; _key++) {\n            parts[_key] = arguments[_key];\n        }\n        parts.forEach(function(part) {\n            url += hasQS(url) && hasQS(part) ? part.replace(/\\?/, '&') : part;\n        });\n        return url;\n    };\n\n    var createFetchFunction = function createFetchFunction() {\n        var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var action = arguments.length > 1 ? arguments[1] : undefined;\n        // custom handler (should also handle file, load, error, progress and abort)\n        if (typeof action === 'function') {\n            return action;\n        }\n\n        // no action supplied\n        if (!action || !isString(action.url)) {\n            return null;\n        }\n\n        // set onload hanlder\n        var onload =\n            action.onload ||\n            function(res) {\n                return res;\n            };\n        var onerror =\n            action.onerror ||\n            function(res) {\n                return null;\n            };\n\n        // internal handler\n        return function(url, load, error, progress, abort, headers) {\n            // do local or remote request based on if the url is external\n            var request = sendRequest(\n                url,\n                buildURL(apiUrl, action.url),\n                Object.assign({}, action, {\n                    responseType: 'blob',\n                })\n            );\n\n            request.onload = function(xhr) {\n                // get headers\n                var headers = xhr.getAllResponseHeaders();\n\n                // get filename\n                var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n                // create response\n                load(\n                    createResponse(\n                        'load',\n                        xhr.status,\n                        action.method === 'HEAD'\n                            ? null\n                            : getFileFromBlob(onload(xhr.response), filename),\n                        headers\n                    )\n                );\n            };\n\n            request.onerror = function(xhr) {\n                error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.onheaders = function(xhr) {\n                headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n            request.onprogress = progress;\n            request.onabort = abort;\n\n            // should return request\n            return request;\n        };\n    };\n\n    var ChunkStatus = {\n        QUEUED: 0,\n        COMPLETE: 1,\n        PROCESSING: 2,\n        ERROR: 3,\n        WAITING: 4,\n    };\n\n    /*\n                                                       function signature:\n                                                         (file, metadata, load, error, progress, abort, transfer, options) => {\n                                                           return {\n                                                           abort:() => {}\n                                                         }\n                                                       }\n                                                       */\n\n    // apiUrl, action, name, file, metadata, load, error, progress, abort, transfer, options\n    var processFileChunked = function processFileChunked(\n        apiUrl,\n        action,\n        name,\n        file,\n        metadata,\n        load,\n        error,\n        progress,\n        abort,\n        transfer,\n        options\n    ) {\n        // all chunks\n        var chunks = [];\n        var chunkTransferId = options.chunkTransferId,\n            chunkServer = options.chunkServer,\n            chunkSize = options.chunkSize,\n            chunkRetryDelays = options.chunkRetryDelays;\n\n        // default state\n        var state = {\n            serverId: chunkTransferId,\n            aborted: false,\n        };\n\n        // set onload handlers\n        var ondata =\n            action.ondata ||\n            function(fd) {\n                return fd;\n            };\n        var onload =\n            action.onload ||\n            function(xhr, method) {\n                return method === 'HEAD' ? xhr.getResponseHeader('Upload-Offset') : xhr.response;\n            };\n        var onerror =\n            action.onerror ||\n            function(res) {\n                return null;\n            };\n\n        // create server hook\n        var requestTransferId = function requestTransferId(cb) {\n            var formData = new FormData();\n\n            // add metadata under same name\n            if (isObject(metadata)) formData.append(name, JSON.stringify(metadata));\n\n            var headers =\n                typeof action.headers === 'function'\n                    ? action.headers(file, metadata)\n                    : Object.assign({}, action.headers, {\n                          'Upload-Length': file.size,\n                      });\n\n            var requestParams = Object.assign({}, action, {\n                headers: headers,\n            });\n\n            // send request object\n            var request = sendRequest(\n                ondata(formData),\n                buildURL(apiUrl, action.url),\n                requestParams\n            );\n\n            request.onload = function(xhr) {\n                return cb(onload(xhr, requestParams.method));\n            };\n\n            request.onerror = function(xhr) {\n                return error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n        };\n\n        var requestTransferOffset = function requestTransferOffset(cb) {\n            var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n            var headers =\n                typeof action.headers === 'function'\n                    ? action.headers(state.serverId)\n                    : Object.assign({}, action.headers);\n\n            var requestParams = {\n                headers: headers,\n                method: 'HEAD',\n            };\n\n            var request = sendRequest(null, requestUrl, requestParams);\n\n            request.onload = function(xhr) {\n                return cb(onload(xhr, requestParams.method));\n            };\n\n            request.onerror = function(xhr) {\n                return error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n        };\n\n        // create chunks\n        var lastChunkIndex = Math.floor(file.size / chunkSize);\n        for (var i = 0; i <= lastChunkIndex; i++) {\n            var offset = i * chunkSize;\n            var data = file.slice(offset, offset + chunkSize, 'application/offset+octet-stream');\n            chunks[i] = {\n                index: i,\n                size: data.size,\n                offset: offset,\n                data: data,\n                file: file,\n                progress: 0,\n                retries: _toConsumableArray(chunkRetryDelays),\n                status: ChunkStatus.QUEUED,\n                error: null,\n                request: null,\n                timeout: null,\n            };\n        }\n\n        var completeProcessingChunks = function completeProcessingChunks() {\n            return load(state.serverId);\n        };\n\n        var canProcessChunk = function canProcessChunk(chunk) {\n            return chunk.status === ChunkStatus.QUEUED || chunk.status === ChunkStatus.ERROR;\n        };\n\n        var processChunk = function processChunk(chunk) {\n            // processing is paused, wait here\n            if (state.aborted) return;\n\n            // get next chunk to process\n            chunk = chunk || chunks.find(canProcessChunk);\n\n            // no more chunks to process\n            if (!chunk) {\n                // all done?\n                if (\n                    chunks.every(function(chunk) {\n                        return chunk.status === ChunkStatus.COMPLETE;\n                    })\n                ) {\n                    completeProcessingChunks();\n                }\n\n                // no chunk to handle\n                return;\n            }\n\n            // now processing this chunk\n            chunk.status = ChunkStatus.PROCESSING;\n            chunk.progress = null;\n\n            // allow parsing of formdata\n            var ondata =\n                chunkServer.ondata ||\n                function(fd) {\n                    return fd;\n                };\n            var onerror =\n                chunkServer.onerror ||\n                function(res) {\n                    return null;\n                };\n\n            // send request object\n            var requestUrl = buildURL(apiUrl, chunkServer.url, state.serverId);\n\n            var headers =\n                typeof chunkServer.headers === 'function'\n                    ? chunkServer.headers(chunk)\n                    : Object.assign({}, chunkServer.headers, {\n                          'Content-Type': 'application/offset+octet-stream',\n                          'Upload-Offset': chunk.offset,\n                          'Upload-Length': file.size,\n                          'Upload-Name': file.name,\n                      });\n\n            var request = (chunk.request = sendRequest(\n                ondata(chunk.data),\n                requestUrl,\n                Object.assign({}, chunkServer, {\n                    headers: headers,\n                })\n            ));\n\n            request.onload = function() {\n                // done!\n                chunk.status = ChunkStatus.COMPLETE;\n\n                // remove request reference\n                chunk.request = null;\n\n                // start processing more chunks\n                processChunks();\n            };\n\n            request.onprogress = function(lengthComputable, loaded, total) {\n                chunk.progress = lengthComputable ? loaded : null;\n                updateTotalProgress();\n            };\n\n            request.onerror = function(xhr) {\n                chunk.status = ChunkStatus.ERROR;\n                chunk.request = null;\n                chunk.error = onerror(xhr.response) || xhr.statusText;\n                if (!retryProcessChunk(chunk)) {\n                    error(\n                        createResponse(\n                            'error',\n                            xhr.status,\n                            onerror(xhr.response) || xhr.statusText,\n                            xhr.getAllResponseHeaders()\n                        )\n                    );\n                }\n            };\n\n            request.ontimeout = function(xhr) {\n                chunk.status = ChunkStatus.ERROR;\n                chunk.request = null;\n                if (!retryProcessChunk(chunk)) {\n                    createTimeoutResponse(error)(xhr);\n                }\n            };\n\n            request.onabort = function() {\n                chunk.status = ChunkStatus.QUEUED;\n                chunk.request = null;\n                abort();\n            };\n        };\n\n        var retryProcessChunk = function retryProcessChunk(chunk) {\n            // no more retries left\n            if (chunk.retries.length === 0) return false;\n\n            // new retry\n            chunk.status = ChunkStatus.WAITING;\n            clearTimeout(chunk.timeout);\n            chunk.timeout = setTimeout(function() {\n                processChunk(chunk);\n            }, chunk.retries.shift());\n\n            // we're going to retry\n            return true;\n        };\n\n        var updateTotalProgress = function updateTotalProgress() {\n            // calculate total progress fraction\n            var totalBytesTransfered = chunks.reduce(function(p, chunk) {\n                if (p === null || chunk.progress === null) return null;\n                return p + chunk.progress;\n            }, 0);\n\n            // can't compute progress\n            if (totalBytesTransfered === null) return progress(false, 0, 0);\n\n            // calculate progress values\n            var totalSize = chunks.reduce(function(total, chunk) {\n                return total + chunk.size;\n            }, 0);\n\n            // can update progress indicator\n            progress(true, totalBytesTransfered, totalSize);\n        };\n\n        // process new chunks\n        var processChunks = function processChunks() {\n            var totalProcessing = chunks.filter(function(chunk) {\n                return chunk.status === ChunkStatus.PROCESSING;\n            }).length;\n            if (totalProcessing >= 1) return;\n            processChunk();\n        };\n\n        var abortChunks = function abortChunks() {\n            chunks.forEach(function(chunk) {\n                clearTimeout(chunk.timeout);\n                if (chunk.request) {\n                    chunk.request.abort();\n                }\n            });\n        };\n\n        // let's go!\n        if (!state.serverId) {\n            requestTransferId(function(serverId) {\n                // stop here if aborted, might have happened in between request and callback\n                if (state.aborted) return;\n\n                // pass back to item so we can use it if something goes wrong\n                transfer(serverId);\n\n                // store internally\n                state.serverId = serverId;\n                processChunks();\n            });\n        } else {\n            requestTransferOffset(function(offset) {\n                // stop here if aborted, might have happened in between request and callback\n                if (state.aborted) return;\n\n                // mark chunks with lower offset as complete\n                chunks\n                    .filter(function(chunk) {\n                        return chunk.offset < offset;\n                    })\n                    .forEach(function(chunk) {\n                        chunk.status = ChunkStatus.COMPLETE;\n                        chunk.progress = chunk.size;\n                    });\n\n                // continue processing\n                processChunks();\n            });\n        }\n\n        return {\n            abort: function abort() {\n                state.aborted = true;\n                abortChunks();\n            },\n        };\n    };\n\n    /*\n                                                               function signature:\n                                                                 (file, metadata, load, error, progress, abort) => {\n                                                                   return {\n                                                                   abort:() => {}\n                                                                 }\n                                                               }\n                                                               */\n    var createFileProcessorFunction = function createFileProcessorFunction(\n        apiUrl,\n        action,\n        name,\n        options\n    ) {\n        return function(file, metadata, load, error, progress, abort, transfer) {\n            // no file received\n            if (!file) return;\n\n            // if was passed a file, and we can chunk it, exit here\n            var canChunkUpload = options.chunkUploads;\n            var shouldChunkUpload = canChunkUpload && file.size > options.chunkSize;\n            var willChunkUpload = canChunkUpload && (shouldChunkUpload || options.chunkForce);\n            if (file instanceof Blob && willChunkUpload)\n                return processFileChunked(\n                    apiUrl,\n                    action,\n                    name,\n                    file,\n                    metadata,\n                    load,\n                    error,\n                    progress,\n                    abort,\n                    transfer,\n                    options\n                );\n\n            // set handlers\n            var ondata =\n                action.ondata ||\n                function(fd) {\n                    return fd;\n                };\n            var onload =\n                action.onload ||\n                function(res) {\n                    return res;\n                };\n            var onerror =\n                action.onerror ||\n                function(res) {\n                    return null;\n                };\n\n            var headers =\n                typeof action.headers === 'function'\n                    ? action.headers(file, metadata) || {}\n                    : Object.assign(\n                          {},\n\n                          action.headers\n                      );\n\n            var requestParams = Object.assign({}, action, {\n                headers: headers,\n            });\n\n            // create formdata object\n            var formData = new FormData();\n\n            // add metadata under same name\n            if (isObject(metadata)) {\n                formData.append(name, JSON.stringify(metadata));\n            }\n\n            // Turn into an array of objects so no matter what the input, we can handle it the same way\n            (file instanceof Blob ? [{ name: null, file: file }] : file).forEach(function(item) {\n                formData.append(\n                    name,\n                    item.file,\n                    item.name === null ? item.file.name : '' + item.name + item.file.name\n                );\n            });\n\n            // send request object\n            var request = sendRequest(\n                ondata(formData),\n                buildURL(apiUrl, action.url),\n                requestParams\n            );\n            request.onload = function(xhr) {\n                load(\n                    createResponse(\n                        'load',\n                        xhr.status,\n                        onload(xhr.response),\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.onerror = function(xhr) {\n                error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n            request.onprogress = progress;\n            request.onabort = abort;\n\n            // should return request\n            return request;\n        };\n    };\n\n    var createProcessorFunction = function createProcessorFunction() {\n        var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var action = arguments.length > 1 ? arguments[1] : undefined;\n        var name = arguments.length > 2 ? arguments[2] : undefined;\n        var options = arguments.length > 3 ? arguments[3] : undefined;\n\n        // custom handler (should also handle file, load, error, progress and abort)\n        if (typeof action === 'function')\n            return function() {\n                for (\n                    var _len = arguments.length, params = new Array(_len), _key = 0;\n                    _key < _len;\n                    _key++\n                ) {\n                    params[_key] = arguments[_key];\n                }\n                return action.apply(void 0, [name].concat(params, [options]));\n            };\n\n        // no action supplied\n        if (!action || !isString(action.url)) return null;\n\n        // internal handler\n        return createFileProcessorFunction(apiUrl, action, name, options);\n    };\n\n    /*\n                                                      function signature:\n                                                      (uniqueFileId, load, error) => { }\n                                                      */\n    var createRevertFunction = function createRevertFunction() {\n        var apiUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        var action = arguments.length > 1 ? arguments[1] : undefined;\n        // is custom implementation\n        if (typeof action === 'function') {\n            return action;\n        }\n\n        // no action supplied, return stub function, interface will work, but file won't be removed\n        if (!action || !isString(action.url)) {\n            return function(uniqueFileId, load) {\n                return load();\n            };\n        }\n\n        // set onload hanlder\n        var onload =\n            action.onload ||\n            function(res) {\n                return res;\n            };\n        var onerror =\n            action.onerror ||\n            function(res) {\n                return null;\n            };\n\n        // internal implementation\n        return function(uniqueFileId, load, error) {\n            var request = sendRequest(\n                uniqueFileId,\n                apiUrl + action.url,\n                action // contains method, headers and withCredentials properties\n            );\n            request.onload = function(xhr) {\n                load(\n                    createResponse(\n                        'load',\n                        xhr.status,\n                        onload(xhr.response),\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.onerror = function(xhr) {\n                error(\n                    createResponse(\n                        'error',\n                        xhr.status,\n                        onerror(xhr.response) || xhr.statusText,\n                        xhr.getAllResponseHeaders()\n                    )\n                );\n            };\n\n            request.ontimeout = createTimeoutResponse(error);\n\n            return request;\n        };\n    };\n\n    var getRandomNumber = function getRandomNumber() {\n        var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n        return min + Math.random() * (max - min);\n    };\n\n    var createPerceivedPerformanceUpdater = function createPerceivedPerformanceUpdater(cb) {\n        var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n        var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n        var tickMin = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25;\n        var tickMax = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n        var timeout = null;\n        var start = Date.now();\n\n        var tick = function tick() {\n            var runtime = Date.now() - start;\n            var delay = getRandomNumber(tickMin, tickMax);\n\n            if (runtime + delay > duration) {\n                delay = runtime + delay - duration;\n            }\n\n            var progress = runtime / duration;\n            if (progress >= 1 || document.hidden) {\n                cb(1);\n                return;\n            }\n\n            cb(progress);\n\n            timeout = setTimeout(tick, delay);\n        };\n\n        if (duration > 0) tick();\n\n        return {\n            clear: function clear() {\n                clearTimeout(timeout);\n            },\n        };\n    };\n\n    var createFileProcessor = function createFileProcessor(processFn, options) {\n        var state = {\n            complete: false,\n            perceivedProgress: 0,\n            perceivedPerformanceUpdater: null,\n            progress: null,\n            timestamp: null,\n            perceivedDuration: 0,\n            duration: 0,\n            request: null,\n            response: null,\n        };\n        var allowMinimumUploadDuration = options.allowMinimumUploadDuration;\n\n        var process = function process(file, metadata) {\n            var progressFn = function progressFn() {\n                // we've not yet started the real download, stop here\n                // the request might not go through, for instance, there might be some server trouble\n                // if state.progress is null, the server does not allow computing progress and we show the spinner instead\n                if (state.duration === 0 || state.progress === null) return;\n\n                // as we're now processing, fire the progress event\n                api.fire('progress', api.getProgress());\n            };\n\n            var completeFn = function completeFn() {\n                state.complete = true;\n                api.fire('load-perceived', state.response.body);\n            };\n\n            // let's start processing\n            api.fire('start');\n\n            // set request start\n            state.timestamp = Date.now();\n\n            // create perceived performance progress indicator\n            state.perceivedPerformanceUpdater = createPerceivedPerformanceUpdater(\n                function(progress) {\n                    state.perceivedProgress = progress;\n                    state.perceivedDuration = Date.now() - state.timestamp;\n\n                    progressFn();\n\n                    // if fake progress is done, and a response has been received,\n                    // and we've not yet called the complete method\n                    if (state.response && state.perceivedProgress === 1 && !state.complete) {\n                        // we done!\n                        completeFn();\n                    }\n                },\n                // random delay as in a list of files you start noticing\n                // files uploading at the exact same speed\n                allowMinimumUploadDuration ? getRandomNumber(750, 1500) : 0\n            );\n\n            // remember request so we can abort it later\n            state.request = processFn(\n                // the file to process\n                file,\n\n                // the metadata to send along\n                metadata,\n\n                // callbacks (load, error, progress, abort, transfer)\n                // load expects the body to be a server id if\n                // you want to make use of revert\n                function(response) {\n                    // we put the response in state so we can access\n                    // it outside of this method\n                    state.response = isObject(response)\n                        ? response\n                        : {\n                              type: 'load',\n                              code: 200,\n                              body: '' + response,\n                              headers: {},\n                          };\n\n                    // update duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // force progress to 1 as we're now done\n                    state.progress = 1;\n\n                    // actual load is done let's share results\n                    api.fire('load', state.response.body);\n\n                    // we are really done\n                    // if perceived progress is 1 ( wait for perceived progress to complete )\n                    // or if server does not support progress ( null )\n                    if (\n                        !allowMinimumUploadDuration ||\n                        (allowMinimumUploadDuration && state.perceivedProgress === 1)\n                    ) {\n                        completeFn();\n                    }\n                },\n\n                // error is expected to be an object with type, code, body\n                function(error) {\n                    // cancel updater\n                    state.perceivedPerformanceUpdater.clear();\n\n                    // update others about this error\n                    api.fire(\n                        'error',\n                        isObject(error)\n                            ? error\n                            : {\n                                  type: 'error',\n                                  code: 0,\n                                  body: '' + error,\n                              }\n                    );\n                },\n\n                // actual processing progress\n                function(computable, current, total) {\n                    // update actual duration\n                    state.duration = Date.now() - state.timestamp;\n\n                    // update actual progress\n                    state.progress = computable ? current / total : null;\n\n                    progressFn();\n                },\n\n                // abort does not expect a value\n                function() {\n                    // stop updater\n                    state.perceivedPerformanceUpdater.clear();\n\n                    // fire the abort event so we can switch visuals\n                    api.fire('abort', state.response ? state.response.body : null);\n                },\n\n                // register the id for this transfer\n                function(transferId) {\n                    api.fire('transfer', transferId);\n                }\n            );\n        };\n\n        var abort = function abort() {\n            // no request running, can't abort\n            if (!state.request) return;\n\n            // stop updater\n            state.perceivedPerformanceUpdater.clear();\n\n            // abort actual request\n            if (state.request.abort) state.request.abort();\n\n            // if has response object, we've completed the request\n            state.complete = true;\n        };\n\n        var reset = function reset() {\n            abort();\n            state.complete = false;\n            state.perceivedProgress = 0;\n            state.progress = 0;\n            state.timestamp = null;\n            state.perceivedDuration = 0;\n            state.duration = 0;\n            state.request = null;\n            state.response = null;\n        };\n\n        var getProgress = allowMinimumUploadDuration\n            ? function() {\n                  return state.progress ? Math.min(state.progress, state.perceivedProgress) : null;\n              }\n            : function() {\n                  return state.progress || null;\n              };\n\n        var getDuration = allowMinimumUploadDuration\n            ? function() {\n                  return Math.min(state.duration, state.perceivedDuration);\n              }\n            : function() {\n                  return state.duration;\n              };\n\n        var api = Object.assign({}, on(), {\n            process: process, // start processing file\n            abort: abort, // abort active process request\n            getProgress: getProgress,\n            getDuration: getDuration,\n            reset: reset,\n        });\n\n        return api;\n    };\n\n    var getFilenameWithoutExtension = function getFilenameWithoutExtension(name) {\n        return name.substring(0, name.lastIndexOf('.')) || name;\n    };\n\n    var createFileStub = function createFileStub(source) {\n        var data = [source.name, source.size, source.type];\n\n        // is blob or base64, then we need to set the name\n        if (source instanceof Blob || isBase64DataURI(source)) {\n            data[0] = source.name || getDateString();\n        } else if (isBase64DataURI(source)) {\n            // if is base64 data uri we need to determine the average size and type\n            data[1] = source.length;\n            data[2] = getMimeTypeFromBase64DataURI(source);\n        } else if (isString(source)) {\n            // url\n            data[0] = getFilenameFromURL(source);\n            data[1] = 0;\n            data[2] = 'application/octet-stream';\n        }\n\n        return {\n            name: data[0],\n            size: data[1],\n            type: data[2],\n        };\n    };\n\n    var isFile = function isFile(value) {\n        return !!(value instanceof File || (value instanceof Blob && value.name));\n    };\n\n    var deepCloneObject = function deepCloneObject(src) {\n        if (!isObject(src)) return src;\n        var target = isArray(src) ? [] : {};\n        for (var key in src) {\n            if (!src.hasOwnProperty(key)) continue;\n            var v = src[key];\n            target[key] = v && isObject(v) ? deepCloneObject(v) : v;\n        }\n        return target;\n    };\n\n    var createItem = function createItem() {\n        var origin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var serverFileReference =\n            arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        // unique id for this item, is used to identify the item across views\n        var id = getUniqueId();\n\n        /**\n         * Internal item state\n         */\n        var state = {\n            // is archived\n            archived: false,\n\n            // if is frozen, no longer fires events\n            frozen: false,\n\n            // removed from view\n            released: false,\n\n            // original source\n            source: null,\n\n            // file model reference\n            file: file,\n\n            // id of file on server\n            serverFileReference: serverFileReference,\n\n            // id of file transfer on server\n            transferId: null,\n\n            // is aborted\n            processingAborted: false,\n\n            // current item status\n            status: serverFileReference ? ItemStatus.PROCESSING_COMPLETE : ItemStatus.INIT,\n\n            // active processes\n            activeLoader: null,\n            activeProcessor: null,\n        };\n\n        // callback used when abort processing is called to link back to the resolve method\n        var abortProcessingRequestComplete = null;\n\n        /**\n         * Externally added item metadata\n         */\n        var metadata = {};\n\n        // item data\n        var setStatus = function setStatus(status) {\n            return (state.status = status);\n        };\n\n        // fire event unless the item has been archived\n        var fire = function fire(event) {\n            if (state.released || state.frozen) return;\n            for (\n                var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n                _key < _len;\n                _key++\n            ) {\n                params[_key - 1] = arguments[_key];\n            }\n            api.fire.apply(api, [event].concat(params));\n        };\n\n        // file data\n        var getFileExtension = function getFileExtension() {\n            return getExtensionFromFilename(state.file.name);\n        };\n        var getFileType = function getFileType() {\n            return state.file.type;\n        };\n        var getFileSize = function getFileSize() {\n            return state.file.size;\n        };\n        var getFile = function getFile() {\n            return state.file;\n        };\n\n        //\n        // logic to load a file\n        //\n        var load = function load(source, loader, onload) {\n            // remember the original item source\n            state.source = source;\n\n            // source is known\n            api.fireSync('init');\n\n            // file stub is already there\n            if (state.file) {\n                api.fireSync('load-skip');\n                return;\n            }\n\n            // set a stub file object while loading the actual data\n            state.file = createFileStub(source);\n\n            // starts loading\n            loader.on('init', function() {\n                fire('load-init');\n            });\n\n            // we'eve received a size indication, let's update the stub\n            loader.on('meta', function(meta) {\n                // set size of file stub\n                state.file.size = meta.size;\n\n                // set name of file stub\n                state.file.filename = meta.filename;\n\n                // if has received source, we done\n                if (meta.source) {\n                    origin = FileOrigin.LIMBO;\n                    state.serverFileReference = meta.source;\n                    state.status = ItemStatus.PROCESSING_COMPLETE;\n                }\n\n                // size has been updated\n                fire('load-meta');\n            });\n\n            // the file is now loading we need to update the progress indicators\n            loader.on('progress', function(progress) {\n                setStatus(ItemStatus.LOADING);\n\n                fire('load-progress', progress);\n            });\n\n            // an error was thrown while loading the file, we need to switch to error state\n            loader.on('error', function(error) {\n                setStatus(ItemStatus.LOAD_ERROR);\n\n                fire('load-request-error', error);\n            });\n\n            // user or another process aborted the file load (cannot retry)\n            loader.on('abort', function() {\n                setStatus(ItemStatus.INIT);\n                fire('load-abort');\n            });\n\n            // done loading\n            loader.on('load', function(file) {\n                // as we've now loaded the file the loader is no longer required\n                state.activeLoader = null;\n\n                // called when file has loaded succesfully\n                var success = function success(result) {\n                    // set (possibly) transformed file\n                    state.file = isFile(result) ? result : state.file;\n\n                    // file received\n                    if (origin === FileOrigin.LIMBO && state.serverFileReference) {\n                        setStatus(ItemStatus.PROCESSING_COMPLETE);\n                    } else {\n                        setStatus(ItemStatus.IDLE);\n                    }\n\n                    fire('load');\n                };\n\n                var error = function error(result) {\n                    // set original file\n                    state.file = file;\n                    fire('load-meta');\n\n                    setStatus(ItemStatus.LOAD_ERROR);\n                    fire('load-file-error', result);\n                };\n\n                // if we already have a server file reference, we don't need to call the onload method\n                if (state.serverFileReference) {\n                    success(file);\n                    return;\n                }\n\n                // no server id, let's give this file the full treatment\n                onload(file, success, error);\n            });\n\n            // set loader source data\n            loader.setSource(source);\n\n            // set as active loader\n            state.activeLoader = loader;\n\n            // load the source data\n            loader.load();\n        };\n\n        var retryLoad = function retryLoad() {\n            if (!state.activeLoader) {\n                return;\n            }\n            state.activeLoader.load();\n        };\n\n        var abortLoad = function abortLoad() {\n            if (state.activeLoader) {\n                state.activeLoader.abort();\n                return;\n            }\n            setStatus(ItemStatus.INIT);\n            fire('load-abort');\n        };\n\n        //\n        // logic to process a file\n        //\n        var process = function process(processor, onprocess) {\n            // processing was aborted\n            if (state.processingAborted) {\n                state.processingAborted = false;\n                return;\n            }\n\n            // now processing\n            setStatus(ItemStatus.PROCESSING);\n\n            // reset abort callback\n            abortProcessingRequestComplete = null;\n\n            // if no file loaded we'll wait for the load event\n            if (!(state.file instanceof Blob)) {\n                api.on('load', function() {\n                    process(processor, onprocess);\n                });\n                return;\n            }\n\n            // setup processor\n            processor.on('load', function(serverFileReference) {\n                // need this id to be able to revert the upload\n                state.transferId = null;\n                state.serverFileReference = serverFileReference;\n            });\n\n            // register transfer id\n            processor.on('transfer', function(transferId) {\n                // need this id to be able to revert the upload\n                state.transferId = transferId;\n            });\n\n            processor.on('load-perceived', function(serverFileReference) {\n                // no longer required\n                state.activeProcessor = null;\n\n                // need this id to be able to rever the upload\n                state.transferId = null;\n                state.serverFileReference = serverFileReference;\n\n                setStatus(ItemStatus.PROCESSING_COMPLETE);\n                fire('process-complete', serverFileReference);\n            });\n\n            processor.on('start', function() {\n                fire('process-start');\n            });\n\n            processor.on('error', function(error) {\n                state.activeProcessor = null;\n                setStatus(ItemStatus.PROCESSING_ERROR);\n                fire('process-error', error);\n            });\n\n            processor.on('abort', function(serverFileReference) {\n                state.activeProcessor = null;\n\n                // if file was uploaded but processing was cancelled during perceived processor time store file reference\n                state.serverFileReference = serverFileReference;\n\n                setStatus(ItemStatus.IDLE);\n                fire('process-abort');\n\n                // has timeout so doesn't interfere with remove action\n                if (abortProcessingRequestComplete) {\n                    abortProcessingRequestComplete();\n                }\n            });\n\n            processor.on('progress', function(progress) {\n                fire('process-progress', progress);\n            });\n\n            // when successfully transformed\n            var success = function success(file) {\n                // if was archived in the mean time, don't process\n                if (state.archived) return;\n\n                // process file!\n                processor.process(file, Object.assign({}, metadata));\n            };\n\n            // something went wrong during transform phase\n            var error = console.error;\n\n            // start processing the file\n            onprocess(state.file, success, error);\n\n            // set as active processor\n            state.activeProcessor = processor;\n        };\n\n        var requestProcessing = function requestProcessing() {\n            state.processingAborted = false;\n            setStatus(ItemStatus.PROCESSING_QUEUED);\n        };\n\n        var abortProcessing = function abortProcessing() {\n            return new Promise(function(resolve) {\n                if (!state.activeProcessor) {\n                    state.processingAborted = true;\n\n                    setStatus(ItemStatus.IDLE);\n                    fire('process-abort');\n\n                    resolve();\n                    return;\n                }\n\n                abortProcessingRequestComplete = function abortProcessingRequestComplete() {\n                    resolve();\n                };\n\n                state.activeProcessor.abort();\n            });\n        };\n\n        //\n        // logic to revert a processed file\n        //\n        var revert = function revert(revertFileUpload, forceRevert) {\n            return new Promise(function(resolve, reject) {\n                // a completed upload will have a serverFileReference, a failed chunked upload where\n                // getting a serverId succeeded but >=0 chunks have been uploaded will have transferId set\n                var serverTransferId =\n                    state.serverFileReference !== null\n                        ? state.serverFileReference\n                        : state.transferId;\n\n                // cannot revert without a server id for this process\n                if (serverTransferId === null) {\n                    resolve();\n                    return;\n                }\n\n                // revert the upload (fire and forget)\n                revertFileUpload(\n                    serverTransferId,\n                    function() {\n                        // reset file server id and transfer id as now it's not available on the server\n                        state.serverFileReference = null;\n                        state.transferId = null;\n                        resolve();\n                    },\n                    function(error) {\n                        // don't set error state when reverting is optional, it will always resolve\n                        if (!forceRevert) {\n                            resolve();\n                            return;\n                        }\n\n                        // oh no errors\n                        setStatus(ItemStatus.PROCESSING_REVERT_ERROR);\n                        fire('process-revert-error');\n                        reject(error);\n                    }\n                );\n\n                // fire event\n                setStatus(ItemStatus.IDLE);\n                fire('process-revert');\n            });\n        };\n\n        // exposed methods\n        var _setMetadata = function setMetadata(key, value, silent) {\n            var keys = key.split('.');\n            var root = keys[0];\n            var last = keys.pop();\n            var data = metadata;\n            keys.forEach(function(key) {\n                return (data = data[key]);\n            });\n\n            // compare old value against new value, if they're the same, we're not updating\n            if (JSON.stringify(data[last]) === JSON.stringify(value)) return;\n\n            // update value\n            data[last] = value;\n\n            // fire update\n            fire('metadata-update', {\n                key: root,\n                value: metadata[root],\n                silent: silent,\n            });\n        };\n\n        var getMetadata = function getMetadata(key) {\n            return deepCloneObject(key ? metadata[key] : metadata);\n        };\n\n        var api = Object.assign(\n            {\n                id: {\n                    get: function get() {\n                        return id;\n                    },\n                },\n                origin: {\n                    get: function get() {\n                        return origin;\n                    },\n                    set: function set(value) {\n                        return (origin = value);\n                    },\n                },\n                serverId: {\n                    get: function get() {\n                        return state.serverFileReference;\n                    },\n                },\n                transferId: {\n                    get: function get() {\n                        return state.transferId;\n                    },\n                },\n                status: {\n                    get: function get() {\n                        return state.status;\n                    },\n                },\n                filename: {\n                    get: function get() {\n                        return state.file.name;\n                    },\n                },\n                filenameWithoutExtension: {\n                    get: function get() {\n                        return getFilenameWithoutExtension(state.file.name);\n                    },\n                },\n                fileExtension: { get: getFileExtension },\n                fileType: { get: getFileType },\n                fileSize: { get: getFileSize },\n                file: { get: getFile },\n                relativePath: {\n                    get: function get() {\n                        return state.file._relativePath;\n                    },\n                },\n\n                source: {\n                    get: function get() {\n                        return state.source;\n                    },\n                },\n\n                getMetadata: getMetadata,\n                setMetadata: function setMetadata(key, value, silent) {\n                    if (isObject(key)) {\n                        var data = key;\n                        Object.keys(data).forEach(function(key) {\n                            _setMetadata(key, data[key], value);\n                        });\n                        return key;\n                    }\n                    _setMetadata(key, value, silent);\n                    return value;\n                },\n\n                extend: function extend(name, handler) {\n                    return (itemAPI[name] = handler);\n                },\n\n                abortLoad: abortLoad,\n                retryLoad: retryLoad,\n                requestProcessing: requestProcessing,\n                abortProcessing: abortProcessing,\n\n                load: load,\n                process: process,\n                revert: revert,\n            },\n\n            on(),\n            {\n                freeze: function freeze() {\n                    return (state.frozen = true);\n                },\n\n                release: function release() {\n                    return (state.released = true);\n                },\n                released: {\n                    get: function get() {\n                        return state.released;\n                    },\n                },\n\n                archive: function archive() {\n                    return (state.archived = true);\n                },\n                archived: {\n                    get: function get() {\n                        return state.archived;\n                    },\n                },\n\n                // replace source and file object\n                setFile: function setFile(file) {\n                    return (state.file = file);\n                },\n            }\n        );\n\n        // create it here instead of returning it instantly so we can extend it later\n        var itemAPI = createObject(api);\n\n        return itemAPI;\n    };\n\n    var getItemIndexByQuery = function getItemIndexByQuery(items, query) {\n        // just return first index\n        if (isEmpty(query)) {\n            return 0;\n        }\n\n        // invalid queries\n        if (!isString(query)) {\n            return -1;\n        }\n\n        // return item by id (or -1 if not found)\n        return items.findIndex(function(item) {\n            return item.id === query;\n        });\n    };\n\n    var getItemById = function getItemById(items, itemId) {\n        var index = getItemIndexByQuery(items, itemId);\n        if (index < 0) {\n            return;\n        }\n        return items[index] || null;\n    };\n\n    var fetchBlob = function fetchBlob(url, load, error, progress, abort, headers) {\n        var request = sendRequest(null, url, {\n            method: 'GET',\n            responseType: 'blob',\n        });\n\n        request.onload = function(xhr) {\n            // get headers\n            var headers = xhr.getAllResponseHeaders();\n\n            // get filename\n            var filename = getFileInfoFromHeaders(headers).name || getFilenameFromURL(url);\n\n            // create response\n            load(\n                createResponse('load', xhr.status, getFileFromBlob(xhr.response, filename), headers)\n            );\n        };\n\n        request.onerror = function(xhr) {\n            error(createResponse('error', xhr.status, xhr.statusText, xhr.getAllResponseHeaders()));\n        };\n\n        request.onheaders = function(xhr) {\n            headers(createResponse('headers', xhr.status, null, xhr.getAllResponseHeaders()));\n        };\n\n        request.ontimeout = createTimeoutResponse(error);\n        request.onprogress = progress;\n        request.onabort = abort;\n\n        // should return request\n        return request;\n    };\n\n    var getDomainFromURL = function getDomainFromURL(url) {\n        if (url.indexOf('//') === 0) {\n            url = location.protocol + url;\n        }\n        return url\n            .toLowerCase()\n            .replace('blob:', '')\n            .replace(/([a-z])?:\\/\\//, '$1')\n            .split('/')[0];\n    };\n\n    var isExternalURL = function isExternalURL(url) {\n        return (\n            (url.indexOf(':') > -1 || url.indexOf('//') > -1) &&\n            getDomainFromURL(location.href) !== getDomainFromURL(url)\n        );\n    };\n\n    var dynamicLabel = function dynamicLabel(label) {\n        return function() {\n            return isFunction(label) ? label.apply(void 0, arguments) : label;\n        };\n    };\n\n    var isMockItem = function isMockItem(item) {\n        return !isFile(item.file);\n    };\n\n    var listUpdated = function listUpdated(dispatch, state) {\n        clearTimeout(state.listUpdateTimeout);\n        state.listUpdateTimeout = setTimeout(function() {\n            dispatch('DID_UPDATE_ITEMS', { items: getActiveItems(state.items) });\n        }, 0);\n    };\n\n    var optionalPromise = function optionalPromise(fn) {\n        for (\n            var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1;\n            _key < _len;\n            _key++\n        ) {\n            params[_key - 1] = arguments[_key];\n        }\n        return new Promise(function(resolve) {\n            if (!fn) {\n                return resolve(true);\n            }\n\n            var result = fn.apply(void 0, params);\n\n            if (result == null) {\n                return resolve(true);\n            }\n\n            if (typeof result === 'boolean') {\n                return resolve(result);\n            }\n\n            if (typeof result.then === 'function') {\n                result.then(resolve);\n            }\n        });\n    };\n\n    var sortItems = function sortItems(state, compare) {\n        state.items.sort(function(a, b) {\n            return compare(createItemAPI(a), createItemAPI(b));\n        });\n    };\n\n    // returns item based on state\n    var getItemByQueryFromState = function getItemByQueryFromState(state, itemHandler) {\n        return function() {\n            var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n            var query = _ref.query,\n                _ref$success = _ref.success,\n                success = _ref$success === void 0 ? function() {} : _ref$success,\n                _ref$failure = _ref.failure,\n                failure = _ref$failure === void 0 ? function() {} : _ref$failure,\n                options = _objectWithoutProperties(_ref, ['query', 'success', 'failure']);\n            var item = getItemByQuery(state.items, query);\n            if (!item) {\n                failure({\n                    error: createResponse('error', 0, 'Item not found'),\n                    file: null,\n                });\n\n                return;\n            }\n            itemHandler(item, success, failure, options || {});\n        };\n    };\n\n    var actions = function actions(dispatch, query, state) {\n        return {\n            /**\n             * Aborts all ongoing processes\n             */\n            ABORT_ALL: function ABORT_ALL() {\n                getActiveItems(state.items).forEach(function(item) {\n                    item.freeze();\n                    item.abortLoad();\n                    item.abortProcessing();\n                });\n            },\n\n            /**\n             * Sets initial files\n             */\n            DID_SET_FILES: function DID_SET_FILES(_ref2) {\n                var _ref2$value = _ref2.value,\n                    value = _ref2$value === void 0 ? [] : _ref2$value;\n                // map values to file objects\n                var files = value.map(function(file) {\n                    return {\n                        source: file.source ? file.source : file,\n                        options: file.options,\n                    };\n                });\n\n                // loop over files, if file is in list, leave it be, if not, remove\n                // test if items should be moved\n                var activeItems = getActiveItems(state.items);\n\n                activeItems.forEach(function(item) {\n                    // if item not is in new value, remove\n                    if (\n                        !files.find(function(file) {\n                            return file.source === item.source || file.source === item.file;\n                        })\n                    ) {\n                        dispatch('REMOVE_ITEM', { query: item, remove: false });\n                    }\n                });\n\n                // add new files\n                activeItems = getActiveItems(state.items);\n                files.forEach(function(file, index) {\n                    // if file is already in list\n                    if (\n                        activeItems.find(function(item) {\n                            return item.source === file.source || item.file === file.source;\n                        })\n                    )\n                        return;\n\n                    // not in list, add\n                    dispatch(\n                        'ADD_ITEM',\n                        Object.assign({}, file, {\n                            interactionMethod: InteractionMethod.NONE,\n                            index: index,\n                        })\n                    );\n                });\n            },\n\n            DID_UPDATE_ITEM_METADATA: function DID_UPDATE_ITEM_METADATA(_ref3) {\n                var id = _ref3.id,\n                    action = _ref3.action,\n                    change = _ref3.change;\n                // don't do anything\n                if (change.silent) return;\n\n                // if is called multiple times in close succession we combined all calls together to save resources\n                clearTimeout(state.itemUpdateTimeout);\n                state.itemUpdateTimeout = setTimeout(function() {\n                    var item = getItemById(state.items, id);\n\n                    // only revert and attempt to upload when we're uploading to a server\n                    if (!query('IS_ASYNC')) {\n                        // should we update the output data\n                        applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n                            item: item,\n                            query: query,\n                            action: action,\n                            change: change,\n                        }).then(function(shouldPrepareOutput) {\n                            // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n                            var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n                            if (beforePrepareFile)\n                                shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n                            if (!shouldPrepareOutput) return;\n\n                            dispatch(\n                                'REQUEST_PREPARE_OUTPUT',\n                                {\n                                    query: id,\n                                    item: item,\n                                    success: function success(file) {\n                                        dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n                                    },\n                                },\n\n                                true\n                            );\n                        });\n\n                        return;\n                    }\n\n                    // if is local item we need to enable upload button so change can be propagated to server\n                    if (item.origin === FileOrigin.LOCAL) {\n                        dispatch('DID_LOAD_ITEM', {\n                            id: item.id,\n                            error: null,\n                            serverFileReference: item.source,\n                        });\n                    }\n\n                    // for async scenarios\n                    var upload = function upload() {\n                        // we push this forward a bit so the interface is updated correctly\n                        setTimeout(function() {\n                            dispatch('REQUEST_ITEM_PROCESSING', { query: id });\n                        }, 32);\n                    };\n\n                    var revert = function revert(doUpload) {\n                        item.revert(\n                            createRevertFunction(\n                                state.options.server.url,\n                                state.options.server.revert\n                            ),\n                            query('GET_FORCE_REVERT')\n                        )\n                            .then(doUpload ? upload : function() {})\n                            .catch(function() {});\n                    };\n\n                    var abort = function abort(doUpload) {\n                        item.abortProcessing().then(doUpload ? upload : function() {});\n                    };\n\n                    // if we should re-upload the file immediately\n                    if (item.status === ItemStatus.PROCESSING_COMPLETE) {\n                        return revert(state.options.instantUpload);\n                    }\n\n                    // if currently uploading, cancel upload\n                    if (item.status === ItemStatus.PROCESSING) {\n                        return abort(state.options.instantUpload);\n                    }\n\n                    if (state.options.instantUpload) {\n                        upload();\n                    }\n                }, 0);\n            },\n\n            MOVE_ITEM: function MOVE_ITEM(_ref4) {\n                var query = _ref4.query,\n                    index = _ref4.index;\n                var item = getItemByQuery(state.items, query);\n                if (!item) return;\n                var currentIndex = state.items.indexOf(item);\n                index = limit(index, 0, state.items.length - 1);\n                if (currentIndex === index) return;\n                state.items.splice(index, 0, state.items.splice(currentIndex, 1)[0]);\n            },\n\n            SORT: function SORT(_ref5) {\n                var compare = _ref5.compare;\n                sortItems(state, compare);\n                dispatch('DID_SORT_ITEMS', {\n                    items: query('GET_ACTIVE_ITEMS'),\n                });\n            },\n\n            ADD_ITEMS: function ADD_ITEMS(_ref6) {\n                var items = _ref6.items,\n                    index = _ref6.index,\n                    interactionMethod = _ref6.interactionMethod,\n                    _ref6$success = _ref6.success,\n                    success = _ref6$success === void 0 ? function() {} : _ref6$success,\n                    _ref6$failure = _ref6.failure,\n                    failure = _ref6$failure === void 0 ? function() {} : _ref6$failure;\n                var currentIndex = index;\n\n                if (index === -1 || typeof index === 'undefined') {\n                    var insertLocation = query('GET_ITEM_INSERT_LOCATION');\n                    var totalItems = query('GET_TOTAL_ITEMS');\n                    currentIndex = insertLocation === 'before' ? 0 : totalItems;\n                }\n\n                var ignoredFiles = query('GET_IGNORED_FILES');\n                var isValidFile = function isValidFile(source) {\n                    return isFile(source)\n                        ? !ignoredFiles.includes(source.name.toLowerCase())\n                        : !isEmpty(source);\n                };\n                var validItems = items.filter(isValidFile);\n\n                var promises = validItems.map(function(source) {\n                    return new Promise(function(resolve, reject) {\n                        dispatch('ADD_ITEM', {\n                            interactionMethod: interactionMethod,\n                            source: source.source || source,\n                            success: resolve,\n                            failure: reject,\n                            index: currentIndex++,\n                            options: source.options || {},\n                        });\n                    });\n                });\n\n                Promise.all(promises)\n                    .then(success)\n                    .catch(failure);\n            },\n\n            /**\n             * @param source\n             * @param index\n             * @param interactionMethod\n             */\n            ADD_ITEM: function ADD_ITEM(_ref7) {\n                var source = _ref7.source,\n                    _ref7$index = _ref7.index,\n                    index = _ref7$index === void 0 ? -1 : _ref7$index,\n                    interactionMethod = _ref7.interactionMethod,\n                    _ref7$success = _ref7.success,\n                    success = _ref7$success === void 0 ? function() {} : _ref7$success,\n                    _ref7$failure = _ref7.failure,\n                    failure = _ref7$failure === void 0 ? function() {} : _ref7$failure,\n                    _ref7$options = _ref7.options,\n                    options = _ref7$options === void 0 ? {} : _ref7$options;\n                // if no source supplied\n                if (isEmpty(source)) {\n                    failure({\n                        error: createResponse('error', 0, 'No source'),\n                        file: null,\n                    });\n\n                    return;\n                }\n\n                // filter out invalid file items, used to filter dropped directory contents\n                if (\n                    isFile(source) &&\n                    state.options.ignoredFiles.includes(source.name.toLowerCase())\n                ) {\n                    // fail silently\n                    return;\n                }\n\n                // test if there's still room in the list of files\n                if (!hasRoomForItem(state)) {\n                    // if multiple allowed, we can't replace\n                    // or if only a single item is allowed but we're not allowed to replace it we exit\n                    if (\n                        state.options.allowMultiple ||\n                        (!state.options.allowMultiple && !state.options.allowReplace)\n                    ) {\n                        var error = createResponse('warning', 0, 'Max files');\n\n                        dispatch('DID_THROW_MAX_FILES', {\n                            source: source,\n                            error: error,\n                        });\n\n                        failure({ error: error, file: null });\n\n                        return;\n                    }\n\n                    // let's replace the item\n                    // id of first item we're about to remove\n                    var _item = getActiveItems(state.items)[0];\n\n                    // if has been processed remove it from the server as well\n                    if (\n                        _item.status === ItemStatus.PROCESSING_COMPLETE ||\n                        _item.status === ItemStatus.PROCESSING_REVERT_ERROR\n                    ) {\n                        var forceRevert = query('GET_FORCE_REVERT');\n                        _item\n                            .revert(\n                                createRevertFunction(\n                                    state.options.server.url,\n                                    state.options.server.revert\n                                ),\n                                forceRevert\n                            )\n                            .then(function() {\n                                if (!forceRevert) return;\n\n                                // try to add now\n                                dispatch('ADD_ITEM', {\n                                    source: source,\n                                    index: index,\n                                    interactionMethod: interactionMethod,\n                                    success: success,\n                                    failure: failure,\n                                    options: options,\n                                });\n                            })\n                            .catch(function() {}); // no need to handle this catch state for now\n\n                        if (forceRevert) return;\n                    }\n\n                    // remove first item as it will be replaced by this item\n                    dispatch('REMOVE_ITEM', { query: _item.id });\n                }\n\n                // where did the file originate\n                var origin =\n                    options.type === 'local'\n                        ? FileOrigin.LOCAL\n                        : options.type === 'limbo'\n                        ? FileOrigin.LIMBO\n                        : FileOrigin.INPUT;\n\n                // create a new blank item\n                var item = createItem(\n                    // where did this file come from\n                    origin,\n\n                    // an input file never has a server file reference\n                    origin === FileOrigin.INPUT ? null : source,\n\n                    // file mock data, if defined\n                    options.file\n                );\n\n                // set initial meta data\n                Object.keys(options.metadata || {}).forEach(function(key) {\n                    item.setMetadata(key, options.metadata[key]);\n                });\n\n                // created the item, let plugins add methods\n                applyFilters('DID_CREATE_ITEM', item, { query: query, dispatch: dispatch });\n\n                // where to insert new items\n                var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n\n                // adjust index if is not allowed to pick location\n                if (!state.options.itemInsertLocationFreedom) {\n                    index = itemInsertLocation === 'before' ? -1 : state.items.length;\n                }\n\n                // add item to list\n                insertItem(state.items, item, index);\n\n                // sort items in list\n                if (isFunction(itemInsertLocation) && source) {\n                    sortItems(state, itemInsertLocation);\n                }\n\n                // get a quick reference to the item id\n                var id = item.id;\n\n                // observe item events\n                item.on('init', function() {\n                    dispatch('DID_INIT_ITEM', { id: id });\n                });\n\n                item.on('load-init', function() {\n                    dispatch('DID_START_ITEM_LOAD', { id: id });\n                });\n\n                item.on('load-meta', function() {\n                    dispatch('DID_UPDATE_ITEM_META', { id: id });\n                });\n\n                item.on('load-progress', function(progress) {\n                    dispatch('DID_UPDATE_ITEM_LOAD_PROGRESS', { id: id, progress: progress });\n                });\n\n                item.on('load-request-error', function(error) {\n                    var mainStatus = dynamicLabel(state.options.labelFileLoadError)(error);\n\n                    // is client error, no way to recover\n                    if (error.code >= 400 && error.code < 500) {\n                        dispatch('DID_THROW_ITEM_INVALID', {\n                            id: id,\n                            error: error,\n                            status: {\n                                main: mainStatus,\n                                sub: error.code + ' (' + error.body + ')',\n                            },\n                        });\n\n                        // reject the file so can be dealt with through API\n                        failure({ error: error, file: createItemAPI(item) });\n                        return;\n                    }\n\n                    // is possible server error, so might be possible to retry\n                    dispatch('DID_THROW_ITEM_LOAD_ERROR', {\n                        id: id,\n                        error: error,\n                        status: {\n                            main: mainStatus,\n                            sub: state.options.labelTapToRetry,\n                        },\n                    });\n                });\n\n                item.on('load-file-error', function(error) {\n                    dispatch('DID_THROW_ITEM_INVALID', {\n                        id: id,\n                        error: error.status,\n                        status: error.status,\n                    });\n\n                    failure({ error: error.status, file: createItemAPI(item) });\n                });\n\n                item.on('load-abort', function() {\n                    dispatch('REMOVE_ITEM', { query: id });\n                });\n\n                item.on('load-skip', function() {\n                    item.on('metadata-update', function(change) {\n                        if (!isFile(item.file)) return;\n                        dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n                    });\n\n                    dispatch('COMPLETE_LOAD_ITEM', {\n                        query: id,\n                        item: item,\n                        data: {\n                            source: source,\n                            success: success,\n                        },\n                    });\n                });\n\n                item.on('load', function() {\n                    var handleAdd = function handleAdd(shouldAdd) {\n                        // no should not add this file\n                        if (!shouldAdd) {\n                            dispatch('REMOVE_ITEM', {\n                                query: id,\n                            });\n\n                            return;\n                        }\n\n                        // now interested in metadata updates\n                        item.on('metadata-update', function(change) {\n                            dispatch('DID_UPDATE_ITEM_METADATA', { id: id, change: change });\n                        });\n\n                        // let plugins decide if the output data should be prepared at this point\n                        // means we'll do this and wait for idle state\n                        applyFilterChain('SHOULD_PREPARE_OUTPUT', false, {\n                            item: item,\n                            query: query,\n                        }).then(function(shouldPrepareOutput) {\n                            // plugins determined the output data should be prepared (or not), can be adjusted with beforePrepareOutput hook\n                            var beforePrepareFile = query('GET_BEFORE_PREPARE_FILE');\n                            if (beforePrepareFile)\n                                shouldPrepareOutput = beforePrepareFile(item, shouldPrepareOutput);\n\n                            var loadComplete = function loadComplete() {\n                                dispatch('COMPLETE_LOAD_ITEM', {\n                                    query: id,\n                                    item: item,\n                                    data: {\n                                        source: source,\n                                        success: success,\n                                    },\n                                });\n\n                                listUpdated(dispatch, state);\n                            };\n\n                            // exit\n                            if (shouldPrepareOutput) {\n                                // wait for idle state and then run PREPARE_OUTPUT\n                                dispatch(\n                                    'REQUEST_PREPARE_OUTPUT',\n                                    {\n                                        query: id,\n                                        item: item,\n                                        success: function success(file) {\n                                            dispatch('DID_PREPARE_OUTPUT', { id: id, file: file });\n                                            loadComplete();\n                                        },\n                                    },\n\n                                    true\n                                );\n\n                                return;\n                            }\n\n                            loadComplete();\n                        });\n                    };\n\n                    // item loaded, allow plugins to\n                    // - read data (quickly)\n                    // - add metadata\n                    applyFilterChain('DID_LOAD_ITEM', item, { query: query, dispatch: dispatch })\n                        .then(function() {\n                            optionalPromise(query('GET_BEFORE_ADD_FILE'), createItemAPI(item)).then(\n                                handleAdd\n                            );\n                        })\n                        .catch(function(e) {\n                            if (!e || !e.error || !e.status) return handleAdd(false);\n                            dispatch('DID_THROW_ITEM_INVALID', {\n                                id: id,\n                                error: e.error,\n                                status: e.status,\n                            });\n                        });\n                });\n\n                item.on('process-start', function() {\n                    dispatch('DID_START_ITEM_PROCESSING', { id: id });\n                });\n\n                item.on('process-progress', function(progress) {\n                    dispatch('DID_UPDATE_ITEM_PROCESS_PROGRESS', { id: id, progress: progress });\n                });\n\n                item.on('process-error', function(error) {\n                    dispatch('DID_THROW_ITEM_PROCESSING_ERROR', {\n                        id: id,\n                        error: error,\n                        status: {\n                            main: dynamicLabel(state.options.labelFileProcessingError)(error),\n                            sub: state.options.labelTapToRetry,\n                        },\n                    });\n                });\n\n                item.on('process-revert-error', function(error) {\n                    dispatch('DID_THROW_ITEM_PROCESSING_REVERT_ERROR', {\n                        id: id,\n                        error: error,\n                        status: {\n                            main: dynamicLabel(state.options.labelFileProcessingRevertError)(error),\n                            sub: state.options.labelTapToRetry,\n                        },\n                    });\n                });\n\n                item.on('process-complete', function(serverFileReference) {\n                    dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n                        id: id,\n                        error: null,\n                        serverFileReference: serverFileReference,\n                    });\n\n                    dispatch('DID_DEFINE_VALUE', { id: id, value: serverFileReference });\n                });\n\n                item.on('process-abort', function() {\n                    dispatch('DID_ABORT_ITEM_PROCESSING', { id: id });\n                });\n\n                item.on('process-revert', function() {\n                    dispatch('DID_REVERT_ITEM_PROCESSING', { id: id });\n                    dispatch('DID_DEFINE_VALUE', { id: id, value: null });\n                });\n\n                // let view know the item has been inserted\n                dispatch('DID_ADD_ITEM', {\n                    id: id,\n                    index: index,\n                    interactionMethod: interactionMethod,\n                });\n\n                listUpdated(dispatch, state);\n\n                // start loading the source\n                var _ref8 = state.options.server || {},\n                    url = _ref8.url,\n                    load = _ref8.load,\n                    restore = _ref8.restore,\n                    fetch = _ref8.fetch;\n\n                item.load(\n                    source,\n\n                    // this creates a function that loads the file based on the type of file (string, base64, blob, file) and location of file (local, remote, limbo)\n                    createFileLoader(\n                        origin === FileOrigin.INPUT\n                            ? // input, if is remote, see if should use custom fetch, else use default fetchBlob\n                              isString(source) && isExternalURL(source)\n                                ? fetch\n                                    ? createFetchFunction(url, fetch)\n                                    : fetchBlob // remote url\n                                : fetchBlob // try to fetch url\n                            : // limbo or local\n                            origin === FileOrigin.LIMBO\n                            ? createFetchFunction(url, restore) // limbo\n                            : createFetchFunction(url, load) // local\n                    ),\n\n                    // called when the file is loaded so it can be piped through the filters\n                    function(file, success, error) {\n                        // let's process the file\n                        applyFilterChain('LOAD_FILE', file, { query: query })\n                            .then(success)\n                            .catch(error);\n                    }\n                );\n            },\n\n            REQUEST_PREPARE_OUTPUT: function REQUEST_PREPARE_OUTPUT(_ref9) {\n                var item = _ref9.item,\n                    success = _ref9.success,\n                    _ref9$failure = _ref9.failure,\n                    failure = _ref9$failure === void 0 ? function() {} : _ref9$failure;\n                // error response if item archived\n                var err = {\n                    error: createResponse('error', 0, 'Item not found'),\n                    file: null,\n                };\n\n                // don't handle archived items, an item could have been archived (load aborted) while waiting to be prepared\n                if (item.archived) return failure(err);\n\n                // allow plugins to alter the file data\n                applyFilterChain('PREPARE_OUTPUT', item.file, { query: query, item: item }).then(\n                    function(result) {\n                        applyFilterChain('COMPLETE_PREPARE_OUTPUT', result, {\n                            query: query,\n                            item: item,\n                        }).then(function(result) {\n                            // don't handle archived items, an item could have been archived (load aborted) while being prepared\n                            if (item.archived) return failure(err);\n\n                            // we done!\n                            success(result);\n                        });\n                    }\n                );\n            },\n\n            COMPLETE_LOAD_ITEM: function COMPLETE_LOAD_ITEM(_ref10) {\n                var item = _ref10.item,\n                    data = _ref10.data;\n                var success = data.success,\n                    source = data.source;\n\n                // sort items in list\n                var itemInsertLocation = query('GET_ITEM_INSERT_LOCATION');\n                if (isFunction(itemInsertLocation) && source) {\n                    sortItems(state, itemInsertLocation);\n                }\n\n                // let interface know the item has loaded\n                dispatch('DID_LOAD_ITEM', {\n                    id: item.id,\n                    error: null,\n                    serverFileReference: item.origin === FileOrigin.INPUT ? null : source,\n                });\n\n                // item has been successfully loaded and added to the\n                // list of items so can now be safely returned for use\n                success(createItemAPI(item));\n\n                // if this is a local server file we need to show a different state\n                if (item.origin === FileOrigin.LOCAL) {\n                    dispatch('DID_LOAD_LOCAL_ITEM', { id: item.id });\n                    return;\n                }\n\n                // if is a temp server file we prevent async upload call here (as the file is already on the server)\n                if (item.origin === FileOrigin.LIMBO) {\n                    dispatch('DID_COMPLETE_ITEM_PROCESSING', {\n                        id: item.id,\n                        error: null,\n                        serverFileReference: source,\n                    });\n\n                    dispatch('DID_DEFINE_VALUE', {\n                        id: item.id,\n                        value: item.serverId || source,\n                    });\n\n                    return;\n                }\n\n                // id we are allowed to upload the file immediately, lets do it\n                if (query('IS_ASYNC') && state.options.instantUpload) {\n                    dispatch('REQUEST_ITEM_PROCESSING', { query: item.id });\n                }\n            },\n\n            RETRY_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n                // try loading the source one more time\n                item.retryLoad();\n            }),\n\n            REQUEST_ITEM_PREPARE: getItemByQueryFromState(state, function(item, _success, failure) {\n                dispatch(\n                    'REQUEST_PREPARE_OUTPUT',\n                    {\n                        query: item.id,\n                        item: item,\n                        success: function success(file) {\n                            dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n                            _success({\n                                file: item,\n                                output: file,\n                            });\n                        },\n                        failure: failure,\n                    },\n\n                    true\n                );\n            }),\n\n            REQUEST_ITEM_PROCESSING: getItemByQueryFromState(state, function(\n                item,\n                success,\n                failure\n            ) {\n                // cannot be queued (or is already queued)\n                var itemCanBeQueuedForProcessing =\n                    // waiting for something\n                    item.status === ItemStatus.IDLE ||\n                    // processing went wrong earlier\n                    item.status === ItemStatus.PROCESSING_ERROR;\n\n                // not ready to be processed\n                if (!itemCanBeQueuedForProcessing) {\n                    var processNow = function processNow() {\n                        return dispatch('REQUEST_ITEM_PROCESSING', {\n                            query: item,\n                            success: success,\n                            failure: failure,\n                        });\n                    };\n\n                    var process = function process() {\n                        return document.hidden ? processNow() : setTimeout(processNow, 32);\n                    };\n\n                    // if already done processing or tried to revert but didn't work, try again\n                    if (\n                        item.status === ItemStatus.PROCESSING_COMPLETE ||\n                        item.status === ItemStatus.PROCESSING_REVERT_ERROR\n                    ) {\n                        item.revert(\n                            createRevertFunction(\n                                state.options.server.url,\n                                state.options.server.revert\n                            ),\n                            query('GET_FORCE_REVERT')\n                        )\n                            .then(process)\n                            .catch(function() {}); // don't continue with processing if something went wrong\n                    } else if (item.status === ItemStatus.PROCESSING) {\n                        item.abortProcessing().then(process);\n                    }\n\n                    return;\n                }\n\n                // already queued for processing\n                if (item.status === ItemStatus.PROCESSING_QUEUED) return;\n\n                item.requestProcessing();\n\n                dispatch('DID_REQUEST_ITEM_PROCESSING', { id: item.id });\n\n                dispatch('PROCESS_ITEM', { query: item, success: success, failure: failure }, true);\n            }),\n\n            PROCESS_ITEM: getItemByQueryFromState(state, function(item, success, failure) {\n                var maxParallelUploads = query('GET_MAX_PARALLEL_UPLOADS');\n                var totalCurrentUploads = query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING)\n                    .length;\n\n                // queue and wait till queue is freed up\n                if (totalCurrentUploads === maxParallelUploads) {\n                    // queue for later processing\n                    state.processingQueue.push({\n                        id: item.id,\n                        success: success,\n                        failure: failure,\n                    });\n\n                    // stop it!\n                    return;\n                }\n\n                // if was not queued or is already processing exit here\n                if (item.status === ItemStatus.PROCESSING) return;\n\n                var processNext = function processNext() {\n                    // process queueud items\n                    var queueEntry = state.processingQueue.shift();\n\n                    // no items left\n                    if (!queueEntry) return;\n\n                    // get item reference\n                    var id = queueEntry.id,\n                        success = queueEntry.success,\n                        failure = queueEntry.failure;\n                    var itemReference = getItemByQuery(state.items, id);\n\n                    // if item was archived while in queue, jump to next\n                    if (!itemReference || itemReference.archived) {\n                        processNext();\n                        return;\n                    }\n\n                    // process queued item\n                    dispatch(\n                        'PROCESS_ITEM',\n                        { query: id, success: success, failure: failure },\n                        true\n                    );\n                };\n\n                // we done function\n                item.onOnce('process-complete', function() {\n                    success(createItemAPI(item));\n                    processNext();\n\n                    // if origin is local, and we're instant uploading, trigger remove of original\n                    // as revert will remove file from list\n                    var server = state.options.server;\n                    var instantUpload = state.options.instantUpload;\n                    if (\n                        instantUpload &&\n                        item.origin === FileOrigin.LOCAL &&\n                        isFunction(server.remove)\n                    ) {\n                        var noop = function noop() {};\n                        item.origin = FileOrigin.LIMBO;\n                        state.options.server.remove(item.source, noop, noop);\n                    }\n\n                    // All items processed? No errors?\n                    var allItemsProcessed =\n                        query('GET_ITEMS_BY_STATUS', ItemStatus.PROCESSING_COMPLETE).length ===\n                        state.items.length;\n                    if (allItemsProcessed) {\n                        dispatch('DID_COMPLETE_ITEM_PROCESSING_ALL');\n                    }\n                });\n\n                // we error function\n                item.onOnce('process-error', function(error) {\n                    failure({ error: error, file: createItemAPI(item) });\n                    processNext();\n                });\n\n                // start file processing\n                var options = state.options;\n                item.process(\n                    createFileProcessor(\n                        createProcessorFunction(\n                            options.server.url,\n                            options.server.process,\n                            options.name,\n                            {\n                                chunkTransferId: item.transferId,\n                                chunkServer: options.server.patch,\n                                chunkUploads: options.chunkUploads,\n                                chunkForce: options.chunkForce,\n                                chunkSize: options.chunkSize,\n                                chunkRetryDelays: options.chunkRetryDelays,\n                            }\n                        ),\n\n                        {\n                            allowMinimumUploadDuration: query('GET_ALLOW_MINIMUM_UPLOAD_DURATION'),\n                        }\n                    ),\n\n                    // called when the file is about to be processed so it can be piped through the transform filters\n                    function(file, success, error) {\n                        // allow plugins to alter the file data\n                        applyFilterChain('PREPARE_OUTPUT', file, { query: query, item: item })\n                            .then(function(file) {\n                                dispatch('DID_PREPARE_OUTPUT', { id: item.id, file: file });\n\n                                success(file);\n                            })\n                            .catch(error);\n                    }\n                );\n            }),\n\n            RETRY_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                dispatch('REQUEST_ITEM_PROCESSING', { query: item });\n            }),\n\n            REQUEST_REMOVE_ITEM: getItemByQueryFromState(state, function(item) {\n                optionalPromise(query('GET_BEFORE_REMOVE_FILE'), createItemAPI(item)).then(function(\n                    shouldRemove\n                ) {\n                    if (!shouldRemove) {\n                        return;\n                    }\n                    dispatch('REMOVE_ITEM', { query: item });\n                });\n            }),\n\n            RELEASE_ITEM: getItemByQueryFromState(state, function(item) {\n                item.release();\n            }),\n\n            REMOVE_ITEM: getItemByQueryFromState(state, function(item, success, failure, options) {\n                var removeFromView = function removeFromView() {\n                    // get id reference\n                    var id = item.id;\n\n                    // archive the item, this does not remove it from the list\n                    getItemById(state.items, id).archive();\n\n                    // tell the view the item has been removed\n                    dispatch('DID_REMOVE_ITEM', { error: null, id: id, item: item });\n\n                    // now the list has been modified\n                    listUpdated(dispatch, state);\n\n                    // correctly removed\n                    success(createItemAPI(item));\n                };\n\n                // if this is a local file and the `server.remove` function has been configured,\n                // send source there so dev can remove file from server\n                var server = state.options.server;\n                if (\n                    item.origin === FileOrigin.LOCAL &&\n                    server &&\n                    isFunction(server.remove) &&\n                    options.remove !== false\n                ) {\n                    dispatch('DID_START_ITEM_REMOVE', { id: item.id });\n\n                    server.remove(\n                        item.source,\n                        function() {\n                            return removeFromView();\n                        },\n                        function(status) {\n                            dispatch('DID_THROW_ITEM_REMOVE_ERROR', {\n                                id: item.id,\n                                error: createResponse('error', 0, status, null),\n                                status: {\n                                    main: dynamicLabel(state.options.labelFileRemoveError)(status),\n                                    sub: state.options.labelTapToRetry,\n                                },\n                            });\n                        }\n                    );\n                } else {\n                    // if is requesting revert and can revert need to call revert handler (not calling request_ because that would also trigger beforeRemoveHook)\n                    if (\n                        (options.revert &&\n                            item.origin !== FileOrigin.LOCAL &&\n                            item.serverId !== null) ||\n                        // if chunked uploads are enabled and we're uploading in chunks for this specific file\n                        // or if the file isn't big enough for chunked uploads but chunkForce is set then call\n                        // revert before removing from the view...\n                        (state.options.chunkUploads && item.file.size > state.options.chunkSize) ||\n                        (state.options.chunkUploads && state.options.chunkForce)\n                    ) {\n                        item.revert(\n                            createRevertFunction(\n                                state.options.server.url,\n                                state.options.server.revert\n                            ),\n                            query('GET_FORCE_REVERT')\n                        );\n                    }\n\n                    // can now safely remove from view\n                    removeFromView();\n                }\n            }),\n\n            ABORT_ITEM_LOAD: getItemByQueryFromState(state, function(item) {\n                item.abortLoad();\n            }),\n\n            ABORT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                // test if is already processed\n                if (item.serverId) {\n                    dispatch('REVERT_ITEM_PROCESSING', { id: item.id });\n                    return;\n                }\n\n                // abort\n                item.abortProcessing().then(function() {\n                    var shouldRemove = state.options.instantUpload;\n                    if (shouldRemove) {\n                        dispatch('REMOVE_ITEM', { query: item.id });\n                    }\n                });\n            }),\n\n            REQUEST_REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                // not instant uploading, revert immediately\n                if (!state.options.instantUpload) {\n                    dispatch('REVERT_ITEM_PROCESSING', { query: item });\n                    return;\n                }\n\n                // if we're instant uploading the file will also be removed if we revert,\n                // so if a before remove file hook is defined we need to run it now\n                var handleRevert = function handleRevert(shouldRevert) {\n                    if (!shouldRevert) return;\n                    dispatch('REVERT_ITEM_PROCESSING', { query: item });\n                };\n\n                var fn = query('GET_BEFORE_REMOVE_FILE');\n                if (!fn) {\n                    return handleRevert(true);\n                }\n\n                var requestRemoveResult = fn(createItemAPI(item));\n                if (requestRemoveResult == null) {\n                    // undefined or null\n                    return handleRevert(true);\n                }\n\n                if (typeof requestRemoveResult === 'boolean') {\n                    return handleRevert(requestRemoveResult);\n                }\n\n                if (typeof requestRemoveResult.then === 'function') {\n                    requestRemoveResult.then(handleRevert);\n                }\n            }),\n\n            REVERT_ITEM_PROCESSING: getItemByQueryFromState(state, function(item) {\n                item.revert(\n                    createRevertFunction(state.options.server.url, state.options.server.revert),\n                    query('GET_FORCE_REVERT')\n                )\n                    .then(function() {\n                        var shouldRemove = state.options.instantUpload || isMockItem(item);\n                        if (shouldRemove) {\n                            dispatch('REMOVE_ITEM', { query: item.id });\n                        }\n                    })\n                    .catch(function() {});\n            }),\n\n            SET_OPTIONS: function SET_OPTIONS(_ref11) {\n                var options = _ref11.options;\n                // get all keys passed\n                var optionKeys = Object.keys(options);\n\n                // get prioritized keyed to include (remove once not in options object)\n                var prioritizedOptionKeys = PrioritizedOptions.filter(function(key) {\n                    return optionKeys.includes(key);\n                });\n\n                // order the keys, prioritized first, then rest\n                var orderedOptionKeys = [].concat(\n                    _toConsumableArray(prioritizedOptionKeys),\n                    _toConsumableArray(\n                        Object.keys(options).filter(function(key) {\n                            return !prioritizedOptionKeys.includes(key);\n                        })\n                    )\n                );\n\n                // dispatch set event for each option\n                orderedOptionKeys.forEach(function(key) {\n                    dispatch('SET_' + fromCamels(key, '_').toUpperCase(), {\n                        value: options[key],\n                    });\n                });\n            },\n        };\n    };\n\n    var PrioritizedOptions = ['server'];\n\n    var formatFilename = function formatFilename(name) {\n        return name;\n    };\n\n    var createElement$1 = function createElement(tagName) {\n        return document.createElement(tagName);\n    };\n\n    var text = function text(node, value) {\n        var textNode = node.childNodes[0];\n        if (!textNode) {\n            textNode = document.createTextNode(value);\n            node.appendChild(textNode);\n        } else if (value !== textNode.nodeValue) {\n            textNode.nodeValue = value;\n        }\n    };\n\n    var polarToCartesian = function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n        var angleInRadians = (((angleInDegrees % 360) - 90) * Math.PI) / 180.0;\n        return {\n            x: centerX + radius * Math.cos(angleInRadians),\n            y: centerY + radius * Math.sin(angleInRadians),\n        };\n    };\n\n    var describeArc = function describeArc(x, y, radius, startAngle, endAngle, arcSweep) {\n        var start = polarToCartesian(x, y, radius, endAngle);\n        var end = polarToCartesian(x, y, radius, startAngle);\n        return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' ');\n    };\n\n    var percentageArc = function percentageArc(x, y, radius, from, to) {\n        var arcSweep = 1;\n        if (to > from && to - from <= 0.5) {\n            arcSweep = 0;\n        }\n        if (from > to && from - to >= 0.5) {\n            arcSweep = 0;\n        }\n        return describeArc(\n            x,\n            y,\n            radius,\n            Math.min(0.9999, from) * 360,\n            Math.min(0.9999, to) * 360,\n            arcSweep\n        );\n    };\n\n    var create = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // start at 0\n        props.spin = false;\n        props.progress = 0;\n        props.opacity = 0;\n\n        // svg\n        var svg = createElement('svg');\n        root.ref.path = createElement('path', {\n            'stroke-width': 2,\n            'stroke-linecap': 'round',\n        });\n\n        svg.appendChild(root.ref.path);\n\n        root.ref.svg = svg;\n\n        root.appendChild(svg);\n    };\n\n    var write = function write(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        if (props.opacity === 0) {\n            return;\n        }\n\n        if (props.align) {\n            root.element.dataset.align = props.align;\n        }\n\n        // get width of stroke\n        var ringStrokeWidth = parseInt(attr(root.ref.path, 'stroke-width'), 10);\n\n        // calculate size of ring\n        var size = root.rect.element.width * 0.5;\n\n        // ring state\n        var ringFrom = 0;\n        var ringTo = 0;\n\n        // now in busy mode\n        if (props.spin) {\n            ringFrom = 0;\n            ringTo = 0.5;\n        } else {\n            ringFrom = 0;\n            ringTo = props.progress;\n        }\n\n        // get arc path\n        var coordinates = percentageArc(size, size, size - ringStrokeWidth, ringFrom, ringTo);\n\n        // update progress bar\n        attr(root.ref.path, 'd', coordinates);\n\n        // hide while contains 0 value\n        attr(root.ref.path, 'stroke-opacity', props.spin || props.progress > 0 ? 1 : 0);\n    };\n\n    var progressIndicator = createView({\n        tag: 'div',\n        name: 'progress-indicator',\n        ignoreRectUpdate: true,\n        ignoreRect: true,\n        create: create,\n        write: write,\n        mixins: {\n            apis: ['progress', 'spin', 'align'],\n            styles: ['opacity'],\n            animations: {\n                opacity: { type: 'tween', duration: 500 },\n                progress: {\n                    type: 'spring',\n                    stiffness: 0.95,\n                    damping: 0.65,\n                    mass: 10,\n                },\n            },\n        },\n    });\n\n    var create$1 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        root.element.innerHTML = (props.icon || '') + ('<span>' + props.label + '</span>');\n\n        props.isDisabled = false;\n    };\n\n    var write$1 = function write(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        var isDisabled = props.isDisabled;\n        var shouldDisable = root.query('GET_DISABLED') || props.opacity === 0;\n\n        if (shouldDisable && !isDisabled) {\n            props.isDisabled = true;\n            attr(root.element, 'disabled', 'disabled');\n        } else if (!shouldDisable && isDisabled) {\n            props.isDisabled = false;\n            root.element.removeAttribute('disabled');\n        }\n    };\n\n    var fileActionButton = createView({\n        tag: 'button',\n        attributes: {\n            type: 'button',\n        },\n\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        name: 'file-action-button',\n        mixins: {\n            apis: ['label'],\n            styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n            animations: {\n                scaleX: 'spring',\n                scaleY: 'spring',\n                translateX: 'spring',\n                translateY: 'spring',\n                opacity: { type: 'tween', duration: 250 },\n            },\n\n            listeners: true,\n        },\n\n        create: create$1,\n        write: write$1,\n    });\n\n    var toNaturalFileSize = function toNaturalFileSize(bytes) {\n        var decimalSeparator =\n            arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '.';\n        var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;\n        var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n        var _options$labelBytes = options.labelBytes,\n            labelBytes = _options$labelBytes === void 0 ? 'bytes' : _options$labelBytes,\n            _options$labelKilobyt = options.labelKilobytes,\n            labelKilobytes = _options$labelKilobyt === void 0 ? 'KB' : _options$labelKilobyt,\n            _options$labelMegabyt = options.labelMegabytes,\n            labelMegabytes = _options$labelMegabyt === void 0 ? 'MB' : _options$labelMegabyt,\n            _options$labelGigabyt = options.labelGigabytes,\n            labelGigabytes = _options$labelGigabyt === void 0 ? 'GB' : _options$labelGigabyt;\n\n        // no negative byte sizes\n        bytes = Math.round(Math.abs(bytes));\n\n        var KB = base;\n        var MB = base * base;\n        var GB = base * base * base;\n\n        // just bytes\n        if (bytes < KB) {\n            return bytes + ' ' + labelBytes;\n        }\n\n        // kilobytes\n        if (bytes < MB) {\n            return Math.floor(bytes / KB) + ' ' + labelKilobytes;\n        }\n\n        // megabytes\n        if (bytes < GB) {\n            return removeDecimalsWhenZero(bytes / MB, 1, decimalSeparator) + ' ' + labelMegabytes;\n        }\n\n        // gigabytes\n        return removeDecimalsWhenZero(bytes / GB, 2, decimalSeparator) + ' ' + labelGigabytes;\n    };\n\n    var removeDecimalsWhenZero = function removeDecimalsWhenZero(value, decimalCount, separator) {\n        return value\n            .toFixed(decimalCount)\n            .split('.')\n            .filter(function(part) {\n                return part !== '0';\n            })\n            .join(separator);\n    };\n\n    var create$2 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // filename\n        var fileName = createElement$1('span');\n        fileName.className = 'filepond--file-info-main';\n        // hide for screenreaders\n        // the file is contained in a fieldset with legend that contains the filename\n        // no need to read it twice\n        attr(fileName, 'aria-hidden', 'true');\n        root.appendChild(fileName);\n        root.ref.fileName = fileName;\n\n        // filesize\n        var fileSize = createElement$1('span');\n        fileSize.className = 'filepond--file-info-sub';\n        root.appendChild(fileSize);\n        root.ref.fileSize = fileSize;\n\n        // set initial values\n        text(fileSize, root.query('GET_LABEL_FILE_WAITING_FOR_SIZE'));\n        text(fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n    };\n\n    var updateFile = function updateFile(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        text(\n            root.ref.fileSize,\n            toNaturalFileSize(\n                root.query('GET_ITEM_SIZE', props.id),\n                '.',\n                root.query('GET_FILE_SIZE_BASE'),\n                root.query('GET_FILE_SIZE_LABELS', root.query)\n            )\n        );\n\n        text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n    };\n\n    var updateFileSizeOnError = function updateFileSizeOnError(_ref3) {\n        var root = _ref3.root,\n            props = _ref3.props;\n        // if size is available don't fallback to unknown size message\n        if (isInt(root.query('GET_ITEM_SIZE', props.id))) {\n            updateFile({ root: root, props: props });\n            return;\n        }\n\n        text(root.ref.fileSize, root.query('GET_LABEL_FILE_SIZE_NOT_AVAILABLE'));\n    };\n\n    var fileInfo = createView({\n        name: 'file-info',\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        write: createRoute({\n            DID_LOAD_ITEM: updateFile,\n            DID_UPDATE_ITEM_META: updateFile,\n            DID_THROW_ITEM_LOAD_ERROR: updateFileSizeOnError,\n            DID_THROW_ITEM_INVALID: updateFileSizeOnError,\n        }),\n\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        create: create$2,\n        mixins: {\n            styles: ['translateX', 'translateY'],\n            animations: {\n                translateX: 'spring',\n                translateY: 'spring',\n            },\n        },\n    });\n\n    var toPercentage = function toPercentage(value) {\n        return Math.round(value * 100);\n    };\n\n    var create$3 = function create(_ref) {\n        var root = _ref.root;\n\n        // main status\n        var main = createElement$1('span');\n        main.className = 'filepond--file-status-main';\n        root.appendChild(main);\n        root.ref.main = main;\n\n        // sub status\n        var sub = createElement$1('span');\n        sub.className = 'filepond--file-status-sub';\n        root.appendChild(sub);\n        root.ref.sub = sub;\n\n        didSetItemLoadProgress({ root: root, action: { progress: null } });\n    };\n\n    var didSetItemLoadProgress = function didSetItemLoadProgress(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        var title =\n            action.progress === null\n                ? root.query('GET_LABEL_FILE_LOADING')\n                : root.query('GET_LABEL_FILE_LOADING') + ' ' + toPercentage(action.progress) + '%';\n\n        text(root.ref.main, title);\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n    };\n\n    var didSetItemProcessProgress = function didSetItemProcessProgress(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        var title =\n            action.progress === null\n                ? root.query('GET_LABEL_FILE_PROCESSING')\n                : root.query('GET_LABEL_FILE_PROCESSING') +\n                  ' ' +\n                  toPercentage(action.progress) +\n                  '%';\n\n        text(root.ref.main, title);\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n    };\n\n    var didRequestItemProcessing = function didRequestItemProcessing(_ref4) {\n        var root = _ref4.root;\n        text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING'));\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_CANCEL'));\n    };\n\n    var didAbortItemProcessing = function didAbortItemProcessing(_ref5) {\n        var root = _ref5.root;\n        text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_ABORTED'));\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_RETRY'));\n    };\n\n    var didCompleteItemProcessing = function didCompleteItemProcessing(_ref6) {\n        var root = _ref6.root;\n        text(root.ref.main, root.query('GET_LABEL_FILE_PROCESSING_COMPLETE'));\n        text(root.ref.sub, root.query('GET_LABEL_TAP_TO_UNDO'));\n    };\n\n    var clear = function clear(_ref7) {\n        var root = _ref7.root;\n        text(root.ref.main, '');\n        text(root.ref.sub, '');\n    };\n\n    var error = function error(_ref8) {\n        var root = _ref8.root,\n            action = _ref8.action;\n        text(root.ref.main, action.status.main);\n        text(root.ref.sub, action.status.sub);\n    };\n\n    var fileStatus = createView({\n        name: 'file-status',\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        write: createRoute({\n            DID_LOAD_ITEM: clear,\n            DID_REVERT_ITEM_PROCESSING: clear,\n            DID_REQUEST_ITEM_PROCESSING: didRequestItemProcessing,\n            DID_ABORT_ITEM_PROCESSING: didAbortItemProcessing,\n            DID_COMPLETE_ITEM_PROCESSING: didCompleteItemProcessing,\n            DID_UPDATE_ITEM_PROCESS_PROGRESS: didSetItemProcessProgress,\n            DID_UPDATE_ITEM_LOAD_PROGRESS: didSetItemLoadProgress,\n            DID_THROW_ITEM_LOAD_ERROR: error,\n            DID_THROW_ITEM_INVALID: error,\n            DID_THROW_ITEM_PROCESSING_ERROR: error,\n            DID_THROW_ITEM_PROCESSING_REVERT_ERROR: error,\n            DID_THROW_ITEM_REMOVE_ERROR: error,\n        }),\n\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        create: create$3,\n        mixins: {\n            styles: ['translateX', 'translateY', 'opacity'],\n            animations: {\n                opacity: { type: 'tween', duration: 250 },\n                translateX: 'spring',\n                translateY: 'spring',\n            },\n        },\n    });\n\n    /**\n     * Button definitions for the file view\n     */\n\n    var Buttons = {\n        AbortItemLoad: {\n            label: 'GET_LABEL_BUTTON_ABORT_ITEM_LOAD',\n            action: 'ABORT_ITEM_LOAD',\n            className: 'filepond--action-abort-item-load',\n            align: 'LOAD_INDICATOR_POSITION', // right\n        },\n        RetryItemLoad: {\n            label: 'GET_LABEL_BUTTON_RETRY_ITEM_LOAD',\n            action: 'RETRY_ITEM_LOAD',\n            icon: 'GET_ICON_RETRY',\n            className: 'filepond--action-retry-item-load',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        RemoveItem: {\n            label: 'GET_LABEL_BUTTON_REMOVE_ITEM',\n            action: 'REQUEST_REMOVE_ITEM',\n            icon: 'GET_ICON_REMOVE',\n            className: 'filepond--action-remove-item',\n            align: 'BUTTON_REMOVE_ITEM_POSITION', // left\n        },\n        ProcessItem: {\n            label: 'GET_LABEL_BUTTON_PROCESS_ITEM',\n            action: 'REQUEST_ITEM_PROCESSING',\n            icon: 'GET_ICON_PROCESS',\n            className: 'filepond--action-process-item',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        AbortItemProcessing: {\n            label: 'GET_LABEL_BUTTON_ABORT_ITEM_PROCESSING',\n            action: 'ABORT_ITEM_PROCESSING',\n            className: 'filepond--action-abort-item-processing',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        RetryItemProcessing: {\n            label: 'GET_LABEL_BUTTON_RETRY_ITEM_PROCESSING',\n            action: 'RETRY_ITEM_PROCESSING',\n            icon: 'GET_ICON_RETRY',\n            className: 'filepond--action-retry-item-processing',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n        RevertItemProcessing: {\n            label: 'GET_LABEL_BUTTON_UNDO_ITEM_PROCESSING',\n            action: 'REQUEST_REVERT_ITEM_PROCESSING',\n            icon: 'GET_ICON_UNDO',\n            className: 'filepond--action-revert-item-processing',\n            align: 'BUTTON_PROCESS_ITEM_POSITION', // right\n        },\n    };\n\n    // make a list of buttons, we can then remove buttons from this list if they're disabled\n    var ButtonKeys = [];\n    forin(Buttons, function(key) {\n        ButtonKeys.push(key);\n    });\n\n    var calculateFileInfoOffset = function calculateFileInfoOffset(root) {\n        if (getRemoveIndicatorAligment(root) === 'right') return 0;\n        var buttonRect = root.ref.buttonRemoveItem.rect.element;\n        return buttonRect.hidden ? null : buttonRect.width + buttonRect.left;\n    };\n\n    var calculateButtonWidth = function calculateButtonWidth(root) {\n        var buttonRect = root.ref.buttonAbortItemLoad.rect.element;\n        return buttonRect.width;\n    };\n\n    // Force on full pixels so text stays crips\n    var calculateFileVerticalCenterOffset = function calculateFileVerticalCenterOffset(root) {\n        return Math.floor(root.ref.buttonRemoveItem.rect.element.height / 4);\n    };\n    var calculateFileHorizontalCenterOffset = function calculateFileHorizontalCenterOffset(root) {\n        return Math.floor(root.ref.buttonRemoveItem.rect.element.left / 2);\n    };\n\n    var getLoadIndicatorAlignment = function getLoadIndicatorAlignment(root) {\n        return root.query('GET_STYLE_LOAD_INDICATOR_POSITION');\n    };\n    var getProcessIndicatorAlignment = function getProcessIndicatorAlignment(root) {\n        return root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION');\n    };\n    var getRemoveIndicatorAligment = function getRemoveIndicatorAligment(root) {\n        return root.query('GET_STYLE_BUTTON_REMOVE_ITEM_POSITION');\n    };\n\n    var DefaultStyle = {\n        buttonAbortItemLoad: { opacity: 0 },\n        buttonRetryItemLoad: { opacity: 0 },\n        buttonRemoveItem: { opacity: 0 },\n        buttonProcessItem: { opacity: 0 },\n        buttonAbortItemProcessing: { opacity: 0 },\n        buttonRetryItemProcessing: { opacity: 0 },\n        buttonRevertItemProcessing: { opacity: 0 },\n        loadProgressIndicator: { opacity: 0, align: getLoadIndicatorAlignment },\n        processProgressIndicator: { opacity: 0, align: getProcessIndicatorAlignment },\n        processingCompleteIndicator: { opacity: 0, scaleX: 0.75, scaleY: 0.75 },\n        info: { translateX: 0, translateY: 0, opacity: 0 },\n        status: { translateX: 0, translateY: 0, opacity: 0 },\n    };\n\n    var IdleStyle = {\n        buttonRemoveItem: { opacity: 1 },\n        buttonProcessItem: { opacity: 1 },\n        info: { translateX: calculateFileInfoOffset },\n        status: { translateX: calculateFileInfoOffset },\n    };\n\n    var ProcessingStyle = {\n        buttonAbortItemProcessing: { opacity: 1 },\n        processProgressIndicator: { opacity: 1 },\n        status: { opacity: 1 },\n    };\n\n    var StyleMap = {\n        DID_THROW_ITEM_INVALID: {\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { translateX: calculateFileInfoOffset, opacity: 1 },\n        },\n\n        DID_START_ITEM_LOAD: {\n            buttonAbortItemLoad: { opacity: 1 },\n            loadProgressIndicator: { opacity: 1 },\n            status: { opacity: 1 },\n        },\n\n        DID_THROW_ITEM_LOAD_ERROR: {\n            buttonRetryItemLoad: { opacity: 1 },\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 1 },\n        },\n\n        DID_START_ITEM_REMOVE: {\n            processProgressIndicator: { opacity: 1, align: getRemoveIndicatorAligment },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 0 },\n        },\n\n        DID_THROW_ITEM_REMOVE_ERROR: {\n            processProgressIndicator: { opacity: 0, align: getRemoveIndicatorAligment },\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 1, translateX: calculateFileInfoOffset },\n        },\n\n        DID_LOAD_ITEM: IdleStyle,\n        DID_LOAD_LOCAL_ITEM: {\n            buttonRemoveItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { translateX: calculateFileInfoOffset },\n        },\n\n        DID_START_ITEM_PROCESSING: ProcessingStyle,\n        DID_REQUEST_ITEM_PROCESSING: ProcessingStyle,\n        DID_UPDATE_ITEM_PROCESS_PROGRESS: ProcessingStyle,\n        DID_COMPLETE_ITEM_PROCESSING: {\n            buttonRevertItemProcessing: { opacity: 1 },\n            info: { opacity: 1 },\n            status: { opacity: 1 },\n        },\n\n        DID_THROW_ITEM_PROCESSING_ERROR: {\n            buttonRemoveItem: { opacity: 1 },\n            buttonRetryItemProcessing: { opacity: 1 },\n            status: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n        },\n\n        DID_THROW_ITEM_PROCESSING_REVERT_ERROR: {\n            buttonRevertItemProcessing: { opacity: 1 },\n            status: { opacity: 1 },\n            info: { opacity: 1 },\n        },\n\n        DID_ABORT_ITEM_PROCESSING: {\n            buttonRemoveItem: { opacity: 1 },\n            buttonProcessItem: { opacity: 1 },\n            info: { translateX: calculateFileInfoOffset },\n            status: { opacity: 1 },\n        },\n\n        DID_REVERT_ITEM_PROCESSING: IdleStyle,\n    };\n\n    // complete indicator view\n    var processingCompleteIndicatorView = createView({\n        create: function create(_ref) {\n            var root = _ref.root;\n            root.element.innerHTML = root.query('GET_ICON_DONE');\n        },\n        name: 'processing-complete-indicator',\n        ignoreRect: true,\n        mixins: {\n            styles: ['scaleX', 'scaleY', 'opacity'],\n            animations: {\n                scaleX: 'spring',\n                scaleY: 'spring',\n                opacity: { type: 'tween', duration: 250 },\n            },\n        },\n    });\n\n    /**\n     * Creates the file view\n     */\n    var create$4 = function create(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        // copy Buttons object\n        var LocalButtons = Object.keys(Buttons).reduce(function(prev, curr) {\n            prev[curr] = Object.assign({}, Buttons[curr]);\n            return prev;\n        }, {});\n        var id = props.id;\n\n        // allow reverting upload\n        var allowRevert = root.query('GET_ALLOW_REVERT');\n\n        // allow remove file\n        var allowRemove = root.query('GET_ALLOW_REMOVE');\n\n        // allow processing upload\n        var allowProcess = root.query('GET_ALLOW_PROCESS');\n\n        // is instant uploading, need this to determine the icon of the undo button\n        var instantUpload = root.query('GET_INSTANT_UPLOAD');\n\n        // is async set up\n        var isAsync = root.query('IS_ASYNC');\n\n        // should align remove item buttons\n        var alignRemoveItemButton = root.query('GET_STYLE_BUTTON_REMOVE_ITEM_ALIGN');\n\n        // enabled buttons array\n        var buttonFilter;\n        if (isAsync) {\n            if (allowProcess && !allowRevert) {\n                // only remove revert button\n                buttonFilter = function buttonFilter(key) {\n                    return !/RevertItemProcessing/.test(key);\n                };\n            } else if (!allowProcess && allowRevert) {\n                // only remove process button\n                buttonFilter = function buttonFilter(key) {\n                    return !/ProcessItem|RetryItemProcessing|AbortItemProcessing/.test(key);\n                };\n            } else if (!allowProcess && !allowRevert) {\n                // remove all process buttons\n                buttonFilter = function buttonFilter(key) {\n                    return !/Process/.test(key);\n                };\n            }\n        } else {\n            // no process controls available\n            buttonFilter = function buttonFilter(key) {\n                return !/Process/.test(key);\n            };\n        }\n\n        var enabledButtons = buttonFilter ? ButtonKeys.filter(buttonFilter) : ButtonKeys.concat();\n\n        // update icon and label for revert button when instant uploading\n        if (instantUpload && allowRevert) {\n            LocalButtons['RevertItemProcessing'].label = 'GET_LABEL_BUTTON_REMOVE_ITEM';\n            LocalButtons['RevertItemProcessing'].icon = 'GET_ICON_REMOVE';\n        }\n\n        // remove last button (revert) if not allowed\n        if (isAsync && !allowRevert) {\n            var map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n            map.info.translateX = calculateFileHorizontalCenterOffset;\n            map.info.translateY = calculateFileVerticalCenterOffset;\n            map.status.translateY = calculateFileVerticalCenterOffset;\n            map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n        }\n\n        // should align center\n        if (isAsync && !allowProcess) {\n            [\n                'DID_START_ITEM_PROCESSING',\n                'DID_REQUEST_ITEM_PROCESSING',\n                'DID_UPDATE_ITEM_PROCESS_PROGRESS',\n                'DID_THROW_ITEM_PROCESSING_ERROR',\n            ].forEach(function(key) {\n                StyleMap[key].status.translateY = calculateFileVerticalCenterOffset;\n            });\n            StyleMap['DID_THROW_ITEM_PROCESSING_ERROR'].status.translateX = calculateButtonWidth;\n        }\n\n        // move remove button to right\n        if (alignRemoveItemButton && allowRevert) {\n            LocalButtons['RevertItemProcessing'].align = 'BUTTON_REMOVE_ITEM_POSITION';\n            var _map = StyleMap['DID_COMPLETE_ITEM_PROCESSING'];\n            _map.info.translateX = calculateFileInfoOffset;\n            _map.status.translateY = calculateFileVerticalCenterOffset;\n            _map.processingCompleteIndicator = { opacity: 1, scaleX: 1, scaleY: 1 };\n        }\n\n        // show/hide RemoveItem button\n        if (!allowRemove) {\n            LocalButtons['RemoveItem'].disabled = true;\n        }\n\n        // create the button views\n        forin(LocalButtons, function(key, definition) {\n            // create button\n            var buttonView = root.createChildView(fileActionButton, {\n                label: root.query(definition.label),\n                icon: root.query(definition.icon),\n                opacity: 0,\n            });\n\n            // should be appended?\n            if (enabledButtons.includes(key)) {\n                root.appendChildView(buttonView);\n            }\n\n            // toggle\n            if (definition.disabled) {\n                buttonView.element.setAttribute('disabled', 'disabled');\n                buttonView.element.setAttribute('hidden', 'hidden');\n            }\n\n            // add position attribute\n            buttonView.element.dataset.align = root.query('GET_STYLE_' + definition.align);\n\n            // add class\n            buttonView.element.classList.add(definition.className);\n\n            // handle interactions\n            buttonView.on('click', function(e) {\n                e.stopPropagation();\n                if (definition.disabled) return;\n                root.dispatch(definition.action, { query: id });\n            });\n\n            // set reference\n            root.ref['button' + key] = buttonView;\n        });\n\n        // checkmark\n        root.ref.processingCompleteIndicator = root.appendChildView(\n            root.createChildView(processingCompleteIndicatorView)\n        );\n\n        root.ref.processingCompleteIndicator.element.dataset.align = root.query(\n            'GET_STYLE_BUTTON_PROCESS_ITEM_POSITION'\n        );\n\n        // create file info view\n        root.ref.info = root.appendChildView(root.createChildView(fileInfo, { id: id }));\n\n        // create file status view\n        root.ref.status = root.appendChildView(root.createChildView(fileStatus, { id: id }));\n\n        // add progress indicators\n        var loadIndicatorView = root.appendChildView(\n            root.createChildView(progressIndicator, {\n                opacity: 0,\n                align: root.query('GET_STYLE_LOAD_INDICATOR_POSITION'),\n            })\n        );\n\n        loadIndicatorView.element.classList.add('filepond--load-indicator');\n        root.ref.loadProgressIndicator = loadIndicatorView;\n\n        var progressIndicatorView = root.appendChildView(\n            root.createChildView(progressIndicator, {\n                opacity: 0,\n                align: root.query('GET_STYLE_PROGRESS_INDICATOR_POSITION'),\n            })\n        );\n\n        progressIndicatorView.element.classList.add('filepond--process-indicator');\n        root.ref.processProgressIndicator = progressIndicatorView;\n\n        // current active styles\n        root.ref.activeStyles = [];\n    };\n\n    var write$2 = function write(_ref3) {\n        var root = _ref3.root,\n            actions = _ref3.actions,\n            props = _ref3.props;\n        // route actions\n        route({ root: root, actions: actions, props: props });\n\n        // select last state change action\n        var action = actions\n            .concat()\n            .filter(function(action) {\n                return /^DID_/.test(action.type);\n            })\n            .reverse()\n            .find(function(action) {\n                return StyleMap[action.type];\n            });\n\n        // a new action happened, let's get the matching styles\n        if (action) {\n            // define new active styles\n            root.ref.activeStyles = [];\n\n            var stylesToApply = StyleMap[action.type];\n            forin(DefaultStyle, function(name, defaultStyles) {\n                // get reference to control\n                var control = root.ref[name];\n\n                // loop over all styles for this control\n                forin(defaultStyles, function(key, defaultValue) {\n                    var value =\n                        stylesToApply[name] && typeof stylesToApply[name][key] !== 'undefined'\n                            ? stylesToApply[name][key]\n                            : defaultValue;\n                    root.ref.activeStyles.push({ control: control, key: key, value: value });\n                });\n            });\n        }\n\n        // apply active styles to element\n        root.ref.activeStyles.forEach(function(_ref4) {\n            var control = _ref4.control,\n                key = _ref4.key,\n                value = _ref4.value;\n            control[key] = typeof value === 'function' ? value(root) : value;\n        });\n    };\n\n    var route = createRoute({\n        DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING: function DID_SET_LABEL_BUTTON_ABORT_ITEM_PROCESSING(\n            _ref5\n        ) {\n            var root = _ref5.root,\n                action = _ref5.action;\n            root.ref.buttonAbortItemProcessing.label = action.value;\n        },\n        DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD: function DID_SET_LABEL_BUTTON_ABORT_ITEM_LOAD(_ref6) {\n            var root = _ref6.root,\n                action = _ref6.action;\n            root.ref.buttonAbortItemLoad.label = action.value;\n        },\n        DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL: function DID_SET_LABEL_BUTTON_ABORT_ITEM_REMOVAL(\n            _ref7\n        ) {\n            var root = _ref7.root,\n                action = _ref7.action;\n            root.ref.buttonAbortItemRemoval.label = action.value;\n        },\n        DID_REQUEST_ITEM_PROCESSING: function DID_REQUEST_ITEM_PROCESSING(_ref8) {\n            var root = _ref8.root;\n            root.ref.processProgressIndicator.spin = true;\n            root.ref.processProgressIndicator.progress = 0;\n        },\n        DID_START_ITEM_LOAD: function DID_START_ITEM_LOAD(_ref9) {\n            var root = _ref9.root;\n            root.ref.loadProgressIndicator.spin = true;\n            root.ref.loadProgressIndicator.progress = 0;\n        },\n        DID_START_ITEM_REMOVE: function DID_START_ITEM_REMOVE(_ref10) {\n            var root = _ref10.root;\n            root.ref.processProgressIndicator.spin = true;\n            root.ref.processProgressIndicator.progress = 0;\n        },\n        DID_UPDATE_ITEM_LOAD_PROGRESS: function DID_UPDATE_ITEM_LOAD_PROGRESS(_ref11) {\n            var root = _ref11.root,\n                action = _ref11.action;\n            root.ref.loadProgressIndicator.spin = false;\n            root.ref.loadProgressIndicator.progress = action.progress;\n        },\n        DID_UPDATE_ITEM_PROCESS_PROGRESS: function DID_UPDATE_ITEM_PROCESS_PROGRESS(_ref12) {\n            var root = _ref12.root,\n                action = _ref12.action;\n            root.ref.processProgressIndicator.spin = false;\n            root.ref.processProgressIndicator.progress = action.progress;\n        },\n    });\n\n    var file = createView({\n        create: create$4,\n        write: write$2,\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        name: 'file',\n    });\n\n    /**\n     * Creates the file view\n     */\n    var create$5 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // filename\n        root.ref.fileName = createElement$1('legend');\n        root.appendChild(root.ref.fileName);\n\n        // file appended\n        root.ref.file = root.appendChildView(root.createChildView(file, { id: props.id }));\n\n        // data has moved to data.js\n        root.ref.data = false;\n    };\n\n    /**\n     * Data storage\n     */\n    var didLoadItem = function didLoadItem(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n        // updates the legend of the fieldset so screenreaders can better group buttons\n        text(root.ref.fileName, formatFilename(root.query('GET_ITEM_NAME', props.id)));\n    };\n\n    var fileWrapper = createView({\n        create: create$5,\n        ignoreRect: true,\n        write: createRoute({\n            DID_LOAD_ITEM: didLoadItem,\n        }),\n\n        didCreateView: function didCreateView(root) {\n            applyFilters('CREATE_VIEW', Object.assign({}, root, { view: root }));\n        },\n        tag: 'fieldset',\n        name: 'file-wrapper',\n    });\n\n    var PANEL_SPRING_PROPS = { type: 'spring', damping: 0.6, mass: 7 };\n\n    var create$6 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        [\n            {\n                name: 'top',\n            },\n\n            {\n                name: 'center',\n                props: {\n                    translateY: null,\n                    scaleY: null,\n                },\n\n                mixins: {\n                    animations: {\n                        scaleY: PANEL_SPRING_PROPS,\n                    },\n\n                    styles: ['translateY', 'scaleY'],\n                },\n            },\n\n            {\n                name: 'bottom',\n                props: {\n                    translateY: null,\n                },\n\n                mixins: {\n                    animations: {\n                        translateY: PANEL_SPRING_PROPS,\n                    },\n\n                    styles: ['translateY'],\n                },\n            },\n        ].forEach(function(section) {\n            createSection(root, section, props.name);\n        });\n\n        root.element.classList.add('filepond--' + props.name);\n\n        root.ref.scalable = null;\n    };\n\n    var createSection = function createSection(root, section, className) {\n        var viewConstructor = createView({\n            name: 'panel-' + section.name + ' filepond--' + className,\n            mixins: section.mixins,\n            ignoreRectUpdate: true,\n        });\n\n        var view = root.createChildView(viewConstructor, section.props);\n\n        root.ref[section.name] = root.appendChildView(view);\n    };\n\n    var write$3 = function write(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props;\n\n        // update scalable state\n        if (root.ref.scalable === null || props.scalable !== root.ref.scalable) {\n            root.ref.scalable = isBoolean(props.scalable) ? props.scalable : true;\n            root.element.dataset.scalable = root.ref.scalable;\n        }\n\n        // no height, can't set\n        if (!props.height) return;\n\n        // get child rects\n        var topRect = root.ref.top.rect.element;\n        var bottomRect = root.ref.bottom.rect.element;\n\n        // make sure height never is smaller than bottom and top seciton heights combined (will probably never happen, but who knows)\n        var height = Math.max(topRect.height + bottomRect.height, props.height);\n\n        // offset center part\n        root.ref.center.translateY = topRect.height;\n\n        // scale center part\n        // use math ceil to prevent transparent lines because of rounding errors\n        root.ref.center.scaleY = (height - topRect.height - bottomRect.height) / 100;\n\n        // offset bottom part\n        root.ref.bottom.translateY = height - bottomRect.height;\n    };\n\n    var panel = createView({\n        name: 'panel',\n        read: function read(_ref3) {\n            var root = _ref3.root,\n                props = _ref3.props;\n            return (props.heightCurrent = root.ref.bottom.translateY);\n        },\n        write: write$3,\n        create: create$6,\n        ignoreRect: true,\n        mixins: {\n            apis: ['height', 'heightCurrent', 'scalable'],\n        },\n    });\n\n    var createDragHelper = function createDragHelper(items) {\n        var itemIds = items.map(function(item) {\n            return item.id;\n        });\n        var prevIndex = undefined;\n        return {\n            setIndex: function setIndex(index) {\n                prevIndex = index;\n            },\n            getIndex: function getIndex() {\n                return prevIndex;\n            },\n            getItemIndex: function getItemIndex(item) {\n                return itemIds.indexOf(item.id);\n            },\n        };\n    };\n\n    var ITEM_TRANSLATE_SPRING = {\n        type: 'spring',\n        stiffness: 0.75,\n        damping: 0.45,\n        mass: 10,\n    };\n\n    var ITEM_SCALE_SPRING = 'spring';\n\n    var StateMap = {\n        DID_START_ITEM_LOAD: 'busy',\n        DID_UPDATE_ITEM_LOAD_PROGRESS: 'loading',\n        DID_THROW_ITEM_INVALID: 'load-invalid',\n        DID_THROW_ITEM_LOAD_ERROR: 'load-error',\n        DID_LOAD_ITEM: 'idle',\n        DID_THROW_ITEM_REMOVE_ERROR: 'remove-error',\n        DID_START_ITEM_REMOVE: 'busy',\n        DID_START_ITEM_PROCESSING: 'busy processing',\n        DID_REQUEST_ITEM_PROCESSING: 'busy processing',\n        DID_UPDATE_ITEM_PROCESS_PROGRESS: 'processing',\n        DID_COMPLETE_ITEM_PROCESSING: 'processing-complete',\n        DID_THROW_ITEM_PROCESSING_ERROR: 'processing-error',\n        DID_THROW_ITEM_PROCESSING_REVERT_ERROR: 'processing-revert-error',\n        DID_ABORT_ITEM_PROCESSING: 'cancelled',\n        DID_REVERT_ITEM_PROCESSING: 'idle',\n    };\n\n    /**\n     * Creates the file view\n     */\n    var create$7 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // select\n        root.ref.handleClick = function(e) {\n            return root.dispatch('DID_ACTIVATE_ITEM', { id: props.id });\n        };\n\n        // set id\n        root.element.id = 'filepond--item-' + props.id;\n        root.element.addEventListener('click', root.ref.handleClick);\n\n        // file view\n        root.ref.container = root.appendChildView(\n            root.createChildView(fileWrapper, { id: props.id })\n        );\n\n        // file panel\n        root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'item-panel' }));\n\n        // default start height\n        root.ref.panel.height = null;\n\n        // by default not marked for removal\n        props.markedForRemoval = false;\n\n        // if not allowed to reorder file items, exit here\n        if (!root.query('GET_ALLOW_REORDER')) return;\n\n        // set to idle so shows grab cursor\n        root.element.dataset.dragState = 'idle';\n\n        var grab = function grab(e) {\n            if (!e.isPrimary) return;\n\n            var removedActivateListener = false;\n\n            var origin = {\n                x: e.pageX,\n                y: e.pageY,\n            };\n\n            props.dragOrigin = {\n                x: root.translateX,\n                y: root.translateY,\n            };\n\n            props.dragCenter = {\n                x: e.offsetX,\n                y: e.offsetY,\n            };\n\n            var dragState = createDragHelper(root.query('GET_ACTIVE_ITEMS'));\n\n            root.dispatch('DID_GRAB_ITEM', { id: props.id, dragState: dragState });\n\n            var drag = function drag(e) {\n                if (!e.isPrimary) return;\n\n                e.stopPropagation();\n                e.preventDefault();\n\n                props.dragOffset = {\n                    x: e.pageX - origin.x,\n                    y: e.pageY - origin.y,\n                };\n\n                // if dragged stop listening to clicks, will re-add when done dragging\n                var dist =\n                    props.dragOffset.x * props.dragOffset.x +\n                    props.dragOffset.y * props.dragOffset.y;\n                if (dist > 16 && !removedActivateListener) {\n                    removedActivateListener = true;\n                    root.element.removeEventListener('click', root.ref.handleClick);\n                }\n\n                root.dispatch('DID_DRAG_ITEM', { id: props.id, dragState: dragState });\n            };\n\n            var drop = function drop(e) {\n                if (!e.isPrimary) return;\n\n                props.dragOffset = {\n                    x: e.pageX - origin.x,\n                    y: e.pageY - origin.y,\n                };\n\n                reset();\n            };\n\n            var cancel = function cancel() {\n                reset();\n            };\n\n            var reset = function reset() {\n                document.removeEventListener('pointercancel', cancel);\n                document.removeEventListener('pointermove', drag);\n                document.removeEventListener('pointerup', drop);\n\n                root.dispatch('DID_DROP_ITEM', { id: props.id, dragState: dragState });\n\n                // start listening to clicks again\n                if (removedActivateListener) {\n                    setTimeout(function() {\n                        return root.element.addEventListener('click', root.ref.handleClick);\n                    }, 0);\n                }\n            };\n\n            document.addEventListener('pointercancel', cancel);\n            document.addEventListener('pointermove', drag);\n            document.addEventListener('pointerup', drop);\n        };\n\n        root.element.addEventListener('pointerdown', grab);\n    };\n\n    var route$1 = createRoute({\n        DID_UPDATE_PANEL_HEIGHT: function DID_UPDATE_PANEL_HEIGHT(_ref2) {\n            var root = _ref2.root,\n                action = _ref2.action;\n            root.height = action.height;\n        },\n    });\n\n    var write$4 = createRoute(\n        {\n            DID_GRAB_ITEM: function DID_GRAB_ITEM(_ref3) {\n                var root = _ref3.root,\n                    props = _ref3.props;\n                props.dragOrigin = {\n                    x: root.translateX,\n                    y: root.translateY,\n                };\n            },\n            DID_DRAG_ITEM: function DID_DRAG_ITEM(_ref4) {\n                var root = _ref4.root;\n                root.element.dataset.dragState = 'drag';\n            },\n            DID_DROP_ITEM: function DID_DROP_ITEM(_ref5) {\n                var root = _ref5.root,\n                    props = _ref5.props;\n                props.dragOffset = null;\n                props.dragOrigin = null;\n                root.element.dataset.dragState = 'drop';\n            },\n        },\n\n        function(_ref6) {\n            var root = _ref6.root,\n                actions = _ref6.actions,\n                props = _ref6.props,\n                shouldOptimize = _ref6.shouldOptimize;\n            if (root.element.dataset.dragState === 'drop') {\n                if (root.scaleX <= 1) {\n                    root.element.dataset.dragState = 'idle';\n                }\n            }\n\n            // select last state change action\n            var action = actions\n                .concat()\n                .filter(function(action) {\n                    return /^DID_/.test(action.type);\n                })\n                .reverse()\n                .find(function(action) {\n                    return StateMap[action.type];\n                });\n\n            // no need to set same state twice\n            if (action && action.type !== props.currentState) {\n                // set current state\n                props.currentState = action.type;\n\n                // set state\n                root.element.dataset.filepondItemState = StateMap[props.currentState] || '';\n            }\n\n            // route actions\n            var aspectRatio =\n                root.query('GET_ITEM_PANEL_ASPECT_RATIO') || root.query('GET_PANEL_ASPECT_RATIO');\n            if (!aspectRatio) {\n                route$1({ root: root, actions: actions, props: props });\n                if (!root.height && root.ref.container.rect.element.height > 0) {\n                    root.height = root.ref.container.rect.element.height;\n                }\n            } else if (!shouldOptimize) {\n                root.height = root.rect.element.width * aspectRatio;\n            }\n\n            // sync panel height with item height\n            if (shouldOptimize) {\n                root.ref.panel.height = null;\n            }\n\n            root.ref.panel.height = root.height;\n        }\n    );\n\n    var item = createView({\n        create: create$7,\n        write: write$4,\n        destroy: function destroy(_ref7) {\n            var root = _ref7.root,\n                props = _ref7.props;\n            root.element.removeEventListener('click', root.ref.handleClick);\n            root.dispatch('RELEASE_ITEM', { query: props.id });\n        },\n        tag: 'li',\n        name: 'item',\n        mixins: {\n            apis: [\n                'id',\n                'interactionMethod',\n                'markedForRemoval',\n                'spawnDate',\n                'dragCenter',\n                'dragOrigin',\n                'dragOffset',\n            ],\n\n            styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity', 'height'],\n            animations: {\n                scaleX: ITEM_SCALE_SPRING,\n                scaleY: ITEM_SCALE_SPRING,\n                translateX: ITEM_TRANSLATE_SPRING,\n                translateY: ITEM_TRANSLATE_SPRING,\n                opacity: { type: 'tween', duration: 150 },\n            },\n        },\n    });\n\n    var getItemsPerRow = function(horizontalSpace, itemWidth) {\n        // add one pixel leeway, when using percentages for item width total items can be 1.99 per row\n\n        return Math.max(1, Math.floor((horizontalSpace + 1) / itemWidth));\n    };\n\n    var getItemIndexByPosition = function getItemIndexByPosition(view, children, positionInView) {\n        if (!positionInView) return;\n\n        var horizontalSpace = view.rect.element.width;\n        // const children = view.childViews;\n        var l = children.length;\n        var last = null;\n\n        // -1, don't move items to accomodate (either add to top or bottom)\n        if (l === 0 || positionInView.top < children[0].rect.element.top) return -1;\n\n        // let's get the item width\n        var item = children[0];\n        var itemRect = item.rect.element;\n        var itemHorizontalMargin = itemRect.marginLeft + itemRect.marginRight;\n        var itemWidth = itemRect.width + itemHorizontalMargin;\n        var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n        // stack\n        if (itemsPerRow === 1) {\n            for (var index = 0; index < l; index++) {\n                var child = children[index];\n                var childMid = child.rect.outer.top + child.rect.element.height * 0.5;\n                if (positionInView.top < childMid) {\n                    return index;\n                }\n            }\n            return l;\n        }\n\n        // grid\n        var itemVerticalMargin = itemRect.marginTop + itemRect.marginBottom;\n        var itemHeight = itemRect.height + itemVerticalMargin;\n        for (var _index = 0; _index < l; _index++) {\n            var indexX = _index % itemsPerRow;\n            var indexY = Math.floor(_index / itemsPerRow);\n\n            var offsetX = indexX * itemWidth;\n            var offsetY = indexY * itemHeight;\n\n            var itemTop = offsetY - itemRect.marginTop;\n            var itemRight = offsetX + itemWidth;\n            var itemBottom = offsetY + itemHeight + itemRect.marginBottom;\n\n            if (positionInView.top < itemBottom && positionInView.top > itemTop) {\n                if (positionInView.left < itemRight) {\n                    return _index;\n                } else if (_index !== l - 1) {\n                    last = _index;\n                } else {\n                    last = null;\n                }\n            }\n        }\n\n        if (last !== null) {\n            return last;\n        }\n\n        return l;\n    };\n\n    var dropAreaDimensions = {\n        height: 0,\n        width: 0,\n        get getHeight() {\n            return this.height;\n        },\n        set setHeight(val) {\n            if (this.height === 0 || val === 0) this.height = val;\n        },\n        get getWidth() {\n            return this.width;\n        },\n        set setWidth(val) {\n            if (this.width === 0 || val === 0) this.width = val;\n        },\n        setDimensions: function setDimensions(height, width) {\n            if (this.height === 0 || height === 0) this.height = height;\n            if (this.width === 0 || width === 0) this.width = width;\n        },\n    };\n\n    var create$8 = function create(_ref) {\n        var root = _ref.root;\n        // need to set role to list as otherwise it won't be read as a list by VoiceOver\n        attr(root.element, 'role', 'list');\n\n        root.ref.lastItemSpanwDate = Date.now();\n    };\n\n    /**\n     * Inserts a new item\n     * @param root\n     * @param action\n     */\n    var addItemView = function addItemView(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        var id = action.id,\n            index = action.index,\n            interactionMethod = action.interactionMethod;\n\n        root.ref.addIndex = index;\n\n        var now = Date.now();\n        var spawnDate = now;\n        var opacity = 1;\n\n        if (interactionMethod !== InteractionMethod.NONE) {\n            opacity = 0;\n            var cooldown = root.query('GET_ITEM_INSERT_INTERVAL');\n            var dist = now - root.ref.lastItemSpanwDate;\n            spawnDate = dist < cooldown ? now + (cooldown - dist) : now;\n        }\n\n        root.ref.lastItemSpanwDate = spawnDate;\n\n        root.appendChildView(\n            root.createChildView(\n                // view type\n                item,\n\n                // props\n                {\n                    spawnDate: spawnDate,\n                    id: id,\n                    opacity: opacity,\n                    interactionMethod: interactionMethod,\n                }\n            ),\n\n            index\n        );\n    };\n\n    var moveItem = function moveItem(item, x, y) {\n        var vx = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n        var vy = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;\n        // set to null to remove animation while dragging\n        if (item.dragOffset) {\n            item.translateX = null;\n            item.translateY = null;\n            item.translateX = item.dragOrigin.x + item.dragOffset.x;\n            item.translateY = item.dragOrigin.y + item.dragOffset.y;\n            item.scaleX = 1.025;\n            item.scaleY = 1.025;\n        } else {\n            item.translateX = x;\n            item.translateY = y;\n\n            if (Date.now() > item.spawnDate) {\n                // reveal element\n                if (item.opacity === 0) {\n                    introItemView(item, x, y, vx, vy);\n                }\n\n                // make sure is default scale every frame\n                item.scaleX = 1;\n                item.scaleY = 1;\n                item.opacity = 1;\n            }\n        }\n    };\n\n    var introItemView = function introItemView(item, x, y, vx, vy) {\n        if (item.interactionMethod === InteractionMethod.NONE) {\n            item.translateX = null;\n            item.translateX = x;\n            item.translateY = null;\n            item.translateY = y;\n        } else if (item.interactionMethod === InteractionMethod.DROP) {\n            item.translateX = null;\n            item.translateX = x - vx * 20;\n\n            item.translateY = null;\n            item.translateY = y - vy * 10;\n\n            item.scaleX = 0.8;\n            item.scaleY = 0.8;\n        } else if (item.interactionMethod === InteractionMethod.BROWSE) {\n            item.translateY = null;\n            item.translateY = y - 30;\n        } else if (item.interactionMethod === InteractionMethod.API) {\n            item.translateX = null;\n            item.translateX = x - 30;\n            item.translateY = null;\n        }\n    };\n\n    /**\n     * Removes an existing item\n     * @param root\n     * @param action\n     */\n    var removeItemView = function removeItemView(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        var id = action.id;\n\n        // get the view matching the given id\n        var view = root.childViews.find(function(child) {\n            return child.id === id;\n        });\n\n        // if no view found, exit\n        if (!view) {\n            return;\n        }\n\n        // animate view out of view\n        view.scaleX = 0.9;\n        view.scaleY = 0.9;\n        view.opacity = 0;\n\n        // mark for removal\n        view.markedForRemoval = true;\n    };\n\n    var getItemHeight = function getItemHeight(child) {\n        return (\n            child.rect.element.height +\n            child.rect.element.marginBottom * 0.5 +\n            child.rect.element.marginTop * 0.5\n        );\n    };\n    var getItemWidth = function getItemWidth(child) {\n        return (\n            child.rect.element.width +\n            child.rect.element.marginLeft * 0.5 +\n            child.rect.element.marginRight * 0.5\n        );\n    };\n\n    var dragItem = function dragItem(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        var id = action.id,\n            dragState = action.dragState;\n\n        // reference to item\n        var item = root.query('GET_ITEM', { id: id });\n\n        // get the view matching the given id\n        var view = root.childViews.find(function(child) {\n            return child.id === id;\n        });\n\n        var numItems = root.childViews.length;\n        var oldIndex = dragState.getItemIndex(item);\n\n        // if no view found, exit\n        if (!view) return;\n\n        var dragPosition = {\n            x: view.dragOrigin.x + view.dragOffset.x + view.dragCenter.x,\n            y: view.dragOrigin.y + view.dragOffset.y + view.dragCenter.y,\n        };\n\n        // get drag area dimensions\n        var dragHeight = getItemHeight(view);\n        var dragWidth = getItemWidth(view);\n\n        // get rows and columns (There will always be at least one row and one column if a file is present)\n        var cols = Math.floor(root.rect.outer.width / dragWidth);\n        if (cols > numItems) cols = numItems;\n\n        // rows are used to find when we have left the preview area bounding box\n        var rows = Math.floor(numItems / cols + 1);\n\n        dropAreaDimensions.setHeight = dragHeight * rows;\n        dropAreaDimensions.setWidth = dragWidth * cols;\n\n        // get new index of dragged item\n        var location = {\n            y: Math.floor(dragPosition.y / dragHeight),\n            x: Math.floor(dragPosition.x / dragWidth),\n            getGridIndex: function getGridIndex() {\n                if (\n                    dragPosition.y > dropAreaDimensions.getHeight ||\n                    dragPosition.y < 0 ||\n                    dragPosition.x > dropAreaDimensions.getWidth ||\n                    dragPosition.x < 0\n                )\n                    return oldIndex;\n                return this.y * cols + this.x;\n            },\n            getColIndex: function getColIndex() {\n                var items = root.query('GET_ACTIVE_ITEMS');\n                var visibleChildren = root.childViews.filter(function(child) {\n                    return child.rect.element.height;\n                });\n                var children = items.map(function(item) {\n                    return visibleChildren.find(function(childView) {\n                        return childView.id === item.id;\n                    });\n                });\n\n                var currentIndex = children.findIndex(function(child) {\n                    return child === view;\n                });\n                var dragHeight = getItemHeight(view);\n                var l = children.length;\n                var idx = l;\n                var childHeight = 0;\n                var childBottom = 0;\n                var childTop = 0;\n                for (var i = 0; i < l; i++) {\n                    childHeight = getItemHeight(children[i]);\n                    childTop = childBottom;\n                    childBottom = childTop + childHeight;\n                    if (dragPosition.y < childBottom) {\n                        if (currentIndex > i) {\n                            if (dragPosition.y < childTop + dragHeight) {\n                                idx = i;\n                                break;\n                            }\n                            continue;\n                        }\n                        idx = i;\n                        break;\n                    }\n                }\n                return idx;\n            },\n        };\n\n        // get new index\n        var index = cols > 1 ? location.getGridIndex() : location.getColIndex();\n        root.dispatch('MOVE_ITEM', { query: view, index: index });\n\n        // if the index of the item changed, dispatch reorder action\n        var currentIndex = dragState.getIndex();\n\n        if (currentIndex === undefined || currentIndex !== index) {\n            dragState.setIndex(index);\n\n            if (currentIndex === undefined) return;\n\n            root.dispatch('DID_REORDER_ITEMS', {\n                items: root.query('GET_ACTIVE_ITEMS'),\n                origin: oldIndex,\n                target: index,\n            });\n        }\n    };\n\n    /**\n     * Setup action routes\n     */\n    var route$2 = createRoute({\n        DID_ADD_ITEM: addItemView,\n        DID_REMOVE_ITEM: removeItemView,\n        DID_DRAG_ITEM: dragItem,\n    });\n\n    /**\n     * Write to view\n     * @param root\n     * @param actions\n     * @param props\n     */\n    var write$5 = function write(_ref5) {\n        var root = _ref5.root,\n            props = _ref5.props,\n            actions = _ref5.actions,\n            shouldOptimize = _ref5.shouldOptimize;\n        // route actions\n        route$2({ root: root, props: props, actions: actions });\n        var dragCoordinates = props.dragCoordinates;\n\n        // available space on horizontal axis\n        var horizontalSpace = root.rect.element.width;\n\n        // only draw children that have dimensions\n        var visibleChildren = root.childViews.filter(function(child) {\n            return child.rect.element.height;\n        });\n\n        // sort based on current active items\n        var children = root\n            .query('GET_ACTIVE_ITEMS')\n            .map(function(item) {\n                return visibleChildren.find(function(child) {\n                    return child.id === item.id;\n                });\n            })\n            .filter(function(item) {\n                return item;\n            });\n\n        // get index\n        var dragIndex = dragCoordinates\n            ? getItemIndexByPosition(root, children, dragCoordinates)\n            : null;\n\n        // add index is used to reserve the dropped/added item index till the actual item is rendered\n        var addIndex = root.ref.addIndex || null;\n\n        // add index no longer needed till possibly next draw\n        root.ref.addIndex = null;\n\n        var dragIndexOffset = 0;\n        var removeIndexOffset = 0;\n        var addIndexOffset = 0;\n\n        if (children.length === 0) return;\n\n        var childRect = children[0].rect.element;\n        var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n        var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n        var itemWidth = childRect.width + itemHorizontalMargin;\n        var itemHeight = childRect.height + itemVerticalMargin;\n        var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n        // stack\n        if (itemsPerRow === 1) {\n            var offsetY = 0;\n            var dragOffset = 0;\n\n            children.forEach(function(child, index) {\n                if (dragIndex) {\n                    var dist = index - dragIndex;\n                    if (dist === -2) {\n                        dragOffset = -itemVerticalMargin * 0.25;\n                    } else if (dist === -1) {\n                        dragOffset = -itemVerticalMargin * 0.75;\n                    } else if (dist === 0) {\n                        dragOffset = itemVerticalMargin * 0.75;\n                    } else if (dist === 1) {\n                        dragOffset = itemVerticalMargin * 0.25;\n                    } else {\n                        dragOffset = 0;\n                    }\n                }\n\n                if (shouldOptimize) {\n                    child.translateX = null;\n                    child.translateY = null;\n                }\n\n                if (!child.markedForRemoval) {\n                    moveItem(child, 0, offsetY + dragOffset);\n                }\n\n                var itemHeight = child.rect.element.height + itemVerticalMargin;\n\n                var visualHeight = itemHeight * (child.markedForRemoval ? child.opacity : 1);\n\n                offsetY += visualHeight;\n            });\n        }\n        // grid\n        else {\n            var prevX = 0;\n            var prevY = 0;\n\n            children.forEach(function(child, index) {\n                if (index === dragIndex) {\n                    dragIndexOffset = 1;\n                }\n\n                if (index === addIndex) {\n                    addIndexOffset += 1;\n                }\n\n                if (child.markedForRemoval && child.opacity < 0.5) {\n                    removeIndexOffset -= 1;\n                }\n\n                var visualIndex = index + addIndexOffset + dragIndexOffset + removeIndexOffset;\n\n                var indexX = visualIndex % itemsPerRow;\n                var indexY = Math.floor(visualIndex / itemsPerRow);\n\n                var offsetX = indexX * itemWidth;\n                var offsetY = indexY * itemHeight;\n\n                var vectorX = Math.sign(offsetX - prevX);\n                var vectorY = Math.sign(offsetY - prevY);\n\n                prevX = offsetX;\n                prevY = offsetY;\n\n                if (child.markedForRemoval) return;\n\n                if (shouldOptimize) {\n                    child.translateX = null;\n                    child.translateY = null;\n                }\n\n                moveItem(child, offsetX, offsetY, vectorX, vectorY);\n            });\n        }\n    };\n\n    /**\n     * Filters actions that are meant specifically for a certain child of the list\n     * @param child\n     * @param actions\n     */\n    var filterSetItemActions = function filterSetItemActions(child, actions) {\n        return actions.filter(function(action) {\n            // if action has an id, filter out actions that don't have this child id\n            if (action.data && action.data.id) {\n                return child.id === action.data.id;\n            }\n\n            // allow all other actions\n            return true;\n        });\n    };\n\n    var list = createView({\n        create: create$8,\n        write: write$5,\n        tag: 'ul',\n        name: 'list',\n        didWriteView: function didWriteView(_ref6) {\n            var root = _ref6.root;\n            root.childViews\n                .filter(function(view) {\n                    return view.markedForRemoval && view.opacity === 0 && view.resting;\n                })\n                .forEach(function(view) {\n                    view._destroy();\n                    root.removeChildView(view);\n                });\n        },\n        filterFrameActionsForChild: filterSetItemActions,\n        mixins: {\n            apis: ['dragCoordinates'],\n        },\n    });\n\n    var create$9 = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        root.ref.list = root.appendChildView(root.createChildView(list));\n        props.dragCoordinates = null;\n        props.overflowing = false;\n    };\n\n    var storeDragCoordinates = function storeDragCoordinates(_ref2) {\n        var root = _ref2.root,\n            props = _ref2.props,\n            action = _ref2.action;\n        if (!root.query('GET_ITEM_INSERT_LOCATION_FREEDOM')) return;\n        props.dragCoordinates = {\n            left: action.position.scopeLeft - root.ref.list.rect.element.left,\n            top:\n                action.position.scopeTop -\n                (root.rect.outer.top + root.rect.element.marginTop + root.rect.element.scrollTop),\n        };\n    };\n\n    var clearDragCoordinates = function clearDragCoordinates(_ref3) {\n        var props = _ref3.props;\n        props.dragCoordinates = null;\n    };\n\n    var route$3 = createRoute({\n        DID_DRAG: storeDragCoordinates,\n        DID_END_DRAG: clearDragCoordinates,\n    });\n\n    var write$6 = function write(_ref4) {\n        var root = _ref4.root,\n            props = _ref4.props,\n            actions = _ref4.actions;\n\n        // route actions\n        route$3({ root: root, props: props, actions: actions });\n\n        // current drag position\n        root.ref.list.dragCoordinates = props.dragCoordinates;\n\n        // if currently overflowing but no longer received overflow\n        if (props.overflowing && !props.overflow) {\n            props.overflowing = false;\n\n            // reset overflow state\n            root.element.dataset.state = '';\n            root.height = null;\n        }\n\n        // if is not overflowing currently but does receive overflow value\n        if (props.overflow) {\n            var newHeight = Math.round(props.overflow);\n            if (newHeight !== root.height) {\n                props.overflowing = true;\n                root.element.dataset.state = 'overflow';\n                root.height = newHeight;\n            }\n        }\n    };\n\n    var listScroller = createView({\n        create: create$9,\n        write: write$6,\n        name: 'list-scroller',\n        mixins: {\n            apis: ['overflow', 'dragCoordinates'],\n            styles: ['height', 'translateY'],\n            animations: {\n                translateY: 'spring',\n            },\n        },\n    });\n\n    var attrToggle = function attrToggle(element, name, state) {\n        var enabledValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n        if (state) {\n            attr(element, name, enabledValue);\n        } else {\n            element.removeAttribute(name);\n        }\n    };\n\n    var resetFileInput = function resetFileInput(input) {\n        // no value, no need to reset\n        if (!input || input.value === '') {\n            return;\n        }\n\n        try {\n            // for modern browsers\n            input.value = '';\n        } catch (err) {}\n\n        // for IE10\n        if (input.value) {\n            // quickly append input to temp form and reset form\n            var form = createElement$1('form');\n            var parentNode = input.parentNode;\n            var ref = input.nextSibling;\n            form.appendChild(input);\n            form.reset();\n\n            // re-inject input where it originally was\n            if (ref) {\n                parentNode.insertBefore(input, ref);\n            } else {\n                parentNode.appendChild(input);\n            }\n        }\n    };\n\n    var create$a = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // set id so can be referenced from outside labels\n        root.element.id = 'filepond--browser-' + props.id;\n\n        // set name of element (is removed when a value is set)\n        attr(root.element, 'name', root.query('GET_NAME'));\n\n        // we have to link this element to the status element\n        attr(root.element, 'aria-controls', 'filepond--assistant-' + props.id);\n\n        // set label, we use labelled by as otherwise the screenreader does not read the \"browse\" text in the label (as it has tabindex: 0)\n        attr(root.element, 'aria-labelledby', 'filepond--drop-label-' + props.id);\n\n        // set configurable props\n        setAcceptedFileTypes({\n            root: root,\n            action: { value: root.query('GET_ACCEPTED_FILE_TYPES') },\n        });\n        toggleAllowMultiple({ root: root, action: { value: root.query('GET_ALLOW_MULTIPLE') } });\n        toggleDirectoryFilter({\n            root: root,\n            action: { value: root.query('GET_ALLOW_DIRECTORIES_ONLY') },\n        });\n        toggleDisabled({ root: root });\n        toggleRequired({ root: root, action: { value: root.query('GET_REQUIRED') } });\n        setCaptureMethod({ root: root, action: { value: root.query('GET_CAPTURE_METHOD') } });\n\n        // handle changes to the input field\n        root.ref.handleChange = function(e) {\n            if (!root.element.value) {\n                return;\n            }\n\n            // extract files and move value of webkitRelativePath path to _relativePath\n            var files = Array.from(root.element.files).map(function(file) {\n                file._relativePath = file.webkitRelativePath;\n                return file;\n            });\n\n            // we add a little delay so the OS file select window can move out of the way before we add our file\n            setTimeout(function() {\n                // load files\n                props.onload(files);\n\n                // reset input, it's just for exposing a method to drop files, should not retain any state\n                resetFileInput(root.element);\n            }, 250);\n        };\n\n        root.element.addEventListener('change', root.ref.handleChange);\n    };\n\n    var setAcceptedFileTypes = function setAcceptedFileTypes(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        if (!root.query('GET_ALLOW_SYNC_ACCEPT_ATTRIBUTE')) return;\n        attrToggle(\n            root.element,\n            'accept',\n            !!action.value,\n            action.value ? action.value.join(',') : ''\n        );\n    };\n\n    var toggleAllowMultiple = function toggleAllowMultiple(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        attrToggle(root.element, 'multiple', action.value);\n    };\n\n    var toggleDirectoryFilter = function toggleDirectoryFilter(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        attrToggle(root.element, 'webkitdirectory', action.value);\n    };\n\n    var toggleDisabled = function toggleDisabled(_ref5) {\n        var root = _ref5.root;\n        var isDisabled = root.query('GET_DISABLED');\n        var doesAllowBrowse = root.query('GET_ALLOW_BROWSE');\n        var disableField = isDisabled || !doesAllowBrowse;\n        attrToggle(root.element, 'disabled', disableField);\n    };\n\n    var toggleRequired = function toggleRequired(_ref6) {\n        var root = _ref6.root,\n            action = _ref6.action;\n        // want to remove required, always possible\n        if (!action.value) {\n            attrToggle(root.element, 'required', false);\n        }\n        // if want to make required, only possible when zero items\n        else if (root.query('GET_TOTAL_ITEMS') === 0) {\n            attrToggle(root.element, 'required', true);\n        }\n    };\n\n    var setCaptureMethod = function setCaptureMethod(_ref7) {\n        var root = _ref7.root,\n            action = _ref7.action;\n        attrToggle(\n            root.element,\n            'capture',\n            !!action.value,\n            action.value === true ? '' : action.value\n        );\n    };\n\n    var updateRequiredStatus = function updateRequiredStatus(_ref8) {\n        var root = _ref8.root;\n        var element = root.element;\n        // always remove the required attribute when more than zero items\n        if (root.query('GET_TOTAL_ITEMS') > 0) {\n            attrToggle(element, 'required', false);\n            attrToggle(element, 'name', false);\n        } else {\n            // add name attribute\n            attrToggle(element, 'name', true, root.query('GET_NAME'));\n\n            // remove any validation messages\n            var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n            if (shouldCheckValidity) {\n                element.setCustomValidity('');\n            }\n\n            // we only add required if the field has been deemed required\n            if (root.query('GET_REQUIRED')) {\n                attrToggle(element, 'required', true);\n            }\n        }\n    };\n\n    var updateFieldValidityStatus = function updateFieldValidityStatus(_ref9) {\n        var root = _ref9.root;\n        var shouldCheckValidity = root.query('GET_CHECK_VALIDITY');\n        if (!shouldCheckValidity) return;\n        root.element.setCustomValidity(root.query('GET_LABEL_INVALID_FIELD'));\n    };\n\n    var browser = createView({\n        tag: 'input',\n        name: 'browser',\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        attributes: {\n            type: 'file',\n        },\n\n        create: create$a,\n        destroy: function destroy(_ref10) {\n            var root = _ref10.root;\n            root.element.removeEventListener('change', root.ref.handleChange);\n        },\n        write: createRoute({\n            DID_LOAD_ITEM: updateRequiredStatus,\n            DID_REMOVE_ITEM: updateRequiredStatus,\n            DID_THROW_ITEM_INVALID: updateFieldValidityStatus,\n\n            DID_SET_DISABLED: toggleDisabled,\n            DID_SET_ALLOW_BROWSE: toggleDisabled,\n            DID_SET_ALLOW_DIRECTORIES_ONLY: toggleDirectoryFilter,\n            DID_SET_ALLOW_MULTIPLE: toggleAllowMultiple,\n            DID_SET_ACCEPTED_FILE_TYPES: setAcceptedFileTypes,\n            DID_SET_CAPTURE_METHOD: setCaptureMethod,\n            DID_SET_REQUIRED: toggleRequired,\n        }),\n    });\n\n    var Key = {\n        ENTER: 13,\n        SPACE: 32,\n    };\n\n    var create$b = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n\n        // create the label and link it to the file browser\n        var label = createElement$1('label');\n        attr(label, 'for', 'filepond--browser-' + props.id);\n\n        // use for labeling file input (aria-labelledby on file input)\n        attr(label, 'id', 'filepond--drop-label-' + props.id);\n\n        // hide the label for screenreaders, the input element will read the contents of the label when it's focussed. If we don't set aria-hidden the screenreader will also navigate the contents of the label separately from the input.\n        attr(label, 'aria-hidden', 'true');\n\n        // handle keys\n        root.ref.handleKeyDown = function(e) {\n            var isActivationKey = e.keyCode === Key.ENTER || e.keyCode === Key.SPACE;\n            if (!isActivationKey) return;\n            // stops from triggering the element a second time\n            e.preventDefault();\n\n            // click link (will then in turn activate file input)\n            root.ref.label.click();\n        };\n\n        root.ref.handleClick = function(e) {\n            var isLabelClick = e.target === label || label.contains(e.target);\n\n            // don't want to click twice\n            if (isLabelClick) return;\n\n            // click link (will then in turn activate file input)\n            root.ref.label.click();\n        };\n\n        // attach events\n        label.addEventListener('keydown', root.ref.handleKeyDown);\n        root.element.addEventListener('click', root.ref.handleClick);\n\n        // update\n        updateLabelValue(label, props.caption);\n\n        // add!\n        root.appendChild(label);\n        root.ref.label = label;\n    };\n\n    var updateLabelValue = function updateLabelValue(label, value) {\n        label.innerHTML = value;\n        var clickable = label.querySelector('.filepond--label-action');\n        if (clickable) {\n            attr(clickable, 'tabindex', '0');\n        }\n        return value;\n    };\n\n    var dropLabel = createView({\n        name: 'drop-label',\n        ignoreRect: true,\n        create: create$b,\n        destroy: function destroy(_ref2) {\n            var root = _ref2.root;\n            root.ref.label.addEventListener('keydown', root.ref.handleKeyDown);\n            root.element.removeEventListener('click', root.ref.handleClick);\n        },\n        write: createRoute({\n            DID_SET_LABEL_IDLE: function DID_SET_LABEL_IDLE(_ref3) {\n                var root = _ref3.root,\n                    action = _ref3.action;\n                updateLabelValue(root.ref.label, action.value);\n            },\n        }),\n\n        mixins: {\n            styles: ['opacity', 'translateX', 'translateY'],\n            animations: {\n                opacity: { type: 'tween', duration: 150 },\n                translateX: 'spring',\n                translateY: 'spring',\n            },\n        },\n    });\n\n    var blob = createView({\n        name: 'drip-blob',\n        ignoreRect: true,\n        mixins: {\n            styles: ['translateX', 'translateY', 'scaleX', 'scaleY', 'opacity'],\n            animations: {\n                scaleX: 'spring',\n                scaleY: 'spring',\n                translateX: 'spring',\n                translateY: 'spring',\n                opacity: { type: 'tween', duration: 250 },\n            },\n        },\n    });\n\n    var addBlob = function addBlob(_ref) {\n        var root = _ref.root;\n        var centerX = root.rect.element.width * 0.5;\n        var centerY = root.rect.element.height * 0.5;\n\n        root.ref.blob = root.appendChildView(\n            root.createChildView(blob, {\n                opacity: 0,\n                scaleX: 2.5,\n                scaleY: 2.5,\n                translateX: centerX,\n                translateY: centerY,\n            })\n        );\n    };\n\n    var moveBlob = function moveBlob(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        if (!root.ref.blob) {\n            addBlob({ root: root });\n            return;\n        }\n\n        root.ref.blob.translateX = action.position.scopeLeft;\n        root.ref.blob.translateY = action.position.scopeTop;\n        root.ref.blob.scaleX = 1;\n        root.ref.blob.scaleY = 1;\n        root.ref.blob.opacity = 1;\n    };\n\n    var hideBlob = function hideBlob(_ref3) {\n        var root = _ref3.root;\n        if (!root.ref.blob) {\n            return;\n        }\n        root.ref.blob.opacity = 0;\n    };\n\n    var explodeBlob = function explodeBlob(_ref4) {\n        var root = _ref4.root;\n        if (!root.ref.blob) {\n            return;\n        }\n        root.ref.blob.scaleX = 2.5;\n        root.ref.blob.scaleY = 2.5;\n        root.ref.blob.opacity = 0;\n    };\n\n    var write$7 = function write(_ref5) {\n        var root = _ref5.root,\n            props = _ref5.props,\n            actions = _ref5.actions;\n        route$4({ root: root, props: props, actions: actions });\n        var blob = root.ref.blob;\n\n        if (actions.length === 0 && blob && blob.opacity === 0) {\n            root.removeChildView(blob);\n            root.ref.blob = null;\n        }\n    };\n\n    var route$4 = createRoute({\n        DID_DRAG: moveBlob,\n        DID_DROP: explodeBlob,\n        DID_END_DRAG: hideBlob,\n    });\n\n    var drip = createView({\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        name: 'drip',\n        write: write$7,\n    });\n\n    var setInputFiles = function setInputFiles(element, files) {\n        try {\n            // Create a DataTransfer instance and add a newly created file\n            var dataTransfer = new DataTransfer();\n            files.forEach(function(file) {\n                if (file instanceof File) {\n                    dataTransfer.items.add(file);\n                } else {\n                    dataTransfer.items.add(\n                        new File([file], file.name, {\n                            type: file.type,\n                        })\n                    );\n                }\n            });\n\n            // Assign the DataTransfer files list to the file input\n            element.files = dataTransfer.files;\n        } catch (err) {\n            return false;\n        }\n        return true;\n    };\n\n    var create$c = function create(_ref) {\n        var root = _ref.root;\n        return (root.ref.fields = {});\n    };\n\n    var getField = function getField(root, id) {\n        return root.ref.fields[id];\n    };\n\n    var syncFieldPositionsWithItems = function syncFieldPositionsWithItems(root) {\n        root.query('GET_ACTIVE_ITEMS').forEach(function(item) {\n            if (!root.ref.fields[item.id]) return;\n            root.element.appendChild(root.ref.fields[item.id]);\n        });\n    };\n\n    var didReorderItems = function didReorderItems(_ref2) {\n        var root = _ref2.root;\n        return syncFieldPositionsWithItems(root);\n    };\n\n    var didAddItem = function didAddItem(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        var fileItem = root.query('GET_ITEM', action.id);\n        var isLocalFile = fileItem.origin === FileOrigin.LOCAL;\n        var shouldUseFileInput = !isLocalFile && root.query('SHOULD_UPDATE_FILE_INPUT');\n        var dataContainer = createElement$1('input');\n        dataContainer.type = shouldUseFileInput ? 'file' : 'hidden';\n        dataContainer.name = root.query('GET_NAME');\n        dataContainer.disabled = root.query('GET_DISABLED');\n        root.ref.fields[action.id] = dataContainer;\n        syncFieldPositionsWithItems(root);\n    };\n\n    var didLoadItem$1 = function didLoadItem(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        var field = getField(root, action.id);\n        if (!field) return;\n\n        // store server ref in hidden input\n        if (action.serverFileReference !== null) field.value = action.serverFileReference;\n\n        // store file item in file input\n        if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n\n        var fileItem = root.query('GET_ITEM', action.id);\n        setInputFiles(field, [fileItem.file]);\n    };\n\n    var didPrepareOutput = function didPrepareOutput(_ref5) {\n        var root = _ref5.root,\n            action = _ref5.action;\n        // this timeout pushes the handler after 'load'\n        if (!root.query('SHOULD_UPDATE_FILE_INPUT')) return;\n        setTimeout(function() {\n            var field = getField(root, action.id);\n            if (!field) return;\n            setInputFiles(field, [action.file]);\n        }, 0);\n    };\n\n    var didSetDisabled = function didSetDisabled(_ref6) {\n        var root = _ref6.root;\n        root.element.disabled = root.query('GET_DISABLED');\n    };\n\n    var didRemoveItem = function didRemoveItem(_ref7) {\n        var root = _ref7.root,\n            action = _ref7.action;\n        var field = getField(root, action.id);\n        if (!field) return;\n        if (field.parentNode) field.parentNode.removeChild(field);\n        delete root.ref.fields[action.id];\n    };\n\n    // only runs for server files. will refuse to update the value if the field\n    // is a file field\n    var didDefineValue = function didDefineValue(_ref8) {\n        var root = _ref8.root,\n            action = _ref8.action;\n        var field = getField(root, action.id);\n        if (!field) return;\n        if (action.value === null) {\n            // clear field value\n            field.removeAttribute('value');\n        } else {\n            // set field value\n            if (field.type != 'file') {\n                field.value = action.value;\n            }\n        }\n        syncFieldPositionsWithItems(root);\n    };\n\n    var write$8 = createRoute({\n        DID_SET_DISABLED: didSetDisabled,\n        DID_ADD_ITEM: didAddItem,\n        DID_LOAD_ITEM: didLoadItem$1,\n        DID_REMOVE_ITEM: didRemoveItem,\n        DID_DEFINE_VALUE: didDefineValue,\n        DID_PREPARE_OUTPUT: didPrepareOutput,\n        DID_REORDER_ITEMS: didReorderItems,\n        DID_SORT_ITEMS: didReorderItems,\n    });\n\n    var data = createView({\n        tag: 'fieldset',\n        name: 'data',\n        create: create$c,\n        write: write$8,\n        ignoreRect: true,\n    });\n\n    var getRootNode = function getRootNode(element) {\n        return 'getRootNode' in element ? element.getRootNode() : document;\n    };\n\n    var images = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'tiff'];\n    var text$1 = ['css', 'csv', 'html', 'txt'];\n    var map = {\n        zip: 'zip|compressed',\n        epub: 'application/epub+zip',\n    };\n\n    var guesstimateMimeType = function guesstimateMimeType() {\n        var extension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n        extension = extension.toLowerCase();\n        if (images.includes(extension)) {\n            return (\n                'image/' +\n                (extension === 'jpg' ? 'jpeg' : extension === 'svg' ? 'svg+xml' : extension)\n            );\n        }\n        if (text$1.includes(extension)) {\n            return 'text/' + extension;\n        }\n\n        return map[extension] || '';\n    };\n\n    var requestDataTransferItems = function requestDataTransferItems(dataTransfer) {\n        return new Promise(function(resolve, reject) {\n            // try to get links from transfer, if found we'll exit immediately (unless a file is in the dataTransfer as well, this is because Firefox could represent the file as a URL and a file object at the same time)\n            var links = getLinks(dataTransfer);\n            if (links.length && !hasFiles(dataTransfer)) {\n                return resolve(links);\n            }\n            // try to get files from the transfer\n            getFiles(dataTransfer).then(resolve);\n        });\n    };\n\n    /**\n     * Test if datatransfer has files\n     */\n    var hasFiles = function hasFiles(dataTransfer) {\n        if (dataTransfer.files) return dataTransfer.files.length > 0;\n        return false;\n    };\n\n    /**\n     * Extracts files from a DataTransfer object\n     */\n    var getFiles = function getFiles(dataTransfer) {\n        return new Promise(function(resolve, reject) {\n            // get the transfer items as promises\n            var promisedFiles = (dataTransfer.items ? Array.from(dataTransfer.items) : [])\n                // only keep file system items (files and directories)\n                .filter(function(item) {\n                    return isFileSystemItem(item);\n                })\n\n                // map each item to promise\n                .map(function(item) {\n                    return getFilesFromItem(item);\n                });\n\n            // if is empty, see if we can extract some info from the files property as a fallback\n            if (!promisedFiles.length) {\n                // TODO: test for directories (should not be allowed)\n                // Use FileReader, problem is that the files property gets lost in the process\n                resolve(dataTransfer.files ? Array.from(dataTransfer.files) : []);\n                return;\n            }\n\n            // done!\n            Promise.all(promisedFiles)\n                .then(function(returnedFileGroups) {\n                    // flatten groups\n                    var files = [];\n                    returnedFileGroups.forEach(function(group) {\n                        files.push.apply(files, group);\n                    });\n\n                    // done (filter out empty files)!\n                    resolve(\n                        files\n                            .filter(function(file) {\n                                return file;\n                            })\n                            .map(function(file) {\n                                if (!file._relativePath)\n                                    file._relativePath = file.webkitRelativePath;\n                                return file;\n                            })\n                    );\n                })\n                .catch(console.error);\n        });\n    };\n\n    var isFileSystemItem = function isFileSystemItem(item) {\n        if (isEntry(item)) {\n            var entry = getAsEntry(item);\n            if (entry) {\n                return entry.isFile || entry.isDirectory;\n            }\n        }\n        return item.kind === 'file';\n    };\n\n    var getFilesFromItem = function getFilesFromItem(item) {\n        return new Promise(function(resolve, reject) {\n            if (isDirectoryEntry(item)) {\n                getFilesInDirectory(getAsEntry(item))\n                    .then(resolve)\n                    .catch(reject);\n                return;\n            }\n\n            resolve([item.getAsFile()]);\n        });\n    };\n\n    var getFilesInDirectory = function getFilesInDirectory(entry) {\n        return new Promise(function(resolve, reject) {\n            var files = [];\n\n            // the total entries to read\n            var dirCounter = 0;\n            var fileCounter = 0;\n\n            var resolveIfDone = function resolveIfDone() {\n                if (fileCounter === 0 && dirCounter === 0) {\n                    resolve(files);\n                }\n            };\n\n            // the recursive function\n            var readEntries = function readEntries(dirEntry) {\n                dirCounter++;\n\n                var directoryReader = dirEntry.createReader();\n\n                // directories are returned in batches, we need to process all batches before we're done\n                var readBatch = function readBatch() {\n                    directoryReader.readEntries(function(entries) {\n                        if (entries.length === 0) {\n                            dirCounter--;\n                            resolveIfDone();\n                            return;\n                        }\n\n                        entries.forEach(function(entry) {\n                            // recursively read more directories\n                            if (entry.isDirectory) {\n                                readEntries(entry);\n                            } else {\n                                // read as file\n                                fileCounter++;\n\n                                entry.file(function(file) {\n                                    var correctedFile = correctMissingFileType(file);\n                                    if (entry.fullPath)\n                                        correctedFile._relativePath = entry.fullPath;\n                                    files.push(correctedFile);\n                                    fileCounter--;\n                                    resolveIfDone();\n                                });\n                            }\n                        });\n\n                        // try to get next batch of files\n                        readBatch();\n                    }, reject);\n                };\n\n                // read first batch of files\n                readBatch();\n            };\n\n            // go!\n            readEntries(entry);\n        });\n    };\n\n    var correctMissingFileType = function correctMissingFileType(file) {\n        if (file.type.length) return file;\n        var date = file.lastModifiedDate;\n        var name = file.name;\n        var type = guesstimateMimeType(getExtensionFromFilename(file.name));\n        if (!type.length) return file;\n        file = file.slice(0, file.size, type);\n        file.name = name;\n        file.lastModifiedDate = date;\n        return file;\n    };\n\n    var isDirectoryEntry = function isDirectoryEntry(item) {\n        return isEntry(item) && (getAsEntry(item) || {}).isDirectory;\n    };\n\n    var isEntry = function isEntry(item) {\n        return 'webkitGetAsEntry' in item;\n    };\n\n    var getAsEntry = function getAsEntry(item) {\n        return item.webkitGetAsEntry();\n    };\n\n    /**\n     * Extracts links from a DataTransfer object\n     */\n    var getLinks = function getLinks(dataTransfer) {\n        var links = [];\n        try {\n            // look in meta data property\n            links = getLinksFromTransferMetaData(dataTransfer);\n            if (links.length) {\n                return links;\n            }\n            links = getLinksFromTransferURLData(dataTransfer);\n        } catch (e) {\n            // nope nope nope (probably IE trouble)\n        }\n        return links;\n    };\n\n    var getLinksFromTransferURLData = function getLinksFromTransferURLData(dataTransfer) {\n        var data = dataTransfer.getData('url');\n        if (typeof data === 'string' && data.length) {\n            return [data];\n        }\n        return [];\n    };\n\n    var getLinksFromTransferMetaData = function getLinksFromTransferMetaData(dataTransfer) {\n        var data = dataTransfer.getData('text/html');\n        if (typeof data === 'string' && data.length) {\n            var matches = data.match(/src\\s*=\\s*\"(.+?)\"/);\n            if (matches) {\n                return [matches[1]];\n            }\n        }\n        return [];\n    };\n\n    var dragNDropObservers = [];\n\n    var eventPosition = function eventPosition(e) {\n        return {\n            pageLeft: e.pageX,\n            pageTop: e.pageY,\n            scopeLeft: e.offsetX || e.layerX,\n            scopeTop: e.offsetY || e.layerY,\n        };\n    };\n\n    var createDragNDropClient = function createDragNDropClient(\n        element,\n        scopeToObserve,\n        filterElement\n    ) {\n        var observer = getDragNDropObserver(scopeToObserve);\n\n        var client = {\n            element: element,\n            filterElement: filterElement,\n            state: null,\n            ondrop: function ondrop() {},\n            onenter: function onenter() {},\n            ondrag: function ondrag() {},\n            onexit: function onexit() {},\n            onload: function onload() {},\n            allowdrop: function allowdrop() {},\n        };\n\n        client.destroy = observer.addListener(client);\n\n        return client;\n    };\n\n    var getDragNDropObserver = function getDragNDropObserver(element) {\n        // see if already exists, if so, return\n        var observer = dragNDropObservers.find(function(item) {\n            return item.element === element;\n        });\n        if (observer) {\n            return observer;\n        }\n\n        // create new observer, does not yet exist for this element\n        var newObserver = createDragNDropObserver(element);\n        dragNDropObservers.push(newObserver);\n        return newObserver;\n    };\n\n    var createDragNDropObserver = function createDragNDropObserver(element) {\n        var clients = [];\n\n        var routes = {\n            dragenter: dragenter,\n            dragover: dragover,\n            dragleave: dragleave,\n            drop: drop,\n        };\n\n        var handlers = {};\n\n        forin(routes, function(event, createHandler) {\n            handlers[event] = createHandler(element, clients);\n            element.addEventListener(event, handlers[event], false);\n        });\n\n        var observer = {\n            element: element,\n            addListener: function addListener(client) {\n                // add as client\n                clients.push(client);\n\n                // return removeListener function\n                return function() {\n                    // remove client\n                    clients.splice(clients.indexOf(client), 1);\n\n                    // if no more clients, clean up observer\n                    if (clients.length === 0) {\n                        dragNDropObservers.splice(dragNDropObservers.indexOf(observer), 1);\n\n                        forin(routes, function(event) {\n                            element.removeEventListener(event, handlers[event], false);\n                        });\n                    }\n                };\n            },\n        };\n\n        return observer;\n    };\n\n    var elementFromPoint = function elementFromPoint(root, point) {\n        if (!('elementFromPoint' in root)) {\n            root = document;\n        }\n        return root.elementFromPoint(point.x, point.y);\n    };\n\n    var isEventTarget = function isEventTarget(e, target) {\n        // get root\n        var root = getRootNode(target);\n\n        // get element at position\n        // if root is not actual shadow DOM and does not have elementFromPoint method, use the one on document\n        var elementAtPosition = elementFromPoint(root, {\n            x: e.pageX - window.pageXOffset,\n            y: e.pageY - window.pageYOffset,\n        });\n\n        // test if target is the element or if one of its children is\n        return elementAtPosition === target || target.contains(elementAtPosition);\n    };\n\n    var initialTarget = null;\n\n    var setDropEffect = function setDropEffect(dataTransfer, effect) {\n        // is in try catch as IE11 will throw error if not\n        try {\n            dataTransfer.dropEffect = effect;\n        } catch (e) {}\n    };\n\n    var dragenter = function dragenter(root, clients) {\n        return function(e) {\n            e.preventDefault();\n\n            initialTarget = e.target;\n\n            clients.forEach(function(client) {\n                var element = client.element,\n                    onenter = client.onenter;\n\n                if (isEventTarget(e, element)) {\n                    client.state = 'enter';\n\n                    // fire enter event\n                    onenter(eventPosition(e));\n                }\n            });\n        };\n    };\n\n    var dragover = function dragover(root, clients) {\n        return function(e) {\n            e.preventDefault();\n\n            var dataTransfer = e.dataTransfer;\n\n            requestDataTransferItems(dataTransfer).then(function(items) {\n                var overDropTarget = false;\n\n                clients.some(function(client) {\n                    var filterElement = client.filterElement,\n                        element = client.element,\n                        onenter = client.onenter,\n                        onexit = client.onexit,\n                        ondrag = client.ondrag,\n                        allowdrop = client.allowdrop;\n\n                    // by default we can drop\n                    setDropEffect(dataTransfer, 'copy');\n\n                    // allow transfer of these items\n                    var allowsTransfer = allowdrop(items);\n\n                    // only used when can be dropped on page\n                    if (!allowsTransfer) {\n                        setDropEffect(dataTransfer, 'none');\n                        return;\n                    }\n\n                    // targetting this client\n                    if (isEventTarget(e, element)) {\n                        overDropTarget = true;\n\n                        // had no previous state, means we are entering this client\n                        if (client.state === null) {\n                            client.state = 'enter';\n                            onenter(eventPosition(e));\n                            return;\n                        }\n\n                        // now over element (no matter if it allows the drop or not)\n                        client.state = 'over';\n\n                        // needs to allow transfer\n                        if (filterElement && !allowsTransfer) {\n                            setDropEffect(dataTransfer, 'none');\n                            return;\n                        }\n\n                        // dragging\n                        ondrag(eventPosition(e));\n                    } else {\n                        // should be over an element to drop\n                        if (filterElement && !overDropTarget) {\n                            setDropEffect(dataTransfer, 'none');\n                        }\n\n                        // might have just left this client?\n                        if (client.state) {\n                            client.state = null;\n                            onexit(eventPosition(e));\n                        }\n                    }\n                });\n            });\n        };\n    };\n\n    var drop = function drop(root, clients) {\n        return function(e) {\n            e.preventDefault();\n\n            var dataTransfer = e.dataTransfer;\n\n            requestDataTransferItems(dataTransfer).then(function(items) {\n                clients.forEach(function(client) {\n                    var filterElement = client.filterElement,\n                        element = client.element,\n                        ondrop = client.ondrop,\n                        onexit = client.onexit,\n                        allowdrop = client.allowdrop;\n\n                    client.state = null;\n\n                    // if we're filtering on element we need to be over the element to drop\n                    if (filterElement && !isEventTarget(e, element)) return;\n\n                    // no transfer for this client\n                    if (!allowdrop(items)) return onexit(eventPosition(e));\n\n                    // we can drop these items on this client\n                    ondrop(eventPosition(e), items);\n                });\n            });\n        };\n    };\n\n    var dragleave = function dragleave(root, clients) {\n        return function(e) {\n            if (initialTarget !== e.target) {\n                return;\n            }\n\n            clients.forEach(function(client) {\n                var onexit = client.onexit;\n\n                client.state = null;\n\n                onexit(eventPosition(e));\n            });\n        };\n    };\n\n    var createHopper = function createHopper(scope, validateItems, options) {\n        // is now hopper scope\n        scope.classList.add('filepond--hopper');\n\n        // shortcuts\n        var catchesDropsOnPage = options.catchesDropsOnPage,\n            requiresDropOnElement = options.requiresDropOnElement,\n            _options$filterItems = options.filterItems,\n            filterItems =\n                _options$filterItems === void 0\n                    ? function(items) {\n                          return items;\n                      }\n                    : _options$filterItems;\n\n        // create a dnd client\n        var client = createDragNDropClient(\n            scope,\n            catchesDropsOnPage ? document.documentElement : scope,\n            requiresDropOnElement\n        );\n\n        // current client state\n        var lastState = '';\n        var currentState = '';\n\n        // determines if a file may be dropped\n        client.allowdrop = function(items) {\n            // TODO: if we can, throw error to indicate the items cannot by dropped\n\n            return validateItems(filterItems(items));\n        };\n\n        client.ondrop = function(position, items) {\n            var filteredItems = filterItems(items);\n\n            if (!validateItems(filteredItems)) {\n                api.ondragend(position);\n                return;\n            }\n\n            currentState = 'drag-drop';\n\n            api.onload(filteredItems, position);\n        };\n\n        client.ondrag = function(position) {\n            api.ondrag(position);\n        };\n\n        client.onenter = function(position) {\n            currentState = 'drag-over';\n\n            api.ondragstart(position);\n        };\n\n        client.onexit = function(position) {\n            currentState = 'drag-exit';\n\n            api.ondragend(position);\n        };\n\n        var api = {\n            updateHopperState: function updateHopperState() {\n                if (lastState !== currentState) {\n                    scope.dataset.hopperState = currentState;\n                    lastState = currentState;\n                }\n            },\n            onload: function onload() {},\n            ondragstart: function ondragstart() {},\n            ondrag: function ondrag() {},\n            ondragend: function ondragend() {},\n            destroy: function destroy() {\n                // destroy client\n                client.destroy();\n            },\n        };\n\n        return api;\n    };\n\n    var listening = false;\n    var listeners$1 = [];\n\n    var handlePaste = function handlePaste(e) {\n        // if is pasting in input or textarea and the target is outside of a filepond scope, ignore\n        var activeEl = document.activeElement;\n        if (activeEl && /textarea|input/i.test(activeEl.nodeName)) {\n            // test textarea or input is contained in filepond root\n            var inScope = false;\n            var element = activeEl;\n            while (element !== document.body) {\n                if (element.classList.contains('filepond--root')) {\n                    inScope = true;\n                    break;\n                }\n                element = element.parentNode;\n            }\n\n            if (!inScope) return;\n        }\n\n        requestDataTransferItems(e.clipboardData).then(function(files) {\n            // no files received\n            if (!files.length) {\n                return;\n            }\n\n            // notify listeners of received files\n            listeners$1.forEach(function(listener) {\n                return listener(files);\n            });\n        });\n    };\n\n    var listen = function listen(cb) {\n        // can't add twice\n        if (listeners$1.includes(cb)) {\n            return;\n        }\n\n        // add initial listener\n        listeners$1.push(cb);\n\n        // setup paste listener for entire page\n        if (listening) {\n            return;\n        }\n\n        listening = true;\n        document.addEventListener('paste', handlePaste);\n    };\n\n    var unlisten = function unlisten(listener) {\n        arrayRemove(listeners$1, listeners$1.indexOf(listener));\n\n        // clean up\n        if (listeners$1.length === 0) {\n            document.removeEventListener('paste', handlePaste);\n            listening = false;\n        }\n    };\n\n    var createPaster = function createPaster() {\n        var cb = function cb(files) {\n            api.onload(files);\n        };\n\n        var api = {\n            destroy: function destroy() {\n                unlisten(cb);\n            },\n            onload: function onload() {},\n        };\n\n        listen(cb);\n\n        return api;\n    };\n\n    /**\n     * Creates the file view\n     */\n    var create$d = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        root.element.id = 'filepond--assistant-' + props.id;\n        attr(root.element, 'role', 'status');\n        attr(root.element, 'aria-live', 'polite');\n        attr(root.element, 'aria-relevant', 'additions');\n    };\n\n    var addFilesNotificationTimeout = null;\n    var notificationClearTimeout = null;\n\n    var filenames = [];\n\n    var assist = function assist(root, message) {\n        root.element.textContent = message;\n    };\n\n    var clear$1 = function clear(root) {\n        root.element.textContent = '';\n    };\n\n    var listModified = function listModified(root, filename, label) {\n        var total = root.query('GET_TOTAL_ITEMS');\n        assist(\n            root,\n            label +\n                ' ' +\n                filename +\n                ', ' +\n                total +\n                ' ' +\n                (total === 1\n                    ? root.query('GET_LABEL_FILE_COUNT_SINGULAR')\n                    : root.query('GET_LABEL_FILE_COUNT_PLURAL'))\n        );\n\n        // clear group after set amount of time so the status is not read twice\n        clearTimeout(notificationClearTimeout);\n        notificationClearTimeout = setTimeout(function() {\n            clear$1(root);\n        }, 1500);\n    };\n\n    var isUsingFilePond = function isUsingFilePond(root) {\n        return root.element.parentNode.contains(document.activeElement);\n    };\n\n    var itemAdded = function itemAdded(_ref2) {\n        var root = _ref2.root,\n            action = _ref2.action;\n        if (!isUsingFilePond(root)) {\n            return;\n        }\n\n        root.element.textContent = '';\n        var item = root.query('GET_ITEM', action.id);\n        filenames.push(item.filename);\n\n        clearTimeout(addFilesNotificationTimeout);\n        addFilesNotificationTimeout = setTimeout(function() {\n            listModified(root, filenames.join(', '), root.query('GET_LABEL_FILE_ADDED'));\n\n            filenames.length = 0;\n        }, 750);\n    };\n\n    var itemRemoved = function itemRemoved(_ref3) {\n        var root = _ref3.root,\n            action = _ref3.action;\n        if (!isUsingFilePond(root)) {\n            return;\n        }\n\n        var item = action.item;\n        listModified(root, item.filename, root.query('GET_LABEL_FILE_REMOVED'));\n    };\n\n    var itemProcessed = function itemProcessed(_ref4) {\n        var root = _ref4.root,\n            action = _ref4.action;\n        // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n        var item = root.query('GET_ITEM', action.id);\n        var filename = item.filename;\n        var label = root.query('GET_LABEL_FILE_PROCESSING_COMPLETE');\n\n        assist(root, filename + ' ' + label);\n    };\n\n    var itemProcessedUndo = function itemProcessedUndo(_ref5) {\n        var root = _ref5.root,\n            action = _ref5.action;\n        var item = root.query('GET_ITEM', action.id);\n        var filename = item.filename;\n        var label = root.query('GET_LABEL_FILE_PROCESSING_ABORTED');\n\n        assist(root, filename + ' ' + label);\n    };\n\n    var itemError = function itemError(_ref6) {\n        var root = _ref6.root,\n            action = _ref6.action;\n        var item = root.query('GET_ITEM', action.id);\n        var filename = item.filename;\n\n        // will also notify the user when FilePond is not being used, as the user might be occupied with other activities while uploading a file\n\n        assist(root, action.status.main + ' ' + filename + ' ' + action.status.sub);\n    };\n\n    var assistant = createView({\n        create: create$d,\n        ignoreRect: true,\n        ignoreRectUpdate: true,\n        write: createRoute({\n            DID_LOAD_ITEM: itemAdded,\n            DID_REMOVE_ITEM: itemRemoved,\n            DID_COMPLETE_ITEM_PROCESSING: itemProcessed,\n\n            DID_ABORT_ITEM_PROCESSING: itemProcessedUndo,\n            DID_REVERT_ITEM_PROCESSING: itemProcessedUndo,\n\n            DID_THROW_ITEM_REMOVE_ERROR: itemError,\n            DID_THROW_ITEM_LOAD_ERROR: itemError,\n            DID_THROW_ITEM_INVALID: itemError,\n            DID_THROW_ITEM_PROCESSING_ERROR: itemError,\n        }),\n\n        tag: 'span',\n        name: 'assistant',\n    });\n\n    var toCamels = function toCamels(string) {\n        var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';\n        return string.replace(new RegExp(separator + '.', 'g'), function(sub) {\n            return sub.charAt(1).toUpperCase();\n        });\n    };\n\n    var debounce = function debounce(func) {\n        var interval = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n        var immidiateOnly =\n            arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var last = Date.now();\n        var timeout = null;\n\n        return function() {\n            for (\n                var _len = arguments.length, args = new Array(_len), _key = 0;\n                _key < _len;\n                _key++\n            ) {\n                args[_key] = arguments[_key];\n            }\n            clearTimeout(timeout);\n\n            var dist = Date.now() - last;\n\n            var fn = function fn() {\n                last = Date.now();\n                func.apply(void 0, args);\n            };\n\n            if (dist < interval) {\n                // we need to delay by the difference between interval and dist\n                // for example: if distance is 10 ms and interval is 16 ms,\n                // we need to wait an additional 6ms before calling the function)\n                if (!immidiateOnly) {\n                    timeout = setTimeout(fn, interval - dist);\n                }\n            } else {\n                // go!\n                fn();\n            }\n        };\n    };\n\n    var MAX_FILES_LIMIT = 1000000;\n\n    var prevent = function prevent(e) {\n        return e.preventDefault();\n    };\n\n    var create$e = function create(_ref) {\n        var root = _ref.root,\n            props = _ref.props;\n        // Add id\n        var id = root.query('GET_ID');\n        if (id) {\n            root.element.id = id;\n        }\n\n        // Add className\n        var className = root.query('GET_CLASS_NAME');\n        if (className) {\n            className\n                .split(' ')\n                .filter(function(name) {\n                    return name.length;\n                })\n                .forEach(function(name) {\n                    root.element.classList.add(name);\n                });\n        }\n\n        // Field label\n        root.ref.label = root.appendChildView(\n            root.createChildView(\n                dropLabel,\n                Object.assign({}, props, {\n                    translateY: null,\n                    caption: root.query('GET_LABEL_IDLE'),\n                })\n            )\n        );\n\n        // List of items\n        root.ref.list = root.appendChildView(\n            root.createChildView(listScroller, { translateY: null })\n        );\n\n        // Background panel\n        root.ref.panel = root.appendChildView(root.createChildView(panel, { name: 'panel-root' }));\n\n        // Assistant notifies assistive tech when content changes\n        root.ref.assistant = root.appendChildView(\n            root.createChildView(assistant, Object.assign({}, props))\n        );\n\n        // Data\n        root.ref.data = root.appendChildView(root.createChildView(data, Object.assign({}, props)));\n\n        // Measure (tests if fixed height was set)\n        // DOCTYPE needs to be set for this to work\n        root.ref.measure = createElement$1('div');\n        root.ref.measure.style.height = '100%';\n        root.element.appendChild(root.ref.measure);\n\n        // information on the root height or fixed height status\n        root.ref.bounds = null;\n\n        // apply initial style properties\n        root.query('GET_STYLES')\n            .filter(function(style) {\n                return !isEmpty(style.value);\n            })\n            .map(function(_ref2) {\n                var name = _ref2.name,\n                    value = _ref2.value;\n                root.element.dataset[name] = value;\n            });\n\n        // determine if width changed\n        root.ref.widthPrevious = null;\n        root.ref.widthUpdated = debounce(function() {\n            root.ref.updateHistory = [];\n            root.dispatch('DID_RESIZE_ROOT');\n        }, 250);\n\n        // history of updates\n        root.ref.previousAspectRatio = null;\n        root.ref.updateHistory = [];\n\n        // prevent scrolling and zooming on iOS (only if supports pointer events, for then we can enable reorder)\n        var canHover = window.matchMedia('(pointer: fine) and (hover: hover)').matches;\n        var hasPointerEvents = 'PointerEvent' in window;\n        if (root.query('GET_ALLOW_REORDER') && hasPointerEvents && !canHover) {\n            root.element.addEventListener('touchmove', prevent, { passive: false });\n            root.element.addEventListener('gesturestart', prevent);\n        }\n\n        // add credits\n        var credits = root.query('GET_CREDITS');\n        var hasCredits = credits.length === 2;\n        if (hasCredits) {\n            var frag = document.createElement('a');\n            frag.className = 'filepond--credits';\n            frag.setAttribute('aria-hidden', 'true');\n            frag.href = credits[0];\n            frag.tabindex = -1;\n            frag.target = '_blank';\n            frag.rel = 'noopener noreferrer';\n            frag.textContent = credits[1];\n            root.element.appendChild(frag);\n            root.ref.credits = frag;\n        }\n    };\n\n    var write$9 = function write(_ref3) {\n        var root = _ref3.root,\n            props = _ref3.props,\n            actions = _ref3.actions;\n        // route actions\n        route$5({ root: root, props: props, actions: actions });\n\n        // apply style properties\n        actions\n            .filter(function(action) {\n                return /^DID_SET_STYLE_/.test(action.type);\n            })\n            .filter(function(action) {\n                return !isEmpty(action.data.value);\n            })\n            .map(function(_ref4) {\n                var type = _ref4.type,\n                    data = _ref4.data;\n                var name = toCamels(type.substring(8).toLowerCase(), '_');\n                root.element.dataset[name] = data.value;\n                root.invalidateLayout();\n            });\n\n        if (root.rect.element.hidden) return;\n\n        if (root.rect.element.width !== root.ref.widthPrevious) {\n            root.ref.widthPrevious = root.rect.element.width;\n            root.ref.widthUpdated();\n        }\n\n        // get box bounds, we do this only once\n        var bounds = root.ref.bounds;\n        if (!bounds) {\n            bounds = root.ref.bounds = calculateRootBoundingBoxHeight(root);\n\n            // destroy measure element\n            root.element.removeChild(root.ref.measure);\n            root.ref.measure = null;\n        }\n\n        // get quick references to various high level parts of the upload tool\n        var _root$ref = root.ref,\n            hopper = _root$ref.hopper,\n            label = _root$ref.label,\n            list = _root$ref.list,\n            panel = _root$ref.panel;\n\n        // sets correct state to hopper scope\n        if (hopper) {\n            hopper.updateHopperState();\n        }\n\n        // bool to indicate if we're full or not\n        var aspectRatio = root.query('GET_PANEL_ASPECT_RATIO');\n        var isMultiItem = root.query('GET_ALLOW_MULTIPLE');\n        var totalItems = root.query('GET_TOTAL_ITEMS');\n        var maxItems = isMultiItem ? root.query('GET_MAX_FILES') || MAX_FILES_LIMIT : 1;\n        var atMaxCapacity = totalItems === maxItems;\n\n        // action used to add item\n        var addAction = actions.find(function(action) {\n            return action.type === 'DID_ADD_ITEM';\n        });\n\n        // if reached max capacity and we've just reached it\n        if (atMaxCapacity && addAction) {\n            // get interaction type\n            var interactionMethod = addAction.data.interactionMethod;\n\n            // hide label\n            label.opacity = 0;\n\n            if (isMultiItem) {\n                label.translateY = -40;\n            } else {\n                if (interactionMethod === InteractionMethod.API) {\n                    label.translateX = 40;\n                } else if (interactionMethod === InteractionMethod.BROWSE) {\n                    label.translateY = 40;\n                } else {\n                    label.translateY = 30;\n                }\n            }\n        } else if (!atMaxCapacity) {\n            label.opacity = 1;\n            label.translateX = 0;\n            label.translateY = 0;\n        }\n\n        var listItemMargin = calculateListItemMargin(root);\n\n        var listHeight = calculateListHeight(root);\n\n        var labelHeight = label.rect.element.height;\n        var currentLabelHeight = !isMultiItem || atMaxCapacity ? 0 : labelHeight;\n\n        var listMarginTop = atMaxCapacity ? list.rect.element.marginTop : 0;\n        var listMarginBottom = totalItems === 0 ? 0 : list.rect.element.marginBottom;\n\n        var visualHeight =\n            currentLabelHeight + listMarginTop + listHeight.visual + listMarginBottom;\n        var boundsHeight =\n            currentLabelHeight + listMarginTop + listHeight.bounds + listMarginBottom;\n\n        // link list to label bottom position\n        list.translateY =\n            Math.max(0, currentLabelHeight - list.rect.element.marginTop) - listItemMargin.top;\n\n        if (aspectRatio) {\n            // fixed aspect ratio\n\n            // calculate height based on width\n            var width = root.rect.element.width;\n            var height = width * aspectRatio;\n\n            // clear history if aspect ratio has changed\n            if (aspectRatio !== root.ref.previousAspectRatio) {\n                root.ref.previousAspectRatio = aspectRatio;\n                root.ref.updateHistory = [];\n            }\n\n            // remember this width\n            var history = root.ref.updateHistory;\n            history.push(width);\n\n            var MAX_BOUNCES = 2;\n            if (history.length > MAX_BOUNCES * 2) {\n                var l = history.length;\n                var bottom = l - 10;\n                var bounces = 0;\n                for (var i = l; i >= bottom; i--) {\n                    if (history[i] === history[i - 2]) {\n                        bounces++;\n                    }\n\n                    if (bounces >= MAX_BOUNCES) {\n                        // dont adjust height\n                        return;\n                    }\n                }\n            }\n\n            // fix height of panel so it adheres to aspect ratio\n            panel.scalable = false;\n            panel.height = height;\n\n            // available height for list\n            var listAvailableHeight =\n                // the height of the panel minus the label height\n                height -\n                currentLabelHeight -\n                // the room we leave open between the end of the list and the panel bottom\n                (listMarginBottom - listItemMargin.bottom) -\n                // if we're full we need to leave some room between the top of the panel and the list\n                (atMaxCapacity ? listMarginTop : 0);\n\n            if (listHeight.visual > listAvailableHeight) {\n                list.overflow = listAvailableHeight;\n            } else {\n                list.overflow = null;\n            }\n\n            // set container bounds (so pushes siblings downwards)\n            root.height = height;\n        } else if (bounds.fixedHeight) {\n            // fixed height\n\n            // fix height of panel\n            panel.scalable = false;\n\n            // available height for list\n            var _listAvailableHeight =\n                // the height of the panel minus the label height\n                bounds.fixedHeight -\n                currentLabelHeight -\n                // the room we leave open between the end of the list and the panel bottom\n                (listMarginBottom - listItemMargin.bottom) -\n                // if we're full we need to leave some room between the top of the panel and the list\n                (atMaxCapacity ? listMarginTop : 0);\n\n            // set list height\n            if (listHeight.visual > _listAvailableHeight) {\n                list.overflow = _listAvailableHeight;\n            } else {\n                list.overflow = null;\n            }\n\n            // no need to set container bounds as these are handles by CSS fixed height\n        } else if (bounds.cappedHeight) {\n            // max-height\n\n            // not a fixed height panel\n            var isCappedHeight = visualHeight >= bounds.cappedHeight;\n            var panelHeight = Math.min(bounds.cappedHeight, visualHeight);\n            panel.scalable = true;\n            panel.height = isCappedHeight\n                ? panelHeight\n                : panelHeight - listItemMargin.top - listItemMargin.bottom;\n\n            // available height for list\n            var _listAvailableHeight2 =\n                // the height of the panel minus the label height\n                panelHeight -\n                currentLabelHeight -\n                // the room we leave open between the end of the list and the panel bottom\n                (listMarginBottom - listItemMargin.bottom) -\n                // if we're full we need to leave some room between the top of the panel and the list\n                (atMaxCapacity ? listMarginTop : 0);\n\n            // set list height (if is overflowing)\n            if (visualHeight > bounds.cappedHeight && listHeight.visual > _listAvailableHeight2) {\n                list.overflow = _listAvailableHeight2;\n            } else {\n                list.overflow = null;\n            }\n\n            // set container bounds (so pushes siblings downwards)\n            root.height = Math.min(\n                bounds.cappedHeight,\n                boundsHeight - listItemMargin.top - listItemMargin.bottom\n            );\n        } else {\n            // flexible height\n\n            // not a fixed height panel\n            var itemMargin = totalItems > 0 ? listItemMargin.top + listItemMargin.bottom : 0;\n            panel.scalable = true;\n            panel.height = Math.max(labelHeight, visualHeight - itemMargin);\n\n            // set container bounds (so pushes siblings downwards)\n            root.height = Math.max(labelHeight, boundsHeight - itemMargin);\n        }\n\n        // move credits to bottom\n        if (root.ref.credits && panel.heightCurrent)\n            root.ref.credits.style.transform = 'translateY(' + panel.heightCurrent + 'px)';\n    };\n\n    var calculateListItemMargin = function calculateListItemMargin(root) {\n        var item = root.ref.list.childViews[0].childViews[0];\n        return item\n            ? {\n                  top: item.rect.element.marginTop,\n                  bottom: item.rect.element.marginBottom,\n              }\n            : {\n                  top: 0,\n                  bottom: 0,\n              };\n    };\n\n    var calculateListHeight = function calculateListHeight(root) {\n        var visual = 0;\n        var bounds = 0;\n\n        // get file list reference\n        var scrollList = root.ref.list;\n        var itemList = scrollList.childViews[0];\n        var visibleChildren = itemList.childViews.filter(function(child) {\n            return child.rect.element.height;\n        });\n        var children = root\n            .query('GET_ACTIVE_ITEMS')\n            .map(function(item) {\n                return visibleChildren.find(function(child) {\n                    return child.id === item.id;\n                });\n            })\n            .filter(function(item) {\n                return item;\n            });\n\n        // no children, done!\n        if (children.length === 0) return { visual: visual, bounds: bounds };\n\n        var horizontalSpace = itemList.rect.element.width;\n        var dragIndex = getItemIndexByPosition(itemList, children, scrollList.dragCoordinates);\n\n        var childRect = children[0].rect.element;\n\n        var itemVerticalMargin = childRect.marginTop + childRect.marginBottom;\n        var itemHorizontalMargin = childRect.marginLeft + childRect.marginRight;\n\n        var itemWidth = childRect.width + itemHorizontalMargin;\n        var itemHeight = childRect.height + itemVerticalMargin;\n\n        var newItem = typeof dragIndex !== 'undefined' && dragIndex >= 0 ? 1 : 0;\n        var removedItem = children.find(function(child) {\n            return child.markedForRemoval && child.opacity < 0.45;\n        })\n            ? -1\n            : 0;\n        var verticalItemCount = children.length + newItem + removedItem;\n        var itemsPerRow = getItemsPerRow(horizontalSpace, itemWidth);\n\n        // stack\n        if (itemsPerRow === 1) {\n            children.forEach(function(item) {\n                var height = item.rect.element.height + itemVerticalMargin;\n                bounds += height;\n                visual += height * item.opacity;\n            });\n        }\n        // grid\n        else {\n            bounds = Math.ceil(verticalItemCount / itemsPerRow) * itemHeight;\n            visual = bounds;\n        }\n\n        return { visual: visual, bounds: bounds };\n    };\n\n    var calculateRootBoundingBoxHeight = function calculateRootBoundingBoxHeight(root) {\n        var height = root.ref.measureHeight || null;\n        var cappedHeight = parseInt(root.style.maxHeight, 10) || null;\n        var fixedHeight = height === 0 ? null : height;\n\n        return {\n            cappedHeight: cappedHeight,\n            fixedHeight: fixedHeight,\n        };\n    };\n\n    var exceedsMaxFiles = function exceedsMaxFiles(root, items) {\n        var allowReplace = root.query('GET_ALLOW_REPLACE');\n        var allowMultiple = root.query('GET_ALLOW_MULTIPLE');\n        var totalItems = root.query('GET_TOTAL_ITEMS');\n        var maxItems = root.query('GET_MAX_FILES');\n\n        // total amount of items being dragged\n        var totalBrowseItems = items.length;\n\n        // if does not allow multiple items and dragging more than one item\n        if (!allowMultiple && totalBrowseItems > 1) {\n            root.dispatch('DID_THROW_MAX_FILES', {\n                source: items,\n                error: createResponse('warning', 0, 'Max files'),\n            });\n\n            return true;\n        }\n\n        // limit max items to one if not allowed to drop multiple items\n        maxItems = allowMultiple ? maxItems : 1;\n\n        if (!allowMultiple && allowReplace) {\n            // There is only one item, so there is room to replace or add an item\n            return false;\n        }\n\n        // no more room?\n        var hasMaxItems = isInt(maxItems);\n        if (hasMaxItems && totalItems + totalBrowseItems > maxItems) {\n            root.dispatch('DID_THROW_MAX_FILES', {\n                source: items,\n                error: createResponse('warning', 0, 'Max files'),\n            });\n\n            return true;\n        }\n\n        return false;\n    };\n\n    var getDragIndex = function getDragIndex(list, children, position) {\n        var itemList = list.childViews[0];\n        return getItemIndexByPosition(itemList, children, {\n            left: position.scopeLeft - itemList.rect.element.left,\n            top:\n                position.scopeTop -\n                (list.rect.outer.top + list.rect.element.marginTop + list.rect.element.scrollTop),\n        });\n    };\n\n    /**\n     * Enable or disable file drop functionality\n     */\n    var toggleDrop = function toggleDrop(root) {\n        var isAllowed = root.query('GET_ALLOW_DROP');\n        var isDisabled = root.query('GET_DISABLED');\n        var enabled = isAllowed && !isDisabled;\n        if (enabled && !root.ref.hopper) {\n            var hopper = createHopper(\n                root.element,\n                function(items) {\n                    // allow quick validation of dropped items\n                    var beforeDropFile =\n                        root.query('GET_BEFORE_DROP_FILE') ||\n                        function() {\n                            return true;\n                        };\n\n                    // all items should be validated by all filters as valid\n                    var dropValidation = root.query('GET_DROP_VALIDATION');\n                    return dropValidation\n                        ? items.every(function(item) {\n                              return (\n                                  applyFilters('ALLOW_HOPPER_ITEM', item, {\n                                      query: root.query,\n                                  }).every(function(result) {\n                                      return result === true;\n                                  }) && beforeDropFile(item)\n                              );\n                          })\n                        : true;\n                },\n                {\n                    filterItems: function filterItems(items) {\n                        var ignoredFiles = root.query('GET_IGNORED_FILES');\n                        return items.filter(function(item) {\n                            if (isFile(item)) {\n                                return !ignoredFiles.includes(item.name.toLowerCase());\n                            }\n                            return true;\n                        });\n                    },\n                    catchesDropsOnPage: root.query('GET_DROP_ON_PAGE'),\n                    requiresDropOnElement: root.query('GET_DROP_ON_ELEMENT'),\n                }\n            );\n\n            hopper.onload = function(items, position) {\n                // get item children elements and sort based on list sort\n                var list = root.ref.list.childViews[0];\n                var visibleChildren = list.childViews.filter(function(child) {\n                    return child.rect.element.height;\n                });\n                var children = root\n                    .query('GET_ACTIVE_ITEMS')\n                    .map(function(item) {\n                        return visibleChildren.find(function(child) {\n                            return child.id === item.id;\n                        });\n                    })\n                    .filter(function(item) {\n                        return item;\n                    });\n\n                applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n                    queue\n                ) {\n                    // these files don't fit so stop here\n                    if (exceedsMaxFiles(root, queue)) return false;\n\n                    // go\n                    root.dispatch('ADD_ITEMS', {\n                        items: queue,\n                        index: getDragIndex(root.ref.list, children, position),\n                        interactionMethod: InteractionMethod.DROP,\n                    });\n                });\n\n                root.dispatch('DID_DROP', { position: position });\n\n                root.dispatch('DID_END_DRAG', { position: position });\n            };\n\n            hopper.ondragstart = function(position) {\n                root.dispatch('DID_START_DRAG', { position: position });\n            };\n\n            hopper.ondrag = debounce(function(position) {\n                root.dispatch('DID_DRAG', { position: position });\n            });\n\n            hopper.ondragend = function(position) {\n                root.dispatch('DID_END_DRAG', { position: position });\n            };\n\n            root.ref.hopper = hopper;\n\n            root.ref.drip = root.appendChildView(root.createChildView(drip));\n        } else if (!enabled && root.ref.hopper) {\n            root.ref.hopper.destroy();\n            root.ref.hopper = null;\n            root.removeChildView(root.ref.drip);\n        }\n    };\n\n    /**\n     * Enable or disable browse functionality\n     */\n    var toggleBrowse = function toggleBrowse(root, props) {\n        var isAllowed = root.query('GET_ALLOW_BROWSE');\n        var isDisabled = root.query('GET_DISABLED');\n        var enabled = isAllowed && !isDisabled;\n        if (enabled && !root.ref.browser) {\n            root.ref.browser = root.appendChildView(\n                root.createChildView(\n                    browser,\n                    Object.assign({}, props, {\n                        onload: function onload(items) {\n                            applyFilterChain('ADD_ITEMS', items, {\n                                dispatch: root.dispatch,\n                            }).then(function(queue) {\n                                // these files don't fit so stop here\n                                if (exceedsMaxFiles(root, queue)) return false;\n\n                                // add items!\n                                root.dispatch('ADD_ITEMS', {\n                                    items: queue,\n                                    index: -1,\n                                    interactionMethod: InteractionMethod.BROWSE,\n                                });\n                            });\n                        },\n                    })\n                ),\n\n                0\n            );\n        } else if (!enabled && root.ref.browser) {\n            root.removeChildView(root.ref.browser);\n            root.ref.browser = null;\n        }\n    };\n\n    /**\n     * Enable or disable paste functionality\n     */\n    var togglePaste = function togglePaste(root) {\n        var isAllowed = root.query('GET_ALLOW_PASTE');\n        var isDisabled = root.query('GET_DISABLED');\n        var enabled = isAllowed && !isDisabled;\n        if (enabled && !root.ref.paster) {\n            root.ref.paster = createPaster();\n            root.ref.paster.onload = function(items) {\n                applyFilterChain('ADD_ITEMS', items, { dispatch: root.dispatch }).then(function(\n                    queue\n                ) {\n                    // these files don't fit so stop here\n                    if (exceedsMaxFiles(root, queue)) return false;\n\n                    // add items!\n                    root.dispatch('ADD_ITEMS', {\n                        items: queue,\n                        index: -1,\n                        interactionMethod: InteractionMethod.PASTE,\n                    });\n                });\n            };\n        } else if (!enabled && root.ref.paster) {\n            root.ref.paster.destroy();\n            root.ref.paster = null;\n        }\n    };\n\n    /**\n     * Route actions\n     */\n    var route$5 = createRoute({\n        DID_SET_ALLOW_BROWSE: function DID_SET_ALLOW_BROWSE(_ref5) {\n            var root = _ref5.root,\n                props = _ref5.props;\n            toggleBrowse(root, props);\n        },\n        DID_SET_ALLOW_DROP: function DID_SET_ALLOW_DROP(_ref6) {\n            var root = _ref6.root;\n            toggleDrop(root);\n        },\n        DID_SET_ALLOW_PASTE: function DID_SET_ALLOW_PASTE(_ref7) {\n            var root = _ref7.root;\n            togglePaste(root);\n        },\n        DID_SET_DISABLED: function DID_SET_DISABLED(_ref8) {\n            var root = _ref8.root,\n                props = _ref8.props;\n            toggleDrop(root);\n            togglePaste(root);\n            toggleBrowse(root, props);\n            var isDisabled = root.query('GET_DISABLED');\n            if (isDisabled) {\n                root.element.dataset.disabled = 'disabled';\n            } else {\n                // delete root.element.dataset.disabled; <= this does not work on iOS 10\n                root.element.removeAttribute('data-disabled');\n            }\n        },\n    });\n\n    var root = createView({\n        name: 'root',\n        read: function read(_ref9) {\n            var root = _ref9.root;\n            if (root.ref.measure) {\n                root.ref.measureHeight = root.ref.measure.offsetHeight;\n            }\n        },\n        create: create$e,\n        write: write$9,\n        destroy: function destroy(_ref10) {\n            var root = _ref10.root;\n            if (root.ref.paster) {\n                root.ref.paster.destroy();\n            }\n            if (root.ref.hopper) {\n                root.ref.hopper.destroy();\n            }\n            root.element.removeEventListener('touchmove', prevent);\n            root.element.removeEventListener('gesturestart', prevent);\n        },\n        mixins: {\n            styles: ['height'],\n        },\n    });\n\n    // creates the app\n    var createApp = function createApp() {\n        var initialOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // let element\n        var originalElement = null;\n\n        // get default options\n        var defaultOptions = getOptions();\n\n        // create the data store, this will contain all our app info\n        var store = createStore(\n            // initial state (should be serializable)\n            createInitialState(defaultOptions),\n\n            // queries\n            [queries, createOptionQueries(defaultOptions)],\n\n            // action handlers\n            [actions, createOptionActions(defaultOptions)]\n        );\n\n        // set initial options\n        store.dispatch('SET_OPTIONS', { options: initialOptions });\n\n        // kick thread if visibility changes\n        var visibilityHandler = function visibilityHandler() {\n            if (document.hidden) return;\n            store.dispatch('KICK');\n        };\n        document.addEventListener('visibilitychange', visibilityHandler);\n\n        // re-render on window resize start and finish\n        var resizeDoneTimer = null;\n        var isResizing = false;\n        var isResizingHorizontally = false;\n        var initialWindowWidth = null;\n        var currentWindowWidth = null;\n        var resizeHandler = function resizeHandler() {\n            if (!isResizing) {\n                isResizing = true;\n            }\n            clearTimeout(resizeDoneTimer);\n            resizeDoneTimer = setTimeout(function() {\n                isResizing = false;\n                initialWindowWidth = null;\n                currentWindowWidth = null;\n                if (isResizingHorizontally) {\n                    isResizingHorizontally = false;\n                    store.dispatch('DID_STOP_RESIZE');\n                }\n            }, 500);\n        };\n        window.addEventListener('resize', resizeHandler);\n\n        // render initial view\n        var view = root(store, { id: getUniqueId() });\n\n        //\n        // PRIVATE API -------------------------------------------------------------------------------------\n        //\n        var isResting = false;\n        var isHidden = false;\n\n        var readWriteApi = {\n            // necessary for update loop\n\n            /**\n             * Reads from dom (never call manually)\n             * @private\n             */\n            _read: function _read() {\n                // test if we're resizing horizontally\n                // TODO: see if we can optimize this by measuring root rect\n                if (isResizing) {\n                    currentWindowWidth = window.innerWidth;\n                    if (!initialWindowWidth) {\n                        initialWindowWidth = currentWindowWidth;\n                    }\n\n                    if (!isResizingHorizontally && currentWindowWidth !== initialWindowWidth) {\n                        store.dispatch('DID_START_RESIZE');\n                        isResizingHorizontally = true;\n                    }\n                }\n\n                if (isHidden && isResting) {\n                    // test if is no longer hidden\n                    isResting = view.element.offsetParent === null;\n                }\n\n                // if resting, no need to read as numbers will still all be correct\n                if (isResting) return;\n\n                // read view data\n                view._read();\n\n                // if is hidden we need to know so we exit rest mode when revealed\n                isHidden = view.rect.element.hidden;\n            },\n\n            /**\n             * Writes to dom (never call manually)\n             * @private\n             */\n            _write: function _write(ts) {\n                // get all actions from store\n                var actions = store\n                    .processActionQueue()\n\n                    // filter out set actions (these will automatically trigger DID_SET)\n                    .filter(function(action) {\n                        return !/^SET_/.test(action.type);\n                    });\n\n                // if was idling and no actions stop here\n                if (isResting && !actions.length) return;\n\n                // some actions might trigger events\n                routeActionsToEvents(actions);\n\n                // update the view\n                isResting = view._write(ts, actions, isResizingHorizontally);\n\n                // will clean up all archived items\n                removeReleasedItems(store.query('GET_ITEMS'));\n\n                // now idling\n                if (isResting) {\n                    store.processDispatchQueue();\n                }\n            },\n        };\n\n        //\n        // EXPOSE EVENTS -------------------------------------------------------------------------------------\n        //\n        var createEvent = function createEvent(name) {\n            return function(data) {\n                // create default event\n                var event = {\n                    type: name,\n                };\n\n                // no data to add\n                if (!data) {\n                    return event;\n                }\n\n                // copy relevant props\n                if (data.hasOwnProperty('error')) {\n                    event.error = data.error ? Object.assign({}, data.error) : null;\n                }\n\n                if (data.status) {\n                    event.status = Object.assign({}, data.status);\n                }\n\n                if (data.file) {\n                    event.output = data.file;\n                }\n\n                // only source is available, else add item if possible\n                if (data.source) {\n                    event.file = data.source;\n                } else if (data.item || data.id) {\n                    var item = data.item ? data.item : store.query('GET_ITEM', data.id);\n                    event.file = item ? createItemAPI(item) : null;\n                }\n\n                // map all items in a possible items array\n                if (data.items) {\n                    event.items = data.items.map(createItemAPI);\n                }\n\n                // if this is a progress event add the progress amount\n                if (/progress/.test(name)) {\n                    event.progress = data.progress;\n                }\n\n                // copy relevant props\n                if (data.hasOwnProperty('origin') && data.hasOwnProperty('target')) {\n                    event.origin = data.origin;\n                    event.target = data.target;\n                }\n\n                return event;\n            };\n        };\n\n        var eventRoutes = {\n            DID_DESTROY: createEvent('destroy'),\n\n            DID_INIT: createEvent('init'),\n\n            DID_THROW_MAX_FILES: createEvent('warning'),\n\n            DID_INIT_ITEM: createEvent('initfile'),\n            DID_START_ITEM_LOAD: createEvent('addfilestart'),\n            DID_UPDATE_ITEM_LOAD_PROGRESS: createEvent('addfileprogress'),\n            DID_LOAD_ITEM: createEvent('addfile'),\n\n            DID_THROW_ITEM_INVALID: [createEvent('error'), createEvent('addfile')],\n\n            DID_THROW_ITEM_LOAD_ERROR: [createEvent('error'), createEvent('addfile')],\n\n            DID_THROW_ITEM_REMOVE_ERROR: [createEvent('error'), createEvent('removefile')],\n\n            DID_PREPARE_OUTPUT: createEvent('preparefile'),\n\n            DID_START_ITEM_PROCESSING: createEvent('processfilestart'),\n            DID_UPDATE_ITEM_PROCESS_PROGRESS: createEvent('processfileprogress'),\n            DID_ABORT_ITEM_PROCESSING: createEvent('processfileabort'),\n            DID_COMPLETE_ITEM_PROCESSING: createEvent('processfile'),\n            DID_COMPLETE_ITEM_PROCESSING_ALL: createEvent('processfiles'),\n            DID_REVERT_ITEM_PROCESSING: createEvent('processfilerevert'),\n\n            DID_THROW_ITEM_PROCESSING_ERROR: [createEvent('error'), createEvent('processfile')],\n\n            DID_REMOVE_ITEM: createEvent('removefile'),\n\n            DID_UPDATE_ITEMS: createEvent('updatefiles'),\n\n            DID_ACTIVATE_ITEM: createEvent('activatefile'),\n\n            DID_REORDER_ITEMS: createEvent('reorderfiles'),\n        };\n\n        var exposeEvent = function exposeEvent(event) {\n            // create event object to be dispatched\n            var detail = Object.assign({ pond: exports }, event);\n            delete detail.type;\n            view.element.dispatchEvent(\n                new CustomEvent('FilePond:' + event.type, {\n                    // event info\n                    detail: detail,\n\n                    // event behaviour\n                    bubbles: true,\n                    cancelable: true,\n                    composed: true, // triggers listeners outside of shadow root\n                })\n            );\n\n            // event object to params used for `on()` event handlers and callbacks `oninit()`\n            var params = [];\n\n            // if is possible error event, make it the first param\n            if (event.hasOwnProperty('error')) {\n                params.push(event.error);\n            }\n\n            // file is always section\n            if (event.hasOwnProperty('file')) {\n                params.push(event.file);\n            }\n\n            // append other props\n            var filtered = ['type', 'error', 'file'];\n            Object.keys(event)\n                .filter(function(key) {\n                    return !filtered.includes(key);\n                })\n                .forEach(function(key) {\n                    return params.push(event[key]);\n                });\n\n            // on(type, () => { })\n            exports.fire.apply(exports, [event.type].concat(params));\n\n            // oninit = () => {}\n            var handler = store.query('GET_ON' + event.type.toUpperCase());\n            if (handler) {\n                handler.apply(void 0, params);\n            }\n        };\n\n        var routeActionsToEvents = function routeActionsToEvents(actions) {\n            if (!actions.length) return;\n            actions\n                .filter(function(action) {\n                    return eventRoutes[action.type];\n                })\n                .forEach(function(action) {\n                    var routes = eventRoutes[action.type];\n                    (Array.isArray(routes) ? routes : [routes]).forEach(function(route) {\n                        // this isn't fantastic, but because of the stacking of settimeouts plugins can handle the did_load before the did_init\n                        if (action.type === 'DID_INIT_ITEM') {\n                            exposeEvent(route(action.data));\n                        } else {\n                            setTimeout(function() {\n                                exposeEvent(route(action.data));\n                            }, 0);\n                        }\n                    });\n                });\n        };\n\n        //\n        // PUBLIC API -------------------------------------------------------------------------------------\n        //\n        var setOptions = function setOptions(options) {\n            return store.dispatch('SET_OPTIONS', { options: options });\n        };\n\n        var getFile = function getFile(query) {\n            return store.query('GET_ACTIVE_ITEM', query);\n        };\n\n        var prepareFile = function prepareFile(query) {\n            return new Promise(function(resolve, reject) {\n                store.dispatch('REQUEST_ITEM_PREPARE', {\n                    query: query,\n                    success: function success(item) {\n                        resolve(item);\n                    },\n                    failure: function failure(error) {\n                        reject(error);\n                    },\n                });\n            });\n        };\n\n        var addFile = function addFile(source) {\n            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n            return new Promise(function(resolve, reject) {\n                addFiles([{ source: source, options: options }], { index: options.index })\n                    .then(function(items) {\n                        return resolve(items && items[0]);\n                    })\n                    .catch(reject);\n            });\n        };\n\n        var isFilePondFile = function isFilePondFile(obj) {\n            return obj.file && obj.id;\n        };\n\n        var removeFile = function removeFile(query, options) {\n            // if only passed options\n            if (typeof query === 'object' && !isFilePondFile(query) && !options) {\n                options = query;\n                query = undefined;\n            }\n\n            // request item removal\n            store.dispatch('REMOVE_ITEM', Object.assign({}, options, { query: query }));\n\n            // see if item has been removed\n            return store.query('GET_ACTIVE_ITEM', query) === null;\n        };\n\n        var addFiles = function addFiles() {\n            for (\n                var _len = arguments.length, args = new Array(_len), _key = 0;\n                _key < _len;\n                _key++\n            ) {\n                args[_key] = arguments[_key];\n            }\n            return new Promise(function(resolve, reject) {\n                var sources = [];\n                var options = {};\n\n                // user passed a sources array\n                if (isArray(args[0])) {\n                    sources.push.apply(sources, args[0]);\n                    Object.assign(options, args[1] || {});\n                } else {\n                    // user passed sources as arguments, last one might be options object\n                    var lastArgument = args[args.length - 1];\n                    if (typeof lastArgument === 'object' && !(lastArgument instanceof Blob)) {\n                        Object.assign(options, args.pop());\n                    }\n\n                    // add rest to sources\n                    sources.push.apply(sources, args);\n                }\n\n                store.dispatch('ADD_ITEMS', {\n                    items: sources,\n                    index: options.index,\n                    interactionMethod: InteractionMethod.API,\n                    success: resolve,\n                    failure: reject,\n                });\n            });\n        };\n\n        var getFiles = function getFiles() {\n            return store.query('GET_ACTIVE_ITEMS');\n        };\n\n        var processFile = function processFile(query) {\n            return new Promise(function(resolve, reject) {\n                store.dispatch('REQUEST_ITEM_PROCESSING', {\n                    query: query,\n                    success: function success(item) {\n                        resolve(item);\n                    },\n                    failure: function failure(error) {\n                        reject(error);\n                    },\n                });\n            });\n        };\n\n        var prepareFiles = function prepareFiles() {\n            for (\n                var _len2 = arguments.length, args = new Array(_len2), _key2 = 0;\n                _key2 < _len2;\n                _key2++\n            ) {\n                args[_key2] = arguments[_key2];\n            }\n            var queries = Array.isArray(args[0]) ? args[0] : args;\n            var items = queries.length ? queries : getFiles();\n            return Promise.all(items.map(prepareFile));\n        };\n\n        var processFiles = function processFiles() {\n            for (\n                var _len3 = arguments.length, args = new Array(_len3), _key3 = 0;\n                _key3 < _len3;\n                _key3++\n            ) {\n                args[_key3] = arguments[_key3];\n            }\n            var queries = Array.isArray(args[0]) ? args[0] : args;\n            if (!queries.length) {\n                var files = getFiles().filter(function(item) {\n                    return (\n                        !(item.status === ItemStatus.IDLE && item.origin === FileOrigin.LOCAL) &&\n                        item.status !== ItemStatus.PROCESSING &&\n                        item.status !== ItemStatus.PROCESSING_COMPLETE &&\n                        item.status !== ItemStatus.PROCESSING_REVERT_ERROR\n                    );\n                });\n\n                return Promise.all(files.map(processFile));\n            }\n            return Promise.all(queries.map(processFile));\n        };\n\n        var removeFiles = function removeFiles() {\n            for (\n                var _len4 = arguments.length, args = new Array(_len4), _key4 = 0;\n                _key4 < _len4;\n                _key4++\n            ) {\n                args[_key4] = arguments[_key4];\n            }\n\n            var queries = Array.isArray(args[0]) ? args[0] : args;\n\n            var options;\n            if (typeof queries[queries.length - 1] === 'object') {\n                options = queries.pop();\n            } else if (Array.isArray(args[0])) {\n                options = args[1];\n            }\n\n            var files = getFiles();\n\n            if (!queries.length)\n                return Promise.all(\n                    files.map(function(file) {\n                        return removeFile(file, options);\n                    })\n                );\n\n            // when removing by index the indexes shift after each file removal so we need to convert indexes to ids\n            var mappedQueries = queries\n                .map(function(query) {\n                    return isNumber(query) ? (files[query] ? files[query].id : null) : query;\n                })\n                .filter(function(query) {\n                    return query;\n                });\n\n            return mappedQueries.map(function(q) {\n                return removeFile(q, options);\n            });\n        };\n\n        var exports = Object.assign(\n            {},\n\n            on(),\n            {},\n\n            readWriteApi,\n            {},\n\n            createOptionAPI(store, defaultOptions),\n            {\n                /**\n                 * Override options defined in options object\n                 * @param options\n                 */\n                setOptions: setOptions,\n\n                /**\n                 * Load the given file\n                 * @param source - the source of the file (either a File, base64 data uri or url)\n                 * @param options - object, { index: 0 }\n                 */\n                addFile: addFile,\n\n                /**\n                 * Load the given files\n                 * @param sources - the sources of the files to load\n                 * @param options - object, { index: 0 }\n                 */\n                addFiles: addFiles,\n\n                /**\n                 * Returns the file objects matching the given query\n                 * @param query { string, number, null }\n                 */\n                getFile: getFile,\n\n                /**\n                 * Upload file with given name\n                 * @param query { string, number, null  }\n                 */\n                processFile: processFile,\n\n                /**\n                 * Request prepare output for file with given name\n                 * @param query { string, number, null  }\n                 */\n                prepareFile: prepareFile,\n\n                /**\n                 * Removes a file by its name\n                 * @param query { string, number, null  }\n                 */\n                removeFile: removeFile,\n\n                /**\n                 * Moves a file to a new location in the files list\n                 */\n                moveFile: function moveFile(query, index) {\n                    return store.dispatch('MOVE_ITEM', { query: query, index: index });\n                },\n\n                /**\n                 * Returns all files (wrapped in public api)\n                 */\n                getFiles: getFiles,\n\n                /**\n                 * Starts uploading all files\n                 */\n                processFiles: processFiles,\n\n                /**\n                 * Clears all files from the files list\n                 */\n                removeFiles: removeFiles,\n\n                /**\n                 * Starts preparing output of all files\n                 */\n                prepareFiles: prepareFiles,\n\n                /**\n                 * Sort list of files\n                 */\n                sort: function sort(compare) {\n                    return store.dispatch('SORT', { compare: compare });\n                },\n\n                /**\n                 * Browse the file system for a file\n                 */\n                browse: function browse() {\n                    // needs to be trigger directly as user action needs to be traceable (is not traceable in requestAnimationFrame)\n                    var input = view.element.querySelector('input[type=file]');\n                    if (input) {\n                        input.click();\n                    }\n                },\n\n                /**\n                 * Destroys the app\n                 */\n                destroy: function destroy() {\n                    // request destruction\n                    exports.fire('destroy', view.element);\n\n                    // stop active processes (file uploads, fetches, stuff like that)\n                    // loop over items and depending on states call abort for ongoing processes\n                    store.dispatch('ABORT_ALL');\n\n                    // destroy view\n                    view._destroy();\n\n                    // stop listening to resize\n                    window.removeEventListener('resize', resizeHandler);\n\n                    // stop listening to the visiblitychange event\n                    document.removeEventListener('visibilitychange', visibilityHandler);\n\n                    // dispatch destroy\n                    store.dispatch('DID_DESTROY');\n                },\n\n                /**\n                 * Inserts the plugin before the target element\n                 */\n                insertBefore: function insertBefore$1(element) {\n                    return insertBefore(view.element, element);\n                },\n\n                /**\n                 * Inserts the plugin after the target element\n                 */\n                insertAfter: function insertAfter$1(element) {\n                    return insertAfter(view.element, element);\n                },\n\n                /**\n                 * Appends the plugin to the target element\n                 */\n                appendTo: function appendTo(element) {\n                    return element.appendChild(view.element);\n                },\n\n                /**\n                 * Replaces an element with the app\n                 */\n                replaceElement: function replaceElement(element) {\n                    // insert the app before the element\n                    insertBefore(view.element, element);\n\n                    // remove the original element\n                    element.parentNode.removeChild(element);\n\n                    // remember original element\n                    originalElement = element;\n                },\n\n                /**\n                 * Restores the original element\n                 */\n                restoreElement: function restoreElement() {\n                    if (!originalElement) {\n                        return; // no element to restore\n                    }\n\n                    // restore original element\n                    insertAfter(originalElement, view.element);\n\n                    // remove our element\n                    view.element.parentNode.removeChild(view.element);\n\n                    // remove reference\n                    originalElement = null;\n                },\n\n                /**\n                 * Returns true if the app root is attached to given element\n                 * @param element\n                 */\n                isAttachedTo: function isAttachedTo(element) {\n                    return view.element === element || originalElement === element;\n                },\n\n                /**\n                 * Returns the root element\n                 */\n                element: {\n                    get: function get() {\n                        return view.element;\n                    },\n                },\n\n                /**\n                 * Returns the current pond status\n                 */\n                status: {\n                    get: function get() {\n                        return store.query('GET_STATUS');\n                    },\n                },\n            }\n        );\n\n        // Done!\n        store.dispatch('DID_INIT');\n\n        // create actual api object\n        return createObject(exports);\n    };\n\n    var createAppObject = function createAppObject() {\n        var customOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n        // default options\n        var defaultOptions = {};\n        forin(getOptions(), function(key, value) {\n            defaultOptions[key] = value[0];\n        });\n\n        // set app options\n        var app = createApp(\n            Object.assign(\n                {},\n\n                defaultOptions,\n                {},\n\n                customOptions\n            )\n        );\n\n        // return the plugin instance\n        return app;\n    };\n\n    var lowerCaseFirstLetter = function lowerCaseFirstLetter(string) {\n        return string.charAt(0).toLowerCase() + string.slice(1);\n    };\n\n    var attributeNameToPropertyName = function attributeNameToPropertyName(attributeName) {\n        return toCamels(attributeName.replace(/^data-/, ''));\n    };\n\n    var mapObject = function mapObject(object, propertyMap) {\n        // remove unwanted\n        forin(propertyMap, function(selector, mapping) {\n            forin(object, function(property, value) {\n                // create regexp shortcut\n                var selectorRegExp = new RegExp(selector);\n\n                // tests if\n                var matches = selectorRegExp.test(property);\n\n                // no match, skip\n                if (!matches) {\n                    return;\n                }\n\n                // if there's a mapping, the original property is always removed\n                delete object[property];\n\n                // should only remove, we done!\n                if (mapping === false) {\n                    return;\n                }\n\n                // move value to new property\n                if (isString(mapping)) {\n                    object[mapping] = value;\n                    return;\n                }\n\n                // move to group\n                var group = mapping.group;\n                if (isObject(mapping) && !object[group]) {\n                    object[group] = {};\n                }\n\n                object[group][lowerCaseFirstLetter(property.replace(selectorRegExp, ''))] = value;\n            });\n\n            // do submapping\n            if (mapping.mapping) {\n                mapObject(object[mapping.group], mapping.mapping);\n            }\n        });\n    };\n\n    var getAttributesAsObject = function getAttributesAsObject(node) {\n        var attributeMapping =\n            arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        // turn attributes into object\n        var attributes = [];\n        forin(node.attributes, function(index) {\n            attributes.push(node.attributes[index]);\n        });\n\n        var output = attributes\n            .filter(function(attribute) {\n                return attribute.name;\n            })\n            .reduce(function(obj, attribute) {\n                var value = attr(node, attribute.name);\n\n                obj[attributeNameToPropertyName(attribute.name)] =\n                    value === attribute.name ? true : value;\n                return obj;\n            }, {});\n\n        // do mapping of object properties\n        mapObject(output, attributeMapping);\n\n        return output;\n    };\n\n    var createAppAtElement = function createAppAtElement(element) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n        // how attributes of the input element are mapped to the options for the plugin\n        var attributeMapping = {\n            // translate to other name\n            '^class$': 'className',\n            '^multiple$': 'allowMultiple',\n            '^capture$': 'captureMethod',\n            '^webkitdirectory$': 'allowDirectoriesOnly',\n\n            // group under single property\n            '^server': {\n                group: 'server',\n                mapping: {\n                    '^process': {\n                        group: 'process',\n                    },\n\n                    '^revert': {\n                        group: 'revert',\n                    },\n\n                    '^fetch': {\n                        group: 'fetch',\n                    },\n\n                    '^restore': {\n                        group: 'restore',\n                    },\n\n                    '^load': {\n                        group: 'load',\n                    },\n                },\n            },\n\n            // don't include in object\n            '^type$': false,\n            '^files$': false,\n        };\n\n        // add additional option translators\n        applyFilters('SET_ATTRIBUTE_TO_OPTION_MAP', attributeMapping);\n\n        // create final options object by setting options object and then overriding options supplied on element\n        var mergedOptions = Object.assign({}, options);\n\n        var attributeOptions = getAttributesAsObject(\n            element.nodeName === 'FIELDSET' ? element.querySelector('input[type=file]') : element,\n            attributeMapping\n        );\n\n        // merge with options object\n        Object.keys(attributeOptions).forEach(function(key) {\n            if (isObject(attributeOptions[key])) {\n                if (!isObject(mergedOptions[key])) {\n                    mergedOptions[key] = {};\n                }\n                Object.assign(mergedOptions[key], attributeOptions[key]);\n            } else {\n                mergedOptions[key] = attributeOptions[key];\n            }\n        });\n\n        // if parent is a fieldset, get files from parent by selecting all input fields that are not file upload fields\n        // these will then be automatically set to the initial files\n        mergedOptions.files = (options.files || []).concat(\n            Array.from(element.querySelectorAll('input:not([type=file])')).map(function(input) {\n                return {\n                    source: input.value,\n                    options: {\n                        type: input.dataset.type,\n                    },\n                };\n            })\n        );\n\n        // build plugin\n        var app = createAppObject(mergedOptions);\n\n        // add already selected files\n        if (element.files) {\n            Array.from(element.files).forEach(function(file) {\n                app.addFile(file);\n            });\n        }\n\n        // replace the target element\n        app.replaceElement(element);\n\n        // expose\n        return app;\n    };\n\n    // if an element is passed, we create the instance at that element, if not, we just create an up object\n    var createApp$1 = function createApp() {\n        return isNode(arguments.length <= 0 ? undefined : arguments[0])\n            ? createAppAtElement.apply(void 0, arguments)\n            : createAppObject.apply(void 0, arguments);\n    };\n\n    var PRIVATE_METHODS = ['fire', '_read', '_write'];\n\n    var createAppAPI = function createAppAPI(app) {\n        var api = {};\n\n        copyObjectPropertiesToObject(app, api, PRIVATE_METHODS);\n\n        return api;\n    };\n\n    /**\n     * Replaces placeholders in given string with replacements\n     * @param string - \"Foo {bar}\"\"\n     * @param replacements - { \"bar\": 10 }\n     */\n    var replaceInString = function replaceInString(string, replacements) {\n        return string.replace(/(?:{([a-zA-Z]+)})/g, function(match, group) {\n            return replacements[group];\n        });\n    };\n\n    var createWorker = function createWorker(fn) {\n        var workerBlob = new Blob(['(', fn.toString(), ')()'], {\n            type: 'application/javascript',\n        });\n\n        var workerURL = URL.createObjectURL(workerBlob);\n        var worker = new Worker(workerURL);\n\n        return {\n            transfer: function transfer(message, cb) {},\n            post: function post(message, cb, transferList) {\n                var id = getUniqueId();\n\n                worker.onmessage = function(e) {\n                    if (e.data.id === id) {\n                        cb(e.data.message);\n                    }\n                };\n\n                worker.postMessage(\n                    {\n                        id: id,\n                        message: message,\n                    },\n\n                    transferList\n                );\n            },\n            terminate: function terminate() {\n                worker.terminate();\n                URL.revokeObjectURL(workerURL);\n            },\n        };\n    };\n\n    var loadImage = function loadImage(url) {\n        return new Promise(function(resolve, reject) {\n            var img = new Image();\n            img.onload = function() {\n                resolve(img);\n            };\n            img.onerror = function(e) {\n                reject(e);\n            };\n            img.src = url;\n        });\n    };\n\n    var renameFile = function renameFile(file, name) {\n        var renamedFile = file.slice(0, file.size, file.type);\n        renamedFile.lastModifiedDate = file.lastModifiedDate;\n        renamedFile.name = name;\n        return renamedFile;\n    };\n\n    var copyFile = function copyFile(file) {\n        return renameFile(file, file.name);\n    };\n\n    // already registered plugins (can't register twice)\n    var registeredPlugins = [];\n\n    // pass utils to plugin\n    var createAppPlugin = function createAppPlugin(plugin) {\n        // already registered\n        if (registeredPlugins.includes(plugin)) {\n            return;\n        }\n\n        // remember this plugin\n        registeredPlugins.push(plugin);\n\n        // setup!\n        var pluginOutline = plugin({\n            addFilter: addFilter,\n            utils: {\n                Type: Type,\n                forin: forin,\n                isString: isString,\n                isFile: isFile,\n                toNaturalFileSize: toNaturalFileSize,\n                replaceInString: replaceInString,\n                getExtensionFromFilename: getExtensionFromFilename,\n                getFilenameWithoutExtension: getFilenameWithoutExtension,\n                guesstimateMimeType: guesstimateMimeType,\n                getFileFromBlob: getFileFromBlob,\n                getFilenameFromURL: getFilenameFromURL,\n                createRoute: createRoute,\n                createWorker: createWorker,\n                createView: createView,\n                createItemAPI: createItemAPI,\n                loadImage: loadImage,\n                copyFile: copyFile,\n                renameFile: renameFile,\n                createBlob: createBlob,\n                applyFilterChain: applyFilterChain,\n                text: text,\n                getNumericAspectRatioFromString: getNumericAspectRatioFromString,\n            },\n\n            views: {\n                fileActionButton: fileActionButton,\n            },\n        });\n\n        // add plugin options to default options\n        extendDefaultOptions(pluginOutline.options);\n    };\n\n    // feature detection used by supported() method\n    var isOperaMini = function isOperaMini() {\n        return Object.prototype.toString.call(window.operamini) === '[object OperaMini]';\n    };\n    var hasPromises = function hasPromises() {\n        return 'Promise' in window;\n    };\n    var hasBlobSlice = function hasBlobSlice() {\n        return 'slice' in Blob.prototype;\n    };\n    var hasCreateObjectURL = function hasCreateObjectURL() {\n        return 'URL' in window && 'createObjectURL' in window.URL;\n    };\n    var hasVisibility = function hasVisibility() {\n        return 'visibilityState' in document;\n    };\n    var hasTiming = function hasTiming() {\n        return 'performance' in window;\n    }; // iOS 8.x\n    var hasCSSSupports = function hasCSSSupports() {\n        return 'supports' in (window.CSS || {});\n    }; // use to detect Safari 9+\n    var isIE11 = function isIE11() {\n        return /MSIE|Trident/.test(window.navigator.userAgent);\n    };\n\n    var supported = (function() {\n        // Runs immediately and then remembers result for subsequent calls\n        var isSupported =\n            // Has to be a browser\n            isBrowser() &&\n            // Can't run on Opera Mini due to lack of everything\n            !isOperaMini() &&\n            // Require these APIs to feature detect a modern browser\n            hasVisibility() &&\n            hasPromises() &&\n            hasBlobSlice() &&\n            hasCreateObjectURL() &&\n            hasTiming() &&\n            // doesn't need CSSSupports but is a good way to detect Safari 9+ (we do want to support IE11 though)\n            (hasCSSSupports() || isIE11());\n\n        return function() {\n            return isSupported;\n        };\n    })();\n\n    /**\n     * Plugin internal state (over all instances)\n     */\n    var state = {\n        // active app instances, used to redraw the apps and to find the later\n        apps: [],\n    };\n\n    // plugin name\n    var name = 'filepond';\n\n    /**\n     * Public Plugin methods\n     */\n    var fn = function fn() {};\n    exports.Status = {};\n    exports.FileStatus = {};\n    exports.FileOrigin = {};\n    exports.OptionTypes = {};\n    exports.create = fn;\n    exports.destroy = fn;\n    exports.parse = fn;\n    exports.find = fn;\n    exports.registerPlugin = fn;\n    exports.getOptions = fn;\n    exports.setOptions = fn;\n\n    // if not supported, no API\n    if (supported()) {\n        // start painter and fire load event\n        createPainter(\n            function() {\n                state.apps.forEach(function(app) {\n                    return app._read();\n                });\n            },\n            function(ts) {\n                state.apps.forEach(function(app) {\n                    return app._write(ts);\n                });\n            }\n        );\n\n        // fire loaded event so we know when FilePond is available\n        var dispatch = function dispatch() {\n            // let others know we have area ready\n            document.dispatchEvent(\n                new CustomEvent('FilePond:loaded', {\n                    detail: {\n                        supported: supported,\n                        create: exports.create,\n                        destroy: exports.destroy,\n                        parse: exports.parse,\n                        find: exports.find,\n                        registerPlugin: exports.registerPlugin,\n                        setOptions: exports.setOptions,\n                    },\n                })\n            );\n\n            // clean up event\n            document.removeEventListener('DOMContentLoaded', dispatch);\n        };\n\n        if (document.readyState !== 'loading') {\n            // move to back of execution queue, FilePond should have been exported by then\n            setTimeout(function() {\n                return dispatch();\n            }, 0);\n        } else {\n            document.addEventListener('DOMContentLoaded', dispatch);\n        }\n\n        // updates the OptionTypes object based on the current options\n        var updateOptionTypes = function updateOptionTypes() {\n            return forin(getOptions(), function(key, value) {\n                exports.OptionTypes[key] = value[1];\n            });\n        };\n\n        exports.Status = Object.assign({}, Status);\n        exports.FileOrigin = Object.assign({}, FileOrigin);\n        exports.FileStatus = Object.assign({}, ItemStatus);\n\n        exports.OptionTypes = {};\n        updateOptionTypes();\n\n        // create method, creates apps and adds them to the app array\n        exports.create = function create() {\n            var app = createApp$1.apply(void 0, arguments);\n            app.on('destroy', exports.destroy);\n            state.apps.push(app);\n            return createAppAPI(app);\n        };\n\n        // destroys apps and removes them from the app array\n        exports.destroy = function destroy(hook) {\n            // returns true if the app was destroyed successfully\n            var indexToRemove = state.apps.findIndex(function(app) {\n                return app.isAttachedTo(hook);\n            });\n            if (indexToRemove >= 0) {\n                // remove from apps\n                var app = state.apps.splice(indexToRemove, 1)[0];\n\n                // restore original dom element\n                app.restoreElement();\n\n                return true;\n            }\n\n            return false;\n        };\n\n        // parses the given context for plugins (does not include the context element itself)\n        exports.parse = function parse(context) {\n            // get all possible hooks\n            var matchedHooks = Array.from(context.querySelectorAll('.' + name));\n\n            // filter out already active hooks\n            var newHooks = matchedHooks.filter(function(newHook) {\n                return !state.apps.find(function(app) {\n                    return app.isAttachedTo(newHook);\n                });\n            });\n\n            // create new instance for each hook\n            return newHooks.map(function(hook) {\n                return exports.create(hook);\n            });\n        };\n\n        // returns an app based on the given element hook\n        exports.find = function find(hook) {\n            var app = state.apps.find(function(app) {\n                return app.isAttachedTo(hook);\n            });\n            if (!app) {\n                return null;\n            }\n            return createAppAPI(app);\n        };\n\n        // adds a plugin extension\n        exports.registerPlugin = function registerPlugin() {\n            for (\n                var _len = arguments.length, plugins = new Array(_len), _key = 0;\n                _key < _len;\n                _key++\n            ) {\n                plugins[_key] = arguments[_key];\n            }\n\n            // register plugins\n            plugins.forEach(createAppPlugin);\n\n            // update OptionTypes, each plugin might have extended the default options\n            updateOptionTypes();\n        };\n\n        exports.getOptions = function getOptions$1() {\n            var opts = {};\n            forin(getOptions(), function(key, value) {\n                opts[key] = value[0];\n            });\n            return opts;\n        };\n\n        exports.setOptions = function setOptions$1(opts) {\n            if (isObject(opts)) {\n                // update existing plugins\n                state.apps.forEach(function(app) {\n                    app.setOptions(opts);\n                });\n\n                // override defaults\n                setOptions(opts);\n            }\n\n            // return new options\n            return exports.getOptions();\n        };\n    }\n\n    exports.supported = supported;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n});\n", "import { showToastMessage } from './show_toast_message';\nimport makeRequest from './make_request';\n\nexport function updateAdditionalInfo(target, options = {}) {\n  let value = target.type === 'checkbox' ? target.checked : target.value;\n\n  makeRequest('/list/update-additional-info', {\n    method: 'PATCH',\n    data: {\n      oid: document.querySelector('#oid').value,\n      name: target.id,\n      value: value,\n      options: options,\n    },\n  })\n    .then(json => {\n      if (json.status === true) {\n        document\n          .querySelectorAll(\n            `table tr td.${target.dataset.value}, table span.${target.dataset.value}`\n          )\n          .forEach(element => {\n            if (target.checked) {\n              element.classList.remove('d-none');\n              element.classList.add('d-lg-table-cell');\n            } else {\n              element.classList.remove('d-lg-table-cell');\n              element.classList.add('d-none');\n            }\n          });\n      } else {\n        showToastMessage(json.error, { autohide: false, type: 'bg-danger' });\n      }\n    })\n    .catch(err => console.log(err));\n}\n", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));", "import { showSubmitButton } from './show_submit_buttons';\n\nexport function addFields(target, block) {\n  const { id, container, association, fields } = target.dataset;\n  const time = new Date().getTime();\n  const regexp = new RegExp(id, 'g');\n  const point = document.querySelector(\n    `#${association} ${container}.last-row-with-button`\n  );\n  const lastElBeforeInsert = point.previousElementSibling;\n\n  point.insertAdjacentHTML(\n    'beforebegin',\n    fields.replace(regexp, time.toString())\n  );\n\n  let copiedDiv = point.previousElementSibling;\n\n  if (block) {\n    block(copiedDiv, lastElBeforeInsert);\n  }\n\n  showSubmitButton(target);\n}\n", "import { showSubmitButton } from './show_submit_buttons';\n\nexport function deleteResource(target, block) {\n  const { parent: parentClass } = target.dataset;\n  const parentEl = target.closest(`.${parentClass}`);\n\n  parentEl.querySelector('[name*=\"_destroy\"]').value = true;\n  parentEl.classList.remove('d-grid', 'd-flex', 'd-table-row');\n  parentEl.style.display = 'none';\n\n  if (block) {\n    block(parentClass, parentEl); // custom code\n  }\n\n  showSubmitButton(target);\n}\n", "/**\n * Update the position\n * @param {String} parentName\n * @description updates the position of given parent in tree\n */\nexport function updatePozicia(parentName) {\n\n\tif (!['.invoiced-item', '.b-account', '.ciselny-rad-cislo', '.ud-predkontacia', \".partner-bank-ucet\"].includes(parentName)) {\n\t\treturn false;\n\t}\n\n\tdocument.querySelectorAll(`${parentName}:not([style=\"display: none;\"])`).forEach((item, i) => {\n\t\titem.querySelector('[id*=\"_pozicia\"]').value = i + 1;\n\t});\n}", "/*\n * HTML5Sortable package\n * https://github.com/lukasoppermann/html5sortable\n *\n * Maintained by Lukas Oppermann <lukas@vea.re>\n *\n * Released under the MIT license.\n */\n/**\n * Get or set data on element\n * @param {HTMLElement} element\n * @param {string} key\n * @param {any} value\n * @return {*}\n */\nfunction addData(element, key, value) {\n    if (value === undefined) {\n        return element && element.h5s && element.h5s.data && element.h5s.data[key];\n    }\n    else {\n        element.h5s = element.h5s || {};\n        element.h5s.data = element.h5s.data || {};\n        element.h5s.data[key] = value;\n    }\n}\n/**\n * Remove data from element\n * @param {HTMLElement} element\n */\nfunction removeData(element) {\n    if (element.h5s) {\n        delete element.h5s.data;\n    }\n}\n\n/* eslint-env browser */\n/**\n * Filter only wanted nodes\n * @param {NodeList|HTMLCollection|Array} nodes\n * @param {String} selector\n * @returns {Array}\n */\nvar filter = (function (nodes, selector) {\n    if (!(nodes instanceof NodeList || nodes instanceof HTMLCollection || nodes instanceof Array)) {\n        throw new Error('You must provide a nodeList/HTMLCollection/Array of elements to be filtered.');\n    }\n    if (typeof selector !== 'string') {\n        return Array.from(nodes);\n    }\n    return Array.from(nodes).filter(function (item) { return item.nodeType === 1 && item.matches(selector); });\n});\n\nvar stores = new Map();\n/* eslint-enable no-use-before-define */\n/**\n * Stores data & configurations per Sortable\n * @param {Object} config\n */\nvar Store = /** @class */ (function () {\n    function Store() {\n        this._config = new Map(); // eslint-disable-line no-undef\n        this._placeholder = undefined; // eslint-disable-line no-undef\n        this._data = new Map(); // eslint-disable-line no-undef\n    }\n    Object.defineProperty(Store.prototype, \"config\", {\n        /**\n         * get the configuration map of a class instance\n         * @method config\n         * @return {object}\n         */\n        get: function () {\n            // transform Map to object\n            var config = {};\n            this._config.forEach(function (value, key) {\n                config[key] = value;\n            });\n            // return object\n            return config;\n        },\n        /**\n         * set the configuration of a class instance\n         * @method config\n         * @param {object} config object of configurations\n         */\n        set: function (config) {\n            if (typeof config !== 'object') {\n                throw new Error('You must provide a valid configuration object to the config setter.');\n            }\n            // combine config with default\n            var mergedConfig = Object.assign({}, config);\n            // add config to map\n            this._config = new Map(Object.entries(mergedConfig));\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * set individual configuration of a class instance\n     * @method setConfig\n     * @param  key valid configuration key\n     * @param  value any value\n     * @return void\n     */\n    Store.prototype.setConfig = function (key, value) {\n        if (!this._config.has(key)) {\n            throw new Error(\"Trying to set invalid configuration item: \".concat(key));\n        }\n        // set config\n        this._config.set(key, value);\n    };\n    /**\n     * get an individual configuration of a class instance\n     * @method getConfig\n     * @param  key valid configuration key\n     * @return any configuration value\n     */\n    Store.prototype.getConfig = function (key) {\n        if (!this._config.has(key)) {\n            throw new Error(\"Invalid configuration item requested: \".concat(key));\n        }\n        return this._config.get(key);\n    };\n    Object.defineProperty(Store.prototype, \"placeholder\", {\n        /**\n         * get the placeholder for a class instance\n         * @method placeholder\n         * @return {HTMLElement|null}\n         */\n        get: function () {\n            return this._placeholder;\n        },\n        /**\n         * set the placeholder for a class instance\n         * @method placeholder\n         * @param {HTMLElement} placeholder\n         * @return {void}\n         */\n        set: function (placeholder) {\n            if (!(placeholder instanceof HTMLElement) && placeholder !== null) {\n                throw new Error('A placeholder must be an html element or null.');\n            }\n            this._placeholder = placeholder;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * set an data entry\n     * @method setData\n     * @param {string} key\n     * @param {any} value\n     * @return {void}\n     */\n    Store.prototype.setData = function (key, value) {\n        if (typeof key !== 'string') {\n            throw new Error('The key must be a string.');\n        }\n        this._data.set(key, value);\n    };\n    /**\n     * get an data entry\n     * @method getData\n     * @param {string} key an existing key\n     * @return {any}\n     */\n    Store.prototype.getData = function (key) {\n        if (typeof key !== 'string') {\n            throw new Error('The key must be a string.');\n        }\n        return this._data.get(key);\n    };\n    /**\n     * delete an data entry\n     * @method deleteData\n     * @param {string} key an existing key\n     * @return {boolean}\n     */\n    Store.prototype.deleteData = function (key) {\n        if (typeof key !== 'string') {\n            throw new Error('The key must be a string.');\n        }\n        return this._data.delete(key);\n    };\n    return Store;\n}());\n/**\n * @param {HTMLElement} sortableElement\n * @returns {Class: Store}\n */\nvar store = (function (sortableElement) {\n    // if sortableElement is wrong type\n    if (!(sortableElement instanceof HTMLElement)) {\n        throw new Error('Please provide a sortable to the store function.');\n    }\n    // create new instance if not avilable\n    if (!stores.has(sortableElement)) {\n        stores.set(sortableElement, new Store());\n    }\n    // return instance\n    return stores.get(sortableElement);\n});\n\n/**\n * @param {Array|HTMLElement} element\n * @param {Function} callback\n * @param {string} event\n */\nfunction addEventListener(element, eventName, callback) {\n    if (element instanceof Array) {\n        for (var i = 0; i < element.length; ++i) {\n            addEventListener(element[i], eventName, callback);\n        }\n        return;\n    }\n    element.addEventListener(eventName, callback);\n    store(element).setData(\"event\".concat(eventName), callback);\n}\n/**\n * @param {Array<HTMLElement>|HTMLElement} element\n * @param {string} eventName\n */\nfunction removeEventListener(element, eventName) {\n    if (element instanceof Array) {\n        for (var i = 0; i < element.length; ++i) {\n            removeEventListener(element[i], eventName);\n        }\n        return;\n    }\n    element.removeEventListener(eventName, store(element).getData(\"event\".concat(eventName)));\n    store(element).deleteData(\"event\".concat(eventName));\n}\n\n/**\n * @param {Array<HTMLElement>|HTMLElement} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction addAttribute(element, attribute, value) {\n    if (element instanceof Array) {\n        for (var i = 0; i < element.length; ++i) {\n            addAttribute(element[i], attribute, value);\n        }\n        return;\n    }\n    element.setAttribute(attribute, value);\n}\n/**\n * @param {Array|HTMLElement} element\n * @param {string} attribute\n */\nfunction removeAttribute(element, attribute) {\n    if (element instanceof Array) {\n        for (var i = 0; i < element.length; ++i) {\n            removeAttribute(element[i], attribute);\n        }\n        return;\n    }\n    element.removeAttribute(attribute);\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {Object}\n */\nvar offset = (function (element) {\n    if (!element.parentElement || element.getClientRects().length === 0) {\n        throw new Error('target element must be part of the dom');\n    }\n    var rect = element.getClientRects()[0];\n    return {\n        left: rect.left + window.pageXOffset,\n        right: rect.right + window.pageXOffset,\n        top: rect.top + window.pageYOffset,\n        bottom: rect.bottom + window.pageYOffset\n    };\n});\n\n/**\n * Creates and returns a new debounced version of the passed function which will postpone its execution until after wait milliseconds have elapsed\n * @param {Function} func to debounce\n * @param {number} time to wait before calling function with latest arguments, 0 - no debounce\n * @returns {function} - debounced function\n */\nvar debounce = (function (func, wait) {\n    if (wait === void 0) { wait = 0; }\n    var timeout;\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        clearTimeout(timeout);\n        timeout = setTimeout(function () {\n            func.apply(void 0, args);\n        }, wait);\n    };\n});\n\n/* eslint-env browser */\n/**\n * Get position of the element relatively to its sibling elements\n * @param {HTMLElement} element\n * @returns {number}\n */\nvar getIndex = (function (element, elementList) {\n    if (!(element instanceof HTMLElement) || !(elementList instanceof NodeList || elementList instanceof HTMLCollection || elementList instanceof Array)) {\n        throw new Error('You must provide an element and a list of elements.');\n    }\n    return Array.from(elementList).indexOf(element);\n});\n\n/* eslint-env browser */\n/**\n * Test whether element is in DOM\n * @param {HTMLElement} element\n * @returns {boolean}\n */\nvar isInDom = (function (element) {\n    if (!(element instanceof HTMLElement)) {\n        throw new Error('Element is not a node element.');\n    }\n    return element.parentNode !== null;\n});\n\n/* eslint-env browser */\n/**\n * Insert node before or after target\n * @param {HTMLElement} referenceNode - reference element\n * @param {HTMLElement} newElement - element to be inserted\n * @param {String} position - insert before or after reference element\n */\nvar insertNode = function (referenceNode, newElement, position) {\n    if (!(referenceNode instanceof HTMLElement) || !(referenceNode.parentElement instanceof HTMLElement)) {\n        throw new Error('target and element must be a node');\n    }\n    referenceNode.parentElement.insertBefore(newElement, (position === 'before' ? referenceNode : referenceNode.nextElementSibling));\n};\n/**\n * Insert before target\n * @param {HTMLElement} target\n * @param {HTMLElement} element\n */\nvar insertBefore = function (target, element) { return insertNode(target, element, 'before'); };\n/**\n * Insert after target\n * @param {HTMLElement} target\n * @param {HTMLElement} element\n */\nvar insertAfter = function (target, element) { return insertNode(target, element, 'after'); };\n\n/* eslint-env browser */\n/**\n * Filter only wanted nodes\n * @param {HTMLElement} sortableContainer\n * @param {Function} customSerializer\n * @returns {Array}\n */\nvar serialize = (function (sortableContainer, customItemSerializer, customContainerSerializer) {\n    if (customItemSerializer === void 0) { customItemSerializer = function (serializedItem, sortableContainer) { return serializedItem; }; }\n    if (customContainerSerializer === void 0) { customContainerSerializer = function (serializedContainer) { return serializedContainer; }; }\n    // check for valid sortableContainer\n    if (!(sortableContainer instanceof HTMLElement) || !sortableContainer.isSortable === true) {\n        throw new Error('You need to provide a sortableContainer to be serialized.');\n    }\n    // check for valid serializers\n    if (typeof customItemSerializer !== 'function' || typeof customContainerSerializer !== 'function') {\n        throw new Error('You need to provide a valid serializer for items and the container.');\n    }\n    // get options\n    var options = addData(sortableContainer, 'opts');\n    var item = options.items;\n    // serialize container\n    var items = filter(sortableContainer.children, item);\n    var serializedItems = items.map(function (item) {\n        return {\n            parent: sortableContainer,\n            node: item,\n            html: item.outerHTML,\n            index: getIndex(item, items)\n        };\n    });\n    // serialize container\n    var container = {\n        node: sortableContainer,\n        itemCount: serializedItems.length\n    };\n    return {\n        container: customContainerSerializer(container),\n        items: serializedItems.map(function (item) { return customItemSerializer(item, sortableContainer); })\n    };\n});\n\n/* eslint-env browser */\n/**\n * create a placeholder element\n * @param {HTMLElement} sortableElement a single sortable\n * @param {string|undefined} placeholder a string representing an html element\n * @param {string} placeholderClasses a string representing the classes that should be added to the placeholder\n */\nvar makePlaceholder = (function (sortableElement, placeholder, placeholderClass) {\n    var _a;\n    if (placeholderClass === void 0) { placeholderClass = 'sortable-placeholder'; }\n    if (!(sortableElement instanceof HTMLElement)) {\n        throw new Error('You must provide a valid element as a sortable.');\n    }\n    // if placeholder is not an element\n    if (!(placeholder instanceof HTMLElement) && placeholder !== undefined) {\n        throw new Error('You must provide a valid element as a placeholder or set ot to undefined.');\n    }\n    // if no placeholder element is given\n    if (placeholder === undefined) {\n        if (['UL', 'OL'].includes(sortableElement.tagName)) {\n            placeholder = document.createElement('li');\n        }\n        else if (['TABLE', 'TBODY'].includes(sortableElement.tagName)) {\n            placeholder = document.createElement('tr');\n            // set colspan to always all rows, otherwise the item can only be dropped in first column\n            placeholder.innerHTML = '<td colspan=\"100\"></td>';\n        }\n        else {\n            placeholder = document.createElement('div');\n        }\n    }\n    // add classes to placeholder\n    if (typeof placeholderClass === 'string') {\n        (_a = placeholder.classList).add.apply(_a, placeholderClass.split(' '));\n    }\n    return placeholder;\n});\n\n/* eslint-env browser */\n/**\n * Get height of an element including padding\n * @param {HTMLElement} element an dom element\n */\nvar getElementHeight = (function (element) {\n    if (!(element instanceof HTMLElement)) {\n        throw new Error('You must provide a valid dom element');\n    }\n    // get calculated style of element\n    var style = window.getComputedStyle(element);\n    // get only height if element has box-sizing: border-box specified\n    if (style.getPropertyValue('box-sizing') === 'border-box') {\n        return parseInt(style.getPropertyValue('height'), 10);\n    }\n    // pick applicable properties, convert to int and reduce by adding\n    return ['height', 'padding-top', 'padding-bottom']\n        .map(function (key) {\n        var int = parseInt(style.getPropertyValue(key), 10);\n        return isNaN(int) ? 0 : int;\n    })\n        .reduce(function (sum, value) { return sum + value; });\n});\n\n/* eslint-env browser */\n/**\n * Get width of an element including padding\n * @param {HTMLElement} element an dom element\n */\nvar getElementWidth = (function (element) {\n    if (!(element instanceof HTMLElement)) {\n        throw new Error('You must provide a valid dom element');\n    }\n    // get calculated style of element\n    var style = window.getComputedStyle(element);\n    // pick applicable properties, convert to int and reduce by adding\n    return ['width', 'padding-left', 'padding-right']\n        .map(function (key) {\n        var int = parseInt(style.getPropertyValue(key), 10);\n        return isNaN(int) ? 0 : int;\n    })\n        .reduce(function (sum, value) { return sum + value; });\n});\n\n/* eslint-env browser */\n/**\n * get handle or return item\n * @param {Array<HTMLElement>} items\n * @param {string} selector\n */\nvar getHandles = (function (items, selector) {\n    if (!(items instanceof Array)) {\n        throw new Error('You must provide a Array of HTMLElements to be filtered.');\n    }\n    if (typeof selector !== 'string') {\n        return items;\n    }\n    return items\n        // remove items without handle from array\n        .filter(function (item) {\n        return item.querySelector(selector) instanceof HTMLElement ||\n            (item.shadowRoot && item.shadowRoot.querySelector(selector) instanceof HTMLElement);\n    })\n        // replace item with handle in array\n        .map(function (item) {\n        return item.querySelector(selector) || (item.shadowRoot && item.shadowRoot.querySelector(selector));\n    });\n});\n\n/**\n * @param {Event} event\n * @returns {HTMLElement}\n */\nvar getEventTarget = (function (event) {\n    return (event.composedPath && event.composedPath()[0]) || event.target;\n});\n\n/* eslint-env browser */\n/**\n * defaultDragImage returns the current item as dragged image\n * @param {HTMLElement} draggedElement - the item that the user drags\n * @param {object} elementOffset - an object with the offsets top, left, right & bottom\n * @param {Event} event - the original drag event object\n * @return {object} with element, posX and posY properties\n */\nvar defaultDragImage = function (draggedElement, elementOffset, event) {\n    return {\n        element: draggedElement,\n        posX: event.pageX - elementOffset.left,\n        posY: event.pageY - elementOffset.top\n    };\n};\n/**\n * attaches an element as the drag image to an event\n * @param {Event} event - the original drag event object\n * @param {HTMLElement} draggedElement - the item that the user drags\n * @param {Function} customDragImage - function to create a custom dragImage\n * @return void\n */\nvar setDragImage = (function (event, draggedElement, customDragImage) {\n    // check if event is provided\n    if (!(event instanceof Event)) {\n        throw new Error('setDragImage requires a DragEvent as the first argument.');\n    }\n    // check if draggedElement is provided\n    if (!(draggedElement instanceof HTMLElement)) {\n        throw new Error('setDragImage requires the dragged element as the second argument.');\n    }\n    // set default function of none provided\n    if (!customDragImage) {\n        customDragImage = defaultDragImage;\n    }\n    // set default function if none is provided\n    if (customDragImage instanceof HTMLElement) {\n        var elementOffset = offset(customDragImage);\n        var dragImage = {\n            element: customDragImage,\n            posX: event.pageX - elementOffset.left,\n            posY: event.pageY - elementOffset.top\n        };\n        // set the drag image on the event\n        event.dataTransfer.effectAllowed = 'copyMove';\n        event.dataTransfer.setData('text/plain', getEventTarget(event).id);\n        event.dataTransfer.setDragImage(dragImage.element, event.offsetX, event.offsetY);\n    }\n    else if (typeof customDragImage === 'function' && event.dataTransfer.setDragImage) {\n        // check if setDragImage method is available\n        // get the elements offset\n        var elementOffset = offset(draggedElement);\n        // get the dragImage\n        var dragImage = customDragImage(draggedElement, elementOffset, event);\n        // check if custom function returns correct values\n        if (!(dragImage.element instanceof HTMLElement) || typeof dragImage.posX !== 'number' || typeof dragImage.posY !== 'number') {\n            throw new Error('The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer].');\n        }\n        // needs to be set for HTML5 drag & drop to work\n        event.dataTransfer.effectAllowed = 'copyMove';\n        // Firefox requires it to use the event target's id for the data\n        event.dataTransfer.setData('text/plain', getEventTarget(event).id);\n        // set the drag image on the event\n        event.dataTransfer.setDragImage(dragImage.element, dragImage.posX, dragImage.posY);\n    }\n});\n\n/**\n * Check if curList accepts items from destList\n * @param {sortable} destination the container an item is move to\n * @param {sortable} origin the container an item comes from\n */\nvar listsConnected = (function (destination, origin) {\n    // check if valid sortable\n    if (destination.isSortable === true) {\n        var acceptFrom = store(destination).getConfig('acceptFrom');\n        // check if acceptFrom is valid\n        if (acceptFrom !== null && acceptFrom !== false && typeof acceptFrom !== 'string') {\n            throw new Error('HTML5Sortable: Wrong argument, \"acceptFrom\" must be \"null\", \"false\", or a valid selector string.');\n        }\n        if (acceptFrom !== null) {\n            return acceptFrom !== false && acceptFrom.split(',').filter(function (sel) {\n                return sel.length > 0 && origin.matches(sel);\n            }).length > 0;\n        }\n        // drop in same list\n        if (destination === origin) {\n            return true;\n        }\n        // check if lists are connected with connectWith\n        if (store(destination).getConfig('connectWith') !== undefined && store(destination).getConfig('connectWith') !== null) {\n            return store(destination).getConfig('connectWith') === store(origin).getConfig('connectWith');\n        }\n    }\n    return false;\n});\n\n/**\n * default configurations\n */\nvar defaultConfiguration = {\n    items: null,\n    // deprecated\n    connectWith: null,\n    // deprecated\n    disableIEFix: null,\n    acceptFrom: null,\n    copy: false,\n    placeholder: null,\n    placeholderClass: 'sortable-placeholder',\n    draggingClass: 'sortable-dragging',\n    hoverClass: false,\n    dropTargetContainerClass: false,\n    debounce: 0,\n    throttleTime: 100,\n    maxItems: 0,\n    itemSerializer: undefined,\n    containerSerializer: undefined,\n    customDragImage: null,\n    orientation: 'vertical'\n};\n\n/**\n * make sure a function is only called once within the given amount of time\n * @param {Function} fn the function to throttle\n * @param {number} threshold time limit for throttling\n */\n// must use function to keep this context\nfunction throttle (fn, threshold) {\n    var _this = this;\n    if (threshold === void 0) { threshold = 250; }\n    // check function\n    if (typeof fn !== 'function') {\n        throw new Error('You must provide a function as the first argument for throttle.');\n    }\n    // check threshold\n    if (typeof threshold !== 'number') {\n        throw new Error('You must provide a number as the second argument for throttle.');\n    }\n    var lastEventTimestamp = null;\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var now = Date.now();\n        if (lastEventTimestamp === null || now - lastEventTimestamp >= threshold) {\n            lastEventTimestamp = now;\n            fn.apply(_this, args);\n        }\n    };\n}\n\n/* eslint-env browser */\n/**\n * enable or disable hoverClass on mouseenter/leave if container Items\n * @param {sortable} sortableContainer a valid sortableContainer\n * @param {boolean} enable enable or disable event\n */\nvar enableHoverClass = (function (sortableContainer, enable) {\n    if (typeof store(sortableContainer).getConfig('hoverClass') === 'string') {\n        var hoverClasses_1 = store(sortableContainer).getConfig('hoverClass').split(' ');\n        // add class on hover\n        if (enable === true) {\n            addEventListener(sortableContainer, 'mousemove', throttle(function (event) {\n                // check of no mouse button was pressed when mousemove started == no drag\n                if (event.buttons === 0) {\n                    filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) {\n                        var _a, _b;\n                        if (item === event.target || item.contains(event.target)) {\n                            (_a = item.classList).add.apply(_a, hoverClasses_1);\n                        }\n                        else {\n                            (_b = item.classList).remove.apply(_b, hoverClasses_1);\n                        }\n                    });\n                }\n            }, store(sortableContainer).getConfig('throttleTime')));\n            // remove class on leave\n            addEventListener(sortableContainer, 'mouseleave', function () {\n                filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) {\n                    var _a;\n                    (_a = item.classList).remove.apply(_a, hoverClasses_1);\n                });\n            });\n            // remove events\n        }\n        else {\n            removeEventListener(sortableContainer, 'mousemove');\n            removeEventListener(sortableContainer, 'mouseleave');\n        }\n    }\n});\n\n/* eslint-env browser */\n/*\n * variables global to the plugin\n */\nvar dragging;\nvar draggingHeight;\nvar draggingWidth;\n/*\n * Keeps track of the initialy selected list, where 'dragstart' event was triggered\n * It allows us to move the data in between individual Sortable List instances\n */\n// Origin List - data from before any item was changed\nvar originContainer;\nvar originIndex;\nvar originElementIndex;\nvar originItemsBeforeUpdate;\n// Previous Sortable Container - we dispatch as sortenter event when a\n// dragged item enters a sortableContainer for the first time\nvar previousContainer;\n// Destination List - data from before any item was changed\nvar destinationItemsBeforeUpdate;\n/**\n * remove event handlers from items\n * @param {Array|NodeList} items\n */\nvar removeItemEvents = function (items) {\n    removeEventListener(items, 'dragstart');\n    removeEventListener(items, 'dragend');\n    removeEventListener(items, 'dragover');\n    removeEventListener(items, 'dragenter');\n    removeEventListener(items, 'drop');\n    removeEventListener(items, 'mouseenter');\n    removeEventListener(items, 'mouseleave');\n};\n/**\n *\n * remove Store map values\n * @param {Array|NodeList} items\n */\nvar removeStoreData = function (items) {\n    if (items instanceof Array) {\n        items.forEach(function (element) { return stores.delete(element); });\n    }\n};\n// Remove container events\nvar removeContainerEvents = function (originContainer, previousContainer) {\n    if (originContainer) {\n        removeEventListener(originContainer, 'dragleave');\n    }\n    if (previousContainer && (previousContainer !== originContainer)) {\n        removeEventListener(previousContainer, 'dragleave');\n    }\n};\n/**\n * getDragging returns the current element to drag or\n * a copy of the element.\n * Is Copy Active for sortable\n * @param {HTMLElement} draggedItem - the item that the user drags\n * @param {HTMLElement} sortable a single sortable\n */\nvar getDragging = function (draggedItem, sortable) {\n    var ditem = draggedItem;\n    if (store(sortable).getConfig('copy') === true) {\n        ditem = draggedItem.cloneNode(true);\n        addAttribute(ditem, 'aria-copied', 'true');\n        draggedItem.parentElement.appendChild(ditem);\n        ditem.style.display = 'none';\n        ditem.oldDisplay = draggedItem.style.display;\n    }\n    return ditem;\n};\n/**\n * Remove data from sortable\n * @param {HTMLElement} sortable a single sortable\n */\nvar removeSortableData = function (sortable) {\n    removeData(sortable);\n    removeAttribute(sortable, 'aria-dropeffect');\n};\n/**\n * Remove data from items\n * @param {Array<HTMLElement>|HTMLElement} items\n */\nvar removeItemData = function (items) {\n    removeAttribute(items, 'aria-grabbed');\n    removeAttribute(items, 'aria-copied');\n    removeAttribute(items, 'draggable');\n    removeAttribute(items, 'role');\n};\n/**\n * find sortable from element. travels up parent element until found or null.\n * @param {HTMLElement} element a single sortable\n * @param {Event} event - the current event. We need to pass it to be able to\n * find Sortable whith shadowRoot (document fragment has no parent)\n */\nfunction findSortable(element, event) {\n    if (event.composedPath) {\n        return event.composedPath().find(function (el) { return el.isSortable; });\n    }\n    while (element.isSortable !== true) {\n        element = element.parentElement;\n    }\n    return element;\n}\n/**\n * Dragging event is on the sortable element. finds the top child that\n * contains the element.\n * @param {HTMLElement} sortableElement a single sortable\n * @param {HTMLElement} element is that being dragged\n */\nfunction findDragElement(sortableElement, element) {\n    var options = addData(sortableElement, 'opts');\n    var items = filter(sortableElement.children, options.items);\n    var itemlist = items.filter(function (ele) {\n        return ele.contains(element) || (ele.shadowRoot && ele.shadowRoot.contains(element));\n    });\n    return itemlist.length > 0 ? itemlist[0] : element;\n}\n/**\n * Destroy the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar destroySortable = function (sortableElement) {\n    var opts = addData(sortableElement, 'opts') || {};\n    var items = filter(sortableElement.children, opts.items);\n    var handles = getHandles(items, opts.handle);\n    // disable adding hover class\n    enableHoverClass(sortableElement, false);\n    // remove event handlers & data from sortable\n    removeEventListener(sortableElement, 'dragover');\n    removeEventListener(sortableElement, 'dragenter');\n    removeEventListener(sortableElement, 'dragstart');\n    removeEventListener(sortableElement, 'dragend');\n    removeEventListener(sortableElement, 'drop');\n    // remove event data from sortable\n    removeSortableData(sortableElement);\n    // remove event handlers & data from items\n    removeEventListener(handles, 'mousedown');\n    removeItemEvents(items);\n    removeItemData(items);\n    removeStoreData(items);\n    removeStoreData([sortableElement]);\n    removeContainerEvents(originContainer, previousContainer);\n    // clear sortable flag\n    sortableElement.isSortable = false;\n};\n/**\n * Enable the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar enableSortable = function (sortableElement) {\n    var opts = addData(sortableElement, 'opts');\n    var items = filter(sortableElement.children, opts.items);\n    var handles = getHandles(items, opts.handle);\n    addAttribute(sortableElement, 'aria-dropeffect', 'move');\n    addData(sortableElement, '_disabled', 'false');\n    addAttribute(handles, 'draggable', 'true');\n    // enable hover class\n    enableHoverClass(sortableElement, true);\n    // @todo: remove this fix\n    // IE FIX for ghost\n    // can be disabled as it has the side effect that other events\n    // (e.g. click) will be ignored\n    if (opts.disableIEFix === false) {\n        var spanEl = (document || window.document).createElement('span');\n        if (typeof spanEl.dragDrop === 'function') {\n            addEventListener(handles, 'mousedown', function () {\n                if (items.indexOf(this) !== -1) {\n                    this.dragDrop();\n                }\n                else {\n                    var parent = this.parentElement;\n                    while (items.indexOf(parent) === -1) {\n                        parent = parent.parentElement;\n                    }\n                    parent.dragDrop();\n                }\n            });\n        }\n    }\n};\n/**\n * Disable the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar disableSortable = function (sortableElement) {\n    var opts = addData(sortableElement, 'opts');\n    var items = filter(sortableElement.children, opts.items);\n    var handles = getHandles(items, opts.handle);\n    addAttribute(sortableElement, 'aria-dropeffect', 'none');\n    addData(sortableElement, '_disabled', 'true');\n    addAttribute(handles, 'draggable', 'false');\n    removeEventListener(handles, 'mousedown');\n    enableHoverClass(sortableElement, false);\n};\n/**\n * Reload the sortable\n * @param {HTMLElement} sortableElement a single sortable\n * @description events need to be removed to not be double bound\n */\nvar reloadSortable = function (sortableElement) {\n    var opts = addData(sortableElement, 'opts');\n    var items = filter(sortableElement.children, opts.items);\n    var handles = getHandles(items, opts.handle);\n    addData(sortableElement, '_disabled', 'false');\n    // remove event handlers from items\n    removeItemEvents(items);\n    removeContainerEvents(originContainer, previousContainer);\n    removeEventListener(handles, 'mousedown');\n    // remove event handlers from sortable\n    removeEventListener(sortableElement, 'dragover');\n    removeEventListener(sortableElement, 'dragenter');\n    removeEventListener(sortableElement, 'drop');\n};\n/**\n * Public sortable object\n * @param {Array|NodeList} sortableElements\n * @param {object|string} options|method\n */\nfunction sortable(sortableElements, options) {\n    // get method string to see if a method is called\n    var method = String(options);\n    options = options || {};\n    // check if the user provided a selector instead of an element\n    if (typeof sortableElements === 'string') {\n        sortableElements = document.querySelectorAll(sortableElements);\n    }\n    // if the user provided an element, return it in an array to keep the return value consistant\n    if (sortableElements instanceof HTMLElement) {\n        sortableElements = [sortableElements];\n    }\n    sortableElements = Array.prototype.slice.call(sortableElements);\n    if (/serialize/.test(method)) {\n        return sortableElements.map(function (sortableContainer) {\n            var opts = addData(sortableContainer, 'opts');\n            return serialize(sortableContainer, opts.itemSerializer, opts.containerSerializer);\n        });\n    }\n    sortableElements.forEach(function (sortableElement) {\n        if (/enable|disable|destroy/.test(method)) {\n            return sortable[method](sortableElement);\n        }\n        // log deprecation\n        ['connectWith', 'disableIEFix'].forEach(function (configKey) {\n            if (Object.prototype.hasOwnProperty.call(options, configKey) && options[configKey] !== null) {\n                console.warn(\"HTML5Sortable: You are using the deprecated configuration \\\"\".concat(configKey, \"\\\". This will be removed in an upcoming version, make sure to migrate to the new options when updating.\"));\n            }\n        });\n        // merge options with default options\n        options = Object.assign({}, defaultConfiguration, store(sortableElement).config, options);\n        // init data store for sortable\n        store(sortableElement).config = options;\n        // set options on sortable\n        addData(sortableElement, 'opts', options);\n        // property to define as sortable\n        sortableElement.isSortable = true;\n        // reset sortable\n        reloadSortable(sortableElement);\n        // initialize\n        var listItems = filter(sortableElement.children, options.items);\n        // create element if user defined a placeholder element as a string\n        var customPlaceholder;\n        if (options.placeholder !== null && options.placeholder !== undefined) {\n            var tempContainer = document.createElement(sortableElement.tagName);\n            if (options.placeholder instanceof HTMLElement) {\n                tempContainer.appendChild(options.placeholder);\n            }\n            else {\n                tempContainer.innerHTML = options.placeholder;\n            }\n            customPlaceholder = tempContainer.children[0];\n        }\n        // add placeholder\n        store(sortableElement).placeholder = makePlaceholder(sortableElement, customPlaceholder, options.placeholderClass);\n        addData(sortableElement, 'items', options.items);\n        if (options.acceptFrom) {\n            addData(sortableElement, 'acceptFrom', options.acceptFrom);\n        }\n        else if (options.connectWith) {\n            addData(sortableElement, 'connectWith', options.connectWith);\n        }\n        enableSortable(sortableElement);\n        addAttribute(listItems, 'role', 'option');\n        addAttribute(listItems, 'aria-grabbed', 'false');\n        /*\n         Handle drag events on draggable items\n         Handle is set at the sortableElement level as it will bubble up\n         from the item\n         */\n        addEventListener(sortableElement, 'dragstart', function (e) {\n            // ignore dragstart events\n            var target = getEventTarget(e);\n            if (target.isSortable === true) {\n                return;\n            }\n            e.stopImmediatePropagation();\n            if ((options.handle && !target.matches(options.handle)) || target.getAttribute('draggable') === 'false') {\n                return;\n            }\n            var sortableContainer = findSortable(target, e);\n            var dragItem = findDragElement(sortableContainer, target);\n            // grab values\n            originItemsBeforeUpdate = filter(sortableContainer.children, options.items);\n            originIndex = originItemsBeforeUpdate.indexOf(dragItem);\n            originElementIndex = getIndex(dragItem, sortableContainer.children);\n            originContainer = sortableContainer;\n            // add transparent clone or other ghost to cursor\n            var dragImage = null;\n            if (typeof options.customDragImage === 'string') {\n                dragImage = document.querySelector(options.customDragImage);\n                dragImage !== null && dragImage !== void 0 ? dragImage : console.error('The NodeList provided does not contain any valid elements.');\n            }\n            else if (options.customDragImage === 'function') {\n                dragImage = options.customDragImage;\n            }\n            setDragImage(e, dragItem, dragImage);\n            // cache selsection & add attr for dragging\n            draggingHeight = getElementHeight(dragItem);\n            draggingWidth = getElementWidth(dragItem);\n            dragItem.classList.add(options.draggingClass);\n            dragging = getDragging(dragItem, sortableContainer);\n            addAttribute(dragging, 'aria-grabbed', 'true');\n            // dispatch sortstart event on each element in group\n            sortableContainer.dispatchEvent(new CustomEvent('sortstart', {\n                detail: {\n                    origin: {\n                        elementIndex: originElementIndex,\n                        index: originIndex,\n                        container: originContainer\n                    },\n                    item: dragging,\n                    originalTarget: target\n                }\n            }));\n        });\n        /*\n         We are capturing targetSortable before modifications with 'dragenter' event\n        */\n        addEventListener(sortableElement, 'dragenter', function (e) {\n            var target = getEventTarget(e);\n            var sortableContainer = findSortable(target, e);\n            if (sortableContainer && sortableContainer !== previousContainer) {\n                destinationItemsBeforeUpdate = filter(sortableContainer.children, addData(sortableContainer, 'items'))\n                    .filter(function (item) { return item !== store(sortableElement).placeholder; });\n                if (options.dropTargetContainerClass) {\n                    sortableContainer.classList.add(options.dropTargetContainerClass);\n                }\n                sortableContainer.dispatchEvent(new CustomEvent('sortenter', {\n                    detail: {\n                        origin: {\n                            elementIndex: originElementIndex,\n                            index: originIndex,\n                            container: originContainer\n                        },\n                        destination: {\n                            container: sortableContainer,\n                            itemsBeforeUpdate: destinationItemsBeforeUpdate\n                        },\n                        item: dragging,\n                        originalTarget: target\n                    }\n                }));\n                addEventListener(sortableContainer, 'dragleave', function (e) {\n                    // TODO: rename outTarget to be more self-explanatory\n                    // e.fromElement for very old browsers, similar to relatedTarget\n                    var outTarget = e.relatedTarget || e.fromElement;\n                    if (!e.currentTarget.contains(outTarget)) {\n                        if (options.dropTargetContainerClass) {\n                            sortableContainer.classList.remove(options.dropTargetContainerClass);\n                        }\n                        sortableContainer.dispatchEvent(new CustomEvent('sortleave', {\n                            detail: {\n                                origin: {\n                                    elementIndex: originElementIndex,\n                                    index: originIndex,\n                                    container: sortableContainer\n                                },\n                                item: dragging,\n                                originalTarget: target\n                            }\n                        }));\n                    }\n                });\n            }\n            previousContainer = sortableContainer;\n        });\n        /*\n         * Dragend Event - https://developer.mozilla.org/en-US/docs/Web/Events/dragend\n         * Fires each time dragEvent end, or ESC pressed\n         * We are using it to clean up any draggable elements and placeholders\n         */\n        addEventListener(sortableElement, 'dragend', function (e) {\n            if (!dragging) {\n                return;\n            }\n            dragging.classList.remove(options.draggingClass);\n            addAttribute(dragging, 'aria-grabbed', 'false');\n            if (dragging.getAttribute('aria-copied') === 'true' && addData(dragging, 'dropped') !== 'true') {\n                dragging.remove();\n            }\n            if (dragging.oldDisplay !== undefined) {\n                dragging.style.display = dragging.oldDisplay;\n                delete dragging.oldDisplay;\n            }\n            var visiblePlaceholder = Array.from(stores.values()).map(function (data) { return data.placeholder; })\n                .filter(function (placeholder) { return placeholder instanceof HTMLElement; })\n                .filter(isInDom)[0];\n            if (visiblePlaceholder) {\n                visiblePlaceholder.remove();\n            }\n            // dispatch sortstart event on each element in group\n            sortableElement.dispatchEvent(new CustomEvent('sortstop', {\n                detail: {\n                    origin: {\n                        elementIndex: originElementIndex,\n                        index: originIndex,\n                        container: originContainer\n                    },\n                    item: dragging\n                }\n            }));\n            previousContainer = null;\n            dragging = null;\n            draggingHeight = null;\n            draggingWidth = null;\n        });\n        /*\n         * Drop Event - https://developer.mozilla.org/en-US/docs/Web/Events/drop\n         * Fires when valid drop target area is hit\n         */\n        addEventListener(sortableElement, 'drop', function (e) {\n            if (!listsConnected(sortableElement, dragging.parentElement)) {\n                return;\n            }\n            e.preventDefault();\n            e.stopPropagation();\n            addData(dragging, 'dropped', 'true');\n            // get the one placeholder that is currently visible\n            var visiblePlaceholder = Array.from(stores.values()).map(function (data) {\n                return data.placeholder;\n            })\n                // filter only HTMLElements\n                .filter(function (placeholder) { return placeholder instanceof HTMLElement; })\n                // only elements in DOM\n                .filter(isInDom)[0];\n            if (visiblePlaceholder) {\n                visiblePlaceholder.replaceWith(dragging);\n                // to avoid flickering restoring element display immediately after replacing placeholder\n                if (dragging.oldDisplay !== undefined) {\n                    dragging.style.display = dragging.oldDisplay;\n                    delete dragging.oldDisplay;\n                }\n            }\n            else {\n                // set the dropped value to 'false' to delete copied dragging at the time of 'dragend'\n                addData(dragging, 'dropped', 'false');\n                return;\n            }\n            /*\n             * Fires Custom Event - 'sortstop'\n             */\n            sortableElement.dispatchEvent(new CustomEvent('sortstop', {\n                detail: {\n                    origin: {\n                        elementIndex: originElementIndex,\n                        index: originIndex,\n                        container: originContainer\n                    },\n                    item: dragging\n                }\n            }));\n            var placeholder = store(sortableElement).placeholder;\n            var originItems = filter(originContainer.children, options.items)\n                .filter(function (item) { return item !== placeholder; });\n            var destinationContainer = this.isSortable === true ? this : this.parentElement;\n            var destinationItems = filter(destinationContainer.children, addData(destinationContainer, 'items'))\n                .filter(function (item) { return item !== placeholder; });\n            var destinationElementIndex = getIndex(dragging, Array.from(dragging.parentElement.children)\n                .filter(function (item) { return item !== placeholder; }));\n            var destinationIndex = getIndex(dragging, destinationItems);\n            if (options.dropTargetContainerClass) {\n                destinationContainer.classList.remove(options.dropTargetContainerClass);\n            }\n            /*\n             * When a list item changed container lists or index within a list\n             * Fires Custom Event - 'sortupdate'\n             */\n            if (originElementIndex !== destinationElementIndex || originContainer !== destinationContainer) {\n                sortableElement.dispatchEvent(new CustomEvent('sortupdate', {\n                    detail: {\n                        origin: {\n                            elementIndex: originElementIndex,\n                            index: originIndex,\n                            container: originContainer,\n                            itemsBeforeUpdate: originItemsBeforeUpdate,\n                            items: originItems\n                        },\n                        destination: {\n                            index: destinationIndex,\n                            elementIndex: destinationElementIndex,\n                            container: destinationContainer,\n                            itemsBeforeUpdate: destinationItemsBeforeUpdate,\n                            items: destinationItems\n                        },\n                        item: dragging\n                    }\n                }));\n            }\n        });\n        var debouncedDragOverEnter = debounce(function (sortableElement, element, pageX, pageY) {\n            if (!dragging) {\n                return;\n            }\n            // set placeholder height if forcePlaceholderSize option is set\n            if (options.forcePlaceholderSize) {\n                store(sortableElement).placeholder.style.height = draggingHeight + 'px';\n                store(sortableElement).placeholder.style.width = draggingWidth + 'px';\n            }\n            // if element the draggedItem is dragged onto is within the array of all elements in list\n            // (not only items, but also disabled, etc.)\n            if (Array.from(sortableElement.children).indexOf(element) > -1) {\n                var thisHeight = getElementHeight(element);\n                var thisWidth = getElementWidth(element);\n                var placeholderIndex = getIndex(store(sortableElement).placeholder, element.parentElement.children);\n                var thisIndex = getIndex(element, element.parentElement.children);\n                // Check if `element` is bigger than the draggable. If it is, we have to define a dead zone to prevent flickering\n                if (thisHeight > draggingHeight || thisWidth > draggingWidth) {\n                    // Dead zone?\n                    var deadZoneVertical = thisHeight - draggingHeight;\n                    var deadZoneHorizontal = thisWidth - draggingWidth;\n                    var offsetTop = offset(element).top;\n                    var offsetLeft = offset(element).left;\n                    if (placeholderIndex < thisIndex &&\n                        ((options.orientation === 'vertical' && pageY < offsetTop) ||\n                            (options.orientation === 'horizontal' && pageX < offsetLeft))) {\n                        return;\n                    }\n                    if (placeholderIndex > thisIndex &&\n                        ((options.orientation === 'vertical' && pageY > offsetTop + thisHeight - deadZoneVertical) ||\n                            (options.orientation === 'horizontal' && pageX > offsetLeft + thisWidth - deadZoneHorizontal))) {\n                        return;\n                    }\n                }\n                if (dragging.oldDisplay === undefined) {\n                    dragging.oldDisplay = dragging.style.display;\n                }\n                if (dragging.style.display !== 'none') {\n                    dragging.style.display = 'none';\n                }\n                // To avoid flicker, determine where to position the placeholder\n                // based on where the mouse pointer is relative to the elements\n                // vertical center.\n                var placeAfter = false;\n                try {\n                    var elementMiddleVertical = offset(element).top + element.offsetHeight / 2;\n                    var elementMiddleHorizontal = offset(element).left + element.offsetWidth / 2;\n                    placeAfter = (options.orientation === 'vertical' && (pageY >= elementMiddleVertical)) ||\n                        (options.orientation === 'horizontal' && (pageX >= elementMiddleHorizontal));\n                }\n                catch (e) {\n                    placeAfter = placeholderIndex < thisIndex;\n                }\n                if (placeAfter) {\n                    insertAfter(element, store(sortableElement).placeholder);\n                }\n                else {\n                    insertBefore(element, store(sortableElement).placeholder);\n                }\n                // get placeholders from all stores & remove all but current one\n                Array.from(stores.values())\n                    // remove empty values\n                    .filter(function (data) { return data.placeholder !== undefined; })\n                    // foreach placeholder in array if outside of current sorableContainer -> remove from DOM\n                    .forEach(function (data) {\n                    if (data.placeholder !== store(sortableElement).placeholder) {\n                        data.placeholder.remove();\n                    }\n                });\n            }\n            else {\n                // get all placeholders from store\n                var placeholders = Array.from(stores.values())\n                    .filter(function (data) { return data.placeholder !== undefined; })\n                    .map(function (data) {\n                    return data.placeholder;\n                });\n                // check if element is not in placeholders\n                if (placeholders.indexOf(element) === -1 && sortableElement === element && !filter(element.children, options.items).length) {\n                    placeholders.forEach(function (element) { return element.remove(); });\n                    element.appendChild(store(sortableElement).placeholder);\n                }\n            }\n        }, options.debounce);\n        // Handle dragover and dragenter events on draggable items\n        var onDragOverEnter = function (e) {\n            var element = e.target;\n            var sortableElement = element.isSortable === true ? element : findSortable(element, e);\n            element = findDragElement(sortableElement, element);\n            if (!dragging || !listsConnected(sortableElement, dragging.parentElement) || addData(sortableElement, '_disabled') === 'true') {\n                return;\n            }\n            var options = addData(sortableElement, 'opts');\n            if (parseInt(options.maxItems) && filter(sortableElement.children, addData(sortableElement, 'items')).length >= parseInt(options.maxItems) && dragging.parentElement !== sortableElement) {\n                return;\n            }\n            e.preventDefault();\n            e.stopPropagation();\n            e.dataTransfer.dropEffect = store(sortableElement).getConfig('copy') === true ? 'copy' : 'move';\n            debouncedDragOverEnter(sortableElement, element, e.pageX, e.pageY);\n        };\n        addEventListener(listItems.concat(sortableElement), 'dragover', onDragOverEnter);\n        addEventListener(listItems.concat(sortableElement), 'dragenter', onDragOverEnter);\n    });\n    return sortableElements;\n}\nsortable.destroy = function (sortableElement) {\n    destroySortable(sortableElement);\n};\nsortable.enable = function (sortableElement) {\n    enableSortable(sortableElement);\n};\nsortable.disable = function (sortableElement) {\n    disableSortable(sortableElement);\n};\n/* START.TESTS_ONLY */\nsortable.__testing = {\n    // add internal methods here for testing purposes\n    data: addData,\n    removeItemEvents: removeItemEvents,\n    removeItemData: removeItemData,\n    removeSortableData: removeSortableData,\n    removeContainerEvents: removeContainerEvents\n};\n\nexport { sortable as default };\n", "import { formatNumber, parseNumber, callCalcSumFunction } from './utils';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\ndayjs.extend(customParseFormat);\n\nexport function dfPolozkasKeyupEvents(e) {\n  if (e.target.id?.includes('_suma') && e.target.closest('#zadana-uhradas')) {\n    updateZadanaUhradaLabels();\n  } else if (e.target.name?.endsWith('[zlava_perc]')) {\n    callCalcSumFunction.call(this);\n  } else if (e.target.name?.endsWith('[cislo_faktury]')) {\n    updateLabelInvoiceNumber();\n  } else if (e.target.id === 'pocet_dni_splatnosti' && e.target.value !== '') {\n    const d_vystavenia = document.querySelector(\n      'input[name$=\"[datum_vystavenia]\"]'\n    );\n    const dajsObj = dayjs(d_vystavenia.value, 'DD.MM.YYYY', true);\n\n    d_vystavenia.dataset.pocetDniSplatnosti = e.target.value;\n    document.querySelector('input[name$=\"[datum_splatnosti]\"]').value = dajsObj\n      .add(parseInt(e.target.value), 'days')\n      .format('DD.MM.YYYY');\n  } else if (e.target.name?.includes('[cislo_kv_dph]')) {\n    const digitsStr = e.target.value.match(/\\d+/g)?.join('') || '';\n    const varSymbolEl = document.querySelector('[name$=\"[var_symbol]\"]');\n    const { readonly } = varSymbolEl.dataset;\n    const newDigit = e.data.match(/\\d+/g)?.join('') || '';\n\n    if (readonly === 'true' || digitsStr.length > 9 || !newDigit) return;\n\n    varSymbolEl.value = `${digitsStr}${newDigit}`.slice(0, 10);\n  }\n}\n", "export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n", "import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init(window: Window & { wrap?: (...args: any[]) => any }) {\n  // get wrapped window if using Shadow DOM polyfill\n\n  realWindow = window\n\n  // create a TextNode\n  const el = window.document.createTextNode('')\n\n  // check if it's wrapped by a polyfill\n  if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n    // use wrapped window\n    window = window.wrap(window)\n  }\n\n  win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n  init(window)\n}\n\nexport function getWindow(node: any) {\n  if (isWindow(node)) {\n    return node\n  }\n\n  const rootNode = node.ownerDocument || node\n\n  return rootNode.defaultView || win.window\n}\n", "import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n  if (!thing || typeof thing !== 'object') {\n    return false\n  }\n\n  const _window = win.getWindow(thing) || win.window\n\n  return /object|function/.test(typeof Element)\n    ? thing instanceof Element || thing instanceof _window.Element\n    : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n  object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = <T extends unknown>(thing: any): thing is T[] =>\n  object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n  window,\n  docFrag,\n  object,\n  func,\n  number,\n  bool,\n  string,\n  element,\n  plainObject,\n  array,\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    draggable(options: Partial<OrBoolean<DraggableOptions>> | boolean): this\n    draggable(): DraggableOptions\n    /**\n     * ```js\n     * interact(element).draggable({\n     *     onstart: function (event) {},\n     *     onmove : function (event) {},\n     *     onend  : function (event) {},\n     *\n     *     // the axis in which the first movement must be\n     *     // for the drag sequence to start\n     *     // 'xy' by default - any direction\n     *     startAxis: 'x' || 'y' || 'xy',\n     *\n     *     // 'xy' by default - don't restrict to one axis (move in any direction)\n     *     // 'x' or 'y' to restrict movement to either axis\n     *     // 'start' to restrict movement to the axis the drag started in\n     *     lockAxis: 'x' || 'y' || 'xy' || 'start',\n     *\n     *     // max number of drags that can happen concurrently\n     *     // with elements of this Interactable. Infinity by default\n     *     max: Infinity,\n     *\n     *     // max number of drags that can target the same element+Interactable\n     *     // 1 by default\n     *     maxPerElement: 2\n     * })\n     *\n     * var isDraggable = interact('element').draggable(); // true\n     * ```\n     *\n     * Get or set whether drag actions can be performed on the target\n     *\n     * @param options - true/false or An object with event\n     * listeners to be fired on drag events (object makes the Interactable\n     * draggable)\n     */\n    draggable(options?: Partial<OrBoolean<DraggableOptions>> | boolean): this | DraggableOptions\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    drag: DraggableOptions\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    drag?: typeof drag\n  }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport interface DraggableOptions extends PerActionDefaults {\n  startAxis?: 'x' | 'y' | 'xy'\n  lockAxis?: 'x' | 'y' | 'xy' | 'start'\n  oninertiastart?: ListenersArg\n  onstart?: ListenersArg\n  onmove?: ListenersArg\n  onend?: ListenersArg\n}\n\nfunction install(scope: Scope) {\n  const { actions, Interactable, defaults } = scope\n\n  Interactable.prototype.draggable = drag.draggable\n\n  actions.map.drag = drag\n  actions.methodDict.drag = 'draggable'\n\n  defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove({ interaction }) {\n  if (interaction.prepared.name !== 'drag') return\n\n  const axis = interaction.prepared.axis\n\n  if (axis === 'x') {\n    interaction.coords.cur.page.y = interaction.coords.start.page.y\n    interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n    interaction.coords.velocity.client.y = 0\n    interaction.coords.velocity.page.y = 0\n  } else if (axis === 'y') {\n    interaction.coords.cur.page.x = interaction.coords.start.page.x\n    interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n    interaction.coords.velocity.client.x = 0\n    interaction.coords.velocity.page.x = 0\n  }\n}\n\nfunction move({ iEvent, interaction }) {\n  if (interaction.prepared.name !== 'drag') return\n\n  const axis = interaction.prepared.axis\n\n  if (axis === 'x' || axis === 'y') {\n    const opposite = axis === 'x' ? 'y' : 'x'\n\n    iEvent.page[opposite] = interaction.coords.start.page[opposite]\n    iEvent.client[opposite] = interaction.coords.start.client[opposite]\n    iEvent.delta[opposite] = 0\n  }\n}\n\nconst draggable: Interactable['draggable'] = function draggable(\n  this: Interactable,\n  options?: DraggableOptions | boolean,\n): any {\n  if (is.object(options)) {\n    this.options.drag.enabled = options.enabled !== false\n    this.setPerAction('drag', options)\n    this.setOnEvents('drag', options)\n\n    if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n      this.options.drag.lockAxis = options.lockAxis\n    }\n    if (/^(xy|x|y)$/.test(options.startAxis)) {\n      this.options.drag.startAxis = options.startAxis\n    }\n\n    return this\n  }\n\n  if (is.bool(options)) {\n    this.options.drag.enabled = options\n\n    return this\n  }\n\n  return this.options.drag as DraggableOptions\n}\n\nconst drag: Plugin = {\n  id: 'actions/drag',\n  install,\n  listeners: {\n    'interactions:before-action-move': beforeMove,\n    'interactions:action-resume': beforeMove,\n\n    // dragmove\n    'interactions:action-move': move,\n    'auto-start:check': (arg) => {\n      const { interaction, interactable, buttons } = arg\n      const dragOptions = interactable.options.drag\n\n      if (\n        !(dragOptions && dragOptions.enabled) ||\n        // check mouseButton setting if the pointer is down\n        (interaction.pointerIsDown &&\n          /mouse|pointer/.test(interaction.pointerType) &&\n          (buttons & interactable.options.drag.mouseButtons) === 0)\n      ) {\n        return undefined\n      }\n\n      arg.action = {\n        name: 'drag',\n        axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n      }\n\n      return false\n    },\n  },\n  draggable,\n  beforeMove,\n  move,\n  defaults: {\n    startAxis: 'xy',\n    lockAxis: 'xy',\n  } as DraggableOptions,\n\n  getCursor() {\n    return 'move'\n  },\n\n  filterEventType: (type: string) => type.search('drag') === 0,\n}\n\nexport default drag\n", "const domObjects: {\n  init: any\n  document: Document\n  DocumentFragment: typeof DocumentFragment\n  SVGElement: typeof SVGElement\n  SVGSVGElement: typeof SVGSVGElement\n  SVGElementInstance: any\n  Element: typeof Element\n  HTMLElement: typeof HTMLElement\n  Event: typeof Event\n  Touch: typeof Touch\n  PointerEvent: typeof PointerEvent\n} = {\n  init,\n  document: null,\n  DocumentFragment: null,\n  SVGElement: null,\n  SVGSVGElement: null,\n  SVGElementInstance: null,\n  Element: null,\n  HTMLElement: null,\n  Event: null,\n  Touch: null,\n  PointerEvent: null,\n}\n\nfunction blank() {}\n\nexport default domObjects\n\nfunction init(window: Window) {\n  const win = window as any\n\n  domObjects.document = win.document\n  domObjects.DocumentFragment = win.DocumentFragment || blank\n  domObjects.SVGElement = win.SVGElement || blank\n  domObjects.SVGSVGElement = win.SVGSVGElement || blank\n  domObjects.SVGElementInstance = win.SVGElementInstance || blank\n  domObjects.Element = win.Element || blank\n  domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n  domObjects.Event = win.Event\n  domObjects.Touch = win.Touch || blank\n  domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n", "import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n  init,\n  supportsTouch: null as boolean,\n  supportsPointerEvent: null as boolean,\n  isIOS7: null as boolean,\n  isIOS: null as boolean,\n  isIe9: null as boolean,\n  isOperaMobile: null as boolean,\n  prefixedMatchesSelector: null as 'matches',\n  pEventTypes: null as {\n    up: string\n    down: string\n    over: string\n    out: string\n    move: string\n    cancel: string\n  },\n  wheelEvent: null as string,\n}\n\nfunction init(window: any) {\n  const Element = domObjects.Element\n  const navigator: Partial<Navigator> = window.navigator || {}\n\n  // Does the browser support touch input?\n  browser.supportsTouch =\n    'ontouchstart' in window ||\n    (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n  // Does the browser support PointerEvents\n  // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n  browser.supportsPointerEvent = (navigator as any).pointerEnabled !== false && !!domObjects.PointerEvent\n\n  browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n  // scrolling doesn't change the result of getClientRects on iOS 7\n  browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n  browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n  // Opera Mobile must be handled differently\n  browser.isOperaMobile =\n    navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n  // prefix matchesSelector\n  browser.prefixedMatchesSelector = (\n    'matches' in Element.prototype\n      ? 'matches'\n      : 'webkitMatchesSelector' in Element.prototype\n        ? 'webkitMatchesSelector'\n        : 'mozMatchesSelector' in Element.prototype\n          ? 'mozMatchesSelector'\n          : 'oMatchesSelector' in Element.prototype\n            ? 'oMatchesSelector'\n            : 'msMatchesSelector'\n  ) as 'matches'\n\n  browser.pEventTypes = browser.supportsPointerEvent\n    ? domObjects.PointerEvent === window.MSPointerEvent\n      ? {\n          up: 'MSPointerUp',\n          down: 'MSPointerDown',\n          over: 'mouseover',\n          out: 'mouseout',\n          move: 'MSPointerMove',\n          cancel: 'MSPointerCancel',\n        }\n      : {\n          up: 'pointerup',\n          down: 'pointerdown',\n          over: 'pointerover',\n          out: 'pointerout',\n          move: 'pointermove',\n          cancel: 'pointercancel',\n        }\n    : null\n\n  // because Webkit and Opera still use 'mousewheel' event type\n  browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n", "import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains(parent: Node, child: Node) {\n  if (parent.contains) {\n    return parent.contains(child as Node)\n  }\n\n  while (child) {\n    if (child === parent) {\n      return true\n    }\n\n    child = (child as Node).parentNode\n  }\n\n  return false\n}\n\nexport function closest(element: Node, selector: string) {\n  while (is.element(element)) {\n    if (matchesSelector(element, selector)) {\n      return element\n    }\n\n    element = parentNode(element)\n  }\n\n  return null\n}\n\nexport function parentNode(node: Node | Document) {\n  let parent = node.parentNode\n\n  if (is.docFrag(parent)) {\n    // skip past #shado-root fragments\n    // tslint:disable-next-line\n    while ((parent = (parent as any).host) && is.docFrag(parent)) {\n      continue\n    }\n\n    return parent\n  }\n\n  return parent\n}\n\nexport function matchesSelector(element: Element, selector: string) {\n  // remove /deep/ from selectors if shadowDOM polyfill is used\n  if (win.window !== win.realWindow) {\n    selector = selector.replace(/\\/deep\\//g, ' ')\n  }\n\n  return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement(elements: Element[] | NodeListOf<globalThis.Element>) {\n  let deepestNodeParents: Node[] = []\n  let deepestNodeIndex: number\n\n  for (let i = 0; i < elements.length; i++) {\n    const currentNode = elements[i]\n    const deepestNode: Node = elements[deepestNodeIndex]\n\n    // node may appear in elements array multiple times\n    if (!currentNode || i === deepestNodeIndex) {\n      continue\n    }\n\n    if (!deepestNode) {\n      deepestNodeIndex = i\n      continue\n    }\n\n    const currentNodeParent = getParent(currentNode)\n    const deepestNodeParent = getParent(deepestNode)\n\n    // check if the deepest or current are document.documentElement/rootElement\n    // - if the current node is, do nothing and continue\n    if (currentNodeParent === currentNode.ownerDocument) {\n      continue\n    }\n    // - if deepest is, update with the current node and continue to next\n    else if (deepestNodeParent === currentNode.ownerDocument) {\n      deepestNodeIndex = i\n      continue\n    }\n\n    // compare zIndex of siblings\n    if (currentNodeParent === deepestNodeParent) {\n      if (zIndexIsHigherThan(currentNode, deepestNode)) {\n        deepestNodeIndex = i\n      }\n\n      continue\n    }\n\n    // populate the ancestry array for the latest deepest node\n    deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n    let ancestryStart: Node\n\n    // if the deepest node is an HTMLElement and the current node is a non root svg element\n    if (\n      deepestNode instanceof domObjects.HTMLElement &&\n      currentNode instanceof domObjects.SVGElement &&\n      !(currentNode instanceof domObjects.SVGSVGElement)\n    ) {\n      // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n      if (currentNode === deepestNodeParent) {\n        continue\n      }\n\n      ancestryStart = currentNode.ownerSVGElement\n    } else {\n      ancestryStart = currentNode\n    }\n\n    const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n    let commonIndex = 0\n\n    // get (position of closest common ancestor) + 1\n    while (\n      currentNodeParents[commonIndex] &&\n      currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n    ) {\n      commonIndex++\n    }\n\n    const parents = [\n      currentNodeParents[commonIndex - 1],\n      currentNodeParents[commonIndex],\n      deepestNodeParents[commonIndex],\n    ]\n\n    if (parents[0]) {\n      let child = parents[0].lastChild\n\n      while (child) {\n        if (child === parents[1]) {\n          deepestNodeIndex = i\n          deepestNodeParents = currentNodeParents\n\n          break\n        } else if (child === parents[2]) {\n          break\n        }\n\n        child = child.previousSibling\n      }\n    }\n  }\n\n  return deepestNodeIndex\n}\n\nfunction getNodeParents(node: Node, limit?: Node) {\n  const parents: Node[] = []\n  let parent: Node = node\n  let parentParent: Node\n\n  while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n    parents.unshift(parent)\n    parent = parentParent\n  }\n\n  return parents\n}\n\nfunction zIndexIsHigherThan(higherNode: Node, lowerNode: Node) {\n  const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n  const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n  return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo(element: Element, selector: string, limit: Node) {\n  while (is.element(element)) {\n    if (matchesSelector(element, selector)) {\n      return true\n    }\n\n    element = parentNode(element) as Element\n\n    if (element === limit) {\n      return matchesSelector(element, selector)\n    }\n  }\n\n  return false\n}\n\nexport function getActualElement(element: Element) {\n  return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY(relevantWindow?: Window) {\n  relevantWindow = relevantWindow || win.window\n  return {\n    x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n    y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n  }\n}\n\nexport function getElementClientRect(element: Element): Required<Rect> {\n  const clientRect =\n    element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n  return (\n    clientRect && {\n      left: clientRect.left,\n      right: clientRect.right,\n      top: clientRect.top,\n      bottom: clientRect.bottom,\n      width: clientRect.width || clientRect.right - clientRect.left,\n      height: clientRect.height || clientRect.bottom - clientRect.top,\n    }\n  )\n}\n\nexport function getElementRect(element: Element) {\n  const clientRect = getElementClientRect(element)\n\n  if (!browser.isIOS7 && clientRect) {\n    const scroll = getScrollXY(win.getWindow(element))\n\n    clientRect.left += scroll.x\n    clientRect.right += scroll.x\n    clientRect.top += scroll.y\n    clientRect.bottom += scroll.y\n  }\n\n  return clientRect\n}\n\nexport function getPath(node: Node | Document) {\n  const path = []\n\n  while (node) {\n    path.push(node)\n    node = parentNode(node)\n  }\n\n  return path\n}\n\nexport function trySelector(value: Target) {\n  if (!is.string(value)) {\n    return false\n  }\n\n  // an exception will be raised if it is invalid\n  domObjects.document.querySelector(value)\n  return true\n}\n", "export default function extend<T, U extends object>(dest: U & Partial<T>, source: T): T & U {\n  for (const prop in source) {\n    ;(dest as unknown as T)[prop] = source[prop]\n  }\n\n  const ret = dest as T & U\n\n  return ret\n}\n", "import type {\n  HasGetRect,\n  RectResolvable,\n  Rect,\n  Element,\n  Point,\n  FullRect,\n  EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult(value: any, target: HasGetRect, element: Node) {\n  if (value === 'parent') {\n    return parentNode(element)\n  }\n\n  if (value === 'self') {\n    return target.getRect(element as Element)\n  }\n\n  return closest(element, value)\n}\n\nexport function resolveRectLike<T extends any[]>(\n  value: RectResolvable<T>,\n  target?: HasGetRect,\n  element?: Node,\n  functionArgs?: T,\n) {\n  let returnValue: any = value\n  if (is.string(returnValue)) {\n    returnValue = getStringOptionResult(returnValue, target, element)\n  } else if (is.func(returnValue)) {\n    returnValue = returnValue(...functionArgs)\n  }\n\n  if (is.element(returnValue)) {\n    returnValue = getElementRect(returnValue)\n  }\n\n  return returnValue as Rect\n}\n\nexport function toFullRect(rect: Rect): FullRect {\n  const { top, left, bottom, right } = rect\n  const width = rect.width ?? rect.right - rect.left\n  const height = rect.height ?? rect.bottom - rect.top\n\n  return { top, left, bottom, right, width, height }\n}\n\nexport function rectToXY(rect: Rect | Point) {\n  return (\n    rect && {\n      x: 'x' in rect ? rect.x : rect.left,\n      y: 'y' in rect ? rect.y : rect.top,\n    }\n  )\n}\n\nexport function xywhToTlbr<T extends Partial<Rect & Point>>(rect: T) {\n  if (rect && !('left' in rect && 'top' in rect)) {\n    rect = extend({}, rect)\n\n    rect.left = rect.x || 0\n    rect.top = rect.y || 0\n    rect.right = rect.right || rect.left + rect.width\n    rect.bottom = rect.bottom || rect.top + rect.height\n  }\n\n  return rect as Rect & T\n}\n\nexport function tlbrToXywh(rect: Rect & Partial<Point>) {\n  if (rect && !('x' in rect && 'y' in rect)) {\n    rect = extend({}, rect)\n\n    rect.x = rect.left || 0\n    rect.y = rect.top || 0\n    rect.width = rect.width || (rect.right || 0) - rect.x\n    rect.height = rect.height || (rect.bottom || 0) - rect.y\n  }\n\n  return rect as FullRect & Point\n}\n\nexport function addEdges(edges: EdgeOptions, rect: Rect, delta: Point) {\n  if (edges.left) {\n    rect.left += delta.x\n  }\n  if (edges.right) {\n    rect.right += delta.x\n  }\n  if (edges.top) {\n    rect.top += delta.y\n  }\n  if (edges.bottom) {\n    rect.bottom += delta.y\n  }\n\n  rect.width = rect.right - rect.left\n  rect.height = rect.bottom - rect.top\n}\n", "import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function getOriginXY(\n  target: HasGetRect & { options: PerActionDefaults },\n  element: Node,\n  actionName?: ActionName,\n) {\n  const actionOptions = actionName && (target.options as any)[actionName]\n  const actionOrigin = actionOptions && actionOptions.origin\n  const origin = actionOrigin || target.options.origin\n\n  const originRect = resolveRectLike(origin, target, element, [target && element])\n\n  return rectToXY(originRect) || { x: 0, y: 0 }\n}\n", "import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport is from './is'\n\nexport interface NormalizedListeners {\n  [type: string]: Listener[]\n}\n\nexport default function normalize(\n  type: EventTypes,\n  listeners?: ListenersArg | ListenersArg[] | null,\n  filter = (_typeOrPrefix: string) => true,\n  result?: NormalizedListeners,\n): NormalizedListeners {\n  result = result || {}\n\n  if (is.string(type) && type.search(' ') !== -1) {\n    type = split(type)\n  }\n\n  if (is.array(type)) {\n    type.forEach((t) => normalize(t, listeners, filter, result))\n    return result\n  }\n\n  // before:  type = [{ drag: () => {} }], listeners = undefined\n  // after:   type = ''                  , listeners = [{ drag: () => {} }]\n  if (is.object(type)) {\n    listeners = type\n    type = ''\n  }\n\n  if (is.func(listeners) && filter(type)) {\n    result[type] = result[type] || []\n    result[type].push(listeners)\n  } else if (is.array(listeners)) {\n    for (const l of listeners) {\n      normalize(type, l, filter, result)\n    }\n  } else if (is.object(listeners)) {\n    for (const prefix in listeners) {\n      const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n      normalize(combinedTypes, listeners[prefix], filter, result)\n    }\n  }\n\n  return result as NormalizedListeners\n}\n\nfunction split(type: string) {\n  return type.trim().split(/ +/)\n}\n", "export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n", "const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend<T>(dest: Partial<T & { __set?: Partial<T> }>, source: T) {\n  dest.__set ||= {} as any\n\n  for (const prop in source) {\n    // skip deprecated prefixed properties\n    if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n    if (typeof dest[prop] !== 'function' && prop !== '__set') {\n      Object.defineProperty(dest, prop, {\n        get() {\n          if (prop in dest.__set) return dest.__set[prop]\n\n          return (dest.__set[prop] = source[prop] as any)\n        },\n        set(value: any) {\n          dest.__set[prop] = value\n        },\n        configurable: true,\n      })\n    }\n  }\n  return dest\n}\n", "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords(dest: CoordsSetMember, src: CoordsSetMember) {\n  dest.page = dest.page || ({} as any)\n  dest.page.x = src.page.x\n  dest.page.y = src.page.y\n\n  dest.client = dest.client || ({} as any)\n  dest.client.x = src.client.x\n  dest.client.y = src.client.y\n\n  dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n  targetObj.page.x = cur.page.x - prev.page.x\n  targetObj.page.y = cur.page.y - prev.page.y\n  targetObj.client.x = cur.client.x - prev.client.x\n  targetObj.client.y = cur.client.y - prev.client.y\n  targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember) {\n  const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n  targetObj.page.x = delta.page.x / dt\n  targetObj.page.y = delta.page.y / dt\n  targetObj.client.x = delta.client.x / dt\n  targetObj.client.y = delta.client.y / dt\n  targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords(targetObj: CoordsSetMember) {\n  targetObj.page.x = 0\n  targetObj.page.y = 0\n  targetObj.client.x = 0\n  targetObj.client.y = 0\n}\n\nexport function isNativePointer(pointer: any) {\n  return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point) {\n  xy = xy || ({} as Point)\n  type = type || 'page'\n\n  xy.x = pointer[(type + 'X') as 'pageX']\n  xy.y = pointer[(type + 'Y') as 'pageY']\n\n  return xy\n}\n\nexport function getPageXY(pointer: PointerType | InteractEvent, page?: Point) {\n  page = page || { x: 0, y: 0 }\n\n  // Opera Mobile handles the viewport and scrolling oddly\n  if (browser.isOperaMobile && isNativePointer(pointer)) {\n    getXY('screen', pointer, page)\n\n    page.x += window.scrollX\n    page.y += window.scrollY\n  } else {\n    getXY('page', pointer, page)\n  }\n\n  return page\n}\n\nexport function getClientXY(pointer: PointerType, client: Point) {\n  client = client || ({} as any)\n\n  if (browser.isOperaMobile && isNativePointer(pointer)) {\n    // Opera Mobile handles the viewport and scrolling oddly\n    getXY('screen', pointer, client)\n  } else {\n    getXY('client', pointer, client)\n  }\n\n  return client\n}\n\nexport function getPointerId(pointer: { pointerId?: number; identifier?: number; type?: string }) {\n  return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n  const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n  getPageXY(pointer, dest.page)\n  getClientXY(pointer, dest.client)\n\n  dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair(event: TouchEvent | PointerType[]) {\n  const touches: PointerType[] = []\n\n  // array of touches is supplied\n  if (is.array(event)) {\n    touches[0] = event[0]\n    touches[1] = event[1]\n  }\n  // an event\n  else {\n    if (event.type === 'touchend') {\n      if (event.touches.length === 1) {\n        touches[0] = event.touches[0]\n        touches[1] = event.changedTouches[0]\n      } else if (event.touches.length === 0) {\n        touches[0] = event.changedTouches[0]\n        touches[1] = event.changedTouches[1]\n      }\n    } else {\n      touches[0] = event.touches[0]\n      touches[1] = event.touches[1]\n    }\n  }\n\n  return touches\n}\n\nexport function pointerAverage(pointers: PointerType[]) {\n  const average = {\n    pageX: 0,\n    pageY: 0,\n    clientX: 0,\n    clientY: 0,\n    screenX: 0,\n    screenY: 0,\n  }\n\n  type CoordKeys = keyof typeof average\n\n  for (const pointer of pointers) {\n    for (const prop in average) {\n      average[prop as CoordKeys] += pointer[prop as CoordKeys]\n    }\n  }\n  for (const prop in average) {\n    average[prop as CoordKeys] /= pointers.length\n  }\n\n  return average\n}\n\nexport function touchBBox(event: PointerType[]) {\n  if (!event.length) {\n    return null\n  }\n\n  const touches = getTouchPair(event)\n  const minX = Math.min(touches[0].pageX, touches[1].pageX)\n  const minY = Math.min(touches[0].pageY, touches[1].pageY)\n  const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n  const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n  return {\n    x: minX,\n    y: minY,\n    left: minX,\n    top: minY,\n    right: maxX,\n    bottom: maxY,\n    width: maxX - minX,\n    height: maxY - minY,\n  }\n}\n\nexport function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string) {\n  const sourceX = (deltaSource + 'X') as 'pageX'\n  const sourceY = (deltaSource + 'Y') as 'pageY'\n  const touches = getTouchPair(event)\n\n  const dx = touches[0][sourceX] - touches[1][sourceX]\n  const dy = touches[0][sourceY] - touches[1][sourceY]\n\n  return hypot(dx, dy)\n}\n\nexport function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string) {\n  const sourceX = (deltaSource + 'X') as 'pageX'\n  const sourceY = (deltaSource + 'Y') as 'pageY'\n  const touches = getTouchPair(event)\n  const dx = touches[1][sourceX] - touches[0][sourceX]\n  const dy = touches[1][sourceY] - touches[0][sourceY]\n  const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n  return angle\n}\n\nexport function getPointerType(pointer: { pointerType?: string; identifier?: number; type?: string }) {\n  return is.string(pointer.pointerType)\n    ? pointer.pointerType\n    : is.number(pointer.pointerType)\n      ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n      : // if the PointerEvent API isn't available, then the \"pointer\" must\n        // be either a MouseEvent, TouchEvent, or Touch object\n        /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n        ? 'touch'\n        : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets(event: Event) {\n  const path = is.func(event.composedPath)\n    ? (event.composedPath() as Element[])\n    : (event as unknown as { path: Element[] }).path\n\n  return [\n    domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n    domUtils.getActualElement(event.currentTarget as Element),\n  ]\n}\n\nexport function newCoords(): CoordsSetMember {\n  return {\n    page: { x: 0, y: 0 },\n    client: { x: 0, y: 0 },\n    timeStamp: 0,\n  }\n}\n\nexport function coordsToEvent(coords: MockCoords) {\n  const event = {\n    coords,\n    get page() {\n      return this.coords.page\n    },\n    get client() {\n      return this.coords.client\n    },\n    get timeStamp() {\n      return this.coords.timeStamp\n    },\n    get pageX() {\n      return this.coords.page.x\n    },\n    get pageY() {\n      return this.coords.page.y\n    },\n    get clientX() {\n      return this.coords.client.x\n    },\n    get clientY() {\n      return this.coords.client.y\n    },\n    get pointerId() {\n      return this.coords.pointerId\n    },\n    get target() {\n      return this.coords.target\n    },\n    get type() {\n      return this.coords.type\n    },\n    get pointerType() {\n      return this.coords.pointerType\n    },\n    get buttons() {\n      return this.coords.buttons\n    },\n    preventDefault() {},\n  }\n\n  return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n  page: Point\n  client: Point\n  timeStamp?: number\n  pointerId?: any\n  target?: any\n  type?: string\n  pointerType?: string\n  buttons?: number\n}\n\nexport { pointerExtend }\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent<T extends ActionName | null = never> {\n  declare type: string\n  declare target: EventTarget\n  declare currentTarget: Node\n  declare interactable: Interactable\n  /** @internal */\n  declare _interaction: Interaction<T>\n  declare timeStamp: number\n  immediatePropagationStopped = false\n  propagationStopped = false\n\n  constructor(interaction: Interaction<T>) {\n    this._interaction = interaction\n  }\n\n  preventDefault() {}\n\n  /**\n   * Don't call any other listeners (even on the current target)\n   */\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n\n  /**\n   * Don't call listeners on the remaining targets\n   */\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true\n  }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent<T extends ActionName | null = never> {\n  interaction: InteractionProxy<T>\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n  get(this: BaseEvent) {\n    return this._interaction._proxy\n  },\n  set(this: BaseEvent) {},\n})\n", "type Filter<T> = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = <T>(array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = <T>(array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = <T, U>(target: Array<T | U>, source: U[]) => {\n  for (const item of source) {\n    target.push(item)\n  }\n\n  return target\n}\n\nexport const from = <T = any>(source: ArrayLike<T>) => merge([] as T[], source as T[])\n\nexport const findIndex = <T>(array: T[], func: Filter<T>) => {\n  for (let i = 0; i < array.length; i++) {\n    if (func(array[i], i, array)) {\n      return i\n    }\n  }\n\n  return -1\n}\n\nexport const find = <T = any>(array: T[], func: Filter<T>): T | undefined => array[findIndex(array, func)]\n", "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n  declare target: Element\n  dropzone: Interactable\n  dragEvent: InteractEvent<'drag'>\n  relatedTarget: Element\n  draggable: Interactable\n  propagationStopped = false\n  immediatePropagationStopped = false\n\n  /**\n   * Class of events fired on dropzones during drags with acceptable targets.\n   */\n  constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n    super(dragEvent._interaction)\n\n    const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n    this.type = type\n    this.target = element\n    this.currentTarget = element\n    this.dropzone = dropzone\n    this.dragEvent = dragEvent\n    this.relatedTarget = dragEvent.target\n    this.draggable = dragEvent.interactable\n    this.timeStamp = dragEvent.timeStamp\n  }\n\n  /**\n   * If this is a `dropactivate` event, the dropzone element will be\n   * deactivated.\n   *\n   * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n   * dropzone element and more.\n   */\n  reject() {\n    const { dropState } = this._interaction\n\n    if (\n      this.type !== 'dropactivate' &&\n      (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n    ) {\n      return\n    }\n\n    dropState.prev.dropzone = this.dropzone\n    dropState.prev.element = this.target\n\n    dropState.rejected = true\n    dropState.events.enter = null\n\n    this.stopImmediatePropagation()\n\n    if (this.type === 'dropactivate') {\n      const activeDrops = dropState.activeDrops\n      const index = arr.findIndex(\n        activeDrops,\n        ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n      )\n\n      dropState.activeDrops.splice(index, 1)\n\n      const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n      deactivateEvent.dropzone = this.dropzone\n      deactivateEvent.target = this.target\n\n      this.dropzone.fire(deactivateEvent)\n    } else {\n      this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n    }\n  }\n\n  preventDefault() {}\n\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true\n  }\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '../drag/plugin'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n/* eslint-enable import/no-duplicates */\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n  dragEvent: any, // related drag operation\n  event: any, // touch or mouse EventEmitter\n  dropped: boolean, // default checker result\n  dropzone: Interactable, // dropzone interactable\n  dropElement: Element, // drop zone element\n  draggable: Interactable, // draggable's Interactable\n  draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n  accept?:\n    | string\n    | Element\n    | (({ dropzone, draggableElement }: { dropzone: Interactable; draggableElement: Element }) => boolean)\n  // How the overlap is checked on the drop zone\n  overlap?: 'pointer' | 'center' | number\n  checker?: DropFunctionChecker\n\n  ondropactivate?: ListenersArg\n  ondropdeactivate?: ListenersArg\n  ondragenter?: ListenersArg\n  ondragleave?: ListenersArg\n  ondropmove?: ListenersArg\n  ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n  (this: Interactable, options: DropzoneOptions | boolean): Interactable\n  (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    /**\n     *\n     * ```js\n     * interact('.drop').dropzone({\n     *   accept: '.can-drop' || document.getElementById('single-drop'),\n     *   overlap: 'pointer' || 'center' || zeroToOne\n     * }\n     * ```\n     *\n     * Returns or sets whether draggables can be dropped onto this target to\n     * trigger drop events\n     *\n     * Dropzones can receive the following events:\n     *  - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n     *  - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n     *  - `dragmove` when a draggable that has entered the dropzone is moved\n     *  - `drop` when a draggable is dropped into this dropzone\n     *\n     * Use the `accept` option to allow only elements that match the given CSS\n     * selector or element. The value can be:\n     *\n     *  - **an Element** - only that element can be dropped into this dropzone.\n     *  - **a string**, - the element being dragged must match it as a CSS selector.\n     *  - **`null`** - accept options is cleared - it accepts any element.\n     *\n     * Use the `overlap` option to set how drops are checked for. The allowed\n     * values are:\n     *\n     *   - `'pointer'`, the pointer must be over the dropzone (default)\n     *   - `'center'`, the draggable element's center must be over the dropzone\n     *   - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n     *   e.g. `0.5` for drop to happen when half of the area of the draggable is\n     *   over the dropzone\n     *\n     * Use the `checker` option to specify a function to check if a dragged element\n     * is over this Interactable.\n     *\n     * @param options - The new options to be set\n     */\n    dropzone(options: DropzoneOptions | boolean): Interactable\n    /** @returns The current setting */\n    dropzone(): DropzoneOptions\n\n    /**\n     * ```js\n     * interact(target)\n     * .dropChecker(function(dragEvent,         // related dragmove or dragend event\n     *                       event,             // TouchEvent/PointerEvent/MouseEvent\n     *                       dropped,           // bool result of the default checker\n     *                       dropzone,          // dropzone Interactable\n     *                       dropElement,       // dropzone elemnt\n     *                       draggable,         // draggable Interactable\n     *                       draggableElement) {// draggable element\n     *\n     *   return dropped && event.target.hasAttribute('allow-drop')\n     * }\n     * ```\n     */\n    dropCheck(\n      dragEvent: InteractEvent,\n      event: PointerEventType,\n      draggable: Interactable,\n      draggableElement: Element,\n      dropElemen: Element,\n      rect: any,\n    ): boolean\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    dropState?: DropState\n  }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface InteractEvent {\n    /** @internal */\n    prevDropzone?: Interactable\n    dropzone?: Interactable\n    dragEnter?: Element\n    dragLeave?: Element\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    drop: DropzoneOptions\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    dynamicDrop?: boolean\n  }\n\n  interface SignalArgs {\n    'actions/drop:start': DropSignalArg\n    'actions/drop:move': DropSignalArg\n    'actions/drop:end': DropSignalArg\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    drop?: typeof drop\n  }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n  interface InteractStatic {\n    /**\n     * Returns or sets whether the dimensions of dropzone elements are calculated\n     * on every dragmove or only on dragstart for the default dropChecker\n     *\n     * @param {boolean} [newValue] True to check on each move. False to check only\n     * before start\n     * @return {boolean | interact} The current setting or interact\n     */\n    dynamicDrop: (newValue?: boolean) => boolean | this\n  }\n}\n\ninterface DropSignalArg {\n  interaction: Interaction<'drag'>\n  dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n  dropzone: Interactable\n  element: Element\n  rect: Rect\n}\n\nexport interface DropState {\n  cur: {\n    // the dropzone a drag target might be dropped into\n    dropzone: Interactable\n    // the element at the time of checking\n    element: Element\n  }\n  prev: {\n    // the dropzone that was recently dragged away from\n    dropzone: Interactable\n    // the element at the time of checking\n    element: Element\n  }\n  // wheather the potential drop was rejected from a listener\n  rejected: boolean\n  // the drop events related to the current drag event\n  events: FiredDropEvents\n  activeDrops: ActiveDrop[]\n}\n\nfunction install(scope: Scope) {\n  const { actions, interactStatic: interact, Interactable, defaults } = scope\n\n  scope.usePlugin(drag)\n\n  Interactable.prototype.dropzone = function (this: Interactable, options) {\n    return dropzoneMethod(this, options)\n  } as Interactable['dropzone']\n\n  Interactable.prototype.dropCheck = function (\n    this: Interactable,\n    dragEvent,\n    event,\n    draggable,\n    draggableElement,\n    dropElement,\n    rect,\n  ) {\n    return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n  }\n\n  interact.dynamicDrop = function (newValue?: boolean) {\n    if (is.bool(newValue)) {\n      // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n      //  calcRects(dropzones)\n      // }\n\n      scope.dynamicDrop = newValue\n\n      return interact\n    }\n    return scope.dynamicDrop!\n  }\n\n  extend(actions.phaselessTypes, {\n    dragenter: true,\n    dragleave: true,\n    dropactivate: true,\n    dropdeactivate: true,\n    dropmove: true,\n    drop: true,\n  })\n  actions.methodDict.drop = 'dropzone'\n\n  scope.dynamicDrop = false\n\n  defaults.actions.drop = drop.defaults\n}\n\nfunction collectDropzones({ interactables }: Scope, draggableElement: Element) {\n  const drops: ActiveDrop[] = []\n\n  // collect all dropzones and their elements which qualify for a drop\n  for (const dropzone of interactables.list) {\n    if (!dropzone.options.drop.enabled) {\n      continue\n    }\n\n    const accept = dropzone.options.drop.accept\n\n    // test the draggable draggableElement against the dropzone's accept setting\n    if (\n      (is.element(accept) && accept !== draggableElement) ||\n      (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n      (is.func(accept) && !accept({ dropzone, draggableElement }))\n    ) {\n      continue\n    }\n\n    for (const dropzoneElement of dropzone.getAllElements()) {\n      if (dropzoneElement !== draggableElement) {\n        drops.push({\n          dropzone,\n          element: dropzoneElement,\n          rect: dropzone.getRect(dropzoneElement),\n        })\n      }\n    }\n  }\n\n  return drops\n}\n\nfunction fireActivationEvents(activeDrops: ActiveDrop[], event: DropEvent) {\n  // loop through all active dropzones and trigger event\n  for (const { dropzone, element } of activeDrops.slice()) {\n    event.dropzone = dropzone\n\n    // set current element as event target\n    event.target = element\n    dropzone.fire(event)\n    event.propagationStopped = event.immediatePropagationStopped = false\n  }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops(scope: Scope, dragElement: Element) {\n  // get dropzones and their elements that could receive the draggable\n  const activeDrops = collectDropzones(scope, dragElement)\n\n  for (const activeDrop of activeDrops) {\n    activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n  }\n\n  return activeDrops\n}\n\nfunction getDrop(\n  { dropState, interactable: draggable, element: dragElement }: Interaction,\n  dragEvent,\n  pointerEvent,\n) {\n  const validDrops: Element[] = []\n\n  // collect all dropzones and their elements which qualify for a drop\n  for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n    const isValid = dropzone.dropCheck(\n      dragEvent,\n      pointerEvent,\n      draggable!,\n      dragElement!,\n      dropzoneElement,\n      rect,\n    )\n    validDrops.push(isValid ? dropzoneElement : null)\n  }\n\n  // get the most appropriate dropzone based on DOM depth and order\n  const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n  return dropState!.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents(interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n  const dropState = interaction.dropState!\n  const dropEvents: Record<string, DropEvent | null> = {\n    enter: null,\n    leave: null,\n    activate: null,\n    deactivate: null,\n    move: null,\n    drop: null,\n  }\n\n  if (dragEvent.type === 'dragstart') {\n    dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n    dropEvents.activate.target = null as never\n    dropEvents.activate.dropzone = null as never\n  }\n  if (dragEvent.type === 'dragend') {\n    dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n    dropEvents.deactivate.target = null as never\n    dropEvents.deactivate.dropzone = null as never\n  }\n\n  if (dropState.rejected) {\n    return dropEvents\n  }\n\n  if (dropState.cur.element !== dropState.prev.element) {\n    // if there was a previous dropzone, create a dragleave event\n    if (dropState.prev.dropzone) {\n      dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n      dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n      dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n    }\n    // if dropzone is not null, create a dragenter event\n    if (dropState.cur.dropzone) {\n      dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n      dragEvent.dragEnter = dropState.cur.element\n      dragEvent.dropzone = dropState.cur.dropzone\n    }\n  }\n\n  if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n    dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n    dragEvent.dropzone = dropState.cur.dropzone\n    dragEvent.relatedTarget = dropState.cur.element\n  }\n  if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n    dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n    dragEvent.dropzone = dropState.cur.dropzone\n  }\n\n  return dropEvents\n}\n\ntype FiredDropEvents = Partial<\n  Record<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents(interaction: Interaction, events: FiredDropEvents) {\n  const dropState = interaction.dropState!\n  const { activeDrops, cur, prev } = dropState\n\n  if (events.leave) {\n    prev.dropzone.fire(events.leave)\n  }\n  if (events.enter) {\n    cur.dropzone.fire(events.enter)\n  }\n  if (events.move) {\n    cur.dropzone.fire(events.move)\n  }\n  if (events.drop) {\n    cur.dropzone.fire(events.drop)\n  }\n\n  if (events.deactivate) {\n    fireActivationEvents(activeDrops, events.deactivate)\n  }\n\n  dropState.prev.dropzone = cur.dropzone\n  dropState.prev.element = cur.element\n}\n\nfunction onEventCreated({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n  if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n    return\n  }\n\n  const dropState = interaction.dropState!\n\n  if (scope.dynamicDrop) {\n    dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n  }\n\n  const dragEvent = iEvent\n  const dropResult = getDrop(interaction, dragEvent, event)\n\n  // update rejected status\n  dropState.rejected =\n    dropState.rejected &&\n    !!dropResult &&\n    dropResult.dropzone === dropState.cur.dropzone &&\n    dropResult.element === dropState.cur.element\n\n  dropState.cur.dropzone = dropResult && dropResult.dropzone\n  dropState.cur.element = dropResult && dropResult.element\n\n  dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod(interactable: Interactable, options?: DropzoneOptions | boolean) {\n  if (is.object(options)) {\n    interactable.options.drop.enabled = options.enabled !== false\n\n    if (options.listeners) {\n      const normalized = normalizeListeners(options.listeners)\n      // rename 'drop' to '' as it will be prefixed with 'drop'\n      const corrected = Object.keys(normalized).reduce((acc, type) => {\n        const correctedType = /^(enter|leave)/.test(type)\n          ? `drag${type}`\n          : /^(activate|deactivate|move)/.test(type)\n            ? `drop${type}`\n            : type\n\n        acc[correctedType] = normalized[type]\n\n        return acc\n      }, {})\n\n      const prevListeners = interactable.options.drop.listeners\n      prevListeners && interactable.off(prevListeners)\n\n      interactable.on(corrected)\n      interactable.options.drop.listeners = corrected\n    }\n\n    if (is.func(options.ondrop)) {\n      interactable.on('drop', options.ondrop)\n    }\n    if (is.func(options.ondropactivate)) {\n      interactable.on('dropactivate', options.ondropactivate)\n    }\n    if (is.func(options.ondropdeactivate)) {\n      interactable.on('dropdeactivate', options.ondropdeactivate)\n    }\n    if (is.func(options.ondragenter)) {\n      interactable.on('dragenter', options.ondragenter)\n    }\n    if (is.func(options.ondragleave)) {\n      interactable.on('dragleave', options.ondragleave)\n    }\n    if (is.func(options.ondropmove)) {\n      interactable.on('dropmove', options.ondropmove)\n    }\n\n    if (/^(pointer|center)$/.test(options.overlap as string)) {\n      interactable.options.drop.overlap = options.overlap\n    } else if (is.number(options.overlap)) {\n      interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n    }\n    if ('accept' in options) {\n      interactable.options.drop.accept = options.accept\n    }\n    if ('checker' in options) {\n      interactable.options.drop.checker = options.checker\n    }\n\n    return interactable\n  }\n\n  if (is.bool(options)) {\n    interactable.options.drop.enabled = options\n\n    return interactable\n  }\n\n  return interactable.options.drop\n}\n\nfunction dropCheckMethod(\n  interactable: Interactable,\n  dragEvent: InteractEvent,\n  event: PointerEventType,\n  draggable: Interactable,\n  draggableElement: Element,\n  dropElement: Element,\n  rect: any,\n) {\n  let dropped = false\n\n  // if the dropzone has no rect (eg. display: none)\n  // call the custom dropChecker or just return false\n  if (!(rect = rect || interactable.getRect(dropElement))) {\n    return interactable.options.drop.checker\n      ? interactable.options.drop.checker(\n          dragEvent,\n          event,\n          dropped,\n          interactable,\n          dropElement,\n          draggable,\n          draggableElement,\n        )\n      : false\n  }\n\n  const dropOverlap = interactable.options.drop.overlap\n\n  if (dropOverlap === 'pointer') {\n    const origin = getOriginXY(draggable, draggableElement, 'drag')\n    const page = pointerUtils.getPageXY(dragEvent)\n\n    page.x += origin.x\n    page.y += origin.y\n\n    const horizontal = page.x > rect.left && page.x < rect.right\n    const vertical = page.y > rect.top && page.y < rect.bottom\n\n    dropped = horizontal && vertical\n  }\n\n  const dragRect = draggable.getRect(draggableElement)\n\n  if (dragRect && dropOverlap === 'center') {\n    const cx = dragRect.left + dragRect.width / 2\n    const cy = dragRect.top + dragRect.height / 2\n\n    dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n  }\n\n  if (dragRect && is.number(dropOverlap)) {\n    const overlapArea =\n      Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n      Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n    const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n    dropped = overlapRatio >= dropOverlap\n  }\n\n  if (interactable.options.drop.checker) {\n    dropped = interactable.options.drop.checker(\n      dragEvent,\n      event,\n      dropped,\n      interactable,\n      dropElement,\n      draggable,\n      draggableElement,\n    )\n  }\n\n  return dropped\n}\n\nconst drop: Plugin = {\n  id: 'actions/drop',\n  install,\n  listeners: {\n    'interactions:before-action-start': ({ interaction }) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      interaction.dropState = {\n        cur: {\n          dropzone: null,\n          element: null,\n        },\n        prev: {\n          dropzone: null,\n          element: null,\n        },\n        rejected: null,\n        events: null,\n        activeDrops: [],\n      }\n    },\n\n    'interactions:after-action-start': (\n      { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n      scope,\n    ) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const dropState = interaction.dropState!\n\n      // reset active dropzones\n      dropState.activeDrops = []\n      dropState.events = {}\n      dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n      dropState.events = getDropEvents(interaction, event, dragEvent)\n\n      if (dropState.events.activate) {\n        fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n        scope.fire('actions/drop:start', { interaction, dragEvent })\n      }\n    },\n\n    'interactions:action-move': onEventCreated,\n\n    'interactions:after-action-move': (\n      { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n      scope,\n    ) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const dropState = interaction.dropState!\n      fireDropEvents(interaction, dropState.events)\n\n      scope.fire('actions/drop:move', { interaction, dragEvent })\n      dropState.events = {}\n    },\n\n    'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n      if (arg.interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const { interaction, iEvent: dragEvent } = arg\n\n      onEventCreated(arg, scope)\n      fireDropEvents(interaction, interaction.dropState!.events)\n      scope.fire('actions/drop:end', { interaction, dragEvent })\n    },\n\n    'interactions:stop': ({ interaction }) => {\n      if (interaction.prepared.name !== 'drag') {\n        return\n      }\n\n      const { dropState } = interaction\n\n      if (dropState) {\n        dropState.activeDrops = null as never\n        dropState.events = null as never\n        dropState.cur.dropzone = null as never\n        dropState.cur.element = null as never\n        dropState.prev.dropzone = null as never\n        dropState.prev.element = null as never\n        dropState.rejected = false\n      }\n    },\n  },\n  getActiveDrops,\n  getDrop,\n  getDropEvents,\n  fireDropEvents,\n\n  filterEventType: (type: string) => type.search('drag') === 0 || type.search('drop') === 0,\n\n  defaults: {\n    enabled: false,\n    accept: null as never,\n    overlap: 'pointer',\n  } as DropzoneOptions,\n}\n\nexport default drop\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    gesture?: {\n      angle: number // angle from first to second touch\n      distance: number\n      scale: number // gesture.distance / gesture.startDistance\n      startAngle: number // angle of line joining two touches\n      startDistance: number // distance between two touches of touchStart\n    }\n  }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    gesturable(options: Partial<OrBoolean<GesturableOptions>> | boolean): this\n    gesturable(): GesturableOptions\n    /**\n     * ```js\n     * interact(element).gesturable({\n     *     onstart: function (event) {},\n     *     onmove : function (event) {},\n     *     onend  : function (event) {},\n     *\n     *     // limit multiple gestures.\n     *     // See the explanation in {@link Interactable.draggable} example\n     *     max: Infinity,\n     *     maxPerElement: 1,\n     * })\n     *\n     * var isGestureable = interact(element).gesturable()\n     * ```\n     *\n     * Gets or sets whether multitouch gestures can be performed on the target\n     *\n     * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n     * @returns A boolean indicating if this can be the target of gesture events, or this Interactable\n     */\n    gesturable(options?: Partial<OrBoolean<GesturableOptions>> | boolean): this | GesturableOptions\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    gesture: GesturableOptions\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    gesture?: typeof gesture\n  }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n  onstart?: ListenersArg\n  onmove?: ListenersArg\n  onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n  distance: number\n  angle: number\n  da: number // angle change\n  scale: number // ratio of distance start to current event\n  ds: number // scale change\n  box: Rect // enclosing box of all points\n  touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n  iEvent: GestureEvent\n  interaction: Interaction<'gesture'>\n}\n\nfunction install(scope: Scope) {\n  const { actions, Interactable, defaults } = scope\n\n  Interactable.prototype.gesturable = function (\n    this: InstanceType<typeof Interactable>,\n    options: GesturableOptions | boolean,\n  ) {\n    if (is.object(options)) {\n      this.options.gesture.enabled = options.enabled !== false\n      this.setPerAction('gesture', options)\n      this.setOnEvents('gesture', options)\n\n      return this\n    }\n\n    if (is.bool(options)) {\n      this.options.gesture.enabled = options\n\n      return this\n    }\n\n    return this.options.gesture as GesturableOptions\n  } as Interactable['gesturable']\n\n  actions.map.gesture = gesture\n  actions.methodDict.gesture = 'gesturable'\n\n  defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps({ interaction, iEvent, phase }: GestureSignalArg) {\n  if (interaction.prepared.name !== 'gesture') return\n\n  const pointers = interaction.pointers.map((p) => p.pointer)\n  const starting = phase === 'start'\n  const ending = phase === 'end'\n  const deltaSource = interaction.interactable.options.deltaSource\n\n  iEvent.touches = [pointers[0], pointers[1]]\n\n  if (starting) {\n    iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n    iEvent.box = pointerUtils.touchBBox(pointers)\n    iEvent.scale = 1\n    iEvent.ds = 0\n    iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n    iEvent.da = 0\n\n    interaction.gesture.startDistance = iEvent.distance\n    interaction.gesture.startAngle = iEvent.angle\n  } else if (ending || interaction.pointers.length < 2) {\n    const prevEvent = interaction.prevEvent as GestureEvent\n\n    iEvent.distance = prevEvent.distance\n    iEvent.box = prevEvent.box\n    iEvent.scale = prevEvent.scale\n    iEvent.ds = 0\n    iEvent.angle = prevEvent.angle\n    iEvent.da = 0\n  } else {\n    iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n    iEvent.box = pointerUtils.touchBBox(pointers)\n    iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n    iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n    iEvent.ds = iEvent.scale - interaction.gesture.scale\n    iEvent.da = iEvent.angle - interaction.gesture.angle\n  }\n\n  interaction.gesture.distance = iEvent.distance\n  interaction.gesture.angle = iEvent.angle\n\n  if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n    interaction.gesture.scale = iEvent.scale\n  }\n}\n\nconst gesture: Plugin = {\n  id: 'actions/gesture',\n  before: ['actions/drag', 'actions/resize'],\n  install,\n  listeners: {\n    'interactions:action-start': updateGestureProps,\n    'interactions:action-move': updateGestureProps,\n    'interactions:action-end': updateGestureProps,\n\n    'interactions:new': ({ interaction }) => {\n      interaction.gesture = {\n        angle: 0,\n        distance: 0,\n        scale: 1,\n        startAngle: 0,\n        startDistance: 0,\n      }\n    },\n\n    'auto-start:check': (arg) => {\n      if (arg.interaction.pointers.length < 2) {\n        return undefined\n      }\n\n      const gestureOptions = arg.interactable.options.gesture\n\n      if (!(gestureOptions && gestureOptions.enabled)) {\n        return undefined\n      }\n\n      arg.action = { name: 'gesture' }\n\n      return false\n    },\n  },\n\n  defaults: {},\n\n  getCursor() {\n    return ''\n  },\n\n  filterEventType: (type: string) => type.search('gesture') === 0,\n}\n\nexport default gesture\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n  ActionName,\n  ActionProps,\n  EdgeOptions,\n  FullRect,\n  ListenersArg,\n  OrBoolean,\n  Point,\n  Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    resizable(): ResizableOptions\n    resizable(options: Partial<OrBoolean<ResizableOptions>> | boolean): this\n    /**\n     * ```js\n     * interact(element).resizable({\n     *   onstart: function (event) {},\n     *   onmove : function (event) {},\n     *   onend  : function (event) {},\n     *\n     *   edges: {\n     *     top   : true,       // Use pointer coords to check for resize.\n     *     left  : false,      // Disable resizing from left edge.\n     *     bottom: '.resize-s',// Resize if pointer target matches selector\n     *     right : handleEl    // Resize if pointer target is the given Element\n     *   },\n     *\n     *   // Width and height can be adjusted independently. When `true`, width and\n     *   // height are adjusted at a 1:1 ratio.\n     *   square: false,\n     *\n     *   // Width and height can be adjusted independently. When `true`, width and\n     *   // height maintain the aspect ratio they had when resizing started.\n     *   preserveAspectRatio: false,\n     *\n     *   // a value of 'none' will limit the resize rect to a minimum of 0x0\n     *   // 'negate' will allow the rect to have negative width/height\n     *   // 'reposition' will keep the width/height positive by swapping\n     *   // the top and bottom edges and/or swapping the left and right edges\n     *   invert: 'none' || 'negate' || 'reposition'\n     *\n     *   // limit multiple resizes.\n     *   // See the explanation in the {@link Interactable.draggable} example\n     *   max: Infinity,\n     *   maxPerElement: 1,\n     * })\n     *\n     * var isResizeable = interact(element).resizable()\n     * ```\n     *\n     * Gets or sets whether resize actions can be performed on the target\n     *\n     * @param options - true/false or An object with event\n     * listeners to be fired on resize events (object makes the Interactable\n     * resizable)\n     * @returns A boolean indicating if this can be the\n     * target of resize elements, or this Interactable\n     */\n    resizable(options?: Partial<OrBoolean<ResizableOptions>> | boolean): this | ResizableOptions\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction<T extends ActionName | null = ActionName> {\n    resizeAxes: 'x' | 'y' | 'xy'\n    styleCursor(newValue: boolean): this\n    styleCursor(): boolean\n    resizeStartAspectRatio: number\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    resize: ResizableOptions\n  }\n}\n\ndeclare module '@interactjs/core/types' {\n  interface ActionMap {\n    resize?: typeof resize\n  }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n  square?: boolean\n  preserveAspectRatio?: boolean\n  edges?: EdgeOptions | null\n  axis?: 'x' | 'y' | 'xy' // deprecated\n  invert?: 'none' | 'negate' | 'reposition'\n  margin?: number\n  squareResize?: boolean\n  oninertiastart?: ListenersArg\n  onstart?: ListenersArg\n  onmove?: ListenersArg\n  onend?: ListenersArg\n}\n\nexport interface ResizeEvent<P extends EventPhase = EventPhase> extends InteractEvent<'resize', P> {\n  deltaRect?: FullRect\n  edges?: ActionProps['edges']\n}\n\nfunction install(scope: Scope) {\n  const {\n    actions,\n    browser,\n    Interactable, // tslint:disable-line no-shadowed-variable\n    defaults,\n  } = scope\n\n  // Less Precision with touch input\n\n  resize.cursors = initCursors(browser)\n  resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n  Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n    return resizable(this, options, scope)\n  } as Interactable['resizable']\n\n  actions.map.resize = resize\n  actions.methodDict.resize = 'resizable'\n\n  defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker(arg) {\n  const { interaction, interactable, element, rect, buttons } = arg\n\n  if (!rect) {\n    return undefined\n  }\n\n  const page = extend({}, interaction.coords.cur.page)\n  const resizeOptions = interactable.options.resize\n\n  if (\n    !(resizeOptions && resizeOptions.enabled) ||\n    // check mouseButton setting if the pointer is down\n    (interaction.pointerIsDown &&\n      /mouse|pointer/.test(interaction.pointerType) &&\n      (buttons & resizeOptions.mouseButtons) === 0)\n  ) {\n    return undefined\n  }\n\n  // if using resize.edges\n  if (is.object(resizeOptions.edges)) {\n    const resizeEdges = {\n      left: false,\n      right: false,\n      top: false,\n      bottom: false,\n    }\n\n    for (const edge in resizeEdges) {\n      resizeEdges[edge] = checkResizeEdge(\n        edge,\n        resizeOptions.edges[edge],\n        page,\n        interaction._latestPointer.eventTarget,\n        element,\n        rect,\n        resizeOptions.margin || resize.defaultMargin,\n      )\n    }\n\n    resizeEdges.left = resizeEdges.left && !resizeEdges.right\n    resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n    if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n      arg.action = {\n        name: 'resize',\n        edges: resizeEdges,\n      }\n    }\n  } else {\n    const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n    const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n    if (right || bottom) {\n      arg.action = {\n        name: 'resize',\n        axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n      }\n    }\n  }\n\n  return arg.action ? false : undefined\n}\n\nfunction resizable(interactable: Interactable, options: OrBoolean<ResizableOptions> | boolean, scope: Scope) {\n  if (is.object(options)) {\n    interactable.options.resize.enabled = options.enabled !== false\n    interactable.setPerAction('resize', options)\n    interactable.setOnEvents('resize', options)\n\n    if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n      interactable.options.resize.axis = options.axis\n    } else if (options.axis === null) {\n      interactable.options.resize.axis = scope.defaults.actions.resize.axis\n    }\n\n    if (is.bool(options.preserveAspectRatio)) {\n      interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n    } else if (is.bool(options.square)) {\n      interactable.options.resize.square = options.square\n    }\n\n    return interactable\n  }\n  if (is.bool(options)) {\n    interactable.options.resize.enabled = options\n\n    return interactable\n  }\n  return interactable.options.resize\n}\n\nfunction checkResizeEdge(\n  name: string,\n  value: any,\n  page: Point,\n  element: Node,\n  interactableElement: Element,\n  rect: Rect,\n  margin: number,\n) {\n  // false, '', undefined, null\n  if (!value) {\n    return false\n  }\n\n  // true value, use pointer coords and element rect\n  if (value === true) {\n    // if dimensions are negative, \"switch\" edges\n    const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n    const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n    // don't use margin greater than half the relevent dimension\n    margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n    if (width < 0) {\n      if (name === 'left') {\n        name = 'right'\n      } else if (name === 'right') {\n        name = 'left'\n      }\n    }\n    if (height < 0) {\n      if (name === 'top') {\n        name = 'bottom'\n      } else if (name === 'bottom') {\n        name = 'top'\n      }\n    }\n\n    if (name === 'left') {\n      const edge = width >= 0 ? rect.left : rect.right\n      return page.x < edge + margin\n    }\n    if (name === 'top') {\n      const edge = height >= 0 ? rect.top : rect.bottom\n      return page.y < edge + margin\n    }\n\n    if (name === 'right') {\n      return page.x > (width >= 0 ? rect.right : rect.left) - margin\n    }\n    if (name === 'bottom') {\n      return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n    }\n  }\n\n  // the remaining checks require an element\n  if (!is.element(element)) {\n    return false\n  }\n\n  return is.element(value)\n    ? // the value is an element to use as a resize handle\n      value === element\n    : // otherwise check if element matches value as selector\n      dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors(browser: typeof import('@interactjs/utils/browser').default) {\n  return browser.isIe9\n    ? {\n        x: 'e-resize',\n        y: 's-resize',\n        xy: 'se-resize',\n\n        top: 'n-resize',\n        left: 'w-resize',\n        bottom: 's-resize',\n        right: 'e-resize',\n        topleft: 'se-resize',\n        bottomright: 'se-resize',\n        topright: 'ne-resize',\n        bottomleft: 'ne-resize',\n      }\n    : {\n        x: 'ew-resize',\n        y: 'ns-resize',\n        xy: 'nwse-resize',\n\n        top: 'ns-resize',\n        left: 'ew-resize',\n        bottom: 'ns-resize',\n        right: 'ew-resize',\n        topleft: 'nwse-resize',\n        bottomright: 'nwse-resize',\n        topright: 'nesw-resize',\n        bottomleft: 'nesw-resize',\n      }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start({ iEvent, interaction }: { iEvent: InteractEvent<any, any>; interaction: Interaction }) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n    return\n  }\n\n  const resizeEvent = iEvent as ResizeEvent\n  const rect = interaction.rect\n\n  interaction._rects = {\n    start: extend({}, rect),\n    corrected: extend({}, rect),\n    previous: extend({}, rect),\n    delta: {\n      left: 0,\n      right: 0,\n      width: 0,\n      top: 0,\n      bottom: 0,\n      height: 0,\n    },\n  }\n\n  resizeEvent.edges = interaction.prepared.edges\n  resizeEvent.rect = interaction._rects.corrected\n  resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move({ iEvent, interaction }: { iEvent: InteractEvent<any, any>; interaction: Interaction }) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n  const resizeEvent = iEvent as ResizeEvent\n  const resizeOptions = interaction.interactable.options.resize\n  const invert = resizeOptions.invert\n  const invertible = invert === 'reposition' || invert === 'negate'\n\n  const current = interaction.rect\n  const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n  extend(previous, corrected)\n\n  if (invertible) {\n    // if invertible, copy the current rect\n    extend(corrected, current)\n\n    if (invert === 'reposition') {\n      // swap edge values if necessary to keep width/height positive\n      if (corrected.top > corrected.bottom) {\n        const swap = corrected.top\n\n        corrected.top = corrected.bottom\n        corrected.bottom = swap\n      }\n      if (corrected.left > corrected.right) {\n        const swap = corrected.left\n\n        corrected.left = corrected.right\n        corrected.right = swap\n      }\n    }\n  } else {\n    // if not invertible, restrict to minimum of 0x0 rect\n    corrected.top = Math.min(current.top, startRect.bottom)\n    corrected.bottom = Math.max(current.bottom, startRect.top)\n    corrected.left = Math.min(current.left, startRect.right)\n    corrected.right = Math.max(current.right, startRect.left)\n  }\n\n  corrected.width = corrected.right - corrected.left\n  corrected.height = corrected.bottom - corrected.top\n\n  for (const edge in corrected) {\n    deltaRect[edge] = corrected[edge] - previous[edge]\n  }\n\n  resizeEvent.edges = interaction.prepared.edges\n  resizeEvent.rect = corrected\n  resizeEvent.deltaRect = deltaRect\n}\n\nfunction end({ iEvent, interaction }: { iEvent: InteractEvent<any, any>; interaction: Interaction }) {\n  if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n  const resizeEvent = iEvent as ResizeEvent\n\n  resizeEvent.edges = interaction.prepared.edges\n  resizeEvent.rect = interaction._rects.corrected\n  resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes({\n  iEvent,\n  interaction,\n}: {\n  iEvent: InteractEvent<any, any>\n  interaction: Interaction\n}) {\n  if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n  const options = interaction.interactable.options\n  const resizeEvent = iEvent as ResizeEvent\n\n  if (options.resize.square) {\n    if (interaction.resizeAxes === 'y') {\n      resizeEvent.delta.x = resizeEvent.delta.y\n    } else {\n      resizeEvent.delta.y = resizeEvent.delta.x\n    }\n    resizeEvent.axes = 'xy'\n  } else {\n    resizeEvent.axes = interaction.resizeAxes\n\n    if (interaction.resizeAxes === 'x') {\n      resizeEvent.delta.y = 0\n    } else if (interaction.resizeAxes === 'y') {\n      resizeEvent.delta.x = 0\n    }\n  }\n}\n\nconst resize: Plugin = {\n  id: 'actions/resize',\n  before: ['actions/drag'],\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.resizeAxes = 'xy'\n    },\n\n    'interactions:action-start': (arg) => {\n      start(arg)\n      updateEventAxes(arg)\n    },\n    'interactions:action-move': (arg) => {\n      move(arg)\n      updateEventAxes(arg)\n    },\n    'interactions:action-end': end,\n    'auto-start:check': resizeChecker,\n  },\n\n  defaults: {\n    square: false,\n    preserveAspectRatio: false,\n    axis: 'xy',\n\n    // use default margin\n    margin: NaN,\n\n    // object with props left, right, top, bottom which are\n    // true/false values to resize when the pointer is over that edge,\n    // CSS selectors to match the handles for each direction\n    // or the Elements for each handle\n    edges: null,\n\n    // a value of 'none' will limit the resize rect to a minimum of 0x0\n    // 'negate' will alow the rect to have negative width/height\n    // 'reposition' will keep the width/height positive by swapping\n    // the top and bottom edges and/or swapping the left and right edges\n    invert: 'none',\n  } as ResizableOptions,\n\n  cursors: null as ReturnType<typeof initCursors>,\n\n  getCursor({ edges, axis, name }: ActionProps) {\n    const cursors = resize.cursors\n    let result: string = null\n\n    if (axis) {\n      result = cursors[name + axis]\n    } else if (edges) {\n      let cursorKey = ''\n\n      for (const edge of ['top', 'bottom', 'left', 'right']) {\n        if (edges[edge]) {\n          cursorKey += edge\n        }\n      }\n\n      result = cursors[cursorKey]\n    }\n\n    return result\n  },\n\n  filterEventType: (type: string) => type.search('resize') === 0,\n\n  defaultMargin: null as number,\n}\n\nexport default resize\n", "let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init(global: Window | typeof globalThis) {\n  request = global.requestAnimationFrame\n  cancel = global.cancelAnimationFrame\n\n  if (!request) {\n    const vendors = ['ms', 'moz', 'webkit', 'o']\n\n    for (const vendor of vendors) {\n      request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n      cancel =\n        global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n        global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n    }\n  }\n\n  request = request && request.bind(global)\n  cancel = cancel && cancel.bind(global)\n\n  if (!request) {\n    request = (callback) => {\n      const currTime = Date.now()\n      const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n      const token = global.setTimeout(() => {\n        // eslint-disable-next-line n/no-callback-literal\n        callback(currTime + timeToCall)\n      }, timeToCall)\n\n      lastTime = currTime + timeToCall\n      return token as any\n    }\n\n    cancel = (token) => clearTimeout(token)\n  }\n}\n\nexport default {\n  request: (callback: FrameRequestCallback) => request(callback),\n  cancel: (token: number) => cancel(token),\n  init,\n}\n", "import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n  id: 'actions',\n  install(scope: Scope) {\n    scope.usePlugin(gesture)\n    scope.usePlugin(resize)\n    scope.usePlugin(drag)\n    scope.usePlugin(drop)\n  },\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    autoScroll: typeof autoScroll\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    autoScroll?: typeof autoScroll\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    autoScroll?: AutoScrollOptions\n  }\n}\n\nexport interface AutoScrollOptions {\n  container?: Window | HTMLElement | string\n  margin?: number\n  distance?: number\n  interval?: number\n  speed?: number\n  enabled?: boolean\n}\n\nfunction install(scope: Scope) {\n  const { defaults, actions } = scope\n\n  scope.autoScroll = autoScroll\n  autoScroll.now = () => scope.now()\n\n  actions.phaselessTypes.autoscroll = true\n  defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n  defaults: {\n    enabled: false,\n    margin: 60,\n\n    // the item that is scrolled (Window or HTMLElement)\n    container: null as AutoScrollOptions['container'],\n\n    // the scroll speed in pixels per second\n    speed: 300,\n  } as AutoScrollOptions,\n\n  now: Date.now,\n\n  interaction: null as Interaction<ActionName> | null,\n  i: 0, // the handle returned by window.setInterval\n\n  // Direction each pulse is to scroll in\n  x: 0,\n  y: 0,\n\n  isScrolling: false,\n  prevTime: 0,\n  margin: 0,\n  speed: 0,\n\n  start(interaction: Interaction) {\n    autoScroll.isScrolling = true\n    raf.cancel(autoScroll.i)\n\n    interaction.autoScroll = autoScroll\n    autoScroll.interaction = interaction\n    autoScroll.prevTime = autoScroll.now()\n    autoScroll.i = raf.request(autoScroll.scroll)\n  },\n\n  stop() {\n    autoScroll.isScrolling = false\n    if (autoScroll.interaction) {\n      autoScroll.interaction.autoScroll = null\n    }\n    raf.cancel(autoScroll.i)\n  },\n\n  // scroll the window by the values in scroll.x/y\n  scroll() {\n    const { interaction } = autoScroll\n    const { interactable, element } = interaction\n    const actionName = interaction.prepared.name\n    const options = interactable.options[actionName].autoScroll\n    const container = getContainer(options.container, interactable, element)\n    const now = autoScroll.now()\n    // change in time in seconds\n    const dt = (now - autoScroll.prevTime) / 1000\n    // displacement\n    const s = options.speed * dt\n\n    if (s >= 1) {\n      const scrollBy = {\n        x: autoScroll.x * s,\n        y: autoScroll.y * s,\n      }\n\n      if (scrollBy.x || scrollBy.y) {\n        const prevScroll = getScroll(container)\n\n        if (is.window(container)) {\n          container.scrollBy(scrollBy.x, scrollBy.y)\n        } else if (container) {\n          container.scrollLeft += scrollBy.x\n          container.scrollTop += scrollBy.y\n        }\n\n        const curScroll = getScroll(container)\n        const delta = {\n          x: curScroll.x - prevScroll.x,\n          y: curScroll.y - prevScroll.y,\n        }\n\n        if (delta.x || delta.y) {\n          interactable.fire({\n            type: 'autoscroll',\n            target: element,\n            interactable,\n            delta,\n            interaction,\n            container,\n          })\n        }\n      }\n\n      autoScroll.prevTime = now\n    }\n\n    if (autoScroll.isScrolling) {\n      raf.cancel(autoScroll.i)\n      autoScroll.i = raf.request(autoScroll.scroll)\n    }\n  },\n  check(interactable: Interactable, actionName: ActionName) {\n    const options = interactable.options\n\n    return options[actionName].autoScroll?.enabled\n  },\n  onInteractionMove<T extends ActionName>({\n    interaction,\n    pointer,\n  }: {\n    interaction: Interaction<T>\n    pointer: PointerType\n  }) {\n    if (\n      !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n    ) {\n      return\n    }\n\n    if (interaction.simulation) {\n      autoScroll.x = autoScroll.y = 0\n      return\n    }\n\n    let top: boolean\n    let right: boolean\n    let bottom: boolean\n    let left: boolean\n\n    const { interactable, element } = interaction\n    const actionName = interaction.prepared.name\n    const options = interactable.options[actionName].autoScroll\n    const container = getContainer(options.container, interactable, element)\n\n    if (is.window(container)) {\n      left = pointer.clientX < autoScroll.margin\n      top = pointer.clientY < autoScroll.margin\n      right = pointer.clientX > container.innerWidth - autoScroll.margin\n      bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n    } else {\n      const rect = domUtils.getElementClientRect(container)\n\n      left = pointer.clientX < rect.left + autoScroll.margin\n      top = pointer.clientY < rect.top + autoScroll.margin\n      right = pointer.clientX > rect.right - autoScroll.margin\n      bottom = pointer.clientY > rect.bottom - autoScroll.margin\n    }\n\n    autoScroll.x = right ? 1 : left ? -1 : 0\n    autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n    if (!autoScroll.isScrolling) {\n      // set the autoScroll properties to those of the target\n      autoScroll.margin = options.margin\n      autoScroll.speed = options.speed\n\n      autoScroll.start(interaction)\n    }\n  },\n}\n\nexport function getContainer(value: any, interactable: Interactable, element: Element) {\n  return (\n    (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n  )\n}\n\nexport function getScroll(container: any) {\n  if (is.window(container)) {\n    container = window.document.body\n  }\n\n  return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize(container: any) {\n  if (is.window(container)) {\n    container = window.document.body\n  }\n\n  return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta<T extends ActionName>(\n  {\n    interaction,\n    element,\n  }: {\n    interaction: Partial<Interaction<T>>\n    element: Element\n  },\n  func: any,\n) {\n  const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n  if (!scrollOptions || !scrollOptions.enabled) {\n    func()\n    return { x: 0, y: 0 }\n  }\n\n  const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n  const prevSize = getScroll(scrollContainer)\n  func()\n  const curSize = getScroll(scrollContainer)\n\n  return {\n    x: curSize.x - prevSize.x,\n    y: curSize.y - prevSize.y,\n  }\n}\n\nconst autoScrollPlugin: Plugin = {\n  id: 'auto-scroll',\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.autoScroll = null\n    },\n\n    'interactions:destroy': ({ interaction }) => {\n      interaction.autoScroll = null\n      autoScroll.stop()\n      if (autoScroll.interaction) {\n        autoScroll.interaction = null\n      }\n    },\n\n    'interactions:stop': autoScroll.stop,\n\n    'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n  },\n}\n\nexport default autoScrollPlugin\n", "import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce<T>(this: T, method: (...args: any[]) => any, message: string) {\n  let warned = false\n\n  return function (this: T) {\n    if (!warned) {\n      ;(window as any).console.warn(message)\n      warned = true\n    }\n\n    return method.apply(this, arguments)\n  }\n}\n\nexport function copyAction<T extends ActionName>(dest: ActionProps<any>, src: ActionProps<T>) {\n  dest.name = src.name\n  dest.axis = src.axis\n  dest.edges = src.edges\n\n  return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    getAction: (\n      this: Interactable,\n      pointer: PointerType,\n      event: PointerEventType,\n      interaction: Interaction,\n      element: Element,\n    ) => ActionProps | null\n    styleCursor(newValue: boolean): this\n    styleCursor(): boolean\n    /**\n     * Returns or sets whether the the cursor should be changed depending on the\n     * action that would be performed if the mouse were pressed and dragged.\n     *\n     * @param {boolean} [newValue]\n     * @return {boolean | Interactable} The current setting or this Interactable\n     */\n    styleCursor(newValue?: boolean): boolean | this\n    actionChecker(checker: Function): Interactable\n    actionChecker(): Function\n    /**\n     * ```js\n     * interact('.resize-drag')\n     *   .resizable(true)\n     *   .draggable(true)\n     *   .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n     *\n     *     if (interact.matchesSelector(event.target, '.drag-handle')) {\n     *       // force drag with handle target\n     *       action.name = drag\n     *     }\n     *     else {\n     *       // resize from the top and right edges\n     *       action.name  = 'resize'\n     *       action.edges = { top: true, right: true }\n     *     }\n     *\n     *     return action\n     * })\n     * ```\n     *\n     * Returns or sets the function used to check action to be performed on\n     * pointerDown\n     *\n     * @param checker - A function which takes a pointer event,\n     * defaultAction string, interactable, element and interaction as parameters\n     * and returns an object with name property 'drag' 'resize' or 'gesture' and\n     * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n     * props.\n     * @returns The checker function or this Interactable\n     */\n    actionChecker(checker?: Function): Interactable | Function\n    /** @returns This interactable */\n    ignoreFrom(newValue: string | Element | null): Interactable\n    /** @returns The current ignoreFrom value */\n    ignoreFrom(): string | Element | null\n    /**\n     * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n     * of it's parents match the given CSS selector or Element, no\n     * drag/resize/gesture is started.\n     *\n     * @deprecated\n     * Don't use this method. Instead set the `ignoreFrom` option for each action\n     * or for `pointerEvents`\n     *\n     * ```js\n     * interact(targett)\n     *   .draggable({\n     *     ignoreFrom: 'input, textarea, a[href]'',\n     *   })\n     *   .pointerEvents({\n     *     ignoreFrom: '[no-pointer]',\n     *   })\n     * ```\n     * Interactable\n     */\n    ignoreFrom(\n      /** a CSS selector string, an Element or `null` to not ignore any elements */\n      newValue?: string | Element | null,\n    ): Interactable | string | Element | null\n    allowFrom(): boolean\n    /**\n     *\n     * A drag/resize/gesture is started only If the target of the `mousedown`,\n     * `pointerdown` or `touchstart` event or any of it's parents match the given\n     * CSS selector or Element.\n     *\n     * @deprecated\n     * Don't use this method. Instead set the `allowFrom` option for each action\n     * or for `pointerEvents`\n     *\n     * ```js\n     * interact(targett)\n     *   .resizable({\n     *     allowFrom: '.resize-handle',\n     *   .pointerEvents({\n     *     allowFrom: '.handle',,\n     *   })\n     * ```\n     *\n     * @param {string | Element | null} [newValue]\n     * @return {string | Element | object} The current allowFrom value or this\n     * Interactable\n     */\n    allowFrom(\n      /** A CSS selector string, an Element or `null` to allow from any element */\n      newValue: string | Element | null,\n    ): Interactable\n  }\n}\n\nfunction install(scope: Scope) {\n  const {\n    Interactable, // tslint:disable-line no-shadowed-variable\n  } = scope\n\n  Interactable.prototype.getAction = function getAction(\n    this: Interactable,\n    pointer: PointerType,\n    event: PointerEventType,\n    interaction: Interaction,\n    element: Element,\n  ): ActionProps {\n    const action = defaultActionChecker(this, event, interaction, element, scope)\n\n    if (this.options.actionChecker) {\n      return this.options.actionChecker(pointer, event, action, this, element, interaction)\n    }\n\n    return action\n  }\n\n  Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n    return this._backCompatOption('ignoreFrom', newValue)\n  }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n  Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n    return this._backCompatOption('allowFrom', newValue)\n  }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n  Interactable.prototype.actionChecker = actionChecker\n\n  Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker(\n  interactable: Interactable,\n  event: PointerEventType,\n  interaction: Interaction,\n  element: Element,\n  scope: Scope,\n) {\n  const rect = interactable.getRect(element)\n  const buttons =\n    (event as MouseEvent).buttons ||\n    {\n      0: 1,\n      1: 4,\n      3: 8,\n      4: 16,\n    }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n  const arg = {\n    action: null,\n    interactable,\n    interaction,\n    element,\n    rect,\n    buttons,\n  }\n\n  scope.fire('auto-start:check', arg)\n\n  return arg.action\n}\n\nfunction styleCursor(this: Interactable, newValue?: boolean) {\n  if (is.bool(newValue)) {\n    this.options.styleCursor = newValue\n\n    return this\n  }\n\n  if (newValue === null) {\n    delete this.options.styleCursor\n\n    return this\n  }\n\n  return this.options.styleCursor\n}\n\nfunction actionChecker(this: Interactable, checker?: any) {\n  if (is.func(checker)) {\n    this.options.actionChecker = checker\n\n    return this\n  }\n\n  if (checker === null) {\n    delete this.options.actionChecker\n\n    return this\n  }\n\n  return this.options.actionChecker\n}\n\nexport default {\n  id: 'auto-start/interactableMethods',\n  install,\n}\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n  CursorChecker,\n  PointerType,\n  PointerEventType,\n  Element,\n  ActionName,\n  ActionProps,\n} from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './InteractableMethods'\nimport InteractableMethods from './InteractableMethods'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n  export interface InteractStatic {\n    /**\n     * Returns or sets the maximum number of concurrent interactions allowed.  By\n     * default only 1 interaction is allowed at a time (for backwards\n     * compatibility). To allow multiple interactions on the same Interactables and\n     * elements, you need to enable it in the draggable, resizable and gesturable\n     * `'max'` and `'maxPerElement'` options.\n     *\n     * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n     */\n    maxInteractions: (newValue: any) => any\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    autoStart: AutoStart\n  }\n\n  interface SignalArgs {\n    'autoStart:before-start': Omit<SignalArgs['interactions:move'], 'interaction'> & {\n      interaction: Interaction<ActionName>\n    }\n    'autoStart:prepared': { interaction: Interaction }\n    'auto-start:check': CheckSignalArg\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface BaseDefaults {\n    actionChecker?: any\n    cursorChecker?: any\n    styleCursor?: any\n  }\n\n  interface PerActionDefaults {\n    manualStart?: boolean\n    max?: number\n    maxPerElement?: number\n    allowFrom?: string | Element\n    ignoreFrom?: string | Element\n    cursorChecker?: CursorChecker\n\n    // only allow left button by default\n    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n    // TODO: docst\n    mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16\n  }\n}\n\ninterface CheckSignalArg {\n  interactable: Interactable\n  interaction: Interaction\n  element: Element\n  action: ActionProps<ActionName>\n  buttons: number\n}\n\nexport interface AutoStart {\n  // Allow this many interactions to happen simultaneously\n  maxInteractions: number\n  withinInteractionLimit: typeof withinInteractionLimit\n  cursorElement: Element\n}\n\nfunction install(scope: Scope) {\n  const { interactStatic: interact, defaults } = scope\n\n  scope.usePlugin(InteractableMethods)\n\n  defaults.base.actionChecker = null\n  defaults.base.styleCursor = true\n\n  extend(defaults.perAction, {\n    manualStart: false,\n    max: Infinity,\n    maxPerElement: 1,\n    allowFrom: null,\n    ignoreFrom: null,\n\n    // only allow left button by default\n    // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n    mouseButtons: 1,\n  })\n\n  interact.maxInteractions = (newValue: number) => maxInteractions(newValue, scope)\n\n  scope.autoStart = {\n    // Allow this many interactions to happen simultaneously\n    maxInteractions: Infinity,\n    withinInteractionLimit,\n    cursorElement: null,\n  }\n}\n\nfunction prepareOnDown(\n  { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n  scope: Scope,\n) {\n  if (interaction.interacting()) return\n\n  const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n  prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove(\n  { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n  scope: Scope,\n) {\n  if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) return\n\n  const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Element, scope)\n  prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove(arg: SignalArgs['interactions:move'], scope: Scope) {\n  const { interaction } = arg\n\n  if (\n    !interaction.pointerIsDown ||\n    interaction.interacting() ||\n    !interaction.pointerWasMoved ||\n    !interaction.prepared.name\n  ) {\n    return\n  }\n\n  scope.fire('autoStart:before-start', arg)\n\n  const { interactable } = interaction\n  const actionName = (interaction as Interaction<ActionName>).prepared.name\n\n  if (actionName && interactable) {\n    // check manualStart and interaction limit\n    if (\n      interactable.options[actionName].manualStart ||\n      !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n    ) {\n      interaction.stop()\n    } else {\n      interaction.start(interaction.prepared, interactable, interaction.element)\n      setInteractionCursor(interaction, scope)\n    }\n  }\n}\n\nfunction clearCursorOnStop({ interaction }: { interaction: Interaction }, scope: Scope) {\n  const { interactable } = interaction\n\n  if (interactable && interactable.options.styleCursor) {\n    setCursor(interaction.element, '', scope)\n  }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction<T extends ActionName>(\n  action: ActionProps<T>,\n  interactable: Interactable,\n  element: Element,\n  eventTarget: Node,\n  scope: Scope,\n) {\n  if (\n    interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n    interactable.options[action.name].enabled &&\n    withinInteractionLimit(interactable, element, action, scope)\n  ) {\n    return action\n  }\n\n  return null\n}\n\nfunction validateMatches(\n  interaction: Interaction,\n  pointer: PointerType,\n  event: PointerEventType,\n  matches: Interactable[],\n  matchElements: Element[],\n  eventTarget: Node,\n  scope: Scope,\n) {\n  for (let i = 0, len = matches.length; i < len; i++) {\n    const match = matches[i]\n    const matchElement = matchElements[i]\n    const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n    if (!matchAction) {\n      continue\n    }\n\n    const action = validateAction<ActionName>(matchAction, match, matchElement, eventTarget, scope)\n\n    if (action) {\n      return {\n        action,\n        interactable: match,\n        element: matchElement,\n      }\n    }\n  }\n\n  return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo(\n  interaction: Interaction,\n  pointer: PointerType,\n  event: PointerEventType,\n  eventTarget: Node,\n  scope: Scope,\n) {\n  let matches: Interactable[] = []\n  let matchElements: Element[] = []\n\n  let element = eventTarget as Element\n\n  function pushMatches(interactable: Interactable) {\n    matches.push(interactable)\n    matchElements.push(element)\n  }\n\n  while (is.element(element)) {\n    matches = []\n    matchElements = []\n\n    scope.interactables.forEachMatch(element, pushMatches)\n\n    const actionInfo = validateMatches(\n      interaction,\n      pointer,\n      event,\n      matches,\n      matchElements,\n      eventTarget,\n      scope,\n    )\n\n    if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n      return actionInfo\n    }\n\n    element = domUtils.parentNode(element) as Element\n  }\n\n  return { action: null, interactable: null, element: null }\n}\n\nfunction prepare(\n  interaction: Interaction,\n  {\n    action,\n    interactable,\n    element,\n  }: {\n    action: ActionProps<any>\n    interactable: Interactable\n    element: Element\n  },\n  scope: Scope,\n) {\n  action = action || { name: null }\n\n  interaction.interactable = interactable\n  interaction.element = element\n  copyAction(interaction.prepared, action)\n\n  interaction.rect = interactable && action.name ? interactable.getRect(element) : null\n\n  setInteractionCursor(interaction, scope)\n\n  scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit<T extends ActionName>(\n  interactable: Interactable,\n  element: Element,\n  action: ActionProps<T>,\n  scope: Scope,\n) {\n  const options = interactable.options\n  const maxActions = options[action.name].max\n  const maxPerElement = options[action.name].maxPerElement\n  const autoStartMax = scope.autoStart.maxInteractions\n  let activeInteractions = 0\n  let interactableCount = 0\n  let elementCount = 0\n\n  // no actions if any of these values == 0\n  if (!(maxActions && maxPerElement && autoStartMax)) {\n    return false\n  }\n\n  for (const interaction of scope.interactions.list) {\n    const otherAction = interaction.prepared.name\n\n    if (!interaction.interacting()) {\n      continue\n    }\n\n    activeInteractions++\n\n    if (activeInteractions >= autoStartMax) {\n      return false\n    }\n\n    if (interaction.interactable !== interactable) {\n      continue\n    }\n\n    interactableCount += otherAction === action.name ? 1 : 0\n\n    if (interactableCount >= maxActions) {\n      return false\n    }\n\n    if (interaction.element === element) {\n      elementCount++\n\n      if (otherAction === action.name && elementCount >= maxPerElement) {\n        return false\n      }\n    }\n  }\n\n  return autoStartMax > 0\n}\n\nfunction maxInteractions(newValue: any, scope: Scope) {\n  if (is.number(newValue)) {\n    scope.autoStart.maxInteractions = newValue\n\n    return this\n  }\n\n  return scope.autoStart.maxInteractions\n}\n\nfunction setCursor(element: Element, cursor: string, scope: Scope) {\n  const { cursorElement: prevCursorElement } = scope.autoStart\n\n  if (prevCursorElement && prevCursorElement !== element) {\n    prevCursorElement.style.cursor = ''\n  }\n\n  element.ownerDocument.documentElement.style.cursor = cursor\n  element.style.cursor = cursor\n  scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor<T extends ActionName>(interaction: Interaction<T>, scope: Scope) {\n  const { interactable, element, prepared } = interaction\n\n  if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n    // clear previous target element cursor\n    if (scope.autoStart.cursorElement) {\n      setCursor(scope.autoStart.cursorElement, '', scope)\n    }\n\n    return\n  }\n\n  let cursor = ''\n\n  if (prepared.name) {\n    const cursorChecker = interactable.options[prepared.name].cursorChecker\n\n    if (is.func(cursorChecker)) {\n      cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n    } else {\n      cursor = scope.actions.map[prepared.name].getCursor(prepared)\n    }\n  }\n\n  setCursor(interaction.element, cursor || '', scope)\n}\n\nconst autoStart: Plugin = {\n  id: 'auto-start/base',\n  before: ['actions'],\n  install,\n  listeners: {\n    'interactions:down': prepareOnDown,\n    'interactions:move': (arg, scope) => {\n      prepareOnMove(arg, scope)\n      startOnMove(arg, scope)\n    },\n    'interactions:stop': clearCursorOnStop,\n  },\n  maxInteractions,\n  withinInteractionLimit,\n  validateAction,\n}\n\nexport default autoStart\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n  if (interaction.prepared.name !== 'drag') return\n\n  // check if a drag is in the correct axis\n  const absX = Math.abs(dx)\n  const absY = Math.abs(dy)\n  const targetOptions = interaction.interactable.options.drag\n  const startAxis = targetOptions.startAxis\n  const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n  interaction.prepared.axis =\n    targetOptions.lockAxis === 'start'\n      ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n      : targetOptions.lockAxis\n\n  // if the movement isn't in the startAxis of the interactable\n  if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n    // cancel the prepared action\n    ;(interaction as Interaction<ActionName>).prepared.name = null\n\n    // then try to get a drag from another ineractable\n    let element = eventTarget as Element\n\n    const getDraggable = function (interactable: Interactable): Interactable | void {\n      if (interactable === interaction.interactable) return\n\n      const options = interaction.interactable.options.drag\n\n      if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n        const action = interactable.getAction(\n          interaction.downPointer,\n          interaction.downEvent,\n          interaction,\n          element,\n        )\n\n        if (\n          action &&\n          action.name === 'drag' &&\n          checkStartAxis(currentAxis, interactable) &&\n          autoStart.validateAction(action, interactable, element, eventTarget, scope)\n        ) {\n          return interactable\n        }\n      }\n    }\n\n    // check all interactables\n    while (is.element(element)) {\n      const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n      if (interactable) {\n        ;(interaction as Interaction<ActionName>).prepared.name = 'drag'\n        interaction.interactable = interactable\n        interaction.element = element\n        break\n      }\n\n      element = parentNode(element) as Element\n    }\n  }\n}\n\nfunction checkStartAxis(startAxis: string, interactable: Interactable) {\n  if (!interactable) {\n    return false\n  }\n\n  const thisAxis = interactable.options.drag.startAxis\n\n  return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n  id: 'auto-start/dragAxis',\n  listeners: { 'autoStart:before-start': beforeStart },\n}\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable */\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    hold?: number\n    delay?: number\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    autoStartHoldTimer?: any\n  }\n}\n\nfunction install(scope: Scope) {\n  const { defaults } = scope\n\n  scope.usePlugin(basePlugin)\n\n  defaults.perAction.hold = 0\n  defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration(interaction: Interaction) {\n  const actionName = interaction.prepared && interaction.prepared.name\n\n  if (!actionName) {\n    return null\n  }\n\n  const options = interaction.interactable.options\n\n  return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n  id: 'auto-start/hold',\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.autoStartHoldTimer = null\n    },\n\n    'autoStart:prepared': ({ interaction }) => {\n      const hold = getHoldDuration(interaction)\n\n      if (hold > 0) {\n        interaction.autoStartHoldTimer = setTimeout(() => {\n          interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n        }, hold)\n      }\n    },\n\n    'interactions:move': ({ interaction, duplicate }) => {\n      if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n        clearTimeout(interaction.autoStartHoldTimer)\n        interaction.autoStartHoldTimer = null\n      }\n    },\n\n    // prevent regular down->move autoStart\n    'autoStart:before-start': ({ interaction }) => {\n      const holdDuration = getHoldDuration(interaction)\n\n      if (holdDuration > 0) {\n        interaction.prepared.name = null\n      }\n    },\n  },\n  getHoldDuration,\n}\nexport default hold\n", "import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './dragAxis'\nimport './hold'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n  id: 'auto-start',\n  install(scope: Scope) {\n    scope.usePlugin(autoStart)\n    scope.usePlugin(hold)\n    scope.usePlugin(dragAxis)\n  },\n}\n", "import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    preventDefault(newValue: PreventDefaultValue): this\n    preventDefault(): PreventDefaultValue\n    /**\n     * Returns or sets whether to prevent the browser's default behaviour in\n     * response to pointer events. Can be set to:\n     *  - `'always'` to always prevent\n     *  - `'never'` to never prevent\n     *  - `'auto'` to let interact.js try to determine what would be best\n     *\n     * @param newValue - `'always'`, `'never'` or `'auto'`\n     * @returns The current setting or this Interactable\n     */\n    preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this\n    checkAndPreventDefault(event: Event): void\n  }\n}\n\nconst preventDefault = function preventDefault(this: Interactable, newValue?: PreventDefaultValue) {\n  if (/^(always|never|auto)$/.test(newValue)) {\n    this.options.preventDefault = newValue\n    return this\n  }\n\n  if (is.bool(newValue)) {\n    this.options.preventDefault = newValue ? 'always' : 'never'\n    return this\n  }\n\n  return this.options.preventDefault\n} as Interactable['preventDefault']\n\nfunction checkAndPreventDefault(interactable: Interactable, scope: Scope, event: Event) {\n  const setting = interactable.options.preventDefault\n\n  if (setting === 'never') return\n\n  if (setting === 'always') {\n    event.preventDefault()\n    return\n  }\n\n  // setting === 'auto'\n\n  // if the browser supports passive event listeners and isn't running on iOS,\n  // don't preventDefault of touch{start,move} events. CSS touch-action and\n  // user-select should be used instead of calling event.preventDefault().\n  if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n    const doc = getWindow(event.target).document\n    const docOptions = scope.getDocOptions(doc)\n\n    if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n      return\n    }\n  }\n\n  // don't preventDefault of pointerdown events\n  if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n    return\n  }\n\n  // don't preventDefault on editable elements\n  if (\n    is.element(event.target) &&\n    matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n  ) {\n    return\n  }\n\n  event.preventDefault()\n}\n\nfunction onInteractionEvent({ interaction, event }: { interaction: Interaction; event: PointerEventType }) {\n  if (interaction.interactable) {\n    interaction.interactable.checkAndPreventDefault(event as Event)\n  }\n}\n\nexport function install(scope: Scope) {\n  const { Interactable } = scope\n\n  Interactable.prototype.preventDefault = preventDefault\n\n  Interactable.prototype.checkAndPreventDefault = function (event) {\n    return checkAndPreventDefault(this, scope, event)\n  }\n\n  // prevent native HTML5 drag on interact.js target elements\n  scope.interactions.docEvents.push({\n    type: 'dragstart',\n    listener(event) {\n      for (const interaction of scope.interactions.list) {\n        if (\n          interaction.element &&\n          (interaction.element === event.target || nodeContains(interaction.element, event.target))\n        ) {\n          interaction.interactable.checkAndPreventDefault(event)\n          return\n        }\n      }\n    },\n  })\n}\n\nexport default {\n  id: 'core/interactablePreventDefault',\n  install,\n  listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n    acc[`interactions:${eventType}`] = onInteractionEvent\n    return acc\n  }, {} as any),\n}\n", "import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent(type: string, actions: Actions) {\n  if (actions.phaselessTypes[type]) {\n    return true\n  }\n\n  for (const name in actions.map) {\n    if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n      return true\n    }\n  }\n\n  return false\n}\n", "import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone<T extends Object>(source: T): Partial<T> {\n  const dest = {} as Partial<T>\n\n  for (const prop in source) {\n    const value = source[prop]\n\n    if (is.plainObject(value)) {\n      dest[prop] = clone(value) as any\n    } else if (is.array(value)) {\n      dest[prop] = arr.from(value) as typeof value\n    } else {\n      dest[prop] = value\n    }\n  }\n\n  return dest\n}\n", "import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n  delta: Point\n  rectDelta: Rect\n  coords: Point\n  rect: FullRect\n  eventProps: any[]\n  changed: boolean\n}\n\ninterface MethodArg {\n  phase: EventPhase\n  pageCoords: Point\n  rect: FullRect\n  coords: Point\n  preEnd?: boolean\n  skipModifiers?: number\n}\n\nexport class Modification {\n  states: ModifierState[] = []\n  startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n  startDelta!: Point\n  result!: ModificationResult\n  endResult!: Point\n  startEdges!: EdgeOptions\n  edges: EdgeOptions\n  readonly interaction: Readonly<Interaction>\n\n  constructor(interaction: Interaction) {\n    this.interaction = interaction\n    this.result = createResult()\n    this.edges = {\n      left: false,\n      right: false,\n      top: false,\n      bottom: false,\n    }\n  }\n\n  start({ phase }: { phase: EventPhase }, pageCoords: Point) {\n    const { interaction } = this\n    const modifierList = getModifierList(interaction)\n    this.prepareStates(modifierList)\n\n    this.startEdges = extend({}, interaction.edges)\n    this.edges = extend({}, this.startEdges)\n    this.startOffset = getRectOffset(interaction.rect, pageCoords)\n    this.startDelta = { x: 0, y: 0 }\n\n    const arg = this.fillArg({\n      phase,\n      pageCoords,\n      preEnd: false,\n    })\n\n    this.result = createResult()\n    this.startAll(arg)\n\n    const result = (this.result = this.setAll(arg))\n\n    return result\n  }\n\n  fillArg(arg: Partial<ModifierArg>) {\n    const { interaction } = this\n\n    arg.interaction = interaction\n    arg.interactable = interaction.interactable\n    arg.element = interaction.element\n    arg.rect ||= interaction.rect\n    arg.edges ||= this.startEdges\n    arg.startOffset = this.startOffset\n\n    return arg as ModifierArg\n  }\n\n  startAll(arg: MethodArg & Partial<ModifierArg>) {\n    for (const state of this.states) {\n      if (state.methods.start) {\n        arg.state = state\n        state.methods.start(arg as ModifierArg)\n      }\n    }\n  }\n\n  setAll(arg: MethodArg & Partial<ModifierArg>): ModificationResult {\n    const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n    arg.coords = extend({}, arg.pageCoords)\n    arg.rect = extend({}, unmodifiedRect)\n    arg.edges = extend({}, unmodifiedEdges)\n\n    const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n    const newResult = createResult(arg.coords, arg.rect)\n\n    for (const state of states) {\n      const { options } = state\n      const lastModifierCoords = extend({}, arg.coords)\n      let returnValue = null\n\n      if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n        arg.state = state\n        returnValue = state.methods.set(arg as ModifierArg<never>)\n\n        rectUtils.addEdges(arg.edges, arg.rect, {\n          x: arg.coords.x - lastModifierCoords.x,\n          y: arg.coords.y - lastModifierCoords.y,\n        })\n      }\n\n      newResult.eventProps.push(returnValue)\n    }\n\n    extend(this.edges, arg.edges)\n\n    newResult.delta.x = arg.coords.x - arg.pageCoords.x\n    newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n    newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n    newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n    newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n    newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n    const prevCoords = this.result.coords\n    const prevRect = this.result.rect\n\n    if (prevCoords && prevRect) {\n      const rectChanged =\n        newResult.rect.left !== prevRect.left ||\n        newResult.rect.right !== prevRect.right ||\n        newResult.rect.top !== prevRect.top ||\n        newResult.rect.bottom !== prevRect.bottom\n\n      newResult.changed =\n        rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n    }\n\n    return newResult\n  }\n\n  applyToInteraction(arg: { phase: EventPhase; rect?: Rect }) {\n    const { interaction } = this\n    const { phase } = arg\n    const curCoords = interaction.coords.cur\n    const startCoords = interaction.coords.start\n    const { result, startDelta } = this\n    const curDelta = result.delta\n\n    if (phase === 'start') {\n      extend(this.startDelta, result.delta)\n    }\n\n    for (const [coordsSet, delta] of [\n      [startCoords, startDelta],\n      [curCoords, curDelta],\n    ] as const) {\n      coordsSet.page.x += delta.x\n      coordsSet.page.y += delta.y\n      coordsSet.client.x += delta.x\n      coordsSet.client.y += delta.y\n    }\n\n    const { rectDelta } = this.result\n    const rect = arg.rect || interaction.rect\n\n    rect.left += rectDelta.left\n    rect.right += rectDelta.right\n    rect.top += rectDelta.top\n    rect.bottom += rectDelta.bottom\n\n    rect.width = rect.right - rect.left\n    rect.height = rect.bottom - rect.top\n  }\n\n  setAndApply(\n    arg: Partial<DoAnyPhaseArg> & {\n      phase: EventPhase\n      preEnd?: boolean\n      skipModifiers?: number\n      modifiedCoords?: Point\n    },\n  ): void | false {\n    const { interaction } = this\n    const { phase, preEnd, skipModifiers } = arg\n\n    const result = this.setAll(\n      this.fillArg({\n        preEnd,\n        phase,\n        pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n      }),\n    )\n\n    this.result = result\n\n    // don't fire an action move if a modifier would keep the event in the same\n    // cordinates as before\n    if (\n      !result.changed &&\n      (!skipModifiers || skipModifiers < this.states.length) &&\n      interaction.interacting()\n    ) {\n      return false\n    }\n\n    if (arg.modifiedCoords) {\n      const { page } = interaction.coords.cur\n      const adjustment = {\n        x: arg.modifiedCoords.x - page.x,\n        y: arg.modifiedCoords.y - page.y,\n      }\n\n      result.coords.x += adjustment.x\n      result.coords.y += adjustment.y\n      result.delta.x += adjustment.x\n      result.delta.y += adjustment.y\n    }\n\n    this.applyToInteraction(arg)\n  }\n\n  beforeEnd(arg: Omit<DoAnyPhaseArg, 'iEvent'> & { state?: ModifierState }): void | false {\n    const { interaction, event } = arg\n    const states = this.states\n\n    if (!states || !states.length) {\n      return\n    }\n\n    let doPreend = false\n\n    for (const state of states) {\n      arg.state = state\n      const { options, methods } = state\n\n      const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n      if (endPosition) {\n        this.endResult = endPosition\n        return false\n      }\n\n      doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n    }\n\n    if (doPreend) {\n      // trigger a final modified move before ending\n      interaction.move({ event, preEnd: true })\n    }\n  }\n\n  stop(arg: { interaction: Interaction }) {\n    const { interaction } = arg\n\n    if (!this.states || !this.states.length) {\n      return\n    }\n\n    const modifierArg: Partial<ModifierArg> = extend(\n      {\n        states: this.states,\n        interactable: interaction.interactable,\n        element: interaction.element,\n        rect: null,\n      },\n      arg,\n    )\n\n    this.fillArg(modifierArg)\n\n    for (const state of this.states) {\n      modifierArg.state = state\n\n      if (state.methods.stop) {\n        state.methods.stop(modifierArg as ModifierArg)\n      }\n    }\n\n    this.states = null\n    this.endResult = null\n  }\n\n  prepareStates(modifierList: Modifier[]) {\n    this.states = []\n\n    for (let index = 0; index < modifierList.length; index++) {\n      const { options, methods, name } = modifierList[index]\n\n      this.states.push({\n        options,\n        methods,\n        index,\n        name,\n      })\n    }\n\n    return this.states\n  }\n\n  restoreInteractionCoords({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n    if (!modification.result) return\n\n    const { startDelta } = modification\n    const { delta: curDelta, rectDelta } = modification.result\n\n    const coordsAndDeltas = [\n      [coords.start, startDelta],\n      [coords.cur, curDelta],\n    ]\n\n    for (const [coordsSet, delta] of coordsAndDeltas as any) {\n      coordsSet.page.x -= delta.x\n      coordsSet.page.y -= delta.y\n      coordsSet.client.x -= delta.x\n      coordsSet.client.y -= delta.y\n    }\n\n    rect.left -= rectDelta.left\n    rect.right -= rectDelta.right\n    rect.top -= rectDelta.top\n    rect.bottom -= rectDelta.bottom\n  }\n\n  shouldDo(options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n    if (\n      // ignore disabled modifiers\n      !options ||\n      options.enabled === false ||\n      // check if we require endOnly option to fire move before end\n      (requireEndOnly && !options.endOnly) ||\n      // don't apply endOnly modifiers when not ending\n      (options.endOnly && !preEnd) ||\n      // check if modifier should run be applied on start\n      (phase === 'start' && !options.setStart)\n    ) {\n      return false\n    }\n\n    return true\n  }\n\n  copyFrom(other: Modification) {\n    this.startOffset = other.startOffset\n    this.startDelta = other.startDelta\n    this.startEdges = other.startEdges\n    this.edges = other.edges\n    this.states = other.states.map((s) => clone(s) as ModifierState)\n    this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n  }\n\n  destroy() {\n    for (const prop in this) {\n      this[prop] = null\n    }\n  }\n}\n\nfunction createResult(coords?: Point, rect?: FullRect): ModificationResult {\n  return {\n    rect,\n    coords,\n    delta: { x: 0, y: 0 },\n    rectDelta: {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0,\n    },\n    eventProps: [],\n    changed: true,\n  }\n}\n\nfunction getModifierList(interaction) {\n  const actionOptions = interaction.interactable.options[interaction.prepared.name]\n  const actionModifiers = actionOptions.modifiers\n\n  if (actionModifiers && actionModifiers.length) {\n    return actionModifiers\n  }\n\n  return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n    .map((type) => {\n      const options = actionOptions[type]\n\n      return (\n        options &&\n        options.enabled && {\n          options,\n          methods: options._methods,\n        }\n      )\n    })\n    .filter((m) => !!m)\n}\n\nexport function getRectOffset(rect, coords) {\n  return rect\n    ? {\n        left: coords.x - rect.left,\n        top: coords.y - rect.top,\n        right: rect.right - coords.x,\n        bottom: rect.bottom - coords.y,\n      }\n    : {\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0,\n      }\n}\n", "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    modification?: Modification\n  }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface InteractEvent {\n    modifiers?: Array<{\n      name: string\n      [key: string]: any\n    }>\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    modifiers?: Modifier[]\n  }\n}\n\nexport function makeModifier<\n  Defaults extends { enabled?: boolean },\n  State extends ModifierState,\n  Name extends string,\n  Result,\n>(module: ModifierModule<Defaults, State, Result>, name?: Name) {\n  const { defaults } = module\n  const methods = {\n    start: module.start,\n    set: module.set,\n    beforeEnd: module.beforeEnd,\n    stop: module.stop,\n  }\n\n  const modifier = (_options?: Partial<Defaults>) => {\n    const options = (_options || {}) as Defaults\n\n    options.enabled = options.enabled !== false\n\n    // add missing defaults to options\n    for (const prop in defaults) {\n      if (!(prop in options)) {\n        ;(options as any)[prop] = defaults[prop]\n      }\n    }\n\n    const m: Modifier<Defaults, State, Name, Result> = {\n      options,\n      methods,\n      name,\n      enable: () => {\n        options.enabled = true\n        return m\n      },\n      disable: () => {\n        options.enabled = false\n        return m\n      },\n    }\n\n    return m\n  }\n\n  if (name && typeof name === 'string') {\n    // for backwrads compatibility\n    modifier._defaults = defaults\n    modifier._methods = methods\n  }\n\n  return modifier\n}\n\nexport function addEventModifiers({\n  iEvent,\n  interaction,\n}: {\n  iEvent: InteractEvent<any>\n  interaction: Interaction<any>\n}) {\n  const result = interaction.modification!.result\n\n  if (result) {\n    iEvent.modifiers = result.eventProps\n  }\n}\n\nconst modifiersBase: Plugin = {\n  id: 'modifiers/base',\n  before: ['actions'],\n  install: (scope) => {\n    scope.defaults.perAction.modifiers = []\n  },\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.modification = new Modification(interaction)\n    },\n\n    'interactions:before-action-start': (arg) => {\n      const { interaction } = arg\n      const modification = arg.interaction.modification!\n\n      modification.start(arg, interaction.coords.start.page)\n      interaction.edges = modification.edges\n      modification.applyToInteraction(arg)\n    },\n\n    'interactions:before-action-move': (arg) => {\n      const { interaction } = arg\n      const { modification } = interaction\n      const ret = modification.setAndApply(arg)\n      interaction.edges = modification.edges\n\n      return ret\n    },\n\n    'interactions:before-action-end': (arg) => {\n      const { interaction } = arg\n      const { modification } = interaction\n      const ret = modification.beforeEnd(arg)\n      interaction.edges = modification.startEdges\n\n      return ret\n    },\n\n    'interactions:action-start': addEventModifiers,\n    'interactions:action-move': addEventModifiers,\n    'interactions:action-end': addEventModifiers,\n\n    'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n    'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n    'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n  },\n}\n\nexport default modifiersBase\n", "import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'\n\nexport interface Defaults {\n  base: BaseDefaults\n  perAction: PerActionDefaults\n  actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n  preventDefault?: 'always' | 'never' | 'auto'\n  deltaSource?: 'page' | 'client'\n  context?: Node\n  getRect?: (element: Element) => Rect\n}\n\nexport interface PerActionDefaults {\n  enabled?: boolean\n  origin?: Point | string | Element\n  listeners?: Listeners\n  allowFrom?: string | Element\n  ignoreFrom?: string | Element\n}\n\nexport type Options = Partial<BaseDefaults> &\n  Partial<PerActionDefaults> & {\n    [P in keyof ActionDefaults]?: Partial<ActionDefaults[P]>\n  }\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean<Partial<ActionDefaults>> {}\n\nexport const defaults: Defaults = {\n  base: {\n    preventDefault: 'auto',\n    deltaSource: 'page',\n  },\n\n  perAction: {\n    enabled: false,\n    origin: { x: 0, y: 0 },\n  },\n\n  actions: {} as ActionDefaults,\n}\n", "import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n  start: true\n  move: true\n  end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n  pageX: number\n  pageY: number\n\n  clientX: number\n  clientY: number\n\n  dx: number\n  dy: number\n\n  velocityX: number\n  velocityY: number\n}\n\nexport class InteractEvent<\n  T extends ActionName = never,\n  P extends EventPhase = EventPhase,\n> extends BaseEvent<T> {\n  declare target: Element\n  declare currentTarget: Element\n  relatedTarget: Element | null = null\n  screenX?: number\n  screenY?: number\n  button: number\n  buttons: number\n  ctrlKey: boolean\n  shiftKey: boolean\n  altKey: boolean\n  metaKey: boolean\n  page: Point\n  client: Point\n  delta: Point\n  rect: FullRect\n  x0: number\n  y0: number\n  t0: number\n  dt: number\n  duration: number\n  clientX0: number\n  clientY0: number\n  velocity: Point\n  speed: number\n  swipe: ReturnType<InteractEvent<T>['getSwipe']>\n  // resize\n  axes?: 'x' | 'y' | 'xy'\n  /** @internal */\n  preEnd?: boolean\n\n  constructor(\n    interaction: Interaction<T>,\n    event: PointerEventType,\n    actionName: T,\n    phase: P,\n    element: Element,\n    preEnd?: boolean,\n    type?: string,\n  ) {\n    super(interaction)\n\n    element = element || interaction.element\n\n    const target = interaction.interactable\n    const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n    const origin = getOriginXY(target, element, actionName)\n    const starting = phase === 'start'\n    const ending = phase === 'end'\n    const prevEvent = starting ? this : interaction.prevEvent\n    const coords = starting\n      ? interaction.coords.start\n      : ending\n        ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n        : interaction.coords.cur\n\n    this.page = extend({}, coords.page)\n    this.client = extend({}, coords.client)\n    this.rect = extend({}, interaction.rect)\n    this.timeStamp = coords.timeStamp\n\n    if (!ending) {\n      this.page.x -= origin.x\n      this.page.y -= origin.y\n\n      this.client.x -= origin.x\n      this.client.y -= origin.y\n    }\n\n    this.ctrlKey = event.ctrlKey\n    this.altKey = event.altKey\n    this.shiftKey = event.shiftKey\n    this.metaKey = event.metaKey\n    this.button = (event as MouseEvent).button\n    this.buttons = (event as MouseEvent).buttons\n    this.target = element\n    this.currentTarget = element\n    this.preEnd = preEnd\n    this.type = type || actionName + (phase || '')\n    this.interactable = target\n\n    this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n    this.x0 = interaction.coords.start.page.x - origin.x\n    this.y0 = interaction.coords.start.page.y - origin.y\n    this.clientX0 = interaction.coords.start.client.x - origin.x\n    this.clientY0 = interaction.coords.start.client.y - origin.y\n\n    if (starting || ending) {\n      this.delta = { x: 0, y: 0 }\n    } else {\n      this.delta = {\n        x: this[deltaSource].x - prevEvent[deltaSource].x,\n        y: this[deltaSource].y - prevEvent[deltaSource].y,\n      }\n    }\n\n    this.dt = interaction.coords.delta.timeStamp\n    this.duration = this.timeStamp - this.t0\n\n    // velocity and speed in pixels per second\n    this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n    this.speed = hypot(this.velocity.x, this.velocity.y)\n\n    this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n  }\n\n  getSwipe() {\n    const interaction = this._interaction\n\n    if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n      return null\n    }\n\n    let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n    const overlap = 22.5\n\n    if (angle < 0) {\n      angle += 360\n    }\n\n    const left = 135 - overlap <= angle && angle < 225 + overlap\n    const up = 225 - overlap <= angle && angle < 315 + overlap\n\n    const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n    const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n    return {\n      up,\n      down,\n      left,\n      right,\n      angle,\n      speed: interaction.prevEvent.speed,\n      velocity: {\n        x: interaction.prevEvent.velocityX,\n        y: interaction.prevEvent.velocityY,\n      },\n    }\n  }\n\n  preventDefault() {}\n\n  /**\n   * Don't call listeners on the remaining targets\n   */\n  stopImmediatePropagation() {\n    this.immediatePropagationStopped = this.propagationStopped = true\n  }\n\n  /**\n   * Don't call any other listeners (even on the current target)\n   */\n  stopPropagation() {\n    this.propagationStopped = true\n  }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n  pageX: {\n    get() {\n      return this.page.x\n    },\n    set(value) {\n      this.page.x = value\n    },\n  },\n  pageY: {\n    get() {\n      return this.page.y\n    },\n    set(value) {\n      this.page.y = value\n    },\n  },\n\n  clientX: {\n    get() {\n      return this.client.x\n    },\n    set(value) {\n      this.client.x = value\n    },\n  },\n  clientY: {\n    get() {\n      return this.client.y\n    },\n    set(value) {\n      this.client.y = value\n    },\n  },\n\n  dx: {\n    get() {\n      return this.delta.x\n    },\n    set(value) {\n      this.delta.x = value\n    },\n  },\n  dy: {\n    get() {\n      return this.delta.y\n    },\n    set(value) {\n      this.delta.y = value\n    },\n  },\n\n  velocityX: {\n    get() {\n      return this.velocity.x\n    },\n    set(value) {\n      this.velocity.x = value\n    },\n  },\n  velocityY: {\n    get() {\n      return this.velocity.y\n    },\n    set(value) {\n      this.velocity.y = value\n    },\n  },\n})\n", "import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n  id: number\n  pointer: PointerType\n  event: PointerEventType\n  downTime: number\n  downTarget: Node\n\n  constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n    this.id = id\n    this.pointer = pointer\n    this.event = event\n    this.downTime = downTime\n    this.downTarget = downTarget\n  }\n}\n", "import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type {\n  Element,\n  EdgeOptions,\n  PointerEventType,\n  PointerType,\n  FullRect,\n  CoordsSet,\n  ActionName,\n  ActionProps,\n} from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { ActionDefaults } from './options'\nimport { PointerInfo } from './PointerInfo'\nimport type { Scope } from './scope'\n\nexport enum _ProxyValues {\n  interactable = '',\n  element = '',\n  prepared = '',\n  pointerIsDown = '',\n  pointerWasMoved = '',\n  _proxy = '',\n}\n\nexport enum _ProxyMethods {\n  start = '',\n  move = '',\n  end = '',\n  stop = '',\n  interacting = '',\n}\n\nexport type PointerArgProps<T extends {} = {}> = {\n  pointer: PointerType\n  event: PointerEventType\n  eventTarget: Node\n  pointerIndex: number\n  pointerInfo: PointerInfo\n  interaction: Interaction<never>\n} & T\n\nexport interface DoPhaseArg<T extends ActionName, P extends EventPhase> {\n  event: PointerEventType\n  phase: EventPhase\n  interaction: Interaction<T>\n  iEvent: InteractEvent<T, P>\n  preEnd?: boolean\n  type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg<ActionName, EventPhase>\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactions:new': { interaction: Interaction<ActionName> }\n    'interactions:down': PointerArgProps<{\n      type: 'down'\n    }>\n    'interactions:move': PointerArgProps<{\n      type: 'move'\n      dx: number\n      dy: number\n      duplicate: boolean\n    }>\n    'interactions:up': PointerArgProps<{\n      type: 'up'\n      curEventTarget: EventTarget\n    }>\n    'interactions:cancel': SignalArgs['interactions:up'] & {\n      type: 'cancel'\n      curEventTarget: EventTarget\n    }\n    'interactions:update-pointer': PointerArgProps<{\n      down: boolean\n    }>\n    'interactions:remove-pointer': PointerArgProps\n    'interactions:blur': { interaction: Interaction<never>; event: Event; type: 'blur' }\n    'interactions:before-action-start': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-start': DoAnyPhaseArg\n    'interactions:after-action-start': DoAnyPhaseArg\n    'interactions:before-action-move': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-move': DoAnyPhaseArg\n    'interactions:after-action-move': DoAnyPhaseArg\n    'interactions:before-action-end': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-end': DoAnyPhaseArg\n    'interactions:after-action-end': DoAnyPhaseArg\n    'interactions:stop': { interaction: Interaction }\n  }\n}\n\nexport type InteractionProxy<T extends ActionName | null = never> = Pick<\n  Interaction<T>,\n  Exclude<keyof typeof _ProxyValues | keyof typeof _ProxyMethods, '_proxy'>\n>\n\nlet idCounter = 0\n\nexport class Interaction<T extends ActionName | null = ActionName> {\n  /** current interactable being interacted with */\n  interactable: Interactable | null = null\n\n  /** the target element of the interactable */\n  element: Element | null = null\n  rect: FullRect | null = null\n  /** @internal */\n  _rects?: {\n    start: FullRect\n    corrected: FullRect\n    previous: FullRect\n    delta: FullRect\n  }\n  /** @internal */\n  edges: EdgeOptions | null = null\n\n  /** @internal */\n  _scopeFire: Scope['fire']\n\n  // action that's ready to be fired on next move event\n  prepared: ActionProps<T> = {\n    name: null,\n    axis: null,\n    edges: null,\n  }\n\n  pointerType: string\n\n  /** @internal keep track of added pointers */\n  pointers: PointerInfo[] = []\n\n  /** @internal pointerdown/mousedown/touchstart event */\n  downEvent: PointerEventType | null = null\n\n  /** @internal */ downPointer: PointerType = {} as PointerType\n\n  /** @internal */\n  _latestPointer: {\n    pointer: PointerType\n    event: PointerEventType\n    eventTarget: Node\n  } = {\n    pointer: null,\n    event: null,\n    eventTarget: null,\n  }\n\n  /** @internal */ prevEvent: InteractEvent<T, EventPhase> = null\n\n  pointerIsDown = false\n  pointerWasMoved = false\n  /** @internal */ _interacting = false\n  /** @internal */ _ending = false\n  /** @internal */ _stopped = true\n  /** @internal */ _proxy: InteractionProxy<T>\n\n  /** @internal */ simulation = null\n\n  /** @internal */ get pointerMoveTolerance() {\n    return 1\n  }\n\n  doMove = warnOnce(function (this: Interaction, signalArg: any) {\n    this.move(signalArg)\n  }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n  coords: CoordsSet = {\n    // Starting InteractEvent pointer coordinates\n    start: pointerUtils.newCoords(),\n    // Previous native pointer move event coordinates\n    prev: pointerUtils.newCoords(),\n    // current native pointer move event coordinates\n    cur: pointerUtils.newCoords(),\n    // Change in coordinates and time of the pointer\n    delta: pointerUtils.newCoords(),\n    // pointer velocity\n    velocity: pointerUtils.newCoords(),\n  }\n\n  /** @internal */ readonly _id: number = idCounter++\n\n  constructor({ pointerType, scopeFire }: { pointerType?: string; scopeFire: Scope['fire'] }) {\n    this._scopeFire = scopeFire\n    this.pointerType = pointerType\n\n    const that = this\n\n    this._proxy = {} as InteractionProxy<T>\n\n    for (const key in _ProxyValues) {\n      Object.defineProperty(this._proxy, key, {\n        get() {\n          return that[key]\n        },\n      })\n    }\n\n    for (const key in _ProxyMethods) {\n      Object.defineProperty(this._proxy, key, {\n        value: (...args: any[]) => that[key](...args),\n      })\n    }\n\n    this._scopeFire('interactions:new', { interaction: this })\n  }\n\n  pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n    const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n    const pointerInfo = this.pointers[pointerIndex]\n\n    this._scopeFire('interactions:down', {\n      pointer,\n      event,\n      eventTarget,\n      pointerIndex,\n      pointerInfo,\n      type: 'down',\n      interaction: this as unknown as Interaction<never>,\n    })\n  }\n\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable({\n   *     // disable the default drag start by down->move\n   *     manualStart: true\n   *   })\n   *   // start dragging after the user holds the pointer down\n   *   .on('hold', function (event) {\n   *     var interaction = event.interaction\n   *\n   *     if (!interaction.interacting()) {\n   *       interaction.start({ name: 'drag' },\n   *                         event.interactable,\n   *                         event.currentTarget)\n   *     }\n   * })\n   * ```\n   *\n   * Start an action with the given Interactable and Element as tartgets. The\n   * action must be enabled for the target Interactable and an appropriate\n   * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n   *\n   * Use it with `interactable.<action>able({ manualStart: false })` to always\n   * [start actions manually](https://github.com/taye/interact.js/issues/114)\n   *\n   * @param action - The action to be performed - drag, resize, etc.\n   * @param target - The Interactable to target\n   * @param element - The DOM Element to target\n   * @returns Whether the interaction was successfully started\n   */\n  start<A extends ActionName>(action: ActionProps<A>, interactable: Interactable, element: Element): boolean {\n    if (\n      this.interacting() ||\n      !this.pointerIsDown ||\n      this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n      !interactable.options[action.name as keyof ActionDefaults].enabled\n    ) {\n      return false\n    }\n\n    copyAction(this.prepared, action)\n\n    this.interactable = interactable\n    this.element = element\n    this.rect = interactable.getRect(element)\n    this.edges = this.prepared.edges\n      ? extend({}, this.prepared.edges)\n      : { left: true, right: true, top: true, bottom: true }\n    this._stopped = false\n    this._interacting =\n      this._doPhase({\n        interaction: this,\n        event: this.downEvent,\n        phase: 'start',\n      }) && !this._stopped\n\n    return this._interacting\n  }\n\n  pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n    if (!this.simulation && !(this.modification && this.modification.endResult)) {\n      this.updatePointer(pointer, event, eventTarget, false)\n    }\n\n    const duplicateMove =\n      this.coords.cur.page.x === this.coords.prev.page.x &&\n      this.coords.cur.page.y === this.coords.prev.page.y &&\n      this.coords.cur.client.x === this.coords.prev.client.x &&\n      this.coords.cur.client.y === this.coords.prev.client.y\n\n    let dx: number\n    let dy: number\n\n    // register movement greater than pointerMoveTolerance\n    if (this.pointerIsDown && !this.pointerWasMoved) {\n      dx = this.coords.cur.client.x - this.coords.start.client.x\n      dy = this.coords.cur.client.y - this.coords.start.client.y\n\n      this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n    }\n\n    const pointerIndex = this.getPointerIndex(pointer)\n    const signalArg = {\n      pointer,\n      pointerIndex,\n      pointerInfo: this.pointers[pointerIndex],\n      event,\n      type: 'move' as const,\n      eventTarget,\n      dx,\n      dy,\n      duplicate: duplicateMove,\n      interaction: this as unknown as Interaction<never>,\n    }\n\n    if (!duplicateMove) {\n      // set pointer coordinate, time changes and velocity\n      pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n    }\n\n    this._scopeFire('interactions:move', signalArg)\n\n    if (!duplicateMove && !this.simulation) {\n      // if interacting, fire an 'action-move' signal etc\n      if (this.interacting()) {\n        signalArg.type = null\n        this.move(signalArg)\n      }\n\n      if (this.pointerWasMoved) {\n        pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n      }\n    }\n  }\n\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable(true)\n   *   .on('dragmove', function (event) {\n   *     if (someCondition) {\n   *       // change the snap settings\n   *       event.interactable.draggable({ snap: { targets: [] }})\n   *       // fire another move event with re-calculated snap\n   *       event.interaction.move()\n   *     }\n   *   })\n   * ```\n   *\n   * Force a move of the current action at the same coordinates. Useful if\n   * snap/restrict has been changed and you want a movement with the new\n   * settings.\n   */\n  move(signalArg?: any) {\n    if (!signalArg || !signalArg.event) {\n      pointerUtils.setZeroCoords(this.coords.delta)\n    }\n\n    signalArg = extend(\n      {\n        pointer: this._latestPointer.pointer,\n        event: this._latestPointer.event,\n        eventTarget: this._latestPointer.eventTarget,\n        interaction: this,\n      },\n      signalArg || {},\n    )\n\n    signalArg.phase = 'move'\n\n    this._doPhase(signalArg)\n  }\n\n  /**\n   * @internal\n   * End interact move events and stop auto-scroll unless simulation is running\n   */\n  pointerUp(pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n    let pointerIndex = this.getPointerIndex(pointer)\n\n    if (pointerIndex === -1) {\n      pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n    }\n\n    const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n    this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n      pointer,\n      pointerIndex,\n      pointerInfo: this.pointers[pointerIndex],\n      event,\n      eventTarget,\n      type: type as any,\n      curEventTarget,\n      interaction: this as unknown as Interaction<never>,\n    })\n\n    if (!this.simulation) {\n      this.end(event)\n    }\n\n    this.removePointer(pointer, event)\n  }\n\n  /** @internal */\n  documentBlur(event: Event) {\n    this.end(event as any)\n    this._scopeFire('interactions:blur', {\n      event,\n      type: 'blur',\n      interaction: this as unknown as Interaction<never>,\n    })\n  }\n\n  /**\n   * ```js\n   * interact(target)\n   *   .draggable(true)\n   *   .on('move', function (event) {\n   *     if (event.pageX > 1000) {\n   *       // end the current action\n   *       event.interaction.end()\n   *       // stop all further listeners from being called\n   *       event.stopImmediatePropagation()\n   *     }\n   *   })\n   * ```\n   */\n  end(event?: PointerEventType) {\n    this._ending = true\n    event = event || this._latestPointer.event\n    let endPhaseResult: boolean\n\n    if (this.interacting()) {\n      endPhaseResult = this._doPhase({\n        event,\n        interaction: this,\n        phase: 'end',\n      })\n    }\n\n    this._ending = false\n\n    if (endPhaseResult === true) {\n      this.stop()\n    }\n  }\n\n  currentAction() {\n    return this._interacting ? this.prepared.name : null\n  }\n\n  interacting() {\n    return this._interacting\n  }\n\n  stop() {\n    this._scopeFire('interactions:stop', { interaction: this })\n\n    this.interactable = this.element = null\n\n    this._interacting = false\n    this._stopped = true\n    this.prepared.name = this.prevEvent = null\n  }\n\n  /** @internal */\n  getPointerIndex(pointer: any) {\n    const pointerId = pointerUtils.getPointerId(pointer)\n\n    // mouse and pen interactions may have only one pointer\n    return this.pointerType === 'mouse' || this.pointerType === 'pen'\n      ? this.pointers.length - 1\n      : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n  }\n\n  /** @internal */\n  getPointerInfo(pointer: any) {\n    return this.pointers[this.getPointerIndex(pointer)]\n  }\n\n  /** @internal */\n  updatePointer(pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n    const id = pointerUtils.getPointerId(pointer)\n    let pointerIndex = this.getPointerIndex(pointer)\n    let pointerInfo = this.pointers[pointerIndex]\n\n    down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n    if (!pointerInfo) {\n      pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n      pointerIndex = this.pointers.length\n      this.pointers.push(pointerInfo)\n    } else {\n      pointerInfo.pointer = pointer\n    }\n\n    pointerUtils.setCoords(\n      this.coords.cur,\n      this.pointers.map((p) => p.pointer),\n      this._now(),\n    )\n    pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n    if (down) {\n      this.pointerIsDown = true\n\n      pointerInfo.downTime = this.coords.cur.timeStamp\n      pointerInfo.downTarget = eventTarget\n      pointerUtils.pointerExtend(this.downPointer, pointer)\n\n      if (!this.interacting()) {\n        pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n        pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n        this.downEvent = event\n        this.pointerWasMoved = false\n      }\n    }\n\n    this._updateLatestPointer(pointer, event, eventTarget)\n\n    this._scopeFire('interactions:update-pointer', {\n      pointer,\n      event,\n      eventTarget,\n      down,\n      pointerInfo,\n      pointerIndex,\n      interaction: this as unknown as Interaction<never>,\n    })\n\n    return pointerIndex\n  }\n\n  /** @internal */\n  removePointer(pointer: PointerType, event: PointerEventType) {\n    const pointerIndex = this.getPointerIndex(pointer)\n\n    if (pointerIndex === -1) return\n\n    const pointerInfo = this.pointers[pointerIndex]\n\n    this._scopeFire('interactions:remove-pointer', {\n      pointer,\n      event,\n      eventTarget: null,\n      pointerIndex,\n      pointerInfo,\n      interaction: this as unknown as Interaction<never>,\n    })\n\n    this.pointers.splice(pointerIndex, 1)\n    this.pointerIsDown = false\n  }\n\n  /** @internal */\n  _updateLatestPointer(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n    this._latestPointer.pointer = pointer\n    this._latestPointer.event = event\n    this._latestPointer.eventTarget = eventTarget\n  }\n\n  destroy() {\n    this._latestPointer.pointer = null\n    this._latestPointer.event = null\n    this._latestPointer.eventTarget = null\n  }\n\n  /** @internal */\n  _createPreparedEvent<P extends EventPhase>(\n    event: PointerEventType,\n    phase: P,\n    preEnd?: boolean,\n    type?: string,\n  ) {\n    return new InteractEvent<T, P>(this, event, this.prepared.name, phase, this.element, preEnd, type)\n  }\n\n  /** @internal */\n  _fireEvent<P extends EventPhase>(iEvent: InteractEvent<T, P>) {\n    this.interactable?.fire(iEvent)\n\n    if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n      this.prevEvent = iEvent\n    }\n  }\n\n  /** @internal */\n  _doPhase<P extends EventPhase>(\n    signalArg: Omit<DoPhaseArg<T, P>, 'iEvent'> & { iEvent?: InteractEvent<T, P> },\n  ) {\n    const { event, phase, preEnd, type } = signalArg\n    const { rect } = this\n\n    if (rect && phase === 'move') {\n      // update the rect changes due to pointer move\n      rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n      rect.width = rect.right - rect.left\n      rect.height = rect.bottom - rect.top\n    }\n\n    const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n    if (beforeResult === false) {\n      return false\n    }\n\n    const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n    this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n    if (phase === 'start') {\n      this.prevEvent = iEvent\n    }\n\n    this._fireEvent(iEvent)\n\n    this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n    return true\n  }\n\n  /** @internal */\n  _now() {\n    return Date.now()\n  }\n}\n\nexport default Interaction\nexport { PointerInfo }\n", "import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    offsetBy?: typeof offsetBy\n    offset: {\n      total: Point\n      pending: Point\n    }\n  }\n\n  enum _ProxyMethods {\n    offsetBy = '',\n  }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal(interaction: Interaction) {\n  if (!interaction.pointerIsDown) {\n    return\n  }\n\n  addToCoords(interaction.coords.cur, interaction.offset.total)\n\n  interaction.offset.pending.x = 0\n  interaction.offset.pending.y = 0\n}\n\nfunction beforeAction({ interaction }: { interaction: Interaction }) {\n  applyPending(interaction)\n}\n\nfunction beforeEnd({ interaction }: { interaction: Interaction }): boolean | void {\n  const hadPending = applyPending(interaction)\n\n  if (!hadPending) return\n\n  interaction.move({ offset: true })\n  interaction.end()\n\n  return false\n}\n\nfunction end({ interaction }: { interaction: Interaction }) {\n  interaction.offset.total.x = 0\n  interaction.offset.total.y = 0\n  interaction.offset.pending.x = 0\n  interaction.offset.pending.y = 0\n}\n\nexport function applyPending(interaction: Interaction) {\n  if (!hasPending(interaction)) {\n    return false\n  }\n\n  const { pending } = interaction.offset\n\n  addToCoords(interaction.coords.cur, pending)\n  addToCoords(interaction.coords.delta, pending)\n  rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n  pending.x = 0\n  pending.y = 0\n\n  return true\n}\n\nfunction offsetBy(this: Interaction, { x, y }: Point) {\n  this.offset.pending.x += x\n  this.offset.pending.y += y\n\n  this.offset.total.x += x\n  this.offset.total.y += y\n}\n\nfunction addToCoords({ page, client }, { x, y }: Point) {\n  page.x += x\n  page.y += y\n  client.x += x\n  client.y += y\n}\n\nfunction hasPending(interaction: Interaction) {\n  return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n  id: 'offset',\n  before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n  install(scope) {\n    scope.Interaction.prototype.offsetBy = offsetBy\n  },\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.offset = {\n        total: { x: 0, y: 0 },\n        pending: { x: 0, y: 0 },\n      }\n    },\n    'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n    'interactions:before-action-start': beforeAction,\n    'interactions:before-action-move': beforeAction,\n    'interactions:before-action-end': beforeEnd,\n    'interactions:stop': end,\n  },\n}\n\nexport default offset\n", "import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/modifiers/base'\nimport '@interactjs/offset/plugin'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport { Modification } from '@interactjs/modifiers/Modification'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\n/* eslint-enable import/no-duplicates */\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface PhaseMap {\n    resume?: true\n    inertiastart?: true\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    inertia?: InertiaState\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface PerActionDefaults {\n    inertia?: {\n      enabled?: boolean\n      resistance?: number // the lambda in exponential decay\n      minSpeed?: number // target speed must be above this for inertia to start\n      endSpeed?: number // the speed at which inertia is slow enough to stop\n      allowResume?: true // allow resuming an action in inertia phase\n      smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n    }\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactions:before-action-inertiastart': Omit<DoPhaseArg<ActionName, 'inertiastart'>, 'iEvent'>\n    'interactions:action-inertiastart': DoPhaseArg<ActionName, 'inertiastart'>\n    'interactions:after-action-inertiastart': DoPhaseArg<ActionName, 'inertiastart'>\n    'interactions:before-action-resume': Omit<DoPhaseArg<ActionName, 'resume'>, 'iEvent'>\n    'interactions:action-resume': DoPhaseArg<ActionName, 'resume'>\n    'interactions:after-action-resume': DoPhaseArg<ActionName, 'resume'>\n  }\n}\n\nfunction install(scope: Scope) {\n  const { defaults } = scope\n\n  scope.usePlugin(offset)\n  scope.usePlugin(modifiers.default)\n  scope.actions.phases.inertiastart = true\n  scope.actions.phases.resume = true\n\n  defaults.perAction.inertia = {\n    enabled: false,\n    resistance: 10, // the lambda in exponential decay\n    minSpeed: 100, // target speed must be above this for inertia to start\n    endSpeed: 10, // the speed at which inertia is slow enough to stop\n    allowResume: true, // allow resuming an action in inertia phase\n    smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n  }\n}\n\nexport class InertiaState {\n  active = false\n  isModified = false\n  smoothEnd = false\n  allowResume = false\n\n  modification!: Modification\n  modifierCount = 0\n  modifierArg!: ModifierArg\n\n  startCoords!: Point\n  t0 = 0\n  v0 = 0\n\n  te = 0\n  targetOffset!: Point\n  modifiedOffset!: Point\n  currentOffset!: Point\n\n  lambda_v0? = 0 // eslint-disable-line camelcase\n  one_ve_v0? = 0 // eslint-disable-line camelcase\n  timeout!: number\n  readonly interaction: Interaction\n\n  constructor(interaction: Interaction) {\n    this.interaction = interaction\n  }\n\n  start(event: PointerEventType) {\n    const { interaction } = this\n    const options = getOptions(interaction)\n\n    if (!options || !options.enabled) {\n      return false\n    }\n\n    const { client: velocityClient } = interaction.coords.velocity\n    const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n    const modification = this.modification || (this.modification = new Modification(interaction))\n\n    modification.copyFrom(interaction.modification)\n\n    this.t0 = interaction._now()\n    this.allowResume = options.allowResume\n    this.v0 = pointerSpeed\n    this.currentOffset = { x: 0, y: 0 }\n    this.startCoords = interaction.coords.cur.page\n\n    this.modifierArg = modification.fillArg({\n      pageCoords: this.startCoords,\n      preEnd: true,\n      phase: 'inertiastart',\n    })\n\n    const thrown =\n      this.t0 - interaction.coords.cur.timeStamp < 50 &&\n      pointerSpeed > options.minSpeed &&\n      pointerSpeed > options.endSpeed\n\n    if (thrown) {\n      this.startInertia()\n    } else {\n      modification.result = modification.setAll(this.modifierArg)\n\n      if (!modification.result.changed) {\n        return false\n      }\n\n      this.startSmoothEnd()\n    }\n\n    // force modification change\n    interaction.modification.result.rect = null\n\n    // bring inertiastart event to the target coords\n    interaction.offsetBy(this.targetOffset)\n    interaction._doPhase({\n      interaction,\n      event,\n      phase: 'inertiastart',\n    })\n    interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n    // force modification change\n    interaction.modification.result.rect = null\n\n    this.active = true\n    interaction.simulation = this\n\n    return true\n  }\n\n  startInertia() {\n    const startVelocity = this.interaction.coords.velocity.client\n    const options = getOptions(this.interaction)\n    const lambda = options.resistance\n    const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n    this.targetOffset = {\n      x: (startVelocity.x - inertiaDur) / lambda,\n      y: (startVelocity.y - inertiaDur) / lambda,\n    }\n\n    this.te = inertiaDur\n    this.lambda_v0 = lambda / this.v0\n    this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n    const { modification, modifierArg } = this\n\n    modifierArg.pageCoords = {\n      x: this.startCoords.x + this.targetOffset.x,\n      y: this.startCoords.y + this.targetOffset.y,\n    }\n\n    modification.result = modification.setAll(modifierArg)\n\n    if (modification.result.changed) {\n      this.isModified = true\n      this.modifiedOffset = {\n        x: this.targetOffset.x + modification.result.delta.x,\n        y: this.targetOffset.y + modification.result.delta.y,\n      }\n    }\n\n    this.onNextFrame(() => this.inertiaTick())\n  }\n\n  startSmoothEnd() {\n    this.smoothEnd = true\n    this.isModified = true\n    this.targetOffset = {\n      x: this.modification.result.delta.x,\n      y: this.modification.result.delta.y,\n    }\n\n    this.onNextFrame(() => this.smoothEndTick())\n  }\n\n  onNextFrame(tickFn: () => void) {\n    this.timeout = raf.request(() => {\n      if (this.active) {\n        tickFn()\n      }\n    })\n  }\n\n  inertiaTick() {\n    const { interaction } = this\n    const options = getOptions(interaction)\n    const lambda = options.resistance\n    const t = (interaction._now() - this.t0) / 1000\n\n    if (t < this.te) {\n      const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n      let newOffset: Point\n\n      if (this.isModified) {\n        newOffset = getQuadraticCurvePoint(\n          0,\n          0,\n          this.targetOffset.x,\n          this.targetOffset.y,\n          this.modifiedOffset.x,\n          this.modifiedOffset.y,\n          progress,\n        )\n      } else {\n        newOffset = {\n          x: this.targetOffset.x * progress,\n          y: this.targetOffset.y * progress,\n        }\n      }\n\n      const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n      this.currentOffset.x += delta.x\n      this.currentOffset.y += delta.y\n\n      interaction.offsetBy(delta)\n      interaction.move()\n\n      this.onNextFrame(() => this.inertiaTick())\n    } else {\n      interaction.offsetBy({\n        x: this.modifiedOffset.x - this.currentOffset.x,\n        y: this.modifiedOffset.y - this.currentOffset.y,\n      })\n\n      this.end()\n    }\n  }\n\n  smoothEndTick() {\n    const { interaction } = this\n    const t = interaction._now() - this.t0\n    const { smoothEndDuration: duration } = getOptions(interaction)\n\n    if (t < duration) {\n      const newOffset = {\n        x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n        y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n      }\n      const delta = {\n        x: newOffset.x - this.currentOffset.x,\n        y: newOffset.y - this.currentOffset.y,\n      }\n\n      this.currentOffset.x += delta.x\n      this.currentOffset.y += delta.y\n\n      interaction.offsetBy(delta)\n      interaction.move({ skipModifiers: this.modifierCount })\n\n      this.onNextFrame(() => this.smoothEndTick())\n    } else {\n      interaction.offsetBy({\n        x: this.targetOffset.x - this.currentOffset.x,\n        y: this.targetOffset.y - this.currentOffset.y,\n      })\n\n      this.end()\n    }\n  }\n\n  resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n    const { interaction } = this\n\n    // undo inertia changes to interaction coords\n    interaction.offsetBy({\n      x: -this.currentOffset.x,\n      y: -this.currentOffset.y,\n    })\n\n    // update pointer at pointer down position\n    interaction.updatePointer(pointer, event, eventTarget, true)\n\n    // fire resume signals and event\n    interaction._doPhase({\n      interaction,\n      event,\n      phase: 'resume',\n    })\n    copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n    this.stop()\n  }\n\n  end() {\n    this.interaction.move()\n    this.interaction.end()\n    this.stop()\n  }\n\n  stop() {\n    this.active = this.smoothEnd = false\n    this.interaction.simulation = null\n    raf.cancel(this.timeout)\n  }\n}\n\nfunction start({ interaction, event }: DoPhaseArg<ActionName, 'end'>) {\n  if (!interaction._interacting || interaction.simulation) {\n    return null\n  }\n\n  const started = interaction.inertia.start(event)\n\n  // prevent action end if inertia or smoothEnd\n  return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume(arg: SignalArgs['interactions:down']) {\n  const { interaction, eventTarget } = arg\n  const state = interaction.inertia\n\n  if (!state.active) return\n\n  let element = eventTarget as Node\n\n  // climb up the DOM tree from the event target\n  while (is.element(element)) {\n    // if interaction element is the current inertia target element\n    if (element === interaction.element) {\n      state.resume(arg)\n      break\n    }\n\n    element = dom.parentNode(element)\n  }\n}\n\nfunction stop({ interaction }: { interaction: Interaction }) {\n  const state = interaction.inertia\n\n  if (state.active) {\n    state.stop()\n  }\n}\n\nfunction getOptions({ interactable, prepared }: Interaction) {\n  return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n  id: 'inertia',\n  before: ['modifiers', 'actions'],\n  install,\n  listeners: {\n    'interactions:new': ({ interaction }) => {\n      interaction.inertia = new InertiaState(interaction)\n    },\n\n    'interactions:before-action-end': start,\n    'interactions:down': resume,\n    'interactions:stop': stop,\n\n    'interactions:before-action-resume': (arg) => {\n      const { modification } = arg.interaction\n\n      modification.stop(arg)\n      modification.start(arg, arg.interaction.coords.cur.page)\n      modification.applyToInteraction(arg)\n    },\n\n    'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n    'interactions:action-resume': modifiers.addEventModifiers,\n    'interactions:action-inertiastart': modifiers.addEventModifiers,\n    'interactions:after-action-inertiastart': (arg) =>\n      arg.interaction.modification.restoreInteractionCoords(arg),\n    'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n  },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue(t: number, p1: number, p2: number, p3: number) {\n  const iT = 1 - t\n  return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint(\n  startX: number,\n  startY: number,\n  cpX: number,\n  cpY: number,\n  endX: number,\n  endY: number,\n  position: number,\n) {\n  return {\n    x: _getQBezierValue(position, startX, cpX, endX),\n    y: _getQBezierValue(position, startY, cpY, endY),\n  }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad(t: number, b: number, c: number, d: number) {\n  t /= d\n  return -c * t * (t - 2) + b\n}\n\nexport default inertia\n", "import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nimport type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\n\nfunction fireUntilImmediateStopped(event: any, listeners: Listener[]) {\n  for (const listener of listeners) {\n    if (event.immediatePropagationStopped) {\n      break\n    }\n\n    listener(event)\n  }\n}\n\nexport class Eventable {\n  options: any\n  types: NormalizedListeners = {}\n  propagationStopped = false\n  immediatePropagationStopped = false\n  global: any\n\n  constructor(options?: { [index: string]: any }) {\n    this.options = extend({}, options || {})\n  }\n\n  fire<T extends { type: string; propagationStopped?: boolean }>(event: T) {\n    let listeners: Listener[]\n    const global = this.global\n\n    // Interactable#on() listeners\n    // tslint:disable no-conditional-assignment\n    if ((listeners = this.types[event.type])) {\n      fireUntilImmediateStopped(event, listeners)\n    }\n\n    // interact.on() listeners\n    if (!event.propagationStopped && global && (listeners = global[event.type])) {\n      fireUntilImmediateStopped(event, listeners)\n    }\n  }\n\n  on(type: string, listener: ListenersArg) {\n    const listeners = normalize(type, listener)\n\n    for (type in listeners) {\n      this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n    }\n  }\n\n  off(type: string, listener: ListenersArg) {\n    const listeners = normalize(type, listener)\n\n    for (type in listeners) {\n      const eventList = this.types[type]\n\n      if (!eventList || !eventList.length) {\n        continue\n      }\n\n      for (const subListener of listeners[type]) {\n        const index = eventList.indexOf(subListener)\n\n        if (index !== -1) {\n          eventList.splice(index, 1)\n        }\n      }\n    }\n  }\n\n  getRect(_element: Element): Rect {\n    return null\n  }\n}\n", "import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\n\nimport type { NativeEventTarget } from './NativeTypes'\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    events: ReturnType<typeof install>\n  }\n}\n\ninterface EventOptions {\n  capture: boolean\n  passive: boolean\n}\n\ntype PartialEventTarget = Partial<NativeEventTarget>\n\ntype ListenerEntry = { func: (event: Event | FakeEvent) => any; options: EventOptions }\n\nfunction install(scope: Scope) {\n  const targets: Array<{\n    eventTarget: PartialEventTarget\n    events: { [type: string]: ListenerEntry[] }\n  }> = []\n\n  const delegatedEvents: {\n    [type: string]: Array<{\n      selector: string\n      context: Node\n      listeners: ListenerEntry[]\n    }>\n  } = {}\n  const documents: Document[] = []\n\n  const eventsMethods = {\n    add,\n    remove,\n\n    addDelegate,\n    removeDelegate,\n\n    delegateListener,\n    delegateUseCapture,\n    delegatedEvents,\n    documents,\n\n    targets,\n\n    supportsOptions: false,\n    supportsPassive: false,\n  }\n\n  // check if browser supports passive events and options arg\n  scope.document?.createElement('div').addEventListener('test', null, {\n    get capture() {\n      return (eventsMethods.supportsOptions = true)\n    },\n    get passive() {\n      return (eventsMethods.supportsPassive = true)\n    },\n  })\n\n  scope.events = eventsMethods\n\n  function add(\n    eventTarget: PartialEventTarget,\n    type: string,\n    listener: ListenerEntry['func'],\n    optionalArg?: boolean | EventOptions,\n  ) {\n    if (!eventTarget.addEventListener) return\n\n    const options = getOptions(optionalArg)\n    let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n    if (!target) {\n      target = {\n        eventTarget,\n        events: {},\n      }\n\n      targets.push(target)\n    }\n\n    if (!target.events[type]) {\n      target.events[type] = []\n    }\n\n    if (!arr.find(target.events[type], (l) => l.func === listener && optionsMatch(l.options, options))) {\n      eventTarget.addEventListener(\n        type,\n        listener as any,\n        eventsMethods.supportsOptions ? options : options.capture,\n      )\n      target.events[type].push({ func: listener, options })\n    }\n  }\n\n  function remove(\n    eventTarget: PartialEventTarget,\n    type: string,\n    listener?: 'all' | ListenerEntry['func'],\n    optionalArg?: boolean | EventOptions,\n  ) {\n    if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return\n\n    const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n    const target = targets[targetIndex]\n\n    if (!target || !target.events) {\n      return\n    }\n\n    if (type === 'all') {\n      for (type in target.events) {\n        if (target.events.hasOwnProperty(type)) {\n          remove(eventTarget, type, 'all')\n        }\n      }\n      return\n    }\n\n    let typeIsEmpty = false\n    const typeListeners = target.events[type]\n\n    if (typeListeners) {\n      if (listener === 'all') {\n        for (let i = typeListeners.length - 1; i >= 0; i--) {\n          const entry = typeListeners[i]\n          remove(eventTarget, type, entry.func, entry.options)\n        }\n        return\n      } else {\n        const options = getOptions(optionalArg)\n\n        for (let i = 0; i < typeListeners.length; i++) {\n          const entry = typeListeners[i]\n          if (entry.func === listener && optionsMatch(entry.options, options)) {\n            eventTarget.removeEventListener(\n              type,\n              listener as any,\n              eventsMethods.supportsOptions ? options : options.capture,\n            )\n            typeListeners.splice(i, 1)\n\n            if (typeListeners.length === 0) {\n              delete target.events[type]\n              typeIsEmpty = true\n            }\n\n            break\n          }\n        }\n      }\n    }\n\n    if (typeIsEmpty && !Object.keys(target.events).length) {\n      targets.splice(targetIndex, 1)\n    }\n  }\n\n  function addDelegate(\n    selector: string,\n    context: Node,\n    type: string,\n    listener: ListenerEntry['func'],\n    optionalArg?: any,\n  ) {\n    const options = getOptions(optionalArg)\n    if (!delegatedEvents[type]) {\n      delegatedEvents[type] = []\n\n      // add delegate listener functions\n      for (const doc of documents) {\n        add(doc, type, delegateListener)\n        add(doc, type, delegateUseCapture, true)\n      }\n    }\n\n    const delegates = delegatedEvents[type]\n    let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n    if (!delegate) {\n      delegate = { selector, context, listeners: [] }\n      delegates.push(delegate)\n    }\n\n    delegate.listeners.push({ func: listener, options })\n  }\n\n  function removeDelegate(\n    selector: string,\n    context: Document | Element,\n    type: string,\n    listener?: ListenerEntry['func'],\n    optionalArg?: any,\n  ) {\n    const options = getOptions(optionalArg)\n    const delegates = delegatedEvents[type]\n    let matchFound = false\n    let index: number\n\n    if (!delegates) return\n\n    // count from last index of delegated to 0\n    for (index = delegates.length - 1; index >= 0; index--) {\n      const cur = delegates[index]\n      // look for matching selector and context Node\n      if (cur.selector === selector && cur.context === context) {\n        const { listeners } = cur\n\n        // each item of the listeners array is an array: [function, capture, passive]\n        for (let i = listeners.length - 1; i >= 0; i--) {\n          const entry = listeners[i]\n\n          // check if the listener functions and capture and passive flags match\n          if (entry.func === listener && optionsMatch(entry.options, options)) {\n            // remove the listener from the array of listeners\n            listeners.splice(i, 1)\n\n            // if all listeners for this target have been removed\n            // remove the target from the delegates array\n            if (!listeners.length) {\n              delegates.splice(index, 1)\n\n              // remove delegate function from context\n              remove(context, type, delegateListener)\n              remove(context, type, delegateUseCapture, true)\n            }\n\n            // only remove one listener\n            matchFound = true\n            break\n          }\n        }\n\n        if (matchFound) {\n          break\n        }\n      }\n    }\n  }\n\n  // bound to the interactable context when a DOM event\n  // listener is added to a selector interactable\n  function delegateListener(event: Event | FakeEvent, optionalArg?: any) {\n    const options = getOptions(optionalArg)\n    const fakeEvent = new FakeEvent(event as Event)\n    const delegates = delegatedEvents[event.type]\n    const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n    let element: Node = eventTarget\n\n    // climb up document tree looking for selector matches\n    while (is.element(element)) {\n      for (let i = 0; i < delegates.length; i++) {\n        const cur = delegates[i]\n        const { selector, context } = cur\n\n        if (\n          domUtils.matchesSelector(element, selector) &&\n          domUtils.nodeContains(context, eventTarget) &&\n          domUtils.nodeContains(context, element)\n        ) {\n          const { listeners } = cur\n\n          fakeEvent.currentTarget = element\n\n          for (const entry of listeners) {\n            if (optionsMatch(entry.options, options)) {\n              entry.func(fakeEvent)\n            }\n          }\n        }\n      }\n\n      element = domUtils.parentNode(element)\n    }\n  }\n\n  function delegateUseCapture(this: Element, event: Event | FakeEvent) {\n    return delegateListener.call(this, event, true)\n  }\n\n  // for type inferrence\n  return eventsMethods\n}\n\nclass FakeEvent implements Partial<Event> {\n  currentTarget: Node\n  originalEvent: Event\n  type: string\n\n  constructor(originalEvent: Event) {\n    this.originalEvent = originalEvent\n    // duplicate the event so that currentTarget can be changed\n    pExtend(this, originalEvent)\n  }\n\n  preventOriginalDefault() {\n    this.originalEvent.preventDefault()\n  }\n\n  stopPropagation() {\n    this.originalEvent.stopPropagation()\n  }\n\n  stopImmediatePropagation() {\n    this.originalEvent.stopImmediatePropagation()\n  }\n}\n\nfunction getOptions(param: { [index: string]: any } | boolean): { capture: boolean; passive: boolean } {\n  if (!is.object(param)) {\n    return { capture: !!param, passive: false }\n  }\n\n  return {\n    capture: !!param.capture,\n    passive: !!param.passive,\n  }\n}\n\nfunction optionsMatch(a: Partial<EventOptions> | boolean, b: Partial<EventOptions>) {\n  if (a === b) return true\n\n  if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false\n\n  return !!a.capture === !!b.capture && !!a.passive === !!b.passive\n}\n\nexport default {\n  id: 'events',\n  install,\n}\n", "import * as dom from '@interactjs/utils/domUtils'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\n\nexport interface SearchDetails {\n  pointer: PointerType\n  pointerId: number\n  pointerType: string\n  eventType: string\n  eventTarget: EventTarget\n  curEventTarget: EventTarget\n  scope: Scope\n}\n\nconst finder = {\n  methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n  search(details: SearchDetails) {\n    for (const method of finder.methodOrder) {\n      const interaction = finder[method](details)\n\n      if (interaction) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n\n  // try to resume simulation with a new pointer\n  simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n    if (!/down|start/i.test(eventType)) {\n      return null\n    }\n\n    for (const interaction of scope.interactions.list) {\n      let element = eventTarget as Node\n\n      if (\n        interaction.simulation &&\n        interaction.simulation.allowResume &&\n        interaction.pointerType === pointerType\n      ) {\n        while (element) {\n          // if the element is the interaction element\n          if (element === interaction.element) {\n            return interaction\n          }\n          element = dom.parentNode(element)\n        }\n      }\n    }\n\n    return null\n  },\n\n  // if it's a mouse or pen interaction\n  mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n    if (pointerType !== 'mouse' && pointerType !== 'pen') {\n      return null\n    }\n\n    let firstNonActive\n\n    for (const interaction of scope.interactions.list) {\n      if (interaction.pointerType === pointerType) {\n        // if it's a down event, skip interactions with running simulations\n        if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n          continue\n        }\n\n        // if the interaction is active, return it immediately\n        if (interaction.interacting()) {\n          return interaction\n        }\n        // otherwise save it and look for another active interaction\n        else if (!firstNonActive) {\n          firstNonActive = interaction\n        }\n      }\n    }\n\n    // if no active mouse interaction was found use the first inactive mouse\n    // interaction\n    if (firstNonActive) {\n      return firstNonActive\n    }\n\n    // find any mouse or pen interaction.\n    // ignore the interaction if the eventType is a *down, and a simulation\n    // is active\n    for (const interaction of scope.interactions.list) {\n      if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n\n  // get interaction that has this pointer\n  hasPointer({ pointerId, scope }: SearchDetails) {\n    for (const interaction of scope.interactions.list) {\n      if (hasPointerId(interaction, pointerId)) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n\n  // get first idle interaction with a matching pointerType\n  idle({ pointerType, scope }: SearchDetails) {\n    for (const interaction of scope.interactions.list) {\n      // if there's already a pointer held down\n      if (interaction.pointers.length === 1) {\n        const target = interaction.interactable\n        // don't add this pointer if there is a target interactable and it\n        // isn't gesturable\n        if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n          continue\n        }\n      }\n      // maximum of 2 pointers per interaction\n      else if (interaction.pointers.length >= 2) {\n        continue\n      }\n\n      if (!interaction.interacting() && pointerType === interaction.pointerType) {\n        return interaction\n      }\n    }\n\n    return null\n  },\n}\n\nfunction hasPointerId(interaction: Interaction, pointerId: number) {\n  return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n", "import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './interactablePreventDefault'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport InteractionBase from './Interaction'\n/* eslint-enable import/no-duplicates */\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    Interaction: typeof InteractionBase\n    interactions: {\n      new: <T extends ActionName>(options: any) => InteractionBase<T>\n      list: Array<InteractionBase<ActionName>>\n      listeners: { [type: string]: Listener }\n      docEvents: Array<{ type: string; listener: Listener }>\n      pointerMoveTolerance: number\n    }\n    prevTouchTime: number\n  }\n\n  interface SignalArgs {\n    'interactions:find': {\n      interaction: InteractionBase\n      searchDetails: SearchDetails\n    }\n  }\n}\n\nconst methodNames = [\n  'pointerDown',\n  'pointerMove',\n  'pointerUp',\n  'updatePointer',\n  'removePointer',\n  'windowBlur',\n]\n\nfunction install(scope: Scope) {\n  const listeners = {} as any\n\n  for (const method of methodNames) {\n    listeners[method] = doOnInteractions(method, scope)\n  }\n\n  const pEventTypes = browser.pEventTypes\n  let docEvents: typeof scope.interactions.docEvents\n\n  if (domObjects.PointerEvent) {\n    docEvents = [\n      { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n      { type: pEventTypes.down, listener: listeners.pointerDown },\n      { type: pEventTypes.move, listener: listeners.pointerMove },\n      { type: pEventTypes.up, listener: listeners.pointerUp },\n      { type: pEventTypes.cancel, listener: listeners.pointerUp },\n    ]\n  } else {\n    docEvents = [\n      { type: 'mousedown', listener: listeners.pointerDown },\n      { type: 'mousemove', listener: listeners.pointerMove },\n      { type: 'mouseup', listener: listeners.pointerUp },\n\n      { type: 'touchstart', listener: releasePointersOnRemovedEls },\n      { type: 'touchstart', listener: listeners.pointerDown },\n      { type: 'touchmove', listener: listeners.pointerMove },\n      { type: 'touchend', listener: listeners.pointerUp },\n      { type: 'touchcancel', listener: listeners.pointerUp },\n    ]\n  }\n\n  docEvents.push({\n    type: 'blur',\n    listener(event) {\n      for (const interaction of scope.interactions.list) {\n        interaction.documentBlur(event)\n      }\n    },\n  })\n\n  // for ignoring browser's simulated mouse events\n  scope.prevTouchTime = 0\n\n  scope.Interaction = class<T extends ActionName> extends InteractionBase<T> {\n    get pointerMoveTolerance() {\n      return scope.interactions.pointerMoveTolerance\n    }\n\n    set pointerMoveTolerance(value) {\n      scope.interactions.pointerMoveTolerance = value\n    }\n\n    _now() {\n      return scope.now()\n    }\n  }\n\n  scope.interactions = {\n    // all active and idle interactions\n    list: [],\n    new<T extends ActionName>(options: { pointerType?: string; scopeFire?: Scope['fire'] }) {\n      options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n      const interaction = new scope.Interaction<T>(options as Required<typeof options>)\n\n      scope.interactions.list.push(interaction)\n      return interaction\n    },\n    listeners,\n    docEvents,\n    pointerMoveTolerance: 1,\n  }\n\n  function releasePointersOnRemovedEls() {\n    // for all inactive touch interactions with pointers down\n    for (const interaction of scope.interactions.list) {\n      if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n        continue\n      }\n\n      // if a pointer is down on an element that is no longer in the DOM tree\n      for (const pointer of interaction.pointers) {\n        if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n          // remove the pointer from the interaction\n          interaction.removePointer(pointer.pointer, pointer.event)\n        }\n      }\n    }\n  }\n\n  scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions(method: string, scope: Scope) {\n  return function (event: Event) {\n    const interactions = scope.interactions.list\n\n    const pointerType = pointerUtils.getPointerType(event)\n    const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n    const matches: any[] = [] // [ [pointer, interaction], ...]\n\n    if (/^touch/.test(event.type)) {\n      scope.prevTouchTime = scope.now()\n\n      // @ts-expect-error\n      for (const changedTouch of event.changedTouches) {\n        const pointer = changedTouch\n        const pointerId = pointerUtils.getPointerId(pointer)\n        const searchDetails: SearchDetails = {\n          pointer,\n          pointerId,\n          pointerType,\n          eventType: event.type,\n          eventTarget,\n          curEventTarget,\n          scope,\n        }\n        const interaction = getInteraction(searchDetails)\n\n        matches.push([\n          searchDetails.pointer,\n          searchDetails.eventTarget,\n          searchDetails.curEventTarget,\n          interaction,\n        ])\n      }\n    } else {\n      let invalidPointer = false\n\n      if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n        // ignore mouse events while touch interactions are active\n        for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n          invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n        }\n\n        // try to ignore mouse events that are simulated by the browser\n        // after a touch event\n        invalidPointer =\n          invalidPointer ||\n          scope.now() - scope.prevTouchTime < 500 ||\n          // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n          event.timeStamp === 0\n      }\n\n      if (!invalidPointer) {\n        const searchDetails = {\n          pointer: event as PointerEvent,\n          pointerId: pointerUtils.getPointerId(event as PointerEvent),\n          pointerType,\n          eventType: event.type,\n          curEventTarget,\n          eventTarget,\n          scope,\n        }\n\n        const interaction = getInteraction(searchDetails)\n\n        matches.push([\n          searchDetails.pointer,\n          searchDetails.eventTarget,\n          searchDetails.curEventTarget,\n          interaction,\n        ])\n      }\n    }\n\n    // eslint-disable-next-line no-shadow\n    for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n      interaction[method](pointer, event, eventTarget, curEventTarget)\n    }\n  }\n}\n\nfunction getInteraction(searchDetails: SearchDetails) {\n  const { pointerType, scope } = searchDetails\n\n  const foundInteraction = finder.search(searchDetails)\n  const signalArg = { interaction: foundInteraction, searchDetails }\n\n  scope.fire('interactions:find', signalArg)\n\n  return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal<T extends 'scope:add-document' | 'scope:remove-document'>(\n  { doc, scope, options }: SignalArgs[T],\n  eventMethodName: 'add' | 'remove',\n) {\n  const {\n    interactions: { docEvents },\n    events,\n  } = scope\n  const eventMethod = events[eventMethodName]\n\n  if (scope.browser.isIOS && !options.events) {\n    options.events = { passive: false }\n  }\n\n  // delegate event listener\n  for (const eventType in events.delegatedEvents) {\n    eventMethod(doc, eventType, events.delegateListener)\n    eventMethod(doc, eventType, events.delegateUseCapture, true)\n  }\n\n  const eventOptions = options && options.events\n\n  for (const { type, listener } of docEvents) {\n    eventMethod(doc, type, listener, eventOptions)\n  }\n}\n\nconst interactions: Plugin = {\n  id: 'core/interactions',\n  install,\n  listeners: {\n    'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n    'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n    'interactable:unset': ({ interactable }, scope) => {\n      // Stop and destroy related interactions when an Interactable is unset\n      for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n        const interaction = scope.interactions.list[i]\n\n        if (interaction.interactable !== interactable) {\n          continue\n        }\n\n        interaction.stop()\n        scope.fire('interactions:destroy', { interaction })\n        interaction.destroy()\n\n        if (scope.interactions.list.length > 2) {\n          scope.interactions.list.splice(i, 1)\n        }\n      }\n    },\n  },\n  onDocSignal,\n  doOnInteractions,\n  methodNames,\n}\n\nexport default interactions\n", "/* eslint-disable no-dupe-class-members */\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n  ActionMap,\n  ActionMethod,\n  ActionName,\n  Actions,\n  Context,\n  Element,\n  EventTypes,\n  Listeners,\n  ListenersArg,\n  OrBoolean,\n  Target,\n} from '@interactjs/core/types'\n\nimport { Eventable } from './Eventable'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\nconst enum OnOffMethod {\n  On,\n  Off,\n}\n\n/**\n * ```ts\n * const interactable = interact('.cards')\n *   .draggable({\n *     listeners: { move: event => console.log(event.type, event.pageX, event.pageY) }\n *   })\n *   .resizable({\n *     listeners: { move: event => console.log(event.rect) },\n *     modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })]\n *   })\n * ```\n */\nexport class Interactable implements Partial<Eventable> {\n  /** @internal */ get _defaults(): Defaults {\n    return {\n      base: {},\n      perAction: {},\n      actions: {} as ActionDefaults,\n    }\n  }\n\n  readonly target: Target\n  /** @internal */ readonly options!: Required<Options>\n  /** @internal */ readonly _actions: Actions\n  /** @internal */ readonly events = new Eventable()\n  /** @internal */ readonly _context: Context\n  /** @internal */ readonly _win: Window\n  /** @internal */ readonly _doc: Document\n  /** @internal */ readonly _scopeEvents: Scope['events']\n\n  constructor(\n    target: Target,\n    options: any,\n    defaultContext: Document | Element,\n    scopeEvents: Scope['events'],\n  ) {\n    this._actions = options.actions\n    this.target = target\n    this._context = options.context || defaultContext\n    this._win = getWindow(trySelector(target) ? this._context : target)\n    this._doc = this._win.document\n    this._scopeEvents = scopeEvents\n\n    this.set(options)\n  }\n\n  setOnEvents(actionName: ActionName, phases: NonNullable<any>) {\n    if (is.func(phases.onstart)) {\n      this.on(`${actionName}start`, phases.onstart)\n    }\n    if (is.func(phases.onmove)) {\n      this.on(`${actionName}move`, phases.onmove)\n    }\n    if (is.func(phases.onend)) {\n      this.on(`${actionName}end`, phases.onend)\n    }\n    if (is.func(phases.oninertiastart)) {\n      this.on(`${actionName}inertiastart`, phases.oninertiastart)\n    }\n\n    return this\n  }\n\n  updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined) {\n    const actionFilter = (this._actions.map[actionName] as { filterEventType?: (type: string) => boolean })\n      ?.filterEventType\n    const filter = (type: string) =>\n      (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, this._actions)\n\n    if (is.array(prev) || is.object(prev)) {\n      this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter)\n    }\n\n    if (is.array(cur) || is.object(cur)) {\n      this._onOff(OnOffMethod.On, actionName, cur, undefined, filter)\n    }\n  }\n\n  setPerAction(actionName: ActionName, options: OrBoolean<Options>) {\n    const defaults = this._defaults\n\n    // for all the default per-action options\n    for (const optionName_ in options) {\n      const optionName = optionName_ as keyof PerActionDefaults\n      const actionOptions = this.options[actionName]\n      const optionValue: any = options[optionName]\n\n      // remove old event listeners and add new ones\n      if (optionName === 'listeners') {\n        this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n      }\n\n      // if the option value is an array\n      if (is.array(optionValue)) {\n        ;(actionOptions[optionName] as any) = arr.from(optionValue)\n      }\n      // if the option value is an object\n      else if (is.plainObject(optionValue)) {\n        // copy the object\n        ;(actionOptions[optionName] as any) = extend(\n          actionOptions[optionName] || ({} as any),\n          clone(optionValue),\n        )\n\n        // set anabled field to true if it exists in the defaults\n        if (\n          is.object(defaults.perAction[optionName]) &&\n          'enabled' in (defaults.perAction[optionName] as any)\n        ) {\n          ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n        }\n      }\n      // if the option value is a boolean and the default is an object\n      else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n        ;(actionOptions[optionName] as any).enabled = optionValue\n      }\n      // if it's anything else, do a plain assignment\n      else {\n        ;(actionOptions[optionName] as any) = optionValue\n      }\n    }\n  }\n\n  /**\n   * The default function to get an Interactables bounding rect. Can be\n   * overridden using {@link Interactable.rectChecker}.\n   *\n   * @param {Element} [element] The element to measure.\n   * @return {Rect} The object's bounding rectangle.\n   */\n  getRect(element: Element) {\n    element = element || (is.element(this.target) ? this.target : null)\n\n    if (is.string(this.target)) {\n      element = element || this._context.querySelector(this.target)\n    }\n\n    return getElementRect(element)\n  }\n\n  /**\n   * Returns or sets the function used to calculate the interactable's\n   * element's rectangle\n   *\n   * @param {function} [checker] A function which returns this Interactable's\n   * bounding rectangle. See {@link Interactable.getRect}\n   * @return {function | object} The checker function or this Interactable\n   */\n  rectChecker(): (element: Element) => any | null\n  rectChecker(checker: (element: Element) => any): this\n  rectChecker(checker?: (element: Element) => any) {\n    if (is.func(checker)) {\n      this.getRect = (element) => {\n        const rect = extend({}, checker.apply(this, element))\n\n        if (!(('width' in rect) as unknown)) {\n          rect.width = rect.right - rect.left\n          rect.height = rect.bottom - rect.top\n        }\n\n        return rect\n      }\n\n      return this\n    }\n\n    if (checker === null) {\n      delete (this as Partial<typeof this>).getRect\n\n      return this\n    }\n\n    return this.getRect\n  }\n\n  /** @internal */\n  _backCompatOption(optionName: keyof Options, newValue: any) {\n    if (trySelector(newValue) || is.object(newValue)) {\n      ;(this.options[optionName] as any) = newValue\n\n      for (const action in this._actions.map) {\n        ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n      }\n\n      return this\n    }\n\n    return this.options[optionName]\n  }\n\n  /**\n   * Gets or sets the origin of the Interactable's element.  The x and y\n   * of the origin will be subtracted from action event coordinates.\n   *\n   * @param {Element | object | string} [origin] An HTML or SVG Element whose\n   * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n   * or any CSS selector\n   *\n   * @return {object} The current origin or this Interactable\n   */\n  origin(newValue: any) {\n    return this._backCompatOption('origin', newValue)\n  }\n\n  /**\n   * Returns or sets the mouse coordinate types used to calculate the\n   * movement of the pointer.\n   *\n   * @param {string} [newValue] Use 'client' if you will be scrolling while\n   * interacting; Use 'page' if you want autoScroll to work\n   * @return {string | object} The current deltaSource or this Interactable\n   */\n  deltaSource(): DeltaSource\n  deltaSource(newValue: DeltaSource): this\n  deltaSource(newValue?: DeltaSource) {\n    if (newValue === 'page' || newValue === 'client') {\n      this.options.deltaSource = newValue\n\n      return this\n    }\n\n    return this.options.deltaSource\n  }\n\n  /** @internal */\n  getAllElements(): Element[] {\n    const { target } = this\n\n    if (is.string(target)) {\n      return Array.from(this._context.querySelectorAll(target))\n    }\n\n    if (is.func(target) && (target as any).getAllElements) {\n      return (target as any).getAllElements()\n    }\n\n    return is.element(target) ? [target] : []\n  }\n\n  /**\n   * Gets the selector context Node of the Interactable. The default is\n   * `window.document`.\n   *\n   * @return {Node} The context Node of this Interactable\n   */\n  context() {\n    return this._context\n  }\n\n  inContext(element: Document | Node) {\n    return this._context === element.ownerDocument || nodeContains(this._context, element)\n  }\n\n  /** @internal */\n  testIgnoreAllow(\n    this: Interactable,\n    options: { ignoreFrom?: IgnoreValue; allowFrom?: IgnoreValue },\n    targetNode: Node,\n    eventTarget: Node,\n  ) {\n    return (\n      !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n      this.testAllow(options.allowFrom, targetNode, eventTarget)\n    )\n  }\n\n  /** @internal */\n  testAllow(this: Interactable, allowFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n    if (!allowFrom) {\n      return true\n    }\n\n    if (!is.element(element)) {\n      return false\n    }\n\n    if (is.string(allowFrom)) {\n      return matchesUpTo(element, allowFrom, targetNode)\n    } else if (is.element(allowFrom)) {\n      return nodeContains(allowFrom, element)\n    }\n\n    return false\n  }\n\n  /** @internal */\n  testIgnore(this: Interactable, ignoreFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n    if (!ignoreFrom || !is.element(element)) {\n      return false\n    }\n\n    if (is.string(ignoreFrom)) {\n      return matchesUpTo(element, ignoreFrom, targetNode)\n    } else if (is.element(ignoreFrom)) {\n      return nodeContains(ignoreFrom, element)\n    }\n\n    return false\n  }\n\n  /**\n   * Calls listeners for the given InteractEvent type bound globally\n   * and directly to this Interactable\n   *\n   * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n   * Interactable\n   * @return {Interactable} this Interactable\n   */\n  fire<E extends { type: string }>(iEvent: E) {\n    this.events.fire(iEvent)\n\n    return this\n  }\n\n  /** @internal */\n  _onOff(\n    method: OnOffMethod,\n    typeArg: EventTypes,\n    listenerArg?: ListenersArg | null,\n    options?: any,\n    filter?: (type: string) => boolean,\n  ) {\n    if (is.object(typeArg) && !is.array(typeArg)) {\n      options = listenerArg\n      listenerArg = null\n    }\n\n    const listeners = normalizeListeners(typeArg, listenerArg, filter)\n\n    for (let type in listeners) {\n      if (type === 'wheel') {\n        type = browser.wheelEvent\n      }\n\n      for (const listener of listeners[type]) {\n        // if it is an action event type\n        if (isNonNativeEvent(type, this._actions)) {\n          this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener)\n        }\n        // delegated event\n        else if (is.string(this.target)) {\n          this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](\n            this.target,\n            this._context,\n            type,\n            listener,\n            options,\n          )\n        }\n        // remove listener from this Interactable's element\n        else {\n          this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](\n            this.target,\n            type,\n            listener,\n            options,\n          )\n        }\n      }\n    }\n\n    return this\n  }\n\n  /**\n   * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n   *\n   * @param {string | array | object} types The types of events to listen\n   * for\n   * @param {function | array | object} [listener] The event listener function(s)\n   * @param {object | boolean} [options] options object or useCapture flag for\n   * addEventListener\n   * @return {Interactable} This Interactable\n   */\n  on(types: EventTypes, listener?: ListenersArg, options?: any) {\n    return this._onOff(OnOffMethod.On, types, listener, options)\n  }\n\n  /**\n   * Removes an InteractEvent, pointerEvent or DOM event listener.\n   *\n   * @param {string | array | object} types The types of events that were\n   * listened for\n   * @param {function | array | object} [listener] The event listener function(s)\n   * @param {object | boolean} [options] options object or useCapture flag for\n   * removeEventListener\n   * @return {Interactable} This Interactable\n   */\n  off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n    return this._onOff(OnOffMethod.Off, types, listener, options)\n  }\n\n  /**\n   * Reset the options of this Interactable\n   *\n   * @param {object} options The new settings to apply\n   * @return {object} This Interactable\n   */\n  set(options: OptionsArg) {\n    const defaults = this._defaults\n\n    if (!is.object(options)) {\n      options = {}\n    }\n\n    ;(this.options as Required<Options>) = clone(defaults.base) as Required<Options>\n\n    for (const actionName_ in this._actions.methodDict) {\n      const actionName = actionName_ as ActionName\n      const methodName = this._actions.methodDict[actionName]\n\n      this.options[actionName] = {}\n      this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n      ;(this[methodName] as ActionMethod<unknown>)(options[actionName])\n    }\n\n    for (const setting in options) {\n      if (setting === 'getRect') {\n        this.rectChecker(options.getRect)\n        continue\n      }\n\n      if (is.func((this as any)[setting])) {\n        ;(this as any)[setting](options[setting as keyof typeof options])\n      }\n    }\n\n    return this\n  }\n\n  /**\n   * Remove this interactable from the list of interactables and remove it's\n   * action capabilities and event listeners\n   */\n  unset() {\n    if (is.string(this.target)) {\n      // remove delegated events\n      for (const type in this._scopeEvents.delegatedEvents) {\n        const delegated = this._scopeEvents.delegatedEvents[type]\n\n        for (let i = delegated.length - 1; i >= 0; i--) {\n          const { selector, context, listeners } = delegated[i]\n\n          if (selector === this.target && context === this._context) {\n            delegated.splice(i, 1)\n          }\n\n          for (let l = listeners.length - 1; l >= 0; l--) {\n            this._scopeEvents.removeDelegate(\n              this.target,\n              this._context,\n              type,\n              listeners[l][0],\n              listeners[l][1],\n            )\n          }\n        }\n      }\n    } else {\n      this._scopeEvents.remove(this.target, 'all')\n    }\n  }\n}\n", "import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target } from '@interactjs/core/types'\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactable:new': {\n      interactable: Interactable\n      target: Target\n      options: OptionsArg\n      win: Window\n    }\n  }\n}\n\nexport class InteractableSet {\n  // all set interactables\n  list: Interactable[] = []\n\n  selectorMap: {\n    [selector: string]: Interactable[]\n  } = {}\n\n  scope: Scope\n\n  constructor(scope: Scope) {\n    this.scope = scope\n    scope.addListeners({\n      'interactable:unset': ({ interactable }) => {\n        const { target } = interactable\n        const interactablesOnTarget: Interactable[] = is.string(target)\n          ? this.selectorMap[target]\n          : (target as any)[this.scope.id]\n\n        const targetIndex = arr.findIndex(interactablesOnTarget, (i) => i === interactable)\n        interactablesOnTarget.splice(targetIndex, 1)\n      },\n    })\n  }\n\n  new(target: Target, options?: any): Interactable {\n    options = extend(options || {}, {\n      actions: this.scope.actions,\n    })\n    const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n\n    this.scope.addDocument(interactable._doc)\n    this.list.push(interactable)\n\n    if (is.string(target)) {\n      if (!this.selectorMap[target]) {\n        this.selectorMap[target] = []\n      }\n      this.selectorMap[target].push(interactable)\n    } else {\n      if (!(interactable.target as any)[this.scope.id]) {\n        Object.defineProperty(target, this.scope.id, {\n          value: [],\n          configurable: true,\n        })\n      }\n\n      ;(target as any)[this.scope.id].push(interactable)\n    }\n\n    this.scope.fire('interactable:new', {\n      target,\n      options,\n      interactable,\n      win: this.scope._win,\n    })\n\n    return interactable\n  }\n\n  getExisting(target: Target, options?: Options) {\n    const context = (options && options.context) || this.scope.document\n    const isSelector = is.string(target)\n    const interactablesOnTarget: Interactable[] = isSelector\n      ? this.selectorMap[target as string]\n      : (target as any)[this.scope.id]\n\n    if (!interactablesOnTarget) return undefined\n\n    return arr.find(\n      interactablesOnTarget,\n      (interactable) =>\n        interactable._context === context && (isSelector || interactable.inContext(target as any)),\n    )\n  }\n\n  forEachMatch<T>(node: Node, callback: (interactable: Interactable) => T): T | void {\n    for (const interactable of this.list) {\n      let ret: T\n\n      if (\n        (is.string(interactable.target)\n          ? // target is a selector and the element matches\n            is.element(node) && domUtils.matchesSelector(node, interactable.target)\n          : // target is the element\n            node === interactable.target) &&\n        // the element is in context\n        interactable.inContext(node)\n      ) {\n        ret = callback(interactable)\n      }\n\n      if (ret !== undefined) {\n        return ret\n      }\n    }\n  }\n}\n", "import browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport type Interaction from '@interactjs/core/Interaction'\n\nimport { Eventable } from './Eventable'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './events'\nimport './interactions'\nimport events from './events'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport { InteractEvent } from './InteractEvent'\nimport interactions from './interactions'\n/* eslint-enable import/no-duplicates */\nimport { createInteractStatic } from './InteractStatic'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\nimport type { Actions } from './types'\n\nexport interface SignalArgs {\n  'scope:add-document': DocSignalArg\n  'scope:remove-document': DocSignalArg\n  'interactable:unset': { interactable: InteractableBase }\n  'interactable:set': { interactable: InteractableBase; options: OptionsArg }\n  'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n  [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n  doc: Document\n  window: Window\n  scope: Scope\n  options: Record<string, any>\n}\n\nexport interface Plugin {\n  [key: string]: any\n  id?: string\n  listeners?: ListenerMap\n  before?: string[]\n  install?(scope: Scope, options?: any): void\n}\n\n/** @internal */\nexport class Scope {\n  id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n  isInitialized = false\n  listenerMaps: Array<{\n    map: ListenerMap\n    id?: string\n  }> = []\n\n  browser = browser\n  defaults = clone(defaults) as typeof defaults\n  Eventable = Eventable\n  actions: Actions = {\n    map: {},\n    phases: {\n      start: true,\n      move: true,\n      end: true,\n    },\n    methodDict: {} as any,\n    phaselessTypes: {},\n  }\n\n  interactStatic = createInteractStatic(this)\n  InteractEvent = InteractEvent\n  Interactable: typeof InteractableBase\n  interactables = new InteractableSet(this)\n\n  // main window\n  _win!: Window\n\n  // main document\n  document!: Document\n\n  // main window\n  window!: Window\n\n  // all documents being listened to\n  documents: Array<{ doc: Document; options: any }> = []\n\n  _plugins: {\n    list: Plugin[]\n    map: { [id: string]: Plugin }\n  } = {\n    list: [],\n    map: {},\n  }\n\n  constructor() {\n    const scope = this\n\n    this.Interactable = class extends InteractableBase {\n      get _defaults() {\n        return scope.defaults\n      }\n\n      set<T extends InteractableBase>(this: T, options: OptionsArg) {\n        super.set(options)\n\n        scope.fire('interactable:set', {\n          options,\n          interactable: this,\n        })\n\n        return this\n      }\n\n      unset(this: InteractableBase) {\n        super.unset()\n\n        const index = scope.interactables.list.indexOf(this)\n        if (index < 0) return\n\n        scope.interactables.list.splice(index, 1)\n        scope.fire('interactable:unset', { interactable: this })\n      }\n    }\n  }\n\n  addListeners(map: ListenerMap, id?: string) {\n    this.listenerMaps.push({ id, map })\n  }\n\n  fire<T extends ListenerName>(name: T, arg: SignalArgs[T]): void | false {\n    for (const {\n      map: { [name]: listener },\n    } of this.listenerMaps) {\n      if (!!listener && listener(arg as any, this, name as never) === false) {\n        return false\n      }\n    }\n  }\n\n  onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n  init(window: Window | typeof globalThis) {\n    return this.isInitialized ? this : initScope(this, window)\n  }\n\n  pluginIsInstalled(plugin: Plugin) {\n    const { id } = plugin\n    return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1\n  }\n\n  usePlugin(plugin: Plugin, options?: { [key: string]: any }) {\n    if (!this.isInitialized) {\n      return this\n    }\n\n    if (this.pluginIsInstalled(plugin)) {\n      return this\n    }\n\n    if (plugin.id) {\n      this._plugins.map[plugin.id] = plugin\n    }\n    this._plugins.list.push(plugin)\n\n    if (plugin.install) {\n      plugin.install(this, options)\n    }\n\n    if (plugin.listeners && plugin.before) {\n      let index = 0\n      const len = this.listenerMaps.length\n      const before = plugin.before.reduce((acc, id) => {\n        acc[id] = true\n        acc[pluginIdRoot(id)] = true\n        return acc\n      }, {})\n\n      for (; index < len; index++) {\n        const otherId = this.listenerMaps[index].id\n\n        if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) {\n          break\n        }\n      }\n\n      this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n    } else if (plugin.listeners) {\n      this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n    }\n\n    return this\n  }\n\n  addDocument(doc: Document, options?: any): void | false {\n    // do nothing if document is already known\n    if (this.getDocIndex(doc) !== -1) {\n      return false\n    }\n\n    const window = win.getWindow(doc)\n\n    options = options ? extend({}, options) : {}\n\n    this.documents.push({ doc, options })\n    this.events.documents.push(doc)\n\n    // don't add an unload event for the main document\n    // so that the page may be cached in browser history\n    if (doc !== this.document) {\n      this.events.add(window, 'unload', this.onWindowUnload)\n    }\n\n    this.fire('scope:add-document', { doc, window, scope: this, options })\n  }\n\n  removeDocument(doc: Document) {\n    const index = this.getDocIndex(doc)\n\n    const window = win.getWindow(doc)\n    const options = this.documents[index].options\n\n    this.events.remove(window, 'unload', this.onWindowUnload)\n\n    this.documents.splice(index, 1)\n    this.events.documents.splice(index, 1)\n\n    this.fire('scope:remove-document', { doc, window, scope: this, options })\n  }\n\n  getDocIndex(doc: Document) {\n    for (let i = 0; i < this.documents.length; i++) {\n      if (this.documents[i].doc === doc) {\n        return i\n      }\n    }\n\n    return -1\n  }\n\n  getDocOptions(doc: Document) {\n    const docIndex = this.getDocIndex(doc)\n\n    return docIndex === -1 ? null : this.documents[docIndex].options\n  }\n\n  now() {\n    return (((this.window as any).Date as typeof Date) || Date).now()\n  }\n}\n\n// Keep Scope class internal, but expose minimal interface to avoid broken types when Scope is stripped out\nexport interface Scope {\n  fire<T extends ListenerName>(name: T, arg: SignalArgs[T]): void | false\n}\n\n/** @internal */\nexport function initScope(scope: Scope, window: Window | typeof globalThis) {\n  scope.isInitialized = true\n\n  if (is.window(window)) {\n    win.init(window)\n  }\n\n  domObjects.init(window)\n  browser.init(window)\n  raf.init(window)\n\n  // @ts-expect-error\n  scope.window = window\n  scope.document = window.document\n\n  scope.usePlugin(interactions)\n  scope.usePlugin(events)\n\n  return scope\n}\n\nfunction pluginIdRoot(id: string) {\n  return id && id.replace(/\\/.*$/, '')\n}\n", "import browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { Options } from './options'\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n *   .gesturable(true)\n *   .on('gesturemove', function (event) {\n *       // ...\n *   })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport interface InteractStatic {\n  (target: Target, options?: Options): Interactable\n  getPointerAverage: typeof pointerUtils.pointerAverage\n  getTouchBBox: typeof pointerUtils.touchBBox\n  getTouchDistance: typeof pointerUtils.touchDistance\n  getTouchAngle: typeof pointerUtils.touchAngle\n  getElementRect: typeof domUtils.getElementRect\n  getElementClientRect: typeof domUtils.getElementClientRect\n  matchesSelector: typeof domUtils.matchesSelector\n  closest: typeof domUtils.closest\n  /** @internal */ globalEvents: any\n  version: string\n  /** @internal */ scope: Scope\n  /**\n   * Use a plugin\n   */\n  use(\n    plugin: Plugin,\n    options?: {\n      [key: string]: any\n    },\n  ): any\n  /**\n   * Check if an element or selector has been set with the `interact(target)`\n   * function\n   *\n   * @return {boolean} Indicates if the element or CSS selector was previously\n   * passed to interact\n   */\n  isSet(\n    /* The Element or string being searched for */\n    target: Target,\n    options?: any,\n  ): boolean\n  on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n  off(type: EventTypes, listener: any, options?: object): any\n  debug(): any\n  /**\n   * Whether or not the browser supports touch input\n   */\n  supportsTouch(): boolean\n  /**\n   * Whether or not the browser supports PointerEvents\n   */\n  supportsPointerEvent(): boolean\n  /**\n   * Cancels all interactions (end events are not fired)\n   */\n  stop(): InteractStatic\n  /**\n   * Returns or sets the distance the pointer must be moved before an action\n   * sequence occurs. This also affects tolerance for tap events.\n   */\n  pointerMoveTolerance(\n    /** The movement from the start position must be greater than this value */\n    newValue?: number,\n  ): InteractStatic | number\n  addDocument(doc: Document, options?: object): void\n  removeDocument(doc: Document): void\n}\n\nexport function createInteractStatic(scope: Scope): InteractStatic {\n  const interact = ((target: Target, options: Options) => {\n    let interactable = scope.interactables.getExisting(target, options)\n\n    if (!interactable) {\n      interactable = scope.interactables.new(target, options)\n      interactable.events.global = interact.globalEvents\n    }\n\n    return interactable\n  }) as InteractStatic\n\n  // expose the functions used to calculate multi-touch properties\n  interact.getPointerAverage = pointerUtils.pointerAverage\n  interact.getTouchBBox = pointerUtils.touchBBox\n  interact.getTouchDistance = pointerUtils.touchDistance\n  interact.getTouchAngle = pointerUtils.touchAngle\n\n  interact.getElementRect = domUtils.getElementRect\n  interact.getElementClientRect = domUtils.getElementClientRect\n  interact.matchesSelector = domUtils.matchesSelector\n  interact.closest = domUtils.closest\n\n  interact.globalEvents = {} as any\n\n  // eslint-disable-next-line no-undef\n  interact.version = process.env.npm_package_version\n  interact.scope = scope\n  interact.use = function (plugin, options) {\n    this.scope.usePlugin(plugin, options)\n\n    return this\n  }\n\n  interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n    return !!this.scope.interactables.get(target, options && options.context)\n  }\n\n  interact.on = warnOnce(function on(type: string | EventTypes, listener: ListenersArg, options?: object) {\n    if (is.string(type) && type.search(' ') !== -1) {\n      type = type.trim().split(/ +/)\n    }\n\n    if (is.array(type)) {\n      for (const eventType of type as any[]) {\n        this.on(eventType, listener, options)\n      }\n\n      return this\n    }\n\n    if (is.object(type)) {\n      for (const prop in type) {\n        this.on(prop, (type as any)[prop], listener)\n      }\n\n      return this\n    }\n\n    // if it is an InteractEvent type, add listener to globalEvents\n    if (isNonNativeEvent(type, this.scope.actions)) {\n      // if this type of event was never bound\n      if (!this.globalEvents[type]) {\n        this.globalEvents[type] = [listener]\n      } else {\n        this.globalEvents[type].push(listener)\n      }\n    }\n    // If non InteractEvent type, addEventListener to document\n    else {\n      this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n    }\n\n    return this\n  }, 'The interact.on() method is being deprecated')\n\n  interact.off = warnOnce(function off(type: EventTypes, listener: any, options?: object) {\n    if (is.string(type) && type.search(' ') !== -1) {\n      type = type.trim().split(/ +/)\n    }\n\n    if (is.array(type)) {\n      for (const eventType of type) {\n        this.off(eventType, listener, options)\n      }\n\n      return this\n    }\n\n    if (is.object(type)) {\n      for (const prop in type) {\n        this.off(prop, type[prop], listener)\n      }\n\n      return this\n    }\n\n    if (isNonNativeEvent(type, this.scope.actions)) {\n      let index: number\n\n      if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n        this.globalEvents[type].splice(index, 1)\n      }\n    } else {\n      this.scope.events.remove(this.scope.document, type, listener, options)\n    }\n\n    return this\n  }, 'The interact.off() method is being deprecated')\n\n  interact.debug = function () {\n    return this.scope\n  }\n\n  interact.supportsTouch = function () {\n    return browser.supportsTouch\n  }\n\n  interact.supportsPointerEvent = function () {\n    return browser.supportsPointerEvent\n  }\n\n  interact.stop = function () {\n    for (const interaction of this.scope.interactions.list) {\n      interaction.stop()\n    }\n\n    return this\n  }\n\n  interact.pointerMoveTolerance = function (newValue?: number) {\n    if (is.number(newValue)) {\n      this.scope.interactions.pointerMoveTolerance = newValue\n\n      return this\n    }\n\n    return this.scope.interactions.pointerMoveTolerance\n  }\n\n  interact.addDocument = function (doc: Document, options?: object) {\n    this.scope.addDocument(doc, options)\n  }\n\n  interact.removeDocument = function (doc: Document) {\n    this.scope.removeDocument(doc)\n  }\n\n  return interact\n}\n", "import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n", "export default () => {}\n", "export default () => {}\n", "import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport interface GridOptionsBase {\n  range?: number\n  limits?: Rect\n  offset?: Point\n}\nexport interface GridOptionsXY extends GridOptionsBase {\n  x: number\n  y: number\n}\nexport interface GridOptionsTopLeft extends GridOptionsBase {\n  top?: number\n  left?: number\n}\nexport interface GridOptionsBottomRight extends GridOptionsBase {\n  bottom?: number\n  right?: number\n}\nexport interface GridOptionsWidthHeight extends GridOptionsBase {\n  width?: number\n  height?: number\n}\n\nexport type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight\n\nexport default (grid: GridOptions) => {\n  const coordFields = (\n    [\n      ['x', 'y'],\n      ['left', 'top'],\n      ['right', 'bottom'],\n      ['width', 'height'],\n    ] as const\n  ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n  const gridFunc: SnapFunction & {\n    grid: typeof grid\n    coordFields: typeof coordFields\n  } = (x, y) => {\n    const {\n      range,\n      limits = {\n        left: -Infinity,\n        right: Infinity,\n        top: -Infinity,\n        bottom: Infinity,\n      },\n      offset = { x: 0, y: 0 },\n    } = grid\n\n    const result: SnapTarget & {\n      grid: typeof grid\n    } = { range, grid, x: null as number, y: null as number }\n\n    for (const [xField, yField] of coordFields) {\n      const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n      const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n      result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n      result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n    }\n\n    return result\n  }\n\n  gridFunc.grid = grid\n  gridFunc.coordFields = coordFields\n\n  return gridFunc\n}\n", "import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n  export interface InteractStatic {\n    snappers: typeof allSnappers\n    createSnapGrid: typeof allSnappers.grid\n  }\n}\n\nconst snappersPlugin: Plugin = {\n  id: 'snappers',\n  install(scope) {\n    const { interactStatic: interact } = scope\n\n    interact.snappers = extend(interact.snappers || {}, allSnappers)\n    interact.createSnapGrid = interact.snappers.grid\n  },\n}\n\nexport default snappersPlugin\n", "/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This modifier forces elements to be resized with a specified dx/dy ratio.\n *\n * ```js\n * interact(target).resizable({\n *   modifiers: [\n *     interact.modifiers.snapSize({\n *       targets: [ interact.snappers.grid({ x: 20, y: 20 }) ],\n *     }),\n *     interact.aspectRatio({ ratio: 'preserve' }),\n *   ],\n * });\n * ```\n */\n\nimport type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport { makeModifier } from './base'\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n  ratio?: number | 'preserve'\n  equalDelta?: boolean\n  modifiers?: Modifier[]\n  enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\n  AspectRatioOptions,\n  {\n    startCoords: Point\n    startRect: Rect\n    linkedEdges: EdgeOptions\n    ratio: number\n    equalDelta: boolean\n    xIsPrimaryAxis: boolean\n    edgeSign: {\n      x: number\n      y: number\n    }\n    subModification: Modification\n  }\n>\n\nconst aspectRatio: ModifierModule<AspectRatioOptions, AspectRatioState> = {\n  start(arg) {\n    const { state, rect, edges, pageCoords: coords } = arg\n    let { ratio, enabled } = state.options\n    const { equalDelta, modifiers } = state.options\n\n    if (ratio === 'preserve') {\n      ratio = rect.width / rect.height\n    }\n\n    state.startCoords = extend({}, coords)\n    state.startRect = extend({}, rect)\n    state.ratio = ratio\n    state.equalDelta = equalDelta\n\n    const linkedEdges = (state.linkedEdges = {\n      top: edges.top || (edges.left && !edges.bottom),\n      left: edges.left || (edges.top && !edges.right),\n      bottom: edges.bottom || (edges.right && !edges.top),\n      right: edges.right || (edges.bottom && !edges.left),\n    })\n\n    state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n    if (state.equalDelta) {\n      const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n      state.edgeSign = {\n        x: sign,\n        y: sign,\n      }\n    } else {\n      state.edgeSign = {\n        x: linkedEdges.left ? -1 : 1,\n        y: linkedEdges.top ? -1 : 1,\n      }\n    }\n\n    if (enabled !== false) {\n      extend(edges, linkedEdges)\n    }\n\n    if (!modifiers?.length) return\n\n    const subModification = new Modification(arg.interaction)\n\n    subModification.copyFrom(arg.interaction.modification)\n    subModification.prepareStates(modifiers)\n\n    state.subModification = subModification\n    subModification.startAll({ ...arg })\n  },\n\n  set(arg) {\n    const { state, rect, coords } = arg\n    const { linkedEdges } = state\n    const initialCoords = extend({}, coords)\n    const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n    extend(arg.edges, linkedEdges)\n    aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n    if (!state.subModification) {\n      return null\n    }\n\n    const correctedRect = extend({}, rect)\n\n    addEdges(linkedEdges, correctedRect, {\n      x: coords.x - initialCoords.x,\n      y: coords.y - initialCoords.y,\n    })\n\n    const result = state.subModification.setAll({\n      ...arg,\n      rect: correctedRect,\n      edges: linkedEdges,\n      pageCoords: coords,\n      prevCoords: coords,\n      prevRect: correctedRect,\n    })\n\n    const { delta } = result\n\n    if (result.changed) {\n      const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y)\n\n      // do aspect modification again with critical edge axis as primary\n      aspectMethod(state, xIsCriticalAxis, result.coords, result.rect)\n      extend(coords, result.coords)\n    }\n\n    return result.eventProps\n  },\n\n  defaults: {\n    ratio: 'preserve',\n    equalDelta: false,\n    modifiers: [],\n    enabled: false,\n  },\n}\n\nfunction setEqualDelta({ startCoords, edgeSign }: AspectRatioState, xIsPrimaryAxis: boolean, coords: Point) {\n  if (xIsPrimaryAxis) {\n    coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign.y\n  } else {\n    coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n  }\n}\n\nfunction setRatio(\n  { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n  xIsPrimaryAxis: boolean,\n  coords: Point,\n  rect: Rect,\n) {\n  if (xIsPrimaryAxis) {\n    const newHeight = rect.width / ratio\n\n    coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n  } else {\n    const newWidth = rect.height * ratio\n\n    coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n  }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n", "import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction<any, any, 'noop'>\n\nnoop._defaults = {}\n\nexport default noop\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n  // where to drag over\n  restriction: RectResolvable<[number, number, Interaction]>\n  // what part of self is allowed to drag over\n  elementRect: Rect\n  offset: Rect\n  // restrict just before the end drag\n  endOnly: boolean\n  enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\n  RestrictOptions,\n  {\n    offset: Rect\n  }\n>\n\nfunction start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg<RestrictState>) {\n  const { options } = state\n  const { elementRect } = options\n  const offset: Rect = extend(\n    {\n      left: 0,\n      top: 0,\n      right: 0,\n      bottom: 0,\n    },\n    options.offset || {},\n  )\n\n  if (rect && elementRect) {\n    const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n    if (restriction) {\n      const widthDiff = restriction.right - restriction.left - rect.width\n      const heightDiff = restriction.bottom - restriction.top - rect.height\n\n      if (widthDiff < 0) {\n        offset.left += widthDiff\n        offset.right += widthDiff\n      }\n      if (heightDiff < 0) {\n        offset.top += heightDiff\n        offset.bottom += heightDiff\n      }\n    }\n\n    offset.left += startOffset.left - rect.width * elementRect.left\n    offset.top += startOffset.top - rect.height * elementRect.top\n\n    offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n    offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n  }\n\n  state.offset = offset\n}\n\nfunction set({ coords, interaction, state }: ModifierArg<RestrictState>) {\n  const { options, offset } = state\n\n  const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n  if (!restriction) return\n\n  const rect = rectUtils.xywhToTlbr(restriction)\n\n  coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n  coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect(\n  value: RectResolvable<[number, number, Interaction]>,\n  interaction: Interaction,\n  coords?: Point,\n) {\n  if (is.func(value)) {\n    return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n      coords.x,\n      coords.y,\n      interaction,\n    ])\n  } else {\n    return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n  }\n}\n\nconst defaults: RestrictOptions = {\n  restriction: null,\n  elementRect: null,\n  offset: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst restrict: ModifierModule<RestrictOptions, RestrictState> = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n", "// This modifier adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n//   edges: { top: true, left: true },\n//   restrictEdges: {\n//     inner: { top: 200, left: 200, right: 400, bottom: 400 },\n//     outer: { top:   0, left:   0, right: 600, bottom: 600 },\n//   },\n// })\n\nimport type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n  inner: RestrictOptions['restriction']\n  outer: RestrictOptions['restriction']\n  offset?: RestrictOptions['offset']\n  endOnly: boolean\n  enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\n  RestrictEdgesOptions,\n  {\n    inner: Rect\n    outer: Rect\n    offset: RestrictEdgesOptions['offset']\n  }\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start({ interaction, startOffset, state }: ModifierArg<RestrictEdgesState>) {\n  const { options } = state\n  let offset: Point\n\n  if (options) {\n    const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n    offset = rectUtils.rectToXY(offsetRect)\n  }\n\n  offset = offset || { x: 0, y: 0 }\n\n  state.offset = {\n    top: offset.y + startOffset.top,\n    left: offset.x + startOffset.left,\n    bottom: offset.y - startOffset.bottom,\n    right: offset.x - startOffset.right,\n  }\n}\n\nfunction set({ coords, edges, interaction, state }: ModifierArg<RestrictEdgesState>) {\n  const { offset, options } = state\n\n  if (!edges) {\n    return\n  }\n\n  const page = extend({}, coords)\n  const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n  const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n  fixRect(inner, noInner)\n  fixRect(outer, noOuter)\n\n  if (edges.top) {\n    coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n  } else if (edges.bottom) {\n    coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n  }\n  if (edges.left) {\n    coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n  } else if (edges.right) {\n    coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n  }\n}\n\nfunction fixRect(rect: Rect, defaults: Rect) {\n  for (const edge of ['top', 'left', 'bottom', 'right']) {\n    if (!(edge in rect)) {\n      rect[edge] = defaults[edge]\n    }\n  }\n\n  return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n  inner: null,\n  outer: null,\n  offset: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst restrictEdges = {\n  noInner,\n  noOuter,\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n", "import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n  {\n    get elementRect() {\n      return { top: 0, left: 0, bottom: 1, right: 1 }\n    },\n    set elementRect(_) {},\n  },\n  restrict.defaults,\n)\n\nconst restrictRect = {\n  start: restrict.start,\n  set: restrict.set,\n  defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n", "import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n  min?: Size | Point | RestrictOptions['restriction']\n  max?: Size | Point | RestrictOptions['restriction']\n  endOnly: boolean\n  enabled?: boolean\n}\n\nfunction start(arg: ModifierArg<RestrictEdgesState>) {\n  return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\n  ModifierState<\n    RestrictSizeOptions & { inner: Rect; outer: Rect },\n    {\n      min: Rect\n      max: Rect\n    }\n  >\n\nfunction set(arg: ModifierArg<RestrictSizeState>) {\n  const { interaction, state, rect, edges } = arg\n  const { options } = state\n\n  if (!edges) {\n    return\n  }\n\n  const minSize =\n    rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n  const maxSize =\n    rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n  state.options = {\n    endOnly: options.endOnly,\n    inner: extend({}, restrictEdges.noInner),\n    outer: extend({}, restrictEdges.noOuter),\n  }\n\n  if (edges.top) {\n    state.options.inner.top = rect.bottom - minSize.height\n    state.options.outer.top = rect.bottom - maxSize.height\n  } else if (edges.bottom) {\n    state.options.inner.bottom = rect.top + minSize.height\n    state.options.outer.bottom = rect.top + maxSize.height\n  }\n  if (edges.left) {\n    state.options.inner.left = rect.right - minSize.width\n    state.options.outer.left = rect.right - maxSize.width\n  } else if (edges.right) {\n    state.options.inner.right = rect.left + minSize.width\n    state.options.outer.right = rect.left + maxSize.width\n  }\n\n  restrictEdges.set(arg)\n\n  state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n  min: null,\n  max: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst restrictSize = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n", "import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { resolveRectLike, rectToXY } from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nexport interface Offset {\n  x: number\n  y: number\n  index: number\n  relativePoint?: Point | null\n}\n\nexport interface SnapPosition {\n  x?: number\n  y?: number\n  range?: number\n  offset?: Offset\n  [index: string]: any\n}\n\nexport type SnapFunction = (\n  x: number,\n  y: number,\n  interaction: InteractionProxy<ActionName>,\n  offset: Offset,\n  index: number,\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n  targets?: SnapTarget[]\n  // target range\n  range?: number\n  // self points for snapping. [0,0] = top left, [1,1] = bottom right\n  relativePoints?: Point[]\n  // startCoords = offset snapping from drag start page position\n  offset?: Point | RectResolvable<[Interaction]> | 'startCoords'\n  offsetWithOrigin?: boolean\n  origin?: RectResolvable<[Element]> | Point\n  endOnly?: boolean\n  enabled?: boolean\n}\n\nexport type SnapState = ModifierState<\n  SnapOptions,\n  {\n    offsets?: Offset[]\n    closest?: any\n    targetFields?: string[][]\n  }\n>\n\nfunction start(arg: ModifierArg<SnapState>) {\n  const { interaction, interactable, element, rect, state, startOffset } = arg\n  const { options } = state\n  const origin = options.offsetWithOrigin ? getOrigin(arg) : { x: 0, y: 0 }\n\n  let snapOffset: Point\n\n  if (options.offset === 'startCoords') {\n    snapOffset = {\n      x: interaction.coords.start.page.x,\n      y: interaction.coords.start.page.y,\n    }\n  } else {\n    const offsetRect = resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n    snapOffset = rectToXY(offsetRect) || { x: 0, y: 0 }\n    snapOffset.x += origin.x\n    snapOffset.y += origin.y\n  }\n\n  const { relativePoints } = options\n\n  state.offsets =\n    rect && relativePoints && relativePoints.length\n      ? relativePoints.map((relativePoint, index) => ({\n          index,\n          relativePoint,\n          x: startOffset.left - rect.width * relativePoint.x + snapOffset.x,\n          y: startOffset.top - rect.height * relativePoint.y + snapOffset.y,\n        }))\n      : [\n          {\n            index: 0,\n            relativePoint: null,\n            x: snapOffset.x,\n            y: snapOffset.y,\n          },\n        ]\n}\n\nfunction set(arg: ModifierArg<SnapState>) {\n  const { interaction, coords, state } = arg\n  const { options, offsets } = state\n\n  const origin = getOriginXY(interaction.interactable!, interaction.element!, interaction.prepared.name)\n  const page = extend({}, coords)\n  const targets: SnapPosition[] = []\n\n  if (!options.offsetWithOrigin) {\n    page.x -= origin.x\n    page.y -= origin.y\n  }\n\n  for (const offset of offsets!) {\n    const relativeX = page.x - offset.x\n    const relativeY = page.y - offset.y\n\n    for (let index = 0, len = options.targets!.length; index < len; index++) {\n      const snapTarget = options.targets![index]\n      let target: SnapPosition\n\n      if (is.func(snapTarget)) {\n        target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index)\n      } else {\n        target = snapTarget\n      }\n\n      if (!target) {\n        continue\n      }\n\n      targets.push({\n        x: (is.number(target.x) ? target.x : relativeX) + offset.x,\n        y: (is.number(target.y) ? target.y : relativeY) + offset.y,\n\n        range: is.number(target.range) ? target.range : options.range,\n        source: snapTarget,\n        index,\n        offset,\n      })\n    }\n  }\n\n  const closest = {\n    target: null,\n    inRange: false,\n    distance: 0,\n    range: 0,\n    delta: { x: 0, y: 0 },\n  }\n\n  for (const target of targets) {\n    const range = target.range\n    const dx = target.x - page.x\n    const dy = target.y - page.y\n    const distance = hypot(dx, dy)\n    let inRange = distance <= range\n\n    // Infinite targets count as being out of range\n    // compared to non infinite ones that are in range\n    if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n      inRange = false\n    }\n\n    if (\n      !closest.target ||\n      (inRange\n        ? // is the closest target in range?\n          closest.inRange && range !== Infinity\n          ? // the pointer is relatively deeper in this target\n            distance / range < closest.distance / closest.range\n          : // this target has Infinite range and the closest doesn't\n            (range === Infinity && closest.range !== Infinity) ||\n            // OR this target is closer that the previous closest\n            distance < closest.distance\n        : // The other is not in range and the pointer is closer to this target\n          !closest.inRange && distance < closest.distance)\n    ) {\n      closest.target = target\n      closest.distance = distance\n      closest.range = range\n      closest.inRange = inRange\n      closest.delta.x = dx\n      closest.delta.y = dy\n    }\n  }\n\n  if (closest.inRange) {\n    coords.x = closest.target.x\n    coords.y = closest.target.y\n  }\n\n  state.closest = closest\n  return closest\n}\n\nfunction getOrigin(arg: Partial<ModifierArg<SnapState>>) {\n  const { element } = arg.interaction\n  const optionsOrigin = rectToXY(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n  const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\n\n  return origin\n}\n\nconst defaults: SnapOptions = {\n  range: Infinity,\n  targets: null,\n  offset: null,\n  offsetWithOrigin: true,\n  origin: null,\n  relativePoints: null,\n  endOnly: false,\n  enabled: false,\n}\nconst snap = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(snap, 'snap')\nexport { snap }\n", "// This modifier allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick<SnapOptions, 'targets' | 'offset' | 'endOnly' | 'range' | 'enabled'>\n\nfunction start(arg: ModifierArg<SnapState>) {\n  const { state, edges } = arg\n  const { options } = state\n\n  if (!edges) {\n    return null\n  }\n\n  arg.state = {\n    options: {\n      targets: null,\n      relativePoints: [\n        {\n          x: edges.left ? 0 : 1,\n          y: edges.top ? 0 : 1,\n        },\n      ],\n      offset: options.offset || 'self',\n      origin: { x: 0, y: 0 },\n      range: options.range,\n    },\n  }\n\n  state.targetFields = state.targetFields || [\n    ['width', 'height'],\n    ['x', 'y'],\n  ]\n\n  snap.start(arg)\n  state.offsets = arg.state.offsets\n\n  arg.state = state\n}\n\nfunction set(arg) {\n  const { interaction, state, coords } = arg\n  const { options, offsets } = state\n  const relative = {\n    x: coords.x - offsets[0].x,\n    y: coords.y - offsets[0].y,\n  }\n\n  state.options = extend({}, options)\n  state.options.targets = []\n\n  for (const snapTarget of options.targets || []) {\n    let target\n\n    if (is.func(snapTarget)) {\n      target = snapTarget(relative.x, relative.y, interaction)\n    } else {\n      target = snapTarget\n    }\n\n    if (!target) {\n      continue\n    }\n\n    for (const [xField, yField] of state.targetFields) {\n      if (xField in target || yField in target) {\n        target.x = target[xField]\n        target.y = target[yField]\n\n        break\n      }\n    }\n\n    state.options.targets.push(target)\n  }\n\n  const returnValue = snap.set(arg)\n\n  state.options = options\n\n  return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n  range: Infinity,\n  targets: null,\n  offset: null,\n  endOnly: false,\n  enabled: false,\n}\n\nconst snapSize = {\n  start,\n  set,\n  defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n", "/**\n * @module modifiers/snapEdges\n *\n * @description\n * This modifier allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n *   snapEdges: {\n *     targets: [interact.snappers.grid({ x: 100, y: 50 })],\n *   },\n * })\n *\n * interact(target).resizable({\n *   snapEdges: {\n *     targets: [\n *       interact.snappers.grid({\n *        top: 50,\n *        left: 50,\n *        bottom: 100,\n *        right: 100,\n *       }),\n *     ],\n *   },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick<SnapOptions, 'targets' | 'range' | 'offset' | 'endOnly' | 'enabled'>\n\nfunction start(arg: ModifierArg<SnapState>) {\n  const { edges } = arg\n\n  if (!edges) {\n    return null\n  }\n\n  arg.state.targetFields = arg.state.targetFields || [\n    [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n  ]\n\n  return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule<SnapEdgesOptions, SnapState, ReturnType<typeof snapSize.set>> = {\n  start,\n  set: snapSize.set,\n  defaults: extend(clone(snapSize.defaults), {\n    targets: undefined,\n    range: undefined,\n    offset: { x: 0, y: 0 },\n  } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n", "/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n  aspectRatio,\n  restrictEdges,\n  restrict,\n  restrictRect,\n  restrictSize,\n  snapEdges,\n  snap,\n  snapSize,\n\n  spring,\n  avoid,\n  transform,\n  rubberband,\n}\n", "import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './all'\nimport './base'\n\nimport all from './all'\nimport base from './base'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n  export interface InteractStatic {\n    modifiers: typeof all\n  }\n}\n\nconst modifiers: Plugin = {\n  id: 'modifiers',\n  install(scope) {\n    const { interactStatic: interact } = scope\n\n    scope.usePlugin(base)\n    scope.usePlugin(snappers)\n\n    interact.modifiers = all\n\n    // for backwrads compatibility\n    for (const type in all) {\n      const { _defaults, _methods } = all[type as keyof typeof all]\n\n      ;(_defaults as any)._methods = _methods\n      ;(scope.defaults.perAction as any)[type] = _defaults\n    }\n  },\n}\n\nexport default modifiers\n", "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport class PointerEvent<T extends string = any> extends BaseEvent<never> {\n  declare type: T\n  declare originalEvent: PointerEventType\n  declare pointerId: number\n  declare pointerType: string\n  declare double: boolean\n  declare pageX: number\n  declare pageY: number\n  declare clientX: number\n  declare clientY: number\n  declare dt: number\n  declare eventable: any;\n  [key: string]: any\n\n  constructor(\n    type: T,\n    pointer: PointerType | PointerEvent<any>,\n    event: PointerEventType,\n    eventTarget: Node,\n    interaction: Interaction<never>,\n    timeStamp: number,\n  ) {\n    super(interaction)\n    pointerUtils.pointerExtend(this, event)\n\n    if (event !== pointer) {\n      pointerUtils.pointerExtend(this, pointer)\n    }\n\n    this.timeStamp = timeStamp\n    this.originalEvent = event\n    this.type = type\n    this.pointerId = pointerUtils.getPointerId(pointer)\n    this.pointerType = pointerUtils.getPointerType(pointer)\n    this.target = eventTarget\n    this.currentTarget = null\n\n    if (type === 'tap') {\n      const pointerIndex = interaction.getPointerIndex(pointer)\n      this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n      const interval = this.timeStamp - interaction.tapTime\n\n      this.double =\n        !!interaction.prevTap &&\n        interaction.prevTap.type !== 'doubletap' &&\n        interaction.prevTap.target === this.target &&\n        interval < 500\n    } else if (type === 'doubletap') {\n      this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n      this.double = true\n    }\n  }\n\n  _subtractOrigin({ x: originX, y: originY }: Point) {\n    this.pageX -= originX\n    this.pageY -= originY\n    this.clientX -= originX\n    this.clientY -= originY\n\n    return this\n  }\n\n  _addOrigin({ x: originX, y: originY }: Point) {\n    this.pageX += originX\n    this.pageY += originY\n    this.clientX += originX\n    this.clientY += originY\n\n    return this\n  }\n\n  /**\n   * Prevent the default behaviour of the original Event\n   */\n  preventDefault() {\n    this.originalEvent.preventDefault()\n  }\n}\n", "import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n  node: Node\n  eventable: Eventable\n  props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n  enabled?: undefined // not used\n  holdDuration?: number\n  ignoreFrom?: any\n  allowFrom?: any\n  origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface Scope {\n    pointerEvents: typeof pointerEvents\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    prevTap?: PointerEvent<string>\n    tapTime?: number\n  }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n  interface PointerInfo {\n    hold?: {\n      duration: number\n      timeout: any\n    }\n  }\n}\n\ndeclare module '@interactjs/core/options' {\n  interface ActionDefaults {\n    pointerEvents: Options\n  }\n}\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'pointerEvents:new': { pointerEvent: PointerEvent<any> }\n    'pointerEvents:fired': {\n      interaction: Interaction<null>\n      pointer: PointerType | PointerEvent<any>\n      event: PointerEventType | PointerEvent<any>\n      eventTarget: Node\n      pointerEvent: PointerEvent<any>\n      targets?: EventTargetList\n      type: string\n    }\n    'pointerEvents:collect-targets': {\n      interaction: Interaction<any>\n      pointer: PointerType | PointerEvent<any>\n      event: PointerEventType | PointerEvent<any>\n      eventTarget: Node\n      targets?: EventTargetList\n      type: string\n      path: Node[]\n      node: null\n    }\n  }\n}\n\nconst defaults: PointerEventOptions = {\n  holdDuration: 600,\n  ignoreFrom: null,\n  allowFrom: null,\n  origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n  id: 'pointer-events/base',\n  before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n  install,\n  listeners: {\n    'interactions:new': addInteractionProps,\n    'interactions:update-pointer': addHoldInfo,\n    'interactions:move': moveAndClearHold,\n    'interactions:down': (arg, scope) => {\n      downAndStartHold(arg, scope)\n      fire(arg, scope)\n    },\n    'interactions:up': (arg, scope) => {\n      clearHold(arg)\n      fire(arg, scope)\n      tapAfterUp(arg, scope)\n    },\n    'interactions:cancel': (arg, scope) => {\n      clearHold(arg)\n      fire(arg, scope)\n    },\n  },\n  PointerEvent,\n  fire,\n  collectEventTargets,\n  defaults,\n  types: {\n    down: true,\n    move: true,\n    up: true,\n    cancel: true,\n    tap: true,\n    doubletap: true,\n    hold: true,\n  } as { [type: string]: true },\n}\n\nfunction fire<T extends string>(\n  arg: {\n    pointer: PointerType | PointerEvent<any>\n    event: PointerEventType | PointerEvent<any>\n    eventTarget: Node\n    interaction: Interaction<never>\n    type: T\n    targets?: EventTargetList\n  },\n  scope: Scope,\n) {\n  const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n  const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n  scope.fire('pointerEvents:new', { pointerEvent })\n\n  const signalArg = {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    targets,\n    type,\n    pointerEvent,\n  }\n\n  for (let i = 0; i < targets.length; i++) {\n    const target = targets[i]\n\n    for (const prop in target.props || {}) {\n      ;(pointerEvent as any)[prop] = target.props[prop]\n    }\n\n    const origin = getOriginXY(target.eventable, target.node)\n\n    pointerEvent._subtractOrigin(origin)\n    pointerEvent.eventable = target.eventable\n    pointerEvent.currentTarget = target.node\n\n    target.eventable.fire(pointerEvent)\n\n    pointerEvent._addOrigin(origin)\n\n    if (\n      pointerEvent.immediatePropagationStopped ||\n      (pointerEvent.propagationStopped &&\n        i + 1 < targets.length &&\n        targets[i + 1].node !== pointerEvent.currentTarget)\n    ) {\n      break\n    }\n  }\n\n  scope.fire('pointerEvents:fired', signalArg)\n\n  if (type === 'tap') {\n    // if pointerEvent should make a double tap, create and fire a doubletap\n    // PointerEvent and use that as the prevTap\n    const prevTap = pointerEvent.double\n      ? fire(\n          {\n            interaction,\n            pointer,\n            event,\n            eventTarget,\n            type: 'doubletap',\n          },\n          scope,\n        )\n      : pointerEvent\n\n    interaction.prevTap = prevTap\n    interaction.tapTime = prevTap.timeStamp\n  }\n\n  return pointerEvent\n}\n\nfunction collectEventTargets<T extends string>(\n  {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    type,\n  }: {\n    interaction: Interaction<any>\n    pointer: PointerType | PointerEvent<any>\n    event: PointerEventType | PointerEvent<any>\n    eventTarget: Node\n    type: T\n  },\n  scope: Scope,\n) {\n  const pointerIndex = interaction.getPointerIndex(pointer)\n  const pointerInfo = interaction.pointers[pointerIndex]\n\n  // do not fire a tap event if the pointer was moved before being lifted\n  if (\n    type === 'tap' &&\n    (interaction.pointerWasMoved ||\n      // or if the pointerup target is different to the pointerdown target\n      !(pointerInfo && pointerInfo.downTarget === eventTarget))\n  ) {\n    return []\n  }\n\n  const path = domUtils.getPath(eventTarget as Element | Document)\n  const signalArg = {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    type,\n    path,\n    targets: [] as EventTargetList,\n    node: null,\n  }\n\n  for (const node of path) {\n    signalArg.node = node\n\n    scope.fire('pointerEvents:collect-targets', signalArg)\n  }\n\n  if (type === 'hold') {\n    signalArg.targets = signalArg.targets.filter(\n      (target) =>\n        target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold?.duration,\n    )\n  }\n\n  return signalArg.targets\n}\n\nfunction addInteractionProps({ interaction }) {\n  interaction.prevTap = null // the most recent tap event on this interaction\n  interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n  if (!down && pointerInfo.hold) {\n    return\n  }\n\n  pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold({ interaction, pointerIndex }) {\n  const hold = interaction.pointers[pointerIndex].hold\n\n  if (hold && hold.timeout) {\n    clearTimeout(hold.timeout)\n    hold.timeout = null\n  }\n}\n\nfunction moveAndClearHold(arg: SignalArgs['interactions:move'], scope: Scope) {\n  const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n  if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n    if (interaction.pointerIsDown) {\n      clearHold(arg)\n    }\n\n    fire(\n      {\n        interaction,\n        pointer,\n        event,\n        eventTarget: eventTarget as Element,\n        type: 'move',\n      },\n      scope,\n    )\n  }\n}\n\nfunction downAndStartHold(\n  { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n  scope: Scope,\n) {\n  const timer = interaction.pointers[pointerIndex].hold!\n  const path = domUtils.getPath(eventTarget as Element | Document)\n  const signalArg = {\n    interaction,\n    pointer,\n    event,\n    eventTarget,\n    type: 'hold',\n    targets: [] as EventTargetList,\n    path,\n    node: null,\n  }\n\n  for (const node of path) {\n    signalArg.node = node\n\n    scope.fire('pointerEvents:collect-targets', signalArg)\n  }\n\n  if (!signalArg.targets.length) return\n\n  let minDuration = Infinity\n\n  for (const target of signalArg.targets) {\n    const holdDuration = target.eventable.options.holdDuration\n\n    if (holdDuration < minDuration) {\n      minDuration = holdDuration\n    }\n  }\n\n  timer.duration = minDuration\n  timer.timeout = setTimeout(() => {\n    fire(\n      {\n        interaction,\n        eventTarget,\n        pointer,\n        event,\n        type: 'hold',\n      },\n      scope,\n    )\n  }, minDuration)\n}\n\nfunction tapAfterUp(\n  { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n  scope: Scope,\n) {\n  if (!interaction.pointerWasMoved) {\n    fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n  }\n}\n\nfunction install(scope: Scope) {\n  scope.pointerEvents = pointerEvents\n  scope.defaults.actions.pointerEvents = pointerEvents.defaults\n  extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n", "import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable import/no-duplicates */\nimport { type PointerEvent } from './PointerEvent'\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    holdIntervalHandle?: any\n  }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n  interface PointerEvent<T extends string = any> {\n    count?: number\n  }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n  interface PointerEventOptions {\n    holdRepeatInterval?: number\n  }\n}\n\nfunction install(scope: Scope) {\n  scope.usePlugin(basePlugin)\n\n  const { pointerEvents } = scope\n\n  // don't repeat by default\n  pointerEvents.defaults.holdRepeatInterval = 0\n  pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew({ pointerEvent }: { pointerEvent: PointerEvent<any> }) {\n  if (pointerEvent.type !== 'hold') return\n\n  pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired(\n  { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n  scope: Scope,\n) {\n  if (pointerEvent.type !== 'hold' || !targets.length) return\n\n  // get the repeat interval from the first eventable\n  const interval = targets[0].eventable.options.holdRepeatInterval\n\n  // don't repeat if the interval is 0 or less\n  if (interval <= 0) return\n\n  // set a timeout to fire the holdrepeat event\n  interaction.holdIntervalHandle = setTimeout(() => {\n    scope.pointerEvents.fire(\n      {\n        interaction,\n        eventTarget,\n        type: 'hold',\n        pointer: pointerEvent,\n        event: pointerEvent,\n      },\n      scope,\n    )\n  }, interval)\n}\n\nfunction endHoldRepeat({ interaction }: { interaction: Interaction }) {\n  // set the interaction's holdStopTime property\n  // to stop further holdRepeat events\n  if (interaction.holdIntervalHandle) {\n    clearInterval(interaction.holdIntervalHandle)\n    interaction.holdIntervalHandle = null\n  }\n}\n\nconst holdRepeat: Plugin = {\n  id: 'pointer-events/holdRepeat',\n  install,\n  listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n    (acc, enderTypes) => {\n      ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n      return acc\n    },\n    {\n      'pointerEvents:new': onNew,\n      'pointerEvents:fired': onFired,\n    } as ListenerMap,\n  ),\n}\n\nexport default holdRepeat\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\n\nimport type { PointerEventOptions } from '@interactjs/pointer-events/base'\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    pointerEvents(options: Partial<PointerEventOptions>): this\n    /** @internal */\n    __backCompatOption: (optionName: string, newValue: any) => any\n  }\n}\n\nfunction install(scope: Scope) {\n  const { Interactable } = scope\n\n  Interactable.prototype.pointerEvents = function (\n    this: Interactable,\n    options: Partial<PointerEventOptions>,\n  ) {\n    extend(this.events.options, options)\n\n    return this\n  }\n\n  const __backCompatOption = Interactable.prototype._backCompatOption\n\n  Interactable.prototype._backCompatOption = function (optionName, newValue) {\n    const ret = __backCompatOption.call(this, optionName, newValue)\n\n    if (ret === this) {\n      this.events.options[optionName] = newValue\n    }\n\n    return ret\n  }\n}\n\nconst plugin: Plugin = {\n  id: 'pointer-events/interactableTargets',\n  install,\n  listeners: {\n    'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n      scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n        const eventable = interactable.events\n        const options = eventable.options\n\n        if (\n          eventable.types[type] &&\n          eventable.types[type].length &&\n          interactable.testIgnoreAllow(options, node, eventTarget)\n        ) {\n          targets.push({\n            node,\n            eventable,\n            props: { interactable },\n          })\n        }\n      })\n    },\n\n    'interactable:new': ({ interactable }) => {\n      interactable.events.getRect = function (element: Element) {\n        return interactable.getRect(element)\n      }\n    },\n\n    'interactable:set': ({ interactable, options }, scope) => {\n      extend(interactable.events.options, scope.pointerEvents.defaults)\n      extend(interactable.events.options, options.pointerEvents || {})\n    },\n  },\n}\n\nexport default plugin\n", "import type { Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './holdRepeat'\nimport './interactableTargets'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n/* eslint-enable import/no-duplicates */\n\nconst plugin: Plugin = {\n  id: 'pointer-events',\n  install(scope) {\n    scope.usePlugin(pointerEvents)\n    scope.usePlugin(holdRepeat)\n    scope.usePlugin(interactableTargets)\n  },\n}\n\nexport default plugin\n", "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n  interface SignalArgs {\n    'interactions:before-action-reflow': Omit<DoAnyPhaseArg, 'iEvent'>\n    'interactions:action-reflow': DoAnyPhaseArg\n    'interactions:after-action-reflow': DoAnyPhaseArg\n  }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n  interface Interactable {\n    /**\n     * ```js\n     * const interactable = interact(target)\n     * const drag = { name: drag, axis: 'x' }\n     * const resize = { name: resize, edges: { left: true, bottom: true }\n     *\n     * interactable.reflow(drag)\n     * interactable.reflow(resize)\n     * ```\n     *\n     * Start an action sequence to re-apply modifiers, check drops, etc.\n     *\n     * @param { Object } action The action to begin\n     * @param { string } action.name The name of the action\n     * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n     */\n    reflow<T extends ActionName>(action: ActionProps<T>): ReturnType<typeof doReflow>\n  }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n  interface Interaction {\n    _reflowPromise: Promise<void>\n    _reflowResolve: (...args: unknown[]) => void\n  }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n  interface PhaseMap {\n    reflow?: true\n  }\n}\n\nfunction install(scope: Scope) {\n  const { Interactable } = scope\n\n  scope.actions.phases.reflow = true\n\n  Interactable.prototype.reflow = function (action: ActionProps) {\n    return doReflow(this, action, scope)\n  }\n}\n\nfunction doReflow<T extends ActionName>(\n  interactable: Interactable,\n  action: ActionProps<T>,\n  scope: Scope,\n): Promise<Interactable> {\n  const elements = interactable.getAllElements()\n\n  // tslint:disable-next-line variable-name\n  const Promise = (scope.window as any).Promise\n  const promises: Array<Promise<null>> | null = Promise ? [] : null\n\n  for (const element of elements) {\n    const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n    if (!rect) {\n      break\n    }\n\n    const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n      return (\n        interaction.interacting() &&\n        interaction.interactable === interactable &&\n        interaction.element === element &&\n        interaction.prepared.name === action.name\n      )\n    })\n    let reflowPromise: Promise<null>\n\n    if (runningInteraction) {\n      runningInteraction.move()\n\n      if (promises) {\n        reflowPromise =\n          runningInteraction._reflowPromise ||\n          new Promise((resolve: any) => {\n            runningInteraction._reflowResolve = resolve\n          })\n      }\n    } else {\n      const xywh = tlbrToXywh(rect)\n      const coords = {\n        page: { x: xywh.x, y: xywh.y },\n        client: { x: xywh.x, y: xywh.y },\n        timeStamp: scope.now(),\n      }\n\n      const event = pointerUtils.coordsToEvent(coords)\n      reflowPromise = startReflow<T>(scope, interactable, element, action, event)\n    }\n\n    if (promises) {\n      promises.push(reflowPromise)\n    }\n  }\n\n  return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow<T extends ActionName>(\n  scope: Scope,\n  interactable: Interactable,\n  element: Element,\n  action: ActionProps<T>,\n  event: any,\n) {\n  const interaction = scope.interactions.new({ pointerType: 'reflow' })\n  const signalArg = {\n    interaction,\n    event,\n    pointer: event,\n    eventTarget: element,\n    phase: 'reflow',\n  } as const\n\n  interaction.interactable = interactable\n  interaction.element = element\n  interaction.prevEvent = event\n  interaction.updatePointer(event, event, element, true)\n  pointerUtils.setZeroCoords(interaction.coords.delta)\n\n  copyAction(interaction.prepared, action)\n  interaction._doPhase(signalArg)\n\n  const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n  const reflowPromise = Promise\n    ? new Promise<undefined>((resolve) => {\n        interaction._reflowResolve = resolve\n      })\n    : undefined\n\n  interaction._reflowPromise = reflowPromise\n  interaction.start(action, interactable, element)\n\n  if (interaction._interacting) {\n    interaction.move(signalArg)\n    interaction.end(event)\n  } else {\n    interaction.stop()\n    interaction._reflowResolve()\n  }\n\n  interaction.removePointer(event, event)\n\n  return reflowPromise\n}\n\nconst reflow: Plugin = {\n  id: 'reflow',\n  install,\n  listeners: {\n    // remove completed reflow interactions\n    'interactions:stop': ({ interaction }, scope) => {\n      if (interaction.pointerType === 'reflow') {\n        if (interaction._reflowResolve) {\n          interaction._reflowResolve()\n        }\n\n        arr.remove(scope.interactions.list, interaction)\n      }\n    },\n  },\n}\n\nexport default reflow\n", "// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n  try {\n    module.exports = interact\n  } catch {}\n}\n\n;(interact as any).default = interact\n", "/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/actions/plugin'\nimport '@interactjs/auto-scroll/plugin'\nimport '@interactjs/auto-start/plugin'\nimport '@interactjs/core/interactablePreventDefault'\nimport '@interactjs/dev-tools/plugin'\nimport '@interactjs/inertia/plugin'\nimport '@interactjs/interact'\nimport '@interactjs/modifiers/plugin'\nimport '@interactjs/offset/plugin'\nimport '@interactjs/pointer-events/plugin'\nimport '@interactjs/reflow/plugin'\n\nimport actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n/* eslint-enable import/no-duplicates */\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n  interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n", "export let delay = (function () {\n\tlet timer = 0;\n\n\treturn function (callback, ms) {\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(callback, ms);\n\t};\n})();", "export function serializeFormData(data, model = 'bank_vypis', name = \"assigned\") {\n\tlet formData = {};\n\n\tObject.keys(data).forEach(key => {\n\t\tconst parts = key.match(/\\b\\w+/g);\n\n\t\tif (parts.length !== 4) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst modelName = parts.shift();\n\t\tconst variableName = parts.shift();\n\t\tconst index = parts.shift();\n\t\tconst keyName = parts.shift();\n\n\t\tif (modelName === model && variableName.includes(name)) {\n\t\t\tformData[index] ||= {}; // initialize object if not present\n\t\t\tformData[index][keyName] = data[key];\n\t\t}\n\t});\n\n\treturn formData;\n}", "!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));", "/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source  : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n  ? window : typeof self === 'object' && self.self === self\n  ? self : typeof global === 'object' && global.global === global\n  ? global\n  : this\n\nfunction bom (blob, opts) {\n  if (typeof opts === 'undefined') opts = { autoBom: false }\n  else if (typeof opts !== 'object') {\n    console.warn('Deprecated: Expected third argument to be a object')\n    opts = { autoBom: !opts }\n  }\n\n  // prepend BOM for UTF-8 XML and text/* types (including HTML)\n  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n  if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n    return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n  }\n  return blob\n}\n\nfunction download (url, name, opts) {\n  var xhr = new XMLHttpRequest()\n  xhr.open('GET', url)\n  xhr.responseType = 'blob'\n  xhr.onload = function () {\n    saveAs(xhr.response, name, opts)\n  }\n  xhr.onerror = function () {\n    console.error('could not download file')\n  }\n  xhr.send()\n}\n\nfunction corsEnabled (url) {\n  var xhr = new XMLHttpRequest()\n  // use sync to avoid popup blocker\n  xhr.open('HEAD', url, false)\n  try {\n    xhr.send()\n  } catch (e) {}\n  return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n  try {\n    node.dispatchEvent(new MouseEvent('click'))\n  } catch (e) {\n    var evt = document.createEvent('MouseEvents')\n    evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n                          20, false, false, false, false, 0, null)\n    node.dispatchEvent(evt)\n  }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n  // probably in some web worker\n  (typeof window !== 'object' || window !== _global)\n    ? function saveAs () { /* noop */ }\n\n  // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n  : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n  ? function saveAs (blob, name, opts) {\n    var URL = _global.URL || _global.webkitURL\n    var a = document.createElement('a')\n    name = name || blob.name || 'download'\n\n    a.download = name\n    a.rel = 'noopener' // tabnabbing\n\n    // TODO: detect chrome extensions & packaged apps\n    // a.target = '_blank'\n\n    if (typeof blob === 'string') {\n      // Support regular links\n      a.href = blob\n      if (a.origin !== location.origin) {\n        corsEnabled(a.href)\n          ? download(blob, name, opts)\n          : click(a, a.target = '_blank')\n      } else {\n        click(a)\n      }\n    } else {\n      // Support blobs\n      a.href = URL.createObjectURL(blob)\n      setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n      setTimeout(function () { click(a) }, 0)\n    }\n  }\n\n  // Use msSaveOrOpenBlob as a second approach\n  : 'msSaveOrOpenBlob' in navigator\n  ? function saveAs (blob, name, opts) {\n    name = name || blob.name || 'download'\n\n    if (typeof blob === 'string') {\n      if (corsEnabled(blob)) {\n        download(blob, name, opts)\n      } else {\n        var a = document.createElement('a')\n        a.href = blob\n        a.target = '_blank'\n        setTimeout(function () { click(a) })\n      }\n    } else {\n      navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n    }\n  }\n\n  // Fallback to using FileReader and a popup\n  : function saveAs (blob, name, opts, popup) {\n    // Open a popup immediately do go around popup blocker\n    // Mostly only available on user interaction and the fileReader is async so...\n    popup = popup || open('', '_blank')\n    if (popup) {\n      popup.document.title =\n      popup.document.body.innerText = 'downloading...'\n    }\n\n    if (typeof blob === 'string') return download(blob, name, opts)\n\n    var force = blob.type === 'application/octet-stream'\n    var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n    var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n    if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n      // Safari doesn't allow downloading of blob URLs\n      var reader = new FileReader()\n      reader.onloadend = function () {\n        var url = reader.result\n        url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n        if (popup) popup.location.href = url\n        else location = url\n        popup = null // reverse-tabnabbing #460\n      }\n      reader.readAsDataURL(blob)\n    } else {\n      var URL = _global.URL || _global.webkitURL\n      var url = URL.createObjectURL(blob)\n      if (popup) popup.location = url\n      else location.href = url\n      popup = null // reverse-tabnabbing #460\n      setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n    }\n  }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n  module.exports = saveAs;\n}\n", "/*!\nTurbo 8.0.12\nCopyright \u00A9 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function (submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form ||\n      raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function () {\n  if (\"submitter\" in Event.prototype) return\n\n  let prototype = window.Event.prototype;\n  // Certain versions of Safari 15 have a bug where they won't\n  // populate the submitter. This hurts TurboDrive's enable/disable detection.\n  // See https://bugs.webkit.org/show_bug.cgi?id=229660\n  if (\"SubmitEvent\" in window) {\n    const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n    if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n      prototype = prototypeOfSubmitEvent;\n    } else {\n      return // polyfill not needed\n    }\n  }\n\n  addEventListener(\"click\", clickCaptured, true);\n\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target)\n      }\n    }\n  });\n})();\n\nconst FrameLoadingStyle = {\n  eager: \"eager\",\n  lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n *   <turbo-frame id=\"messages\">\n *     <a href=\"/messages/expanded\">\n *       Show all expanded messages in this frame.\n *     </a>\n *\n *     <form action=\"/messages\">\n *       Show response from this form within this frame.\n *     </form>\n *   </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n  static delegateConstructor = undefined\n\n  loaded = Promise.resolve()\n\n  static get observedAttributes() {\n    return [\"disabled\", \"loading\", \"src\"]\n  }\n\n  constructor() {\n    super();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n\n  connectedCallback() {\n    this.delegate.connect();\n  }\n\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n\n  reload() {\n    return this.delegate.sourceURLReloaded()\n  }\n\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else if (name == \"disabled\") {\n      this.delegate.disabledChanged();\n    }\n  }\n\n  /**\n   * Gets the URL to lazily load source HTML from\n   */\n  get src() {\n    return this.getAttribute(\"src\")\n  }\n\n  /**\n   * Sets the URL to lazily load source HTML from\n   */\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n\n  /**\n   * Gets the refresh mode for the frame.\n   */\n  get refresh() {\n    return this.getAttribute(\"refresh\")\n  }\n\n  /**\n   * Sets the refresh mode for the frame.\n   */\n  set refresh(value) {\n    if (value) {\n      this.setAttribute(\"refresh\", value);\n    } else {\n      this.removeAttribute(\"refresh\");\n    }\n  }\n\n  get shouldReloadWithMorph() {\n    return this.src && this.refresh === \"morph\"\n  }\n\n  /**\n   * Determines if the element is loading\n   */\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n  }\n\n  /**\n   * Sets the value of if the element is loading\n   */\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n\n  /**\n   * Gets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  get disabled() {\n    return this.hasAttribute(\"disabled\")\n  }\n\n  /**\n   * Sets the disabled state of the frame.\n   *\n   * If disabled, no requests will be intercepted by the frame.\n   */\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n\n  /**\n   * Gets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\")\n  }\n\n  /**\n   * Sets the autoscroll state of the frame.\n   *\n   * If true, the frame will be scrolled into view automatically on update.\n   */\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n\n  /**\n   * Determines if the element has finished loading\n   */\n  get complete() {\n    return !this.delegate.isLoading\n  }\n\n  /**\n   * Gets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview\n  }\n\n  /**\n   * Sets the active state of the frame.\n   *\n   * If inactive, source changes will not be observed.\n   */\n  get isPreview() {\n    return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n  }\n}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy\n    default:\n      return FrameLoadingStyle.eager\n  }\n}\n\nconst drive = {\n  enabled: true,\n  progressBarDelay: 500,\n  unvisitableExtensions: new Set(\n    [\n      \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n      \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n      \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n      \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n      \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n      \".xls\", \".xlsx\", \".xml\", \".zip\"\n    ]\n  )\n};\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n\n  return event\n}\n\nfunction cancelEvent(event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n  if (document.visibilityState === \"hidden\") {\n    return nextEventLoopTick()\n  } else {\n    return nextAnimationFrame()\n  }\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == undefined ? \"\" : values[i];\n    return result + string + value\n  }, \"\")\n}\n\nfunction uuid() {\n  return Array.from({ length: 36 })\n    .map((_, i) => {\n      if (i == 8 || i == 13 || i == 18 || i == 23) {\n        return \"-\"\n      } else if (i == 14) {\n        return \"4\"\n      } else if (i == 19) {\n        return (Math.floor(Math.random() * 4) + 8).toString(16)\n      } else {\n        return Math.floor(Math.random() * 15).toString(16)\n      }\n    })\n    .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n    if (typeof value == \"string\") return value\n  }\n\n  return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\n\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n\n    element.removeAttribute(\"aria-busy\");\n  }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  })\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState\n    case \"advance\":\n    case \"restore\":\n      return history.pushState\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n\n  return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content\n}\n\nfunction getCspNonce() {\n  const element = getMetaElement(\"csp-nonce\");\n\n  if (element) {\n    const { nonce, content } = element;\n    return nonce == \"\" ? content : nonce\n  }\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n\n    document.head.appendChild(element);\n  }\n\n  element.setAttribute(\"content\", content);\n\n  return element\n}\n\nfunction findClosestRecursively(element, selector) {\n  if (element instanceof Element) {\n    return (\n      element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n    )\n  }\n}\n\nfunction elementIsFocusable(element) {\n  const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n  return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n  return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n  const before = reader();\n\n  callback();\n\n  await nextAnimationFrame();\n\n  const after = reader();\n\n  return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n  if (name === \"_blank\") {\n    return false\n  } else if (name) {\n    for (const element of document.getElementsByName(name)) {\n      if (element instanceof HTMLIFrameElement) return false\n    }\n\n    return true\n  } else {\n    return true\n  }\n}\n\nfunction findLinkFromClickTarget(target) {\n  return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n  return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n  let timeoutId = null;\n\n  return (...args) => {\n    const callback = () => fn.apply(this, args);\n    clearTimeout(timeoutId);\n    timeoutId = setTimeout(callback, delay);\n  }\n}\n\nconst submitter = {\n  \"aria-disabled\": {\n    beforeSubmit: submitter => {\n      submitter.setAttribute(\"aria-disabled\", \"true\");\n      submitter.addEventListener(\"click\", cancelEvent);\n    },\n\n    afterSubmit: submitter => {\n      submitter.removeAttribute(\"aria-disabled\");\n      submitter.removeEventListener(\"click\", cancelEvent);\n    }\n  },\n\n  \"disabled\": {\n    beforeSubmit: submitter => submitter.disabled = true,\n    afterSubmit: submitter => submitter.disabled = false\n  }\n};\n\nclass Config {\n  #submitter = null\n\n  constructor(config) {\n    Object.assign(this, config);\n  }\n\n  get submitter() {\n    return this.#submitter\n  }\n\n  set submitter(value) {\n    this.#submitter = submitter[value] || value;\n  }\n}\n\nconst forms = new Config({\n  mode: \"on\",\n  submitter: \"disabled\"\n});\n\nconst config = {\n  drive,\n  forms\n};\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1)\n    // eslint-disable-next-line no-cond-assign\n  } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n    return anchorMatch[1]\n  }\n}\n\nfunction getAction$1(form, submitter) {\n  const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n  return expandURL(action)\n}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n  constructor(response) {\n    this.response = response;\n  }\n\n  get succeeded() {\n    return this.response.ok\n  }\n\n  get failed() {\n    return !this.succeeded\n  }\n\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499\n  }\n\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599\n  }\n\n  get redirected() {\n    return this.response.redirected\n  }\n\n  get location() {\n    return expandURL(this.response.url)\n  }\n\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n  }\n\n  get statusCode() {\n    return this.response.status\n  }\n\n  get contentType() {\n    return this.header(\"Content-Type\")\n  }\n\n  get responseText() {\n    return this.response.clone().text()\n  }\n\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text()\n    } else {\n      return Promise.resolve(undefined)\n    }\n  }\n\n  header(name) {\n    return this.response.headers.get(name)\n  }\n}\n\nclass LimitedSet extends Set {\n  constructor(maxSize) {\n    super();\n    this.maxSize = maxSize;\n  }\n\n  add(value) {\n    if (this.size >= this.maxSize) {\n      const iterator = this.values();\n      const oldestValue = iterator.next().value;\n      this.delete(oldestValue);\n    }\n    super.add(value);\n  }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n  const modifiedHeaders = new Headers(options.headers || {});\n  const requestUID = uuid();\n  recentRequests.add(requestUID);\n  modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n  return nativeFetch(url, {\n    ...options,\n    headers: modifiedHeaders\n  })\n}\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get\n    case \"post\":\n      return FetchMethod.post\n    case \"put\":\n      return FetchMethod.put\n    case \"patch\":\n      return FetchMethod.patch\n    case \"delete\":\n      return FetchMethod.delete\n  }\n}\n\nconst FetchMethod = {\n  get: \"get\",\n  post: \"post\",\n  put: \"put\",\n  patch: \"patch\",\n  delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FetchEnctype.multipart:\n      return FetchEnctype.multipart\n    case FetchEnctype.plain:\n      return FetchEnctype.plain\n    default:\n      return FetchEnctype.urlEncoded\n  }\n}\n\nconst FetchEnctype = {\n  urlEncoded: \"application/x-www-form-urlencoded\",\n  multipart: \"multipart/form-data\",\n  plain: \"text/plain\"\n};\n\nclass FetchRequest {\n  abortController = new AbortController()\n  #resolveRequestPromise = (_value) => {}\n\n  constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n    const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n    this.delegate = delegate;\n    this.url = url;\n    this.target = target;\n    this.fetchOptions = {\n      credentials: \"same-origin\",\n      redirect: \"follow\",\n      method: method.toUpperCase(),\n      headers: { ...this.defaultHeaders },\n      body: body,\n      signal: this.abortSignal,\n      referrer: this.delegate.referrer?.href\n    };\n    this.enctype = enctype;\n  }\n\n  get method() {\n    return this.fetchOptions.method\n  }\n\n  set method(value) {\n    const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n    const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n    this.url.search = \"\";\n\n    const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n    this.url = url;\n    this.fetchOptions.body = body;\n    this.fetchOptions.method = fetchMethod.toUpperCase();\n  }\n\n  get headers() {\n    return this.fetchOptions.headers\n  }\n\n  set headers(value) {\n    this.fetchOptions.headers = value;\n  }\n\n  get body() {\n    if (this.isSafe) {\n      return this.url.searchParams\n    } else {\n      return this.fetchOptions.body\n    }\n  }\n\n  set body(value) {\n    this.fetchOptions.body = value;\n  }\n\n  get location() {\n    return this.url\n  }\n\n  get params() {\n    return this.url.searchParams\n  }\n\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : []\n  }\n\n  cancel() {\n    this.abortController.abort();\n  }\n\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n\n      if (event.detail.fetchRequest) {\n        this.response = event.detail.fetchRequest.response;\n      } else {\n        this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n      }\n\n      const response = await this.response;\n      return await this.receive(response)\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.#willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse\n  }\n\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    }\n  }\n\n  get isSafe() {\n    return isSafe(this.method)\n  }\n\n  get abortSignal() {\n    return this.abortController.signal\n  }\n\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n\n  async #allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.#resolveRequestPromise\n      },\n      target: this.target\n    });\n    this.url = event.detail.url;\n    if (event.defaultPrevented) await requestInterception;\n\n    return event\n  }\n\n  #willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error: error }\n    });\n\n    return !event.defaultPrevented\n  }\n}\n\nfunction isSafe(fetchMethod) {\n  return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n  const searchParams =\n    Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n  if (isSafe(method)) {\n    return [mergeIntoURLSearchParams(resource, searchParams), null]\n  } else if (enctype == FetchEnctype.urlEncoded) {\n    return [resource, searchParams]\n  } else {\n    return [resource, requestBody]\n  }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n  const entries = [];\n\n  for (const [name, value] of requestBody) {\n    if (value instanceof File) continue\n    else entries.push([name, value]);\n  }\n\n  return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n  const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n  url.search = searchParams.toString();\n\n  return url\n}\n\nclass AppearanceObserver {\n  started = false\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n\n  intersect = (entries) => {\n    const lastEntry = entries.slice(-1)[0];\n    if (lastEntry?.isIntersecting) {\n      this.delegate.elementAppearedInViewport(this.element);\n    }\n  }\n}\n\nclass StreamMessage {\n  static contentType = \"text/vnd.turbo-stream.html\"\n\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message))\n    } else {\n      return message\n    }\n  }\n\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n\n    element.replaceWith(streamElement);\n  }\n\n  return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n  #prefetchTimeout = null\n  #prefetched = null\n\n  get(url) {\n    if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n      return this.#prefetched.request\n    }\n  }\n\n  setLater(url, request, ttl) {\n    this.clear();\n\n    this.#prefetchTimeout = setTimeout(() => {\n      request.perform();\n      this.set(url, request, ttl);\n      this.#prefetchTimeout = null;\n    }, PREFETCH_DELAY);\n  }\n\n  set(url, request, ttl) {\n    this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n  }\n\n  clear() {\n    if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n    this.#prefetched = null;\n  }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n  initialized: \"initialized\",\n  requesting: \"requesting\",\n  waiting: \"waiting\",\n  receiving: \"receiving\",\n  stopping: \"stopping\",\n  stopped: \"stopped\"\n};\n\nclass FormSubmission {\n  state = FormSubmissionState.initialized\n\n  static confirmMethod(message) {\n    return Promise.resolve(confirm(message))\n  }\n\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    const method = getMethod(formElement, submitter);\n    const action = getAction(getFormAction(formElement, submitter), method);\n    const body = buildFormData(formElement, submitter);\n    const enctype = getEnctype(formElement, submitter);\n\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n    this.mustRedirect = mustRedirect;\n  }\n\n  get method() {\n    return this.fetchRequest.method\n  }\n\n  set method(value) {\n    this.fetchRequest.method = value;\n  }\n\n  get action() {\n    return this.fetchRequest.url.toString()\n  }\n\n  set action(value) {\n    this.fetchRequest.url = expandURL(value);\n  }\n\n  get body() {\n    return this.fetchRequest.body\n  }\n\n  get enctype() {\n    return this.fetchRequest.enctype\n  }\n\n  get isSafe() {\n    return this.fetchRequest.isSafe\n  }\n\n  get location() {\n    return this.fetchRequest.url\n  }\n\n  // The submission process\n\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n    if (typeof confirmationMessage === \"string\") {\n      const confirmMethod = typeof config.forms.confirm === \"function\" ?\n        config.forms.confirm :\n        FormSubmission.confirmMethod;\n\n      const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return\n      }\n    }\n\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform()\n    }\n  }\n\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    this.state = FormSubmissionState.waiting;\n    if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n    this.setSubmitsWith();\n    markAsBusy(this.formElement);\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n\n  requestPreventedHandlingResponse(request, response) {\n    prefetchCache.clear();\n\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n      return\n    }\n\n    prefetchCache.clear();\n\n    if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n\n  requestFinished(_request) {\n    this.state = FormSubmissionState.stopped;\n    if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n    this.resetSubmitterText();\n    clearBusyState(this.formElement);\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: { formSubmission: this, ...this.result }\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n\n  // Private\n\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return\n\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect\n  }\n\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n  }\n\n  get submitsWith() {\n    return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n  }\n}\n\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter?.getAttribute(\"name\");\n  const value = submitter?.getAttribute(\"value\");\n\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n\n  return formData\n}\n\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : undefined\n    }\n  }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n  const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n  if (submitter?.hasAttribute(\"formaction\")) {\n    return submitter.getAttribute(\"formaction\") || \"\"\n  } else {\n    return formElement.getAttribute(\"action\") || formElementAction || \"\"\n  }\n}\n\nfunction getAction(formAction, fetchMethod) {\n  const action = expandURL(formAction);\n\n  if (isSafe(fetchMethod)) {\n    action.search = \"\";\n  }\n\n  return action\n}\n\nfunction getMethod(formElement, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n  return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n  return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n  constructor(element) {\n    this.element = element;\n  }\n\n  get activeElement() {\n    return this.element.ownerDocument.activeElement\n  }\n\n  get children() {\n    return [...this.element.children]\n  }\n\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null\n  }\n\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n  }\n\n  get isConnected() {\n    return this.element.isConnected\n  }\n\n  get firstAutofocusableElement() {\n    return queryAutofocusableElement(this.element)\n  }\n\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element)\n  }\n\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id)\n  }\n\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n\n    return permanentElementMap\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n\n  submitCaptured = () => {\n    this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n    this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n  }\n\n  submitBubbled = (event) => {\n    if (!event.defaultPrevented) {\n      const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n      const submitter = event.submitter || undefined;\n\n      if (\n        form &&\n        submissionDoesNotDismissDialog(form, submitter) &&\n        submissionDoesNotTargetIFrame(form, submitter) &&\n        this.delegate.willSubmitForm(form, submitter)\n      ) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        this.delegate.formSubmitted(form, submitter);\n      }\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n  return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n  return doesNotTargetIFrame(target)\n}\n\nclass View {\n  #resolveRenderPromise = (_value) => {}\n  #resolveInterceptionPromise = (_value) => {}\n\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  // Scrolling\n\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n\n  scrollToAnchorFromLocation(location) {\n    this.scrollToAnchor(getAnchor(location));\n  }\n\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n\n  get scrollRoot() {\n    return window\n  }\n\n  // Rendering\n\n  async render(renderer) {\n    const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n    // A workaround to ignore tracked element mismatch reloads when performing\n    // a promoted Visit from a frame navigation\n    const shouldInvalidate = willRender;\n\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n\n        const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n        const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.#resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else if (shouldInvalidate) {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n\n  markVisitDirection(direction) {\n    this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n  }\n\n  unmarkVisitDirection() {\n    this.element.removeAttribute(\"data-turbo-visit-direction\");\n  }\n\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n}\n\nclass FrameView extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n\n  get snapshot() {\n    return new Snapshot(this.element)\n  }\n}\n\nclass LinkInterceptor {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.element = element;\n  }\n\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n\n  clickBubbled = (event) => {\n    if (this.clickEventIsSignificant(event)) {\n      this.clickEvent = event;\n    } else {\n      delete this.clickEvent;\n    }\n  }\n\n  linkClicked = (event) => {\n    if (this.clickEvent && this.clickEventIsSignificant(event)) {\n      if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n        this.clickEvent.preventDefault();\n        event.preventDefault();\n        this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n      }\n    }\n    delete this.clickEvent;\n  }\n\n  willVisit = (_event) => {\n    delete this.clickEvent;\n  }\n\n  clickEventIsSignificant(event) {\n    const target = event.composed ? event.target?.parentElement : event.target;\n    const element = findLinkFromClickTarget(target) || target;\n\n    return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n  }\n}\n\nclass LinkClickObserver {\n  started = false\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n\n  clickCaptured = () => {\n    this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n    this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n  }\n\n  clickBubbled = (event) => {\n    if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n      const target = (event.composedPath && event.composedPath()[0]) || event.target;\n      const link = findLinkFromClickTarget(target);\n      if (link && doesNotTargetIFrame(link.target)) {\n        const location = getLocationForLink(link);\n        if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n          event.preventDefault();\n          this.delegate.followedLinkToLocation(link, location);\n        }\n      }\n    }\n  }\n\n  clickEventIsSignificant(event) {\n    return !(\n      (event.target && event.target.isContentEditable) ||\n      event.defaultPrevented ||\n      event.which > 1 ||\n      event.altKey ||\n      event.ctrlKey ||\n      event.metaKey ||\n      event.shiftKey\n    )\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n  }\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return false\n  }\n\n  prefetchAndCacheRequestToLocation(link, location) {\n    return\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return (\n      this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n      (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n\n    const action = Object.assign(location, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder?.replaceWith(permanentElement);\n  }\n\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id)\n  }\n\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n  }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element\n}\n\nclass Renderer {\n  #activeElement = null\n\n  static renderElement(currentElement, newElement) {\n    // Abstract method\n  }\n\n  constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = this.constructor.renderElement;\n    this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  get shouldAutofocus() {\n    return true\n  }\n\n  get reloadReason() {\n    return\n  }\n\n  prepareToRender() {\n    return\n  }\n\n  render() {\n    // Abstract method\n  }\n\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n\n  focusFirstAutofocusableElement() {\n    if (this.shouldAutofocus) {\n      const element = this.connectedSnapshot.firstAutofocusableElement;\n      if (element) {\n        element.focus();\n      }\n    }\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement) {\n    if (this.#activeElement) return\n\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.#activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n      this.#activeElement.focus();\n\n      this.#activeElement = null;\n    }\n  }\n\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n  }\n\n  get currentElement() {\n    return this.currentSnapshot.element\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n  }\n\n  get renderMethod() {\n    return \"replace\"\n  }\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n\n    const frameElement = newElement;\n    const sourceRange = frameElement.ownerDocument?.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n\n  get shouldRender() {\n    return true\n  }\n\n  async render() {\n    await nextRepaint();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextRepaint();\n    this.focusFirstAutofocusableElement();\n    await nextRepaint();\n    this.activateScriptElements();\n  }\n\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true\n      }\n    }\n    return false\n  }\n\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\")\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value\n  } else {\n    return defaultValue\n  }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n        //=============================================================================\n        // AND NOW IT BEGINS...\n        //=============================================================================\n        let EMPTY_SET = new Set();\n\n        // default configuration values, updatable by users now\n        let defaults = {\n            morphStyle: \"outerHTML\",\n            callbacks : {\n                beforeNodeAdded: noOp,\n                afterNodeAdded: noOp,\n                beforeNodeMorphed: noOp,\n                afterNodeMorphed: noOp,\n                beforeNodeRemoved: noOp,\n                afterNodeRemoved: noOp,\n                beforeAttributeUpdated: noOp,\n\n            },\n            head: {\n                style: 'merge',\n                shouldPreserve: function (elt) {\n                    return elt.getAttribute(\"im-preserve\") === \"true\";\n                },\n                shouldReAppend: function (elt) {\n                    return elt.getAttribute(\"im-re-append\") === \"true\";\n                },\n                shouldRemove: noOp,\n                afterHeadMorphed: noOp,\n            }\n        };\n\n        //=============================================================================\n        // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n        //=============================================================================\n        function morph(oldNode, newContent, config = {}) {\n\n            if (oldNode instanceof Document) {\n                oldNode = oldNode.documentElement;\n            }\n\n            if (typeof newContent === 'string') {\n                newContent = parseContent(newContent);\n            }\n\n            let normalizedContent = normalizeContent(newContent);\n\n            let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n            return morphNormalizedContent(oldNode, normalizedContent, ctx);\n        }\n\n        function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n            if (ctx.head.block) {\n                let oldHead = oldNode.querySelector('head');\n                let newHead = normalizedNewContent.querySelector('head');\n                if (oldHead && newHead) {\n                    let promises = handleHeadElement(newHead, oldHead, ctx);\n                    // when head promises resolve, call morph again, ignoring the head tag\n                    Promise.all(promises).then(function () {\n                        morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n                            head: {\n                                block: false,\n                                ignore: true\n                            }\n                        }));\n                    });\n                    return;\n                }\n            }\n\n            if (ctx.morphStyle === \"innerHTML\") {\n\n                // innerHTML, so we are only updating the children\n                morphChildren(normalizedNewContent, oldNode, ctx);\n                return oldNode.children;\n\n            } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n                // otherwise find the best element match in the new content, morph that, and merge its siblings\n                // into either side of the best match\n                let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n                // stash the siblings that will need to be inserted on either side of the best match\n                let previousSibling = bestMatch?.previousSibling;\n                let nextSibling = bestMatch?.nextSibling;\n\n                // morph it\n                let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n                if (bestMatch) {\n                    // if there was a best match, merge the siblings in too and return the\n                    // whole bunch\n                    return insertSiblings(previousSibling, morphedNode, nextSibling);\n                } else {\n                    // otherwise nothing was added to the DOM\n                    return []\n                }\n            } else {\n                throw \"Do not understand how to morph style \" + ctx.morphStyle;\n            }\n        }\n\n\n        /**\n         * @param possibleActiveElement\n         * @param ctx\n         * @returns {boolean}\n         */\n        function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n            return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n        }\n\n        /**\n         * @param oldNode root node to merge content into\n         * @param newContent new content to merge\n         * @param ctx the merge context\n         * @returns {Element} the element that ended up in the DOM\n         */\n        function morphOldNodeTo(oldNode, newContent, ctx) {\n            if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n                oldNode.remove();\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return null;\n            } else if (!isSoftMatch(oldNode, newContent)) {\n                if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n                if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n                oldNode.parentElement.replaceChild(newContent, oldNode);\n                ctx.callbacks.afterNodeAdded(newContent);\n                ctx.callbacks.afterNodeRemoved(oldNode);\n                return newContent;\n            } else {\n                if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n                if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n                    handleHeadElement(newContent, oldNode, ctx);\n                } else {\n                    syncNodeFrom(newContent, oldNode, ctx);\n                    if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n                        morphChildren(newContent, oldNode, ctx);\n                    }\n                }\n                ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n                return oldNode;\n            }\n        }\n\n        /**\n         * This is the core algorithm for matching up children.  The idea is to use id sets to try to match up\n         * nodes as faithfully as possible.  We greedily match, which allows us to keep the algorithm fast, but\n         * by using id sets, we are able to better match up with content deeper in the DOM.\n         *\n         * Basic algorithm is, for each node in the new content:\n         *\n         * - if we have reached the end of the old parent, append the new content\n         * - if the new content has an id set match with the current insertion point, morph\n         * - search for an id set match\n         * - if id set match found, morph\n         * - otherwise search for a \"soft\" match\n         * - if a soft match is found, morph\n         * - otherwise, prepend the new node before the current insertion point\n         *\n         * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n         * with the current node.  See findIdSetMatch() and findSoftMatch() for details.\n         *\n         * @param {Element} newParent the parent element of the new content\n         * @param {Element } oldParent the old content that we are merging the new content into\n         * @param ctx the merge context\n         */\n        function morphChildren(newParent, oldParent, ctx) {\n\n            let nextNewChild = newParent.firstChild;\n            let insertionPoint = oldParent.firstChild;\n            let newChild;\n\n            // run through all the new content\n            while (nextNewChild) {\n\n                newChild = nextNewChild;\n                nextNewChild = newChild.nextSibling;\n\n                // if we are at the end of the exiting parent's children, just append\n                if (insertionPoint == null) {\n                    if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                    oldParent.appendChild(newChild);\n                    ctx.callbacks.afterNodeAdded(newChild);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // if the current node has an id set match then morph\n                if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n                    morphOldNodeTo(insertionPoint, newChild, ctx);\n                    insertionPoint = insertionPoint.nextSibling;\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // otherwise search forward in the existing old children for an id set match\n                let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a potential match, remove the nodes until that point and morph\n                if (idSetMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n                    morphOldNodeTo(idSetMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // no id set match found, so scan forward for a soft match for the current node\n                let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n                // if we found a soft match for the current node, morph\n                if (softMatch) {\n                    insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n                    morphOldNodeTo(softMatch, newChild, ctx);\n                    removeIdsFromConsideration(ctx, newChild);\n                    continue;\n                }\n\n                // abandon all hope of morphing, just insert the new child before the insertion point\n                // and move on\n                if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n                oldParent.insertBefore(newChild, insertionPoint);\n                ctx.callbacks.afterNodeAdded(newChild);\n                removeIdsFromConsideration(ctx, newChild);\n            }\n\n            // remove any remaining old nodes that didn't match up with new content\n            while (insertionPoint !== null) {\n\n                let tempNode = insertionPoint;\n                insertionPoint = insertionPoint.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n        }\n\n        //=============================================================================\n        // Attribute Syncing Code\n        //=============================================================================\n\n        /**\n         * @param attr {String} the attribute to be mutated\n         * @param to {Element} the element that is going to be updated\n         * @param updateType {(\"update\"|\"remove\")}\n         * @param ctx the merge context\n         * @returns {boolean} true if the attribute should be ignored, false otherwise\n         */\n        function ignoreAttribute(attr, to, updateType, ctx) {\n            if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n                return true;\n            }\n            return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n        }\n\n        /**\n         * syncs a given node with another node, copying over all attributes and\n         * inner element state from the 'from' node to the 'to' node\n         *\n         * @param {Element} from the element to copy attributes & state from\n         * @param {Element} to the element to copy attributes & state to\n         * @param ctx the merge context\n         */\n        function syncNodeFrom(from, to, ctx) {\n            let type = from.nodeType;\n\n            // if is an element type, sync the attributes from the\n            // new node into the new node\n            if (type === 1 /* element type */) {\n                const fromAttributes = from.attributes;\n                const toAttributes = to.attributes;\n                for (const fromAttribute of fromAttributes) {\n                    if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n                        continue;\n                    }\n                    if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n                        to.setAttribute(fromAttribute.name, fromAttribute.value);\n                    }\n                }\n                // iterate backwards to avoid skipping over items when a delete occurs\n                for (let i = toAttributes.length - 1; 0 <= i; i--) {\n                    const toAttribute = toAttributes[i];\n                    if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n                        continue;\n                    }\n                    if (!from.hasAttribute(toAttribute.name)) {\n                        to.removeAttribute(toAttribute.name);\n                    }\n                }\n            }\n\n            // sync text nodes\n            if (type === 8 /* comment */ || type === 3 /* text */) {\n                if (to.nodeValue !== from.nodeValue) {\n                    to.nodeValue = from.nodeValue;\n                }\n            }\n\n            if (!ignoreValueOfActiveElement(to, ctx)) {\n                // sync input values\n                syncInputValue(from, to, ctx);\n            }\n        }\n\n        /**\n         * @param from {Element} element to sync the value from\n         * @param to {Element} element to sync the value to\n         * @param attributeName {String} the attribute name\n         * @param ctx the merge context\n         */\n        function syncBooleanAttribute(from, to, attributeName, ctx) {\n            if (from[attributeName] !== to[attributeName]) {\n                let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n                if (!ignoreUpdate) {\n                    to[attributeName] = from[attributeName];\n                }\n                if (from[attributeName]) {\n                    if (!ignoreUpdate) {\n                        to.setAttribute(attributeName, from[attributeName]);\n                    }\n                } else {\n                    if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n                        to.removeAttribute(attributeName);\n                    }\n                }\n            }\n        }\n\n        /**\n         * NB: many bothans died to bring us information:\n         *\n         *  https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n         *  https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n         *\n         * @param from {Element} the element to sync the input value from\n         * @param to {Element} the element to sync the input value to\n         * @param ctx the merge context\n         */\n        function syncInputValue(from, to, ctx) {\n            if (from instanceof HTMLInputElement &&\n                to instanceof HTMLInputElement &&\n                from.type !== 'file') {\n\n                let fromValue = from.value;\n                let toValue = to.value;\n\n                // sync boolean attributes\n                syncBooleanAttribute(from, to, 'checked', ctx);\n                syncBooleanAttribute(from, to, 'disabled', ctx);\n\n                if (!from.hasAttribute('value')) {\n                    if (!ignoreAttribute('value', to, 'remove', ctx)) {\n                        to.value = '';\n                        to.removeAttribute('value');\n                    }\n                } else if (fromValue !== toValue) {\n                    if (!ignoreAttribute('value', to, 'update', ctx)) {\n                        to.setAttribute('value', fromValue);\n                        to.value = fromValue;\n                    }\n                }\n            } else if (from instanceof HTMLOptionElement) {\n                syncBooleanAttribute(from, to, 'selected', ctx);\n            } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n                let fromValue = from.value;\n                let toValue = to.value;\n                if (ignoreAttribute('value', to, 'update', ctx)) {\n                    return;\n                }\n                if (fromValue !== toValue) {\n                    to.value = fromValue;\n                }\n                if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n                    to.firstChild.nodeValue = fromValue;\n                }\n            }\n        }\n\n        //=============================================================================\n        // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n        //=============================================================================\n        function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n            let added = [];\n            let removed = [];\n            let preserved = [];\n            let nodesToAppend = [];\n\n            let headMergeStyle = ctx.head.style;\n\n            // put all new head elements into a Map, by their outerHTML\n            let srcToNewHeadNodes = new Map();\n            for (const newHeadChild of newHeadTag.children) {\n                srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n            }\n\n            // for each elt in the current head\n            for (const currentHeadElt of currentHead.children) {\n\n                // If the current head element is in the map\n                let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n                let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n                let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n                if (inNewContent || isPreserved) {\n                    if (isReAppended) {\n                        // remove the current version and let the new version replace it and re-execute\n                        removed.push(currentHeadElt);\n                    } else {\n                        // this element already exists and should not be re-appended, so remove it from\n                        // the new content map, preserving it in the DOM\n                        srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n                        preserved.push(currentHeadElt);\n                    }\n                } else {\n                    if (headMergeStyle === \"append\") {\n                        // we are appending and this existing element is not new content\n                        // so if and only if it is marked for re-append do we do anything\n                        if (isReAppended) {\n                            removed.push(currentHeadElt);\n                            nodesToAppend.push(currentHeadElt);\n                        }\n                    } else {\n                        // if this is a merge, we remove this content since it is not in the new head\n                        if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n                            removed.push(currentHeadElt);\n                        }\n                    }\n                }\n            }\n\n            // Push the remaining new head elements in the Map into the\n            // nodes to append to the head tag\n            nodesToAppend.push(...srcToNewHeadNodes.values());\n\n            let promises = [];\n            for (const newNode of nodesToAppend) {\n                let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n                if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n                    if (newElt.href || newElt.src) {\n                        let resolve = null;\n                        let promise = new Promise(function (_resolve) {\n                            resolve = _resolve;\n                        });\n                        newElt.addEventListener('load', function () {\n                            resolve();\n                        });\n                        promises.push(promise);\n                    }\n                    currentHead.appendChild(newElt);\n                    ctx.callbacks.afterNodeAdded(newElt);\n                    added.push(newElt);\n                }\n            }\n\n            // remove all removed elements, after we have appended the new elements to avoid\n            // additional network requests for things like style sheets\n            for (const removedElement of removed) {\n                if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n                    currentHead.removeChild(removedElement);\n                    ctx.callbacks.afterNodeRemoved(removedElement);\n                }\n            }\n\n            ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n            return promises;\n        }\n\n        function noOp() {\n        }\n\n        /*\n          Deep merges the config object and the Idiomoroph.defaults object to\n          produce a final configuration object\n         */\n        function mergeDefaults(config) {\n            let finalConfig = {};\n            // copy top level stuff into final config\n            Object.assign(finalConfig, defaults);\n            Object.assign(finalConfig, config);\n\n            // copy callbacks into final config (do this to deep merge the callbacks)\n            finalConfig.callbacks = {};\n            Object.assign(finalConfig.callbacks, defaults.callbacks);\n            Object.assign(finalConfig.callbacks, config.callbacks);\n\n            // copy head config into final config  (do this to deep merge the head)\n            finalConfig.head = {};\n            Object.assign(finalConfig.head, defaults.head);\n            Object.assign(finalConfig.head, config.head);\n            return finalConfig;\n        }\n\n        function createMorphContext(oldNode, newContent, config) {\n            config = mergeDefaults(config);\n            return {\n                target: oldNode,\n                newContent: newContent,\n                config: config,\n                morphStyle: config.morphStyle,\n                ignoreActive: config.ignoreActive,\n                ignoreActiveValue: config.ignoreActiveValue,\n                idMap: createIdMap(oldNode, newContent),\n                deadIds: new Set(),\n                callbacks: config.callbacks,\n                head: config.head\n            }\n        }\n\n        function isIdSetMatch(node1, node2, ctx) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n                if (node1.id !== \"\" && node1.id === node2.id) {\n                    return true;\n                } else {\n                    return getIdIntersectionCount(ctx, node1, node2) > 0;\n                }\n            }\n            return false;\n        }\n\n        function isSoftMatch(node1, node2) {\n            if (node1 == null || node2 == null) {\n                return false;\n            }\n            return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n        }\n\n        function removeNodesBetween(startInclusive, endExclusive, ctx) {\n            while (startInclusive !== endExclusive) {\n                let tempNode = startInclusive;\n                startInclusive = startInclusive.nextSibling;\n                removeNode(tempNode, ctx);\n            }\n            removeIdsFromConsideration(ctx, endExclusive);\n            return endExclusive.nextSibling;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential id match\n        // for the newChild.  We stop if we find a potential id match for the new child OR\n        // if the number of potential id matches we are discarding is greater than the\n        // potential id matches for the new child\n        //=============================================================================\n        function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            // max id matches we are willing to discard in our search\n            let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n            let potentialMatch = null;\n\n            // only search forward if there is a possibility of an id match\n            if (newChildPotentialIdCount > 0) {\n                let potentialMatch = insertionPoint;\n                // if there is a possibility of an id match, scan forward\n                // keep track of the potential id match count we are discarding (the\n                // newChildPotentialIdCount must be greater than this to make it likely\n                // worth it)\n                let otherMatchCount = 0;\n                while (potentialMatch != null) {\n\n                    // If we have an id match, return the current potential match\n                    if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n                        return potentialMatch;\n                    }\n\n                    // computer the other potential matches of this new content\n                    otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n                    if (otherMatchCount > newChildPotentialIdCount) {\n                        // if we have more potential id matches in _other_ content, we\n                        // do not have a good candidate for an id match, so return null\n                        return null;\n                    }\n\n                    // advanced to the next old content child\n                    potentialMatch = potentialMatch.nextSibling;\n                }\n            }\n            return potentialMatch;\n        }\n\n        //=============================================================================\n        // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n        // for the newChild.  We stop if we find a potential soft match for the new child OR\n        // if we find a potential id match in the old parents children OR if we find two\n        // potential soft matches for the next two pieces of new content\n        //=============================================================================\n        function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n            let potentialSoftMatch = insertionPoint;\n            let nextSibling = newChild.nextSibling;\n            let siblingSoftMatchCount = 0;\n\n            while (potentialSoftMatch != null) {\n\n                if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n                    // the current potential soft match has a potential id set match with the remaining new\n                    // content so bail out of looking\n                    return null;\n                }\n\n                // if we have a soft match with the current node, return it\n                if (isSoftMatch(newChild, potentialSoftMatch)) {\n                    return potentialSoftMatch;\n                }\n\n                if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n                    // the next new node has a soft match with this node, so\n                    // increment the count of future soft matches\n                    siblingSoftMatchCount++;\n                    nextSibling = nextSibling.nextSibling;\n\n                    // If there are two future soft matches, bail to allow the siblings to soft match\n                    // so that we don't consume future soft matches for the sake of the current node\n                    if (siblingSoftMatchCount >= 2) {\n                        return null;\n                    }\n                }\n\n                // advanced to the next old content child\n                potentialSoftMatch = potentialSoftMatch.nextSibling;\n            }\n\n            return potentialSoftMatch;\n        }\n\n        function parseContent(newContent) {\n            let parser = new DOMParser();\n\n            // remove svgs to avoid false-positive matches on head, etc.\n            let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n            // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n            if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n                let content = parser.parseFromString(newContent, \"text/html\");\n                // if it is a full HTML document, return the document itself as the parent container\n                if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n                    content.generatedByIdiomorph = true;\n                    return content;\n                } else {\n                    // otherwise return the html element as the parent container\n                    let htmlElement = content.firstChild;\n                    if (htmlElement) {\n                        htmlElement.generatedByIdiomorph = true;\n                        return htmlElement;\n                    } else {\n                        return null;\n                    }\n                }\n            } else {\n                // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n                // deal with touchy tags like tr, tbody, etc.\n                let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n                let content = responseDoc.body.querySelector('template').content;\n                content.generatedByIdiomorph = true;\n                return content\n            }\n        }\n\n        function normalizeContent(newContent) {\n            if (newContent == null) {\n                // noinspection UnnecessaryLocalVariableJS\n                const dummyParent = document.createElement('div');\n                return dummyParent;\n            } else if (newContent.generatedByIdiomorph) {\n                // the template tag created by idiomorph parsing can serve as a dummy parent\n                return newContent;\n            } else if (newContent instanceof Node) {\n                // a single node is added as a child to a dummy parent\n                const dummyParent = document.createElement('div');\n                dummyParent.append(newContent);\n                return dummyParent;\n            } else {\n                // all nodes in the array or HTMLElement collection are consolidated under\n                // a single dummy parent element\n                const dummyParent = document.createElement('div');\n                for (const elt of [...newContent]) {\n                    dummyParent.append(elt);\n                }\n                return dummyParent;\n            }\n        }\n\n        function insertSiblings(previousSibling, morphedNode, nextSibling) {\n            let stack = [];\n            let added = [];\n            while (previousSibling != null) {\n                stack.push(previousSibling);\n                previousSibling = previousSibling.previousSibling;\n            }\n            while (stack.length > 0) {\n                let node = stack.pop();\n                added.push(node); // push added preceding siblings on in order and insert\n                morphedNode.parentElement.insertBefore(node, morphedNode);\n            }\n            added.push(morphedNode);\n            while (nextSibling != null) {\n                stack.push(nextSibling);\n                added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n                nextSibling = nextSibling.nextSibling;\n            }\n            while (stack.length > 0) {\n                morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n            }\n            return added;\n        }\n\n        function findBestNodeMatch(newContent, oldNode, ctx) {\n            let currentElement;\n            currentElement = newContent.firstChild;\n            let bestElement = currentElement;\n            let score = 0;\n            while (currentElement) {\n                let newScore = scoreElement(currentElement, oldNode, ctx);\n                if (newScore > score) {\n                    bestElement = currentElement;\n                    score = newScore;\n                }\n                currentElement = currentElement.nextSibling;\n            }\n            return bestElement;\n        }\n\n        function scoreElement(node1, node2, ctx) {\n            if (isSoftMatch(node1, node2)) {\n                return .5 + getIdIntersectionCount(ctx, node1, node2);\n            }\n            return 0;\n        }\n\n        function removeNode(tempNode, ctx) {\n            removeIdsFromConsideration(ctx, tempNode);\n            if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n            tempNode.remove();\n            ctx.callbacks.afterNodeRemoved(tempNode);\n        }\n\n        //=============================================================================\n        // ID Set Functions\n        //=============================================================================\n\n        function isIdInConsideration(ctx, id) {\n            return !ctx.deadIds.has(id);\n        }\n\n        function idIsWithinNode(ctx, id, targetNode) {\n            let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n            return idSet.has(id);\n        }\n\n        function removeIdsFromConsideration(ctx, node) {\n            let idSet = ctx.idMap.get(node) || EMPTY_SET;\n            for (const id of idSet) {\n                ctx.deadIds.add(id);\n            }\n        }\n\n        function getIdIntersectionCount(ctx, node1, node2) {\n            let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n            let matchCount = 0;\n            for (const id of sourceSet) {\n                // a potential match is an id in the source and potentialIdsSet, but\n                // that has not already been merged into the DOM\n                if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n                    ++matchCount;\n                }\n            }\n            return matchCount;\n        }\n\n        /**\n         * A bottom up algorithm that finds all elements with ids inside of the node\n         * argument and populates id sets for those nodes and all their parents, generating\n         * a set of ids contained within all nodes for the entire hierarchy in the DOM\n         *\n         * @param node {Element}\n         * @param {Map<Node, Set<String>>} idMap\n         */\n        function populateIdMapForNode(node, idMap) {\n            let nodeParent = node.parentElement;\n            // find all elements with an id property\n            let idElements = node.querySelectorAll('[id]');\n            for (const elt of idElements) {\n                let current = elt;\n                // walk up the parent hierarchy of that element, adding the id\n                // of element to the parent's id set\n                while (current !== nodeParent && current != null) {\n                    let idSet = idMap.get(current);\n                    // if the id set doesn't exist, create it and insert it in the  map\n                    if (idSet == null) {\n                        idSet = new Set();\n                        idMap.set(current, idSet);\n                    }\n                    idSet.add(elt.id);\n                    current = current.parentElement;\n                }\n            }\n        }\n\n        /**\n         * This function computes a map of nodes to all ids contained within that node (inclusive of the\n         * node).  This map can be used to ask if two nodes have intersecting sets of ids, which allows\n         * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n         * to contribute to a parent nodes matching.\n         *\n         * @param {Element} oldContent  the old content that will be morphed\n         * @param {Element} newContent  the new content to morph to\n         * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n         */\n        function createIdMap(oldContent, newContent) {\n            let idMap = new Map();\n            populateIdMapForNode(oldContent, idMap);\n            populateIdMapForNode(newContent, idMap);\n            return idMap;\n        }\n\n        //=============================================================================\n        // This is what ends up becoming the Idiomorph global object\n        //=============================================================================\n        return {\n            morph,\n            defaults\n        }\n    })();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n  Idiomorph.morph(currentElement, newElement, {\n    ...options,\n    callbacks: new DefaultIdiomorphCallbacks(callbacks)\n  });\n}\n\nfunction morphChildren(currentElement, newElement) {\n  morphElements(currentElement, newElement.children, {\n    morphStyle: \"innerHTML\"\n  });\n}\n\nclass DefaultIdiomorphCallbacks {\n  #beforeNodeMorphed\n\n  constructor({ beforeNodeMorphed } = {}) {\n    this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n  }\n\n  beforeNodeAdded = (node) => {\n    return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n  }\n\n  beforeNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n        const event = dispatch(\"turbo:before-morph-element\", {\n          cancelable: true,\n          target: currentElement,\n          detail: { currentElement, newElement }\n        });\n\n        return !event.defaultPrevented\n      } else {\n        return false\n      }\n    }\n  }\n\n  beforeAttributeUpdated = (attributeName, target, mutationType) => {\n    const event = dispatch(\"turbo:before-morph-attribute\", {\n      cancelable: true,\n      target,\n      detail: { attributeName, mutationType }\n    });\n\n    return !event.defaultPrevented\n  }\n\n  beforeNodeRemoved = (node) => {\n    return this.beforeNodeMorphed(node)\n  }\n\n  afterNodeMorphed = (currentElement, newElement) => {\n    if (currentElement instanceof Element) {\n      dispatch(\"turbo:morph-element\", {\n        target: currentElement,\n        detail: { currentElement, newElement }\n      });\n    }\n  }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n  static renderElement(currentElement, newElement) {\n    dispatch(\"turbo:before-frame-morph\", {\n      target: currentElement,\n      detail: { currentElement, newElement }\n    });\n\n    morphChildren(currentElement, newElement);\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n}\n\nclass ProgressBar {\n  static animationDuration = 300 /*ms*/\n\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `\n  }\n\n  hiding = false\n  value = 0\n  visible = false\n\n  constructor() {\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n\n  // Private\n\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, ProgressBar.animationDuration * 1.5);\n  }\n\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n    }\n  }\n\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n\n  trickle = () => {\n    this.setValue(this.value + Math.random() / 100);\n  }\n\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = ProgressBar.defaultCSS;\n    const cspNonce = getCspNonce();\n    if (cspNonce) {\n      element.nonce = cspNonce;\n    }\n    return element\n  }\n\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element\n  }\n}\n\nclass HeadSnapshot extends Snapshot {\n  detailsByOuterHTML = this.children\n    .filter((element) => !elementIsNoscript(element))\n    .map((element) => elementWithoutNonce(element))\n    .reduce((result, element) => {\n      const { outerHTML } = element;\n      const details =\n        outerHTML in result\n          ? result[outerHTML]\n          : {\n              type: elementType(element),\n              tracked: elementIsTracked(element),\n              elements: []\n            };\n      return {\n        ...result,\n        [outerHTML]: {\n          ...details,\n          elements: [...details.elements, element]\n        }\n      }\n    }, {})\n\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n      .join(\"\")\n  }\n\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n  }\n\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n  }\n\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML)\n      .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n      .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n      .filter(({ type }) => type == matchedType)\n      .map(({ elements: [element] }) => element)\n  }\n\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements]\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)]\n      } else {\n        return result\n      }\n    }, [])\n  }\n\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null\n  }\n\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const {\n        elements: [element]\n      } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result\n    }, undefined | undefined)\n  }\n}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\"\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\"\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n\n  return element\n}\n\nclass PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html))\n  }\n\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument)\n  }\n\n  static fromDocument({ documentElement, body, head }) {\n    return new this(documentElement, body, new HeadSnapshot(head))\n  }\n\n  constructor(documentElement, body, headSnapshot) {\n    super(body);\n    this.documentElement = documentElement;\n    this.headSnapshot = headSnapshot;\n  }\n\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n\n    return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n  }\n\n  get lang() {\n    return this.documentElement.getAttribute(\"lang\")\n  }\n\n  get headElement() {\n    return this.headSnapshot.element\n  }\n\n  get rootLocation() {\n    const root = this.getSetting(\"root\") ?? \"/\";\n    return expandURL(root)\n  }\n\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\")\n  }\n\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\"\n  }\n\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\"\n  }\n\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\"\n  }\n\n  get prefersViewTransitions() {\n    return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n  }\n\n  get shouldMorphPage() {\n    return this.getSetting(\"refresh-method\") === \"morph\"\n  }\n\n  get shouldPreserveScrollPosition() {\n    return this.getSetting(\"refresh-scroll\") === \"preserve\"\n  }\n\n  // Private\n\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`)\n  }\n}\n\nclass ViewTransitioner {\n  #viewTransitionStarted = false\n  #lastOperation = Promise.resolve()\n\n  renderChange(useViewTransition, render) {\n    if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n      this.#viewTransitionStarted = true;\n      this.#lastOperation = this.#lastOperation.then(async () => {\n        await document.startViewTransition(render).finished;\n      });\n    } else {\n      this.#lastOperation = this.#lastOperation.then(render);\n    }\n\n    return this.#lastOperation\n  }\n\n  get viewTransitionsAvailable() {\n    return document.startViewTransition\n  }\n}\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n  visitStart: \"visitStart\",\n  requestStart: \"requestStart\",\n  requestEnd: \"requestEnd\",\n  visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n  initialized: \"initialized\",\n  started: \"started\",\n  canceled: \"canceled\",\n  failed: \"failed\",\n  completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n  networkFailure: 0,\n  timeoutFailure: -1,\n  contentTypeMismatch: -2\n};\n\nconst Direction = {\n  advance: \"forward\",\n  restore: \"back\",\n  replace: \"none\"\n};\n\nclass Visit {\n  identifier = uuid() // Required by turbo-ios\n  timingMetrics = {}\n\n  followedRedirect = false\n  historyChanged = false\n  scrolled = false\n  shouldCacheSnapshot = true\n  acceptsStreamResponse = false\n  snapshotCached = false\n  state = VisitState.initialized\n  viewTransitioner = new ViewTransitioner()\n\n  constructor(delegate, location, restorationIdentifier, options = {}) {\n    this.delegate = delegate;\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n\n    const {\n      action,\n      historyChanged,\n      referrer,\n      snapshot,\n      snapshotHTML,\n      response,\n      visitCachedSnapshot,\n      willRender,\n      updateHistory,\n      shouldCacheSnapshot,\n      acceptsStreamResponse,\n      direction\n    } = {\n      ...defaultOptions,\n      ...options\n    };\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.isPageRefresh = this.view.isPageRefresh(this);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n    this.direction = direction || Direction[action];\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n  }\n\n  get silent() {\n    return this.isSamePage\n  }\n\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.adapter.visitCompleted(this);\n      this.state = VisitState.completed;\n      this.followRedirect();\n\n      if (!this.followedRedirect) {\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n      this.delegate.visitCompleted(this);\n    }\n  }\n\n  changeHistory() {\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n          await this.renderPageSnapshot(snapshot, false);\n\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot\n      }\n    }\n  }\n\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML)\n    }\n  }\n\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null\n  }\n\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage || this.isPageRefresh) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n\n          await this.renderPageSnapshot(snapshot, isPreview);\n\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n\n  followRedirect() {\n    if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted() {\n    this.startRequest();\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {}\n\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n    }\n  }\n\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n\n  requestFinished() {\n    this.finishRequest();\n  }\n\n  // Scrolling\n\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n\n      this.scrolled = true;\n    }\n  }\n\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true\n    }\n  }\n\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true\n    }\n  }\n\n  // Instrumentation\n\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = new Date().getTime();\n  }\n\n  getTimingMetrics() {\n    return { ...this.timingMetrics }\n  }\n\n  // Private\n\n  getHistoryMethodForAction(action) {\n    switch (action) {\n      case \"replace\":\n        return history.replaceState\n      case \"advance\":\n      case \"restore\":\n        return history.pushState\n    }\n  }\n\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\"\n  }\n\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot()\n    } else {\n      return this.willRender\n    }\n  }\n\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame =\n        document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n\n  async renderPageSnapshot(snapshot, isPreview) {\n    await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n      await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n      this.performScroll();\n    });\n  }\n\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n}\n\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n  progressBar = new ProgressBar()\n\n  constructor(session) {\n    this.session = session;\n  }\n\n  visitProposedToLocation(location, options) {\n    if (locationIsVisitable(location, this.navigator.rootLocation)) {\n      this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n    } else {\n      window.location.href = location.toString();\n    }\n  }\n\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n\n  visitRequestCompleted(visit) {\n    visit.loadResponse();\n  }\n\n  visitRequestFailedWithStatusCode(visit, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        })\n      default:\n        return visit.loadResponse()\n    }\n  }\n\n  visitRequestFinished(_visit) {}\n\n  visitCompleted(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n\n  visitFailed(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n\n  visitRendered(_visit) {}\n\n  // Form Submission Delegate\n\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n\n  // Private\n\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n\n  showProgressBar = () => {\n    this.progressBar.show();\n  }\n\n  reload(reason) {\n    dispatch(\"turbo:reload\", { detail: reason });\n\n    window.location.href = this.location?.toString() || window.location.href;\n  }\n\n  get navigator() {\n    return this.session.navigator\n  }\n}\n\nclass CacheObserver {\n  selector = \"[data-turbo-temporary]\"\n  deprecatedSelector = \"[data-turbo-cache=false]\"\n\n  started = false\n\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n\n  removeTemporaryElements = (_event) => {\n    for (const element of this.temporaryElements) {\n      element.remove();\n    }\n  }\n\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n  }\n\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n\n    if (elements.length) {\n      console.warn(\n        `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n      );\n    }\n\n    return [...elements]\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldRedirect(element)\n  }\n\n  linkClickIntercepted(element, url, event) {\n    const frame = this.#findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return (\n      element.closest(\"turbo-frame\") == null &&\n      this.#shouldSubmit(element, submitter) &&\n      this.#shouldRedirect(element, submitter)\n    )\n  }\n\n  formSubmitted(element, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n\n  #shouldSubmit(form, submitter) {\n    const action = getAction$1(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL(meta?.content ?? \"/\");\n\n    return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n  }\n\n  #shouldRedirect(element, submitter) {\n    const isNavigatable =\n      element instanceof HTMLFormElement\n        ? this.session.submissionIsNavigatable(element, submitter)\n        : this.session.elementIsNavigatable(element);\n\n    if (isNavigatable) {\n      const frame = this.#findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false\n    } else {\n      return false\n    }\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame\n      }\n    }\n  }\n}\n\nclass History {\n  location\n  restorationIdentifier = uuid()\n  restorationData = {}\n  started = false\n  pageLoaded = false\n  currentIndex = 0\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n\n  push(location, restorationIdentifier) {\n    this.update(history.pushState, location, restorationIdentifier);\n  }\n\n  replace(location, restorationIdentifier) {\n    this.update(history.replaceState, location, restorationIdentifier);\n  }\n\n  update(method, location, restorationIdentifier = uuid()) {\n    if (method === history.pushState) ++this.currentIndex;\n\n    const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n    method.call(history, state, \"\", location.href);\n    this.location = location;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n\n  // Restoration data\n\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {}\n  }\n\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = {\n      ...restorationData,\n      ...additionalData\n    };\n  }\n\n  // Scroll restoration\n\n  assumeControlOfScrollRestoration() {\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n\n  // Event handlers\n\n  onPopState = (event) => {\n    if (this.shouldHandlePopState()) {\n      const { turbo } = event.state || {};\n      if (turbo) {\n        this.location = new URL(window.location.href);\n        const { restorationIdentifier, restorationIndex } = turbo;\n        this.restorationIdentifier = restorationIdentifier;\n        const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n        this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n        this.currentIndex = restorationIndex;\n      }\n    }\n  }\n\n  onPageLoad = async (_event) => {\n    await nextMicrotask();\n    this.pageLoaded = true;\n  }\n\n  // Private\n\n  shouldHandlePopState() {\n    // Safari dispatches a popstate event after window's load event, ignore it\n    return this.pageIsLoaded()\n  }\n\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\"\n  }\n}\n\nclass LinkPrefetchObserver {\n  started = false\n  #prefetchedLink = null\n\n  constructor(delegate, eventTarget) {\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n\n  start() {\n    if (this.started) return\n\n    if (this.eventTarget.readyState === \"loading\") {\n      this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n    } else {\n      this.#enable();\n    }\n  }\n\n  stop() {\n    if (!this.started) return\n\n    this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = false;\n  }\n\n  #enable = () => {\n    this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n      capture: true,\n      passive: true\n    });\n    this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n      capture: true,\n      passive: true\n    });\n\n    this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n    this.started = true;\n  }\n\n  #tryToPrefetchRequest = (event) => {\n    if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n    const target = event.target;\n    const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n    if (isLink && this.#isPrefetchable(target)) {\n      const link = target;\n      const location = getLocationForLink(link);\n\n      if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n        this.#prefetchedLink = link;\n\n        const fetchRequest = new FetchRequest(\n          this,\n          FetchMethod.get,\n          location,\n          new URLSearchParams(),\n          target\n        );\n\n        prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n      }\n    }\n  }\n\n  #cancelRequestIfObsolete = (event) => {\n    if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n  }\n\n  #cancelPrefetchRequest = () => {\n    prefetchCache.clear();\n    this.#prefetchedLink = null;\n  }\n\n  #tryToUsePrefetchedRequest = (event) => {\n    if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n      const cached = prefetchCache.get(event.detail.url.toString());\n\n      if (cached) {\n        // User clicked link, use cache response\n        event.detail.fetchRequest = cached;\n      }\n\n      prefetchCache.clear();\n    }\n  }\n\n  prepareRequest(request) {\n    const link = request.target;\n\n    request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n    const turboFrame = link.closest(\"turbo-frame\");\n    const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n    if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n      request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n    }\n  }\n\n  // Fetch request interface\n\n  requestSucceededWithResponse() {}\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  get #cacheTtl() {\n    return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n  }\n\n  #isPrefetchable(link) {\n    const href = link.getAttribute(\"href\");\n\n    if (!href) return false\n\n    if (unfetchableLink(link)) return false\n    if (linkToTheSamePage(link)) return false\n    if (linkOptsOut(link)) return false\n    if (nonSafeLink(link)) return false\n    if (eventPrevented(link)) return false\n\n    return true\n  }\n}\n\nconst unfetchableLink = (link) => {\n  return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n  return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n  if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n  if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n  const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n  if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n  return false\n};\n\nconst nonSafeLink = (link) => {\n  const turboMethod = link.getAttribute(\"data-turbo-method\");\n  if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n  if (isUJS(link)) return true\n  if (link.hasAttribute(\"data-turbo-confirm\")) return true\n  if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n  return false\n};\n\nconst isUJS = (link) => {\n  return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n  const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n  return event.defaultPrevented\n};\n\nclass Navigator {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  proposeVisit(location, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n      this.delegate.visitProposedToLocation(location, options);\n    }\n  }\n\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n      referrer: this.location,\n      ...options\n    });\n    this.currentVisit.start();\n  }\n\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n    this.formSubmission.start();\n  }\n\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n\n  get adapter() {\n    return this.delegate.adapter\n  }\n\n  get view() {\n    return this.delegate.view\n  }\n\n  get rootLocation() {\n    return this.view.snapshot.rootLocation\n  }\n\n  get history() {\n    return this.delegate.history\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted(formSubmission) {\n    // Not all adapters implement formSubmissionStarted\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      if(!snapshot.shouldPreserveScrollPosition) {\n        this.view.scrollToTop();\n      }\n      this.view.clearSnapshotCache();\n    }\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished(formSubmission) {\n    // Not all adapters implement formSubmissionFinished\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    this.delegate.visitStarted(visit);\n  }\n\n  visitCompleted(visit) {\n    this.delegate.visitCompleted(visit);\n    delete this.currentVisit;\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    const anchor = getAnchor(location);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n    return (\n      action !== \"replace\" &&\n      getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n      (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n    )\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n\n  // Visits\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  #getActionForFormSubmission(formSubmission, fetchResponse) {\n    const { submitter, formElement } = formSubmission;\n    return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n  }\n\n  #getDefaultAction(fetchResponse) {\n    const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n    return sameLocationRedirect ? \"replace\" : \"advance\"\n  }\n}\n\nconst PageStage = {\n  initial: 0,\n  loading: 1,\n  interactive: 2,\n  complete: 3\n};\n\nclass PageObserver {\n  stage = PageStage.initial\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n\n  interpretReadyState = () => {\n    const { readyState } = this;\n    if (readyState == \"interactive\") {\n      this.pageIsInteractive();\n    } else if (readyState == \"complete\") {\n      this.pageIsComplete();\n    }\n  }\n\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n\n  pageWillUnload = () => {\n    this.delegate.pageWillUnload();\n  }\n\n  get readyState() {\n    return document.readyState\n  }\n}\n\nclass ScrollObserver {\n  started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n\n  onScroll = () => {\n    this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n  }\n\n  // Private\n\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n}\n\nclass StreamMessageRenderer {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n      withAutofocusFromFragment(fragment, () => {\n        withPreservedFocus(() => {\n          document.documentElement.appendChild(fragment);\n        });\n      });\n    });\n  }\n\n  // Bardo delegate\n\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n\n  return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n  const generatedID = `turbo-stream-autofocus-${uuid()}`;\n  const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n  const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n  let willAutofocusId = null;\n\n  if (elementWithAutofocus) {\n    if (elementWithAutofocus.id) {\n      willAutofocusId = elementWithAutofocus.id;\n    } else {\n      willAutofocusId = generatedID;\n    }\n\n    elementWithAutofocus.id = willAutofocusId;\n  }\n\n  callback();\n  await nextRepaint();\n\n  const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n  if (hasNoActiveElement && willAutofocusId) {\n    const elementToAutofocus = document.getElementById(willAutofocusId);\n\n    if (elementIsFocusable(elementToAutofocus)) {\n      elementToAutofocus.focus();\n    }\n    if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n      elementToAutofocus.removeAttribute(\"id\");\n    }\n  }\n}\n\nasync function withPreservedFocus(callback) {\n  const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n  const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n  if (restoreFocusTo) {\n    const elementToFocus = document.getElementById(restoreFocusTo);\n\n    if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n      elementToFocus.focus();\n    }\n  }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n  for (const streamElement of nodeListOfStreamElements) {\n    const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n    if (elementWithAutofocus) return elementWithAutofocus\n  }\n\n  return null\n}\n\nclass StreamObserver {\n  sources = new Set()\n  #started = false\n\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n\n  start() {\n    if (!this.#started) {\n      this.#started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  stop() {\n    if (this.#started) {\n      this.#started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n\n  streamSourceIsConnected(source) {\n    return this.sources.has(source)\n  }\n\n  inspectFetchResponse = (event) => {\n    const response = fetchResponseFromEvent(event);\n    if (response && fetchResponseIsStream(response)) {\n      event.preventDefault();\n      this.receiveMessageResponse(response);\n    }\n  }\n\n  receiveMessageEvent = (event) => {\n    if (this.#started && typeof event.data == \"string\") {\n      this.receiveMessageHTML(event.data);\n    }\n  }\n\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n}\n\nfunction fetchResponseFromEvent(event) {\n  const fetchResponse = event.detail?.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse\n  }\n}\n\nfunction fetchResponseIsStream(response) {\n  const contentType = response.contentType ?? \"\";\n  return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n\n    documentElement.replaceChild(newElement, body);\n  }\n\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element\n  }\n\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\")\n  }\n}\n\nclass PageRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n  }\n\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      }\n    }\n\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      }\n    }\n  }\n\n  async prepareToRender() {\n    this.#setLanguage();\n    await this.mergeHead();\n  }\n\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot\n  }\n\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot\n  }\n\n  get newElement() {\n    return this.newSnapshot.element\n  }\n\n  #setLanguage() {\n    const { documentElement } = this.currentSnapshot;\n    const { lang } = this.newSnapshot;\n\n    if (lang) {\n      documentElement.setAttribute(\"lang\", lang);\n    } else {\n      documentElement.removeAttribute(\"lang\");\n    }\n  }\n\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n\n    await mergedHeadElements;\n    await newStylesheetElements;\n\n    if (this.willRender) {\n      this.removeUnusedDynamicStylesheetElements();\n    }\n  }\n\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n  }\n\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n\n      document.head.appendChild(element);\n    }\n\n    await Promise.all(loadingElements);\n  }\n\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n\n  removeUnusedDynamicStylesheetElements() {\n    for (const element of this.unusedDynamicStylesheetElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      // if title element...\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true\n        }\n      }\n\n      // if any other element...\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true\n      }\n    }\n\n    return false\n  }\n\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n\n  get unusedDynamicStylesheetElements() {\n    return this.oldHeadStylesheetElements.filter((element) => {\n      return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n    })\n  }\n\n  get oldHeadStylesheetElements() {\n    return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n  }\n\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n  }\n\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements\n  }\n\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements\n  }\n\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\")\n  }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n  static renderElement(currentElement, newElement) {\n    morphElements(currentElement, newElement, {\n      callbacks: {\n        beforeNodeMorphed: element => !canRefreshFrame(element)\n      }\n    });\n\n    for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n      if (canRefreshFrame(frame)) frame.reload();\n    }\n\n    dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n  }\n\n  async preservingPermanentElements(callback) {\n    return await callback()\n  }\n\n  get renderMethod() {\n    return \"morph\"\n  }\n\n  get shouldAutofocus() {\n    return false\n  }\n}\n\nfunction canRefreshFrame(frame) {\n  return frame instanceof FrameElement &&\n    frame.src &&\n    frame.refresh === \"morph\" &&\n    !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n  keys = []\n  snapshots = {}\n\n  constructor(size) {\n    this.size = size;\n  }\n\n  has(location) {\n    return toCacheKey(location) in this.snapshots\n  }\n\n  get(location) {\n    if (this.has(location)) {\n      const snapshot = this.read(location);\n      this.touch(location);\n      return snapshot\n    }\n  }\n\n  put(location, snapshot) {\n    this.write(location, snapshot);\n    this.touch(location);\n    return snapshot\n  }\n\n  clear() {\n    this.snapshots = {};\n  }\n\n  // Private\n\n  read(location) {\n    return this.snapshots[toCacheKey(location)]\n  }\n\n  write(location, snapshot) {\n    this.snapshots[toCacheKey(location)] = snapshot;\n  }\n\n  touch(location) {\n    const key = toCacheKey(location);\n    const index = this.keys.indexOf(key);\n    if (index > -1) this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n}\n\nclass PageView extends View {\n  snapshotCache = new SnapshotCache(10)\n  lastRenderedLocation = new URL(location.href)\n  forceReloaded = false\n\n  shouldTransitionTo(newSnapshot) {\n    return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n  }\n\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n    const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n    const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit?.changeHistory();\n    }\n\n    return this.render(renderer)\n  }\n\n  renderError(snapshot, visit) {\n    visit?.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n    return this.render(renderer)\n  }\n\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location, cachedSnapshot);\n      return cachedSnapshot\n    }\n  }\n\n  getCachedSnapshotForLocation(location) {\n    return this.snapshotCache.get(location)\n  }\n\n  isPageRefresh(visit) {\n    return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n  }\n\n  shouldPreserveScrollPosition(visit) {\n    return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n  }\n\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element)\n  }\n}\n\nclass Preloader {\n  selector = \"a[data-turbo-preload]\"\n\n  constructor(delegate, snapshotCache) {\n    this.delegate = delegate;\n    this.snapshotCache = snapshotCache;\n  }\n\n  start() {\n    if (document.readyState === \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n\n  stop() {\n    document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      if (this.delegate.shouldPreloadLink(link)) {\n        this.preloadURL(link);\n      }\n    }\n  }\n\n  async preloadURL(link) {\n    const location = new URL(link.href);\n\n    if (this.snapshotCache.has(location)) {\n      return\n    }\n\n    const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n    await fetchRequest.perform();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(fetchRequest) {\n    fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n  }\n\n  async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n    try {\n      const responseHTML = await fetchResponse.responseHTML;\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n      this.snapshotCache.put(fetchRequest.url, snapshot);\n    } catch (_) {\n      // If we cannot preload that is ok!\n    }\n  }\n\n  requestStarted(fetchRequest) {}\n\n  requestErrored(fetchRequest) {}\n\n  requestFinished(fetchRequest) {}\n\n  requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n  requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n  #preloadAll = () => {\n    this.preloadOnLoadLinksForView(document.body);\n  }\n}\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n\n  clear() {\n    this.session.clearCache();\n  }\n\n  resetCacheControl() {\n    this.#setCacheControl(\"\");\n  }\n\n  exemptPageFromCache() {\n    this.#setCacheControl(\"no-cache\");\n  }\n\n  exemptPageFromPreview() {\n    this.#setCacheControl(\"no-preview\");\n  }\n\n  #setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nclass Session {\n  navigator = new Navigator(this)\n  history = new History(this)\n  view = new PageView(this, document.documentElement)\n  adapter = new BrowserAdapter(this)\n\n  pageObserver = new PageObserver(this)\n  cacheObserver = new CacheObserver()\n  linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n  linkClickObserver = new LinkClickObserver(this, window)\n  formSubmitObserver = new FormSubmitObserver(this, document)\n  scrollObserver = new ScrollObserver(this)\n  streamObserver = new StreamObserver(this)\n  formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n  frameRedirector = new FrameRedirector(this, document.documentElement)\n  streamMessageRenderer = new StreamMessageRenderer()\n  cache = new Cache(this)\n\n  enabled = true\n  started = false\n  #pageRefreshDebouncePeriod = 150\n\n  constructor(recentRequests) {\n    this.recentRequests = recentRequests;\n    this.preloader = new Preloader(this, this.view.snapshotCache);\n    this.debouncedRefresh = this.refresh;\n    this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n  }\n\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.linkPrefetchObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n\n  disable() {\n    this.enabled = false;\n  }\n\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.linkPrefetchObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.preloader.stop();\n      this.started = false;\n    }\n  }\n\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n\n  visit(location, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n    if (frameElement instanceof FrameElement) {\n      const action = options.action || getVisitAction(frameElement);\n\n      frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n      frameElement.src = location.toString();\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n\n  refresh(url, requestId) {\n    const isRecentRequest = requestId && this.recentRequests.has(requestId);\n    if (!isRecentRequest && !this.navigator.currentVisit) {\n      this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n    }\n  }\n\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n\n  setProgressBarDelay(delay) {\n    console.warn(\n      \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n    );\n\n    this.progressBarDelay = delay;\n  }\n\n  set progressBarDelay(delay) {\n    config.drive.progressBarDelay = delay;\n  }\n\n  get progressBarDelay() {\n    return config.drive.progressBarDelay\n  }\n\n  set drive(value) {\n    config.drive.enabled = value;\n  }\n\n  get drive() {\n    return config.drive.enabled\n  }\n\n  set formMode(value) {\n    config.forms.mode = value;\n  }\n\n  get formMode() {\n    return config.forms.mode\n  }\n\n  get location() {\n    return this.history.location\n  }\n\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier\n  }\n\n  get pageRefreshDebouncePeriod() {\n    return this.#pageRefreshDebouncePeriod\n  }\n\n  set pageRefreshDebouncePeriod(value) {\n    this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n    this.#pageRefreshDebouncePeriod = value;\n  }\n\n  // Preloader delegate\n\n  shouldPreloadLink(element) {\n    const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n    const isStream = element.hasAttribute(\"data-turbo-stream\");\n    const frameTarget = element.getAttribute(\"data-turbo-frame\");\n    const frame = frameTarget == \"_top\" ?\n      null :\n      document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n    if (isUnsafe || isStream || frame instanceof FrameElement) {\n      return false\n    } else {\n      const location = new URL(element.href);\n\n      return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n    }\n  }\n\n  // History delegate\n\n  historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n    if (this.enabled) {\n      this.navigator.startVisit(location, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true,\n        direction\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n\n  // Scroll observer delegate\n\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n\n  // Form click observer delegate\n\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n  }\n\n  submittedFormLinkToLocation() {}\n\n  // Link hover observer delegate\n\n  canPrefetchRequestToLocation(link, location) {\n    return (\n      this.elementIsNavigatable(link) &&\n        locationIsVisitable(location, this.snapshot.rootLocation)\n    )\n  }\n\n  // Link click observer delegate\n\n  willFollowLinkToLocation(link, location, event) {\n    return (\n      this.elementIsNavigatable(link) &&\n      locationIsVisitable(location, this.snapshot.rootLocation) &&\n      this.applicationAllowsFollowingLinkToLocation(link, location, event)\n    )\n  }\n\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n    this.visit(location.href, { action, acceptsStreamResponse });\n  }\n\n  // Navigator delegate\n\n  allowsVisitingLocationWithAction(location, action) {\n    return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n  }\n\n  visitProposedToLocation(location, options) {\n    extendURLWithDeprecatedProperties(location);\n    this.adapter.visitProposedToLocation(location, options);\n  }\n\n  // Visit delegate\n\n  visitStarted(visit) {\n    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n      this.view.markVisitDirection(visit.direction);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n\n  visitCompleted(visit) {\n    this.view.unmarkVisitDirection();\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n  }\n\n  locationWithActionIsSamePage(location, action) {\n    return this.navigator.locationWithActionIsSamePage(location, action)\n  }\n\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return (\n      this.submissionIsNavigatable(form, submitter) &&\n      locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n    )\n  }\n\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n\n  // Page observer delegate\n\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n\n  // Stream observer delegate\n\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n\n  // Page view delegate\n\n  viewWillCacheSnapshot() {\n    if (!this.navigator.currentVisit?.silent) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender(renderMethod);\n  }\n\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n\n  // Frame element\n\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n\n  // Application events\n\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented\n  }\n\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented\n  }\n\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location.href, originalEvent: event },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location.href },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n  }\n\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\")\n  }\n\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: { newBody, ...options },\n      cancelable: true\n    })\n  }\n\n  notifyApplicationAfterRender(renderMethod) {\n    return dispatch(\"turbo:render\", { detail: { renderMethod } })\n  }\n\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    })\n  }\n\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(\n      new HashChangeEvent(\"hashchange\", {\n        oldURL: oldURL.toString(),\n        newURL: newURL.toString()\n      })\n    );\n  }\n\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame })\n  }\n\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    })\n  }\n\n  // Helpers\n\n  submissionIsNavigatable(form, submitter) {\n    if (config.forms.mode == \"off\") {\n      return false\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n      if (config.forms.mode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form)\n      }\n    }\n  }\n\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n    // Check if Drive is enabled on the session or we're within a Frame.\n    if (config.drive.enabled || withinFrame) {\n      // Element is navigatable by default, unless `data-turbo=\"false\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\"\n      } else {\n        return true\n      }\n    } else {\n      // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\"\n      } else {\n        return false\n      }\n    }\n  }\n\n  // Private\n\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\"\n  }\n\n  get snapshot() {\n    return this.view.snapshot\n  }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString()\n    }\n  }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n  session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n  console.warn(\n    \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n  console.warn(\n    \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  console.warn(\n    \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  console.warn(\n    \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n  );\n  config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\n  fetch: fetchWithTurboHeaders,\n  config: config,\n  start: start,\n  registerAdapter: registerAdapter,\n  visit: visit,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  renderStreamMessage: renderStreamMessage,\n  clearCache: clearCache,\n  setProgressBarDelay: setProgressBarDelay,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n  fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n  #currentFetchRequest = null\n  #resolveVisitPromise = () => {}\n  #connected = false\n  #hasBeenLoaded = false\n  #ignoredAttributes = new Set()\n  #shouldMorphFrame = false\n  action = null\n\n  constructor(element) {\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n\n  // Frame delegate\n\n  connect() {\n    if (!this.#connected) {\n      this.#connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.#loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n\n  disconnect() {\n    if (this.#connected) {\n      this.#connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLChanged() {\n    if (this.#isIgnoringChangesTo(\"src\")) return\n\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n      this.#loadSourceURL();\n    }\n  }\n\n  sourceURLReloaded() {\n    const { refresh, src } = this.element;\n\n    this.#shouldMorphFrame = src && refresh === \"morph\";\n\n    this.element.removeAttribute(\"complete\");\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded\n  }\n\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.#loadSourceURL();\n    }\n  }\n\n  async #loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.#visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.#hasBeenLoaded = true;\n    }\n  }\n\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n\n        if (pageSnapshot.isVisitable) {\n          await this.#loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.#handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.#shouldMorphFrame = false;\n      this.fetchResponseLoaded = () => Promise.resolve();\n    }\n  }\n\n  // Appearance observer delegate\n\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n    this.#loadSourceURL();\n  }\n\n  // Form link click observer delegate\n\n  willSubmitFormLinkToLocation(link) {\n    return this.#shouldInterceptNavigation(link)\n  }\n\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.#findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n\n  // Link interceptor delegate\n\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.#shouldInterceptNavigation(element)\n  }\n\n  linkClickIntercepted(element, location) {\n    this.#navigateFrame(element, location);\n  }\n\n  // Form submit observer delegate\n\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n  }\n\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n\n  // Fetch request delegate\n\n  prepareRequest(request) {\n    request.headers[\"Turbo-Frame\"] = this.id;\n\n    if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n\n  requestPreventedHandlingResponse(_request, _response) {\n    this.#resolveVisitPromise();\n  }\n\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.#resolveVisitPromise();\n  }\n\n  requestErrored(request, error) {\n    console.error(error);\n    this.#resolveVisitPromise();\n  }\n\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n\n  // Form submission delegate\n\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.#findFrameElement(formElement));\n  }\n\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n    frame.delegate.loadResponse(response);\n\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.#findFrameElement(formElement));\n  }\n\n  // View delegate\n\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: { newFrame, ...options },\n      cancelable: true\n    });\n\n    const {\n      defaultPrevented,\n      detail: { render }\n    } = event;\n\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n\n    return !defaultPrevented\n  }\n\n  viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n\n  viewInvalidated() {}\n\n  // Frame renderer delegate\n\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n\n  visitCachedSnapshot = ({ element }) => {\n    const frame = element.querySelector(\"#\" + this.element.id);\n\n    if (frame && this.previousFrameElement) {\n      frame.replaceChildren(...this.previousFrameElement.children);\n    }\n\n    delete this.previousFrameElement;\n  }\n\n  // Private\n\n  async #loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      await this.fetchResponseLoaded(fetchResponse);\n    } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.#handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n\n  async #visit(url) {\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n    this.#currentFetchRequest?.cancel();\n    this.#currentFetchRequest = request;\n\n    return new Promise((resolve) => {\n      this.#resolveVisitPromise = () => {\n        this.#resolveVisitPromise = () => {};\n        this.#currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    })\n  }\n\n  #navigateFrame(element, url, submitter) {\n    const frame = this.#findFrameElement(element, submitter);\n\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n    this.#withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n\n  proposeVisitIfNavigatedWithAction(frame, action = null) {\n    this.action = action;\n\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n\n      frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = await fetchResponse.responseHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n\n          if (this.action) options.action = this.action;\n\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n\n  async #handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(\n      `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n    );\n\n    await this.#visitResponse(fetchResponse.response);\n  }\n\n  #willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n\n    const response = fetchResponse.response;\n    const visit = async (url, options) => {\n      if (url instanceof Response) {\n        this.#visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit },\n      cancelable: true\n    });\n\n    return !event.defaultPrevented\n  }\n\n  #handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.#throwFrameMissingError(fetchResponse);\n  }\n\n  #throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message)\n  }\n\n  async #visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location, redirected, statusCode } = wrapped;\n\n    return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n  }\n\n  #findFrameElement(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return getFrameElementById(id) ?? this.element\n  }\n\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element\n      }\n\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element)\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement()\n    }\n\n    return null\n  }\n\n  #formActionIsVisitable(form, submitter) {\n    const action = getAction$1(form, submitter);\n\n    return locationIsVisitable(expandURL(action), this.rootLocation)\n  }\n\n  #shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n    if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n      return false\n    }\n\n    if (!this.enabled || id == \"_top\") {\n      return false\n    }\n\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled\n      }\n    }\n\n    if (!session.elementIsNavigatable(element)) {\n      return false\n    }\n\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false\n    }\n\n    return true\n  }\n\n  // Computed properties\n\n  get id() {\n    return this.element.id\n  }\n\n  get enabled() {\n    return !this.element.disabled\n  }\n\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src\n    }\n  }\n\n  set sourceURL(sourceURL) {\n    this.#ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL ?? null;\n    });\n  }\n\n  get loadingStyle() {\n    return this.element.loading\n  }\n\n  get isLoading() {\n    return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n  }\n\n  get complete() {\n    return this.element.hasAttribute(\"complete\")\n  }\n\n  set complete(value) {\n    if (value) {\n      this.element.setAttribute(\"complete\", \"\");\n    } else {\n      this.element.removeAttribute(\"complete\");\n    }\n  }\n\n  get isActive() {\n    return this.element.isActive && this.#connected\n  }\n\n  get rootLocation() {\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = meta?.content ?? \"/\";\n    return expandURL(root)\n  }\n\n  #isIgnoringChangesTo(attributeName) {\n    return this.#ignoredAttributes.has(attributeName)\n  }\n\n  #ignoringChangesToAttribute(attributeName, callback) {\n    this.#ignoredAttributes.add(attributeName);\n    callback();\n    this.#ignoredAttributes.delete(attributeName);\n  }\n\n  #withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n}\n\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element\n    }\n  }\n}\n\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element\n    }\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n  },\n\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n\n  before() {\n    this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n  },\n\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n\n  replace() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphElements(targetElement, this.templateContent);\n      } else {\n        targetElement.replaceWith(this.templateContent);\n      }\n    });\n  },\n\n  update() {\n    const method = this.getAttribute(\"method\");\n\n    this.targetElements.forEach((targetElement) => {\n      if (method === \"morph\") {\n        morphChildren(targetElement, this.templateContent);\n      } else {\n        targetElement.innerHTML = \"\";\n        targetElement.append(this.templateContent);\n      }\n    });\n  },\n\n  refresh() {\n    session.refresh(this.baseURI, this.requestId);\n  }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of eight ways:\n *\n * - `after` - inserts the result after the target\n * - `append` - appends the result to the target\n * - `before` - inserts the result before the target\n * - `prepend` - prepends the result to the target\n * - `refresh` - initiates a page refresh\n * - `remove` - removes the target\n * - `replace` - replaces the outer HTML of the target\n * - `update` - replaces the inner HTML of the target\n *\n * @customElement turbo-stream\n * @example\n *   <turbo-stream action=\"append\" target=\"dom_id\">\n *     <template>\n *       Content to append to target designated with the dom_id.\n *     </template>\n *   </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n\n  async render() {\n    return (this.renderPromise ??= (async () => {\n      const event = this.beforeRenderEvent;\n\n      if (this.dispatchEvent(event)) {\n        await nextRepaint();\n        await event.detail.render(this);\n      }\n    })())\n  }\n\n  disconnect() {\n    try {\n      this.remove();\n      // eslint-disable-next-line no-empty\n    } catch {}\n  }\n\n  /**\n   * Removes duplicate children (by ID)\n   */\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n\n  /**\n   * Gets the list of duplicate children (i.e. those with the same ID)\n   */\n  get duplicateChildren() {\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n  }\n\n  /**\n   * Gets the action function to be performed.\n   */\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction\n      }\n      this.#raise(\"unknown action\");\n    }\n    this.#raise(\"action attribute is missing\");\n  }\n\n  /**\n   * Gets the target elements which the template will be rendered to.\n   */\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById\n    } else if (this.targets) {\n      return this.targetElementsByQuery\n    } else {\n      this.#raise(\"target or targets attribute is missing\");\n    }\n  }\n\n  /**\n   * Gets the contents of the main `<template>`.\n   */\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true)\n  }\n\n  /**\n   * Gets the main `<template>` used for rendering\n   */\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild\n    }\n    this.#raise(\"first child element must be a <template> element\");\n  }\n\n  /**\n   * Gets the current action.\n   */\n  get action() {\n    return this.getAttribute(\"action\")\n  }\n\n  /**\n   * Gets the current target (an element ID) to which the result will\n   * be rendered.\n   */\n  get target() {\n    return this.getAttribute(\"target\")\n  }\n\n  /**\n   * Gets the current \"targets\" selector (a CSS selector)\n   */\n  get targets() {\n    return this.getAttribute(\"targets\")\n  }\n\n  /**\n   * Reads the request-id attribute\n   */\n  get requestId() {\n    return this.getAttribute(\"request-id\")\n  }\n\n  #raise(message) {\n    throw new Error(`${this.description}: ${message}`)\n  }\n\n  get description() {\n    return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n  }\n\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: StreamElement.renderElement }\n    })\n  }\n\n  get targetElementsById() {\n    const element = this.ownerDocument?.getElementById(this.target);\n\n    if (element !== null) {\n      return [element]\n    } else {\n      return []\n    }\n  }\n\n  get targetElementsByQuery() {\n    const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements)\n    } else {\n      return []\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  streamSource = null\n\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n    connectStreamSource(this.streamSource);\n  }\n\n  disconnectedCallback() {\n    if (this.streamSource) {\n      this.streamSource.close();\n\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n\n  get src() {\n    return this.getAttribute(\"src\") || \"\"\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  let element = document.currentScript;\n  if (!element) return\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(\n        unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `,\n        element.outerHTML\n      )\n    }\n\n    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, config, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  static observedAttributes = [\"channel\", \"signed-stream-name\"]\n\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n    this.subscriptionDisconnected()\n  }\n\n  attributeChangedCallback() {\n    if (this.subscription) {\n      this.disconnectedCallback()\n      this.connectedCallback()\n    }\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n    // for formmethod if the button does not have name or value attributes\n    // set, which is the default. This means that if you use <%= f.button\n    // formmethod: :delete %>, it will generate a <button name=\"_method\"\n    // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n    // is already _method, it's value attribute already contains the desired\n    // method.\n    if (submitter.name === '_method') {\n      return submitter.value\n    } else if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n", "// Import all the channels to be used by Action Cable\nimport \"./notifications_channel\"\nimport \"./reloader_channel\"", "import consumer from './consumer';\n\nif (\n  document.querySelector(`form[action=\"${location.pathname}\"][method=\"post\"]`)\n) {\n  1;\n  consumer.subscriptions.create(\n    { channel: 'ReloaderChannel', pathname: location.pathname },\n    {\n      connected() {\n        console.log('ReloaderChannel connected:');\n      },\n\n      disconnected() {\n        console.log('ReloaderChannel disconnected:');\n      },\n\n      received(data) {\n        if (document.querySelector('[name=commit]').hasAttribute('disabled'))\n          return;\n\n        const url = new URL(location);\n        const params = Object.fromEntries(url.searchParams);\n        const { forcedReload } = params;\n\n        if (typeof forcedReload === 'undefined' || forcedReload !== 'false')\n          url.searchParams.set('forced_reload', 'true');\n\n        window.onbeforeunload = null;\n        window.location.assign(url);\n      }\n    }\n  );\n}\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2022 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[1];\n    let keyFilter = matches[2];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[3]),\n        eventName,\n        eventOptions: matches[6] ? parseEventOptions(matches[6]) : {},\n        identifier: matches[4],\n        methodName: matches[5],\n        keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    isFilterTarget(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filteres = this.keyFilter.split(\"+\");\n        const modifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\n        const [meta, ctrl, alt, shift] = modifiers.map((modifier) => filteres.includes(modifier));\n        if (event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift) {\n            return true;\n        }\n        const standardFilter = filteres.filter((key) => !modifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!Object.prototype.hasOwnProperty.call(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(event)) {\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.isFilterTarget(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details = {}) {\n        this.selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const matches = element.matches(this.selector);\n        if (this.delegate.selectorMatchElement) {\n            return matches && this.delegate.selectorMatchElement(element, this.details);\n        }\n        return matches;\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector)).filter((match) => this.matchElement(match));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        this.selectorMatched(element);\n    }\n    elementUnmatched(element) {\n        this.selectorUnmatched(element);\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const matches = this.matchElement(element);\n        const matchedBefore = this.matchesByElement.has(this.selector, element);\n        if (!matches && matchedBefore) {\n            this.selectorUnmatched(element);\n        }\n    }\n    selectorMatched(element) {\n        if (this.delegate.selectorMatched) {\n            this.delegate.selectorMatched(element, this.selector, this.details);\n            this.matchesByElement.add(this.selector, element);\n        }\n    }\n    selectorUnmatched(element) {\n        this.delegate.selectorUnmatched(element, this.selector, this.details);\n        this.matchesByElement.delete(this.selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n    }\n    start() {\n        if (this.selectorObserverMap.size === 0) {\n            this.outletDefinitions.forEach((outletName) => {\n                const selector = this.selector(outletName);\n                const details = { outletName };\n                if (selector) {\n                    this.selectorObserverMap.set(outletName, new SelectorObserver(document.body, selector, this, details));\n                }\n            });\n            this.selectorObserverMap.forEach((observer) => observer.start());\n        }\n        this.dependentContexts.forEach((context) => context.refresh());\n    }\n    stop() {\n        if (this.selectorObserverMap.size > 0) {\n            this.disconnectAllOutlets();\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        return (this.hasOutlet(element, outletName) &&\n            element.matches(`[${this.context.application.schema.controllerAttribute}~=${outletName}]`));\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad(definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outlet = this.outlets.find(name);\n                if (outlet) {\n                    const outletController = this.application.getControllerForElementAndIdentifier(outlet, name);\n                    if (outletController) {\n                        return outletController;\n                    }\n                    else {\n                        throw new Error(`Missing \"data-controller=${name}\" attribute on outlet element for \"${this.identifier}\" controller`);\n                    }\n                }\n                throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outlet) => {\n                        const controller = this.application.getControllerForElementAndIdentifier(outlet, name);\n                        if (controller) {\n                            return controller;\n                        }\n                        else {\n                            console.warn(`The provided outlet element is missing the outlet controller \"${name}\" for \"${this.identifier}\"`, outlet);\n                        }\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outlet = this.outlets.find(name);\n                if (outlet) {\n                    return outlet;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n    if (!typeFromObject)\n        return;\n    const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n    if (typeFromObject !== defaultValueType) {\n        const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n    }\n    return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const typeFromObject = parseValueTypeObject({\n        controller: payload.controller,\n        token: payload.token,\n        typeObject: payload.typeDefinition,\n    });\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const key = `${dasherize(payload.token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(payload.typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(payload.typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus   = application\n\nexport { application }\n\n// stimulus logs for developer\nif (document.head.querySelector('meta[name=\"rails-env\"]').content === \"development\") {\n\tapplication.debug = true\n}", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"account-assignments-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton\n} from '../show_submit_buttons';\nimport { TomSelectElement } from '../types';\n\n// Connects to data-controller=\"agent-global-prompts\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  onAgentChange(e: Event) {\n    const selectEl = e.target as TomSelectElement;\n    const href = selectEl.dataset.href;\n\n    if (!href) return;\n\n    const url = new URL(href, location.toString());\n    url.searchParams.set('id', selectEl.tomselect.getValue());\n\n    window.location.href = url.toString();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"agent-local-prompts\"\nexport default class extends Controller {\n  static targets = ['charCount', 'textarea'];\n\n  declare readonly charCountTarget: HTMLSpanElement;\n  declare readonly textareaTarget: HTMLTextAreaElement;\n\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n    this.updateCharCount();\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  refreshCharCount() {\n    this.updateCharCount();\n  }\n\n  updateCharCount() {\n    const charCount = this.textareaTarget.value.length || 0;\n\n    this.charCountTarget.textContent = `${charCount}/6000`;\n\n    if (charCount >= 6000) {\n      this.charCountTarget.classList.remove('text-muted');\n      this.charCountTarget.classList.add('text-danger', 'fw-bold');\n    } else {\n      this.charCountTarget.classList.remove('text-danger', 'fw-bold');\n      this.charCountTarget.classList.add('text-muted');\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { open } from '../utils';\n\n// Connects to data-controller=\"ai-accounting-wrapper\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, { open });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { initializeTomSelect } from '../tom_select';\nimport { getJSON, postJSON, deleteJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\n\n// Connects to data-controller=\"attachments\"\nexport default class extends Controller<HTMLDivElement> {\n  static targets = [\n    'deleteBtn',\n    'noteEl',\n    'priznakEl',\n    'poslatPrilohuEl',\n    'priceOfferEl',\n  ];\n\n  declare deleteBtnTarget: HTMLButtonElement;\n  declare noteElTarget: HTMLInputElement;\n  declare priznakElTarget: HTMLInputElement;\n  declare poslatPrilohuElTarget: HTMLInputElement;\n  declare priceOfferElTarget: HTMLInputElement;\n  declare hasNoteElTarget: boolean;\n  declare hasPriznakElTarget: boolean;\n  declare hasPoslatPrilohuElTarget: boolean;\n  declare hasPriceOfferElTarget: boolean;\n\n  connect() {}\n\n  onChange() {\n    if (!this.deleteBtnTarget.classList.contains('hidden')) {\n      const visibleButtons = this.element.querySelectorAll(\n        'button:not(.hidden)'\n      );\n      const hiddenButtons = this.element.querySelectorAll('button.hidden');\n\n      visibleButtons.forEach(button => {\n        button.classList.add('hidden');\n        button.setAttribute('hidden', 'hidden');\n      });\n\n      hiddenButtons.forEach(button => {\n        button.classList.remove('hidden');\n        button.removeAttribute('hidden');\n      });\n    }\n  }\n\n  async cancel() {\n    try {\n      const { id } = this.element.dataset;\n      const json = await getJSON(`/file/cancel/${id}`);\n      const { html } = json;\n\n      this.element.outerHTML = html;\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async save() {\n    try {\n      const { id } = this.element.dataset;\n\n      const attributes = <\n        {\n          poznamka?: string;\n          priznak?: string;\n          poslat_prilohu?: boolean;\n          cenova_ponuka?: boolean;\n        }\n      >{};\n\n      this.hasNoteElTarget && (attributes.poznamka = this.noteElTarget.value);\n      this.hasPriznakElTarget &&\n        (attributes.priznak = this.priznakElTarget.value);\n      this.hasPoslatPrilohuElTarget &&\n        (attributes.poslat_prilohu = this.poslatPrilohuElTarget.checked);\n      this.hasPriceOfferElTarget &&\n        (attributes.cenova_ponuka = this.priceOfferElTarget.checked);\n\n      const json = await postJSON(\n        `/subor_prepojenies/${id}`,\n        {\n          subor_prepojenie_attributes: attributes,\n        },\n        'PATCH'\n      );\n\n      const { status, message, html } = json;\n\n      if (!status) {\n        showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n\n        return;\n      }\n\n      showToastMessage(message);\n\n      this.element.outerHTML = html;\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async delete() {\n    try {\n      const { id } = this.element.dataset;\n      const { confirm: confirmMessage } = this.deleteBtnTarget.dataset;\n\n      if (!confirm(confirmMessage)) return;\n\n      const json = await deleteJSON(`/subor_prepojenies/${id}.json`);\n      const { status, message, url } = json;\n\n      if (!status) {\n        showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n\n        return;\n      }\n\n      showToastMessage(message);\n\n      const jsonWithHTML = await getJSON(url);\n      const { html } = jsonWithHTML;\n\n      const attachmentsEl = document.querySelector('#collapse_attachments');\n      if (attachmentsEl) {\n        destroyFilePond();\n        attachmentsEl.innerHTML = html;\n        initializeFilePond();\n      }\n\n      const label = document.querySelector('#label_attachments');\n      if (label) {\n        label.innerHTML = document\n          .querySelectorAll('#collapse_attachments .attachment')\n          .length.toString();\n      }\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import * as FilePond from 'filepond';\nimport sk_SK from 'filepond/locale/sk-sk';\nimport { showToastMessage } from './show_toast_message';\nimport makeRequest from './make_request';\nimport { initializeTomSelect } from './tom_select';\n\nexport function initializeFilePond() {\n  const dragAndDrop = document.querySelector('#drag_and_drop');\n\n  if (!dragAndDrop) return false;\n\n  const { url, okruhId, priznak } = dragAndDrop.dataset;\n\n  FilePond.setOptions(sk_SK);\n  const pond = FilePond.create({\n    multiple: true,\n    allowRevert: false,\n    name: 'subor',\n    server: {\n      headers: {\n        'X-CSRF-Token': document.querySelector(\"[name='csrf-token']\")?.content,\n      },\n      process: {\n        url: '/subors',\n        onload: data => {\n          let json = JSON.parse(data);\n\n          if (json.message) {\n            showToastMessage(json.message);\n          } else {\n            showToastMessage(json.error, {\n              autohide: false,\n              type: 'bg-danger',\n            });\n          }\n        },\n        onerror: response => response.data,\n        ondata: formData => {\n          if (okruhId === '') {\n            formData.append('subor_prepojenies_attributes[][priznak]', 4);\n          } else {\n            formData.append(\n              'subor_prepojenies_attributes[][okruh_id_a]',\n              okruhId\n            );\n            formData.append(\n              'subor_prepojenies_attributes[][id_a]',\n              document\n                .querySelector('form')\n                .getAttribute('action')\n                .split('/')\n                .pop()\n            );\n            formData.append(\n              'subor_prepojenies_attributes[][priznak]',\n              priznak || 1\n            );\n          }\n\n          return formData;\n        },\n      },\n    },\n    onprocessfile: (error, f) => {\n      if (error)\n        return showToastMessage(error, { autohide: false, type: 'bg-danger' });\n\n      makeRequest(url)\n        .then(response => {\n          destroyFilePond();\n          document.querySelector('#collapse_attachments').innerHTML =\n            response.html;\n          initializeFilePond();\n          document\n            .querySelector('#collapse_attachments .attachment:last-child')\n            ?.scrollIntoView(false);\n\n          const label = document.querySelector('#label_attachments');\n          if (label) {\n            label.innerHTML = document\n              .querySelectorAll('#collapse_attachments .attachment')\n              .length.toString();\n          }\n\n          const selectBoxes = document.querySelectorAll(\n            '#collapse_attachments select'\n          );\n\n          if (selectBoxes.length > 0) initializeTomSelect(selectBoxes);\n        })\n        .catch(error => {\n          showToastMessage(error, { autohide: false, type: 'bg-danger' });\n        });\n    },\n    credits: false,\n  });\n\n  dragAndDrop.appendChild(pond.element);\n}\n\nexport function destroyFilePond() {\n  const dragAndDrop = document.querySelector('#drag_and_drop');\n\n  if (dragAndDrop) dragAndDrop.innerHTML = '';\n}\n", "export default {\n    labelIdle: 'Natiahn\u00FA\u0165 s\u00FAbor (drag&drop) alebo <span class=\"filepond--label-action\"> Vyh\u013Eada\u0165 </span>',\n    labelInvalidField: 'Pole obsahuje chybn\u00E9 s\u00FAbory',\n    labelFileWaitingForSize: 'Zis\u0165uje sa ve\u013Ekos\u0165',\n    labelFileSizeNotAvailable: 'Nezn\u00E1ma ve\u013Ekos\u0165',\n    labelFileLoading: 'Pren\u00E1\u0161a sa',\n    labelFileLoadError: 'Chyba pri prenose',\n    labelFileProcessing: 'Prebieha upload',\n    labelFileProcessingComplete: 'Upload dokon\u010Den\u00FD',\n    labelFileProcessingAborted: 'Upload stornovan\u00FD',\n    labelFileProcessingError: 'Chyba pri uploade',\n    labelFileProcessingRevertError: 'Chyba pri obnove',\n    labelFileRemoveError: 'Chyba pri odstr\u00E1nen\u00ED',\n    labelTapToCancel: 'Kliknite pre storno',\n    labelTapToRetry: 'Kliknite pre opakovanie',\n    labelTapToUndo: 'Kliknite pre vr\u00E1tenie',\n    labelButtonRemoveItem: 'Odstr\u00E1ni\u0165',\n    labelButtonAbortItemLoad: 'Storno',\n    labelButtonRetryItemLoad: 'Opakova\u0165',\n    labelButtonAbortItemProcessing: 'Sp\u00E4\u0165',\n    labelButtonUndoItemProcessing: 'Vr\u00E1ti\u0165',\n    labelButtonRetryItemProcessing: 'Opakova\u0165',\n    labelButtonProcessItem: 'Upload',\n    labelMaxFileSizeExceeded: 'S\u00FAbor je pr\u00EDli\u0161 ve\u013Ek\u00FD',\n    labelMaxFileSize: 'Najv\u00E4\u010D\u0161ia ve\u013Ekos\u0165 s\u00FAboru je {filesize}',\n    labelMaxTotalFileSizeExceeded: 'Prekro\u010Den\u00E1 maxim\u00E1lna celkov\u00E1 ve\u013Ekos\u0165 s\u00FAboru',\n    labelMaxTotalFileSize: 'Maxim\u00E1lna celkov\u00E1 ve\u013Ekos\u0165 s\u00FAboru je {filesize}',\n    labelFileTypeNotAllowed: 'S\u00FAbor je nespr\u00E1vneho typu',\n    fileValidateTypeLabelExpectedTypes: 'O\u010Dak\u00E1va sa {allButLastType} alebo {lastType}',\n    imageValidateSizeLabelFormatError: 'Obr\u00E1zok tohto typu nie je podporovan\u00FD',\n    imageValidateSizeLabelImageSizeTooSmall: 'Obr\u00E1zok je pr\u00EDli\u0161 mal\u00FD',\n    imageValidateSizeLabelImageSizeTooBig: 'Obr\u00E1zok je pr\u00EDli\u0161 ve\u013Ek\u00FD',\n    imageValidateSizeLabelExpectedMinSize: 'Minim\u00E1lny rozmer je {minWidth} \u00D7 {minHeight}',\n    imageValidateSizeLabelExpectedMaxSize: 'Maxim\u00E1lny rozmer je {maxWidth} \u00D7 {maxHeight}',\n    imageValidateSizeLabelImageResolutionTooLow: 'Rozl\u00ED\u0161enie je pr\u00EDli\u0161 mal\u00E9',\n    imageValidateSizeLabelImageResolutionTooHigh: 'Rozli\u0161enie je pr\u00EDli\u0161 ve\u013Ek\u00E9',\n    imageValidateSizeLabelExpectedMinResolution: 'Minim\u00E1lne rozl\u00ED\u0161enie je {minResolution}',\n    imageValidateSizeLabelExpectedMaxResolution: 'Maxim\u00E1lne rozl\u00ED\u0161enie je {maxResolution}'\n};\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"bank-ucets\"\nexport default class extends Controller {\n  static targets = [\n    'swift',\n    'predcislie',\n    'cisloUctu',\n    'kodBanky',\n    'predcislieDiv',\n    'cisloUctuDiv',\n  ];\n\n  connect() {}\n\n  onCisBankaChange(e) {\n    const { code } = e.target.options[e.target.selectedIndex].dataset;\n\n    if (code === '0001') {\n      this.disableTargets();\n    } else {\n      this.enableTargets();\n    }\n  }\n\n  disableTargets() {\n    this.swiftTarget.classList.add('d-block');\n    this.swiftTarget.classList.remove('d-none');\n    this.predcislieTarget.setAttribute('disabled', 'disabled');\n    this.predcislieDivTarget.classList.add('col-sm-3');\n    this.predcislieDivTarget.classList.remove('col-sm-4');\n    this.cisloUctuTarget.setAttribute('disabled', 'disabled');\n    this.cisloUctuDivTarget.classList.add('col-sm-3');\n    this.cisloUctuDivTarget.classList.remove('col-sm-6');\n    this.kodBankyTarget.setAttribute('readonly', 'readonly');\n  }\n\n  enableTargets(e) {\n    this.swiftTarget.classList.add('d-none');\n    this.swiftTarget.classList.remove('d-block');\n    this.predcislieTarget.removeAttribute('disabled');\n    this.predcislieDivTarget.classList.remove('col-sm-3');\n    this.predcislieDivTarget.classList.add('col-sm-4');\n    this.cisloUctuTarget.removeAttribute('disabled');\n    this.cisloUctuDivTarget.classList.remove('col-sm-3');\n    this.cisloUctuDivTarget.classList.add('col-sm-6');\n    this.kodBankyTarget.removeAttribute('readonly');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\n\n// Connects to data-controller=\"bank-vypises\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"bank-vypises-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  openFilter() {\n    let url;\n    let filterId = this.element.querySelector(\n      '#filter_filter_bv_filter_id'\n    ).value;\n\n    if (filterId) {\n      url = `/bv_filters/${filterId}.html`;\n    } else {\n      url = '/bv_filters/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  setMarkedCount() {\n    makeRequest('/bank-vypises/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(err => {\n        showToastMessage(err, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  openNew() {\n    openURL('/bank_vypises/new');\n  }\n\n  deleteMarked() {\n    makeRequest('/bank-vypises/delete-marked')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  chargeMarked() {\n    makeRequest('/bank-vypises/charge-records/5.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(err => {\n        showToastMessage(err, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  printList(e) {\n    openURL(\n      `/bv_prints/${e.target.closest('.dropdown-item').dataset.groupsOnly}`,\n      { tab: true }\n    );\n  }\n\n  runPairing() {\n    makeRequest('/bank-vypises/pair', { method: 'GET' }).then(response => {\n      window.Turbo.renderStreamMessage(response.turbo_stream);\n    });\n  }\n\n  setBankUcet() {\n    const importDiv = this.element.querySelector('div#bv_import');\n    const select = importDiv.querySelector('select#data_bank_ucet_id');\n    const datumOd = importDiv.querySelector('input#data_datum_od');\n\n    makeRequest('bank-vypises/last-used-bank-ucet-id')\n      .then(response => {\n        if (select.options.length > 0) {\n          let value = response.bank_ucet_id || select.options[0].value;\n\n          select.tomselect.setValue(value);\n        }\n\n        if (response.datum_od) {\n          datumOd.value = response.datum_od;\n        }\n\n        this.onBankUcetChange({ target: select });\n      })\n      .catch(e => showToastMessage(e, { autohide: false, type: 'bg-danger' }));\n  }\n\n  onSubmit(e) {\n    const bankUcet = e.target.querySelector('select#data_bank_ucet_id');\n\n    if (\n      !confirm(\n        e.target.dataset.confirm.replace(\n          '<bank_account>',\n          bankUcet.tomselect.options[bankUcet.tomselect.getValue()].text\n        )\n      )\n    ) {\n      e.preventDefault();\n    }\n\n    e.target\n      .querySelector('#data_file')\n      .removeEventListener('change', this.submitOnfileChange, false);\n  }\n\n  onDrop(e) {\n    e.target.addEventListener('change', this.submitOnfileChange);\n  }\n\n  submitOnfileChange(e) {\n    e.target.closest('form').requestSubmit();\n  }\n\n  onBankUcetChange(e) {\n    this.element.querySelector('#data_file').value = '';\n\n    const parent = e.target.closest('div#bv_import');\n    const unicreditType = parent.querySelector('#unicredit_type');\n    const fioType = parent.querySelector('#fio_type');\n    const defaultType = parent.querySelector('#default_type');\n    const selectedOption = e.target.querySelector(\n      `option[value=\"${e.target.tomselect.getValue()}\"]`\n    );\n\n    unicreditType.classList.add('d-none');\n    fioType.classList.add('d-none');\n    defaultType.classList.remove('d-none');\n    parent\n      .querySelector('input#data_file')\n      .setAttribute('required', 'required');\n    parent.querySelector('input#data_token').removeAttribute('required');\n    parent.querySelector('input#data_datum_od').removeAttribute('required');\n\n    switch (selectedOption.dataset.kod) {\n      case '1111':\n        unicreditType.classList.remove('d-none');\n        break;\n      case '8330':\n        parent.querySelector('#data_token').value = '';\n\n        fioType.classList.remove('d-none');\n        defaultType.classList.add('d-none');\n\n        makeRequest(\n          `bank-vypises/last-used-bank-ucet-id?bank_ucet_id=${e.target.value}`\n        )\n          .then(response => {\n            parent.querySelector('input#data_file').removeAttribute('required');\n            parent\n              .querySelector('input#data_token')\n              .setAttribute('required', 'required');\n            parent\n              .querySelector('input#data_datum_od')\n              .setAttribute('required', 'required');\n\n            ['datum_od', 'token'].forEach(name => {\n              if (response[name]) {\n                parent.querySelector(`input#data_${name}`).value =\n                  response[name];\n              }\n            });\n          })\n          .catch(e =>\n            showToastMessage(e, { autohide: false, type: 'bg-danger' })\n          );\n\n        break;\n      default:\n        unicreditType.classList.add('d-none');\n        fioType.classList.add('d-none');\n        defaultType.classList.remove('d-none');\n        parent\n          .querySelector('input#data_file')\n          .setAttribute('required', 'required');\n        parent.querySelector('input#data_token').removeAttribute('required');\n        parent.querySelector('input#data_datum_od').removeAttribute('required');\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"canvas\"\nexport default class extends Controller {\n  connect() {\n    new bootstrap.Offcanvas(this.element)?.show();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"close-offcanvas\"\nexport default class extends Controller {\n\tconnect() {\n\t\tdocument.querySelectorAll(\".offcanvas\").forEach(canvas => {\n\t\t\tconst button = canvas.querySelector('button[data-bs-dismiss=\"offcanvas\"]');\n\n\t\t\tif (button) {\n\t\t\t\tbutton.click();\n\t\t\t}\n\t\t});\n\t}\n}", "import { Controller } from '@hotwired/stimulus';\nimport { TomSelectElement } from '../types';\nimport { reloadDanovyPomerOptions } from '../utils';\nimport { open } from '../utils';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\n// Connects to data-controller=\"danovy-pomer-selectbox\"\nexport default class extends Controller<HTMLDivElement> {\n  static targets = ['selectbox'];\n\n  static values = {\n    selected: Number\n  };\n\n  declare readonly selectboxTarget: TomSelectElement;\n  declare readonly reloadDanovyPomerOptions: Function;\n  declare readonly selectedValue: Number;\n\n  initialize(): void {\n    Object.assign(this, { reloadDanovyPomerOptions, open });\n\n    dayjs.extend(customParseFormat);\n  }\n\n  connect() {\n    if (!this.date || dayjs(this.date, 'DD.MM.YYYY', true).isValid()) {\n      this.reloadDanovyPomerOptions(this.date, this.selectedValue);\n    }\n  }\n\n  updateSelectedValue() {\n    this.element.dataset.danovyPomerSelectboxSelectedValue =\n      this.selectboxTarget.value;\n  }\n\n  get date(): string {\n    return (\n      (<HTMLInputElement>(\n        document.querySelector('input#dosla_faktura_datum_dodania')\n      ))?.value ||\n      (<HTMLInputElement>(\n        document.querySelector('input#dosla_zalohova_faktura_datum_vystavenia')\n      ))?.value ||\n      (<HTMLInputElement>(\n        document.querySelector('input#pokladnicny_doklad_datum_uhrady')\n      ))?.value\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { addFields } from '../add';\nimport { initializeTomSelect } from '../tom_select';\nimport { popupHelpers, onSyntUcetChange } from '../utils';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\nimport { openURL } from '../window_manager';\nimport { deleteResource } from '../delete';\n\n// Connects to data-controller=\"danovy-pomers-index\"\nexport default class extends Controller {\n  static targets = ['addFieldBtn'];\n\n  declare addFieldBtnTarget: HTMLButtonElement;\n\n  initialize(): void {\n    Object.assign(this, popupHelpers, { onSyntUcetChange });\n  }\n\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      this.addFieldBtnTarget,\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      },\n    );\n\n    this.addFieldBtnTarget.scrollIntoView(false);\n\n    e.preventDefault();\n  }\n\n  showUctovnyRozvrh() {\n    openURL('/uctovny_rozvrhs');\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource((<HTMLElement>e.target).closest('.delete-resource'));\n\n    e.preventDefault();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport {\n  callCalcSumFunction,\n  getStimulusController,\n  parseNumber,\n  formatNumber,\n  eightyPercent\n} from '../utils';\nimport { initializeTomSelect } from '../tom_select';\nimport { TomSelectElement } from '../types';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\n\n// Connects to data-controller=\"df-polozkas\"\nexport default class extends Controller<HTMLDivElement> {\n  static targets = [\n    'predmetEl',\n    'dphPercEl',\n    'syntAnalytUcetKodEl',\n    'sumaSDphEl',\n    'sumaBezDphEl',\n    'dphEl',\n    'danovyPomerEl',\n    'danovyPomerWrapper'\n  ];\n\n  declare readonly predmetElTarget: HTMLInputElement;\n  declare readonly dphPercElTarget: HTMLInputElement;\n  declare readonly syntAnalytUcetKodElTarget: HTMLSpanElement;\n  declare readonly sumaSDphElTarget: HTMLInputElement;\n  declare readonly sumaBezDphElTarget: HTMLInputElement;\n  declare readonly dphElTarget: HTMLInputElement;\n  declare readonly danovyPomerElTarget: TomSelectElement;\n  declare readonly danovyPomerWrapperTarget: HTMLDivElement;\n\n  initialize(): void {\n    Object.assign(this, {\n      eightyPercent: (e: Event) =>\n        eightyPercent.call(\n          this,\n          e,\n          this.eightyPercCallback.bind(this),\n          'df',\n          '20%'\n        )\n    });\n  }\n\n  showDfTyp() {\n    openURL('/df_typs', { parentUrl: new URL(location.toString()) });\n  }\n\n  onDfTypChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n    const { predmet, dphPerc, danovyPomer } =\n      target?.options[target.selectedIndex]?.dataset;\n\n    if (\n      !this.predmetElTarget.value ||\n      Array.from(target.options)\n        .flatMap(e => e.dataset.predmet || [])\n        .includes(this.predmetElTarget.value)\n    )\n      this.predmetElTarget.value = predmet || '';\n\n    this.dphPercElTarget.value = dphPerc ?? '';\n    this.setDphAndSumaBezDph();\n\n    this.refreshPrices();\n\n    this.syntAnalytUcetKodElTarget.innerHTML =\n      target.options[target.selectedIndex].dataset.accounts || '';\n\n    this.danovyPomerElTarget.tomselect.setValue(danovyPomer);\n\n    if (document.querySelector(\"form[id^='new_dosla_']\")) {\n      this.sumaSDphElTarget.focus();\n      this.sumaSDphElTarget.select();\n    }\n  }\n\n  copyDfPolozka(e: Event) {\n    const target = <HTMLElement>e.target;\n    const parent: HTMLSelectElement | null =\n      target.closest('[id$=\"df_polozkas\"]') ||\n      target.closest('[id$=\"dpf_polozkas\"]');\n\n    if (!parent) return;\n\n    const danovyPomerWrapperController = getStimulusController(\n      'danovy-pomer-selectbox',\n      this.danovyPomerWrapperTarget\n    );\n\n    (<HTMLAnchorElement>parent.querySelector('.add-fields')).click();\n    const copied = [\n      ...parent.querySelectorAll('[data-controller=\"df-polozkas\"]')\n    ].pop();\n\n    if (!copied) return;\n\n    // copy danovy pomer, options are lazy loaded, value needs to be prepared for\n    // danovy-pomer-selectbox controller\n    (<HTMLSelectElement>(\n      copied.querySelector('[data-danovy-pomer-selectbox-selected-value]')\n    )).dataset.danovyPomerSelectboxSelectedValue =\n      danovyPomerWrapperController.selectboxTarget.tomselect.getValue();\n\n    copied\n      .querySelectorAll('.tom-select')\n      .forEach(select =>\n        (<HTMLSelectElement & { tomselect: TomSelect }>(\n          select\n        )).tomselect?.destroy()\n      );\n\n    this.element\n      .querySelectorAll('select, input.form-control')\n      .forEach(element => {\n        const htmlEl = <HTMLInputElement | HTMLSelectElement>element;\n        (<HTMLInputElement | HTMLSelectElement>(\n          copied.querySelector(\n            `[name$=\"[${(htmlEl.name.match(/\\b\\w+/g) || []).pop()}]\"]`\n          )\n        )).value = htmlEl.value;\n      });\n\n    initializeTomSelect(copied.querySelectorAll('select.tom-select'));\n\n    this.refreshPrices();\n  }\n\n  onDphKeyup(e: Event) {\n    const target = <HTMLInputElement>e.target;\n\n    if (this.element.dataset.lastEdited === 'suma-s-dph') {\n      this.sumaBezDphElTarget.value = formatNumber(\n        parseNumber(this.sumaSDphElTarget.value) - parseNumber(target.value)\n      );\n    } else {\n      this.sumaSDphElTarget.value = formatNumber(\n        parseNumber(this.sumaBezDphElTarget.value) + parseNumber(target.value)\n      );\n    }\n\n    this.refreshPrices();\n  }\n\n  onSumaBezDphKeyup(e: Event) {\n    const target = <HTMLInputElement>e.target;\n\n    this.sumaSDphElTarget.value = formatNumber(\n      (parseNumber(target.value) / 100) *\n        (100 + parseNumber(this.dphPercElTarget.value))\n    );\n\n    this.dphElTarget.value = formatNumber(\n      parseNumber(this.sumaSDphElTarget.value) - parseNumber(target.value)\n    );\n\n    this.element.dataset.lastEdited = 'suma-bez-dph';\n\n    this.refreshPrices();\n  }\n\n  setDphAndSumaBezDph() {\n    const sumaSdphVal = parseNumber(this.sumaSDphElTarget.value);\n    const dphPercVal = parseNumber(this.dphPercElTarget.value);\n\n    this.dphElTarget.value = formatNumber(\n      sumaSdphVal - (sumaSdphVal / (100 + dphPercVal)) * 100\n    );\n    this.element.dataset.lastEdited = 'suma-s-dph';\n    this.sumaBezDphElTarget.value = formatNumber(\n      sumaSdphVal - parseNumber(this.dphElTarget.value)\n    );\n\n    this.refreshPrices();\n  }\n\n  private refreshPrices() {\n    getStimulusController('dosla-fakturas')?.calcSumCount() ||\n      callCalcSumFunction.call(this);\n  }\n\n  private eightyPercCallback(parentEl: HTMLElement, newEl: HTMLElement) {\n    // wait for controller to be initialized\n    setTimeout(() => {\n      [parentEl, newEl].forEach(el => {\n        const controller = <this>(\n          this.application.getControllerForElementAndIdentifier(\n            el,\n            'df-polozkas'\n          )\n        );\n\n        if (!controller) return;\n\n        controller.setDphAndSumaBezDph();\n\n        const event = new Event('change', { bubbles: true });\n        Object.defineProperty(event, 'target', {\n          writable: false,\n          value: el.querySelector('[name$=\"[df_typ_id]\"]')\n        });\n\n        controller.onDfTypChange(event);\n      });\n    }, 100);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { onSyntUcetChange } from '../utils';\n\n// Connects to data-controller=\"differences\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, {\n      onSyntUcetChange: onSyntUcetChange,\n    });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\nimport { postJSON, open } from '../utils';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { openURL } from '../window_manager';\nimport { TomSelectElement } from '../types';\nimport { initializeTomSelect } from '../tom_select';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { showToastMessage } from '../show_toast_message';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport {\n  formatNumber,\n  getJSON,\n  onPartnerChange,\n  onDodavatelChange\n} from '../utils';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\n// Connects to data-controller=\"dodaci-lists\"\nexport default class extends Controller {\n  static targets = [\n    'dodavatelEl',\n    'partnerEl',\n    'labelNumberEl',\n    'evidenciaEl',\n    'ciselnyRadEl',\n    'cisloDlEl',\n    'oldCisloEl',\n    'datumVystaveniaEl',\n    'kurzDiv',\n    'cisMenaEl',\n    'kurzEl'\n  ];\n\n  declare readonly dodavatelElTarget: HTMLSelectElement;\n  declare readonly partnerElTarget: HTMLSelectElement;\n  declare readonly labelNumberElTarget: HTMLSpanElement;\n  declare readonly evidenciaElTarget: TomSelectElement;\n  declare readonly ciselnyRadElTarget: TomSelectElement;\n  declare readonly cisloDlElTarget: HTMLInputElement;\n  declare readonly oldCisloElTarget: HTMLInputElement;\n  declare readonly datumVystaveniaElTarget: HTMLInputElement;\n  declare readonly kurzDivTarget: HTMLDivElement;\n  declare readonly cisMenaElTarget: HTMLSelectElement;\n  declare readonly kurzElTarget: HTMLInputElement;\n\n  initialize() {\n    Object.assign(this, popupHelpers, {\n      open,\n      onPartnerChange,\n      onDodavatelChange\n    });\n    dayjs.extend(customParseFormat);\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource((<HTMLElement>e.target).closest('.delete-resource'));\n\n    e.preventDefault();\n  }\n\n  showDodavatel(e: Event) {\n    openURL(`/dodavatels/${this.dodavatelElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n\n  showPartner(e: Event) {\n    openURL(`/partners/${this.partnerElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n\n  async onEvidChange(e: Event) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  async onCiselnyRadChange() {\n    await this.updateNumbering();\n    this.updateLabel();\n  }\n\n  updateLabel() {\n    [this.evidenciaElTarget, this.ciselnyRadElTarget].forEach(element => {\n      if (element.tomselect.getValue()) {\n        this.labelNumberElTarget.classList.remove('text-danger');\n        this.labelNumberElTarget.classList.add('text-primary');\n      } else {\n        this.labelNumberElTarget.classList.remove('text-primary');\n        this.labelNumberElTarget.classList.add('text-danger');\n      }\n    });\n\n    this.labelNumberElTarget.innerHTML = `${\n      this.evidenciaElTarget.options[this.evidenciaElTarget.selectedIndex]\n        .dataset.kod\n    }-${\n      this.ciselnyRadElTarget.options[this.ciselnyRadElTarget.selectedIndex]\n        .dataset.kod\n    }-${this.cisloDlElTarget.value}`;\n  }\n\n  async updateNumbering() {\n    try {\n      const json = await this.#getSampleNumbering();\n      const { level1 } = json;\n\n      this.cisloDlElTarget.value = level1;\n      this.oldCisloElTarget.value = level1;\n\n      showSubmitButton(this.cisloDlElTarget);\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async #getSampleNumbering() {\n    try {\n      const url = new URL(\n        '/ciselny_rads/get-sample-numbering',\n        location.toString()\n      );\n\n      if (!this.datumVystaveniaElTarget.value) return;\n\n      return await postJSON(\n        url,\n        {\n          ciselny_rad_id: this.ciselnyRadElTarget.value,\n          datum: this.datumVystaveniaElTarget.value\n        },\n        'PATCH'\n      );\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showCiselnyRad(e: Event) {\n    if (this.ciselnyRadElTarget.value) {\n      openURL(`/ciselny_rads/${this.ciselnyRadElTarget.value}`, {\n        parentUrl: new URL(location.toString())\n      });\n    } else {\n      openURL(`/ciselny_rads/new/${this.evidenciaElTarget.value}`, {\n        parentUrl: new URL(location.toString())\n      });\n    }\n  }\n\n  onCisMenaChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n\n    this.kurzDivTarget.classList[target.value == '1' ? 'add' : 'remove'](\n      'd-none'\n    );\n\n    this.updateCurrencyRate();\n  }\n\n  async updateCurrencyRate() {\n    try {\n      if (\n        !dayjs(this.datumVystaveniaElTarget.value, 'DD.MM.YYYY', true).isValid()\n      )\n        return;\n\n      const rate = await getJSON(\n        `/currency-rates/get-by-date?date=${this.datumVystaveniaElTarget.value}&cis_mena_id=${this.cisMenaElTarget.value}`\n      );\n\n      this.kurzElTarget.value = formatNumber(rate, 4);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { getJSON } from './utils';\n\nexport async function fillCiselnyRadOnEvidChange(target, presetValue = null) {\n  try {\n    const ciselnyRadEl = document.querySelector(\n      `#${target.id.replace('_evidencia_id', '_ciselny_rad_id')}`\n    );\n\n    if (!ciselnyRadEl) return;\n\n    const tomselectObj = ciselnyRadEl.tomselect;\n\n    if (!tomselectObj) return;\n\n    // deselecting\n    if (!target.value) {\n      tomselectObj.clear(true);\n      tomselectObj.clearOptions();\n\n      return;\n    }\n\n    const json = await getJSON(\n      `/ciselny_rads/all-by-evid/${parseInt(target.value)}`\n    );\n    const { concated, allowClear } = ciselnyRadEl.dataset;\n    const textRegex = /[a-z]/g;\n\n    tomselectObj.input.innerHTML = `<option value label=\" \"></option>`;\n    tomselectObj.clear(true);\n    tomselectObj.clearOptions();\n\n    json.forEach(cr => {\n      concated && concated.match(textRegex)\n        ? (tomselectObj.input.innerHTML += `<option value=\"${cr.id}\" data-kod=\"${cr.kod}\">${cr.kod} - ${cr.nazov}</option>`)\n        : (tomselectObj.input.innerHTML += `<option value=\"${cr.id}\">${cr.kod}</option>`);\n\n      tomselectObj.sync();\n    });\n\n    target.tomselect.blur();\n    ciselnyRadEl.tomselect.blur();\n\n    if (presetValue) {\n      tomselectObj.setValue(presetValue);\n\n      return;\n    }\n\n    if (allowClear) {\n      tomselectObj.setValue('');\n\n      return;\n    }\n\n    if (json.length > 0) tomselectObj.setValue(json[0].id);\n  } catch (err) {\n    throw err;\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showRecord } from '../utils';\n\n// Connects to data-controller=\"dodaci-lists-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  initialize(): void {\n    Object.assign(this, { showRecord });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e: Event) {\n    updateAdditionalInfo(e.target);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { getStimulusController } from '../utils';\nimport { whenControllerReady } from '../utils';\n\n// Connects to data-controller=\"dodaci-lists-new\"\nexport default class extends Controller {\n  static targets = ['partnerEl', 'dodavatelEl'];\n\n  declare readonly partnerElTarget: HTMLSelectElement;\n  declare readonly dodavatelElTarget: HTMLSelectElement;\n\n  connect() {}\n\n  onPartnerChange() {\n    if (!this.partnerElTarget.value || !this.dodavatelElTarget.value) return;\n\n    const { copy } = this.partnerElTarget.dataset;\n\n    if (copy === 'true') return;\n\n    openURL(\n      `/dodaci_lists/new/${this.partnerElTarget.value}/${this.dodavatelElTarget.value}`,\n      { target: '_self' }\n    );\n  }\n\n  onCiselnyRadChange() {\n    getStimulusController('dodaci-lists', this.element)?.onCiselnyRadChange();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"form-changes\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport FormChangesController from './form_changes_controller';\nimport { deleteJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { initializeFilePond, destroyFilePond } from '../filepond';\nimport { showRecord } from '../utils';\n\n// Connects to data-controller=\"objednavkas-show\"\nexport default class extends FormChangesController {\n  initialize(): void {\n    Object.assign(this, { showRecord });\n  }\n\n  connect() {\n    super.connect();\n\n    initializeFilePond();\n  }\n\n  disconnect(): void {\n    destroyFilePond();\n  }\n\n  async deleteRecord(e: Event) {\n    try {\n      const target = <HTMLAnchorElement>(\n        (<HTMLElement>e.target).closest('.dropdown-item')\n      );\n      const { confirm: confirmMessage } = target.dataset;\n\n      if (!confirm(confirmMessage)) return;\n\n      const json = await deleteJSON(\n        `${(<HTMLFormElement>this.element.querySelector('form')).action}.json`\n      );\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n      if (turboStream) window.Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { onSyntUcetChange } from '../utils';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { updatePozicia } from '../update_pozicia';\nimport * as sortable from 'html5sortable/dist/html5sortable.es';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { dfPolozkasKeyupEvents } from '../df_polozkas';\nimport { openURL } from '../window_manager';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"dodavatels\"\nexport default class extends Controller {\n  connect() {\n    this.onSyntUcetChange = onSyntUcetChange.bind(this);\n\n    this.#initSortable(\n      '#dodavatel_def_of_fakt_polozkies',\n      '.invoiced-item',\n      this.#invoicedItemSortableCallback\n    );\n\n    this.#initSortable(\n      '#dodavatel_def_of_bank_ucets',\n      '.b-account',\n      this.#bAccountSortableCallback\n    );\n\n    this.element.addEventListener('keyup', dfPolozkasKeyupEvents.bind(this));\n  }\n\n  disconnect() {\n    this.#destroySortable(\n      '#dodavatel_def_of_fakt_polozkies',\n      this.#invoicedItemSortableCallback\n    );\n\n    this.#destroySortable(\n      '#dodavatel_def_of_bank_ucets',\n      this.#bAccountSortableCallback\n    );\n  }\n\n  onSubmitButton() {\n    window.onbeforeunload = null;\n  }\n\n  onStornoButton() {\n    window.onbeforeunload = null;\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  onAddFieldButton(e) {\n    e.preventDefault();\n\n    if (!document.startViewTransition) {\n      return this.#add(e);\n    }\n\n    document.startViewTransition(() => {\n      this.#add(e);\n    });\n  }\n\n  showUctovnyRozvrh() {\n    openURL('/uctovny_rozvrhs');\n  }\n\n  #add(e) {\n    addFields(e.target.closest('.add-fields'), (copiedDiv, _) => {\n      initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n      copiedDiv\n        .querySelectorAll('input.vanillajs-datepicker')\n        .forEach(input => {\n          initializeVanillajsDatepicker(input);\n        });\n\n      if (copiedDiv.classList.contains('b-account')) {\n        updatePozicia('.b-account');\n\n        this.#initSortable(\n          '#dodavatel_def_of_bank_ucets',\n          '.b-account',\n          this.#bAccountSortableCallback\n        );\n      }\n\n      if (copiedDiv.classList.contains('invoiced-item')) {\n        updatePozicia('.invoiced-item');\n\n        this.#initSortable(\n          '#dodavatel_def_of_fakt_polozkies',\n          '.invoiced-item',\n          this.#invoicedItemSortableCallback\n        );\n      }\n\n      if (copiedDiv.classList.contains('df-polozka')) {\n        dfPolozkasKeyupEvents.call(this, {\n          target: copiedDiv.querySelector('[id*=\"_dph_perc\"]'),\n        });\n      }\n\n      this.#refreshLabel(e.target.closest('.add-fields'), copiedDiv);\n    });\n  }\n\n  onDeleteResourceButton(e) {\n    deleteResource(e.currentTarget, (parentName, parent) => {\n      switch (parentName) {\n        case 'invoiced-item':\n        case 'b-account':\n          updatePozicia('.invoiced-item');\n\n          break;\n        default:\n          parent\n            .querySelector('input[type=\"text\"]:not(.vanillajs-datepicker)')\n            .dispatchEvent(new Event('keyup'));\n      }\n\n      this.#refreshLabel(e.currentTarget, parent);\n    });\n  }\n\n  #initSortable(container, item, callback) {\n    sortable.default(this.element.querySelectorAll(container), {\n      items: this.element.querySelectorAll(\n        `${item}:not(.last-row-with-button)`\n      ),\n      handle: '.move',\n    });\n\n    sortable\n      .default(this.element.querySelectorAll(container))[0]\n      .addEventListener('sortstop', callback); // update position when sort order changes\n  }\n\n  #destroySortable(container, callback) {\n    sortable\n      .default(this.element.querySelectorAll(container))[0]\n      .removeEventListener('sortstop', callback, false);\n\n    sortable.default(this.element.querySelectorAll(container), 'destroy');\n  }\n\n  #invoicedItemSortableCallback(e) {\n    updatePozicia('.invoiced-item');\n    showSubmitButton(e.detail.origin.container);\n  }\n\n  #bAccountSortableCallback(e) {\n    updatePozicia('.b-account');\n    showSubmitButton(e.detail.origin.container);\n  }\n\n  #refreshLabel(btn, el) {\n    const labelEl = el\n      .closest('.accordion-item')\n      .querySelector('.accordion-header span[id*=\"_label\"]');\n\n    if (!labelEl) return;\n\n    labelEl.innerHTML =\n      +labelEl.innerHTML + (btn.classList.contains('delete-resource') ? -1 : 1);\n  }\n}\n", "export function lastItemOf(arr) {\n  return arr[arr.length - 1];\n}\n\n// push only the items not included in the array\nexport function pushUnique(arr, ...items) {\n  items.forEach((item) => {\n    if (arr.includes(item)) {\n      return;\n    }\n    arr.push(item);\n  });\n  return arr;\n}\n\nexport function stringToArray(str, separator) {\n  // convert empty string to an empty array\n  return str ? str.split(separator) : [];\n}\n\nexport function isInRange(testVal, min, max) {\n  const minOK = min === undefined || testVal >= min;\n  const maxOK = max === undefined || testVal <= max;\n  return minOK && maxOK;\n}\n\nexport function limitToRange(val, min, max) {\n  if (val < min) {\n    return min;\n  }\n  if (val > max) {\n    return max;\n  }\n  return val;\n}\n\nexport function createTagRepeat(tagName, repeat, attributes = {}, index = 0, html = '') {\n  const openTagSrc = Object.keys(attributes).reduce((src, attr) => {\n    let val = attributes[attr];\n    if (typeof val === 'function') {\n      val = val(index);\n    }\n    return `${src} ${attr}=\"${val}\"`;\n  }, tagName);\n  html += `<${openTagSrc}></${tagName}>`;\n\n  const next = index + 1;\n  return next < repeat\n    ? createTagRepeat(tagName, repeat, attributes, next, html)\n    : html;\n}\n\n// Remove the spacing surrounding tags for HTML parser not to create text nodes\n// before/after elements\nexport function optimizeTemplateHTML(html) {\n  return html.replace(/>\\s+/g, '>').replace(/\\s+</, '<');\n}\n", "export function stripTime(timeValue) {\n  return new Date(timeValue).setHours(0, 0, 0, 0);\n}\n\nexport function today() {\n  return new Date().setHours(0, 0, 0, 0);\n}\n\n// Get the time value of the start of given date or year, month and day\nexport function dateValue(...args) {\n  switch (args.length) {\n    case 0:\n      return today();\n    case 1:\n      return stripTime(args[0]);\n  }\n\n  // use setFullYear() to keep 2-digit year from being mapped to 1900-1999\n  const newDate = new Date(0);\n  newDate.setFullYear(...args);\n  return newDate.setHours(0, 0, 0, 0);\n}\n\nexport function addDays(date, amount) {\n  const newDate = new Date(date);\n  return newDate.setDate(newDate.getDate() + amount);\n}\n\nexport function addWeeks(date, amount) {\n  return addDays(date, amount * 7);\n}\n\nexport function addMonths(date, amount) {\n  // If the day of the date is not in the new month, the last day of the new\n  // month will be returned. e.g. Jan 31 + 1 month \u2192 Feb 28 (not Mar 03)\n  const newDate = new Date(date);\n  const monthsToSet = newDate.getMonth() + amount;\n  let expectedMonth = monthsToSet % 12;\n  if (expectedMonth < 0) {\n    expectedMonth += 12;\n  }\n\n  const time = newDate.setMonth(monthsToSet);\n  return newDate.getMonth() !== expectedMonth ? newDate.setDate(0) : time;\n}\n\nexport function addYears(date, amount) {\n  // If the date is Feb 29 and the new year is not a leap year, Feb 28 of the\n  // new year will be returned.\n  const newDate = new Date(date);\n  const expectedMonth = newDate.getMonth();\n  const time = newDate.setFullYear(newDate.getFullYear() + amount);\n  return expectedMonth === 1 && newDate.getMonth() === 2 ? newDate.setDate(0) : time;\n}\n\n// Calculate the distance bettwen 2 days of the week\nfunction dayDiff(day, from) {\n  return (day - from + 7) % 7;\n}\n\n// Get the date of the specified day of the week of given base date\nexport function dayOfTheWeekOf(baseDate, dayOfWeek, weekStart = 0) {\n  const baseDay = new Date(baseDate).getDay();\n  return addDays(baseDate, dayDiff(dayOfWeek, weekStart) - dayDiff(baseDay, weekStart));\n}\n\nfunction calcWeekNum(dayOfTheWeek, sameDayOfFirstWeek) {\n  return Math.round((dayOfTheWeek - sameDayOfFirstWeek) / 604800000) + 1;\n}\n\n// Get the ISO week number of a date\nexport function getIsoWeek(date) {\n  // - Start of ISO week is Monday\n  // - Use Thursday for culculation because the first Thursday of ISO week is\n  //   always in January\n  const thuOfTheWeek = dayOfTheWeekOf(date, 4, 1);\n  // - Week 1 in ISO week is the week including Jan 04\n  // - Use the Thu of given date's week (instead of given date itself) to\n  //   calculate week 1 of the year so that Jan 01 - 03 won't be miscalculated\n  //   as week 0 when Jan 04 is Mon - Wed\n  const firstThu = dayOfTheWeekOf(new Date(thuOfTheWeek).setMonth(0, 4), 4, 1);\n  // return Math.round((thuOfTheWeek - firstThu) / 604800000) + 1;\n  return calcWeekNum(thuOfTheWeek, firstThu);\n}\n\n// Calculate week number in traditional week number system\n// @see https://en.wikipedia.org/wiki/Week#Other_week_numbering_systems\nfunction calcTraditionalWeekNumber(date, weekStart) {\n  // - Week 1 of traditional week is the week including the Jan 01\n  // - Use Jan 01 of given date's year to calculate the start of week 1\n  const startOfFirstWeek = dayOfTheWeekOf(new Date(date).setMonth(0, 1), weekStart, weekStart);\n  const startOfTheWeek = dayOfTheWeekOf(date, weekStart, weekStart);\n  const weekNum = calcWeekNum(startOfTheWeek, startOfFirstWeek);\n  if (weekNum < 53) {\n    return weekNum;\n  }\n  // If the 53rd week includes Jan 01, it's actually next year's week 1\n  const weekOneOfNextYear = dayOfTheWeekOf(new Date(date).setDate(32), weekStart, weekStart);\n  return startOfTheWeek === weekOneOfNextYear ? 1 : weekNum;\n}\n\n// Get the Western traditional week number of a date\nexport function getWesternTradWeek(date) {\n  // Start of Western traditionl week is Sunday\n  return calcTraditionalWeekNumber(date, 0);\n}\n\n// Get the Middle Eastern week number of a date\nexport function getMidEasternWeek(date) {\n  // Start of Middle Eastern week is Saturday\n  return calcTraditionalWeekNumber(date, 6);\n}\n\n// Get the start year of the period of years that includes given date\n// years: length of the year period\nexport function startOfYearPeriod(date, years) {\n  /* @see https://en.wikipedia.org/wiki/Year_zero#ISO_8601 */\n  const year = new Date(date).getFullYear();\n  return Math.floor(year / years) * years;\n}\n\n// Convert date to the first/last date of the month/year of the date\nexport function regularizeDate(date, timeSpan, useLastDate) {\n  if (timeSpan !== 1 && timeSpan !== 2) {\n    return date;\n  }\n  const newDate = new Date(date);\n  if (timeSpan === 1) {\n    useLastDate\n      ? newDate.setMonth(newDate.getMonth() + 1, 0)\n      : newDate.setDate(1);\n  } else {\n    useLastDate\n      ? newDate.setFullYear(newDate.getFullYear() + 1, 0, 0)\n      : newDate.setMonth(0, 1);\n  }\n  return newDate.setHours(0, 0, 0, 0);\n}\n", "import {stripTime, today} from './date.js';\nimport {lastItemOf} from './utils.js';\n\n// pattern for format parts\nexport const reFormatTokens = /dd?|DD?|mm?|MM?|yy?(?:yy)?/;\n// pattern for non date parts\nexport const reNonDateParts = /[\\s!-/:-@[-`{-~\u5E74\u6708\u65E5]+/;\n// cache for persed formats\nlet knownFormats = {};\n// parse funtions for date parts\nconst parseFns = {\n  y(date, year) {\n    return new Date(date).setFullYear(parseInt(year, 10));\n  },\n  m(date, month, locale) {\n    const newDate = new Date(date);\n    let monthIndex = parseInt(month, 10) - 1;\n\n    if (isNaN(monthIndex)) {\n      if (!month) {\n        return NaN;\n      }\n\n      const monthName = month.toLowerCase();\n      const compareNames = name => name.toLowerCase().startsWith(monthName);\n      // compare with both short and full names because some locales have periods\n      // in the short names (not equal to the first X letters of the full names)\n      monthIndex = locale.monthsShort.findIndex(compareNames);\n      if (monthIndex < 0) {\n        monthIndex = locale.months.findIndex(compareNames);\n      }\n      if (monthIndex < 0) {\n        return NaN;\n      }\n    }\n\n    newDate.setMonth(monthIndex);\n    return newDate.getMonth() !== normalizeMonth(monthIndex)\n      ? newDate.setDate(0)\n      : newDate.getTime();\n  },\n  d(date, day) {\n    return new Date(date).setDate(parseInt(day, 10));\n  },\n};\n// format functions for date parts\nconst formatFns = {\n  d(date) {\n    return date.getDate();\n  },\n  dd(date) {\n    return padZero(date.getDate(), 2);\n  },\n  D(date, locale) {\n    return locale.daysShort[date.getDay()];\n  },\n  DD(date, locale) {\n    return locale.days[date.getDay()];\n  },\n  m(date) {\n    return date.getMonth() + 1;\n  },\n  mm(date) {\n    return padZero(date.getMonth() + 1, 2);\n  },\n  M(date, locale) {\n    return locale.monthsShort[date.getMonth()];\n  },\n  MM(date, locale) {\n    return locale.months[date.getMonth()];\n  },\n  y(date) {\n    return date.getFullYear();\n  },\n  yy(date) {\n    return padZero(date.getFullYear(), 2).slice(-2);\n  },\n  yyyy(date) {\n    return padZero(date.getFullYear(), 4);\n  },\n};\n\n// get month index in normal range (0 - 11) from any number\nfunction normalizeMonth(monthIndex) {\n  return monthIndex > -1 ? monthIndex % 12 : normalizeMonth(monthIndex + 12);\n}\n\nfunction padZero(num, length) {\n  return num.toString().padStart(length, '0');\n}\n\nfunction parseFormatString(format) {\n  if (typeof format !== 'string') {\n    throw new Error(\"Invalid date format.\");\n  }\n  if (format in knownFormats) {\n    return knownFormats[format];\n  }\n\n  // sprit the format string into parts and seprators\n  const separators = format.split(reFormatTokens);\n  const parts = format.match(new RegExp(reFormatTokens, 'g'));\n  if (separators.length === 0 || !parts) {\n    throw new Error(\"Invalid date format.\");\n  }\n\n  // collect format functions used in the format\n  const partFormatters = parts.map(token => formatFns[token]);\n\n  // collect parse function keys used in the format\n  // iterate over parseFns' keys in order to keep the order of the keys.\n  const partParserKeys = Object.keys(parseFns).reduce((keys, key) => {\n    const token = parts.find(part => part[0] !== 'D' && part[0].toLowerCase() === key);\n    if (token) {\n      keys.push(key);\n    }\n    return keys;\n  }, []);\n\n  return knownFormats[format] = {\n    parser(dateStr, locale) {\n      const dateParts = dateStr.split(reNonDateParts).reduce((dtParts, part, index) => {\n        if (part.length > 0 && parts[index]) {\n          const token = parts[index][0];\n          if (token === 'M') {\n            dtParts.m = part;\n          } else if (token !== 'D') {\n            dtParts[token] = part;\n          }\n        }\n        return dtParts;\n      }, {});\n\n      // iterate over partParserkeys so that the parsing is made in the oder\n      // of year, month and day to prevent the day parser from correcting last\n      // day of month wrongly\n      return partParserKeys.reduce((origDate, key) => {\n        const newDate = parseFns[key](origDate, dateParts[key], locale);\n        // ingnore the part failed to parse\n        return isNaN(newDate) ? origDate : newDate;\n      }, today());\n    },\n    formatter(date, locale) {\n      let dateStr = partFormatters.reduce((str, fn, index) => {\n        return str += `${separators[index]}${fn(date, locale)}`;\n      }, '');\n      // separators' length is always parts' length + 1,\n      return dateStr += lastItemOf(separators);\n    },\n  };\n}\n\nexport function parseDate(dateStr, format, locale) {\n  if (dateStr instanceof Date || typeof dateStr === 'number') {\n    const date = stripTime(dateStr);\n    return isNaN(date) ? undefined : date;\n  }\n  if (!dateStr) {\n    return undefined;\n  }\n  if (dateStr === 'today') {\n    return today();\n  }\n\n  if (format && format.toValue) {\n    const date = format.toValue(dateStr, format, locale);\n    return isNaN(date) ? undefined : stripTime(date);\n  }\n\n  return parseFormatString(format).parser(dateStr, locale);\n}\n\nexport function formatDate(date, format, locale) {\n  if (isNaN(date) || (!date && date !== 0)) {\n    return '';\n  }\n\n  const dateObj = typeof date === 'number' ? new Date(date) : date;\n\n  if (format.toDisplay) {\n    return format.toDisplay(dateObj, format, locale);\n  }\n\n  return parseFormatString(format).formatter(dateObj, locale);\n}\n", "const range = document.createRange();\n\nexport function parseHTML(html) {\n  return range.createContextualFragment(html);\n}\n\nexport function getParent(el) {\n  return el.parentElement\n    || (el.parentNode instanceof ShadowRoot ? el.parentNode.host : undefined);\n}\n\nexport function isActiveElement(el) {\n  return el.getRootNode().activeElement === el;\n}\n\n// equivalent to jQuery's :visble\nexport function isVisible(el) {\n  return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\n}\n\nexport function hideElement(el) {\n  if (el.style.display === 'none') {\n    return;\n  }\n  // back up the existing display setting in data-style-display\n  if (el.style.display) {\n    el.dataset.styleDisplay = el.style.display;\n  }\n  el.style.display = 'none';\n}\n\nexport function showElement(el) {\n  if (el.style.display !== 'none') {\n    return;\n  }\n  if (el.dataset.styleDisplay) {\n    // restore backed-up dispay property\n    el.style.display = el.dataset.styleDisplay;\n    delete el.dataset.styleDisplay;\n  } else {\n    el.style.display = '';\n  }\n}\n\nexport function emptyChildNodes(el) {\n  if (el.firstChild) {\n    el.removeChild(el.firstChild);\n    emptyChildNodes(el);\n  }\n}\n\nexport function replaceChildNodes(el, newChildNodes) {\n  emptyChildNodes(el);\n  if (newChildNodes instanceof DocumentFragment) {\n    el.appendChild(newChildNodes);\n  } else if (typeof newChildNodes === 'string') {\n    el.appendChild(parseHTML(newChildNodes));\n  } else if (typeof newChildNodes.forEach === 'function') {\n    newChildNodes.forEach((node) => {\n      el.appendChild(node);\n    });\n  }\n}\n", "const listenerRegistry = new WeakMap();\nconst {addEventListener, removeEventListener} = EventTarget.prototype;\n\n// Register event listeners to a key object\n// listeners: array of listener definitions;\n//   - each definition must be a flat array of event target and the arguments\n//     used to call addEventListener() on the target\nexport function registerListeners(keyObj, listeners) {\n  let registered = listenerRegistry.get(keyObj);\n  if (!registered) {\n    registered = [];\n    listenerRegistry.set(keyObj, registered);\n  }\n  listeners.forEach((listener) => {\n    addEventListener.call(...listener);\n    registered.push(listener);\n  });\n}\n\nexport function unregisterListeners(keyObj) {\n  let listeners = listenerRegistry.get(keyObj);\n  if (!listeners) {\n    return;\n  }\n  listeners.forEach((listener) => {\n    removeEventListener.call(...listener);\n  });\n  listenerRegistry.delete(keyObj);\n}\n\n// Event.composedPath() polyfill for Edge\n// based on https://gist.github.com/kleinfreund/e9787d73776c0e3750dcfcdc89f100ec\nif (!Event.prototype.composedPath) {\n  const getComposedPath = (node, path = []) => {\n    path.push(node);\n\n    let parent;\n    if (node.parentNode) {\n      parent = node.parentNode;\n    } else if (node.host) { // ShadowRoot\n      parent = node.host;\n    } else if (node.defaultView) {  // Document\n      parent = node.defaultView;\n    }\n    return parent ? getComposedPath(parent, path) : path;\n  };\n\n  Event.prototype.composedPath = function () {\n    return getComposedPath(this.target);\n  };\n}\n\nfunction findFromPath(path, criteria, currentTarget) {\n  const [node, ...rest] = path;\n  if (criteria(node)) {\n    return node;\n  }\n  if (node === currentTarget || node.tagName === 'HTML' || rest.length === 0) {\n    // stop when reaching currentTarget or <html>\n    return;\n  }\n  return findFromPath(rest, criteria, currentTarget);\n}\n\n// Search for the actual target of a delegated event\nexport function findElementInEventPath(ev, selector) {\n  const criteria = typeof selector === 'function'\n    ? selector\n    : el => el instanceof Element && el.matches(selector);\n  return findFromPath(ev.composedPath(), criteria, ev.currentTarget);\n}\n", "// default locales\nexport default {\n  en: {\n    days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    daysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    daysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n    months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n    monthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    today: \"Today\",\n    clear: \"Clear\",\n    titleFormat: \"MM y\"\n  }\n};\n", "// config options updatable by setOptions() and their default values\nexport default {\n  autohide: false,\n  beforeShowDay: null,\n  beforeShowDecade: null,\n  beforeShowMonth: null,\n  beforeShowYear: null,\n  clearButton: false,\n  dateDelimiter: ',',\n  datesDisabled: [],\n  daysOfWeekDisabled: [],\n  daysOfWeekHighlighted: [],\n  defaultViewDate: undefined, // placeholder, defaults to today() by the program\n  disableTouchKeyboard: false,\n  enableOnReadonly: true,\n  format: 'mm/dd/yyyy',\n  language: 'en',\n  maxDate: null,\n  maxNumberOfDates: 1,\n  maxView: 3,\n  minDate: null,\n  nextArrow: '\u00BB',\n  orientation: 'auto',\n  pickLevel: 0,\n  prevArrow: '\u00AB',\n  showDaysOfWeek: true,\n  showOnClick: true,\n  showOnFocus: true,\n  startView: 0,\n  title: '',\n  todayButton: false,\n  todayButtonMode: 0,\n  todayHighlight: false,\n  updateOnBlur: true,\n  weekNumbers: 0,\n  weekStart: 0,\n};\n", "import {pushUnique} from '../lib/utils.js';\nimport {\n  dateValue,\n  regularizeDate,\n  getIsoWeek,\n  getWesternTradWeek,\n  getMidEasternWeek,\n} from '../lib/date.js';\nimport {reFormatTokens, parseDate} from '../lib/date-format.js';\nimport {parseHTML} from '../lib/dom.js';\nimport defaultOptions from './defaultOptions.js';\n\nconst {\n  language: defaultLang,\n  format: defaultFormat,\n  weekStart: defaultWeekStart,\n} = defaultOptions;\n\n// Reducer function to filter out invalid day-of-week from the input\nfunction sanitizeDOW(dow, day) {\n  return dow.length < 6 && day >= 0 && day < 7\n    ? pushUnique(dow, day)\n    : dow;\n}\n\nfunction determineGetWeekMethod(numberingMode, weekStart) {\n  const methodId = numberingMode === 4\n    ? (weekStart === 6 ? 3 : !weekStart + 1)\n    : numberingMode;\n  switch (methodId) {\n    case 1:\n      return getIsoWeek;\n    case 2:\n      return getWesternTradWeek;\n    case 3:\n      return getMidEasternWeek;\n  }\n}\n\nfunction updateWeekStart(newValue, config, weekNumbers) {\n  config.weekStart = newValue;\n  config.weekEnd = (newValue + 6) % 7;\n  if (weekNumbers === 4) {\n    config.getWeekNumber = determineGetWeekMethod(4, newValue);\n  }\n  return newValue;\n}\n\n// validate input date. if invalid, fallback to the original value\nfunction validateDate(value, format, locale, origValue) {\n  const date = parseDate(value, format, locale);\n  return date !== undefined ? date : origValue;\n}\n\n// Validate viewId. if invalid, fallback to the original value\nfunction validateViewId(value, origValue, max = 3) {\n  const viewId = parseInt(value, 10);\n  return viewId >= 0 && viewId <= max ? viewId : origValue;\n}\n\nfunction replaceOptions(options, from, to, convert = undefined) {\n  if (from in options) {\n    if (!(to in options)) {\n      options[to] = convert ? convert(options[from]) : options[from];\n    }\n    delete options[from];\n  }\n}\n\n// Create Datepicker configuration to set\nexport default function processOptions(options, datepicker) {\n  const inOpts = Object.assign({}, options);\n  const config = {};\n  const locales = datepicker.constructor.locales;\n  const rangeEnd = !!datepicker.rangeSideIndex;\n  let {\n    datesDisabled,\n    format,\n    language,\n    locale,\n    maxDate,\n    maxView,\n    minDate,\n    pickLevel,\n    startView,\n    weekNumbers,\n    weekStart,\n  } = datepicker.config || {};\n\n  // for backword compatibility\n  replaceOptions(inOpts, 'calendarWeeks', 'weekNumbers', val => val ? 1 : 0);\n  replaceOptions(inOpts, 'clearBtn', 'clearButton');\n  replaceOptions(inOpts, 'todayBtn', 'todayButton');\n  replaceOptions(inOpts, 'todayBtnMode', 'todayButtonMode');\n\n  if (inOpts.language) {\n    let lang;\n    if (inOpts.language !== language) {\n      if (locales[inOpts.language]) {\n        lang = inOpts.language;\n      } else {\n        // Check if langauge + region tag can fallback to the one without\n        // region (e.g. fr-CA \u2192 fr)\n        lang = inOpts.language.split('-')[0];\n        if (!locales[lang]) {\n          lang = false;\n        }\n      }\n    }\n    delete inOpts.language;\n    if (lang) {\n      language = config.language = lang;\n\n      // update locale as well when updating language\n      const origLocale = locale || locales[defaultLang];\n      // use default language's properties for the fallback\n      locale = Object.assign({\n        format: defaultFormat,\n        weekStart: defaultWeekStart\n      }, locales[defaultLang]);\n      if (language !== defaultLang) {\n        Object.assign(locale, locales[language]);\n      }\n      config.locale = locale;\n      // if format and/or weekStart are the same as old locale's defaults,\n      // update them to new locale's defaults\n      if (format === origLocale.format) {\n        format = config.format = locale.format;\n      }\n      if (weekStart === origLocale.weekStart) {\n        weekStart = updateWeekStart(locale.weekStart, config, weekNumbers);\n      }\n    }\n  }\n\n  if (inOpts.format) {\n    const hasToDisplay = typeof inOpts.format.toDisplay === 'function';\n    const hasToValue = typeof inOpts.format.toValue === 'function';\n    const validFormatString = reFormatTokens.test(inOpts.format);\n    if ((hasToDisplay && hasToValue) || validFormatString) {\n      format = config.format = inOpts.format;\n    }\n    delete inOpts.format;\n  }\n\n  //*** pick level ***//\n  let newPickLevel = pickLevel;\n  if ('pickLevel' in inOpts) {\n    newPickLevel = validateViewId(inOpts.pickLevel, pickLevel, 2);\n    delete inOpts.pickLevel;\n  }\n  if (newPickLevel !== pickLevel) {\n    if (newPickLevel > pickLevel) {\n      // complement current minDate/madDate so that the existing range will be\n      // expanded to fit the new level later\n      if (!('minDate' in inOpts)) {\n        inOpts.minDate = minDate;\n      }\n      if (!('maxDate' in inOpts)) {\n        inOpts.maxDate = maxDate;\n      }\n    }\n    // complement datesDisabled so that it will be reset later\n    if (datesDisabled && !inOpts.datesDisabled) {\n      inOpts.datesDisabled = [];\n    }\n    pickLevel = config.pickLevel = newPickLevel;\n  }\n\n  //*** dates ***//\n  // while min and maxDate for \"no limit\" in the options are better to be null\n  // (especially when updating), the ones in the config have to be undefined\n  // because null is treated as 0 (= unix epoch) when comparing with time value\n  let minDt = minDate;\n  let maxDt = maxDate;\n  if ('minDate' in inOpts) {\n    const defaultMinDt = dateValue(0, 0, 1);\n    minDt = inOpts.minDate === null\n      ? defaultMinDt  // set 0000-01-01 to prevent negative values for year\n      : validateDate(inOpts.minDate, format, locale, minDt);\n    if (minDt !== defaultMinDt) {\n      minDt = regularizeDate(minDt, pickLevel, false);\n    }\n    delete inOpts.minDate;\n  }\n  if ('maxDate' in inOpts) {\n    maxDt = inOpts.maxDate === null\n      ? undefined\n      : validateDate(inOpts.maxDate, format, locale, maxDt);\n    if (maxDt !== undefined) {\n      maxDt = regularizeDate(maxDt, pickLevel, true);\n    }\n    delete inOpts.maxDate;\n  }\n  if (maxDt < minDt) {\n    minDate = config.minDate = maxDt;\n    maxDate = config.maxDate = minDt;\n  } else {\n    if (minDate !== minDt) {\n      minDate = config.minDate = minDt;\n    }\n    if (maxDate !== maxDt) {\n      maxDate = config.maxDate = maxDt;\n    }\n  }\n\n  if (inOpts.datesDisabled) {\n    const dtsDisabled = inOpts.datesDisabled;\n    if (typeof dtsDisabled === 'function') {\n      config.datesDisabled = null;\n      config.checkDisabled = (timeValue, viewId) => dtsDisabled(\n        new Date(timeValue),\n        viewId,\n        rangeEnd\n      );\n    } else {\n      const disabled = config.datesDisabled = dtsDisabled.reduce((dates, dt) => {\n        const date = parseDate(dt, format, locale);\n        return date !== undefined\n          ? pushUnique(dates, regularizeDate(date, pickLevel, rangeEnd))\n          : dates;\n      }, []);\n      config.checkDisabled = timeValue => disabled.includes(timeValue);\n    }\n    delete inOpts.datesDisabled;\n  }\n  if ('defaultViewDate' in inOpts) {\n    const viewDate = parseDate(inOpts.defaultViewDate, format, locale);\n    if (viewDate !== undefined) {\n      config.defaultViewDate = viewDate;\n    }\n    delete inOpts.defaultViewDate;\n  }\n\n  //*** days of week ***//\n  if ('weekStart' in inOpts) {\n    const wkStart = Number(inOpts.weekStart) % 7;\n    if (!isNaN(wkStart)) {\n      weekStart = updateWeekStart(wkStart, config, weekNumbers);\n    }\n    delete inOpts.weekStart;\n  }\n  if (inOpts.daysOfWeekDisabled) {\n    config.daysOfWeekDisabled = inOpts.daysOfWeekDisabled.reduce(sanitizeDOW, []);\n    delete inOpts.daysOfWeekDisabled;\n  }\n  if (inOpts.daysOfWeekHighlighted) {\n    config.daysOfWeekHighlighted = inOpts.daysOfWeekHighlighted.reduce(sanitizeDOW, []);\n    delete inOpts.daysOfWeekHighlighted;\n  }\n\n  //*** week numbers ***//\n  if ('weekNumbers' in inOpts) {\n    let method = inOpts.weekNumbers;\n    if (method) {\n      const getWeekNumber = typeof method === 'function'\n        ? (timeValue, startOfWeek) => method(new Date(timeValue), startOfWeek)\n        : determineGetWeekMethod((method = parseInt(method, 10)), weekStart);\n      if (getWeekNumber) {\n        weekNumbers = config.weekNumbers = method;\n        config.getWeekNumber = getWeekNumber;\n      }\n    } else {\n      weekNumbers = config.weekNumbers = 0;\n      config.getWeekNumber = null;\n    }\n    delete inOpts.weekNumbers;\n  }\n\n  //*** multi date ***//\n  if ('maxNumberOfDates' in inOpts) {\n    const maxNumberOfDates = parseInt(inOpts.maxNumberOfDates, 10);\n    if (maxNumberOfDates >= 0) {\n      config.maxNumberOfDates = maxNumberOfDates;\n      config.multidate = maxNumberOfDates !== 1;\n    }\n    delete inOpts.maxNumberOfDates;\n  }\n  if (inOpts.dateDelimiter) {\n    config.dateDelimiter = String(inOpts.dateDelimiter);\n    delete inOpts.dateDelimiter;\n  }\n\n  //*** view ***//\n  let newMaxView = maxView;\n  if ('maxView' in inOpts) {\n    newMaxView = validateViewId(inOpts.maxView, maxView);\n    delete inOpts.maxView;\n  }\n  // ensure max view >= pick level\n  newMaxView = pickLevel > newMaxView ? pickLevel : newMaxView;\n  if (newMaxView !== maxView) {\n    maxView = config.maxView = newMaxView;\n  }\n\n  let newStartView = startView;\n  if ('startView' in inOpts) {\n    newStartView = validateViewId(inOpts.startView, newStartView);\n    delete inOpts.startView;\n  }\n  // ensure pick level <= start view <= max view\n  if (newStartView < pickLevel) {\n    newStartView = pickLevel;\n  } else if (newStartView > maxView) {\n    newStartView = maxView;\n  }\n  if (newStartView !== startView) {\n    config.startView = newStartView;\n  }\n\n  //*** template ***//\n  if (inOpts.prevArrow) {\n    const prevArrow = parseHTML(inOpts.prevArrow);\n    if (prevArrow.childNodes.length > 0) {\n      config.prevArrow = prevArrow.childNodes;\n    }\n    delete inOpts.prevArrow;\n  }\n  if (inOpts.nextArrow) {\n    const nextArrow = parseHTML(inOpts.nextArrow);\n    if (nextArrow.childNodes.length > 0) {\n      config.nextArrow = nextArrow.childNodes;\n    }\n    delete inOpts.nextArrow;\n  }\n\n  //*** misc ***//\n  if ('disableTouchKeyboard' in inOpts) {\n    config.disableTouchKeyboard = 'ontouchstart' in document && !!inOpts.disableTouchKeyboard;\n    delete inOpts.disableTouchKeyboard;\n  }\n  if (inOpts.orientation) {\n    const orientation = inOpts.orientation.toLowerCase().split(/\\s+/g);\n    config.orientation = {\n      x: orientation.find(x => (x === 'left' || x === 'right')) || 'auto',\n      y: orientation.find(y => (y === 'top' || y === 'bottom')) || 'auto',\n    };\n    delete inOpts.orientation;\n  }\n  if ('todayButtonMode' in inOpts) {\n    switch(inOpts.todayButtonMode) {\n      case 0:\n      case 1:\n        config.todayButtonMode = inOpts.todayButtonMode;\n    }\n    delete inOpts.todayButtonMode;\n  }\n\n  //*** copy the rest ***//\n  Object.entries(inOpts).forEach(([key, value]) => {\n    if (value !== undefined && key in defaultOptions) {\n      config[key] = value;\n    }\n  });\n\n  return config;\n}\n", "const defaultShortcutKeys = {\n  show: {key: 'ArrowDown'},\n  hide: null,\n  toggle: {key: 'Escape'},\n  prevButton: {key: 'ArrowLeft', ctrlOrMetaKey: true},\n  nextButton: {key: 'ArrowRight', ctrlOrMetaKey: true},\n  viewSwitch: {key: 'ArrowUp', ctrlOrMetaKey: true},\n  clearButton: {key: 'Backspace', ctrlOrMetaKey: true},\n  todayButton: {key: '.', ctrlOrMetaKey: true},\n  exitEditMode: {key: 'ArrowDown', ctrlOrMetaKey: true},\n};\n\nexport default function createShortcutKeyConfig(options) {\n  return Object.keys(defaultShortcutKeys).reduce((keyDefs, shortcut) => {\n    const keyDef = options[shortcut] === undefined\n      ? defaultShortcutKeys[shortcut]\n      : options[shortcut];\n    const key = keyDef && keyDef.key;\n    if (!key || typeof key !== 'string') {\n      return keyDefs;\n    }\n\n    const normalizedDef = {\n      key,\n      ctrlOrMetaKey: !!(keyDef.ctrlOrMetaKey || keyDef.ctrlKey || keyDef.metaKey),\n    };\n    if (key.length > 1) {\n      normalizedDef.altKey = !!keyDef.altKey;\n      normalizedDef.shiftKey = !!keyDef.shiftKey;\n    }\n    keyDefs[shortcut] = normalizedDef;\n    return keyDefs;\n  }, {});\n}\n", "import {optimizeTemplateHTML} from '../../lib/utils.js';\n\nconst getButtons = buttonList => buttonList\n  .map(classes => `<button type=\"button\" class=\"%buttonClass% ${classes}\" tabindex=\"-1\"></button>`)\n  .join('');\n\nexport default optimizeTemplateHTML(`<div class=\"datepicker\">\n  <div class=\"datepicker-picker\">\n    <div class=\"datepicker-header\">\n      <div class=\"datepicker-title\"></div>\n      <div class=\"datepicker-controls\">\n        ${getButtons([\n          'prev-button prev-btn',\n          'view-switch',\n          'next-button next-btn',\n        ])}\n      </div>\n    </div>\n    <div class=\"datepicker-main\"></div>\n    <div class=\"datepicker-footer\">\n      <div class=\"datepicker-controls\">\n        ${getButtons([\n          'today-button today-btn',\n          'clear-button clear-btn',\n        ])}\n      </div>\n    </div>\n  </div>\n</div>`);\n", "import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`<div class=\"days\">\n  <div class=\"days-of-week\">${createTagRepeat('span', 7, {class: 'dow'})}</div>\n  <div class=\"datepicker-grid\">${createTagRepeat('span', 42)}</div>\n</div>`);\n", "import {createTagRepeat, optimizeTemplateHTML} from '../../lib/utils.js';\n\nexport default optimizeTemplateHTML(`<div class=\"week-numbers calendar-weeks\">\n  <div class=\"days-of-week\"><span class=\"dow\"></span></div>\n  <div class=\"weeks\">${createTagRepeat('span', 6, {class: 'week'})}</div>\n</div>`);\n\n", "import {pushUnique} from '../../lib/utils.js';\nimport {parseHTML, replaceChildNodes} from '../../lib/dom.js';\n\n// Base class of the view classes\nexport default class View {\n  constructor(picker, config) {\n    Object.assign(this, config, {\n      picker,\n      element: parseHTML(`<div class=\"datepicker-view\"></div>`).firstChild,\n      selected: [],\n      isRangeEnd: !!picker.datepicker.rangeSideIndex,\n    });\n    this.init(this.picker.datepicker.config);\n  }\n\n  init(options) {\n    if ('pickLevel' in options) {\n      this.isMinView = this.id === options.pickLevel;\n    }\n    this.setOptions(options);\n    this.updateFocus();\n    this.updateSelection();\n  }\n\n  prepareForRender(switchLabel, prevButtonDisabled, nextButtonDisabled) {\n    // refresh disabled years on every render in order to clear the ones added\n    // by beforeShow hook at previous render\n    this.disabled = [];\n\n    const picker = this.picker;\n    picker.setViewSwitchLabel(switchLabel);\n    picker.setPrevButtonDisabled(prevButtonDisabled);\n    picker.setNextButtonDisabled(nextButtonDisabled);\n  }\n\n  setDisabled(date, classList) {\n    classList.add('disabled');\n    pushUnique(this.disabled, date);\n  }\n\n  // Execute beforeShow() callback and apply the result to the element\n  // args:\n  performBeforeHook(el, timeValue) {\n    let result = this.beforeShow(new Date(timeValue));\n    switch (typeof result) {\n      case 'boolean':\n        result = {enabled: result};\n        break;\n      case 'string':\n        result = {classes: result};\n    }\n\n    if (result) {\n      const classList = el.classList;\n      if (result.enabled === false) {\n        this.setDisabled(timeValue, classList);\n      }\n      if (result.classes) {\n        const extraClasses = result.classes.split(/\\s+/);\n        classList.add(...extraClasses);\n        if (extraClasses.includes('disabled')) {\n          this.setDisabled(timeValue, classList);\n        }\n      }\n      if (result.content) {\n        replaceChildNodes(el, result.content);\n      }\n    }\n  }\n\n  renderCell(el, content, cellVal, date, {selected, range}, outOfScope, extraClasses = []) {\n    el.textContent = content;\n    if (this.isMinView) {\n      el.dataset.date = date;\n    }\n\n    const classList = el.classList;\n    el.className = `datepicker-cell ${this.cellClass}`;\n    if (cellVal < this.first) {\n      classList.add('prev');\n    } else if (cellVal > this.last) {\n      classList.add('next');\n    }\n    classList.add(...extraClasses);\n    if (outOfScope || this.checkDisabled(date, this.id)) {\n      this.setDisabled(date, classList);\n    }\n    if (range) {\n      const [rangeStart, rangeEnd] = range;\n      if (cellVal > rangeStart && cellVal < rangeEnd) {\n        classList.add('range');\n      }\n      if (cellVal === rangeStart) {\n        classList.add('range-start');\n      }\n      if (cellVal === rangeEnd) {\n        classList.add('range-end');\n      }\n    }\n    if (selected.includes(cellVal)) {\n      classList.add('selected');\n    }\n    if (cellVal === this.focused) {\n      classList.add('focused');\n    }\n\n    if (this.beforeShow) {\n      this.performBeforeHook(el, date);\n    }\n  }\n\n  refreshCell(el, cellVal, selected, [rangeStart, rangeEnd]) {\n    const classList = el.classList;\n    classList.remove('range', 'range-start', 'range-end', 'selected', 'focused');\n    if (cellVal > rangeStart && cellVal < rangeEnd) {\n      classList.add('range');\n    }\n    if (cellVal === rangeStart) {\n      classList.add('range-start');\n    }\n    if (cellVal === rangeEnd) {\n      classList.add('range-end');\n    }\n    if (selected.includes(cellVal)) {\n      classList.add('selected');\n    }\n    if (cellVal === this.focused) {\n      classList.add('focused');\n    }\n  }\n\n  changeFocusedCell(cellIndex) {\n    this.grid.querySelectorAll('.focused').forEach((el) => {\n      el.classList.remove('focused');\n    });\n    this.grid.children[cellIndex].classList.add('focused');\n  }\n}\n", "import {today, dateValue, addDays, addWeeks, dayOfTheWeekOf} from '../../lib/date.js';\nimport {formatDate} from '../../lib/date-format.js';\nimport {parseHTML, showElement, hideElement} from '../../lib/dom.js';\nimport daysTemplate from '../templates/daysTemplate.js';\nimport weekNumbersTemplate from '../templates/weekNumbersTemplate.js';\nimport View from './View.js';\n\nexport default class DaysView extends View {\n  constructor(picker) {\n    super(picker, {\n      id: 0,\n      name: 'days',\n      cellClass: 'day',\n    });\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      const inner = parseHTML(daysTemplate).firstChild;\n      this.dow = inner.firstChild;\n      this.grid = inner.lastChild;\n      this.element.appendChild(inner);\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    let updateDOW;\n\n    if ('minDate' in options) {\n      this.minDate = options.minDate;\n    }\n    if ('maxDate' in options) {\n      this.maxDate = options.maxDate;\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = options.checkDisabled;\n    }\n    if (options.daysOfWeekDisabled) {\n      this.daysOfWeekDisabled = options.daysOfWeekDisabled;\n      updateDOW = true;\n    }\n    if (options.daysOfWeekHighlighted) {\n      this.daysOfWeekHighlighted = options.daysOfWeekHighlighted;\n    }\n    if ('todayHighlight' in options) {\n      this.todayHighlight = options.todayHighlight;\n    }\n    if ('weekStart' in options) {\n      this.weekStart = options.weekStart;\n      this.weekEnd = options.weekEnd;\n      updateDOW = true;\n    }\n    if (options.locale) {\n      const locale = this.locale = options.locale;\n      this.dayNames = locale.daysMin;\n      this.switchLabelFormat = locale.titleFormat;\n      updateDOW = true;\n    }\n    if ('beforeShowDay' in options) {\n      this.beforeShow = typeof options.beforeShowDay === 'function'\n        ? options.beforeShowDay\n        : undefined;\n    }\n\n    if ('weekNumbers' in options) {\n      if (options.weekNumbers && !this.weekNumbers) {\n        const weeksElem = parseHTML(weekNumbersTemplate).firstChild;\n        this.weekNumbers = {\n          element: weeksElem,\n          dow: weeksElem.firstChild,\n          weeks: weeksElem.lastChild,\n        };\n        this.element.insertBefore(weeksElem, this.element.firstChild);\n      } else if (this.weekNumbers && !options.weekNumbers) {\n        this.element.removeChild(this.weekNumbers.element);\n        this.weekNumbers = null;\n      }\n    }\n\n    if ('getWeekNumber' in options) {\n      this.getWeekNumber = options.getWeekNumber;\n    }\n\n    if ('showDaysOfWeek' in options) {\n      if (options.showDaysOfWeek) {\n        showElement(this.dow);\n        if (this.weekNumbers) {\n          showElement(this.weekNumbers.dow);\n        }\n      } else {\n        hideElement(this.dow);\n        if (this.weekNumbers) {\n          hideElement(this.weekNumbers.dow);\n        }\n      }\n    }\n\n    // update days-of-week when locale, daysOfweekDisabled or weekStart is changed\n    if (updateDOW) {\n      Array.from(this.dow.children).forEach((el, index) => {\n        const dow = (this.weekStart + index) % 7;\n        el.textContent = this.dayNames[dow];\n        el.className = this.daysOfWeekDisabled.includes(dow) ? 'dow disabled' : 'dow';\n      });\n    }\n  }\n\n  // Apply update on the focused date to view's settings\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    const viewYear = viewDate.getFullYear();\n    const viewMonth = viewDate.getMonth();\n    const firstOfMonth = dateValue(viewYear, viewMonth, 1);\n    const start = dayOfTheWeekOf(firstOfMonth, this.weekStart, this.weekStart);\n\n    this.first = firstOfMonth;\n    this.last = dateValue(viewYear, viewMonth + 1, 0);\n    this.start = start;\n    this.focused = this.picker.viewDate;\n  }\n\n  // Apply update on the selected dates to view's settings\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates;\n    if (rangepicker) {\n      this.range = rangepicker.dates;\n    }\n  }\n\n   // Update the entire view UI\n  render() {\n    // update today marker on ever render\n    this.today = this.todayHighlight ? today() : undefined;\n\n    this.prepareForRender(\n      formatDate(this.focused, this.switchLabelFormat, this.locale),\n      this.first <= this.minDate,\n      this.last >= this.maxDate\n    );\n\n    if (this.weekNumbers) {\n      const weekStart = this.weekStart;\n      const startOfWeek = dayOfTheWeekOf(this.first, weekStart, weekStart);\n      Array.from(this.weekNumbers.weeks.children).forEach((el, index) => {\n        const dateOfWeekStart = addWeeks(startOfWeek, index);\n        el.textContent = this.getWeekNumber(dateOfWeekStart, weekStart);\n        if (index > 3) {\n          el.classList[dateOfWeekStart > this.last ? 'add' : 'remove']('next');\n        }\n      });\n    }\n    Array.from(this.grid.children).forEach((el, index) => {\n      const current = addDays(this.start, index);\n      const dateObj = new Date(current);\n      const day = dateObj.getDay();\n      const extraClasses = [];\n\n      if (this.today === current) {\n        extraClasses.push('today');\n      }\n      if (this.daysOfWeekHighlighted.includes(day)) {\n        extraClasses.push('highlighted');\n      }\n\n      this.renderCell(\n        el,\n        dateObj.getDate(),\n        current,\n        current,\n        this,\n        current < this.minDate\n          || current > this.maxDate\n          || this.daysOfWeekDisabled.includes(day),\n        extraClasses\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const range = this.range || [];\n    Array.from(this.grid.children).forEach((el) => {\n      this.refreshCell(el, Number(el.dataset.date), this.selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(Math.round((this.focused - this.start) / 86400000));\n  }\n}\n", "import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction computeMonthRange(range, thisYear) {\n  if (!range || !range[0] || !range[1]) {\n    return;\n  }\n\n  const [[startY, startM], [endY, endM]] = range;\n  if (startY > thisYear || endY < thisYear) {\n    return;\n  }\n  return [\n    startY === thisYear ? startM : -1,\n    endY === thisYear ? endM : 12,\n  ];\n}\n\nexport default class MonthsView extends View {\n  constructor(picker) {\n    super(picker, {\n      id: 1,\n      name: 'months',\n      cellClass: 'month',\n    });\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      this.grid = this.element;\n      this.element.classList.add('months', 'datepicker-grid');\n      this.grid.appendChild(parseHTML(createTagRepeat('span', 12, {'data-month': ix => ix})));\n      this.first = 0;\n      this.last = 11;\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    if (options.locale) {\n      this.monthNames = options.locale.monthsShort;\n    }\n    if ('minDate' in options) {\n      if (options.minDate === undefined) {\n        this.minYear = this.minMonth = this.minDate = undefined;\n      } else {\n        const minDateObj = new Date(options.minDate);\n        this.minYear = minDateObj.getFullYear();\n        this.minMonth = minDateObj.getMonth();\n        this.minDate = minDateObj.setDate(1);\n      }\n    }\n    if ('maxDate' in options) {\n      if (options.maxDate === undefined) {\n        this.maxYear = this.maxMonth = this.maxDate = undefined;\n      } else {\n        const maxDateObj = new Date(options.maxDate);\n        this.maxYear = maxDateObj.getFullYear();\n        this.maxMonth = maxDateObj.getMonth();\n        this.maxDate = dateValue(this.maxYear, this.maxMonth + 1, 0);\n      }\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = this.isMinView || options.datesDisabled === null\n        ? options.checkDisabled\n        : () => false;\n    }\n    if ('beforeShowMonth' in options) {\n      this.beforeShow = typeof options.beforeShowMonth === 'function'\n        ? options.beforeShowMonth\n        : undefined;\n    }\n  }\n\n  // Update view's settings to reflect the viewDate set on the picker\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    this.year = viewDate.getFullYear();\n    this.focused = viewDate.getMonth();\n  }\n\n  // Update view's settings to reflect the selected dates\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates.reduce((selected, timeValue) => {\n      const date = new Date(timeValue);\n      const year = date.getFullYear();\n      const month = date.getMonth();\n      if (selected[year] === undefined) {\n        selected[year] = [month];\n      } else {\n        pushUnique(selected[year], month);\n      }\n      return selected;\n    }, {});\n    if (rangepicker && rangepicker.dates) {\n      this.range = rangepicker.dates.map(timeValue => {\n        const date = new Date(timeValue);\n        return isNaN(date) ? undefined : [date.getFullYear(), date.getMonth()];\n      });\n    }\n  }\n\n  // Update the entire view UI\n  render() {\n    this.prepareForRender(\n      this.year,\n      this.year <= this.minYear,\n      this.year >= this.maxYear\n    );\n\n    const selected = this.selected[this.year] || [];\n    const yrOutOfRange = this.year < this.minYear || this.year > this.maxYear;\n    const isMinYear = this.year === this.minYear;\n    const isMaxYear = this.year === this.maxYear;\n    const range = computeMonthRange(this.range, this.year);\n\n    Array.from(this.grid.children).forEach((el, index) => {\n      const date = regularizeDate(new Date(this.year, index, 1), 1, this.isRangeEnd);\n\n      this.renderCell(\n        el,\n        this.monthNames[index],\n        index,\n        date,\n        {selected, range},\n        yrOutOfRange\n          || isMinYear && index < this.minMonth\n          || isMaxYear && index > this.maxMonth\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const selected = this.selected[this.year] || [];\n    const range = computeMonthRange(this.range, this.year) || [];\n    Array.from(this.grid.children).forEach((el, index) => {\n      this.refreshCell(el, index, selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(this.focused);\n  }\n}", "import {pushUnique, createTagRepeat} from '../../lib/utils.js';\nimport {dateValue, regularizeDate, startOfYearPeriod} from '../../lib/date.js';\nimport {parseHTML} from '../../lib/dom.js';\nimport View from './View.js';\n\nfunction toTitleCase(word) {\n  return [...word].reduce((str, ch, ix) => str += ix ? ch : ch.toUpperCase(), '');\n}\n\n// Class representing the years and decades view elements\nexport default class YearsView extends View {\n  constructor(picker, config) {\n    super(picker, config);\n  }\n\n  init(options, onConstruction = true) {\n    if (onConstruction) {\n      this.navStep = this.step * 10;\n      this.beforeShowOption = `beforeShow${toTitleCase(this.cellClass)}`;\n      this.grid = this.element;\n      this.element.classList.add(this.name, 'datepicker-grid');\n      this.grid.appendChild(parseHTML(createTagRepeat('span', 12)));\n    }\n    super.init(options);\n  }\n\n  setOptions(options) {\n    if ('minDate' in options) {\n      if (options.minDate === undefined) {\n        this.minYear = this.minDate = undefined;\n      } else {\n        this.minYear = startOfYearPeriod(options.minDate, this.step);\n        this.minDate = dateValue(this.minYear, 0, 1);\n      }\n    }\n    if ('maxDate' in options) {\n      if (options.maxDate === undefined) {\n        this.maxYear = this.maxDate = undefined;\n      } else {\n        this.maxYear = startOfYearPeriod(options.maxDate, this.step);\n        this.maxDate = dateValue(this.maxYear, 11, 31);\n      }\n    }\n    if (options.checkDisabled) {\n      this.checkDisabled = this.isMinView || options.datesDisabled === null\n        ? options.checkDisabled\n        : () => false;\n    }\n    if (this.beforeShowOption in options) {\n      const beforeShow = options[this.beforeShowOption];\n      this.beforeShow = typeof beforeShow === 'function' ? beforeShow : undefined;\n    }\n  }\n\n  // Update view's settings to reflect the viewDate set on the picker\n  updateFocus() {\n    const viewDate = new Date(this.picker.viewDate);\n    const first = startOfYearPeriod(viewDate, this.navStep);\n    const last = first + 9 * this.step;\n\n    this.first = first;\n    this.last = last;\n    this.start = first - this.step;\n    this.focused = startOfYearPeriod(viewDate, this.step);\n  }\n\n  // Update view's settings to reflect the selected dates\n  updateSelection() {\n    const {dates, rangepicker} = this.picker.datepicker;\n    this.selected = dates.reduce((years, timeValue) => {\n      return pushUnique(years, startOfYearPeriod(timeValue, this.step));\n    }, []);\n    if (rangepicker && rangepicker.dates) {\n      this.range = rangepicker.dates.map(timeValue => {\n        if (timeValue !== undefined) {\n          return startOfYearPeriod(timeValue, this.step);\n        }\n      });\n    }\n  }\n\n  // Update the entire view UI\n  render() {\n    this.prepareForRender(\n      `${this.first}-${this.last}`,\n      this.first <= this.minYear,\n      this.last >= this.maxYear\n    );\n\n    Array.from(this.grid.children).forEach((el, index) => {\n      const current = this.start + (index * this.step);\n      const date = regularizeDate(new Date(current, 0, 1), 2, this.isRangeEnd);\n\n      el.dataset.year = current;\n      this.renderCell(\n        el,\n        current,\n        current,\n        date,\n        this,\n        current < this.minYear || current > this.maxYear\n      );\n    });\n  }\n\n  // Update the view UI by applying the changes of selected and focused items\n  refresh() {\n    const range = this.range || [];\n    Array.from(this.grid.children).forEach((el) => {\n      this.refreshCell(el, Number(el.textContent), this.selected, range);\n    });\n  }\n\n  // Update the view UI by applying the change of focused item\n  refreshFocus() {\n    this.changeFocusedCell(Math.round((this.focused - this.start) / this.step));\n  }\n}\n", "import {limitToRange} from '../lib/utils.js';\nimport {today, addMonths, addYears} from '../lib/date.js';\nimport {isActiveElement} from '../lib/dom.js';\n\nexport function triggerDatepickerEvent(datepicker, type) {\n  const options = {\n    bubbles: true,\n    cancelable: true,\n    detail: {\n      date: datepicker.getDate(),\n      viewDate: new Date(datepicker.picker.viewDate),\n      viewId: datepicker.picker.currentView.id,\n      datepicker,\n    },\n  };\n  datepicker.element.dispatchEvent(new CustomEvent(type, options));\n}\n\n// direction: -1 (to previous), 1 (to next)\nexport function goToPrevOrNext(datepicker, direction) {\n  const {config, picker} = datepicker;\n  const {currentView, viewDate} = picker;\n  let newViewDate;\n  switch (currentView.id) {\n    case 0:\n      newViewDate = addMonths(viewDate, direction);\n      break;\n    case 1:\n      newViewDate = addYears(viewDate, direction);\n      break;\n    default:\n      newViewDate = addYears(viewDate, direction * currentView.navStep);\n  }\n  newViewDate = limitToRange(newViewDate, config.minDate, config.maxDate);\n  picker.changeFocus(newViewDate).render();\n}\n\nexport function switchView(datepicker) {\n  const viewId = datepicker.picker.currentView.id;\n  if (viewId === datepicker.config.maxView) {\n    return;\n  }\n  datepicker.picker.changeView(viewId + 1).render();\n}\n\nexport function clearSelection(datepicker) {\n  datepicker.setDate({clear: true});\n}\n\nexport function goToOrSelectToday(datepicker) {\n  const currentDate = today();\n  if (datepicker.config.todayButtonMode === 1) {\n    datepicker.setDate(currentDate, {forceRefresh: true, viewDate: currentDate});\n  } else {\n    datepicker.setFocusedDate(currentDate, true);\n  }\n}\n\nexport function unfocus(datepicker) {\n  const onBlur = () => {\n    if (datepicker.config.updateOnBlur) {\n      datepicker.update({revert: true});\n    } else {\n      datepicker.refresh('input');\n    }\n    datepicker.hide();\n  };\n  const element = datepicker.element;\n\n  if (isActiveElement(element)) {\n    element.addEventListener('blur', onBlur, {once: true});\n  } else {\n    onBlur();\n  }\n}\n", "import {addMonths, addYears} from '../lib/date.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {goToPrevOrNext, switchView} from './functions.js';\n\nfunction goToSelectedMonthOrYear(datepicker, selection) {\n  const picker = datepicker.picker;\n  const viewDate = new Date(picker.viewDate);\n  const viewId = picker.currentView.id;\n  const newDate = viewId === 1\n    ? addMonths(viewDate, selection - viewDate.getMonth())\n    : addYears(viewDate, selection - viewDate.getFullYear());\n\n  picker.changeFocus(newDate).changeView(viewId - 1).render();\n}\n\nexport function onClickViewSwitch(datepicker) {\n  switchView(datepicker);\n}\n\nexport function onClickPrevButton(datepicker) {\n  goToPrevOrNext(datepicker, -1);\n}\n\nexport function onClickNextButton(datepicker) {\n  goToPrevOrNext(datepicker, 1);\n}\n\n// For the picker's main block to delegete the events from `datepicker-cell`s\nexport function onClickView(datepicker, ev) {\n  const target = findElementInEventPath(ev, '.datepicker-cell');\n  if (!target || target.classList.contains('disabled')) {\n    return;\n  }\n\n  const {id, isMinView} = datepicker.picker.currentView;\n  const data = target.dataset;\n  if (isMinView) {\n    datepicker.setDate(Number(data.date));\n  } else if (id === 1) {\n    goToSelectedMonthOrYear(datepicker, Number(data.month));\n  } else {\n    goToSelectedMonthOrYear(datepicker, Number(data.year));\n  }\n}\n\nexport function onMousedownPicker(ev) {\n  ev.preventDefault();\n}\n", "import {lastItemOf, isInRange, limitToRange} from '../lib/utils.js';\nimport {today, regularizeDate} from '../lib/date.js';\nimport {\n  parseHTML,\n  getParent,\n  showElement,\n  hideElement,\n  emptyChildNodes,\n} from '../lib/dom.js';\nimport {registerListeners} from '../lib/event.js';\nimport pickerTemplate from './templates/pickerTemplate.js';\nimport DaysView from './views/DaysView.js';\nimport MonthsView from './views/MonthsView.js';\nimport YearsView from './views/YearsView.js';\nimport {\n  triggerDatepickerEvent,\n  clearSelection,\n  goToOrSelectToday,\n} from '../events/functions.js';\nimport {\n  onClickViewSwitch,\n  onClickPrevButton,\n  onClickNextButton,\n  onClickView,\n  onMousedownPicker,\n} from '../events/pickerListeners.js';\n\nconst orientClasses = ['left', 'top', 'right', 'bottom'].reduce((obj, key) => {\n  obj[key] = `datepicker-orient-${key}`;\n  return obj;\n}, {});\nconst toPx = num => num ? `${num}px` : num;\n\nfunction processPickerOptions(picker, options) {\n  if ('title' in options) {\n    if (options.title) {\n      picker.controls.title.textContent = options.title;\n      showElement(picker.controls.title);\n    } else {\n      picker.controls.title.textContent = '';\n      hideElement(picker.controls.title);\n    }\n  }\n  if (options.prevArrow) {\n    const prevButton = picker.controls.prevButton;\n    emptyChildNodes(prevButton);\n    options.prevArrow.forEach((node) => {\n      prevButton.appendChild(node.cloneNode(true));\n    });\n  }\n  if (options.nextArrow) {\n    const nextButton = picker.controls.nextButton;\n    emptyChildNodes(nextButton);\n    options.nextArrow.forEach((node) => {\n      nextButton.appendChild(node.cloneNode(true));\n    });\n  }\n  if (options.locale) {\n    picker.controls.todayButton.textContent = options.locale.today;\n    picker.controls.clearButton.textContent = options.locale.clear;\n  }\n  if ('todayButton' in options) {\n    if (options.todayButton) {\n      showElement(picker.controls.todayButton);\n    } else {\n      hideElement(picker.controls.todayButton);\n    }\n  }\n  if ('minDate' in options || 'maxDate' in options) {\n    const {minDate, maxDate} = picker.datepicker.config;\n    picker.controls.todayButton.disabled = !isInRange(today(), minDate, maxDate);\n  }\n  if ('clearButton' in options) {\n    if (options.clearButton) {\n      showElement(picker.controls.clearButton);\n    } else {\n      hideElement(picker.controls.clearButton);\n    }\n  }\n}\n\n// Compute view date to reset, which will be...\n// - the last item of the selected dates or defaultViewDate if no selection\n// - limitted to minDate or maxDate if it exceeds the range\nfunction computeResetViewDate(datepicker) {\n  const {dates, config, rangeSideIndex} = datepicker;\n  const viewDate = dates.length > 0\n    ? lastItemOf(dates)\n    : regularizeDate(config.defaultViewDate, config.pickLevel, rangeSideIndex);\n  return limitToRange(viewDate, config.minDate, config.maxDate);\n}\n\n// Change current view's view date\nfunction setViewDate(picker, newDate) {\n  if (!('_oldViewDate' in picker) && newDate !== picker.viewDate) {\n    picker._oldViewDate = picker.viewDate;\n  }\n  picker.viewDate = newDate;\n\n  // return whether the new date is in different period on time from the one\n  // displayed in the current view\n  // when true, the view needs to be re-rendered on the next UI refresh.\n  const {id, year, first, last} = picker.currentView;\n  const viewYear = new Date(newDate).getFullYear();\n  switch (id) {\n    case 0:\n      return newDate < first || newDate > last;\n    case 1:\n      return viewYear !== year;\n    default:\n      return viewYear < first || viewYear > last;\n  }\n}\n\nfunction getTextDirection(el) {\n  return window.getComputedStyle(el).direction;\n}\n\n// find the closet scrollable ancestor elemnt under the body\nfunction findScrollParents(el) {\n  const parent = getParent(el);\n  if (parent === document.body || !parent) {\n    return;\n  }\n\n  // checking overflow only is enough because computed overflow cannot be\n  // visible or a combination of visible and other when either axis is set\n  // to other than visible.\n  // (Setting one axis to other than 'visible' while the other is 'visible'\n  // results in the other axis turning to 'auto')\n  return window.getComputedStyle(parent).overflow !== 'visible'\n    ? parent\n    : findScrollParents(parent);\n}\n\n// Class representing the picker UI\nexport default class Picker {\n  constructor(datepicker) {\n    const {config, inputField} = this.datepicker = datepicker;\n\n    const template = pickerTemplate.replace(/%buttonClass%/g, config.buttonClass);\n    const element = this.element = parseHTML(template).firstChild;\n    const [header, main, footer] = element.firstChild.children;\n    const title = header.firstElementChild;\n    const [prevButton, viewSwitch, nextButton] = header.lastElementChild.children;\n    const [todayButton, clearButton] = footer.firstChild.children;\n    const controls = {\n      title,\n      prevButton,\n      viewSwitch,\n      nextButton,\n      todayButton,\n      clearButton,\n    };\n    this.main = main;\n    this.controls = controls;\n\n    const elementClass = inputField ? 'dropdown' : 'inline';\n    element.classList.add(`datepicker-${elementClass}`);\n\n    processPickerOptions(this, config);\n    this.viewDate = computeResetViewDate(datepicker);\n\n    // set up event listeners\n    registerListeners(datepicker, [\n      [element, 'mousedown', onMousedownPicker],\n      [main, 'click', onClickView.bind(null, datepicker)],\n      [controls.viewSwitch, 'click', onClickViewSwitch.bind(null, datepicker)],\n      [controls.prevButton, 'click', onClickPrevButton.bind(null, datepicker)],\n      [controls.nextButton, 'click', onClickNextButton.bind(null, datepicker)],\n      [controls.todayButton, 'click', goToOrSelectToday.bind(null, datepicker)],\n      [controls.clearButton, 'click', clearSelection.bind(null, datepicker)],\n    ]);\n\n    // set up views\n    this.views = [\n      new DaysView(this),\n      new MonthsView(this),\n      new YearsView(this, {id: 2, name: 'years', cellClass: 'year', step: 1}),\n      new YearsView(this, {id: 3, name: 'decades', cellClass: 'decade', step: 10}),\n    ];\n    this.currentView = this.views[config.startView];\n\n    this.currentView.render();\n    this.main.appendChild(this.currentView.element);\n    if (config.container) {\n      config.container.appendChild(this.element);\n    } else {\n      inputField.after(this.element);\n    }\n  }\n\n  setOptions(options) {\n    processPickerOptions(this, options);\n    this.views.forEach((view) => {\n      view.init(options, false);\n    });\n    this.currentView.render();\n  }\n\n  detach() {\n    this.element.remove();\n  }\n\n  show() {\n    if (this.active) {\n      return;\n    }\n\n    const {datepicker, element} = this;\n    const inputField = datepicker.inputField;\n    if (inputField) {\n      // ensure picker's direction matches input's\n      const inputDirection = getTextDirection(inputField);\n      if (inputDirection !== getTextDirection(getParent(element))) {\n        element.dir = inputDirection;\n      } else if (element.dir) {\n        element.removeAttribute('dir');\n      }\n\n      // Determine the picker's position first to prevent `orientation: 'auto'`\n      // from being miscalculated to 'bottom' after the picker temporarily\n      // shown below the input field expands the document height if the field\n      // is at the bottom edge of the document\n      this.place();\n      element.classList.add('active');\n\n      if (datepicker.config.disableTouchKeyboard) {\n        inputField.blur();\n      }\n    } else {\n      element.classList.add('active');\n    }\n    this.active = true;\n    triggerDatepickerEvent(datepicker, 'show');\n  }\n\n  hide() {\n    if (!this.active) {\n      return;\n    }\n    this.datepicker.exitEditMode();\n    this.element.classList.remove('active');\n    this.active = false;\n    triggerDatepickerEvent(this.datepicker, 'hide');\n  }\n\n  place() {\n    const {classList, style} = this.element;\n    // temporarily display the picker to get its size and offset parent\n    style.display = 'block';\n\n    const {\n      width: calendarWidth,\n      height: calendarHeight,\n    } = this.element.getBoundingClientRect();\n    const offsetParent = this.element.offsetParent;\n    // turn the picker back to hidden so that the position is determined with\n    // the state before it is shown.\n    style.display = '';\n\n    const {config, inputField} = this.datepicker;\n    const {\n      left: inputLeft,\n      top: inputTop,\n      right: inputRight,\n      bottom: inputBottom,\n      width: inputWidth,\n      height: inputHeight\n    } = inputField.getBoundingClientRect();\n    let {x: orientX, y: orientY} = config.orientation;\n    let left = inputLeft;\n    let top = inputTop;\n\n    // caliculate offsetLeft/Top of inputField\n    if (offsetParent === document.body || !offsetParent) {\n      left += window.scrollX;\n      top += window.scrollY;\n    } else {\n      const offsetParentRect = offsetParent.getBoundingClientRect();\n      left -= offsetParentRect.left - offsetParent.scrollLeft;\n      top -= offsetParentRect.top - offsetParent.scrollTop;\n    }\n\n    // caliculate the boundaries of the visible area that contains inputField\n    const scrollParent = findScrollParents(inputField);\n    let scrollAreaLeft = 0;\n    let scrollAreaTop = 0;\n    let {\n      clientWidth: scrollAreaRight,\n      clientHeight: scrollAreaBottom,\n    } = document.documentElement;\n\n    if (scrollParent) {\n      const scrollParentRect = scrollParent.getBoundingClientRect();\n      if (scrollParentRect.top > 0) {\n        scrollAreaTop = scrollParentRect.top;\n      }\n      if (scrollParentRect.left > 0) {\n        scrollAreaLeft = scrollParentRect.left;\n      }\n      if (scrollParentRect.right < scrollAreaRight) {\n        scrollAreaRight = scrollParentRect.right;\n      }\n      if (scrollParentRect.bottom < scrollAreaBottom) {\n        scrollAreaBottom = scrollParentRect.bottom;\n      }\n    }\n\n    // determine the horizontal orientation and left position\n    let adjustment = 0;\n    if (orientX === 'auto') {\n      if (inputLeft < scrollAreaLeft) {\n        orientX = 'left';\n        adjustment = scrollAreaLeft - inputLeft;\n      } else if (inputLeft + calendarWidth > scrollAreaRight) {\n        orientX = 'right';\n        if (scrollAreaRight < inputRight) {\n          adjustment = scrollAreaRight - inputRight;\n        }\n      } else if (getTextDirection(inputField) === 'rtl') {\n        orientX = inputRight - calendarWidth < scrollAreaLeft ? 'left' : 'right';\n      } else {\n        orientX = 'left';\n      }\n    }\n    if (orientX === 'right') {\n      left += inputWidth - calendarWidth;\n    }\n    left += adjustment;\n\n    // determine the vertical orientation and top position\n    if (orientY === 'auto') {\n      if (inputTop - calendarHeight > scrollAreaTop) {\n        orientY = inputBottom + calendarHeight > scrollAreaBottom ? 'top' : 'bottom';\n      } else {\n        orientY = 'bottom';\n      }\n    }\n    if (orientY === 'top') {\n      top -= calendarHeight;\n    } else {\n      top += inputHeight;\n    }\n\n    classList.remove(...Object.values(orientClasses));\n    classList.add(orientClasses[orientX], orientClasses[orientY]);\n\n    style.left = toPx(left);\n    style.top = toPx(top);\n  }\n\n  setViewSwitchLabel(labelText) {\n    this.controls.viewSwitch.textContent = labelText;\n  }\n\n  setPrevButtonDisabled(disabled) {\n    this.controls.prevButton.disabled = disabled;\n  }\n\n  setNextButtonDisabled(disabled) {\n    this.controls.nextButton.disabled = disabled;\n  }\n\n  changeView(viewId) {\n    const currentView = this.currentView;\n    if (viewId !== currentView.id) {\n      if (!this._oldView) {\n        this._oldView = currentView;\n      }\n      this.currentView = this.views[viewId];\n      this._renderMethod = 'render';\n    }\n    return this;\n  }\n\n  // Change the focused date (view date)\n  changeFocus(newViewDate) {\n    this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refreshFocus';\n    this.views.forEach((view) => {\n      view.updateFocus();\n    });\n    return this;\n  }\n\n  // Apply the change of the selected dates\n  update(viewDate = undefined) {\n    const newViewDate = viewDate === undefined\n      ? computeResetViewDate(this.datepicker)\n      : viewDate;\n    this._renderMethod = setViewDate(this, newViewDate) ? 'render' : 'refresh';\n    this.views.forEach((view) => {\n      view.updateFocus();\n      view.updateSelection();\n    });\n    return this;\n  }\n\n  // Refresh the picker UI\n  render(quickRender = true) {\n    const {currentView, datepicker, _oldView: oldView} = this;\n    const oldViewDate = new Date(this._oldViewDate);\n    const renderMethod = (quickRender && this._renderMethod) || 'render';\n    delete this._oldView;\n    delete this._oldViewDate;\n    delete this._renderMethod;\n\n    currentView[renderMethod]();\n    if (oldView) {\n      this.main.replaceChild(currentView.element, oldView.element);\n      triggerDatepickerEvent(datepicker, 'changeView');\n    }\n    if (!isNaN(oldViewDate)) {\n      const newViewDate = new Date(this.viewDate);\n      if (newViewDate.getFullYear() !== oldViewDate.getFullYear()) {\n        triggerDatepickerEvent(datepicker, 'changeYear');\n      }\n      if (newViewDate.getMonth() !== oldViewDate.getMonth()) {\n        triggerDatepickerEvent(datepicker, 'changeMonth');\n      }\n    }\n  }\n}\n", "import {isInRange} from '../lib/utils.js';\nimport {isActiveElement} from '../lib/dom.js';\nimport {addDays, addMonths, addYears} from '../lib/date.js';\nimport {\n  goToPrevOrNext,\n  switchView,\n  clearSelection,\n  goToOrSelectToday,\n  unfocus,\n} from './functions.js';\n\n// Find the closest date that doesn't meet the condition for unavailable date\n// Returns undefined if no available date is found\n// addFn: function to calculate the next date\n//   - args: time value, amount\n// increase: amount to pass to addFn\n// testFn: function to test the unavailability of the date\n//   - args: time value; return: true if unavailable\nfunction findNextAvailableOne(date, addFn, increase, testFn, min, max) {\n  if (!isInRange(date, min, max)) {\n    return;\n  }\n  if (testFn(date)) {\n    const newDate = addFn(date, increase);\n    return findNextAvailableOne(newDate, addFn, increase, testFn, min, max);\n  }\n  return date;\n}\n\n// direction: -1 (left/up), 1 (right/down)\n// vertical: true for up/down, false for left/right\nfunction moveByArrowKey(datepicker, direction, vertical) {\n  const picker = datepicker.picker;\n  const currentView = picker.currentView;\n  const step = currentView.step || 1;\n  let viewDate = picker.viewDate;\n  let addFn;\n  switch (currentView.id) {\n    case 0:\n      viewDate = addDays(viewDate, vertical ? direction * 7 : direction);\n      addFn = addDays;\n      break;\n    case 1:\n      viewDate = addMonths(viewDate, vertical ? direction * 4 : direction);\n      addFn = addMonths;\n      break;\n    default:\n      viewDate = addYears(viewDate, direction * (vertical ? 4 : 1) * step);\n      addFn = addYears;\n  }\n  viewDate = findNextAvailableOne(\n    viewDate,\n    addFn,\n    direction < 0 ? -step : step,\n    (date) => currentView.disabled.includes(date),\n    currentView.minDate,\n    currentView.maxDate\n  );\n  if (viewDate !== undefined) {\n    picker.changeFocus(viewDate).render();\n  }\n}\n\nexport function onKeydown(datepicker, ev) {\n  const {config, picker, editMode} = datepicker;\n  const active = picker.active;\n  const {key, altKey, shiftKey} = ev;\n  const ctrlOrMetaKey = ev.ctrlKey || ev.metaKey;\n  const cancelEvent = () => {\n    ev.preventDefault();\n    ev.stopPropagation();\n  };\n\n  // tab/enter keys should not be taken by shortcut keys\n  if (key === 'Tab') {\n    unfocus(datepicker);\n    return;\n  }\n  if (key === 'Enter') {\n    if (!active) {\n      datepicker.update();\n    } else if (editMode) {\n      datepicker.exitEditMode({update: true, autohide: config.autohide});\n    } else {\n      const currentView = picker.currentView;\n      if (currentView.isMinView) {\n        datepicker.setDate(picker.viewDate);\n      } else {\n        picker.changeView(currentView.id - 1).render();\n        cancelEvent();\n      }\n    }\n    return;\n  }\n\n  const shortcutKeys = config.shortcutKeys;\n  const keyInfo = {key, ctrlOrMetaKey, altKey, shiftKey};\n  const shortcut = Object.keys(shortcutKeys).find((item) => {\n    const keyDef = shortcutKeys[item];\n    return !Object.keys(keyDef).find(prop => keyDef[prop] !== keyInfo[prop]);\n  });\n  if (shortcut) {\n    let action;\n    if (shortcut === 'toggle') {\n      action = shortcut;\n    } else if (editMode) {\n      if (shortcut === 'exitEditMode') {\n        action = shortcut;\n      }\n    } else if (active) {\n      if (shortcut === 'hide') {\n        action = shortcut;\n      } else if (shortcut === 'prevButton') {\n        action = [goToPrevOrNext, [datepicker, -1]];\n      } else if (shortcut === 'nextButton') {\n        action = [goToPrevOrNext, [datepicker, 1]];\n      } else if (shortcut === 'viewSwitch') {\n        action = [switchView, [datepicker]];\n      } else if (config.clearButton && shortcut === 'clearButton') {\n        action = [clearSelection, [datepicker]];\n      } else if (config.todayButton && shortcut === 'todayButton') {\n        action = [goToOrSelectToday, [datepicker]];\n      }\n    } else if (shortcut === 'show') {\n      action = shortcut;\n    }\n    if (action) {\n      if (Array.isArray(action)) {\n        action[0].apply(null, action[1]);\n      } else {\n        datepicker[action]();\n      }\n      cancelEvent();\n      return;\n    }\n  }\n\n  // perform as a regular <input> when picker in hidden or in edit mode\n  if (!active || editMode) {\n    return;\n  }\n\n  const handleArrowKeyPress = (direction, vertical) => {\n    if (shiftKey || ctrlOrMetaKey || altKey) {\n      datepicker.enterEditMode();\n    } else {\n      moveByArrowKey(datepicker, direction, vertical);\n      ev.preventDefault();\n    }\n  };\n\n  if (key === 'ArrowLeft') {\n    handleArrowKeyPress(-1, false);\n  } else if (key === 'ArrowRight') {\n    handleArrowKeyPress(1, false);\n  } else if (key === 'ArrowUp') {\n    handleArrowKeyPress(-1, true);\n  } else if (key === 'ArrowDown') {\n    handleArrowKeyPress(1, true);\n  } else if (\n    key === 'Backspace'\n    || key === 'Delete'\n      // When autofill is performed, Chromium-based browsers trigger fake\n      // keydown/keyup events that don't have the `key` property (on Edge,\n      // keyup only) in addition to the input event. Therefore, we need to\n      // check the existence of `key`'s value before checking the length.\n      // (issue #144)\n    || (key && key.length === 1 && !ctrlOrMetaKey)\n  ) {\n    datepicker.enterEditMode();\n  }\n}\n\nexport function onFocus(datepicker) {\n  if (datepicker.config.showOnFocus && !datepicker._showing) {\n    datepicker.show();\n  }\n}\n\n// for the prevention for entering edit mode while getting focus on click\nexport function onMousedown(datepicker, ev) {\n  const el = ev.target;\n  if (datepicker.picker.active || datepicker.config.showOnClick) {\n    el._active = isActiveElement(el);\n    el._clicking = setTimeout(() => {\n      delete el._active;\n      delete el._clicking;\n    }, 2000);\n  }\n}\n\nexport function onClickInput(datepicker, ev) {\n  const el = ev.target;\n  if (!el._clicking) {\n    return;\n  }\n  clearTimeout(el._clicking);\n  delete el._clicking;\n\n  if (el._active) {\n    datepicker.enterEditMode();\n  }\n  delete el._active;\n\n  if (datepicker.config.showOnClick) {\n    datepicker.show();\n  }\n}\n\nexport function onPaste(datepicker, ev) {\n  if (ev.clipboardData.types.includes('text/plain')) {\n    datepicker.enterEditMode();\n  }\n}\n", "import {isActiveElement} from '../lib/dom.js';\nimport {findElementInEventPath} from '../lib/event.js';\nimport {unfocus} from './functions.js';\n\n// for the `document` to delegate the events from outside the picker/input field\nexport function onClickOutside(datepicker, ev) {\n  const {element, picker} = datepicker;\n  // check both picker's and input's activeness to make updateOnBlur work in\n  // the cases where...\n  // - picker is hidden by ESC key press \u2192 input stays focused\n  // - input is unfocused by closing mobile keyboard \u2192 piker is kept shown\n  if (!picker.active && !isActiveElement(element)) {\n    return;\n  }\n  const pickerElem = picker.element;\n  if (findElementInEventPath(ev, el => el === element || el === pickerElem)) {\n    return;\n  }\n  unfocus(datepicker);\n}\n", "import {lastItemOf, stringToArray, isInRange} from './lib/utils.js';\nimport {today, regularizeDate} from './lib/date.js';\nimport {parseDate, formatDate} from './lib/date-format.js';\nimport {isActiveElement} from './lib/dom.js';\nimport {registerListeners, unregisterListeners} from './lib/event.js';\nimport locales from './i18n/base-locales.js';\nimport defaultOptions from './options/defaultOptions.js';\nimport processOptions from './options/processOptions.js';\nimport createShortcutKeyConfig from './options/shortcutKeys.js';\nimport Picker from './picker/Picker.js';\nimport {triggerDatepickerEvent} from './events/functions.js';\nimport {\n  onKeydown,\n  onFocus,\n  onMousedown,\n  onClickInput,\n  onPaste,\n} from './events/elementListeners.js';\nimport {onClickOutside} from './events/otherListeners.js';\n\nfunction stringifyDates(dates, config) {\n  return dates\n    .map(dt => formatDate(dt, config.format, config.locale))\n    .join(config.dateDelimiter);\n}\n\n// parse input dates and create an array of time values for selection\n// returns undefined if there are no valid dates in inputDates\n// when origDates (current selection) is passed, the function works to mix\n// the input dates into the current selection\nfunction processInputDates(datepicker, inputDates, clear = false) {\n  if (inputDates.length === 0) {\n    // empty input is considered valid unless origiDates is passed\n    return clear ? [] : undefined;\n  }\n\n  const {config, dates: origDates, rangeSideIndex} = datepicker;\n  const {pickLevel, maxNumberOfDates} = config;\n  let newDates = inputDates.reduce((dates, dt) => {\n    let date = parseDate(dt, config.format, config.locale);\n    if (date === undefined) {\n      return dates;\n    }\n    // adjust to 1st of the month/Jan 1st of the year\n    // or to the last day of the monh/Dec 31st of the year if the datepicker\n    // is the range-end picker of a rangepicker\n    date = regularizeDate(date, pickLevel, rangeSideIndex);\n    if (\n      isInRange(date, config.minDate, config.maxDate)\n      && !dates.includes(date)\n      && !config.checkDisabled(date, pickLevel)\n      && (pickLevel > 0 || !config.daysOfWeekDisabled.includes(new Date(date).getDay()))\n    ) {\n      dates.push(date);\n    }\n    return dates;\n  }, []);\n  if (newDates.length === 0) {\n    return;\n  }\n  if (config.multidate && !clear) {\n    // get the synmetric difference between origDates and newDates\n    newDates = newDates.reduce((dates, date) => {\n      if (!origDates.includes(date)) {\n        dates.push(date);\n      }\n      return dates;\n    }, origDates.filter(date => !newDates.includes(date)));\n  }\n  // do length check always because user can input multiple dates regardless of the mode\n  return maxNumberOfDates && newDates.length > maxNumberOfDates\n    ? newDates.slice(maxNumberOfDates * -1)\n    : newDates;\n}\n\n// refresh the UI elements\n// modes: 1: input only, 2, picker only, 3 both\nfunction refreshUI(datepicker, mode = 3, quickRender = true, viewDate = undefined) {\n  const {config, picker, inputField} = datepicker;\n  if (mode & 2) {\n    const newView = picker.active ? config.pickLevel : config.startView;\n    picker.update(viewDate).changeView(newView).render(quickRender);\n  }\n  if (mode & 1 && inputField) {\n    inputField.value = stringifyDates(datepicker.dates, config);\n  }\n}\n\nfunction setDate(datepicker, inputDates, options) {\n  const config = datepicker.config;\n  let {clear, render, autohide, revert, forceRefresh, viewDate} = options;\n  if (render === undefined) {\n    render = true;\n  }\n  if (!render) {\n    autohide = forceRefresh = false;\n  } else if (autohide === undefined) {\n    autohide = config.autohide;\n  }\n  viewDate = parseDate(viewDate, config.format, config.locale);\n\n  const newDates = processInputDates(datepicker, inputDates, clear);\n  if (!newDates && !revert) {\n    return;\n  }\n  if (newDates && newDates.toString() !== datepicker.dates.toString()) {\n    datepicker.dates = newDates;\n    refreshUI(datepicker, render ? 3 : 1, true, viewDate);\n    triggerDatepickerEvent(datepicker, 'changeDate');\n  } else {\n    refreshUI(datepicker, forceRefresh ? 3 : 1, true, viewDate);\n  }\n\n  if (autohide) {\n    datepicker.hide();\n  }\n}\n\nfunction getOutputConverter(datepicker, format) {\n  return format\n    ? date => formatDate(date, format, datepicker.config.locale)\n    : date => new Date(date);\n}\n\n/**\n * Class representing a date picker\n */\nexport default class Datepicker {\n  /**\n   * Create a date picker\n   * @param  {Element} element - element to bind a date picker\n   * @param  {Object} [options] - config options\n   * @param  {DateRangePicker} [rangepicker] - DateRangePicker instance the\n   * date picker belongs to. Use this only when creating date picker as a part\n   * of date range picker\n   */\n  constructor(element, options = {}, rangepicker = undefined) {\n    element.datepicker = this;\n    this.element = element;\n    this.dates = [];\n\n    // initialize config\n    const config = this.config = Object.assign({\n      buttonClass: (options.buttonClass && String(options.buttonClass)) || 'button',\n      container: null,\n      defaultViewDate: today(),\n      maxDate: undefined,\n      minDate: undefined,\n    }, processOptions(defaultOptions, this));\n\n    // configure by type\n    let inputField;\n    if (element.tagName === 'INPUT') {\n      inputField = this.inputField = element;\n      inputField.classList.add('datepicker-input');\n      if (options.container) {\n        // omit string type check because it doesn't guarantee to avoid errors\n        // (invalid selector string causes abend with sytax error)\n        config.container = options.container instanceof HTMLElement\n          ? options.container\n          : document.querySelector(options.container);\n      }\n    } else {\n      config.container = element;\n    }\n    if (rangepicker) {\n      // check validiry\n      const index = rangepicker.inputs.indexOf(inputField);\n      const datepickers = rangepicker.datepickers;\n      if (index < 0 || index > 1 || !Array.isArray(datepickers)) {\n        throw Error('Invalid rangepicker object.');\n      }\n      // attach itaelf to the rangepicker here so that processInputDates() can\n      // determine if this is the range-end picker of the rangepicker while\n      // setting inital values when pickLevel > 0\n      datepickers[index] = this;\n      this.rangepicker = rangepicker;\n      this.rangeSideIndex = index;\n    }\n\n    // set up config\n    this._options = options;\n    Object.assign(config, processOptions(options, this));\n    config.shortcutKeys = createShortcutKeyConfig(options.shortcutKeys || {});\n\n    // process initial value\n    const initialDates = stringToArray(\n      element.value || element.dataset.date,\n      config.dateDelimiter\n    );\n    delete element.dataset.date;\n    const inputDateValues = processInputDates(this, initialDates);\n    if (inputDateValues && inputDateValues.length > 0) {\n      this.dates = inputDateValues;\n    }\n    if (inputField) {\n      inputField.value = stringifyDates(this.dates, config);\n    }\n\n    // set up picekr element\n    const picker = this.picker = new Picker(this);\n\n    const keydownListener = [element, 'keydown', onKeydown.bind(null, this)];\n    if (inputField) {\n      registerListeners(this, [\n        keydownListener,\n        [inputField, 'focus', onFocus.bind(null, this)],\n        [inputField, 'mousedown', onMousedown.bind(null, this)],\n        [inputField, 'click', onClickInput.bind(null, this)],\n        [inputField, 'paste', onPaste.bind(null, this)],\n        // To detect a click on outside, just listening to mousedown is enough,\n        // no need to listen to touchstart.\n        // Actually, listening to touchstart can be a problem because, while\n        // mousedown is fired only on tapping but not on swiping/pinching,\n        // touchstart is fired on swiping/pinching as well.\n        // (issue #95)\n        [document, 'mousedown', onClickOutside.bind(null, this)],\n        [window, 'resize', picker.place.bind(picker)]\n      ]);\n    } else {\n      registerListeners(this, [keydownListener]);\n      this.show();\n    }\n  }\n\n  /**\n   * Format Date object or time value in given format and language\n   * @param  {Date|Number} date - date or time value to format\n   * @param  {String|Object} format - format string or object that contains\n   * toDisplay() custom formatter, whose signature is\n   * - args:\n   *   - date: {Date} - Date instance of the date passed to the method\n   *   - format: {Object} - the format object passed to the method\n   *   - locale: {Object} - locale for the language specified by `lang`\n   * - return:\n   *     {String} formatted date\n   * @param  {String} [lang=en] - language code for the locale to use\n   * @return {String} formatted date\n   */\n  static formatDate(date, format, lang) {\n    return formatDate(date, format, lang && locales[lang] || locales.en);\n  }\n\n  /**\n   * Parse date string\n   * @param  {String|Date|Number} dateStr - date string, Date object or time\n   * value to parse\n   * @param  {String|Object} format - format string or object that contains\n   * toValue() custom parser, whose signature is\n   * - args:\n   *   - dateStr: {String|Date|Number} - the dateStr passed to the method\n   *   - format: {Object} - the format object passed to the method\n   *   - locale: {Object} - locale for the language specified by `lang`\n   * - return:\n   *     {Date|Number} parsed date or its time value\n   * @param  {String} [lang=en] - language code for the locale to use\n   * @return {Number} time value of parsed date\n   */\n  static parseDate(dateStr, format, lang) {\n    return parseDate(dateStr, format, lang && locales[lang] || locales.en);\n  }\n\n  /**\n   * @type {Object} - Installed locales in `[languageCode]: localeObject` format\n   * en`:_English (US)_ is pre-installed.\n   */\n  static get locales() {\n    return locales;\n  }\n\n  /**\n   * @type {Boolean} - Whether the picker element is shown. `true` whne shown\n   */\n  get active() {\n    return !!(this.picker && this.picker.active);\n  }\n\n  /**\n   * @type {HTMLDivElement} - DOM object of picker element\n   */\n  get pickerElement() {\n    return this.picker ? this.picker.element : undefined;\n  }\n\n  /**\n   * Set new values to the config options\n   * @param {Object} options - config options to update\n   */\n  setOptions(options) {\n    const newOptions = processOptions(options, this);\n    Object.assign(this._options, options);\n    Object.assign(this.config, newOptions);\n    this.picker.setOptions(newOptions);\n\n    refreshUI(this, 3);\n  }\n\n  /**\n   * Show the picker element\n   */\n  show() {\n    if (this.inputField) {\n      const {config, inputField} = this;\n      if (inputField.disabled || (inputField.readOnly && !config.enableOnReadonly)) {\n        return;\n      }\n      if (!isActiveElement(inputField) && !config.disableTouchKeyboard) {\n        this._showing = true;\n        inputField.focus();\n        delete this._showing;\n      }\n    }\n    this.picker.show();\n  }\n\n  /**\n   * Hide the picker element\n   * Not available on inline picker\n   */\n  hide() {\n    if (!this.inputField) {\n      return;\n    }\n    this.picker.hide();\n    this.picker.update().changeView(this.config.startView).render();\n  }\n\n  /**\n   * Toggle the display of the picker element\n   * Not available on inline picker\n   *\n   * Unlike hide(), the picker does not return to the start view when hiding.\n   */\n  toggle() {\n    if (!this.picker.active) {\n      this.show();\n    } else if (this.inputField) {\n      this.picker.hide();\n    }\n  }\n\n  /**\n   * Destroy the Datepicker instance\n   * @return {Detepicker} - the instance destroyed\n   */\n  destroy() {\n    this.hide();\n    unregisterListeners(this);\n    this.picker.detach();\n    const element = this.element;\n    element.classList.remove('datepicker-input');\n    delete element.datepicker;\n    return this;\n  }\n\n  /**\n   * Get the selected date(s)\n   *\n   * The method returns a Date object of selected date by default, and returns\n   * an array of selected dates in multidate mode. If format string is passed,\n   * it returns date string(s) formatted in given format.\n   *\n   * @param  {String} [format] - format string to stringify the date(s)\n   * @return {Date|String|Date[]|String[]} - selected date(s), or if none is\n   * selected, empty array in multidate mode and undefined in sigledate mode\n   */\n  getDate(format = undefined) {\n    const callback = getOutputConverter(this, format);\n\n    if (this.config.multidate) {\n      return this.dates.map(callback);\n    }\n    if (this.dates.length > 0) {\n      return callback(this.dates[0]);\n    }\n  }\n\n  /**\n   * Set selected date(s)\n   *\n   * In multidate mode, you can pass multiple dates as a series of arguments\n   * or an array. (Since each date is parsed individually, the type of the\n   * dates doesn't have to be the same.)\n   * The given dates are used to toggle the select status of each date. The\n   * number of selected dates is kept from exceeding the length set to\n   * maxNumberOfDates.\n   *\n   * With clear: true option, the method can be used to clear the selection\n   * and to replace the selection instead of toggling in multidate mode.\n   * If the option is passed with no date arguments or an empty dates array,\n   * it works as \"clear\" (clear the selection then set nothing), and if the\n   * option is passed with new dates to select, it works as \"replace\" (clear\n   * the selection then set the given dates)\n   *\n   * When render: false option is used, the method omits re-rendering the\n   * picker element. In this case, you need to call refresh() method later in\n   * order for the picker element to reflect the changes. The input field is\n   * refreshed always regardless of this option.\n   *\n   * When invalid (unparsable, repeated, disabled or out-of-range) dates are\n   * passed, the method ignores them and applies only valid ones. In the case\n   * that all the given dates are invalid, which is distinguished from passing\n   * no dates, the method considers it as an error and leaves the selection\n   * untouched. (The input field also remains untouched unless revert: true\n   * option is used.)\n   * Replacing the selection with the same date(s) also causes a similar\n   * situation. In both cases, the method does not refresh the picker element\n   * unless forceRefresh: true option is used.\n   *\n   * If viewDate option is used, the method changes the focused date to the\n   * specified date instead of the last item of the selection.\n   *\n   * @param {...(Date|Number|String)|Array} [dates] - Date strings, Date\n   * objects, time values or mix of those for new selection\n   * @param {Object} [options] - function options\n   * - clear: {boolean} - Whether to clear the existing selection\n   *     defualt: false\n   * - render: {boolean} - Whether to re-render the picker element\n   *     default: true\n   * - autohide: {boolean} - Whether to hide the picker element after re-render\n   *     Ignored when used with render: false\n   *     default: config.autohide\n   * - revert: {boolean} - Whether to refresh the input field when all the\n   *     passed dates are invalid\n   *     default: false\n   * - forceRefresh: {boolean} - Whether to refresh the picker element when\n   *     passed dates don't change the existing selection\n   *     default: false\n   * - viewDate: {Date|Number|String} - Date to be focused after setiing date(s)\n   *     default: The last item of the resulting selection, or defaultViewDate\n   *     config option if none is selected\n   */\n  setDate(...args) {\n    const dates = [...args];\n    const opts = {};\n    const lastArg = lastItemOf(args);\n    if (\n      lastArg\n      && typeof lastArg === 'object'\n      && !Array.isArray(lastArg)\n      && !(lastArg instanceof Date)\n    ) {\n      Object.assign(opts, dates.pop());\n    }\n\n    const inputDates = Array.isArray(dates[0]) ? dates[0] : dates;\n    setDate(this, inputDates, opts);\n  }\n\n  /**\n   * Update the selected date(s) with input field's value\n   * Not available on inline picker\n   *\n   * The input field will be refreshed with properly formatted date string.\n   *\n   * In the case that all the entered dates are invalid (unparsable, repeated,\n   * disabled or out-of-range), which is distinguished from empty input field,\n   * the method leaves the input field untouched as well as the selection by\n   * default. If revert: true option is used in this case, the input field is\n   * refreshed with the existing selection.\n   * The method also doesn't refresh the picker element in this case and when\n   * the entered dates are the same as the existing selection. If\n   * forceRefresh: true option is used, the picker element is refreshed in\n   * these cases too.\n   *\n   * @param  {Object} [options] - function options\n   * - autohide: {boolean} - whether to hide the picker element after refresh\n   *     default: false\n   * - revert: {boolean} - Whether to refresh the input field when all the\n   *     passed dates are invalid\n   *     default: false\n   * - forceRefresh: {boolean} - Whether to refresh the picer element when\n   *     input field's value doesn't change the existing selection\n   *     default: false\n   */\n  update(options = undefined) {\n    if (!this.inputField) {\n      return;\n    }\n\n    const opts = Object.assign(options || {}, {clear: true, render: true, viewDate: undefined});\n    const inputDates = stringToArray(this.inputField.value, this.config.dateDelimiter);\n    setDate(this, inputDates, opts);\n  }\n\n  /**\n   * Get the focused date\n   *\n   * The method returns a Date object of focused date by default. If format\n   * string is passed, it returns date string formatted in given format.\n   *\n   * @param  {String} [format] - format string to stringify the date\n   * @return {Date|String} - focused date (viewDate)\n   */\n  getFocusedDate(format = undefined) {\n    return getOutputConverter(this, format)(this.picker.viewDate);\n  }\n\n  /**\n   * Set focused date\n   *\n   * By default, the method updates the focus on the view shown at the time,\n   * or the one set to the startView config option if the picker is hidden.\n   * When resetView: true is passed, the view displayed is changed to the\n   * pickLevel config option's if the picker is shown.\n   *\n   * @param {Date|Number|String} viewDate - date string, Date object, time\n   * values of the date to focus\n   * @param {Boolean} [resetView] - whether to change the view to pickLevel\n   * config option's when the picker is shown. Ignored when the picker is\n   * hidden\n   */\n  setFocusedDate(viewDate, resetView = false) {\n    const {config, picker, active, rangeSideIndex} = this;\n    const pickLevel = config.pickLevel;\n    const newViewDate = parseDate(viewDate, config.format, config.locale);\n    if (newViewDate === undefined) {\n      return;\n    }\n\n    picker.changeFocus(regularizeDate(newViewDate, pickLevel, rangeSideIndex));\n    if (active && resetView) {\n      picker.changeView(pickLevel);\n    }\n    picker.render();\n  }\n\n  /**\n   * Refresh the picker element and the associated input field\n   * @param {String} [target] - target item when refreshing one item only\n   * 'picker' or 'input'\n   * @param {Boolean} [forceRender] - whether to re-render the picker element\n   * regardless of its state instead of optimized refresh\n   */\n  refresh(target = undefined, forceRender = false) {\n    if (target && typeof target !== 'string') {\n      forceRender = target;\n      target = undefined;\n    }\n\n    let mode;\n    if (target === 'picker') {\n      mode = 2;\n    } else if (target === 'input') {\n      mode = 1;\n    } else {\n      mode = 3;\n    }\n    refreshUI(this, mode, !forceRender);\n  }\n\n  /**\n   * Enter edit mode\n   * Not available on inline picker or when the picker element is hidden\n   */\n  enterEditMode() {\n    const inputField = this.inputField;\n    if (!inputField || inputField.readOnly || !this.picker.active || this.editMode) {\n      return;\n    }\n    this.editMode = true;\n    inputField.classList.add('in-edit');\n  }\n\n  /**\n   * Exit from edit mode\n   * Not available on inline picker\n   * @param  {Object} [options] - function options\n   * - update: {boolean} - whether to call update() after exiting\n   *     If false, input field is revert to the existing selection\n   *     default: false\n   */\n  exitEditMode(options = undefined) {\n    if (!this.inputField || !this.editMode) {\n      return;\n    }\n    const opts = Object.assign({update: false}, options);\n    delete this.editMode;\n    this.inputField.classList.remove('in-edit');\n    if (opts.update) {\n      this.update(opts);\n    }\n  }\n}\n", "export default {\n\tsk: {\n\t\tdays: [\"Nede\u013Ea\", \"Pondelok\", \"Utorok\", \"Streda\", \"\u0160tvrtok\", \"Piatok\", \"Sobota\"],\n\t\tdaysShort: [\"Ned\", \"Pon\", \"Uto\", \"Str\", \"\u0160tv\", \"Pia\", \"Sob\"],\n\t\tdaysMin: [\"Ne\", \"Po\", \"Ut\", \"St\", \"\u0160t\", \"Pia\", \"So\"],\n\t\tmonths: [\"Janu\u00E1r\", \"Febru\u00E1r\", \"Marec\", \"Apr\u00EDl\", \"M\u00E1j\", \"J\u00FAn\", \"J\u00FAl\", \"August\", \"September\", \"Okt\u00F3ber\", \"November\", \"December\"],\n\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"M\u00E1j\", \"J\u00FAn\", \"J\u00FAl\", \"Aug\", \"Sep\", \"Okt\", \"Nov\", \"Dec\"],\n\t\ttoday: \"Dnes\",\n\t\tclear: \"Vymaza\u0165\",\n\t\tweekStart: 1,\n\t\tformat: \"dd.mm.yyyy\"\n\t}\n};", "//TODO: rewrite into ES6 module\n\nimport Datepicker from 'vanillajs-datepicker/Datepicker';\nimport sk from './datepicker/sk';\n\nObject.assign(Datepicker.locales, sk);\n\nexport const initializeVanillajsDatepicker = function (input = new Node()) {\n  return new Datepicker(input, {\n    language: document.documentElement.lang,\n    buttonClass: 'btn',\n    todayHighlight: true,\n    todayButton: true,\n    todayButtonMode: 1,\n    autohide: true,\n    minDate: new Date(1989, 0, 1),\n    maxDate: new Date(2050, 11, 31)\n  });\n};\n", "import { Controller } from '@hotwired/stimulus';\nimport { deleteJSON } from '../utils';\nimport { simpleCardMethods } from '../utils';\n\n// Connects to data-controller=\"dodavatels-index\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, simpleCardMethods);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"dodavatels-show\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport {\n  formatNumber,\n  parseNumber,\n  round,\n  changeItemSzcp,\n  eightyPercent,\n  popupHelpers,\n  updateDanovyPomerSelectboxes,\n  onPartnerChange,\n  onDodavatelChange\n} from '../utils';\nimport { openURL } from '../window_manager';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\nimport { initializeTomSelect } from '../tom_select';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\n// Connects to data-controller=\"dosla-fakturas\"\nexport default class extends Controller {\n  static targets = [\n    'numberLabelEl',\n    'datumDodaniaEl',\n    'labelVatEl',\n    'labelInvoicedItemsVatEl'\n  ];\n\n  initialize() {\n    Object.assign(this, popupHelpers, {\n      updateDanovyPomerSelectboxes,\n      onPartnerChange,\n      onDodavatelChange\n    });\n\n    dayjs.extend(customParseFormat);\n  }\n\n  async connect() {\n    import('../delete').then(module => {\n      this.deleteResource = module.deleteResource.bind(this);\n    });\n\n    import('../add').then(module => {\n      this.addFields = module.addFields.bind(this);\n    });\n\n    const module = await import('../df_polozkas.js');\n    const firstItem = document.querySelector('#df_polozkas .df-polozka');\n    const sumaSDph = firstItem?.querySelector('[name$=\"[suma_s_dph]\"]');\n\n    this.dfPolozkasKeyupEvents = module.dfPolozkasKeyupEvents.bind(this);\n\n    sumaSDph &&\n      this.element.querySelector('form#new_dosla_faktura') &&\n      this.dfPolozkasKeyupEvents({ target: sumaSDph });\n\n    import('../show_submit_buttons').then(module => {\n      this.showSubmitButton = module.showSubmitButton.bind(this);\n    });\n\n    import('../utils').then(utils => {\n      this.updateZadanaUhradaLabels = utils.updateZadanaUhradaLabels.bind(this);\n    });\n  }\n\n  fakturovaneSDPH() {\n    const zlavaPercVal = parseNumber(\n      document.querySelector('input[id=\"dosla_faktura_zlava_perc\"]').value\n    );\n    const cenySuSDphBool =\n      document.querySelector('select#dosla_faktura_ceny_su_s_dph').value ===\n      'true';\n    const cenaDokopyVal = parseNumber(\n      document.querySelector('#label-invoiced-items-with-vat').textContent\n    );\n    let cenaDokopySCiastocnymi =\n      cenaDokopyVal - Math.round(cenaDokopyVal * zlavaPercVal) / 100;\n    let sumaPoloziek = 0;\n    let sumaZaloh = 0;\n    let sadzby = {};\n    let sadzbyZalohy = {};\n\n    document\n      .querySelectorAll('#fakt_sklad_polozkies .stock-item')\n      .forEach(item => {\n        if (item.querySelector('[id*=\"_destroy\"]').value === 'true') return;\n\n        const dphPercVal = item.querySelector('[id*=\"_dph_perc\"]').value;\n        const cenaSpolu = parseNumber(\n          item.querySelector('[id*=\"_cena_spolu\"]').value\n        );\n        const zlava = parseNumber(item.querySelector('[id*=\"_zlava\"]').value);\n\n        if (!(dphPercVal in sadzby)) {\n          sadzby[dphPercVal] = 0;\n        }\n\n        if (item.dataset.zaloha === true) {\n          sadzbyZalohy[dphPercVal] +=\n            cenaSpolu - Math.round(cenaSpolu * zlava) / 100;\n\n          return;\n        }\n\n        sadzby[dphPercVal] += cenaSpolu - Math.round(cenaSpolu * zlava) / 100;\n      });\n\n    Object.keys(sadzby).forEach(dphPerc => {\n      const sumaPoCelkZlaveVal =\n        sadzby[dphPerc] - Math.round(sadzby[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaPoloziek += round(sumaPoCelkZlaveVal);\n\n        return;\n      }\n\n      sumaPoloziek +=\n        sumaPoCelkZlaveVal +\n        round(sumaPoCelkZlaveVal * (parseNumber(dphPerc) / 100));\n    });\n\n    Object.keys(sadzbyZalohy).forEach(dphPerc => {\n      const sumaPoCelkZlave =\n        sadzbyZalohy[dphPerc] -\n        Math.round(sadzbyZalohy[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaZaloh = round(sumaPoCelkZlave);\n\n        return;\n      }\n\n      sumaZaloh =\n        sumaPoCelkZlave + round(sumaPoCelkZlave * (parseNumber(dphPerc) / 100));\n    });\n\n    cenaDokopySCiastocnymi += sumaPoloziek;\n    cenaDokopySCiastocnymi += sumaZaloh;\n\n    // partial invoices\n    cenaDokopySCiastocnymi -= parseNumber(\n      document.querySelector('#label-partial-with-vat')?.textContent\n    );\n\n    document.querySelector('#label-with-vat').textContent = formatNumber(\n      cenaDokopySCiastocnymi\n    );\n  }\n\n  fakturovaneBezDPH() {\n    const zlavaPercVal = parseNumber(\n      document.querySelector('input[id*=\"dosla_faktura_zlava_perc\"]').value\n    );\n    const cenySuSDphBool =\n      document.querySelector('select#dosla_faktura_ceny_su_s_dph').value ===\n      'true';\n    const cenaDokopyVal = parseNumber(\n      document.querySelector('#label-invoiced-items-without-vat').textContent\n    );\n    let cenaDokopySCiastocnymiVal =\n      cenaDokopyVal - Math.round(cenaDokopyVal * zlavaPercVal) / 100;\n\n    let sumaPoloziekVal = 0;\n    let sumaZalohVal = 0;\n    let sadzby = {};\n    let sadzbyZalohy = {};\n\n    document\n      .querySelectorAll('#fakt_sklad_polozkies .stock-item')\n      .forEach(item => {\n        if (item.querySelector('[id*=\"_destroy\"]').value === 'true') return;\n\n        const dphPercVal = item.querySelector('[id*=\"_dph_perc\"]').value;\n        const cenaSpoluVal = parseNumber(\n          item.querySelector('[id*=\"_cena_spolu\"]').value\n        );\n        const zlavaVal = parseNumber(\n          item.querySelector('[id*=\"_zlava\"]').value\n        );\n\n        if (!(dphPercVal in sadzby)) {\n          sadzby[dphPercVal] = 0;\n        }\n\n        if (item.dataset.zaloha === true) {\n          sadzbyZalohy[dphPercVal] +=\n            cenaSpoluVal - Math.round(cenaSpoluVal * zlavaVal) / 100;\n\n          return;\n        }\n\n        sadzby[dphPercVal] +=\n          cenaSpoluVal - Math.round(cenaSpoluVal * zlavaVal) / 100;\n      });\n\n    Object.keys(sadzby).forEach(dphPerc => {\n      const sumaPoCelkZlaveVal =\n        sadzby[dphPerc] - Math.round(sadzby[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaPoloziekVal +=\n          Math.round(\n            (sumaPoCelkZlaveVal / (parseNumber(dphPerc) + 100)) * 10000\n          ) / 100;\n\n        return;\n      }\n\n      sumaPoloziekVal += round(sumaPoCelkZlaveVal);\n    });\n\n    Object.keys(sadzbyZalohy).forEach(dphPerc => {\n      const sumaPoCelkZlave =\n        sadzbyZalohy[dphPerc] -\n        Math.round(sadzbyZalohy[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaZalohVal =\n          Math.round((sumaPoCelkZlave / (parseNumber(dphPerc) + 100)) * 10000) /\n          100;\n\n        return;\n      }\n\n      sumaZalohVal = round(sumaPoCelkZlave);\n    });\n\n    cenaDokopySCiastocnymiVal += sumaPoloziekVal;\n    cenaDokopySCiastocnymiVal += sumaZalohVal;\n\n    // partial invoices\n    cenaDokopySCiastocnymiVal -= parseNumber(\n      document.querySelector('#label-partial-without-vat')?.textContent\n    );\n\n    document.querySelector('#label-without-vat').textContent = formatNumber(\n      cenaDokopySCiastocnymiVal\n    );\n  }\n\n  calcSumCount() {\n    const nodeList = this.element.querySelectorAll(\n      '#df_polozkas .df-polozka:not([style=\"display: none;\"])'\n    );\n    const sums = Array.from(nodeList, item => {\n      return {\n        with_vat: parseNumber(\n          item.querySelector('[name$=\"[suma_s_dph]\"]')?.value\n        ),\n        without_vat: parseNumber(\n          item.querySelector('[name$=\"[suma_bez_dph]\"]')?.value\n        )\n      };\n    }).reduce(\n      (counter, item) => {\n        return {\n          with_vat: counter.with_vat + item.with_vat,\n          without_vat: counter.without_vat + item.without_vat\n        };\n      },\n      { with_vat: 0, without_vat: 0 }\n    );\n\n    this.element.querySelector('#label-invoiced-items-with-vat').textContent =\n      formatNumber(sums.with_vat);\n    this.element.querySelector(\n      '#label-invoiced-items-without-vat'\n    ).textContent = formatNumber(sums.without_vat);\n\n    if (this.hasLabelInvoicedItemsVatElTarget) {\n      this.labelInvoicedItemsVatElTarget.textContent = formatNumber(\n        sums.with_vat - sums.without_vat\n      );\n    }\n\n    this.fakturovaneBezDPH();\n    this.fakturovaneSDPH();\n\n    if (this.hasLabelVatElTarget) {\n      this.labelVatElTarget.textContent = formatNumber(\n        parseNumber(document.querySelector('#label-with-vat').textContent) -\n          parseNumber(document.querySelector('#label-without-vat').textContent)\n      );\n    }\n  }\n\n  onAddFieldButton(e) {\n    this.addFields(\n      e.target.closest('.add-fields'),\n      (copiedDiv, lastElBeforeInsert) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n          copiedDiv\n            .querySelectorAll('input.vanillajs-datepicker')\n            .forEach(input => {\n              initializeVanillajsDatepicker(input);\n            });\n\n          if (copiedDiv.classList.contains('df-polozka')) {\n            const dphPercEl = copiedDiv.querySelector(\n              'input[name$=\"[dph_perc]\"]'\n            );\n\n            if (dphPercEl) this.dfPolozkasKeyupEvents({ target: dphPercEl });\n\n            [\n              'stredisko_id',\n              'zakazka_id',\n              'cinnost_id',\n              'pracovnik_id'\n            ].forEach(szcp => {\n              const select = copiedDiv.querySelector(\n                `select[name$=\"[${szcp}]\"]`\n              );\n\n              if (!select?.tomselect) return;\n\n              select.tomselect.setValue(\n                this.element.querySelector(`#dosla_faktura_${szcp}`).value,\n                true\n              );\n            });\n\n            const sumaSDph = copiedDiv.querySelector(`[name$=\"[suma_s_dph]\"]`);\n\n            sumaSDph.select();\n            sumaSDph.focus();\n          }\n\n          copiedDiv = copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e) {\n    this.deleteResource(e.currentTarget, (parent_name, parent) => {\n      switch (parent_name) {\n        case 'df-polozka':\n          this.calcSumCount();\n          break;\n        case 'payment':\n          this.updateZadanaUhradaLabels();\n          break;\n        default:\n          parent\n            .querySelector('input[type=\"text\"]:not(.vanillajs-datepicker)')\n            .dispatchEvent(new Event('keyup'));\n      }\n    });\n  }\n\n  showEvid() {\n    openURL('/evids/10', { parentUrl: new URL(location) });\n  }\n\n  showCiselnyRad() {\n    const cr = this.element.querySelector('#dosla_faktura_ciselny_rad_id');\n    cr &&\n      openURL(`/ciselny_rads/${cr.value}`, {\n        parentUrl: new URL(location)\n      });\n  }\n\n  showUctovneZaradenie(e) {\n    openURL('/uctovne-zaradenies/10', { parentUrl: new URL(location) });\n  }\n\n  showPartner(e) {\n    openURL(\n      `/partners/${\n        document.querySelector('#dosla_faktura_partner_id').value || 'new'\n      }`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  showDodavatel(e) {\n    openURL(\n      `/dodavatels/${\n        this.element.querySelector('#dosla_faktura_dodavatel_id').value || 'new'\n      }`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  getSampleNumbering(e) {\n    const target = e.currentTarget;\n    makeRequest(\n      `/ciselny_rads/get-sample-numbering?ciselny_rad_id=${\n        document.querySelector('#dosla_faktura_ciselny_rad_id').value\n      }&datum=${document.querySelector('#dosla_faktura_datum_dodania').value}`,\n      { method: 'PATCH' }\n    )\n      .then(response => {\n        document.querySelector('#dosla_faktura_cislo_faktury').value =\n          response.level1;\n        document.querySelector('#dosla_faktura_old_cislo_faktury').value =\n          response.level1;\n        document.querySelector('#label-invoice-number span').innerHTML =\n          response.level3;\n        this.showSubmitButton(target);\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  updateCurrencyRate() {\n    const dateVal = document.querySelector(\n      '#dosla_faktura_datum_dodania'\n    ).value;\n\n    if (!dayjs(dateVal, 'DD.MM.YYYY', true).isValid()) return;\n\n    makeRequest(\n      `/currency-rates/get-by-date?date=${dateVal}&cis_mena_id=${\n        document.querySelector('#dosla_faktura_cis_mena_id').value\n      }`\n    )\n      .then(rate => {\n        document.querySelector('#dosla_faktura_kurz').value = formatNumber(\n          rate,\n          4\n        );\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  onCisMenaChange(e) {\n    const oldCurrency = this.element.querySelector('.label-cis-mena').innerHTML;\n    const newCurrency =\n      e.target.tomselect?.options[e.target.tomselect.getValue()].$option\n        .innerHTML;\n\n    this.element.querySelectorAll('.label-cis-mena').forEach(element => {\n      element.innerHTML = newCurrency;\n    });\n\n    document.querySelector('#df_polozkas .add-fields').dataset.fields = document\n      .querySelector('#df_polozkas .add-fields')\n      .dataset.fields.replace(oldCurrency, newCurrency);\n\n    this.updateCurrencyRate();\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n    this.updateLabelInvoiceNumber();\n  }\n\n  updateLabelInvoiceNumber() {\n    const evid = document.querySelector('#dosla_faktura_evidencia_id');\n    const cisRad = document.querySelector('#dosla_faktura_ciselny_rad_id');\n\n    [evid, cisRad].forEach(element => {\n      if (element.tomselect.getValue()) {\n        this.numberLabelElTarget.classList.remove('text-danger');\n        this.numberLabelElTarget.classList.add('text-primary');\n      } else {\n        this.numberLabelElTarget.classList.remove('text-primary');\n        this.numberLabelElTarget.classList.add('text-danger');\n      }\n    });\n\n    this.numberLabelElTarget.innerHTML = `${\n      evid.options[evid.selectedIndex]?.dataset?.kod\n    }-${cisRad.options[cisRad.selectedIndex]?.dataset?.kod}-${\n      document.querySelector('#dosla_faktura_cislo_faktury').value\n    }`;\n  }\n\n  setDatumDodania(e) {\n    const target = e.currentTarget;\n    const { pocetDniSplatnosti, datumDodaniaTyp, datumDodaniaHodnota } =\n      target.dataset;\n\n    const forms = document.querySelectorAll('form[id*=\"dosla_faktura\"]')[0];\n    const d_dodania = forms.querySelector('#dosla_faktura_datum_dodania');\n    const d_splatnosti = forms.querySelector('#dosla_faktura_datum_splatnosti');\n    const dajsObj = dayjs(target.value, 'DD.MM.YYYY', true);\n    if (dajsObj.isValid()) {\n      if (d_splatnosti && d_splatnosti.datepicker) {\n        d_splatnosti.datepicker.setDate(\n          dajsObj.add(parseInt(pocetDniSplatnosti), 'days').$d\n        );\n        d_splatnosti.datepicker.update({ revert: true });\n      }\n      [target, d_dodania, d_splatnosti].forEach(element => {\n        element.classList.remove('is-invalid');\n        element.classList.add('is-valid');\n      });\n      document.querySelector('[type=\"submit\"]').removeAttribute('disabled');\n      if (d_dodania && d_dodania.datepicker) {\n        if (parseInt(datumDodaniaTyp) === 0) {\n          d_dodania.datepicker.setDate(\n            dajsObj.subtract(1, 'month').endOf('month').$d\n          );\n        } else {\n          d_dodania.datepicker.setDate(\n            dajsObj.subtract(parseInt(datumDodaniaHodnota), 'days').$d\n          );\n        }\n        d_dodania.datepicker.update({ revert: true });\n      }\n      this.updateCurrencyRate();\n    } else {\n      target.classList.remove('is-valid');\n      target.classList.add('is-invalid');\n      setTimeout(() => {\n        document\n          .querySelector('[type=\"submit\"]')\n          .setAttribute('disabled', 'disabled');\n      }, 500);\n    }\n  }\n\n  onDatumDodaniaChange(e) {\n    this.updateDanovyPomerSelectboxes();\n  }\n\n  onDatumDodaniaSplatnostiChange(e) {\n    if (dayjs(e.target.value, 'DD.MM.YYYY', true)?.isValid()) {\n      document.querySelector('[type=\"submit\"]').removeAttribute('disabled');\n      e.target.classList.remove('is-invalid');\n      e.target.classList.add('is-valid');\n    } else {\n      e.target.classList.remove('is-valid');\n      e.target.classList.add('is-invalid');\n      setTimeout(() => {\n        document\n          .querySelector('[type=\"submit\"]')\n          .setAttribute('disabled', 'disabled');\n      }, 500);\n    }\n\n    e.target.id === 'dosla_faktura_datum_splatnosti'\n      ? (document.querySelector('#pocet_dni_splatnosti').value = dayjs(\n          e.target.value,\n          'DD.MM.YYYY',\n          true\n        ).diff(\n          dayjs(\n            document.querySelector('#dosla_faktura_datum_vystavenia').value,\n            'DD.MM.YYYY',\n            true\n          ),\n          'day'\n        ))\n      : this.updateCurrencyRate();\n  }\n\n  setDatumSplatnosti(e) {\n    const dajsObj = dayjs(\n      this.element.querySelector('input#dosla_faktura_datum_vystavenia').value,\n      'DD.MM.YYYY',\n      true\n    );\n\n    const datumSplatnosti = this.element.querySelector(\n      'input#dosla_faktura_datum_splatnosti'\n    );\n\n    datumSplatnosti.datepicker?.setDate(\n      dajsObj.add(parseInt(e.target.value), 'days').$d\n    );\n  }\n\n  onSzcpChange(e) {\n    changeItemSzcp(\n      e.target,\n      '.df-polozka, .stock-item',\n      e.target.id.replace('dosla_faktura', '')\n    );\n  }\n\n  toggleSumaZDokladu(e) {\n    const div = this.element.querySelector('.suma-z-dokladu');\n\n    div.classList.toggle('d-none');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { getJSON } from '../utils';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"dosla-fakturas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  openFilter() {\n    let url;\n    let filterId = this.element.querySelector(\n      '#filter_filter_df_filter_id'\n    ).value;\n\n    if (filterId) {\n      url = `/df_filters/${filterId}.html`;\n    } else {\n      url = '/df_filters/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  setMarkedCount() {\n    makeRequest('/dosla-fakturas/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteMarked() {\n    makeRequest('/dosla-fakturas/delete-marked')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteManualPayments() {\n    makeRequest('/dosla-fakturas/delete-manual-payments/10.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  chargeMarked() {\n    makeRequest('/dosla-fakturas/charge-records/10.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  openNew() {\n    openURL('/dosla_fakturas/new');\n  }\n\n  printList(e) {\n    openURL(\n      `/df-prints/preview-list/${\n        e.target.closest('.dropdown-item').dataset.groupsOnly\n      }.pdf`,\n      { tab: true }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"dosla-fakturas-new\"\nexport default class extends Controller {\n  static targets = ['cisloKvDphEl', 'dodavatelEl', 'partnerEl'];\n\n  connect() {\n    this.partnerElTarget.tomselect.getValue()\n      ? this.cisloKvDphElTarget.focus()\n      : this.partnerElTarget.tomselect.focus();\n  }\n\n  onPartnerChange(e) {\n    window.onbeforeunload = null;\n\n    if (e.target.closest('.bg-copy')) return;\n\n    const currentUrl = new URL(window.location.toString());\n    const { copy } = this.partnerElTarget.dataset;\n\n    if (!this.dodavatelElTarget.value || !this.partnerElTarget.value) return;\n    if (copy === 'true') return;\n\n    openURL(\n      `/dosla_fakturas/new/${this.partnerElTarget.value}/${this.dodavatelElTarget.value}${currentUrl.search}`,\n      { target: '_self' }\n    );\n  }\n\n  onDodavatelChange(e) {\n    this.onPartnerChange(e);\n  }\n\n  onEnter(e) {\n    if (e.key !== 'Enter') return;\n\n    const target = e.currentTarget;\n\n    if (!target.id) return;\n\n    if (target === this.cisloKvDphElTarget) {\n      const varSymbolEl = this.element.querySelector('[id*=\"_var_symbol\"]');\n\n      varSymbolEl.select();\n      varSymbolEl.focus();\n    }\n\n    target.id.endsWith('_var_symbol') &&\n      this.element.querySelector('[id*=\"_datum_vystavenia\"]')?.focus();\n\n    if (target.id.endsWith('_datum_vystavenia')) {\n      const datumDodEl = this.element.querySelector('[id*=\"_datum_dodania\"]');\n\n      datumDodEl.focus();\n      datumDodEl.setSelectionRange(0, datumDodEl.value.length);\n    }\n\n    if (target.id.endsWith('_datum_dodania')) {\n      const datumSplatEl = this.element.querySelector(\n        '[id*=\"_datum_splatnosti\"]'\n      );\n\n      datumSplatEl.focus();\n      datumSplatEl.setSelectionRange(0, datumSplatEl.value.length);\n    }\n\n    if (target.id.endsWith('_datum_splatnosti')) {\n      const displayedDfPolozkas = this.element.querySelectorAll(\n        '#df_polozkas .df-polozka:not([styly=\"display: none\"])'\n      );\n\n      if (displayedDfPolozkas.length > 0) {\n        const firstItem = displayedDfPolozkas[0];\n        const sumaSDphEl = firstItem.querySelector('[id*=\"_suma_s_dph\"]');\n\n        if (!sumaSDphEl) return;\n\n        sumaSDphEl.focus();\n        sumaSDphEl.setSelectionRange(0, sumaSDphEl.value.length);\n\n        return;\n      }\n\n      this.element.querySelector('#df_polozkas .add-fields')?.click();\n    }\n\n    if (\n      ['_suma_s_dph', '_dph_perc'].some(name => target.id.endsWith(name)) &&\n      target.value\n    )\n      this.element.querySelector('form#new_dosla_faktura')?.requestSubmit();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\nimport { formatNumber, parseNumber } from '../utils';\nimport { openURL } from '../window_manager';\nimport { showRecord, updateZadanaUhradaLabels } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\n\n// Connects to data-controller=\"dosla-fakturas-show\"\nexport default class extends Controller {\n  newButton = this.element.querySelector('[href^=\"/dosla_fakturas/new\"]');\n\n  initialize() {\n    Object.assign(this, { showRecord, updateZadanaUhradaLabels });\n  }\n\n  connect() {\n    this.element[this.identifier] = this;\n\n    import('../show_submit_buttons').then(show_submit_buttons => {\n      this.boundRegisterKeyupToShowSubmitButton =\n        show_submit_buttons.registerKeyupToShowSubmitButton.bind(this);\n      this.boundRegisterChangeToShowSubmitButton =\n        show_submit_buttons.registerChangeToShowSubmitButton.bind(this);\n\n      this.element.addEventListener(\n        'change',\n        this.boundRegisterChangeToShowSubmitButton\n      );\n      this.element.addEventListener(\n        'keyup',\n        this.boundRegisterKeyupToShowSubmitButton\n      );\n    });\n\n    initializeFilePond();\n\n    this.newButton?.focus();\n  }\n\n  disconnect() {\n    destroyFilePond();\n\n    document.removeEventListener(\n      'keyup',\n      this.boundRegisterKeyupToShowSubmitButton,\n      false\n    );\n    document.removeEventListener(\n      'change',\n      this.boundRegisterChangeToShowSubmitButton,\n      false\n    );\n  }\n\n  findUd(e) {\n    e.preventDefault();\n\n    // prioritize VAT, if none, take non-VAT amount\n    const spanEl = [\n      this.element.querySelector('#label-with-vat'),\n      this.element.querySelector('#label-without-vat'),\n    ].filter(el => !el?.hasAttribute('hidden'))[0];\n\n    const sumaVal = spanEl?.innerHTML;\n\n    if (sumaVal)\n      window.open(\n        `/uctovny_doklads?suma_do=${parseNumber(sumaVal)}&suma_od=${parseNumber(\n          sumaVal\n        )}`,\n        '_blank'\n      );\n  }\n\n  createExCopies(e) {\n    e.preventDefault();\n\n    if (e.target.closest('[action^=\"/dosla-fakturas/create-x-copies/\"]')) {\n      const parent = e.target.closest('div.modal');\n\n      e.preventDefault();\n      e.submitter.setAttribute('disabled', 'disabled');\n\n      makeRequest(e.target.action, {\n        method: 'POST',\n        fillContentType: false,\n        data: new FormData(e.target),\n      })\n        .then(response => {\n          if (response.status) {\n            parent.querySelector('[data-bs-dismiss=\"modal\"]').click();\n          } else {\n            e.submitter.removeAttribute('disabled');\n          }\n\n          window.Turbo.renderStreamMessage(response.turbo_stream);\n        })\n        .catch(\n          err =>\n            e.submitter.removeAttribute('disabled') &&\n            showToastMessage(err, {\n              autohide: false,\n              type: 'bg-danger',\n            })\n        );\n    }\n  }\n\n  openNextTo(e) {\n    e.preventDefault();\n    openURL(e.currentTarget.href, { parentUrl: new URL(location) });\n  }\n\n  createPd(e) {\n    makeRequest('/pokladnas-get-all')\n      .then(response => {\n        const select = document.querySelector(\n          '.offcanvas#create_pd select#data_pokladna_id'\n        );\n        select.tomselect.setValue(null, true);\n        select.tomselect.clearOptions();\n\n        response.data.forEach(pokladna => {\n          select.tomselect.addOption({\n            value: pokladna.id,\n            text: pokladna.kod,\n          });\n        });\n\n        select.tomselect.setValue(\n          response.last_used ? response.last_used : response.data[0].id,\n          true\n        );\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  payFully(e) {\n    e.target.setAttribute('disabled', 'disabled');\n\n    const parentEl = this.element.querySelector('#zadana-uhradas');\n    parentEl.querySelector('.add-fields').click();\n    const paymentEl = [...parentEl.querySelectorAll('.payment')].pop();\n    const sumaEl = paymentEl.querySelector('[name$=\"[suma]\"]');\n\n    sumaEl.value = formatNumber(\n      parseNumber(this.element.querySelector('#label-with-vat').innerHTML) -\n        parseNumber(this.element.querySelector('#label-payments').innerHTML)\n    );\n\n    paymentEl.querySelector('[name$=\"[datum]\"]').value =\n      dayjs().format('DD.MM.YYYY');\n    paymentEl.querySelector('[name$=\"[poznamka]\"]').value =\n      'Vlo\u017Een\u00E9 kliknut\u00EDm na uhraden\u00E9';\n\n    updateZadanaUhradaLabels.call(this);\n  }\n\n  showAdvances() {\n    openURL(\n      `/dosla-fakturas/assigned-advances/${document\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  deleteDf(e) {\n    confirm(e.target.dataset.confirm) &&\n      makeRequest(document.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          response.status && response.status === true\n            ? window.close()\n            : window.Turbo.renderStreamMessage(response.turbo_stream);\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  updateDanovyPomerSelectboxes,\n  popupHelpers,\n  onDodavatelChange\n} from '../utils';\nimport { TomSelectElement } from '../types';\nimport { addFields } from '../add';\nimport { initializeTomSelect } from '../tom_select';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"dosla-zalohova-fakturas\"\nexport default class extends Controller {\n  static targets = ['datumVystaveniaEl', 'partnerEl'];\n\n  declare readonly datumVystaveniaElTarget: TomSelectElement;\n  declare readonly updateDanovyPomerSelectboxes: Function;\n  declare readonly partnerElTarget: HTMLSelectElement;\n\n  initialize() {\n    Object.assign(this, popupHelpers, {\n      updateDanovyPomerSelectboxes,\n      onDodavatelChange\n    });\n  }\n\n  onDatumVystaveniaChange(e: Event) {\n    this.updateDanovyPomerSelectboxes();\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n          copiedDiv\n            .querySelectorAll('input.vanillajs-datepicker')\n            .forEach(input => {\n              initializeVanillajsDatepicker(input);\n            });\n\n          if (copiedDiv.classList.contains('dpf-polozka')) {\n            [\n              'stredisko_id',\n              'zakazka_id',\n              'cinnost_id',\n              'pracovnik_id'\n            ].forEach(szcp => {\n              const select = <TomSelectElement>(\n                copiedDiv.querySelector(`select[name$=\"[${szcp}]\"]`)\n              );\n\n              if (!select?.tomselect) return;\n\n              select.tomselect.setValue(\n                (<HTMLSelectElement>(\n                  document.querySelector(`#dosla_zalohova_faktura_${szcp}`)\n                )).value,\n                true\n              );\n            });\n          }\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  showPartner(e: Event) {\n    let url;\n\n    if (this.partnerElTarget.value) {\n      url = `/partners/${this.partnerElTarget.value}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location.toString()) });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"dosla-zalohova-fakturas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n\n    import('../update_additional_info').then(module => {\n      this.updateAdditionalInfo = module.updateAdditionalInfo.bind(this);\n    });\n\n    this.submitBtnTarget.click();\n  }\n\n  openFilter() {\n    let url;\n    let filterId = this.element.querySelector(\n      '#filter_filter_dpf_filter_id'\n    ).value;\n\n    if (filterId) {\n      url = `/dpf_filters/${filterId}.html`;\n    } else {\n      url = '/dpf_filters/new.html';\n    }\n\n    this.openURL(url, { parentUrl: new URL(location) });\n  }\n\n  updateInfo(e) {\n    this.updateAdditionalInfo(e.target);\n  }\n\n  setMarkedCount() {\n    makeRequest('/dosla-zalohova-fakturas/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteMarked() {\n    makeRequest('/dosla-zalohova-fakturas/delete-marked')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteManualPayments() {\n    makeRequest('/dosla-zalohova-fakturas/delete-manual-payments/11.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  chargeMarked() {\n    makeRequest('/dosla-zalohova-fakturas/charge-records/11.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  openNew() {\n    this.openURL('/dosla_zalohova_fakturas/new');\n  }\n\n  printList(e) {\n    this.openURL(\n      `/dpf_prints/${e.target.closest('.dropdown-item').dataset.groupsOnly}`,\n      { tab: true }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"dosla-zalohova-fakturas-new\"\nexport default class extends Controller {\n  static targets = ['partnerEl'];\n\n  declare readonly partnerElTarget: HTMLSelectElement;\n\n  onPartnerChange(e: Event) {\n    window.onbeforeunload = null;\n\n    if ((<HTMLSelectElement>e.target).closest('.bg-copy')) return;\n\n    const url = new URL(location.toString());\n\n    if (this.partnerElTarget.value)\n      openURL(\n        `/dosla_zalohova_fakturas/new/${this.partnerElTarget.value}/${url.search}`,\n        { target: '_self' }\n      );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { openURL } from '../window_manager';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"dp-mvs\"\nexport default class extends Controller {\n  #datumDdpEl = this.element.querySelector('#dp_mv_datum_ddp');\n\n  changeEventHandler(e) {\n    e.target.nodeName === 'SELECT' && this.#selectboxChanged(e);\n  }\n\n  deleteRow(e) {\n    e.preventDefault();\n    deleteResource(e.target.closest('.btn'));\n    this.#updateItemsCount();\n  }\n\n  #selectboxChanged(e) {\n    if (e.target.id === 'dp_mv_rok') {\n      window.onbeforeunload = null;\n\n      this.#rokChanged(e);\n    }\n\n    e.target.id === 'dp_mv_typ_dp' && this.#druhChanged(e);\n    // e.target.id.endsWith('_motorove_vozidlo_id') && ...\n  }\n\n  onAddFieldButton(e) {\n    e.preventDefault();\n\n    addFields(e.target.closest('.add-fields'), (copiedDiv, _) => {\n      initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n      copiedDiv = copiedDiv.previousElementSibling;\n    });\n\n    this.#updateItemsCount();\n  }\n\n  #updateItemsCount() {\n    const countEl = this.element.querySelector('.tax-form--items-count');\n    countEl.innerHTML = this.element.querySelectorAll(\n      '.dp-mv-polozka:not([style=\"display: none;\"])'\n    ).length;\n  }\n\n  async #rokChanged(e) {\n    const { tomselect } = e.target;\n\n    if (!tomselect) return;\n\n    const url = new URL(location);\n    url.pathname = `dp_mvs/${tomselect.getValue()}`;\n\n    window.location.assign(url);\n  }\n\n  #druhChanged(e) {\n    const { value } = e.target;\n    const parent = this.#datumDdpEl.closest('div');\n\n    if (\n      (value !== 'ddp' && !parent.classList.contains('d-none')) ||\n      (value === 'ddp' && parent.classList.contains('d-none'))\n    )\n      parent.classList.toggle('d-none');\n  }\n\n  clearOnBeforeUnload(e) {\n    window.onbeforeunload = null;\n  }\n\n  showMv(e) {\n    e.preventDefault();\n\n    const parent = e.currentTarget.closest('.dp-mv-polozka');\n    const motoroveVozidloEl = parent.querySelector(\n      '[id*=\"motorove_vozidlo_id\"]'\n    );\n    openURL(\n      `/motorove_vozidlos/${motoroveVozidloEl.tomselect.getValue() || 'new'}`,\n      {\n        parentUrl: new URL(location),\n      }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\nimport { postFormData } from '../utils';\nimport { download } from '../reader';\nimport { openURL } from '../window_manager';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"dp-mvs-show\"\nexport default class extends Controller {\n  taxDeclarationEl = this.element.querySelector('.tax-declaration');\n\n  connect() {\n    this.taxDeclarationEl.addEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.taxDeclarationEl.addEventListener(\n      'keyup',\n      registerKeyupToShowSubmitButton\n    );\n  }\n\n  disconnect() {\n    this.taxDeclarationEl.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.taxDeclarationEl.removeEventListener(\n      'keyup',\n      registerKeyupToShowSubmitButton\n    );\n  }\n\n  async export(e) {\n    e.preventDefault();\n\n    const form = this.element.querySelector('form.tax-form');\n    const submitter = e.target.closest('[data-action=\"dp-mvs-show#export\"]');\n\n    try {\n      const { file } = submitter.dataset;\n\n      if (file === 'zip') submitter.setAttribute('disabled', 'disabled');\n\n      const formData = new FormData(form);\n\n      this.element\n        .querySelector('aside.offcanvas')\n        .querySelectorAll('.form-check-input, .form-control')\n        .forEach(el => {\n          formData.append(el.name, el.value);\n        });\n\n      const text = await postFormData(`/dp_mvs/export/${file}`, formData);\n\n      if (file !== 'edane') {\n        download(text, text.headers.get('Report-Filename'));\n        return;\n      }\n\n      submitter.classList.add('disabled');\n\n      const fnameWithTimestamp = `${Date.now()} ${text.headers.get(\n        'Report-Filename'\n      )}`;\n\n      download(text, fnameWithTimestamp);\n\n      const url = new URL(\n        'https://edane.financnasprava.sk/win/prod/install/DRSR.Win.DP.DRKlient.application'\n      );\n\n      url.searchParams.set(\n        text.headers.get('Report-Type'),\n        `C:\\\\Users\\\\Public\\\\Downloads\\\\${fnameWithTimestamp}`\n      );\n\n      window.location.assign(url);\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      submitter.removeAttribute('disabled');\n      submitter.classList.remove('disabled');\n      this.element.querySelector('.offcanvas button.btn-close')?.click();\n    }\n  }\n\n  toggleReason() {\n    const reasonEl = this.element.querySelector('#filter_reason');\n    const parent = reasonEl.closest('div');\n\n    ['ddp', 'odp'].includes(this.element.querySelector('#dp_mv_typ_dp').value)\n      ? parent.classList.remove('d-none')\n      : parent.classList.add('d-none');\n\n    reasonEl.value = '';\n  }\n\n  confirmReload(e) {\n    if (!confirm(e.target.dataset.confirm)) e.preventDefault();\n  }\n\n  open(e) {\n    e.preventDefault();\n\n    const { url } = e.target.dataset;\n    const urlObj = new URL(url, location);\n\n    if (url.startsWith('/dp_mvs/zavazok')) {\n      openURL(urlObj);\n    }\n  }\n}\n", "export function download(response, filename = `noname.xml`) {\n  response.blob().then(blob => {\n    const newBlob = new Blob([blob]);\n    const blobUrl = window.URL.createObjectURL(newBlob);\n    const link = document.createElement('a');\n\n    link.href = blobUrl;\n    link.setAttribute('download', filename);\n    document.body.appendChild(link);\n    link.click();\n    link.parentNode.removeChild(link);\n\n    // clean up Url\n    window.URL.revokeObjectURL(blobUrl);\n  });\n}\n", "import { postFormData, getJSON, deleteJSON, appendCanvas } from '../utils';\nimport { customJSON, dpPpoResponse } from '../types';\nimport { showToastMessage } from '../show_toast_message';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport StatementsIndex from './statements_index_controller';\nimport { Context } from '@hotwired/stimulus';\nimport { StatementType } from '../enums';\nimport { download } from '../reader';\n\n// Connects to data-controller=\"dp-ppos-index\"\nexport default class extends StatementsIndex {\n  static targets = ['hospRokEl', 'submitButtons', 'formEl'];\n\n  declare readonly submitButtonsTargets: HTMLButtonElement[];\n  declare readonly hospRokElTarget: HTMLSelectElement;\n  declare readonly formElTarget: HTMLFormElement;\n\n  constructor(context: Context) {\n    super(context, StatementType.DPPPO);\n  }\n\n  connect() {\n    super.connect();\n\n    this.submitManually();\n\n    Object.assign(this, {\n      appendCanvas: (e: Event) => appendCanvas(e, this.canvasCallback),\n    });\n  }\n\n  disconnect(): void {\n    super.disconnect();\n  }\n\n  private canvasCallback = (_: any, method: string) => {\n    if (method === 'export-files') this.toggleReason();\n  };\n\n  async refresh(e: SubmitEvent) {\n    e.preventDefault();\n\n    try {\n      const url = new URL(\n        (this.formElTarget.classList.contains('new_dp_ppo')\n          ? '/dp_ppos/new'\n          : this.formElTarget.getAttribute('action'))!,\n        location.toString()\n      );\n\n      url.searchParams.set('hosp_rok_id', this.hospRokElTarget.value);\n\n      const expandedIds = [\n        ...this.formElTarget.querySelectorAll(\n          '#dp_ppos_table > .accordion .accordion-button[aria-expanded=\"true\"]'\n        ),\n      ].map(e => {\n        const btnEl = <HTMLDivElement>e;\n        const itemEl = <HTMLDivElement>btnEl.closest('.accordion-item');\n\n        return itemEl.dataset.id;\n      });\n\n      if (expandedIds.length > 0)\n        url.searchParams.set('expanded', expandedIds.join(','));\n\n      ['obdobie_od', 'obdobie_do'].forEach(key => {\n        url.searchParams.set(\n          key,\n          this.element.querySelector<HTMLInputElement>(`#dp_ppo_${key}`)!.value\n        );\n      });\n\n      const json: dpPpoResponse = await getJSON(url);\n      const { table, checkboxes } = json;\n\n      if (table) (window as any).Turbo.renderStreamMessage(table);\n      if (checkboxes) (window as any).Turbo.renderStreamMessage(checkboxes);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.submitButtonsTargets.forEach(btn => {\n        btn.classList.remove('disabled');\n      });\n    }\n  }\n\n  async onHospRokChange(e: Event) {\n    try {\n      const targetEl = e.target as HTMLSelectElement;\n\n      if (!targetEl.value) return;\n\n      const json: customJSON = await getJSON(\n        `/hlavna-knihas/set-last-used-hr/${targetEl.value}.json`\n      );\n\n      if (!json.status) return;\n\n      (location as Location).reload();\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onAddFields(e: Event) {\n    e.preventDefault();\n\n    const btnEl = (e.target! as HTMLElement).closest(\n      '.add-fields'\n    ) as HTMLButtonElement;\n\n    addFields(btnEl);\n  }\n\n  onDeleteTwoPercs(e: Event) {\n    e.preventDefault();\n\n    const btnEl = (e.target! as HTMLElement).closest(\n      '.btn'\n    ) as HTMLButtonElement;\n\n    deleteResource(btnEl);\n  }\n\n  async export(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLElement;\n    const submitter = target.closest(\n      '[data-action=\"dp-ppos-index#export\"]'\n    ) as HTMLButtonElement;\n\n    try {\n      const data = new FormData(this.formElTarget);\n\n      submitter.setAttribute('disabled', 'disabled');\n\n      if (!data.has('_method')) data.append('_method', 'patch');\n\n      const { file } = submitter.dataset;\n      const response = await postFormData(`/dp_ppos/export/${file}`, data);\n\n      if (response.status !== 200)\n        return showToastMessage(await response.text(), {\n          autohide: false,\n          type: 'bg-danger',\n        });\n\n      if (file !== 'edane')\n        return download(\n          response,\n          response.headers.get('Report-Filename') ?? ''\n        );\n\n      this.loadEdane(response);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      submitter.removeAttribute('disabled');\n      this.element\n        .querySelector<HTMLButtonElement>('.offcanvas button.btn-close')\n        ?.click();\n    }\n  }\n\n  loadEdane(response: Response) {\n    const reportFilename = response.headers.get('Report-Filename');\n    const reportType = response.headers.get('Report-Type')!;\n    const fnameWithTimestamp = `${Date.now()} ${reportFilename}`;\n    const reportTypeValue = `C:\\\\Users\\\\Public\\\\Downloads\\\\${fnameWithTimestamp}`;\n    const endpoint =\n      'https://edane.financnasprava.sk/win/prod/install/DRSR.Win.DP.DRKlient.application';\n\n    download(response, fnameWithTimestamp);\n\n    const url = new URL(endpoint);\n    url.searchParams.set(reportType, reportTypeValue);\n    window.location.assign(url);\n  }\n\n  async delete(_: Event) {\n    try {\n      const response = await deleteJSON(\n        this.formElTarget.getAttribute('action')\n      );\n      const { status, message } = response;\n\n      if (!status) {\n        return showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n      }\n\n      (window as any).location.reload();\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  toggleReason() {\n    const reasonEl = <HTMLTextAreaElement>(\n      this.element.querySelector('#filter_reason')\n    );\n    const parentEl = <HTMLDivElement>reasonEl.closest('div');\n    const druhEl = <HTMLSelectElement>(\n      this.element.querySelector('#dp_ppo_druh_priznania')\n    );\n\n    druhEl.value !== 'rdp'\n      ? parentEl.classList.remove('d-none')\n      : parentEl.classList.add('d-none');\n\n    reasonEl.value = '';\n  }\n\n  async loadFromPrevious(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLElement;\n    const btnEl = target.closest('button') as HTMLButtonElement;\n    btnEl.setAttribute('disabled', 'disabled');\n\n    try {\n      const url = new URL('/dp_ppos/part7/data', location.toString());\n      url.searchParams.set('hosp_rok_id', this.hospRokElTarget.value);\n\n      const json = await getJSON(url.toString());\n      const { data } = json;\n\n      if (!data) return;\n\n      Object.keys(data).forEach(key => {\n        (\n          this.element.querySelector(`#dp_ppo_${key}`) as HTMLInputElement\n        ).value = data[key];\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      btnEl.removeAttribute('disabled');\n    }\n  }\n\n  onCheckboxChange(e: Event) {\n    this.formElTarget.requestSubmit();\n  }\n\n  private submitManually() {\n    this.refresh(new SubmitEvent('submit'));\n    this.submitButtonsTargets.forEach(btn => btn.classList.add('disabled'));\n  }\n}\n", "import { Context, Controller } from '@hotwired/stimulus';\nimport interact from 'interactjs';\nimport { StatementType } from '../enums';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"statements-index\"\nexport default abstract class extends Controller {\n  constructor(context: Context, protected _type: StatementType) {\n    super(context);\n  }\n\n  connect() {\n    interact(`.${this.type} .results`).resizable({\n      edges: { left: '.resize' },\n      listeners: {\n        move: function (event) {\n          let { x } = event.target.dataset;\n\n          x = (parseFloat(x) || 0) + event.deltaRect.left;\n\n          Object.assign(event.target.style, {\n            width: `${event.rect.width}px`,\n          });\n\n          Object.assign(event.target.dataset, { x });\n        },\n      },\n    });\n  }\n\n  disconnect(): void {\n    interact(`.${this.type} .results`).unset();\n  }\n\n  collapseAll(e: Event) {\n    e.preventDefault();\n\n    this.element\n      .querySelectorAll('.accordion-button:not(:disabled):not(.collapsed)')\n      .forEach(btn => (btn as HTMLButtonElement).click());\n  }\n\n  expandAll(e: Event) {\n    e.preventDefault();\n\n    this.element\n      .querySelectorAll('.accordion-button.collapsed:not(:disabled)')\n      .forEach(btn => {\n        const btnEl = btn as HTMLButtonElement;\n        const { bsTarget } = btnEl.dataset;\n\n        if (!bsTarget) return;\n\n        const accordionEl = document.querySelector(\n          `${bsTarget} > .accordion-body > .accordion`\n        ) as HTMLDivElement;\n\n        if (!accordionEl) return;\n        if (accordionEl.children.length === 0) return;\n\n        btnEl.click();\n      });\n  }\n\n  get type() {\n    return this._type === StatementType.VYKAZ ? 'vykazs' : 'dp-ppos';\n  }\n\n  onResizeClick(e: Event) {\n    e.preventDefault();\n  }\n\n  onItemMouseover(e: Event) {\n    const target = e.target as HTMLDivElement;\n    const accordionItemEl = target.closest('.accordion-item') as HTMLDivElement;\n\n    if (!accordionItemEl) return;\n\n    this.toggleBtn(target, accordionItemEl);\n\n    const { id } = accordionItemEl.dataset;\n\n    this.element\n      .querySelectorAll(`.accordion-item[data-id='${id}']`)\n      .forEach(e =>\n        e.querySelector('.accordion-header')?.classList.add('hover')\n      );\n  }\n\n  onItemMouseout(e: Event) {\n    const target = e.target as HTMLDivElement;\n    const accordionItemEl = target.closest('.accordion-item') as HTMLDivElement;\n\n    if (!accordionItemEl) return;\n\n    const { id } = accordionItemEl.dataset;\n\n    this.element\n      .querySelectorAll(`.accordion-item[data-id='${id}']`)\n      .forEach(e =>\n        e.querySelector('.accordion-header')?.classList.remove('hover')\n      );\n  }\n\n  showVykazPolozka(e: Event) {\n    const divEl = (e.target! as HTMLElement).closest(\n      '.show-vykaz-polozka'\n    ) as HTMLDivElement;\n    const { href } = divEl.dataset;\n    const hospRokEl = this.element.querySelector('#dp_ppo_hosp_rok_id');\n\n    if (!href) return;\n\n    const url = new URL(href, location.toString());\n\n    if (hospRokEl) {\n      url.searchParams.set(\n        'hosp_rok_id',\n        (hospRokEl as HTMLSelectElement).value\n      );\n    }\n\n    openURL(url.toString(), { parentUrl: new URL(location.toString()) });\n  }\n\n  private toggleBtn(target: HTMLElement, accordion: HTMLDivElement) {\n    const accordionBtn = accordion.querySelector(\n      '.accordion-button'\n    ) as HTMLButtonElement;\n\n    if (accordionBtn.classList.contains('was-disabled')) return;\n\n    target.closest('.show-vykaz-polozka') || target.closest('.move')\n      ? accordionBtn.setAttribute('disabled', 'disabled')\n      : accordionBtn.removeAttribute('disabled');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { download } from '../reader';\nimport { formatNumber, parseNumber } from '../utils';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"evidencia-dphs-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  #icDphEl = this.element.querySelector('#filter_filter_icdph');\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateObligations(e) {\n    var r32 = parseNumber(\n      this.element.querySelector('input#filter_filter_r32').value\n    );\n    var r34 = parseNumber(e.target.value);\n    var diff = r32 - r34;\n\n    if (r32 > 0) {\n      if (diff > 0) {\n        this.element.querySelector('input#filter_filter_r35').value =\n          formatNumber(diff);\n        this.element.querySelector('span.r35').innerHTML = formatNumber(diff);\n      } else {\n        this.element.querySelector('input#filter_filter_r35').value =\n          formatNumber(0);\n        this.element.querySelector('span.r35').innerHTML = formatNumber(0);\n      }\n    }\n  }\n\n  toggleAdditionalDateDiv(e) {\n    const additionalDateDiv = this.element.querySelector(\n      '#datum_dodatocneho_div'\n    );\n    const emailDiv = this.element.querySelector('#email_div');\n\n    if (\n      e.target.value === 'ddp' &&\n      additionalDateDiv.classList.contains('d-none')\n    ) {\n      additionalDateDiv.classList.remove('d-none');\n      emailDiv.classList.remove('col-xxxl-2');\n      emailDiv.classList.add('col-xxxl-1');\n    } else {\n      additionalDateDiv.classList.add('d-none');\n      emailDiv.classList.remove('col-xxxl-1');\n      emailDiv.classList.add('col-xxxl-2');\n    }\n  }\n\n  clearMonth(e) {\n    const mesiac = this.element.querySelector('#filter_filter_Mesiac');\n\n    if (e.target.value) {\n      mesiac.tomselect.setValue('');\n    }\n  }\n\n  clearQuarter(e) {\n    const stvrtrok = this.element.querySelector('#filter_filter_Stvrtrok');\n\n    if (e.target.value) {\n      stvrtrok.tomselect.setValue('');\n    }\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target, { evidencia_dph: true });\n  }\n\n  submitForm(e) {\n    e.preventDefault();\n\n    const target = e.currentTarget;\n    const form = this.element.querySelector(\n      'form[action=\"/lists/filter?oid=13\"]'\n    );\n    const mesiac = this.element.querySelector('#filter_filter_Mesiac');\n    const stvrtrok = this.element.querySelector('#filter_filter_Stvrtrok');\n\n    target.setAttribute('disabled', 'disabled');\n\n    if (!mesiac.value && !stvrtrok.value) {\n      mesiac.classList.add('is-invalid');\n      stvrtrok.classList.add('is-invalid');\n\n      return;\n    }\n\n    mesiac.classList.remove('is-invalid');\n    stvrtrok.classList.remove('is-invalid');\n\n    // stimulus data-controller=\"tax-liability\" functionality for preserving custom values of xml / pdf columns\n    const r36 = this.element.querySelector('#filter_filter_r36');\n    const r37 = this.element.querySelector('#filter_filter_r37');\n    const r38 = this.element.querySelector('#filter_filter_r38');\n\n    window.r36Value = r36 && parseNumber(r36.value);\n    window.r37Value = r37 && parseNumber(r37.value);\n    window.r38Value = r38 && parseNumber(r38.value);\n    window.taxLiabilityExpanded = this.element\n      .querySelector('#collapse_values')\n      .classList.contains('show');\n\n    makeRequest(form.action, {\n      method: 'POST',\n      fillContentType: false,\n      data: new FormData(form),\n    })\n      .then(response => {\n        window.Turbo.renderStreamMessage(response.list);\n        window.Turbo.renderStreamMessage(response.tax_liability);\n      })\n      .catch(e => showToastMessage(e, { autohide: false, type: 'bg-danger' }))\n      .finally(() => target.removeAttribute('disabled'));\n  }\n\n  open(e) {\n    const { url, tab } = e.currentTarget.dataset;\n\n    if (!url) return;\n\n    switch (url) {\n      case '/zavazoks/new':\n        const urlObj = new URL(url, location);\n\n        urlObj.searchParams.set('konstantny_symbol', '1744');\n        urlObj.searchParams.set(\n          'suma',\n          parseNumber(\n            this.element.querySelector(\n              `#filter_filter_r3${\n                this.element.querySelector('#filter_filter_Rok').value > 2019\n                  ? 5\n                  : 4\n              }`\n            ).value\n          )\n        );\n        urlObj.searchParams.set(\n          'variabilny_symbol',\n          `1100${\n            this.element.querySelector('#filter_filter_Stvrtrok').value !== ''\n              ? '4'\n              : ''\n          }${\n            this.element.querySelector('#filter_filter_Stvrtrok').value ||\n            this.element\n              .querySelector('#filter_filter_Mesiac')\n              .value.padStart(2, '0')\n          }${this.element.querySelector('#filter_filter_Rok').value}`\n        );\n\n        openURL(urlObj, { tab: !!tab });\n\n        break;\n      default:\n        openURL(url, { tab: !!tab });\n    }\n  }\n\n  export(e) {\n    const form = this.element.querySelector(\n      'form[action=\"/lists/filter?oid=13\"]'\n    );\n    const submitter = e.target.closest(\n      'button[data-action=\"evidencia-dphs-index#export\"]'\n    );\n    const { type, file } = submitter.dataset;\n\n    if (type === 'all') {\n      if (!this.#icDphEl.value) {\n        const { message } = this.#icDphEl.dataset;\n\n        return showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n      }\n\n      submitter.setAttribute('disabled', 'disabled');\n    }\n\n    makeRequest(`/evidencia-dphs/export/${type}/${file}`, {\n      accept: 'application/xml',\n      method: 'POST',\n      fillContentType: false,\n      data: new FormData(form),\n    })\n      .then(response => {\n        if (response.status !== 200) {\n          response\n            .text()\n            .then(text =>\n              showToastMessage(text, { autohide: false, type: 'bg-danger' })\n            );\n          return;\n        }\n\n        if (file !== 'edane') {\n          download(response, response.headers.get('Report-Filename'));\n          return;\n        }\n\n        const fnameWithTimestamp = `${Date.now()} ${response.headers.get(\n          'Report-Filename'\n        )}`;\n        download(response, fnameWithTimestamp);\n\n        const url = new URL(\n          'https://edane.financnasprava.sk/win/prod/install/DRSR.Win.DP.DRKlient.application'\n        );\n        url.searchParams.set(\n          response.headers.get('Report-Type'),\n          `C:\\\\Users\\\\Public\\\\Downloads\\\\${fnameWithTimestamp}`\n        );\n        window.location.assign(url);\n      })\n      .catch(e => showToastMessage(e, { autohide: false, type: 'bg-danger' }))\n      .finally(() => {\n        if (type !== 'all') return;\n\n        submitter.removeAttribute('disabled');\n        document.querySelector('.offcanvas button.btn-close')?.click();\n      });\n  }\n\n  toggleReason() {\n    const div = this.element.querySelector('#filter_reason');\n    const parent = div.closest('div');\n\n    ['ddp', 'odp'].includes(\n      this.element.querySelector('#filter_filter_Druh').value\n    )\n      ? parent.classList.remove('d-none')\n      : parent.classList.add('d-none');\n\n    div.value = '';\n  }\n\n  checkSuhrnnyVykaz(e) {\n    this.element.querySelector('#label_sv_exists').classList.add('d-none');\n    this.element.querySelector('#filter_sv').checked = false;\n\n    if (\n      [\n        'Dodanie tovaru a slu\u017Eieb s osloboden\u00EDm od dane  r. 15 + SV',\n        'Dodanie tovaru a slu\u017Eieb s osloboden\u00EDm od dane  r. 13 + SV',\n        'Dodanie tovarov s osloboden\u00EDm od dane r. 16 + SV',\n        'Dodanie tovarov a slu\u017Eieb s osloboden\u00EDm od dane r. 17 + SV',\n        'Dodanie slu\u017Eieb \u00A715 ods. 1 - iba S\u00FAhrnn\u00FD v\u00FDkaz',\n        'Trojstrann\u00FD obchod \u00A745',\n        'Tovary, kde druh\u00FD odberate\u013E plat\u00ED da\u0148 \u00A769 ods. 2',\n        'Osloboden\u00E9 tovary \u00A743 ods. 1 a 4',\n      ].some(text =>\n        this.element.querySelector('table#list').innerHTML.includes(text)\n      )\n    ) {\n      this.element.querySelector('#filter_sv').checked = true;\n      this.element.querySelector('#label_sv_exists').classList.remove('d-none');\n    }\n  }\n\n  async copyToClipboard(e) {\n    e.preventDefault();\n\n    try {\n      const parent = e.target.closest('.r-box');\n      const value = parent.querySelector('.r-box__value').innerText;\n      const { message } = e.target.closest('.r-box__btn').dataset;\n\n      if (!navigator.clipboard) return;\n\n      await navigator.clipboard.writeText(value);\n\n      showToastMessage(message);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onCisDphParagrafsPrehladChange(e) {\n    this.element\n      .querySelector('[data-action=\"evidencia-dphs-index#submitForm\"]')\n      ?.click();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"fakt-polozkies\"\nexport default class extends Controller {\n  static targets = [\n    'cenaBezDphEl',\n    'cenaJednotkovaEl',\n    'dphPercEl',\n    'mnozstvoPocetEl',\n    'mnozstvoTextEl',\n    'predmetEl',\n  ];\n\n  declare readonly predmetElTarget: HTMLTextAreaElement;\n  declare readonly dphPercElTarget: HTMLInputElement;\n  declare readonly mnozstvoTextElTarget: HTMLInputElement;\n  declare readonly cenaBezDphElTarget: HTMLInputElement;\n  declare readonly mnozstvoPocetElTarget: HTMLInputElement;\n  declare readonly cenaJednotkovaElTarget: HTMLInputElement;\n\n  showOfDruhPolozky(e: Event) {\n    e.preventDefault();\n\n    openURL('/of-druh-polozkies', { parentUrl: new URL(location.toString()) });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  parseNumber,\n  formatNumber,\n  showSkladovaKarta,\n  getStimulusController\n} from '../utils';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\nimport { delay } from '../delay';\nimport { showToastMessage } from '../show_toast_message';\nimport { TomSelectElement } from '../types';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"fakt-sklad-polozkies\"\nexport default class extends Controller<HTMLTableRowElement> {\n  cenySuSDphBool: boolean =\n    (<HTMLSelectElement>document.querySelector('[name$=\"[ceny_su_s_dph]\"]')!)\n      .value === 'true';\n  okruhId = +(<HTMLInputElement>document.querySelector('#okruh_id')).value;\n  offcanvas: HTMLElement = document.querySelector('#canvas')!;\n\n  initialize(): void {\n    Object.assign(this, { showSkladovaKarta });\n  }\n\n  static targets = [\n    'cenaJednotkovaEl',\n    'dphPercEl',\n    'cenaSpoluEl',\n    'mnozstvoHodnotaEl',\n    'zmenaNcEl',\n    'skladovaKartaIdEl',\n    'skladovaKartaCell',\n    'textCell',\n    'nakupnaCenaEl',\n    'destroyEl',\n    'zlavaEl',\n    'mnozstvoJednotkaEl',\n    'evidenciaIdEl',\n    'textEl',\n    'showSkladovaKartaBtn',\n    'vlastnyPopisCheckbox',\n    'popisEl',\n    'strediskoIdEl',\n    'zakazkaIdEl',\n    'cinnostIdEl',\n    'pracovnikIdEl',\n    'aktualneMnozstvoSpan',\n    'poradoveCisloEl'\n  ];\n\n  declare readonly cenaJednotkovaElTarget: HTMLInputElement;\n  declare readonly dphPercElTarget: HTMLInputElement;\n  declare readonly cenaSpoluElTarget: HTMLInputElement;\n  declare readonly mnozstvoHodnotaElTarget: HTMLInputElement;\n  declare readonly zmenaNcElTarget: HTMLInputElement;\n  declare readonly skladovaKartaIdElTarget: HTMLSelectElement & TomSelect;\n  declare readonly nakupnaCenaElTarget: HTMLInputElement;\n  declare readonly hasNakupnaCenaElTarget: boolean;\n  declare readonly destroyElTarget: HTMLInputElement;\n  declare readonly zlavaElTarget: HTMLInputElement;\n  declare readonly mnozstvoJednotkaElTarget: TomSelectElement;\n  declare readonly evidenciaIdElTarget: TomSelectElement;\n  declare readonly textElTarget: HTMLInputElement;\n  declare readonly showSkladovaKartaBtnTarget: HTMLButtonElement;\n  declare readonly vlastnyPopisCheckboxTarget: HTMLInputElement;\n  declare readonly popisElTarget: HTMLTextAreaElement;\n  declare readonly strediskoIdElTarget: HTMLSelectElement & TomSelect;\n  declare readonly zakazkaIdElTarget: HTMLSelectElement & TomSelect;\n  declare readonly cinnostIdElTarget: HTMLSelectElement & TomSelect;\n  declare readonly pracovnikIdElTarget: HTMLSelectElement & TomSelect;\n  declare readonly aktualneMnozstvoSpanTarget: HTMLSpanElement;\n  declare readonly hasAktualneMnozstvoSpanTarget: boolean;\n  declare readonly poradoveCisloElTarget: HTMLInputElement;\n  declare readonly skladovaKartaCellTarget: HTMLDivElement;\n  declare readonly textCellTarget: HTMLDivElement;\n\n  onCenaSpoluMouseover(e: MouseEvent) {\n    const target = <HTMLInputElement>e.target;\n    const pocetDesMiestVal = +this.pocetDesMiest;\n\n    const { withVat, withoutVat } = target.dataset;\n    target.dataset.bsContent = `${withoutVat}: ${formatNumber(\n      this.bezDph(target.value),\n      pocetDesMiestVal\n    )}, ${withVat}: ${formatNumber(this.sDph(target.value), pocetDesMiestVal)}`;\n\n    new window.bootstrap.Popover(target, {\n      placement: 'top',\n      trigger: 'manual'\n    });\n\n    const popover = window.bootstrap.Popover.getOrCreateInstance(target);\n    popover.show();\n  }\n\n  onCenaSpoluMouseleave(e: MouseEvent) {\n    const popover = window.bootstrap.Popover.getOrCreateInstance(\n      <HTMLInputElement>e.target\n    );\n    if (popover) popover.hide();\n  }\n\n  onMnozstvoHodnotaKeypress(e: KeyboardEvent) {\n    if (e.key !== 'Enter') return;\n    if (!this.offcanvas) return;\n\n    const activeInput = <HTMLInputElement>(\n      this.offcanvas.querySelectorAll('.active-input')[0]\n    );\n\n    if (!activeInput) return;\n\n    activeInput.classList.remove('active-input');\n    activeInput.focus();\n    activeInput.select();\n\n    e.preventDefault();\n  }\n\n  setCenaJednotkovaByMnozstvoHodnota(e: Event) {\n    const target = <TomSelectElement>e.target;\n\n    const basicOption = <HTMLOptionElement>(\n      target.querySelector('option[data-zakladna=\"true\"]')\n    );\n\n    if (!basicOption) return;\n\n    const selectedOption = <HTMLOptionElement>(\n      target.options[target.selectedIndex]\n    );\n    const { prepocet: selectedPrepocet } = selectedOption.dataset;\n\n    let finalPrice = 0;\n\n    if (!this.cenaJednotkovaElTarget.value) return;\n\n    if (basicOption.value !== target.tomselect.getValue()) {\n      finalPrice =\n        parseNumber(this.cenaJednotkovaElTarget.value) *\n        (parseNumber(selectedPrepocet) *\n          parseNumber(basicOption.dataset.prepocet));\n\n      basicOption.dataset.prepocet = (\n        1 / parseNumber(selectedPrepocet)\n      ).toString();\n    } else {\n      finalPrice =\n        parseNumber(this.cenaJednotkovaElTarget.value) *\n        parseNumber(selectedPrepocet);\n\n      basicOption.dataset.prepocet = '1';\n    }\n\n    this.cenaJednotkovaElTarget.value = formatNumber(\n      finalPrice,\n      this.pocetDesMiest\n    );\n\n    const event = new Event('change');\n    Object.defineProperty(event, 'target', {\n      writable: false,\n      value: this.cenaJednotkovaElTarget\n    });\n    this.setCenaSpolu(event);\n  }\n\n  setCenaSpolu(e: Event) {\n    const target = <HTMLInputElement>e.target;\n\n    if (\n      target.id.includes('_mnozstvo_hodnota') &&\n      this.mnozstvoHodnotaElTarget.value\n    )\n      this.setNakupnaCena();\n\n    this.cenaSpoluElTarget.value = formatNumber(\n      parseNumber(this.mnozstvoHodnotaElTarget.value) *\n        parseNumber(this.cenaJednotkovaElTarget.value),\n      this.pocetDesMiest\n    );\n\n    this.callParentCalc();\n  }\n\n  selectSkladovaKarta() {\n    const zalohovaSkladovaKarta = (<HTMLInputElement>(\n      document.querySelector('#zalohova_skladova_karta_id')\n    ))?.value; // hidden input field on predajka\n\n    if (\n      this.skladovaKartaIdElTarget.tomselect.getValue() ===\n      zalohovaSkladovaKarta\n    ) {\n      this.element.classList.add('zaloha');\n    }\n\n    this.handleUnitMeassures();\n    this.setCenaJednotkova();\n    this.callParentCalc();\n    this.setSZCP();\n\n    delay(() => {\n      this.mnozstvoHodnotaElTarget.select();\n    }, 250); // when using quick search filter, the select is intercepting scroll animation on enter\n\n    this.handleDuplicity();\n  }\n\n  setSZCP() {\n    ['stredisko', 'zakazka', 'cinnost', 'pracovnik'].forEach(element => {\n      if (\n        !(this as any)[\n          `has${element.charAt(0).toUpperCase() + element.slice(1)}IdElTarget`\n        ]\n      )\n        return;\n\n      const select = <HTMLSelectElement & TomSelect>(\n        (this as any)[`${element}IdElTarget`]\n      );\n\n      if (\n        this.selectedSkladovaKartaIdElOption.dataset[element] &&\n        this.selectedSkladovaKartaIdElOption.dataset[element] !== '1'\n      ) {\n        select.tomselect.setValue(\n          this.selectedSkladovaKartaIdElOption.dataset[element],\n          false\n        );\n\n        return;\n      }\n\n      if (\n        this.selectedEvidenciaIdElOption.dataset[element] &&\n        this.selectedEvidenciaIdElOption.dataset[element] !== '1'\n      ) {\n        select.tomselect.setValue(\n          this.selectedEvidenciaIdElOption.dataset[element],\n          false\n        );\n\n        return;\n      }\n\n      const parentEntryEl = <HTMLSelectElement>(\n        document.querySelector(`select[id*=\"_${element}_id\"]`)\n      );\n\n      select.tomselect.setValue(parentEntryEl.value, false);\n    });\n  }\n\n  handleUnitMeassures() {\n    const { aktualneMnozstvo, jednotky, jednotkyKoef } =\n      this.selectedSkladovaKartaIdElOption.dataset;\n\n    this.mnozstvoHodnotaElTarget.value = formatNumber(1);\n\n    if (aktualneMnozstvo && jednotky && this.hasAktualneMnozstvoSpanTarget) {\n      this.aktualneMnozstvoSpanTarget.innerHTML = `${aktualneMnozstvo} ${\n        jednotky.split(',')[0]\n      }`;\n    }\n\n    if (jednotky) {\n      this.mnozstvoJednotkaElTarget\n        .querySelectorAll('option')\n        .forEach(option => {\n          if (option.value && option.value !== '') {\n            option.remove();\n          }\n        });\n\n      this.mnozstvoJednotkaElTarget.tomselect.clear(false);\n      this.mnozstvoJednotkaElTarget.tomselect.clearOptions();\n\n      jednotky.split(',').forEach((key, index) => {\n        let newOption = new Option(key, key, index === 0, index === 0);\n        newOption.dataset.prepocet = jednotkyKoef\n          ? jednotkyKoef.split(',')[index]\n          : '1';\n\n        if (index === 0) {\n          newOption.dataset.zakladna = 'true';\n        }\n\n        this.mnozstvoJednotkaElTarget.append(newOption);\n      });\n\n      const event = new Event('change');\n      Object.defineProperty(event, 'target', {\n        writable: false,\n        value: this.mnozstvoJednotkaElTarget\n      });\n      this.setCenaJednotkovaByMnozstvoHodnota(event);\n      this.mnozstvoJednotkaElTarget.tomselect.lastQuery = null;\n      this.mnozstvoJednotkaElTarget.tomselect.refreshItems();\n      this.mnozstvoJednotkaElTarget.tomselect.refreshOptions(false);\n\n      const zakladnaOption = [...this.mnozstvoJednotkaElTarget.options].find(\n        option => option.dataset.zakladna === 'true'\n      );\n\n      if (zakladnaOption) {\n        this.mnozstvoJednotkaElTarget.tomselect.setValue(zakladnaOption.value);\n      }\n    }\n  }\n\n  setCenaJednotkova() {\n    const { predajnaCena, dphPerc, nakupnaCena } =\n      this.selectedSkladovaKartaIdElOption.dataset;\n\n    if (\n      ![10, 11].includes(this.okruhId) &&\n      (this.okruhId !== 4 ||\n        (<HTMLSelectElement>document.querySelector('[name$=\"[znamienko]\"]'))\n          ?.value !== '-1')\n    ) {\n      if (\n        (this.typObjednavy && this.typObjednavy === 'false') ||\n        (this.typDodaciehoListu && this.typDodaciehoListu === 'false') ||\n        [1, 2, 4, 31, 35].includes(this.okruhId)\n      ) {\n        let cenaJednotkova = parseNumber(predajnaCena);\n        if (this.priratavatDph) {\n          const dphPercVal =\n            parseNumber(dphPerc || this.predefinedVatVal || 1) / 100;\n          cenaJednotkova = cenaJednotkova * (1 + dphPercVal);\n        }\n\n        this.cenaJednotkovaElTarget.value = formatNumber(\n          cenaJednotkova,\n          this.pocetDesMiest\n        );\n      } else {\n        this.cenaJednotkovaElTarget.value = formatNumber(\n          nakupnaCena,\n          this.pocetDesMiest\n        );\n      }\n    } else {\n      this.cenaJednotkovaElTarget.value = formatNumber(nakupnaCena, 4);\n    }\n\n    const event = new Event('change');\n    Object.defineProperty(event, 'target', {\n      writable: false,\n      value: this.cenaJednotkovaElTarget\n    });\n    this.setCenaSpolu(event);\n\n    if (this.predefinedVatVal) {\n      this.dphPercElTarget.value = formatNumber(\n        dphPerc && !isNaN(+dphPerc) ? dphPerc : this.predefinedVatVal,\n        0\n      );\n    }\n  }\n\n  toggleText() {\n    if (this.skladovaKartaCellTarget.classList.contains('d-none')) {\n      this.skladovaKartaCellTarget.classList.remove('d-none');\n      this.skladovaKartaCellTarget.classList.add('col');\n      this.textCellTarget.classList.add('d-none');\n      this.textCellTarget.classList.remove('col');\n      this.skladovaKartaIdElTarget.tomselect.setValue(null, false);\n    } else {\n      this.textCellTarget.classList.remove('d-none');\n      this.textCellTarget.classList.add('col');\n      this.skladovaKartaCellTarget.classList.add('d-none');\n      this.skladovaKartaCellTarget.classList.remove('col');\n      this.textElTarget.value = '';\n    }\n\n    this.textElTarget.dispatchEvent(new Event('keyup'));\n  }\n\n  toggleVlastnyPopis() {\n    this.vlastnyPopisCheckboxTarget.checked\n      ? this.popisElTarget.removeAttribute('hidden')\n      : this.popisElTarget.setAttribute('hidden', 'hidden');\n  }\n\n  setCenaJednotkovaByCenaSpolu(e: Event) {\n    const target = <HTMLInputElement>e.target;\n\n    if (!target.value) return;\n\n    if (!this.mnozstvoHodnotaElTarget.value) {\n      this.mnozstvoHodnotaElTarget.value = formatNumber(1, 3);\n      this.cenaJednotkovaElTarget.value = formatNumber(\n        target.value,\n        this.pocetDesMiest\n      );\n\n      return;\n    }\n\n    const cena =\n      parseNumber(target.value) /\n      (parseNumber(this.mnozstvoHodnotaElTarget.value) === 0\n        ? 1\n        : parseNumber(this.mnozstvoHodnotaElTarget.value));\n\n    this.cenaJednotkovaElTarget.value = formatNumber(cena, this.pocetDesMiest);\n  }\n\n  callParentCalc() {\n    const fspContainerController = <Controller & { recalculateSums: Function }>(\n      this.application.getControllerForElementAndIdentifier(\n        document.querySelector('[data-controller=\"fsp-container\"]')!,\n        'fsp-container'\n      )!\n    );\n\n    fspContainerController.recalculateSums();\n  }\n\n  showSklad() {\n    openURL(`/sklads/${this.selectedSkladId}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n\n  get selectedSkladId(): string {\n    return this.selectedEvidencia?.dataset?.skladId || 'new';\n  }\n\n  get selectedEvidencia() {\n    return this.evidenciaIdElTarget.options[\n      this.evidenciaIdElTarget.selectedIndex\n    ];\n  }\n\n  handleDuplicity() {\n    const containerController = getStimulusController(\n      'fsp-container',\n      this.element.closest('[data-controller=\"fsp-container\"]')\n    );\n\n    const arr = [...containerController.faktSkladPolozkiesOutlets].map(item => {\n      if (item === this) return null;\n\n      return item.destroyElTarget.value === 'false'\n        ? item.skladovaKartaIdElTarget.value\n        : null;\n    });\n\n    if (arr.some(item => item === this.skladovaKartaIdElTarget.value)) {\n      showToastMessage(this.skladovaKartaIdElTarget.dataset.duplicityMessage, {\n        autohide: true,\n        type: 'bg-warning'\n      });\n    }\n  }\n\n  private bezDph(value: string) {\n    return this.cenySuSDphBool\n      ? parseNumber(value) / (1 + this.dphPercVal / 100)\n      : parseNumber(value);\n  }\n\n  private sDph(value: string) {\n    return this.cenySuSDphBool\n      ? parseNumber(value)\n      : parseNumber(value) + (parseNumber(value) * this.dphPercVal) / 100;\n  }\n\n  private get dphPercVal() {\n    return parseNumber(this.dphPercElTarget.value);\n  }\n\n  private get pocetDesMiest() {\n    return +(this.cenaJednotkovaElTarget.dataset.pocetDesMiest || 3);\n  }\n\n  private setNakupnaCena() {\n    if (!this.hasNakupnaCenaElTarget) return;\n\n    this.nakupnaCenaElTarget.innerHTML = formatNumber(\n      this.calcNakupnaCena *\n        parseNumber(this.mnozstvoHodnotaElTarget.value || '0'),\n      4\n    );\n  }\n\n  private get calcNakupnaCena(): number {\n    if (this.zmenaNcElTarget?.value) return +this.zmenaNcElTarget.value;\n    if (!this.skladovaKartaIdElTarget.value) return 0.0;\n\n    const { nakupnaCena } = this.selectedSkladovaKartaIdElOption.dataset;\n\n    return nakupnaCena ? +nakupnaCena : 0.0;\n  }\n\n  private get selectedSkladovaKartaIdElOption() {\n    return this.skladovaKartaIdElTarget.options[\n      this.skladovaKartaIdElTarget.selectedIndex\n    ];\n  }\n\n  private get selectedEvidenciaIdElOption() {\n    return this.evidenciaIdElTarget.options[\n      this.evidenciaIdElTarget.selectedIndex\n    ];\n  }\n\n  private get predefinedVatVal() {\n    return (<HTMLInputElement>document.getElementById('predef_dph_perc'))\n      ?.value;\n  }\n\n  private get typObjednavy() {\n    return (<HTMLInputElement>document.getElementById('typ_objednavky'))?.value;\n  }\n\n  private get typDodaciehoListu() {\n    return (<HTMLInputElement>document.getElementById('typ_dodacieho_listu'))\n      ?.value;\n  }\n\n  private get priratavatDph() {\n    return (\n      this.okruhId === 4 &&\n      (<HTMLSelectElement>(\n        document.querySelector('select[name$=\"[pokladna_id]\"] option[selected]')\n      ))?.dataset.priratavatDph === 'true'\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\n\n// Connects to data-controller=\"filters\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"filters-new\"\nexport default class extends Controller {}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerKeyupToShowSubmitButton,\n  registerChangeToShowSubmitButton,\n} from '../show_submit_buttons';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"filters-show\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  delete(e) {\n    if (confirm(e.target.closest('button').dataset.confirm)) {\n      makeRequest(document.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          if (response.status && response.status === true) {\n            window.close();\n          } else {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\nimport { showSubmitButton } from '../show_submit_buttons';\n\n// Connects to data-controller=\"firma-public-invoicing\"\nexport default class extends Controller {\n  static targets = ['tempFirmaFakturaIdEl', 'firmaFakturaIdEl'];\n\n  declare readonly tempFirmaFakturaIdElTarget: HTMLSelectElement & {\n    tomselect: TomSelect;\n  };\n\n  declare readonly firmaFakturaIdElTarget: HTMLSelectElement & {\n    tomselect: TomSelect;\n  };\n\n  assign() {\n    const tempSelect = this.tempFirmaFakturaIdElTarget.tomselect;\n    const select = this.firmaFakturaIdElTarget.tomselect;\n\n    if (!tempSelect.getValue()) return;\n\n    select.setValue('');\n    select.clearOptions();\n    tempSelect.refreshOptions(false);\n    select.addOption({\n      value: tempSelect.getValue(),\n      text: tempSelect.getOption(tempSelect.getValue().toString())?.textContent,\n    });\n    select.setValue(tempSelect.getValue(), true);\n    select.refreshOptions(false);\n    showSubmitButton(this.tempFirmaFakturaIdElTarget);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { postFormData } from '../utils';\nimport { getJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"firma-publics-new\"\nexport default class extends Controller {\n  async onSubmit(e) {\n    e.preventDefault();\n\n    try {\n      const form = this.element.querySelector('form');\n      const formData = new FormData(form);\n      const response = await postFormData(\n        form.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { status, message } = json;\n\n      if (!status) {\n        showToastMessage(message, { autohide: false, type: 'bg-danger' });\n\n        return;\n      }\n\n      window.close();\n    } catch (err) {\n      this.element\n        .querySelector('.btn[name=\"commit\"]')\n        .classList.remove('disabled');\n\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.element\n        .querySelector('.btn[name=\"commit\"]')\n        .classList.remove('disabled');\n    }\n  }\n\n  async loadData(e) {\n    const btnEl = this.element.querySelector(\n      '[data-action=\"firma-publics-new#loadData\"]'\n    );\n    const { message } = btnEl.dataset;\n    const icoVal = this.element.querySelector('#data_firma_public_ico').value;\n\n    if (!icoVal) {\n      return showToastMessage(message, {\n        autohide: false,\n        type: 'bg-danger',\n      });\n    }\n\n    try {\n      btnEl.classList.add('disabled');\n\n      const json = await getJSON(`/partners/load-data?ico=${icoVal}`);\n      const { status, data, message } = json;\n\n      if (!status) {\n        return showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n      }\n\n      this.#setFirmaInfo(data);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      btnEl.classList.remove('disabled');\n    }\n  }\n\n  #setFirmaInfo(data) {\n    this.element.querySelector('#data_firma_public_nazov_firmy').value =\n      data['obchodne_meno'] ?? '';\n\n    this.element.querySelector('#data_firma_sidlo').value = data['ulica'] ?? '';\n\n    this.element.querySelector('#data_firma_platca_dph_platca_dph').checked =\n      !!data['platca_dph'];\n\n    ['psc', 'obec', 'dic', 'kod_krajiny', 'ic_dph_cislo'].forEach(key => {\n      this.element.querySelector(`#data_firma_${key}`).value = data[key] ?? '';\n    });\n  }\n\n  onPaste(e) {\n    e.preventDefault();\n\n    e.target.value = e.clipboardData?.getData('text')?.replace(/\\D/g, '');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"firmas\"\nexport default class extends Controller {\n  static targets = ['companyFolderIdEl'];\n\n  declare companyFolderIdElTarget: HTMLInputElement;\n\n  GOOGLE_DRIVE_URL = 'https://drive.google.com/drive/folders/';\n\n  openCompanyFolder() {\n    if (!this.companyFolderIdElTarget.value) return;\n\n    window.open(\n      this.GOOGLE_DRIVE_URL + this.companyFolderIdElTarget.value,\n      '_blank'\n    );\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<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n  if (mask == null) throw new Error('mask property should be defined');\n  if (mask instanceof RegExp) return IMask.MaskedRegExp;\n  if (isString(mask)) return IMask.MaskedPattern;\n  if (mask === Date) return IMask.MaskedDate;\n  if (mask === Number) return IMask.MaskedNumber;\n  if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n  if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n  if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n  if (mask instanceof Function) return IMask.MaskedFunction;\n  console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n  return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n  if (!opts) throw new Error('Options in not defined');\n  if (IMask.Masked) {\n    if (opts.prototype instanceof IMask.Masked) return {\n      mask: opts\n    };\n\n    /*\n      handle cases like:\n      1) opts = Masked\n      2) opts = { mask: Masked, ...instanceOpts }\n    */\n    const {\n      mask = undefined,\n      ...instanceOpts\n    } = opts instanceof IMask.Masked ? {\n      mask: opts\n    } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n    if (mask) {\n      const _mask = mask.mask;\n      return {\n        ...pick(mask, (_, k) => !k.startsWith('_')),\n        mask: mask.constructor,\n        _mask,\n        ...instanceOpts\n      };\n    }\n  }\n  if (!isObject(opts)) return {\n    mask: opts\n  };\n  return {\n    ...opts\n  };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n  if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n  const nOpts = normalizeOpts(opts);\n  const MaskedClass = maskedClass(nOpts.mask);\n  if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + 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      // aa<X|[]>X_    - this will not work\n      // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n      return true;\n    });\n  }\n  pushRightBeforeRequired() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n      // TODO check |[*]XX_\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      return true;\n    });\n  }\n}\n\nexport { PatternCursor as default };\n", "import ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\nimport '../../core/holder.js';\n\nclass PatternFixedDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    Object.assign(this, opts);\n    this._value = '';\n    this.isFixed = true;\n  }\n  get value() {\n    return this._value;\n  }\n  get unmaskedValue() {\n    return this.isUnmasking ? this.value : '';\n  }\n  get rawInputValue() {\n    return this._isRawInput ? this.value : '';\n  }\n  get displayValue() {\n    return this.value;\n  }\n  reset() {\n    this._isRawInput = false;\n    this._value = '';\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n    if (!this._value) this._isRawInput = false;\n    return new ChangeDetails();\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    const minPos = 0;\n    const maxPos = this._value.length;\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return minPos;\n      case DIRECTION.NONE:\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n      default:\n        return maxPos;\n    }\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    return this._isRawInput ? toPos - fromPos : 0;\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n  }\n  get isComplete() {\n    return true;\n  }\n  get isFilled() {\n    return Boolean(this._value);\n  }\n  _appendChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    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<Arg & Extra>\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 { Controller } from '@hotwired/stimulus';\nimport IMask from 'imask';\n\n// Connects to data-controller=\"firmas-show\"\nexport default class extends Controller {\n  static targets = ['skNaceEl'];\n\n  connect() {\n    this.mask = IMask(this.skNaceElTarget, {\n      mask: '{##}.{##}.{#}',\n      lazy: false,\n      definitions: {\n        '#': /[0-9]/,\n      },\n      placeholderChar: '_',\n    });\n  }\n\n  disconnect() {\n    this.mask?.destroy();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport FaktSkladPolozkiesController from './fakt_sklad_polozkies_controller';\nimport {\n  parseNumber,\n  round,\n  formatNumber,\n  getStimulusController\n} from '../utils';\nimport { addFields } from '../add';\nimport { initializeTomSelect } from '../tom_select';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\n\n// Connects to data-controller=\"fsp-container\"\nexport default class extends Controller {\n  okruhId = +(<HTMLInputElement>document.querySelector('#okruh_id')).value;\n\n  static outlets: string[] = ['fakt-sklad-polozkies'];\n\n  declare readonly faktSkladPolozkiesOutlets: FaktSkladPolozkiesController[];\n  declare readonly faktSkladPolozkiesOutletElements: HTMLElement[];\n  declare readonly hasFaktSkladPolozkiesOutlet: boolean;\n\n  static targets: string[] = [\n    'labelWithoutVat',\n    'labelWithVat',\n    'labelVat',\n    'cenySuSDphEl',\n    'marginsEl',\n    'zlavaPercEl'\n  ];\n\n  declare readonly labelWithoutVatTarget: HTMLSpanElement;\n  declare readonly hasLabelWithoutVatTarget: boolean;\n  declare readonly labelWithVatTarget: HTMLSpanElement;\n  declare readonly hasLabelWithVatTarget: boolean;\n  declare readonly labelVatTarget: HTMLSpanElement;\n  declare readonly hasLabelVatTarget: boolean;\n  declare readonly cenySuSDphElTarget: HTMLSelectElement;\n  declare readonly marginsElTargets: HTMLDivElement[];\n  declare readonly hasZlavaPercElTarget: boolean;\n  declare readonly zlavaPercElTarget: HTMLInputElement;\n\n  faktSkladPolozkiesOutletConnected(\n    outlet: FaktSkladPolozkiesController,\n    _: HTMLElement\n  ) {\n    if (!outlet.poradoveCisloElTarget.value) {\n      outlet.poradoveCisloElTarget.value = (this.lastVisibleItemNumber + 1)\n        .toString()\n        .padStart(3, '0');\n    }\n  }\n\n  recalculateSums() {\n    let dph = 0.0;\n    let bezDph = 0.0;\n    let pocty: { [key: number | string]: number } = {};\n\n    this.faktSkladPolozkiesOutlets.forEach(controller => {\n      if (controller.element.classList.contains('zaloha')) return;\n      if (controller.destroyElTarget.value === 'true') return;\n\n      const index = isNaN(parseNumber(controller.dphPercElTarget.value))\n        ? 'bez_dph'\n        : parseNumber(controller.dphPercElTarget.value);\n\n      pocty[index] = round(\n        (pocty[index] || 0) +\n          (parseNumber(controller.cenaSpoluElTarget.value) -\n            round(\n              parseNumber(controller.cenaSpoluElTarget.value) *\n                parseNumber(controller.zlavaElTarget.value) *\n                0.01\n            ))\n      );\n    });\n\n    Object.keys(pocty).forEach(key => {\n      const suma = this.hasZlavaPercElTarget\n        ? round(\n            pocty[key] -\n              +pocty[key] * round((+this.zlavaPercElTarget.value || 0) / 100)\n          )\n        : round(pocty[key]);\n\n      const vat = +(key === 'bez_dph' ? 0 : key);\n\n      if (this.cenySuSDphBool) {\n        dph += round(suma - round(suma / (1 + vat / 100)));\n        bezDph += round(suma / (1 + vat / 100));\n      } else {\n        dph += round((suma * vat) / 100);\n        bezDph += suma;\n      }\n    });\n\n    this.faktSkladPolozkiesOutlets.forEach(controller => {\n      // odpocitanie zalohy, na zalohu sa nevztahuje zlava na polozke, ani zlava na doklade\n      if (!controller.element.classList.contains('zaloha')) return;\n      if (controller.destroyElTarget.value === 'true') return;\n\n      if (this.cenySuSDphBool) {\n        dph += round(\n          round(parseNumber(controller.cenaSpoluElTarget.value)) -\n            round(\n              parseNumber(controller.cenaSpoluElTarget.value) /\n                (1 + parseNumber(controller.dphPercElTarget.value) / 100)\n            )\n        );\n        bezDph += round(\n          parseNumber(controller.cenaSpoluElTarget.value) /\n            (1 + parseNumber(controller.dphPercElTarget.value) / 100)\n        );\n\n        return;\n      }\n\n      dph +=\n        round(parseNumber(controller.cenaSpoluElTarget.value)) *\n        (parseNumber(controller.dphPercElTarget.value) / 100);\n      bezDph += round(parseNumber(controller.cenaSpoluElTarget.value));\n    });\n\n    if (this.hasLabelWithoutVatTarget)\n      this.labelWithoutVatTarget.innerHTML = formatNumber(bezDph);\n\n    if (this.hasLabelWithVatTarget)\n      this.labelWithVatTarget.innerHTML = formatNumber(dph + bezDph);\n\n    if (this.hasLabelVatTarget)\n      this.labelVatTarget.innerHTML = formatNumber(dph);\n\n    this.updateParentPrices();\n  }\n\n  updateParentPrices() {\n    switch (this.okruhId) {\n      case 1:\n        getStimulusController('odoslana-fakturas')?.fakturovaneBezDPH();\n        getStimulusController('odoslana-fakturas')?.fakturovaneSDPH();\n        break;\n      case 2:\n        ['without', 'with'].forEach(type =>\n          getStimulusController('odoslana-zalohova-fakturas')?.calcStockItems(\n            type\n          )\n        );\n        break;\n      case 4:\n        getStimulusController('pokladnicny-doklads')?.calcSumCount();\n        break;\n      case 10:\n        getStimulusController('dosla-fakturas')?.calcSumCount();\n        break;\n      case 11:\n        // TODO: rework DPF to stimulus\n        (window as any).calcSumCount();\n        break;\n      case 28: // do nothing\n      case 29: // do nothing\n        break;\n      default:\n        alert(`missing definition for okruh_id: ${this.okruhId}`);\n    }\n  }\n\n  toggleMargins(e: Event) {\n    this.marginsElTargets.forEach(el => {\n      el.classList[(<HTMLInputElement>e.target).checked ? 'remove' : 'add'](\n        'd-none'\n      );\n    });\n  }\n\n  onAddFieldButton(e: Event) {\n    const _this = this;\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLElement, lastElBeforeInsert: HTMLElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv\n            .querySelectorAll('input.vanillajs-datepicker')\n            .forEach(input => {\n              initializeVanillajsDatepicker(input);\n            });\n\n          const dphPercEl = <HTMLInputElement>(\n            copiedDiv.querySelector('[id*=\"_dph_perc\"]')\n          );\n\n          if (dphPercEl?.value && _this.partnerAbroad) {\n            dphPercEl.value = '0';\n          }\n          copiedDiv = <HTMLElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  get cenySuSDphBool() {\n    return this.cenySuSDphElTarget.value === 'true';\n  }\n\n  get lastVisibleItemNumber() {\n    return parseInt(\n      this.faktSkladPolozkiesOutlets\n        .slice(0, -1)\n        .filter(i => i.destroyElTarget.value !== 'true')\n        .pop()?.poradoveCisloElTarget.value || '0'\n    );\n  }\n\n  get partnerEl() {\n    return <HTMLSelectElement>(\n      document.querySelector('select[id$=\"_partner_id\"]')\n    );\n  }\n\n  get selectedOptionPartner() {\n    return this.partnerEl.options[this.partnerEl.selectedIndex];\n  }\n\n  get partnerAbroad() {\n    return this.selectedOptionPartner.dataset.zeroVat === 'true';\n  }\n}\n", "import FiltersController from './filters_controller';\n\n// Connects to data-controller=\"hk-filters\"\nexport default class extends FiltersController {}\n", "import FilterNewController from \"./filters_new_controller\";\n\n// Connects to data-controller=\"hk-filters-new\"\nexport default class extends FilterNewController {\n}\n", "import FiltersShowController from \"./filters_show_controller\";\n\n// Connects to data-controller=\"hk-filters-show\"\nexport default class extends FiltersShowController {\n}", "import { Controller } from '@hotwired/stimulus';\nimport { showToastMessage } from '../show_toast_message';\nimport { postJSON } from '../utils';\n\n// Connects to data-controller=\"hlavna-knihas-import\"\nexport default class extends Controller {\n  static targets = [\n    'hospRokEl',\n    'obdobieOdEl',\n    'obdobieDoEl',\n    'pociatocneStavyEl',\n    'obratyEl',\n    'deleteDataBtn',\n  ];\n\n  declare hospRokElTarget: HTMLSelectElement;\n  declare obdobieOdElTarget: HTMLInputElement;\n  declare obdobieDoElTarget: HTMLInputElement;\n  declare pociatocneStavyElTarget: HTMLInputElement;\n  declare obratyElTarget: HTMLInputElement;\n  declare deleteDataBtnTarget: HTMLButtonElement;\n\n  async deleteData() {\n    try {\n      this.deleteDataBtnTarget.classList.add('disabled');\n\n      const response = await postJSON('hlavna_knihas/delete-data', {\n        pociatocne_stavy: this.pociatocneStavyElTarget.checked,\n        obraty: this.obratyElTarget.checked,\n        hosp_rok_id: this.hospRokElTarget.value,\n        obdobie_od: this.obdobieOdElTarget.value,\n        obdobie_do: this.obdobieDoElTarget.value,\n      });\n\n      const { message } = response;\n\n      showToastMessage(message);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.deleteDataBtnTarget.classList.remove('disabled');\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showFilter } from '../utils';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"hlavna-knihas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  initialize() {\n    Object.assign(this, { showFilter });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n\n    this.element\n      .querySelector('#list')\n      .addEventListener('mouseenter', this.setBackground.bind(this), true);\n    this.element\n      .querySelector('#list')\n      .addEventListener('mouseleave', this.removeBackground.bind(this), true);\n  }\n\n  disconnect() {\n    this.element\n      .querySelector('#list')\n      .removeEventListener('mouseenter', this.setBackground.bind(this), true);\n    this.element\n      .querySelector('#list')\n      .removeEventListener(\n        'mouseleave',\n        this.removeBackground.bind(this),\n        true\n      );\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  onHospRokChange(e) {\n    if (!e.target.value) return;\n\n    makeRequest(`/hlavna-knihas/set-last-used-hr/${e.target.value}.json`).then(\n      response => {\n        if (response.status) {\n          const form = e.target.closest('form');\n\n          form.querySelector('[id$=\"_obdobie_od\"]').value =\n            response.hosp_rok.datum_od;\n          form.querySelector('[id$=\"_obdobie_do\"]').value =\n            response.hosp_rok.datum_do;\n\n          this.element.querySelector(\n            '#hk_export'\n          ).href = `/hlavna-knihas/${e.target.value}/export.csv`;\n          this.element.querySelector('[name=\"commit\"][type=\"submit\"]').click();\n        }\n      }\n    );\n  }\n\n  showUctovnyRozvrh() {\n    openURL('/uctovny_rozvrhs');\n  }\n\n  printList() {\n    openURL('/hk_prints', { tab: true });\n  }\n\n  openZavierkas() {\n    openURL(`/zavierkas`);\n  }\n\n  openNew() {\n    const url = new URL('/hlavna-knihas/new-uctovny-doklad', location);\n    url.searchParams.set(\n      'date',\n      this.element.querySelector('#filter_filter_obdobie_do').value\n    );\n\n    makeRequest(url).then(response => {\n      if (!response.status) return;\n\n      openURL(response.path);\n    });\n  }\n\n  setBackground(e) {\n    if (\n      e.target.nodeName !== 'TD' ||\n      !e.target.parentElement?.classList.contains('item')\n    )\n      return;\n\n    const tr = e.target.parentElement;\n    const td = e.target;\n    const { href } = td.dataset;\n\n    if (href) {\n      tr.querySelectorAll('td[data-href]').forEach(td =>\n        td.classList.add('td-background--hover')\n      );\n      tr.querySelectorAll('td:not([data-href])').forEach(td =>\n        td.classList.add('td-background')\n      );\n\n      return;\n    }\n\n    tr.querySelectorAll('td:not([data-href]):not(.unclickable)').forEach(td =>\n      td.classList.add('td-background--hover')\n    );\n    tr.querySelectorAll('td[data-href], td.unclickable').forEach(td =>\n      td.classList.add('td-background')\n    );\n  }\n\n  removeBackground(e) {\n    const tr = e.target.parentElement;\n\n    e.target.nodeName === 'TD' &&\n      tr?.classList.contains('item') &&\n      tr\n        .querySelectorAll('td')\n        .forEach(td =>\n          td.classList.remove('td-background', 'td-background--hover')\n        );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"home-index\"\nexport default class extends Controller {\n  showDeleteButton(e: Event) {\n    e.preventDefault();\n    const group = e.currentTarget as HTMLElement;\n    const btnEl = group.querySelector('.delete-btn');\n\n    if (!btnEl) return;\n\n    btnEl.classList.remove('invisible');\n    btnEl.classList.add('opacity-1');\n  }\n\n  hideDeleteButton(e: Event) {\n    e.preventDefault();\n    const group = e.currentTarget as HTMLElement;\n    const btnEl = group.querySelector('.delete-btn');\n\n    if (!btnEl) return;\n\n    btnEl.classList.add('invisible');\n    btnEl.classList.remove('opacity-1');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { download } from '../reader';\nimport { appendCanvas, postFormData } from '../utils';\nimport { getJSON } from '../utils';\nimport { openURL } from '../window_manager';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"kontrolny-vykaz-dphs-index\"\nexport default class extends Controller {\n  #icDphEl = this.element.querySelector('#filter_filter_icdph');\n\n  connect() {\n    this.rewrite();\n\n    Object.assign(this, {\n      appendCanvas: e => appendCanvas(e, this.canvasCallback),\n    });\n  }\n\n  canvasCallback = (_, method) => {\n    if (method === 'export-files') this.toggleReason();\n  };\n\n  clearMonth(e) {\n    const mesiac = this.element.querySelector('#filter_filter_Mesiac');\n\n    if (e.target.value) {\n      mesiac.tomselect.setValue('');\n    }\n  }\n\n  clearQuarter(e) {\n    const stvrtrok = this.element.querySelector('#filter_filter_Stvrtrok');\n\n    if (e.target.value) {\n      stvrtrok.tomselect.setValue('');\n    }\n  }\n\n  async rewrite(e) {\n    this.#removeErrors();\n\n    try {\n      this.element\n        .querySelectorAll('.card-header .btn:not([disabled])')\n        .forEach(btn => {\n          btn.setAttribute('disabled', 'disabled');\n\n          if (btn.classList.contains('dropdown-toggle')) {\n            btn.classList.remove('show');\n            btn.nextElementSibling?.classList.remove('show');\n          }\n        });\n\n      const formData = new FormData(\n        this.element.querySelector('form[data-update-list=\"list\"]')\n      );\n      const response = await postFormData(\n        'kontrolny_vykaz_dphs.json',\n        formData\n      );\n\n      const json = await response.json();\n      window.Turbo.renderStreamMessage(json.turbo_stream);\n    } catch (e) {\n      showToastMessage(e, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.element\n        .querySelectorAll('.card-header .btn[disabled]')\n        .forEach(btn => {\n          btn.removeAttribute('disabled');\n        });\n    }\n  }\n\n  open(e) {\n    switch (e.target.closest('button').dataset.method) {\n      case 'show':\n        openURL(`/uctovny_doklads/${e.target.closest('button').dataset.id}`);\n\n        break;\n      case 'print':\n        const url = new URL('/kv_dph_prints', location);\n\n        url.searchParams.set(\n          'month',\n          this.element.querySelector('#filter_filter_Mesiac').value\n        );\n        url.searchParams.set(\n          'quarter',\n          this.element.querySelector('#filter_filter_Stvrtrok').value\n        );\n        url.searchParams.set(\n          'year',\n          this.element.querySelector('#filter_filter_Rok').value\n        );\n        url.searchParams.set(\n          'index',\n          this.element.querySelector('#filter_order_zoradenie_1').value\n        );\n        url.searchParams.set(\n          'direction',\n          this.element.querySelector('#filter_order_zoradenie_1_type').value\n        );\n        url.searchParams.set(\n          'kind',\n          this.element.querySelector('#filter_filter_Druh').value\n        );\n\n        openURL(url, { tab: true });\n\n        break;\n      default:\n      //do nothing\n    }\n  }\n\n  addRow(e) {\n    e.preventDefault();\n\n    const time = new Date().getTime();\n    const regexp = new RegExp(e.target.dataset.id, 'g');\n    const point = e.target.closest('tr');\n    const parent = e.target.closest('table tbody');\n\n    point.insertAdjacentHTML(\n      'beforebegin',\n      e.target.dataset.fields.replace(regexp, time.toString())\n    );\n\n    if (parent.querySelectorAll('tr:not(.empty)').length === 0) {\n      parent.querySelector('tr.empty').classList.remove('d-none');\n    } else {\n      parent.querySelector('tr.empty').classList.add('d-none');\n    }\n\n    parent\n      .querySelectorAll('input.vanillajs-datepicker')\n      .forEach(datepicker => {\n        initializeVanillajsDatepicker(datepicker);\n      });\n\n    initializeTomSelect(parent.querySelectorAll('select.tom-select'));\n\n    this.setRowCount(parent);\n  }\n\n  removeRow(e) {\n    const parent = e.target.closest('table tbody');\n\n    e.target.closest('tr').remove();\n\n    if (parent.querySelectorAll('tr:not(.empty)').length === 1) {\n      parent.querySelector('tr.empty').classList.remove('d-none');\n    } else {\n      parent.querySelector('tr.empty').classList.add('d-none');\n    }\n\n    this.setRowCount(parent);\n  }\n\n  setRowCount(tbody) {\n    tbody\n      .closest('div[id^=toggle_]')\n      .previousElementSibling.querySelector('.label-count').innerHTML =\n      parseInt(tbody.querySelectorAll('tr').length) - 2; // header + .empty\n  }\n\n  export(e) {\n    const submitter = e.target.closest(\n      'button[data-action=\"kontrolny-vykaz-dphs-index#export\"]'\n    );\n    const { type, file } = submitter.dataset;\n\n    if (type === 'all') {\n      if (!this.#icDphEl.value) {\n        const { message } = this.#icDphEl.dataset;\n\n        return showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n      }\n\n      submitter.setAttribute('disabled', 'disabled');\n    }\n\n    const form = this.element.querySelector(\n      'form[action=\"/kontrolny_vykaz_dphs\"]'\n    );\n\n    makeRequest(`/kontrolny-vykaz-dphs/export/${type}/${file}`, {\n      accept: 'application/xml',\n      method: 'POST',\n      fillContentType: false,\n      data: new FormData(form),\n    })\n      .then(response => {\n        if (response.status !== 200) {\n          response.text().then(text => {\n            showToastMessage(text, { autohide: false, type: 'bg-danger' });\n          });\n        } else {\n          if (file !== 'edane')\n            return download(response, response.headers.get('Report-Filename'));\n\n          const fnameWithTimestamp = `${Date.now()} ${response.headers.get(\n            'Report-Filename'\n          )}`;\n\n          download(response, fnameWithTimestamp);\n\n          const url = new URL(\n            'https://edane.financnasprava.sk/win/prod/install/DRSR.Win.DP.DRKlient.application'\n          );\n\n          url.searchParams.set(\n            response.headers.get('Report-Type'),\n            `C:\\\\Users\\\\Public\\\\Downloads\\\\${response.headers.get(\n              'Report-Filename'\n            )}`\n          );\n\n          window.location.assign(url);\n        }\n      })\n      .catch(e => {\n        showToastMessage(e, { autohide: false, type: 'bg-danger' });\n      })\n      .finally(() => {\n        if (submitter.dataset.type === 'all') {\n          submitter.removeAttribute('disabled');\n\n          const offcanvas = document.querySelector('.offcanvas');\n          if (offcanvas) {\n            offcanvas.querySelector('button.btn-close').click();\n          }\n        }\n      });\n  }\n\n  toggleReason() {\n    const div = this.element.querySelector('#filter_reason');\n    const parent = div.closest('div');\n\n    ['ddp', 'odp'].includes(\n      this.element.querySelector('#filter_filter_Druh').value\n    )\n      ? parent.classList.remove('d-none')\n      : parent.classList.add('d-none');\n\n    div.value = '';\n  }\n\n  async onSubmitAdditionalReport(e) {\n    e.preventDefault();\n\n    const submitter = e.target.closest(\n      'button[data-action=\"kontrolny-vykaz-dphs-index#onSubmitAdditionalReport\"]'\n    );\n\n    try {\n      submitter.setAttribute('disabled', 'disabled');\n\n      const form = this.element.querySelector(\n        'form[action=\"/kontrolny_vykaz_dphs\"]'\n      );\n      const formData = new FormData(form);\n      const response = await postFormData(\n        'kontrolny-vykaz-dphs/additional-report',\n        formData\n      );\n      const json = await response.json();\n      const { turbo_stream: turboStream } = json;\n\n      window.Turbo.renderStreamMessage(turboStream);\n\n      const offcanvas = submitter.closest('.offcanvas');\n      if (offcanvas) {\n        offcanvas.querySelector('button.btn-close').click();\n      }\n\n      this.element\n        .querySelector('#filter_filter_Druh')\n        ?.tomselect?.setValue('ddp');\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      submitter.removeAttribute('disabled');\n    }\n  }\n\n  #removeErrors() {\n    document\n      .querySelector('#alert_toasts')\n      .querySelectorAll('.btn-close')\n      .forEach(el => el.click());\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { openURL } from '../window_manager';\nimport { fillEvidOnOkruhChange } from '../fill_evid_on_okruh_change';\nimport { getJSON, formatNumber, postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport nextUntil from '../next_until';\nimport { postFormData } from '../utils';\n\n// Connects to data-controller=\"lists\"\nexport default class extends Controller {\n  static targets = ['markDisplayedBtn', 'unmarkAllBtn'];\n\n  #clearBtn = this.element.querySelector(`button#clear-filter`);\n  #submitBtn =\n    this.element.querySelector(\n      'form[data-update-list=\"list\"] button[name=\"commit\"][type=\"submit\"]'\n    ) ||\n    this.element.querySelector(\n      'button[name=\"commit\"][type=\"submit\"][form=\"form\"]'\n    );\n\n  connect() {\n    this.boundChangeEvents = this.changeEvents.bind(this);\n    this.boundClickEvents = this.clickEvents.bind(this);\n    this.boundKeyupEvents = this.keyupEvents.bind(this);\n    this.boundKeypressEvents = this.keypressEvents.bind(this);\n    this.boundmouseEnterEvents = this.mouseEnterEvents.bind(this);\n\n    document.addEventListener('change', this.boundChangeEvents);\n    document.addEventListener('click', this.boundClickEvents);\n    document.addEventListener('keyup', this.boundKeyupEvents);\n    document.addEventListener('keypress', this.boundKeypressEvents);\n    document.addEventListener('mouseenter', this.boundmouseEnterEvents);\n  }\n\n  disconnect() {\n    document.removeEventListener('change', this.boundChangeEvents);\n    document.removeEventListener('click', this.boundClickEvents);\n    document.removeEventListener('keyup', this.boundKeyupEvents);\n    document.removeEventListener('keypress', this.boundKeypressEvents);\n    document.removeEventListener('mouseenter', this.boundmouseEnterEvents);\n  }\n\n  mouseEnterEvents() {\n    const button = this.element.querySelector('#fixed_menu_opened_window');\n\n    if (!button) {\n      return false;\n    }\n\n    if (\n      window.windowObjectReference === null ||\n      (window.windowObjectReference &&\n        window.windowObjectReference.opener === null)\n    ) {\n      if (window.windowObjectReference) {\n        window.windowObjectReference = null;\n      }\n\n      button.setAttribute('hidden', 'hidden');\n    }\n  }\n\n  async changeEvents(e) {\n    try {\n      if (e.target.id.includes('_evidencia_id')) {\n        await fillCiselnyRadOnEvidChange(e.target);\n      }\n\n      if (e.target.closest('form[data-update-list=\"list\"] div.card-body')) {\n        if (\n          (e.target.nodeName === 'SELECT' ||\n            (e.target.nodeName === 'INPUT' &&\n              e.target.classList.contains('vanillajs-datepicker'))) &&\n          (e.target.closest('div#filter') || e.target.closest('.filter__title'))\n        ) {\n          this.filterChanged();\n        }\n\n        if (e.target.nodeName === 'SELECT' && e.target.closest('div#order')) {\n          orderChanged();\n        }\n\n        if (e.target.nodeName === 'SELECT' && e.target.closest('div#group')) {\n          groupChanged();\n        }\n      }\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  keyupEvents(e) {\n    if (e.target.closest('form[data-update-list=\"list\"] div.card-body')) {\n      if (e.target.nodeName === 'INPUT' && e.target.closest('div#filter')) {\n        this.filterChanged();\n      }\n    }\n  }\n\n  filterChanged() {\n    const filterSet = document.querySelector('#label-filter-set');\n    const filterNotSet = document.querySelector('#label-filter-not-set');\n\n    if (\n      [\n        ...document.querySelectorAll(\n          '#filter [class*=\"form-control\"], .filter__title [class*=\"form-control\"]'\n        )\n      ].filter(e => e.value).length > 0\n    ) {\n      filterSet.removeAttribute('hidden');\n      filterSet.style.display = 'block';\n      filterNotSet.style.display = 'none';\n\n      return;\n    }\n\n    filterNotSet.removeAttribute('hidden');\n    filterNotSet.style.display = 'block';\n    filterSet.style.display = 'none';\n  }\n\n  async clickEvents(e) {\n    if (e.target.closest('#clear-filter')) {\n      document\n        // .querySelectorAll('div#filter input, div#filter select')\n        .querySelectorAll(\n          '#filter [class*=\"form-control\"], .filter__title [class*=\"form-control\"]'\n        )\n        .forEach(element => {\n          if (!element.classList.contains('do-not-clear')) {\n            element.value = '';\n\n            if (element.nodeName === 'SELECT') {\n              element.tomselect.clear(false);\n            }\n          }\n        });\n\n      this.filterChanged();\n    } else if (e.target.closest('#clear-group')) {\n      const selects = document.querySelectorAll(\n        'div#group select:not(:disabled)'\n      );\n\n      selects.forEach(select => {\n        select.value = '';\n        select.tomselect.clear(false);\n      });\n    } else if (e.target.closest('#clear-order')) {\n      const selects = document.querySelectorAll(\n        'div#order select:not(:disabled):not(.far-icon)'\n      );\n      selects.forEach(select => {\n        select.value = '';\n        select.tomselect.clear(false);\n      });\n\n      const checkboxes = document.querySelectorAll(\n        'div#order input[type=\"checkbox\"]:not(:disabled).far-icon'\n      );\n      checkboxes.forEach(checkbox => {\n        checkbox.checked = true;\n      });\n    } else if (e.target.closest('.unclickable')) {\n      if (\n        e.target.closest('span.rounded-square[data-bs-toggle=\"collapse\"]') ||\n        e.target.closest('.collapse-group')\n      ) {\n        this.collapseGroup(e.target.closest('tr'));\n        e.stopPropagation();\n      } else if (\n        e.target.closest('span.rounded-square[data-bs-toggle=\"expand\"]') ||\n        e.target.closest('.expand-group')\n      ) {\n        this.expandGroup(e.target.closest('tr'));\n        e.stopPropagation();\n      } else if (e.target.closest('.collapse-all')) {\n        this.collapseAll(e.target.closest('tr'));\n      } else if (e.target.closest('.expand-all')) {\n        this.expandAll(e.target.closest('tr'));\n      } else if (e.target.name === 'id' && e.target.type === 'checkbox') {\n        makeRequest('/list/mark', {\n          method: 'POST',\n          data: {\n            value: e.target.value,\n            _action: e.target.checked,\n            oid: document.getElementById('oid').value\n          }\n        })\n          .then(() => {\n            let item = e.target.closest('tr.item');\n            let classToAdd = e.target.checked ? 'marked' : 'unmarked';\n            item.classList.add(classToAdd);\n\n            setTimeout(() => {\n              item.classList.remove(classToAdd);\n            }, 500);\n          })\n          .catch(err =>\n            showToastMessage(err, { autohide: false, type: 'bg-danger' })\n          );\n      } else if (\n        e.target.name === 'list_top_agr' &&\n        e.target.type === 'checkbox'\n      ) {\n        let parent = e.target.closest('tr.group');\n        let depth = parent.dataset.uroven;\n\n        let selectors = [];\n        for (let i = 1; i <= depth; i++) {\n          selectors.push(`tr[data-uroven=\"${i}\"]`);\n        }\n\n        let all = nextUntil(parent, selectors.join(', '));\n        let checkboxSet = all.map(tr =>\n          tr.querySelector('input[type=\"checkbox\"]')\n        );\n\n        checkboxSet.forEach(ch => {\n          if (ch) {\n            ch.checked = e.target.checked;\n          }\n        });\n\n        const form = this.element.querySelector('[data-update-list=\"list\"]');\n        const data = new FormData(form);\n\n        data.append('checked', e.target.checked);\n        data.append('oid', this.element.querySelector('#oid').value);\n\n        e.target.dataset.params.split('&').forEach(element => {\n          data.append(`${element.split('=')[0]}`, element.split('=')[1]);\n        });\n\n        const request = await postFormData('/list/mark-group', data);\n        const json = await request.json();\n        const { turbo_stream: turboStream } = json;\n\n        window.Turbo.renderStreamMessage(turboStream);\n      }\n    } else if (e.target.closest('tr.group.collapse td:not(.unclickable)')) {\n      this.collapseGroup(e.target.closest('tr'));\n      e.stopPropagation();\n    } else if (e.target.closest('tr.group.expand td:not(.unclickable)')) {\n      this.expandGroup(e.target.closest('tr'));\n      e.stopPropagation();\n    } else if (e.target.closest('#scroll_up')) {\n      document.body.scrollTop = document.documentElement.scrollTop = 0;\n    } else if (e.target.closest('#bring_from_back')) {\n      if (\n        window.windowObjectReference != null &&\n        window.windowObjectReference !== window\n      ) {\n        window.windowObjectReference.focus();\n      }\n    } else {\n      const item = e.target.closest('tr.item');\n\n      if (!item) return;\n\n      const { href } = e.target.dataset;\n      const { message } = item.dataset;\n      const { alertMessage } = item.dataset; // special case for zoznam_op\n\n      if (!href && alertMessage) {\n        showToastMessage(alertMessage, { type: 'bg-danger' });\n\n        return;\n      }\n\n      item.classList.contains('bg-danger')\n        ? message && showToastMessage(message)\n        : this.markAndOpen(href ? e.target : item);\n    }\n  }\n\n  async unmarkAll() {\n    try {\n      this.unmarkAllBtnTargets.forEach(btn => (btn.disabled = true));\n\n      const json = await postJSON('/list/unmark-all', {\n        oid: document.getElementById('oid').value\n      });\n\n      document.querySelectorAll(\"#list input[type='checkbox']\").forEach(ch => {\n        ch.checked = false;\n      });\n\n      window.Turbo.renderStreamMessage(json.turbo_stream);\n    } catch (err) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.unmarkAllBtnTargets.forEach(btn => (btn.disabled = false));\n    }\n  }\n\n  async markDisplayed() {\n    try {\n      this.markDisplayedBtnTargets.forEach(btn => (btn.disabled = true));\n\n      const json = await postJSON('/list/mark-displayed', {\n        oid: document.getElementById('oid').value\n      });\n\n      this.element\n        .querySelectorAll(\"#list input[type='checkbox']\")\n        .forEach(ch => {\n          ch.checked = true;\n        });\n\n      window.Turbo.renderStreamMessage(json.turbo_stream);\n    } catch (err) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.markDisplayedBtnTargets.forEach(btn => (btn.disabled = false));\n    }\n  }\n\n  keypressEvents(e) {\n    if (\n      e.keyCode === 114 &&\n      !['input', 'textarea'].includes(e.target.tagName.toLowerCase())\n    ) {\n      let submitBtn = document.querySelector(\n        'button[type=\"submit\"][name=\"commit\"]'\n      );\n\n      if (submitBtn) {\n        submitBtn.click();\n      }\n    }\n  }\n\n  async setValuesByFilter(e) {\n    try {\n      if (!e.target.value) {\n        this.#clearBtn.click();\n\n        return;\n      }\n\n      const json = await getJSON(\n        `/${e.target.id\n          .replace('filter_filter_', '')\n          .replace('_filter_id', '')}_filters/${e.target.value}.json`\n      );\n\n      // iterate of filter, group, order\n      for (const [type, data] of Object.entries(json)) {\n        // iterate over each of filter, ...\n        for (const properties of Object.entries(data)) {\n          const [name, value] = properties;\n          const selectors = [\n            `#filter_${type}_${name}`,\n            `#filter_${type}_uctovny_doklad_${name}`\n          ].map(name => name.replace('.', '_'));\n          const element = this.element.querySelector(selectors.join(','));\n\n          if (Array.isArray(value)) this.#setRangeValues(value, selectors);\n\n          if (!element) continue;\n\n          if (element.nodeName === 'SELECT') {\n            element.tomselect?.setValue(value?.toString(), true);\n\n            if (element.id.endsWith('okruh_id')) {\n              const { evidencia_id: evidenciaId } = json.filter;\n\n              await fillEvidOnOkruhChange(element, evidenciaId);\n            }\n\n            if (element.id.endsWith('evidencia_id')) {\n              const { ciselny_rad_id: ciselnyRadId } = json.filter;\n\n              await fillCiselnyRadOnEvidChange(element, ciselnyRadId);\n            }\n\n            if (name === 'partner_obchodne_meno' && value) {\n              element.tomselect.addOption({ obchodne_meno: value });\n              element.tomselect.setValue(value, true);\n            }\n\n            continue;\n          }\n\n          if (element.nodeName === 'INPUT' && element.type === 'checkbox') {\n            element.checked = value === 'asc';\n            continue;\n          }\n\n          // specific case for saldo\n          if (\n            element.nodeName === 'INPUT' &&\n            document.querySelector('#oid')?.value === '23' &&\n            ['splatnost', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'ucet'].some(\n              name => element.id.endsWith(name)\n            )\n          ) {\n            element.value = value;\n\n            continue;\n          }\n\n          // specific case for skladova karta sk_filter.nazov and zoznam_sk.nazov in ambiguity\n          if (\n            element.nodeName === 'INPUT' &&\n            document.querySelector('#oid')?.value === '30' &&\n            name == 'skladova_karta_nazov'\n          ) {\n            this.element.querySelector(\n              '#filter_filter_skladova_karta_nazov'\n            ).value = value;\n\n            continue;\n          }\n\n          element.value = value;\n        }\n      }\n\n      orderChanged();\n      groupChanged();\n\n      this.#submitBtn?.click();\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  #setRangeValues(range, selectors) {\n    let rangeEls = document.querySelectorAll(\n      `${selectors[0]}_od, ${selectors[0]}_do`\n    );\n\n    if (rangeEls.length === 0)\n      rangeEls = document.querySelectorAll(\n        `${selectors[1]}_od, ${selectors[1]}_do`\n      );\n\n    if (rangeEls.length === 0) return;\n\n    rangeEls.forEach((el, i) => {\n      if (el.classList.contains('do-not-clear') && !range[i]) return;\n\n      // date\n      if (el.classList.contains('vanillajs-datepicker')) {\n        el.value = range[i];\n\n        return;\n      }\n\n      // number\n      el.value = range[i] ? formatNumber(range[i]) : '';\n    });\n  }\n\n  markAndOpen(item) {\n    const { hrefTarget, href, tab } = item.dataset;\n\n    document\n      .querySelectorAll('tr.item.bg-warning-200')\n      .forEach(row => row.classList.remove('bg-warning-200'));\n\n    document\n      .querySelectorAll(`tr.item[data-href=\"${href}\"], td[data-href=\"${href}\"]`)\n      .forEach(el => {\n        el.closest('tr.item')?.classList.add('bg-warning-200');\n      });\n\n    hrefTarget === '_blank'\n      ? window.open(href, '_blank')\n      : openURL(href, { tab: tab || false });\n  }\n\n  collapseGroup(tr) {\n    let span = tr.querySelector('span.rounded-square');\n    span.innerHTML = '+';\n\n    tr.querySelector('span.rounded-square').setAttribute(\n      'data-bs-toggle',\n      'expand'\n    );\n\n    nextUntil(tr, `tr[data-uroven=\"${tr.dataset.uroven}\"]`).forEach(element => {\n      if (element.dataset.uroven >= tr.dataset.uroven) {\n        let toggleSpan = element.querySelector('span.rounded-square');\n\n        if (toggleSpan && toggleSpan.getAttribute('aria-expanded') === 'true') {\n          toggleSpan.setAttribute('aria-expanded', 'false');\n          toggleSpan.setAttribute('data-bs-toggle', 'expand');\n          toggleSpan.innerHTML = '+';\n        }\n\n        element.classList.remove('not-hidden', 'collapse');\n        element.classList.add('hidden', 'expand');\n        element.style.display = 'none';\n      }\n    });\n\n    document\n      .querySelectorAll('tr.hidden td.unclickable span.rounded-square')\n      .forEach(span => {\n        span.setAttribute('data-bs-toggle', 'expand');\n        span.innerHTML = '+';\n      });\n\n    tr.classList.remove('collapse');\n    tr.classList.add('expand');\n  }\n\n  expandGroup(tr) {\n    let span = tr.querySelector('span.rounded-square');\n    span.innerHTML = '-';\n\n    tr.querySelector('span.rounded-square').setAttribute(\n      'data-bs-toggle',\n      'collapse'\n    );\n\n    let next = tr.nextElementSibling;\n    if (\n      next &&\n      next.classList.contains('group') &&\n      parseInt(next.getAttribute('data-uroven')) ===\n        parseInt(tr.dataset.uroven) + 1\n    ) {\n      nextUntil(\n        tr,\n        `tr.group[data-uroven=\"${parseInt(tr.dataset.uroven)}\"]`\n      ).forEach(element => {\n        if (tr.classList.contains('expand-group')) {\n          if (parseInt(tr.dataset.uroven) < parseInt(element.dataset.uroven)) {\n            element.classList.remove('hidden');\n            element.classList.add('not-hidden');\n            element.style.display = 'table-row';\n          }\n\n          this.toggleButton(element);\n        } else {\n          if (\n            parseInt(tr.dataset.uroven) + 1 ===\n            parseInt(element.dataset.uroven)\n          ) {\n            element.classList.remove('hidden');\n            element.classList.add('not-hidden');\n            element.style.display = 'table-row';\n          }\n        }\n      });\n    } else {\n      nextUntil(tr, `tr[data-uroven=\"${parseInt(tr.dataset.uroven)}\"]`).forEach(\n        element => {\n          element.classList.remove('hidden');\n          element.classList.add('not-hidden');\n          element.style.display = 'table-row';\n        }\n      );\n    }\n\n    tr.classList.remove('expand');\n    tr.classList.add('collapse', 'show');\n  }\n\n  toggleButton(row, toggler = true) {\n    if (row.classList.contains('group')) {\n      let data = {\n        ariaExpand: toggler.toString(),\n        bsToggle: toggler ? 'collapse' : 'expand',\n        innerHTML: toggler ? '-' : '+'\n      };\n\n      let toggleSpan = row.querySelector('.rounded-square');\n      if (toggleSpan) {\n        row.classList.remove('expand', 'collapse');\n        row.classList.add(data.bsToggle);\n        toggleSpan.setAttribute('aria-expanded', data.ariaExpand);\n        toggleSpan.setAttribute('data-bs-toggle', data.bsToggle);\n        toggleSpan.innerHTML = data.innerHTML;\n      }\n    }\n  }\n\n  expandAll(tr) {\n    this.toggleButton(tr);\n\n    nextUntil(tr, `tr[data-uroven=\"${parseInt(tr.dataset.uroven)}\"]`).forEach(\n      element => {\n        this.toggleButton(element);\n\n        element.classList.remove('hidden');\n        element.classList.add('not-hidden');\n        element.style.display = 'table-row';\n      }\n    );\n  }\n\n  collapseAll(tr) {\n    this.toggleButton(tr, false);\n\n    nextUntil(tr, `tr[data-uroven=\"${parseInt(tr.dataset.uroven)}\"]`).forEach(\n      (element, i) => {\n        this.toggleButton(element, false);\n\n        if (element.dataset.uroven > 1) {\n          element.classList.remove('not-hidden', 'collapse');\n          element.classList.add('hidden', 'expand');\n          element.style.display = 'none';\n        }\n      }\n    );\n  }\n}\n\nfunction orderChanged() {\n  const orderSet = document.querySelector('#label-order-set');\n  const orderNotSet = document.querySelector('#label-order-not-set');\n  const options = [\n    ...document.querySelectorAll(\n      'div#order select:not([id*=\"_type\"]) option:checked'\n    )\n  ].filter(s => s.value !== '');\n\n  toggleLabels(options, orderSet, orderNotSet);\n}\n\nwindow.orderChanged = orderChanged;\n\nfunction groupChanged() {\n  const groupSet = document.querySelector('#label-group-set');\n  const groupNotSet = document.querySelector('#label-group-not-set');\n  const options = [\n    ...document.querySelectorAll('div#group select option:checked')\n  ].filter(s => s.value !== '');\n\n  toggleLabels(options, groupSet, groupNotSet);\n}\n\nwindow.groupChanged = groupChanged;\n\nfunction toggleLabels(options, setElement, notSetElement) {\n  if (!setElement && !notSetElement) return;\n\n  if (options.length > 0) {\n    setElement.removeAttribute('hidden');\n    setElement.style.display = 'block';\n    notSetElement.style.display = 'none';\n\n    let text = options.map(option => option.text.toString()).join(', ');\n\n    if (text.length > 35) text = text.substring(0, 35).concat('...');\n\n    const desiredEl =\n      setElement.children.length > 0 &&\n      setElement.children[0].nodeName === 'SPAN'\n        ? setElement.children[0]\n        : setElement;\n\n    return (desiredEl.innerHTML = text);\n  }\n\n  notSetElement.removeAttribute('hidden');\n  notSetElement.style.display = 'block';\n  setElement.style.display = 'none';\n}\n", "import { getJSON } from './utils';\n\nexport async function fillEvidOnOkruhChange(\n  target,\n  presetVal = null,\n  evidEl = document.querySelector(\n    `#${target.id.replace('_okruh_id', '_evidencia_id')}`\n  )\n) {\n  try {\n    if (!evidEl) return;\n\n    const tomselectObj = evidEl.tomselect;\n\n    if (!tomselectObj) return;\n\n    // deselecting\n    if (!target.value) {\n      tomselectObj.clear(true);\n      tomselectObj.clearOptions();\n\n      const crSelect = document.querySelector(\n        `#${target.id.replace('_okruh_id', '_ciselny_rad_id')}`\n      );\n\n      if (!crSelect) return;\n\n      const tomselectCr = crSelect.tomselect;\n\n      if (!tomselectCr) return;\n\n      tomselectCr.clear(true);\n      tomselectCr.clearOptions();\n    }\n\n    const json = await getJSON(`/evids/${parseInt(target.value)}.json`);\n    const { text, allowClear } = evidEl.dataset;\n    const textRegex = /[a-z]/g;\n\n    tomselectObj.input.innerHTML = `<option value label=\" \"></option>`;\n    tomselectObj.clear(true);\n    tomselectObj.clearOptions();\n\n    json.forEach(evidencia => {\n      text && text.match(textRegex)\n        ? (tomselectObj.input.innerHTML += `<option value=\"${evidencia.id}\">${evidencia[text]}</option>`)\n        : (tomselectObj.input.innerHTML += `<option value=\"${evidencia.id}\">${evidencia.concated}</option>`);\n\n      tomselectObj.sync();\n    });\n\n    evidEl.dataset.okruhId = target.value;\n\n    if (presetVal) {\n      tomselectObj.setValue(presetVal);\n\n      return;\n    }\n\n    if (allowClear) {\n      tomselectObj.setValue('');\n\n      return;\n    }\n\n    if (json.length > 0) tomselectObj.setValue(json[0].id);\n  } catch (err) {\n    throw err;\n  }\n}\n", "export default function (elem, selector, filter) {\n  // Setup siblings array\n  let siblings = [];\n\n  // Get the next sibling element\n  elem = elem.nextElementSibling;\n\n  // As long as a sibling exists\n  while (elem) {\n    // If we've reached our match, bail\n    if (elem.matches(selector)) break;\n\n    // If filtering by a selector, check if the sibling matches\n    if (filter && !elem.matches(filter)) {\n      elem = elem.nextElementSibling;\n      continue;\n    }\n\n    // Otherwise, push it to the siblings array\n    siblings.push(elem);\n\n    // Get the next sibling element\n    elem = elem.nextElementSibling;\n  }\n\n  return siblings;\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n// @ts-ignore\nimport * as sortable from 'html5sortable/dist/html5sortable.es.js';\nimport { VykazPolozka, ParsedGroups } from '../types';\n\n// Connects to data-controller=\"make-vykaz-polozkas-sortable\"\nexport default class extends Controller {\n  // allow only 5 levels of groups\n  private selectors = Array.from(\n    { length: 5 },\n    (_, i) => `.accordion.rows-${i}`\n  );\n\n  list: HTMLDivElement[] = [];\n\n  connect(): void {\n    const editModeBtn = <HTMLInputElement>(\n      document.querySelector('#filter_edit_mode')\n    );\n\n    if (editModeBtn?.checked) this.initSortable();\n  }\n\n  disconnect(): void {\n    this.list.forEach((item: HTMLDivElement) => {\n      item.removeEventListener('sortupdate', this.update.bind(this));\n    });\n\n    sortable.default(\n      this.element.querySelectorAll('.accordion-items'),\n      'destroy'\n    );\n  }\n\n  private initSortable() {\n    this.selectors.forEach(selector => {\n      this.list = sortable.default(selector, {\n        items: this.element.querySelectorAll('.accordion-items'),\n        handle: '.move',\n        acceptFrom: this.selectors.join(', '),\n        forcePlaceholderSize: true,\n      });\n\n      this.list.forEach((item: HTMLDivElement) => {\n        item.addEventListener('sortupdate', this.update.bind(this));\n      });\n    });\n  }\n\n  // reload sortable to apply changes to dropped elements\n  private refreshSortable() {\n    this.selectors.forEach(selector => sortable.default(selector));\n  }\n\n  private async update(_: Event) {\n    try {\n      const json = await postJSON(\n        `/vykazs/${\n          (document.querySelector('#filter_vykaz_id') as HTMLSelectElement)\n            .value\n        }`,\n        { groups: this.parseGroups() },\n        'PATCH'\n      );\n      const { status, message } = json;\n\n      if (!status) {\n        showToastMessage(message, { autohide: false, type: 'bg-danger' });\n\n        return;\n      }\n\n      this.refreshSortable();\n      showToastMessage(message);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  private parseGroups(): ParsedGroups {\n    const structure: ParsedGroups = {};\n\n    this.element.querySelectorAll('.accordion-item').forEach((row, i) => {\n      const { id } = (row as HTMLDivElement).dataset;\n      let item: Partial<VykazPolozka> = {};\n\n      if (!id) return;\n\n      item.id = +id;\n      item.pozicia = i + 1;\n\n      const closestItem = (row as HTMLDivElement).closest(\n        `.accordion-item:not([data-id=\"${id}\"])`\n      ) as HTMLDivElement;\n      const uroven = +(closestItem?.dataset?.id ?? 0);\n\n      structure[uroven] ||= [];\n      structure[uroven].push(item as VykazPolozka);\n    });\n\n    return structure;\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { TomSelectElement } from '../types';\nimport { postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"mass-changes-numbering\"\nexport default class extends Controller {\n  static targets = ['ciselnyRadIdEl', 'labelEl'];\n\n  declare readonly ciselnyRadIdElTarget: TomSelectElement;\n  declare readonly labelElTarget: HTMLSpanElement;\n\n  connect() {}\n\n  showCiselnyRad() {\n    openURL(`/ciselny_rads/${this.ciselnyRadIdElTarget.value}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n\n  async updateLabel() {\n    try {\n      const response = await postJSON(this.buildUrl(), {}, 'PATCH');\n      this.labelElTarget.innerHTML = response.level1;\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  private buildUrl() {\n    const url = new URL(\n      '/ciselny_rads/get-sample-numbering',\n      location.toString()\n    );\n    url.searchParams.set('ciselny_rad_id', this.ciselnyRadIdElTarget.value);\n\n    return url;\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { TomSelectElement } from '../types';\nimport { getJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"mass-changes-type\"\nexport default class extends Controller {\n  static targets = ['labelEl'];\n\n  declare readonly labelElTarget: HTMLSpanElement;\n\n  updateLabel(e: Event) {\n    const target = <TomSelectElement>e.target;\n    this.labelElTarget.innerHTML =\n      target.options[target.selectedIndex].dataset.accounts || '';\n  }\n\n  async onZnamienkoChange(e: Event) {\n    try {\n      const target = <TomSelectElement>e.target;\n      const url = new URL('/pd_typs.json', location.toString());\n      url.searchParams.set('znamienko', target.value);\n      url.searchParams.set('without_payment', 'true');\n      const response = await getJSON(url.toString());\n\n      ['data_typ_id', 'data_old_typ_id'].forEach(name => {\n        const select = <TomSelectElement>(\n          document.querySelector(`select#${name}`)\n        );\n        select.tomselect.destroy();\n        select.innerHTML = '';\n\n        response.forEach(\n          (typ: {\n            nazov: string;\n            id: string;\n            synt_ucet_kod: string;\n            analyt_ucet_kod: string;\n          }) => {\n            const option = new Option(typ.nazov, typ.id);\n            option.dataset.accounts = `${typ.synt_ucet_kod} ${typ.analyt_ucet_kod}`;\n            select.append(option);\n          }\n        );\n\n        initializeTomSelect([select]);\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"messages\"\nexport default class extends Controller {\n  static targets = ['message'];\n\n  connect() {\n    const _this = this;\n    this.alert = document.getElementsByClassName('alert')[0];\n    const offcanvas = document.querySelector('.offcanvas.show');\n\n    this.alert.style.display = 'block';\n\n    if (offcanvas) {\n      offcanvas\n        .querySelector('.btn-close[data-bs-dismiss=\"offcanvas\"]')\n        .click();\n    }\n\n    (\n      this.alert.closest('#alert_messages') || this.alert.closest('div')\n    ).scrollIntoView(false);\n\n    if (this.alert.classList.contains('alert-success')) {\n      window.timeOutID = window.setTimeout(() => {\n        _this.hide(this.alert);\n      }, 3000);\n\n      this.alert.addEventListener('mouseout', function (e) {\n        e.preventDefault();\n        _this.hide(this.alert);\n      });\n\n      this.alert.addEventListener('mouseover', function (e) {\n        e.preventDefault();\n        clearTimeout(window.timeOutID);\n      });\n    }\n\n    this.alert.addEventListener('close.bs.alert', function (e) {\n      e.preventDefault();\n      _this.hide(this.alert);\n    });\n  }\n\n  disconnect() {\n    this.alert.addEventListener('mouseout', function (e) {\n      e.preventDefault();\n      this.hide(this.alert);\n    });\n\n    this.alert.addEventListener('mouseover', function (e) {\n      e.preventDefault();\n      clearTimeout(window.timeOutID);\n    });\n\n    this.alert.addEventListener('close.bs.alert', function (e) {\n      e.preventDefault();\n      this.hide(this.alert);\n    });\n  }\n\n  messageTargetDisconnected(el) {\n    this.hide(el);\n  }\n\n  hide(el) {\n    if (el.classList.contains('show')) {\n      clearTimeout(window.timeOutID);\n      el.style.display = 'none';\n      el.innerHTML =\n        '<div class=\"mt-3 alert alert-dismissible fade show text-center\" role=\"alert\"> <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\" data-test-id=\"close-alert-message\"></button></div>';\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"modal\"\nexport default class extends Controller {\n  connect() {\n    new bootstrap.Modal(this.element)?.show();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"motorove-vozidlos\"\nexport default class extends Controller {\n  static targets = ['m3N3Columns'];\n\n  onSubmitButton(e) {\n    window.onbeforeunload = null;\n  }\n\n  toggleM3N3Columns(e) {\n    ['M3', 'N3'].includes(e.target.options[e.target.selectedIndex]?.text)\n      ? this.m3N3ColumnsTarget.classList.remove('d-none')\n      : this.m3N3ColumnsTarget.classList.add('d-none');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { deleteJSON } from '../utils';\nimport { simpleCardMethods } from '../utils';\n\n// Connects to data-controller=\"motorove-vozidlos-index\"\nexport default class extends Controller {\n  connect() {\n    Object.assign(this, simpleCardMethods);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"motorove-vozidlos-show\"\nexport default class extends Controller {\n  connect() {\n    initializeFilePond();\n\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    destroyFilePond();\n\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\nimport { openURL } from '../window_manager';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { TomSelectElement } from '../types';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { showToastMessage } from '../show_toast_message';\nimport { postJSON, open } from '../utils';\nimport {\n  formatNumber,\n  getJSON,\n  onPartnerChange,\n  onDodavatelChange\n} from '../utils';\nimport { deleteResource } from '../delete';\nimport { addFields } from '../add';\nimport { initializeTomSelect } from '../tom_select';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\n// Connects to data-controller=\"objednavkas\"\nexport default class extends Controller {\n  static targets = [\n    'dodavatelEl',\n    'partnerEl',\n    'labelNumberEl',\n    'evidenciaEl',\n    'ciselnyRadEl',\n    'cisloObjEl',\n    'oldCisloEl',\n    'datumVystaveniaEl',\n    'kurzDiv',\n    'cisMenaEl',\n    'kurzEl'\n  ];\n\n  declare readonly dodavatelElTarget: HTMLSelectElement;\n  declare readonly partnerElTarget: HTMLSelectElement;\n  declare readonly labelNumberElTarget: HTMLSpanElement;\n  declare readonly evidenciaElTarget: TomSelectElement;\n  declare readonly ciselnyRadElTarget: TomSelectElement;\n  declare readonly cisloObjElTarget: HTMLInputElement;\n  declare readonly oldCisloElTarget: HTMLInputElement;\n  declare readonly datumVystaveniaElTarget: HTMLInputElement;\n  declare readonly kurzDivTarget: HTMLDivElement;\n  declare readonly cisMenaElTarget: HTMLSelectElement;\n  declare readonly kurzElTarget: HTMLInputElement;\n\n  initialize() {\n    Object.assign(this, popupHelpers, {\n      open,\n      onPartnerChange,\n      onDodavatelChange\n    });\n    dayjs.extend(customParseFormat);\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource((<HTMLElement>e.target).closest('.delete-resource'));\n\n    e.preventDefault();\n  }\n\n  showDodavatel(e: Event) {\n    openURL(`/dodavatels/${this.dodavatelElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n\n  showPartner(e: Event) {\n    openURL(`/partners/${this.partnerElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n\n  async onEvidChange(e: Event) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  async onCiselnyRadChange() {\n    await this.updateNumbering();\n    this.updateLabel();\n  }\n\n  updateLabel() {\n    [this.evidenciaElTarget, this.ciselnyRadElTarget].forEach(element => {\n      if (element.tomselect.getValue()) {\n        this.labelNumberElTarget.classList.remove('text-danger');\n        this.labelNumberElTarget.classList.add('text-primary');\n      } else {\n        this.labelNumberElTarget.classList.remove('text-primary');\n        this.labelNumberElTarget.classList.add('text-danger');\n      }\n    });\n\n    this.labelNumberElTarget.innerHTML = `${\n      this.evidenciaElTarget.options[this.evidenciaElTarget.selectedIndex]\n        .dataset.kod\n    }-${\n      this.ciselnyRadElTarget.options[this.ciselnyRadElTarget.selectedIndex]\n        .dataset.kod\n    }-${this.cisloObjElTarget.value}`;\n  }\n\n  async updateNumbering() {\n    try {\n      const json = await this.#getSampleNumbering();\n      const { level1 } = json;\n\n      this.cisloObjElTarget.value = level1;\n      this.oldCisloElTarget.value = level1;\n\n      showSubmitButton(this.cisloObjElTarget);\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showCiselnyRad(e: Event) {\n    if (this.ciselnyRadElTarget.value) {\n      openURL(`/ciselny_rads/${this.ciselnyRadElTarget.value}`, {\n        parentUrl: new URL(location.toString())\n      });\n    } else {\n      openURL(`/ciselny_rads/new/${this.evidenciaElTarget.value}`, {\n        parentUrl: new URL(location.toString())\n      });\n    }\n  }\n\n  onCisMenaChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n\n    this.kurzDivTarget.classList[target.value == '1' ? 'add' : 'remove'](\n      'd-none'\n    );\n\n    this.updateCurrencyRate();\n  }\n\n  async updateCurrencyRate() {\n    try {\n      if (\n        !dayjs(this.datumVystaveniaElTarget.value, 'DD.MM.YYYY', true).isValid()\n      ) {\n        return;\n      }\n\n      const rate = await getJSON(\n        `/currency-rates/get-by-date?date=${this.datumVystaveniaElTarget.value}&cis_mena_id=${this.cisMenaElTarget.value}`\n      );\n\n      this.kurzElTarget.value = formatNumber(rate, 4);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async #getSampleNumbering() {\n    try {\n      const url = new URL(\n        '/ciselny_rads/get-sample-numbering',\n        location.toString()\n      );\n\n      if (!this.datumVystaveniaElTarget.value) return;\n\n      return await postJSON(\n        url,\n        {\n          ciselny_rad_id: this.ciselnyRadElTarget.value,\n          datum: this.datumVystaveniaElTarget.value\n        },\n        'PATCH'\n      );\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { setBackground, removeBackground } from '../fakt_sklad_polozkies_utils';\n\n// Connects to data-controller=\"objednavka-fakt-sklad-polozkies-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  initialize(): void {\n    Object.assign(this, { setBackground, removeBackground });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e: Event) {\n    updateAdditionalInfo(e.target);\n  }\n}\n", "export function setBackground(e: Event) {\n  const target = <HTMLElement>e.target;\n\n  if (\n    target.nodeName !== 'TD' ||\n    !target.parentElement?.classList.contains('item')\n  )\n    return;\n\n  const tr = target.parentElement;\n  const td = target;\n  const { href } = td.dataset;\n\n  if (href) {\n    tr.querySelectorAll('td[data-href]').forEach(td =>\n      td.classList.add('td-background--hover')\n    );\n    tr.querySelectorAll('td:not([data-href])').forEach(td =>\n      td.classList.add('td-background')\n    );\n\n    return;\n  }\n\n  tr.querySelectorAll('td:not([data-href]):not(.unclickable)').forEach(td =>\n    td.classList.add('td-background--hover')\n  );\n  tr.querySelectorAll('td[data-href], td.unclickable').forEach(td =>\n    td.classList.add('td-background')\n  );\n}\n\nexport function removeBackground(e: Event) {\n  const target = <HTMLElement>e.target;\n  const tr = target.parentElement;\n\n  target.nodeName === 'TD' &&\n    tr?.classList.contains('item') &&\n    tr\n      .querySelectorAll('td')\n      .forEach(td =>\n        td.classList.remove('td-background', 'td-background--hover')\n      );\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showRecord, getJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"objednavkas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  initialize(): void {\n    Object.assign(this, { showRecord });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e: Event) {\n    updateAdditionalInfo(e.target);\n  }\n\n  async setMarkedCount() {\n    try {\n      const response = await getJSON('/objednavkas/marked-count');\n\n      this.element.querySelectorAll('.marked-count').forEach(element => {\n        element.innerHTML = response.count;\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { getStimulusController } from '../utils';\nimport { whenControllerReady } from '../utils';\n\n// Connects to data-controller=\"objednavkas-new\"\nexport default class extends Controller {\n  static targets = ['partnerEl', 'dodavatelEl'];\n\n  declare readonly partnerElTarget: HTMLSelectElement;\n  declare readonly dodavatelElTarget: HTMLSelectElement;\n\n  connect() {\n    const firstItem = this.element.querySelector(\n      '#fakt_sklad_polozkies .stock-item'\n    );\n\n    if (!firstItem) return;\n\n    whenControllerReady(\n      'fsp-container',\n      'recalculateSums',\n      [],\n      firstItem.closest('[data-controller=\"fsp-container\"]') as HTMLElement\n    );\n  }\n\n  onPartnerChange() {\n    if (!this.partnerElTarget.value || !this.dodavatelElTarget.value) return;\n\n    const { copy } = this.partnerElTarget.dataset;\n\n    if (copy === 'true') return;\n\n    openURL(\n      `/objednavkas/new/${this.partnerElTarget.value}/${this.dodavatelElTarget.value}`,\n      { target: '_self' }\n    );\n  }\n\n  onCiselnyRadChange() {\n    getStimulusController('objednavkas', this.element)?.onCiselnyRadChange();\n  }\n}\n", "import FormChangesController from './form_changes_controller';\nimport { deleteJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { initializeFilePond, destroyFilePond } from '../filepond';\nimport { showRecord } from '../utils';\n\n// Connects to data-controller=\"objednavkas-show\"\nexport default class extends FormChangesController {\n  initialize(): void {\n    Object.assign(this, { showRecord });\n  }\n\n  connect() {\n    super.connect();\n\n    initializeFilePond();\n  }\n\n  disconnect(): void {\n    destroyFilePond();\n  }\n\n  async deleteRecord(e: Event) {\n    try {\n      const target = <HTMLAnchorElement>(\n        (<HTMLElement>e.target).closest('.dropdown-item')\n      );\n      const { confirm: confirmMessage } = target.dataset;\n\n      if (!confirm(confirmMessage)) return;\n\n      const json = await deleteJSON(\n        `${(<HTMLFormElement>this.element.querySelector('form')).action}.json`\n      );\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n      if (turboStream) window.Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { parseNumber } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"odoslana-fakturas-assigned-advances\"\nexport default class extends Controller {\n  connect() {\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n  }\n\n  showUnassignedRecord(e) {\n    e.preventDefault();\n    const parent = e.target.closest('.unassigned');\n\n    this.openURL(\n      `${\n        parseInt(parent.dataset.okruhId) === 2\n          ? '/odoslana_zalohova_fakturas/'\n          : '/dosla_zalohova_fakturas/'\n      }${parent.dataset.id}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  showAssignedRecord(e) {\n    e.preventDefault();\n    const parent = e.target.closest('.tpd');\n\n    this.openURL(\n      `${\n        parseInt(parent.dataset.okruhId) === 2\n          ? '/odoslana_zalohova_fakturas/'\n          : '/dosla_zalohova_fakturas/'\n      }${parent.dataset.id}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  assign(e) {\n    let button = e.target.closest('.assign-advance');\n    let iSpinner = document.createElement('i');\n    iSpinner.classList.add('fas', 'fa-spinner', 'fa-spin');\n    button.innerHTML = '';\n    button.appendChild(iSpinner);\n\n    makeRequest(\n      `${window.location.pathname\n        .toString()\n        .replace(\n          `/assigned-advances/${window.location.href.split('/').pop()}`,\n          ''\n        )}/assign-advance/${window.location.href.split('/').pop()}/${\n        button.dataset.id\n      }`,\n      { method: 'POST' }\n    )\n      .then(response => {\n        if (response.status) {\n          location.reload();\n        } else {\n          showToastMessage(response.message, {\n            autohide: false,\n            type: 'bg-danger',\n          });\n        }\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  unassign(e) {\n    let button = e.target.closest('.unassign-advance');\n    let iSpinner = document.createElement('i');\n    iSpinner.classList.add('fas', 'fa-spinner', 'fa-spin');\n    button.innerHTML = '';\n    button.appendChild(iSpinner);\n\n    makeRequest(\n      `${window.location.pathname\n        .toString()\n        .replace(\n          `/assigned-advances/${window.location.href.split('/').pop()}`,\n          ''\n        )}/unassign-advance/${button.dataset.id}`,\n      { method: 'POST' }\n    )\n      .then(response => {\n        if (response.status) {\n          location.reload();\n        } else {\n          showToastMessage(response.message, {\n            autohide: false,\n            type: 'bg-danger',\n          });\n        }\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  setCost(e) {\n    const button = e.target.closest('.set-cost');\n    const costInput = button.closest('tr').querySelector('input');\n    const costVal = parseNumber(costInput.value);\n\n    console.log('costVal', costVal);\n\n    if (costVal === 0) {\n      costInput.classList.add('is-invalid');\n      return false;\n    }\n\n    const iSpinner = document.createElement('i');\n    iSpinner.classList.add('fas', 'fa-spinner', 'fa-spin');\n    button.innerHTML = '';\n    button.appendChild(iSpinner);\n\n    makeRequest(\n      `${window.location.pathname\n        .toString()\n        .replace(\n          `/assigned-advances/${window.location.href.split('/').pop()}`,\n          ''\n        )}/set-cost-of-assigned-advance/${button.dataset.id}`,\n      {\n        method: 'PATCH',\n        data: { suma_b_eur: costVal },\n      }\n    )\n      .then(response => {\n        location.reload();\n        if (response.status) {\n        } else {\n          showToastMessage(response.message, {\n            autohide: false,\n            type: 'bg-danger',\n          });\n        }\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  exlamate(e) {\n    const button = e.target.closest('.tpd').querySelector('.set-cost');\n    if (!button.innerHTML.includes('fa-exclamation-circle')) {\n      button.innerHTML =\n        '<i class=\"fas fa-exclamation-circle text-danger\"></i> ' +\n        button.innerHTML;\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { parseNumber } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"odoslana-fakturas-assigned-invoices\"\nexport default class extends Controller {\n  connect() {\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n  }\n\n  assign(e) {\n    let button = e.target.closest('.assign-invoice');\n    let iSpinner = document.createElement('i');\n    iSpinner.classList.add('fas', 'fa-spinner', 'fa-spin');\n    button.innerHTML = '';\n    button.appendChild(iSpinner);\n\n    makeRequest(\n      `/odoslana-fakturas/assign-invoice/${window.location.href\n        .split('/')\n        .pop()}/${button.dataset.id}`,\n      { method: 'POST' }\n    )\n      .then(response => {\n        if (response.status) {\n          location.reload();\n        } else {\n          showToastMessage(response.message, {\n            autohide: false,\n            type: 'bg-danger',\n          });\n        }\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  unassign(e) {\n    let button = e.target.closest('.unassign-invoice');\n    let iSpinner = document.createElement('i');\n    iSpinner.classList.add('fas', 'fa-spinner', 'fa-spin');\n    button.innerHTML = '';\n    button.appendChild(iSpinner);\n\n    makeRequest(`/odoslana-fakturas/unassign-invoice/${button.dataset.id}`, {\n      method: 'POST',\n    })\n      .then(response => {\n        if (response.status) {\n          location.reload();\n        } else {\n          showToastMessage(response.message, {\n            autohide: false,\n            type: 'bg-danger',\n          });\n        }\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  setCost(e) {\n    const button = e.target.closest('.set-cost');\n    const costInput = button.closest('tr').querySelector('input');\n    const costVal = parseNumber(costInput.value);\n\n    if (costVal === 0) return costInput.classList.add('is-invalid');\n\n    let iSpinner = document.createElement('i');\n    iSpinner.classList.add('fas', 'fa-spinner', 'fa-spin');\n    button.innerHTML = '';\n    button.appendChild(iSpinner);\n\n    makeRequest(\n      `/odoslana-fakturas/set-cost-of-assigned-invoice/${button.dataset.id}`,\n      {\n        method: 'PATCH',\n        data: { suma_b: costVal },\n      }\n    )\n      .then(response => {\n        location.reload();\n\n        if (response.status) {\n        } else {\n          showToastMessage(response.message, {\n            autohide: false,\n            type: 'bg-danger',\n          });\n        }\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  showAssignedRecord(e) {\n    e.preventDefault();\n\n    this.openURL(`/odoslana_fakturas/${e.target.closest('.tpd').dataset.id}`, {\n      parentUrl: new URL(location),\n    });\n  }\n\n  showUnassignedRecord(e) {\n    e.preventDefault();\n\n    this.openURL(\n      `/odoslana_fakturas/${e.target.closest('.unassigned').dataset.id}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  exclamate(e) {\n    let button = e.target.closest('.tpd').querySelector('.set-cost');\n    if (!button.innerHTML.includes('fa-exclamation-circle')) {\n      button.innerHTML =\n        '<i class=\"fas fa-exclamation-circle text-danger\"></i> ' +\n        button.innerHTML;\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport {\n  round,\n  parseNumber,\n  formatNumber,\n  changeItemSzcp,\n  postJSON,\n  popupHelpers,\n  whenControllerReady,\n  onPartnerChange,\n  onDodavatelChange\n} from '../utils';\nimport { openURL } from '../window_manager';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"odoslana-fakturas\"\nexport default class extends Controller {\n  static targets = [\n    'formEl',\n    'varSymbolEl',\n    'datumDodaniaEl',\n    'datumSplatnostiEl',\n    'pocetDniSplatnostiEl',\n    'cisMenaEl',\n    'kurzEl'\n  ];\n\n  initialize() {\n    Object.assign(this, popupHelpers, {\n      onPartnerChange,\n      onDodavatelChange\n    });\n\n    dayjs.extend(customParseFormat);\n  }\n\n  connect() {\n    import('../delete').then(module => {\n      this.deleteResource = module.deleteResource.bind(this);\n    });\n\n    import('../add').then(module => {\n      this.addFields = module.addFields.bind(this);\n    });\n\n    import('../show_submit_buttons').then(module => {\n      this.showSubmitButton = module.showSubmitButton.bind(this);\n    });\n\n    import('../update_pozicia').then(module => {\n      this.updatePozicia = module.updatePozicia.bind(this);\n\n      this.sortableCallbackInvoicedItem = e => {\n        this.updatePozicia('.invoiced-item');\n        this.showSubmitButton(e.detail.origin.container);\n      };\n\n      import('html5sortable/dist/html5sortable.es').then(module => {\n        this.sortable = module;\n        this.sortable.default(\n          this.element.querySelectorAll('#of_fakt_polozkies'),\n          {\n            items: this.element.querySelectorAll(\n              '.invoiced-item:not(.last-row-with-button)'\n            ),\n            handle: '.move'\n          }\n        );\n        this.sortable\n          .default(this.element.querySelectorAll('#of_fakt_polozkies'))[0]\n          .addEventListener('sortstop', this.sortableCallbackInvoicedItem); // update position when sort order changes\n      });\n\n      this.sortableCallbackBankAccount = e => {\n        this.updatePozicia('.b-account');\n        this.showSubmitButton(e.detail.origin.container);\n      };\n\n      import('html5sortable/dist/html5sortable.es').then(module => {\n        this.sortable = module;\n        this.sortable.default(\n          this.element.querySelectorAll('#of_bank_ucties'),\n          {\n            items: this.element.querySelectorAll(\n              '.b-account:not(.last-row-with-button)'\n            ),\n            handle: '.move'\n          }\n        );\n        this.sortable\n          .default(this.element.querySelectorAll('#of_bank_ucties'))[0]\n          .addEventListener('sortstop', this.sortableCallbackBankAccount); // update position when sort order changes\n      });\n    });\n\n    const firstItem = document.querySelector(\n      '#of_fakt_polozkies .invoiced-item'\n    );\n    const cenaBezDph = firstItem?.querySelector('[name$=\"[cena_bez_dph]\"]');\n\n    cenaBezDph &&\n      this.element.querySelector('form#new_odoslana_faktura') &&\n      this.onCenaBezDphChange({ target: cenaBezDph });\n  }\n\n  disconnect() {\n    this.sortable\n      .default(this.element.querySelectorAll('#of_fakt_polozkies'))[0]\n      .removeEventListener(\n        'sortstop',\n        this.sortableCallbackInvoicedItem,\n        false\n      );\n    this.sortable.default(\n      this.element.querySelectorAll('#of_fakt_polozkies'),\n      'destroy'\n    );\n    this.sortable\n      .default(this.element.querySelectorAll('#of_bank_ucties'))[0]\n      .removeEventListener(\n        'sortstop',\n        this.sortableCallbackInvoicedItem,\n        false\n      );\n    this.sortable.default(\n      this.element.querySelectorAll('#of_bank_ucties'),\n      'destroy'\n    );\n  }\n\n  onDeleteResourceButton(e) {\n    this.deleteResource(\n      e.target.closest('.delete-resource'),\n      (parent_name, parent) => {\n        switch (parent_name) {\n          case 'invoiced-item':\n            this.sumarizeOfFaktPolozkies(\n              parent.querySelector('input[id*=\"_cena_bez_dph\"]')\n            );\n\n            this.updatePozicia('.invoiced-item');\n            break;\n          case 'b-account':\n            this.updatePozicia('.b-account');\n            break;\n          case 'payment':\n            this.element['odoslana-fakturas-show'].updateZadanaUhradaLabels();\n            break;\n          default:\n            parent\n              .querySelector('input[type=\"text\"]:not(.vanillajs-datepicker)')\n              .dispatchEvent(new Event('keyup'));\n        }\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onAddFieldButton(e) {\n    this.addFields(\n      e.target.closest('.add-fields'),\n      (copiedDiv, lastElBeforeInsert) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n          copiedDiv\n            .querySelectorAll('input.vanillajs-datepicker')\n            .forEach(input => {\n              initializeVanillajsDatepicker(input);\n            });\n\n          if (copiedDiv.classList.contains('invoiced-item')) {\n            this.updatePozicia('.invoiced-item');\n            this.sortable.default(\n              this.element.querySelectorAll('#of_fakt_polozkies')\n            );\n\n            [\n              'stredisko_id',\n              'zakazka_id',\n              'cinnost_id',\n              'pracovnik_id'\n            ].forEach(szcp => {\n              const select = copiedDiv.querySelector(\n                `select[name$=\"[${szcp}]\"]`\n              );\n\n              if (!select?.tomselect) return;\n\n              select.tomselect.setValue(\n                this.element.querySelector(`#odoslana_faktura_${szcp}`).value,\n                true\n              );\n            });\n\n            whenControllerReady(\n              'of-fakt-polozkies',\n              'setCenaBezDPh',\n              [],\n              copiedDiv\n            );\n          }\n\n          if (copiedDiv.classList.contains('b-account')) {\n            this.updatePozicia('.b-account');\n            this.sortable.default(\n              this.element.querySelectorAll('#of_bank_ucties')\n            );\n          }\n\n          copiedDiv = copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  async getSampleNumbering(e) {\n    try {\n      const url = new URL('/ciselny_rads/get-sample-numbering', location);\n\n      url.searchParams.set(\n        'ciselny_rad_id',\n        this.element.querySelector('#odoslana_faktura_ciselny_rad_id').value\n      );\n      url.searchParams.set('datum', this.datumDodaniaElTarget.value);\n\n      const json = await postJSON(url, {}, 'PATCH');\n\n      this.element.querySelector('#odoslana_faktura_cislo_faktury').value =\n        json.level1;\n      this.element.querySelector('#odoslana_faktura_old_cislo_faktury').value =\n        json.level1;\n      this.element.querySelector('#label-invoice-number span').innerHTML =\n        json.level3;\n\n      const { message } = this.varSymbolElTarget.dataset;\n\n      if (\n        this.element.querySelector('form#new_odoslana_faktura') ||\n        confirm(message)\n      ) {\n        const nums = json.level1.match(/\\d+/g)?.join('');\n\n        this.varSymbolElTarget.value = nums;\n        this.element.querySelector('.label-var-symbol').innerHTML = nums;\n      }\n\n      this.showSubmitButton(e.target.closest('#get-sample-numbering'));\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showPartner(e) {\n    let url;\n    let partnerId = document.querySelector(\n      '#odoslana_faktura_partner_id'\n    ).value;\n\n    if (partnerId) {\n      url = `/partners/${partnerId}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  showDodavatel(e) {\n    openURL(\n      `/dodavatels/${\n        this.element.querySelector('#odoslana_faktura_dodavatel_id').value ||\n        'new'\n      }`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  showUctovneZaradenie(e) {\n    openURL('/uctovne-zaradenies/1', { parentUrl: new URL(location) });\n  }\n\n  showEvid(e) {\n    openURL('/evids/1', { parentUrl: new URL(location) });\n  }\n\n  showCiselnyRad(e) {\n    let id = document.querySelector('#odoslana_faktura_ciselny_rad_id').value;\n\n    if (id) {\n      openURL(`/ciselny_rads/${id}`, { parentUrl: new URL(location) });\n    } else {\n      openURL(\n        `/ciselny_rads/new/${\n          document.querySelector('#odoslana_faktura_evidencia_id').value\n        }`,\n        { parentUrl: new URL(location) }\n      );\n    }\n  }\n\n  loadDataForPd(e) {\n    makeRequest('/pokladnas-get-all')\n      .then(response => {\n        let select = document.querySelector(\n          '.offcanvas#create_pd select#data_pokladna_id'\n        );\n        select.tomselect.setValue(null, true);\n        select.tomselect.clearOptions();\n\n        response.data.forEach(pokladna => {\n          select.tomselect.addOption({\n            value: pokladna.id,\n            text: pokladna.kod\n          });\n        });\n\n        if (response.last_used) {\n          select.tomselect.setValue(response.last_used, true);\n        } else {\n          select.tomselect.setValue(response.data[0].id, true);\n        }\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  onDatumVystaveniaChange(e) {\n    this.#setDatumDodania(e.target);\n  }\n\n  onDatumSplatnostiDodaniaChange(e) {\n    const dajsObj = dayjs(e.target.value, 'DD.MM.YYYY', true);\n\n    if (dajsObj.isValid()) {\n      document.querySelector('[type=\"submit\"]').removeAttribute('disabled');\n      e.target.classList.remove('is-invalid');\n      e.target.classList.add('is-valid');\n    } else {\n      e.target.classList.remove('is-valid');\n      e.target.classList.add('is-invalid');\n      setTimeout(() => {\n        document\n          .querySelector('[type=\"submit\"]')\n          .setAttribute('disabled', 'disabled');\n      }, 500);\n    }\n\n    if (e.target.id === 'odoslana_faktura_datum_splatnosti') {\n      this.element.querySelector('#pocet_dni_splatnosti').value = dayjs(\n        e.target.value,\n        'DD.MM.YYYY',\n        true\n      ).diff(\n        dayjs(\n          document.querySelector('#odoslana_faktura_datum_vystavenia').value,\n          'DD.MM.YYYY',\n          true\n        ),\n        'day'\n      );\n\n      return;\n    }\n\n    if (this.element.querySelector('form#new_odoslana_faktura')) {\n      this.getSampleNumbering({\n        target: this.element.querySelector('#get-sample-numbering')\n      });\n    }\n\n    this.#updateCurrencyRate();\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  async onCrChange(e) {\n    this.getSampleNumbering({\n      target: this.element.querySelector('#get-sample-numbering')\n    });\n\n    this.updateLabelInvoiceNumber();\n  }\n\n  onCisMenaChange(e) {\n    const oldCurrency = document.querySelector('.label-cis-mena').innerHTML;\n    const newCurrency =\n      e.target.tomselect.options[e.target.tomselect.getValue()].$option\n        .innerHTML;\n\n    document.querySelectorAll('.label-cis-mena').forEach(element => {\n      element.innerHTML = newCurrency;\n    });\n\n    document.querySelector('#of_fakt_polozkies .add-fields').dataset.fields =\n      document\n        .querySelector('#of_fakt_polozkies .add-fields')\n        .dataset.fields.replace(oldCurrency, newCurrency);\n\n    this.#updateCurrencyRate();\n  }\n\n  onCenaBezDphChange(e) {\n    this.sumarizeOfFaktPolozkies(e.target);\n  }\n\n  onCisloFakturyKeyup(e) {\n    this.updateLabelInvoiceNumber();\n\n    const digits = e.target.value.match(/\\d+/g);\n    const varSymbolVal = digits ? digits.join('').substring(0, 10) : '';\n\n    this.element.querySelector('#odoslana_faktura_var_symbol').value =\n      varSymbolVal;\n    this.element.querySelector('.label-var-symbol').innerHTML = varSymbolVal;\n  }\n\n  onZlavaPercKeyup() {\n    this.fakturovanePolozkyBezDph();\n    this.fakturovanePolozkySDph();\n  }\n\n  setDatumSplatnosti(e) {\n    const dajsObj = dayjs(\n      this.element.querySelector('input#odoslana_faktura_datum_vystavenia')\n        .value,\n      'DD.MM.YYYY',\n      true\n    );\n    const datumSplatnosti = this.element.querySelector(\n      'input#odoslana_faktura_datum_splatnosti'\n    );\n    if (datumSplatnosti && datumSplatnosti.datepicker) {\n      datumSplatnosti.datepicker.setDate(\n        dajsObj.add(parseInt(e.target.value), 'days').$d\n      );\n    }\n  }\n\n  showCalc(e) {\n    const parent = e.target.closest('.invoiced-item');\n    const modalDom = document.querySelector('#calc');\n    const modal = new bootstrap.Modal(modalDom);\n\n    modalDom.querySelector('#calc-cena-bez-dph').value = formatNumber(\n      parent.querySelector('[id*=\"_cena_bez_dph\"]').value\n    );\n    modalDom.querySelector('#calc-cena-bez-dph').dataset.target =\n      parent.querySelector('[id*=\"_cena_bez_dph\"]').id;\n    modalDom.querySelector('#calc-dph-perc').value = formatNumber(\n      parent.querySelector('[id*=\"_dph_perc\"]').value,\n      0\n    );\n    modalDom.querySelector('#calc-dph-perc').dataset.target =\n      parent.querySelector('[id*=\"_dph_perc\"]').id;\n\n    const event = new Event('keyup');\n    Object.defineProperty(event, 'target', {\n      writable: false,\n      value: modalDom.querySelector('#calc-cena-bez-dph')\n    });\n    this.calcRefresh(event); // fire event to fill in rest of inputs\n\n    modal.show();\n  }\n\n  calcRefresh(e) {\n    const calcModal = e.target.closest('#calc.modal');\n    const cenaSDphEl = calcModal.querySelector('#calc-cena-s-dph');\n    const dphPercVal = parseNumber(\n      calcModal.querySelector('#calc-dph-perc').value\n    );\n    const dphEl = calcModal.querySelector('#calc-dph');\n\n    if (e.target.id === 'calc-cena-bez-dph') {\n      cenaSDphEl.value = formatNumber(\n        parseNumber(e.target.value) +\n          (parseNumber(e.target.value) * dphPercVal) / 100.0\n      );\n      dphEl.value = formatNumber(\n        parseNumber(e.target.value) * (dphPercVal / 100.0)\n      );\n\n      this.element.querySelector(`#${e.target.dataset.target}`).value =\n        formatNumber(\n          e.target.value,\n          e.target.dataset.target.endsWith('_dph_perc') ? 0 : 2\n        );\n      this.fakturovanePolozkyBezDph();\n      this.fakturovanePolozkySDph();\n    } else if (\n      e.target.id === 'calc-dph-perc' ||\n      e.target.id === 'calc-cena-s-dph'\n    ) {\n      const cenaBezDphEl = calcModal.querySelector('#calc-cena-bez-dph');\n\n      cenaBezDphEl.value = formatNumber(\n        parseNumber(cenaSDphEl.value) / (1 + dphPercVal / 100.0)\n      );\n      dphEl.value = formatNumber(\n        parseNumber(cenaBezDphEl.value) * (dphPercVal / 100.0)\n      );\n\n      this.element.querySelector(`#${cenaBezDphEl.dataset.target}`).value =\n        formatNumber(\n          cenaBezDphEl.value,\n          cenaBezDphEl.dataset.target.endsWith('_dph_perc') ? 0 : 2\n        );\n      if (e.target.dataset.target) {\n        this.element.querySelector(`#${e.target.dataset.target}`).value =\n          formatNumber(\n            e.target.value,\n            e.target.dataset.target.endsWith('_dph_perc') ? 0 : 2\n          );\n      }\n\n      this.fakturovanePolozkyBezDph();\n      this.fakturovanePolozkySDph();\n    }\n\n    this.showSubmitButton(e.target);\n  }\n\n  updateLabelInvoiceNumber() {\n    const numberEl = this.element.querySelector('#label-invoice-number span');\n\n    if (!numberEl) return;\n\n    const evidEl = this.element.querySelector('#odoslana_faktura_evidencia_id');\n    const cisRadEl = this.element.querySelector(\n      '#odoslana_faktura_ciselny_rad_id'\n    );\n\n    [evidEl, cisRadEl].forEach(element => {\n      if (element.tomselect.getValue()) {\n        numberEl.classList.remove('text-danger');\n        numberEl.classList.add('text-primary');\n      } else {\n        numberEl.classList.remove('text-primary');\n        numberEl.classList.add('text-danger');\n      }\n    });\n\n    const { kod: evidKod } = evidEl.options[evidEl.selectedIndex].dataset;\n    const { kod: crKod } = cisRadEl.options[cisRadEl.selectedIndex].dataset;\n    const number = this.element.querySelector(\n      '#odoslana_faktura_cislo_faktury'\n    ).value;\n\n    numberEl.innerHTML = [evidKod, crKod, number].join('-');\n  }\n\n  fakturovanePolozkyBezDph() {\n    let cena_dokopy = 0;\n\n    document\n      .querySelectorAll('#of_fakt_polozkies .invoiced-item')\n      .forEach(item => {\n        if (item.querySelector('[id*=\"_destroy\"]').value === 'true') return;\n\n        cena_dokopy += parseNumber(\n          item.querySelector(\"[id*='_cena_bez_dph']\").value\n        );\n      });\n\n    document.querySelector('#label-invoiced-items-without-vat').textContent =\n      formatNumber(cena_dokopy);\n\n    this.fakturovaneBezDPH();\n  }\n\n  fakturovaneBezDPH() {\n    const zlavaPercVal = parseNumber(\n      document.querySelector('input[id*=\"odoslana_faktura_zlava_perc\"]').value\n    );\n    const cenySuSDphBool =\n      document.querySelector('select#odoslana_faktura_ceny_su_s_dph').value ===\n      'true';\n    const cenaDokopyVal = parseNumber(\n      document.querySelector('#label-invoiced-items-without-vat').textContent\n    );\n\n    let cenaDokopySCiastocnymiVal =\n      cenaDokopyVal - Math.round(cenaDokopyVal * zlavaPercVal) / 100;\n    let sumaPoloziekVal = 0;\n    let sumaZalohVal = 0;\n    let sadzby = {};\n    let sadzbyZalohy = {};\n\n    document\n      .querySelectorAll('#fakt_sklad_polozkies .stock-item')\n      .forEach(polozka => {\n        if (polozka.querySelector('[id*=\"_destroy\"]').value === 'true') return;\n\n        const dphPercVal = polozka.querySelector('[id*=\"_dph_perc\"]').value;\n        const cenaSpoluVal = parseNumber(\n          polozka.querySelector('[id*=\"_cena_spolu\"]').value\n        );\n        const zlava = parseNumber(\n          polozka.querySelector('[id*=\"_zlava\"]').value\n        );\n\n        if (!(dphPercVal in sadzby)) {\n          sadzby[dphPercVal] = 0;\n        }\n\n        if (polozka.dataset.zaloha === true) {\n          sadzbyZalohy[dphPercVal] +=\n            cenaSpoluVal - Math.round(cenaSpoluVal * zlava) / 100;\n\n          return;\n        }\n\n        sadzby[dphPercVal] +=\n          cenaSpoluVal - Math.round(cenaSpoluVal * zlava) / 100;\n      });\n\n    Object.keys(sadzby).forEach(dphPerc => {\n      const sumaPoCelkovejZlaveVal =\n        sadzby[dphPerc] - Math.round(sadzby[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaPoloziekVal += round(\n          (sumaPoCelkovejZlaveVal / (parseNumber(dphPerc) + 100.0)) * 100\n        );\n\n        return;\n      }\n\n      sumaPoloziekVal += round(sumaPoCelkovejZlaveVal);\n    });\n\n    Object.keys(sadzbyZalohy).forEach(dphPerc => {\n      const sumaPoCelkovejZlaveVal =\n        sadzbyZalohy[dphPerc] -\n        Math.round(sadzbyZalohy[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaZalohVal = round(\n          (sumaPoCelkovejZlaveVal / (parseNumber(dphPerc) + 100)) * 100\n        );\n\n        return;\n      }\n\n      sumaZalohVal = round(sumaPoCelkovejZlaveVal);\n    });\n\n    cenaDokopySCiastocnymiVal += sumaPoloziekVal;\n    cenaDokopySCiastocnymiVal += sumaZalohVal;\n\n    // partial invoices\n    cenaDokopySCiastocnymiVal -= parseNumber(\n      document.querySelector('#label-partial-without-vat')?.textContent || '0'\n    );\n\n    document.querySelector('#label-without-vat').textContent = formatNumber(\n      cenaDokopySCiastocnymiVal\n    );\n  }\n\n  fakturovanePolozkySDph() {\n    let cenaSDphVal = 0;\n    let pocty = {};\n\n    document\n      .querySelectorAll('#of_fakt_polozkies .invoiced-item')\n      .forEach(item => {\n        if (item.querySelector('[id*=\"_destroy\"]').value === 'true') return;\n\n        const index = item.querySelector(\"[id*='_dph_perc']\").value\n          ? parseNumber(item.querySelector(\"[id*='_dph_perc']\").value)\n          : 'bez_dph';\n\n        pocty[index] =\n          (pocty[index] || 0) +\n          parseNumber(item.querySelector(\"[id*='_cena_bez_dph']\").value);\n      });\n\n    Object.keys(pocty).forEach(key => {\n      if (key === 'bez_dph') {\n        cenaSDphVal += pocty[key];\n\n        return;\n      }\n\n      cenaSDphVal += pocty[key] * (key / 100 + 1);\n    });\n\n    /*\n     * Format ukladania dat\n     * { \"21\" => \"360\", \"bez_dph\" => \"153.95256\", \"0\" => \"1654\" }\n     */\n    document.querySelector('#label-invoiced-items-with-vat').textContent =\n      formatNumber(cenaSDphVal);\n\n    this.fakturovaneSDPH();\n  }\n\n  fakturovaneSDPH() {\n    const zlavaPercVal = parseNumber(\n      document.querySelector('input[id=\"odoslana_faktura_zlava_perc\"]').value\n    );\n    const cenySuSDphBool =\n      document.querySelector('select#odoslana_faktura_ceny_su_s_dph').value ===\n      'true';\n    const cenaDokopyVal = parseNumber(\n      document.querySelector('#label-invoiced-items-with-vat').textContent\n    );\n    let cenaDokopySCiastocnymiVal =\n      cenaDokopyVal - round(cenaDokopyVal * (zlavaPercVal / 100));\n    let sumaPoloziekVal = 0;\n    let sumaZalohVal = 0;\n    let sadzby = {};\n    let sadzbyZalohy = {};\n\n    document\n      .querySelectorAll('#fakt_sklad_polozkies .stock-item')\n      .forEach(item => {\n        if (item.querySelector('[id*=\"_destroy\"]').value === 'true') return;\n\n        const dphPercVal = item.querySelector('[id*=\"_dph_perc\"]').value;\n        const cenaSpoluVal = parseNumber(\n          item.querySelector('[id*=\"_cena_spolu\"]').value\n        );\n        const zlava = parseNumber(item.querySelector('[id*=\"_zlava\"]').value);\n\n        if (!(dphPercVal in sadzby)) {\n          sadzby[dphPercVal] = 0;\n        }\n\n        if (item.dataset.zaloha) {\n          sadzbyZalohy[dphPercVal] +=\n            cenaSpoluVal - Math.round(cenaSpoluVal * zlava) / 100;\n\n          return;\n        }\n\n        sadzby[dphPercVal] +=\n          cenaSpoluVal - Math.round(cenaSpoluVal * zlava) / 100;\n      });\n\n    Object.keys(sadzby).forEach(dphPerc => {\n      let sumaPoCelkovejZlaveVal =\n        sadzby[dphPerc] - Math.round(sadzby[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaPoloziekVal += round(sumaPoCelkovejZlaveVal);\n\n        return;\n      }\n\n      sumaPoloziekVal +=\n        sumaPoCelkovejZlaveVal +\n        round(sumaPoCelkovejZlaveVal * (parseNumber(dphPerc) / 100));\n    });\n\n    Object.keys(sadzbyZalohy).forEach(dphPerc => {\n      let sumaPoCelkovejZlaveVal =\n        sadzbyZalohy[dphPerc] -\n        Math.round(sadzbyZalohy[dphPerc] * zlavaPercVal) / 100;\n\n      if (cenySuSDphBool) {\n        sumaZalohVal = round(sumaPoCelkovejZlaveVal);\n\n        return;\n      }\n\n      sumaZalohVal =\n        sumaPoCelkovejZlaveVal +\n        round(sumaPoCelkovejZlaveVal * (parseNumber(dphPerc) / 100));\n    });\n\n    cenaDokopySCiastocnymiVal += sumaPoloziekVal;\n    cenaDokopySCiastocnymiVal += sumaZalohVal;\n\n    // partial invoices\n    cenaDokopySCiastocnymiVal -= parseNumber(\n      document.querySelector('#label-partial-with-vat')?.textContent\n    );\n\n    document.querySelector('#label-with-vat').textContent = formatNumber(\n      cenaDokopySCiastocnymiVal\n    );\n  }\n\n  sumarizeOfFaktPolozkies(target) {\n    checkValue(target);\n\n    const parentEl = target.closest('.invoiced-item');\n    const mnozstvoPocetInp = parentEl.querySelector(\n      \"input[id*='_mnozstvo_pocet']\"\n    );\n    const cenaJednotkovaInp = parentEl.querySelector(\n      \"input[id*='_cena_jednotkova']\"\n    );\n    const cenaBezDphInp = parentEl.querySelector(\"input[id*='_cena_bez_dph']\");\n\n    mnozstvoPocetInp.classList.remove('is-invalid');\n    cenaJednotkovaInp.classList.remove('is-invalid');\n    cenaBezDphInp.classList.remove('is-invalid');\n\n    if (\n      mnozstvoPocetInp.value &&\n      cenaJednotkovaInp.value &&\n      parseNumber(cenaBezDphInp.value) !==\n        round(\n          parseNumber(mnozstvoPocetInp.value) *\n            parseNumber(cenaJednotkovaInp.value)\n        )\n    ) {\n      mnozstvoPocetInp.classList.add('is-invalid');\n      cenaJednotkovaInp.classList.add('is-invalid');\n      cenaBezDphInp.classList.add('is-invalid');\n\n      return;\n    }\n\n    this.fakturovanePolozkyBezDph();\n    this.fakturovanePolozkySDph();\n  }\n\n  onSzcpChange(e) {\n    changeItemSzcp(\n      e.target,\n      '.invoiced-item, .stock-item',\n      e.target.id.replace('odoslana_faktura', '')\n    );\n  }\n\n  #setDatumDodania(target) {\n    const dajsObj = dayjs(target.value, 'DD.MM.YYYY', true);\n    const { datumDodaniaTyp, datumDodaniaHodnota } = target.dataset;\n\n    if (dajsObj.isValid()) {\n      if (\n        this.datumSplatnostiElTarget &&\n        this.datumSplatnostiElTarget.datepicker\n      ) {\n        this.datumSplatnostiElTarget.datepicker.setDate(\n          dajsObj.add(parseInt(this.pocetDniSplatnostiElTarget.value), 'days')\n            .$d\n        );\n      }\n\n      [target, this.datumDodaniaElTarget, this.datumSplatnostiElTarget].forEach(\n        element => {\n          element.classList.remove('is-invalid');\n          element.classList.add('is-valid');\n        }\n      );\n\n      document.querySelector('[type=\"submit\"]').removeAttribute('disabled');\n\n      if (this.datumDodaniaElTarget && this.datumDodaniaElTarget.datepicker) {\n        if (+datumDodaniaTyp === 0) {\n          this.datumDodaniaElTarget.datepicker.setDate(\n            dajsObj.subtract(1, 'month').endOf('month').$d\n          );\n        } else {\n          this.datumDodaniaElTarget.datepicker.setDate(\n            dajsObj.subtract(+datumDodaniaHodnota, 'days').$d\n          );\n        }\n      }\n\n      this.#updateCurrencyRate();\n    } else {\n      target.classList.remove('is-valid');\n      target.classList.add('is-invalid');\n\n      setTimeout(() => {\n        document\n          .querySelector('[type=\"submit\"]')\n          .setAttribute('disabled', 'disabled');\n      }, 500);\n    }\n  }\n\n  #updateCurrencyRate() {\n    if (!dayjs(this.datumDodaniaElTarget.value, 'DD.MM.YYYY', true).isValid()) {\n      return;\n    }\n\n    makeRequest(\n      `/currency-rates/get-by-date?date=${this.datumDodaniaElTarget.value}&cis_mena_id=${this.cisMenaElTarget.value}`\n    )\n      .then(rate => {\n        this.kurzElTarget.value = formatNumber(rate, 4);\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n}\n\nfunction checkValue(target) {\n  if (isNaN(target.value)) {\n    target.classList.add('is-invalid');\n    return 0;\n  } else {\n    target.classList.remove('is-invalid');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { appendCanvas, showFilter } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"odoslana-fakturas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  initialize() {\n    Object.assign(this, { showFilter });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  setMarkedCount() {\n    makeRequest('/odoslana-fakturas/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteMarked() {\n    makeRequest('/odoslana-fakturas/delete-marked')\n      .then(response => {\n        window.Turbo.renderStreamMessage(response.turbo_stream);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteManualPayments() {\n    makeRequest('/odoslana-fakturas/delete-manual-payments/1.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  charge() {\n    makeRequest('/odoslana-fakturas/charge-records/1.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  print(e) {\n    openURL(`/of-prints.pdf`, { tab: true });\n  }\n\n  openNew(e) {\n    openURL('/odoslana_fakturas/new');\n  }\n\n  send(e) {\n    if (confirm(e.target.closest('#send').dataset.message)) {\n      makeRequest('of_emails/send', {\n        method: 'POST',\n      })\n        .then(response => {\n          if (!response.status) {\n            if (e.submitter) {\n              e.submitter.classList.remove('disabled');\n            }\n\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(e =>\n          showToastMessage(e, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  printList(e) {\n    openURL(\n      `/of-prints/preview-list/${\n        e.target.closest('.dropdown-item').dataset.groupsOnly\n      }.pdf`,\n      { tab: true }\n    );\n  }\n\n  showOfDavkas() {\n    openURL('/of_davkas');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"odoslana-fakturas-new\"\nexport default class extends Controller {\n  static targets = ['dodavatelEl', 'partnerEl'];\n\n  declare readonly dodavatelElTarget: HTMLSelectElement;\n  declare readonly partnerElTarget: HTMLSelectElement;\n\n  connect() {\n    const firstItem = this.element.querySelector(\n      '#of_fakt_polozkies .invoiced-item'\n    );\n\n    if (!firstItem) return;\n\n    firstItem\n      .querySelector('[id*=\"_cena_bez_dph\"]')\n      ?.dispatchEvent(new Event('keyup', { bubbles: true }));\n  }\n\n  onPartnerChange(e: Event) {\n    window.onbeforeunload = null;\n\n    if ((<HTMLSelectElement>e.target).closest('.bg-copy')) return;\n\n    const url = new URL(location.toString());\n\n    if (!this.dodavatelElTarget.value || !this.partnerElTarget.value) return;\n\n    openURL(\n      `/odoslana_fakturas/new/${this.partnerElTarget.value}/${this.dodavatelElTarget.value}${url.search}`,\n      {\n        target: '_self'\n      }\n    );\n  }\n\n  onDodavatelChange(e: Event) {\n    this.onPartnerChange(e);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\nimport { parseNumber, formatNumber, showRecord } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\n\n// Connects to data-controller=\"odoslana-fakturas-show\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, { showRecord });\n  }\n\n  connect() {\n    this.element[this.identifier] = this; // to be able to call this.element[\"odoslana-fakturas-show\"] in odoslana_fakturas_controller.js\n\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n    import('../show_submit_buttons').then(show_submit_buttons => {\n      this.boundRegisterKeyupToShowSubmitButton =\n        show_submit_buttons.registerKeyupToShowSubmitButton.bind(this);\n      this.boundRegisterChangeToShowSubmitButton =\n        show_submit_buttons.registerChangeToShowSubmitButton.bind(this);\n\n      this.element.addEventListener(\n        'change',\n        this.boundRegisterChangeToShowSubmitButton\n      );\n      this.element.addEventListener(\n        'keyup',\n        this.boundRegisterKeyupToShowSubmitButton\n      );\n    });\n\n    initializeFilePond();\n  }\n\n  disconnect() {\n    destroyFilePond();\n\n    document.removeEventListener(\n      'keyup',\n      this.boundRegisterKeyupToShowSubmitButton\n    );\n    document.removeEventListener(\n      'change',\n      this.boundRegisterChangeToShowSubmitButton\n    );\n  }\n\n  findUd(e) {\n    e.preventDefault();\n\n    // prioritize VAT, if none, take non-VAT amount\n    const spanEl = [\n      this.element.querySelector('#label-with-vat'),\n      this.element.querySelector('#label-without-vat'),\n    ].filter(el => !el?.hasAttribute('hidden'))[0];\n\n    const suma = spanEl?.innerHTML;\n\n    if (suma)\n      window.open(\n        `/uctovny_doklads?suma_do=${parseNumber(suma)}&suma_od=${parseNumber(\n          suma\n        )}`,\n        '_blank'\n      );\n  }\n\n  delete(e) {\n    if (confirm(e.target.dataset.confirm)) {\n      makeRequest(document.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          if (response.status && response.status === true) {\n            window.close();\n          } else {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  print() {\n    this.openURL(\n      `/of-prints/${this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}.pdf`,\n      { fullscreen: true }\n    );\n  }\n\n  assignInvoices() {\n    this.openURL(\n      `/odoslana-fakturas/assigned-invoices/${this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  assignAdvances() {\n    this.openURL(\n      `/odoslana-fakturas/assigned-advances/${this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  payFully(e) {\n    e.target.setAttribute('disabled', 'disabled');\n\n    const parentEl = document.querySelector('#zadana-uhradas');\n    parentEl.querySelector('.add-fields').click();\n    const payment = [...parentEl.querySelectorAll('.payment')].pop();\n    const sumaInp = payment.querySelector('[name$=\"[suma]\"]');\n    sumaInp.value = formatNumber(\n      parseNumber(document.querySelector('#label-with-vat').innerHTML) -\n        parseNumber(document.querySelector('#label-payments').innerHTML)\n    );\n\n    payment.querySelector('[name$=\"[datum]\"]').value =\n      dayjs().format('DD.MM.YYYY');\n    payment.querySelector('[name$=\"[poznamka]\"]').value =\n      'Vlo\u017Een\u00E9 kliknut\u00EDm na uhraden\u00E9';\n\n    this.updateZadanaUhradaLabels();\n  }\n\n  openNextTo(e) {\n    e.preventDefault();\n    this.openURL(e.target.closest('a.open-next-to').href, {\n      parentUrl: new URL(location),\n    });\n  }\n\n  sendEmail(e) {\n    this.openURL(\n      `/of_emails/${document\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  updateZadanaUhradaLabels() {\n    const sum = Array.from(\n      document.querySelectorAll(\n        '#zadana-uhradas .payment:not([style=\"display: none;\"]) input[id*=\"_suma\"]'\n      )\n    ).reduce((acc, amount) => acc + parseNumber(amount.value), 0);\n\n    const payment =\n      sum +\n      parseNumber(\n        document.querySelector('#label-paying-the-invoice').innerHTML\n      );\n\n    document.querySelector('#label-manual-payments').textContent =\n      formatNumber(sum);\n\n    document.querySelector('#label-payments').textContent =\n      formatNumber(payment);\n\n    if (!payment) {\n      const chbox = document.querySelector('#pay_fully');\n      chbox.removeAttribute('disabled');\n      chbox.checked = false;\n    }\n  }\n}\n", "import { deleteResource } from '../delete';\nimport { addFields } from '../add';\nimport { openURL } from '../window_manager';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { updatePozicia } from '../update_pozicia';\nimport sortable from 'html5sortable/dist/html5sortable.es';\nimport StockWithCalcPopup from './stock_with_calc_pop_up_controller';\nimport {\n  round,\n  parseNumber,\n  formatNumber,\n  changeItemSzcp,\n  onPartnerChange,\n  onDodavatelChange,\n  popupHelpers\n} from '../utils';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"odoslana-zalohova-fakturas\"\nexport default class extends StockWithCalcPopup {\n  static targets = ['partnerEl', 'dodavatelEl'];\n\n  initialize() {\n    dayjs.extend(customParseFormat);\n\n    Object.assign(this, popupHelpers, {\n      updatePozicia: updatePozicia.bind(this),\n      onPartnerChange,\n      onDodavatelChange\n    });\n  }\n\n  connect() {\n    [this._sortableOpfFaktPolEl] = this.#initSortable(\n      '#opf_fakt_polozkies',\n      '.invoiced-item'\n    );\n\n    this._sortableCallbackInvoicedItem = e => {\n      this.updatePozicia('.invoiced-item');\n      showSubmitButton(e.detail.origin.container);\n    };\n\n    this._sortableOpfFaktPolEl.addEventListener(\n      'sortstop',\n      this._sortableCallbackInvoicedItem.bind(this)\n    );\n\n    [this._sortableOpfBankUcetEl] = this.#initSortable(\n      '#opf-bank-ucties',\n      '.b-account'\n    );\n\n    this._sortableCallbackBankAccount = e => {\n      this.updatePozicia('.b-account');\n      showSubmitButton(e.detail.origin.container);\n    };\n\n    this._sortableOpfBankUcetEl.addEventListener(\n      'sortstop',\n      this._sortableCallbackBankAccount.bind(this)\n    );\n\n    const firstItem = document.querySelector(\n      '#opf_fakt_polozkies .invoiced-item'\n    );\n    const cenaBezDph = firstItem?.querySelector('[name$=\"[cena_bez_dph]\"]');\n\n    cenaBezDph &&\n      this.element.querySelector('form#new_odoslana_zalohova_faktura') &&\n      this.sumarizeOpfFaktPolozkies({ target: cenaBezDph });\n  }\n\n  disconnect() {\n    this._sortableOpfFaktPolEl.removeEventListener(\n      'sortstop',\n      this._sortableCallbackInvoicedItem\n    );\n\n    sortable([this._sortableOpfFaktPolEl], 'destroy');\n\n    this._sortableOpfBankUcetEl.removeEventListener(\n      'sortstop',\n      this._sortableCallbackBankAccount\n    );\n\n    sortable([this._sortableOpfBankUcetEl], 'destroy');\n  }\n\n  setDatumSplatnosti(e) {\n    if (!e.target.value) return;\n\n    this.#updateCurrencyRate();\n\n    const datumSplatnostiEl = document.querySelector(\n      'input#odoslana_zalohova_faktura_datum_splatnosti'\n    );\n\n    if (!datumSplatnostiEl?.datepicker) return;\n\n    datumSplatnostiEl.datepicker.setDate(\n      dayjs(e.target.value, 'DD.MM.YYYY', true).add(\n        parseInt(e.target.dataset.pocetDniSplatnosti),\n        'days'\n      ).$d\n    );\n  }\n\n  setPocetDniSplatnosti(e) {\n    if (!e.target.value) return;\n\n    const dajsObj = dayjs(e.target.value, 'DD.MM.YYYY', true);\n    const submitBtn = document.querySelector('[type=\"submit\"]');\n\n    if (!dajsObj.isValid()) {\n      e.target.classList.remove('is-valid');\n      e.target.classList.add('is-invalid');\n\n      setTimeout(() => submitBtn.setAttribute('disabled', 'disabled'), 500);\n\n      return;\n    }\n\n    submitBtn.removeAttribute('disabled');\n    e.target.classList.remove('is-invalid');\n\n    const pocetDniSplEl = document.querySelector('#pocet_dni_splatnosti');\n    const datumVystaveniaEl = document.querySelector(\n      '#odoslana_zalohova_faktura_datum_vystavenia'\n    );\n\n    pocetDniSplEl.value = dayjs(e.target.value, 'DD.MM.YYYY', true).diff(\n      dayjs(datumVystaveniaEl.value, 'DD.MM.YYYY', true),\n      'day'\n    );\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n    this.updateLabelInvoiceNumber();\n  }\n\n  onCurrencyChange(e) {\n    const oldCurrency = document.querySelector('.label-cis-mena').innerHTML;\n    const newCurrency =\n      e.target.tomselect.options[e.target.tomselect.getValue()].$option\n        .innerHTML;\n\n    document.querySelectorAll('.label-cis-mena').forEach(element => {\n      element.innerHTML = newCurrency;\n    });\n\n    document.querySelector('#opf_fakt_polozkies .add-fields').dataset.fields =\n      document\n        .querySelector('#opf_fakt_polozkies .add-fields')\n        .dataset.fields.replace(oldCurrency, newCurrency);\n\n    this.#updateCurrencyRate();\n  }\n\n  onPocetDniSplatnostiChange(e) {\n    const dajsObj = dayjs(\n      document.querySelector('input#odoslana_zalohova_faktura_datum_vystavenia')\n        .value,\n      'DD.MM.YYYY',\n      true\n    );\n\n    document.querySelector(\n      'input#odoslana_zalohova_faktura_datum_splatnosti'\n    ).value = dajsObj\n      .add(parseInt(e.target.value), 'days')\n      .format('DD.MM.YYYY');\n\n    showSubmitButton(e.target);\n  }\n\n  showPartner(e) {\n    let url;\n\n    if (this.partnerElTarget.value) {\n      url = `/partners/${this.partnerElTarget.value}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location.toString()) });\n  }\n\n  showDodavatel(e) {\n    openURL(`/dodavatels/${this.dodavatelElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n\n  show(e) {\n    const { href } = e.currentTarget.dataset;\n\n    if (!href) return;\n\n    if (href === '/ciselny_rads') {\n      const id = document.querySelector(\n        '#odoslana_zalohova_faktura_ciselny_rad_id'\n      ).value;\n      const evidenciaId = document.querySelector(\n        '#odoslana_zalohova_faktura_evidencia_id'\n      ).value;\n\n      openURL(`${href}/${id || `new/${evidenciaId}`}`, {\n        parentUrl: new URL(location)\n      });\n\n      return;\n    }\n\n    if (href == '/dodavatels') {\n      const id = document.querySelector(\n        '#odoslana_zalohova_faktura_dodavatel_id'\n      ).value;\n\n      openURL(`/dodavatels/${id || 'new'}.html`, {\n        parentUrl: new URL(location)\n      });\n\n      return;\n    }\n\n    openURL(href, { parentUrl: new URL(location) });\n  }\n\n  updateLabelInvoiceNumber() {\n    const numberEl = document.querySelector('#label-invoice-number span');\n\n    if (!numberEl) return;\n\n    const evidEl = document.querySelector(\n      '#odoslana_zalohova_faktura_evidencia_id'\n    );\n    const cisRadEl = document.querySelector(\n      '#odoslana_zalohova_faktura_ciselny_rad_id'\n    );\n\n    [evidEl, cisRadEl].forEach(element => {\n      if (element.tomselect.getValue()) {\n        numberEl.classList.remove('text-danger');\n        numberEl.classList.add('text-primary');\n      }\n\n      if (!element.tomselect.getValue()) {\n        numberEl.classList.remove('text-primary');\n        numberEl.classList.add('text-danger');\n      }\n    });\n\n    numberEl.innerHTML = `${evidEl.options[evidEl.selectedIndex].dataset.kod}-${\n      cisRadEl.options[cisRadEl.selectedIndex].dataset.kod\n    }-${\n      document.querySelector('#odoslana_zalohova_faktura_cislo_faktury').value\n    }`;\n  }\n\n  onDeleteResourceButton(e) {\n    e.preventDefault();\n\n    deleteResource(e.currentTarget, (parentName, parent) => {\n      switch (parentName) {\n        case 'invoiced-item':\n          this.sumarizeOpfFaktPolozkies({\n            target: parent.querySelector('input[id*=\"_cena_bez_dph\"]')\n          });\n\n          this.updatePozicia('.invoiced-item');\n          break;\n        case 'b-account':\n          this.updatePozicia('.b-account');\n          break;\n        case 'payment':\n          this.element[\n            'odoslana-zalohova-fakturas-show'\n          ].updateZadanaUhradaLabels();\n          break;\n        default:\n          parent\n            .querySelector('input[type=\"text\"]:not(.vanillajs-datepicker)')\n            .dispatchEvent(new Event('keyup'));\n      }\n    });\n  }\n\n  onAddFieldButton(e) {\n    e.preventDefault();\n\n    addFields(\n      e.target.closest('.add-fields'),\n      (copiedDiv, lastElBeforeInsert) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv\n            .querySelectorAll('input.vanillajs-datepicker')\n            .forEach(input => initializeVanillajsDatepicker(input));\n\n          if (copiedDiv.classList.contains('invoiced-item')) {\n            this.updatePozicia('.invoiced-item');\n            sortable(document.querySelectorAll('#opf_fakt_polozkies'));\n\n            [\n              'stredisko_id',\n              'zakazka_id',\n              'cinnost_id',\n              'pracovnik_id'\n            ].forEach(szcp => {\n              const select = copiedDiv.querySelector(\n                `select[name$=\"[${szcp}]\"]`\n              );\n\n              if (!select?.tomselect) return;\n\n              select.tomselect.setValue(\n                this.element.querySelector(`#odoslana_zalohova_faktura_${szcp}`)\n                  .value,\n                true\n              );\n            });\n\n            this.setCenaBezDPh({ target: copiedDiv });\n          }\n\n          if (copiedDiv.classList.contains('b-account')) {\n            this.updatePozicia('.b-account');\n            sortable(document.querySelectorAll('#opf-bank-ucties'));\n          }\n\n          copiedDiv = copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n  }\n\n  async getSampleNumbering(e) {\n    const ciselnyRadVal = document.querySelector(\n      '#odoslana_zalohova_faktura_ciselny_rad_id'\n    ).value;\n\n    const datumDodaniaVal = document.querySelector(\n      '#odoslana_zalohova_faktura_datum_vystavenia'\n    ).value;\n\n    const url = new URL('/ciselny_rads/get-sample-numbering', location);\n    url.searchParams.set('ciselny_rad_id', ciselnyRadVal);\n    url.searchParams.set('datum', datumDodaniaVal);\n\n    const response = await makeRequest(url, { method: 'PATCH' });\n\n    document.querySelector('#odoslana_zalohova_faktura_cislo_faktury').value =\n      response.level1;\n    document.querySelector(\n      '#odoslana_zalohova_faktura_old_cislo_faktury'\n    ).value = response.level1;\n    document.querySelector('#label-invoice-number span').innerHTML =\n      response.level3;\n\n    showSubmitButton(e.target.closest('button'));\n  }\n\n  setVarSymbol(e) {\n    this.updateLabelInvoiceNumber();\n\n    const digits = e.target.value.match(/\\d+/g);\n    document.querySelector('#odoslana_zalohova_faktura_var_symbol').value =\n      digits ? digits.join('').substring(0, 10) : '';\n  }\n\n  setCenaBezDPh(e) {\n    const polozkaEl = e.target.closest('.invoiced-item');\n    const mnozstvoPocetEl = polozkaEl.querySelector(\n      \"input[id*='_mnozstvo_pocet']\"\n    );\n    const cenaJednotkovaEl = polozkaEl.querySelector(\n      \"input[id*='_cena_jednotkova']\"\n    );\n    const cenaBezDphEl = polozkaEl.querySelector(\"input[id*='_cena_bez_dph']\");\n\n    if (mnozstvoPocetEl.value && cenaJednotkovaEl.value) {\n      cenaBezDphEl.value = formatNumber(\n        parseNumber(mnozstvoPocetEl.value) * parseNumber(cenaJednotkovaEl.value)\n      );\n\n      this.sumarizeOpfFaktPolozkies({ target: cenaBezDphEl });\n    }\n  }\n\n  sumarizeOpfFaktPolozkies(e) {\n    const target = e.target;\n\n    if (target.classList.contains('is-invalud')) return;\n\n    const polozkaEl = target.closest('.invoiced-item');\n    const mnozstvoPocetEl = polozkaEl.querySelector(\n      \"input[id*='_mnozstvo_pocet']\"\n    );\n    const cenaJednotkovaEl = polozkaEl.querySelector(\n      \"input[id*='_cena_jednotkova']\"\n    );\n    const cenaBezDphEl = polozkaEl.querySelector(\"input[id*='_cena_bez_dph']\");\n\n    if (\n      cenaJednotkovaEl.value &&\n      formatNumber(cenaBezDphEl.value) !==\n        formatNumber(\n          parseNumber(mnozstvoPocetEl.value) *\n            parseNumber(cenaJednotkovaEl.value)\n        )\n    ) {\n      mnozstvoPocetEl.classList.add('is-invalid');\n      cenaJednotkovaEl.classList.add('is-invalid');\n      cenaBezDphEl.classList.add('is-invalid');\n\n      return;\n    }\n\n    mnozstvoPocetEl.classList.remove('is-invalid');\n    cenaJednotkovaEl.classList.remove('is-invalid');\n    cenaBezDphEl.classList.remove('is-invalid');\n\n    this.#fakturovanePolozkyBezDph();\n    this.fakturovanePolozkySDph();\n  }\n\n  #fakturovanePolozkyBezDph() {\n    const invoicedItems = document.querySelectorAll(\n      '#opf_fakt_polozkies .invoiced-item'\n    );\n\n    const sum = [...invoicedItems].reduce((acc, entry) => {\n      const destroyVal =\n        entry.querySelector('[id*=\"_destroy\"]').value === 'true';\n\n      if (destroyVal) return acc;\n\n      acc += parseNumber(entry.querySelector(\"[id*='_cena_bez_dph']\").value);\n\n      return acc;\n    }, 0);\n\n    document.querySelector('#label-invoiced-items-without-vat').textContent =\n      formatNumber(sum);\n\n    this.calcStockItems('without');\n  }\n\n  fakturovanePolozkySDph() {\n    const invoicedItems = document.querySelectorAll(\n      '#opf_fakt_polozkies .invoiced-item'\n    );\n\n    const sums = [...invoicedItems].reduce((acc, entry) => {\n      const destroyVal =\n        entry.querySelector('[id*=\"_destroy\"]').value === 'true';\n\n      if (destroyVal) return acc;\n\n      const cenaBezDphVal = parseNumber(\n        entry.querySelector(\"[id*='_cena_bez_dph']\").value\n      );\n      const dphPercInt = Number.parseInt(\n        entry.querySelector(\"[id*='_dph_perc']\").value\n      );\n      const accKey = isFinite(dphPercInt) ? dphPercInt : 'bez_dph';\n\n      acc[accKey] ||= 0;\n      acc[accKey] += cenaBezDphVal;\n\n      return acc;\n    }, {});\n\n    const finalWithVAT = Object.keys(sums).reduce(\n      (acc, entry) =>\n        acc + sums[entry] * (entry === 'bez_dph' ? 1 : +entry / 100 + 1),\n      0\n    );\n\n    document.querySelector('#label-invoiced-items-with-vat').textContent =\n      formatNumber(finalWithVAT);\n\n    this.calcStockItems('with');\n  }\n\n  calcStockItems(vat = 'without') {\n    const stockItems = document.querySelectorAll(\n      '#fakt_sklad_polozkies .stock-item'\n    );\n    const cenySuSDphVal =\n      document.querySelector('select[name$=\"[ceny_su_s_dph]\"]').value ===\n      'true';\n\n    const sums = [...stockItems].reduce(\n      (acc, cur) => {\n        const destroyVal =\n          cur.querySelector('[id*=\"_destroy\"]').value === 'true';\n\n        if (destroyVal) return acc;\n\n        const dphPercInt = Number.parseInt(\n          cur.querySelector(\"[id*='_dph_perc']\").value\n        );\n        const cenaSpoluVal = parseNumber(\n          cur.querySelector('[id*=\"_cena_spolu\"]').value\n        );\n        const accKey = isFinite(dphPercInt) ? dphPercInt : 'bez_dph';\n        const { zaloha } = cur.dataset;\n\n        acc[zaloha ? 'advances' : 'invoices'][accKey] ||= 0;\n        acc[zaloha ? 'advances' : 'invoices'][accKey] += cenaSpoluVal;\n\n        return acc;\n      },\n      { invoices: {}, advances: {} }\n    );\n\n    const finalCost = Object.keys(sums).reduce(\n      (acc, curType) =>\n        acc +\n        Object.keys(sums[curType]).reduce((acc, entry) => {\n          const discountedCost = sums[curType][entry];\n\n          acc +=\n            vat === 'without'\n              ? Math.round(\n                  cenySuSDphVal\n                    ? (discountedCost /\n                        ((entry === 'bez_dph' ? 0 : +entry || 0) + 100)) *\n                        10_000\n                    : discountedCost * 100\n                ) / 100\n              : cenySuSDphVal\n                ? round(discountedCost)\n                : discountedCost +\n                  round((discountedCost * (+entry || 0)) / 100);\n\n          return acc;\n        }, 0),\n      0\n    );\n\n    const finalInvoicedItemsCost = parseNumber(\n      document.querySelector(`#label-invoiced-items-${vat}-vat`).textContent\n    );\n\n    document.querySelector(`#label-${vat}-vat`).textContent = formatNumber(\n      finalInvoicedItemsCost + finalCost\n    );\n  }\n\n  showUctovneZaradenie(e) {\n    openURL('/uctovne-zaradenies/2', { parentUrl: new URL(location) });\n  }\n\n  onSzcpChange(e) {\n    changeItemSzcp(\n      e.target,\n      '.invoiced-item, .stock-item',\n      e.target.id.replace('odoslana_zalohova_faktura', '')\n    );\n  }\n\n  async #updateCurrencyRate() {\n    const dateVal = document.querySelector(\n      '#odoslana_zalohova_faktura_datum_vystavenia'\n    )?.value;\n\n    const cisMenaVal = document.querySelector(\n      '#odoslana_zalohova_faktura_cis_mena_id'\n    )?.value;\n\n    if (!dayjs(dateVal, 'DD.MM.YYYY', true).isValid() || !cisMenaVal) return;\n\n    try {\n      const url = new URL('/currency-rates/get-by-date', location);\n\n      url.searchParams.set('date', dateVal);\n      url.searchParams.set('cis_mena_id', cisMenaVal);\n\n      const rate = await makeRequest(url);\n\n      document.querySelector('#odoslana_zalohova_faktura_kurz').value =\n        formatNumber(rate, 4);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  #initSortable(container, entry) {\n    return sortable(container, {\n      items: this.element.querySelectorAll(\n        `${entry}:not(.last-row-with-button)`\n      ),\n      handle: '.move'\n    });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { formatNumber, parseNumber } from '../utils';\nimport { popupHelpers } from '../utils';\n\n// Connects to data-controller=\"stock-with-calc-pop-up\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n\n  showCalc(e) {\n    const parentEl = e.target.closest('.invoiced-item');\n    const modalDom = document.querySelector('#calc');\n    const modal = new bootstrap.Modal(modalDom);\n    const itemCenaBezDphId = parentEl.querySelector('[id*=\"_cena_bez_dph\"]').id;\n\n    modalDom.querySelector('#calc-cena-bez-dph').value = formatNumber(\n      parentEl.querySelector('[id*=\"_cena_bez_dph\"]').value\n    );\n    modalDom.querySelector('#calc-cena-bez-dph').dataset.target =\n      itemCenaBezDphId;\n\n    modalDom.querySelector('#calc-dph-perc').value = formatNumber(\n      parentEl.querySelector('[id*=\"_dph_perc\"]').value,\n      0\n    );\n    modalDom.querySelector('#calc-dph-perc').dataset.target =\n      parentEl.querySelector('[id*=\"_dph_perc\"]').id;\n\n    this.calcRefresh({ target: modalDom.querySelector('#calc-cena-bez-dph') });\n\n    modal.show();\n  }\n\n  calcRefresh(e) {\n    const calcModal = e.target.closest('#calc.modal');\n    const dphPercVal = parseNumber(\n      calcModal.querySelector('#calc-dph-perc').value\n    );\n    const cenaSDphEl = calcModal.querySelector('#calc-cena-s-dph');\n    const cenaBezDphEl = calcModal.querySelector('#calc-cena-bez-dph');\n    const dphEl = calcModal.querySelector('#calc-dph');\n\n    let { target } = e.target.dataset;\n    let value = parseNumber(e.target.value);\n\n    if (e.target.id === 'calc-cena-bez-dph') {\n      cenaSDphEl.value = formatNumber(value + (value * dphPercVal) / 100.0);\n      dphEl.value = formatNumber(\n        parseNumber(e.target.value) * (dphPercVal / 100.0)\n      );\n    }\n\n    if (['calc-dph-perc', 'calc-cena-s-dph'].some(id => id === e.target.id)) {\n      cenaBezDphEl.value = formatNumber(\n        parseNumber(cenaSDphEl.value) / (1 + dphPercVal / 100.0)\n      );\n      dphEl.value = parseNumber(\n        parseNumber(cenaBezDphEl.value) * (dphPercVal / 100.0)\n      );\n    }\n\n    if (e.target.id === 'calc-cena-s-dph') {\n      target = cenaBezDphEl.dataset.target;\n      value = parseNumber(cenaBezDphEl.value);\n    }\n\n    if (!target) return;\n\n    this.element.querySelector(`#${target}`).value = formatNumber(\n      value,\n      target.endsWith('_dph_perc') ? 0 : 2\n    );\n\n    this.sumarizeOpfFaktPolozkies({\n      target: this.element.querySelector(`#${target}`),\n    });\n\n    ['without', 'with'].forEach(type =>\n      window.Stimulus.router.contexts[0].controller.calcStockItems(type)\n    );\n\n    showSubmitButton(e.target);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { getJSON, appendCanvas, postJSON } from '../utils';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"odoslana-zalohova-fakturas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    Object.assign(this, { appendCanvas });\n\n    this.submitBtnTarget.click();\n  }\n\n  openFilter() {\n    let url;\n    let filterId = this.element.querySelector(\n      '#filter_filter_opf_filter_id'\n    ).value;\n\n    if (filterId) {\n      url = `/opf_filters/${filterId}.html`;\n    } else {\n      url = '/opf_filters/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  deleteManualPayments() {\n    makeRequest('/odoslana-zalohova-fakturas/delete-manual-payments/2.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  chargeMarked() {\n    makeRequest('/odoslana-zalohova-fakturas/charge-records/2.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  setMarkedCount() {\n    makeRequest('/odoslana-zalohova-fakturas/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteMarked() {\n    makeRequest('/odoslana-zalohova-fakturas/delete-marked')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  openNew() {\n    openURL('/odoslana_zalohova_fakturas/new');\n  }\n\n  printRecords() {\n    openURL(`/opf_prints/preview-records.pdf`, { tab: true });\n  }\n\n  printList(e) {\n    openURL(\n      `/opf_prints/preview-list?groups_only=${\n        e.target.closest('.dropdown-item').dataset.groupsOnly\n      }`,\n      { tab: true }\n    );\n  }\n\n  async send(e) {\n    if (confirm(e.target.closest('#send').dataset.message)) {\n      try {\n        const response = await postJSON('opf_emails/send');\n\n        if (response.status) return;\n        if (e.submitter) e.submitter.classList.remove('disabled');\n\n        window.Turbo.renderStreamMessage(response.turbo_stream);\n      } catch (e) {\n        showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n      }\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"odoslana-zalohova-fakturas-new\"\nexport default class extends Controller {\n  static targets = ['dodavatelEl', 'partnerEl'];\n\n  declare readonly dodavatelElTarget: HTMLSelectElement;\n  declare readonly partnerElTarget: HTMLSelectElement;\n\n  connect() {\n    const firstItem = document.querySelector(\n      '#opf_fakt_polozkies .invoiced-item'\n    );\n\n    if (firstItem)\n      firstItem\n        .querySelector('[id*=\"_cena_bez_dph\"]')\n        ?.dispatchEvent(new Event('keyup', { bubbles: true }));\n  }\n\n  onPartnerChange(e: Event) {\n    window.onbeforeunload = null;\n\n    if ((<HTMLSelectElement>e.target).closest('.bg-copy')) return;\n\n    const url = new URL(location.toString());\n\n    if (this.dodavatelElTarget.value && this.partnerElTarget.value)\n      openURL(\n        `/odoslana_zalohova_fakturas/new/${this.partnerElTarget.value}/${this.dodavatelElTarget.value}${url.search}`,\n        { target: '_self' }\n      );\n  }\n\n  onDodavatelChange(e: Event) {\n    this.onPartnerChange(e);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\nimport { openURL } from '../window_manager';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton\n} from '../show_submit_buttons';\nimport {\n  getJSON,\n  parseNumber,\n  formatNumber,\n  appendCanvas,\n  showRecord\n} from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"odoslana-zalohova-fakturas-show\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this;\n\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n\n    Object.assign(this, {\n      showRecord,\n      appendCanvas: e => appendCanvas(e, this.#appendCanvasCallback)\n    });\n\n    initializeFilePond();\n  }\n\n  #appendCanvasCallback(canvas, method) {\n    if (canvas.classList.contains('offcanvas-bottom'))\n      canvas.classList.replace('offcanvas-bottom', 'offcanvas-end');\n\n    if (method === 'sk_quick_search')\n      canvas.classList.replace('offcanvas-end', 'offcanvas-bottom');\n  }\n\n  disconnect() {\n    destroyFilePond();\n\n    document.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n    document.removeEventListener('change', registerChangeToShowSubmitButton);\n  }\n\n  delete(e) {\n    if (confirm(e.target.dataset.confirm)) {\n      makeRequest(document.querySelector('form').getAttribute('action'), {\n        method: 'DELETE'\n      })\n        .then(response => {\n          if (!response?.status) {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n\n            return;\n          }\n\n          window.close();\n        })\n        .catch(err =>\n          showToastMessage(err.message, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  showOf(e) {\n    e.preventDefault();\n\n    openURL(\n      `/odoslana_fakturas/${e.target.closest('.assigned-invoice').dataset.idA}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  updateZadanaUhradaLabels() {\n    const visibleEls = document.querySelectorAll(\n      '#zadana-uhradas .payment:not([style=\"display: none;\"]) input[id*=\"_suma\"]'\n    );\n\n    const sum = [...visibleEls].reduce(\n      (acc, entry) => acc + parseNumber(entry.value),\n      0\n    );\n\n    const payment =\n      sum +\n      parseNumber(\n        document.querySelector('#label-paying-the-invoice').innerHTML\n      );\n\n    document.querySelector('#label-manual-payments').textContent =\n      formatNumber(sum);\n    document.querySelector('#label-payments').textContent =\n      formatNumber(payment);\n\n    if (!payment) {\n      const chbox = document.querySelector('#pay_fully');\n      chbox.removeAttribute('disabled');\n      chbox.checked = false;\n    }\n  }\n\n  openNextTo(e) {\n    e.preventDefault();\n    openURL(e.target.closest('a.open-next-to').href, {\n      parentUrl: new URL(location)\n    });\n  }\n\n  printRecords(e) {\n    const target = e.target.closest(\n      '[data-action=\"odoslana-zalohova-fakturas-show#printRecords\"]'\n    );\n    openURL(target.dataset.href, { tab: true });\n  }\n\n  sendEmail() {\n    openURL(\n      `/opf_emails/${document\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { initializeTomSelect } from '../tom_select';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"of-davkas\"\nexport default class extends Controller {\n  static targets = ['opakovanieEl'];\n\n  initialize() {\n    dayjs.extend(customParseFormat);\n  }\n\n  onSubmitButton() {\n    window.onbeforeunload = null;\n  }\n\n  onStornoButton() {\n    window.onbeforeunload = null;\n  }\n\n  onAddFieldButton(e) {\n    e.preventDefault();\n\n    if (!document.startViewTransition) {\n      return this.#add(e);\n    }\n\n    document.startViewTransition(() => {\n      this.#add(e);\n    });\n  }\n\n  onDeleteResourceButton(e) {\n    deleteResource(e.currentTarget, (parentName, parent) => {\n      this.#refreshOfDavkaPartnerCount();\n    });\n  }\n\n  onOpakovanieChange(e) {\n    const labelEl = this.element.querySelector('.label-opakovanie');\n    const labelNajblizsieSpustenieArr = this.element.querySelectorAll(\n      '.label-najblizsie-spustenie'\n    );\n    const value = this.#calculateNextExecution();\n\n    labelEl.innerHTML =\n      e.target.tomselect.options[\n        e.target.tomselect.getValue()\n      ].$option.innerHTML.toLowerCase();\n\n    if (!value) return;\n\n    labelNajblizsieSpustenieArr.forEach(el => {\n      el.innerHTML = value;\n    });\n\n    this.element.querySelector('[name*=\"[najblizsie_spustenie]\"]').value =\n      value;\n  }\n\n  #calculateNextExecution() {\n    const zaciatokVal = this.element.querySelector(\n      '[name*=\"[zaciatok]\"]'\n    ).value;\n    const dajsObj = dayjs(zaciatokVal, 'DD.MM.YYYY', true);\n\n    if (!dajsObj.isValid()) return null;\n    const option =\n      this.opakovanieElTarget.tomselect.options[\n        this.opakovanieElTarget.tomselect.getValue()\n      ].$option;\n    const [count, type] = option.dataset.definition.split(',');\n    let newValue = dajsObj.format('DD.MM.YYYY');\n\n    while (\n      dayjs(newValue, 'DD.MM.YYYY', true).isValid() &&\n      dayjs(newValue, 'DD.MM.YYYY', true).isBefore(dayjs())\n    ) {\n      newValue = dayjs(newValue, 'DD.MM.YYYY', true)\n        .add(+count, type)\n        .format('DD.MM.YYYY');\n    }\n\n    return newValue;\n  }\n\n  onVytvorenieChange(e) {\n    const labelEl = this.element.querySelector('.label-vytvorenie');\n\n    labelEl.innerHTML =\n      e.target.tomselect.options[\n        e.target.tomselect.getValue()\n      ].$option.innerHTML.toLowerCase();\n  }\n\n  onCheckboxChange(e) {\n    const { checked } = e.target;\n    const { label } = e.target.dataset;\n\n    this.element\n      .querySelector(`.label-${label}--${+checked}`)\n      .classList.remove('d-none');\n    this.element\n      .querySelector(`.label-${label}--${+!checked}`)\n      .classList.add('d-none');\n  }\n\n  onZaciatokChange(e) {\n    this.onOpakovanieChange({\n      target: this.opakovanieElTarget,\n    });\n  }\n\n  showPartner(e) {\n    const parentEl = e.target.closest('.of-davka-partner');\n    const partnerId = parentEl.querySelector('select.tom-select').value;\n    openURL(`/partners/${partnerId || 'new'}`, {\n      parentUrl: new URL(location),\n    });\n  }\n\n  #add(e) {\n    addFields(e.target.closest('.add-fields'), (copiedDiv, _) => {\n      initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n      this.#refreshOfDavkaPartnerCount();\n    });\n  }\n\n  #refreshOfDavkaPartnerCount() {\n    const labelEl = this.element.querySelector('.label-of-davka-partner-count');\n\n    if (!labelEl) return;\n\n    labelEl.innerHTML = this.element.querySelectorAll(\n      '.of-davka-partner input[name*=\"_destroy\"][value=\"false\"]'\n    ).length;\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { deleteJSON } from '../utils';\nimport { simpleCardMethods } from '../utils';\n\n// Connects to data-controller=\"of-davkas-index\"\nexport default class extends Controller {\n  connect() {\n    Object.assign(this, simpleCardMethods);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"of-davkas-show\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disableAnchor(e) {\n    e.target.closest('.btn').classList.add('disabled');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { postFormData } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"of-emails-show\"\nexport default class extends Controller {\n  connect() {}\n\n  async onSubmit(e: Event) {\n    e.preventDefault();\n\n    const form = this.element.querySelector('form')!;\n    const button = (e.target as HTMLElement).closest('button')!;\n\n    button.classList.add('disabled');\n\n    try {\n      const response = await postFormData(form.action, new FormData(form));\n      const json = await response.json();\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n\n      window.Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      button.classList.remove('disabled');\n    }\n  }\n}\n", "import { formatNumber } from '../utils';\nimport { getStimulusController } from '../utils';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\nimport { initializeTomSelect } from '../tom_select';\nimport FaktPolozkiesController from './fakt_polozkies_controller';\nimport { parseNumber } from '../utils';\n\n// Connects to data-controller=\"of-fakt-polozkies\"\nexport default class extends FaktPolozkiesController {\n  onDruhPolozkyChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n    const selectedOption = target.options[target.selectedIndex];\n    const { dphPerc, cenaJednotkova, mnozstvoText, cenaBezDph, predmet } =\n      selectedOption?.dataset;\n\n    if (\n      !this.predmetElTarget.value ||\n      Array.from(target.options)\n        .flatMap(e => e.dataset.predmet || [])\n        .includes(this.predmetElTarget.value)\n    )\n      this.predmetElTarget.value = predmet || '';\n\n    this.dphPercElTarget.value =\n      typeof dphPerc === 'undefined' ? '' : formatNumber(dphPerc, 0);\n\n    if (!target.closest('form#new_odoslana_faktura')) return;\n\n    if (mnozstvoText) this.mnozstvoTextElTarget.value = mnozstvoText;\n\n    if (cenaJednotkova) {\n      this.cenaBezDphElTarget.value = '';\n      this.mnozstvoPocetElTarget.value = formatNumber(1);\n      this.cenaJednotkovaElTarget.value = formatNumber(cenaJednotkova);\n\n      this.setCenaBezDPh();\n\n      return;\n    }\n\n    this.mnozstvoPocetElTarget.value = '';\n    this.cenaJednotkovaElTarget.value = '';\n    this.cenaBezDphElTarget.value = formatNumber(cenaBezDph);\n\n    getStimulusController('odoslana-fakturas')?.sumarizeOfFaktPolozkies(target);\n  }\n\n  copy(e: Event) {\n    const target = <HTMLElement>e.target;\n    const parent = target.closest('[id$=\"of_fakt_polozkies\"]');\n\n    if (!parent) return;\n\n    (<HTMLAnchorElement>parent.querySelector('.add-fields')).click();\n    const copied = [\n      ...parent.querySelectorAll('[data-controller=\"of-fakt-polozkies\"]'),\n    ].pop();\n\n    if (!copied) return;\n\n    copied\n      .querySelectorAll('.tom-select')\n      .forEach(select =>\n        (<HTMLSelectElement & { tomselect: TomSelect }>(\n          select\n        )).tomselect?.destroy()\n      );\n\n    this.element\n      .querySelectorAll('select, input.form-control, textarea.form-control')\n      .forEach(element => {\n        const htmlEl = <HTMLInputElement | HTMLSelectElement>element;\n        (<HTMLInputElement | HTMLSelectElement>(\n          copied.querySelector(\n            `[name$=\"[${(htmlEl.name.match(/\\b\\w+/g) || []).pop()}]\"]`\n          )\n        )).value = htmlEl.value;\n      });\n\n    initializeTomSelect(copied.querySelectorAll('select.tom-select'));\n    getStimulusController('odoslana-fakturas')?.sumarizeOfFaktPolozkies(copied);\n    getStimulusController('odoslana-fakturas')?.updatePozicia('.invoiced-item');\n  }\n\n  setCenaBezDPh() {\n    if (\n      !this.mnozstvoPocetElTarget.value ||\n      !this.cenaJednotkovaElTarget.value\n    ) {\n      this.mnozstvoPocetElTarget.classList.add('is-invalid');\n      this.cenaJednotkovaElTarget.classList.add('is-invalid');\n      this.cenaBezDphElTarget.classList.add('is-invalid');\n\n      return;\n    }\n\n    this.mnozstvoPocetElTarget.classList.remove('is-invalid');\n    this.cenaJednotkovaElTarget.classList.remove('is-invalid');\n    this.cenaBezDphElTarget.classList.remove('is-invalid');\n\n    this.cenaBezDphElTarget.value = formatNumber(\n      parseNumber(this.mnozstvoPocetElTarget.value) *\n        parseNumber(this.cenaJednotkovaElTarget.value)\n    );\n\n    getStimulusController('odoslana-fakturas')?.sumarizeOfFaktPolozkies(\n      this.element\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { postFormData } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"opf-emails-show\"\nexport default class extends Controller {\n  connect() {}\n\n  async onSubmit(e: Event) {\n    e.preventDefault();\n\n    const form = this.element.querySelector('form')!;\n    const button = (e.target as HTMLElement).closest('button')!;\n\n    button.classList.add('disabled');\n\n    try {\n      const response = await postFormData(form.action, new FormData(form));\n      const json = await response.json();\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n\n      window.Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      button.classList.remove('disabled');\n    }\n  }\n}\n", "import { formatNumber } from '../utils';\nimport { getStimulusController } from '../utils';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\nimport { initializeTomSelect } from '../tom_select';\nimport FaktPolozkiesController from './fakt_polozkies_controller';\n\n// Connects to data-controller=\"opf-fakt-polozkies\"\nexport default class extends FaktPolozkiesController {\n  onDruhPolozkyChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n    const selectedOption = target.options[target.selectedIndex];\n    const { predmet, dphPerc, mnozstvoText, cenaJednotkova, cenaBezDph } =\n      selectedOption?.dataset;\n\n    if (\n      !this.predmetElTarget.value ||\n      Array.from(target.options)\n        .flatMap(e => e.dataset.predmet || [])\n        .includes(this.predmetElTarget.value)\n    ) {\n      this.predmetElTarget.value = predmet || '';\n    }\n\n    this.dphPercElTarget.value = dphPerc ?? '';\n\n    if (!target.closest('form#new_odoslana_zalohova_faktura')) return;\n\n    this.mnozstvoTextElTarget.value = mnozstvoText ?? '';\n\n    if (cenaJednotkova) {\n      this.cenaBezDphElTarget.value = '';\n      this.mnozstvoPocetElTarget.value = formatNumber(1);\n      this.cenaJednotkovaElTarget.value = formatNumber(cenaJednotkova);\n\n      getStimulusController('odoslana-zalohova-fakturas')?.setCenaBezDPh({\n        target: target,\n      });\n    } else {\n      this.mnozstvoPocetElTarget.value = '';\n      this.cenaJednotkovaElTarget.value = '';\n      this.cenaBezDphElTarget.value = formatNumber(cenaBezDph);\n\n      getStimulusController(\n        'odoslana-zalohova-fakturas'\n      )?.sumarizeOpfFaktPolozkies({\n        target: target,\n      });\n    }\n  }\n\n  copy(e: Event) {\n    const target = <HTMLElement>e.target;\n    const parent = target.closest('[id$=\"opf_fakt_polozkies\"]');\n\n    if (!parent) return;\n\n    (<HTMLAnchorElement>parent.querySelector('.add-fields')).click();\n    const copied = [\n      ...parent.querySelectorAll('[data-controller=\"opf-fakt-polozkies\"]'),\n    ].pop();\n\n    if (!copied) return;\n\n    copied\n      .querySelectorAll('.tom-select')\n      .forEach(select =>\n        (<HTMLSelectElement & { tomselect: TomSelect }>(\n          select\n        )).tomselect?.destroy()\n      );\n\n    this.element\n      .querySelectorAll('select, input.form-control')\n      .forEach(element => {\n        const htmlEl = <HTMLInputElement | HTMLSelectElement>element;\n        (<HTMLInputElement | HTMLSelectElement>(\n          copied.querySelector(\n            `[name$=\"[${(htmlEl.name.match(/\\b\\w+/g) || []).pop()}]\"]`\n          )\n        )).value = htmlEl.value;\n      });\n\n    initializeTomSelect(copied.querySelectorAll('select.tom-select'));\n    getStimulusController('odoslana-zalohova-fakturas')?.updatePozicia(\n      '.invoiced-item'\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"paginations\"\nexport default class extends Controller {\n  connect() {\n    this.observer = new IntersectionObserver(this.observePagination, {\n      threshold: 0,\n      rootMargin: '300px',\n    });\n\n    this.observer.observe(this.element); // .pagination NodeElement\n  }\n\n  disconnect() {\n    this.observer.unobserve(this.element);\n  }\n\n  observePagination(entries, observer) {\n    const [entry] = entries;\n\n    if (!entry.isIntersecting) return;\n\n    const nextPage = entry.target.querySelector('a.next_page');\n    const url = nextPage?.getAttribute('href');\n\n    if (!url) return;\n\n    entry.target\n      .querySelector('td.loading-pagination')\n      .removeAttribute('hidden');\n    entry.target.querySelector('div.pagination').text = '';\n\n    makeRequest(url)\n      .then(response => {\n        entry.target.setAttribute('id', 'pagination');\n\n        return new Promise(resolve => {\n          window.Turbo.renderStreamMessage(response.turbo_stream);\n\n          resolve(response);\n        });\n      })\n      .then(response => {\n        window.Turbo.renderStreamMessage(response.pagination);\n\n        observer.unobserve(entry.target);\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"partners\"\nexport default class extends Controller {\n  static targets = [\n    'companyName',\n    'ico',\n    'dic',\n    'vat',\n    'street',\n    'town',\n    'zip',\n    'code',\n    'internalName',\n    'vatPayer'\n  ];\n\n  declare readonly companyNameTarget: HTMLInputElement;\n  declare readonly icoTarget: HTMLInputElement;\n  declare readonly dicTarget: HTMLInputElement;\n  declare readonly vatTarget: HTMLInputElement;\n  declare readonly streetTarget: HTMLInputElement;\n  declare readonly townTarget: HTMLInputElement;\n  declare readonly zipTarget: HTMLInputElement;\n  declare readonly codeTarget: HTMLInputElement;\n  declare readonly internalNameTarget: HTMLInputElement;\n  declare readonly vatPayerTarget: HTMLInputElement;\n\n  companyLookupTimeout?: number;\n  companyLookupRequest?: AbortController;\n  lastCompanyIco?: string;\n  warnedAboutEditing = false;\n\n  connect() {}\n\n  loadCompany() {\n    const ico = this.icoTarget.value.replace(/\\D/g, '');\n    window.clearTimeout(this.companyLookupTimeout);\n\n    if (ico.length < 8 || ico === this.lastCompanyIco) return;\n\n    this.companyLookupTimeout = window.setTimeout(async () => {\n      this.companyLookupRequest?.abort();\n      this.companyLookupRequest = new AbortController();\n\n      try {\n        const response = await fetch(\n          `/partners/biz-data?ico=${encodeURIComponent(ico)}`,\n          {\n            headers: { Accept: 'application/json' },\n            signal: this.companyLookupRequest.signal\n          }\n        );\n        if (!response.ok) return;\n\n        const company = await response.json();\n        this.lastCompanyIco = ico;\n\n        if (company.obchodne_meno) {\n          this.companyNameTarget.value = company.obchodne_meno;\n          this.internalNameTarget.value = company.obchodne_meno.substring(\n            0,\n            29\n          );\n        }\n\n        this.dicTarget.value = company.dic || '';\n\n        if (company.icdph) {\n          this.vatTarget.value = company.icdph.replace(/\\D/g, '');\n          this.codeTarget.value = company.icdph.replace(/[^a-zA-Z]/g, '');\n          this.vatPayerTarget.checked = true;\n        }\n\n        this.streetTarget.value = company.addr_street_nr || '';\n        this.townTarget.value = company.addr_city || '';\n        this.zipTarget.value = company.addr_zip || '';\n        this.vatTarget.dispatchEvent(new Event('keyup', { bubbles: true }));\n      } catch (error) {\n        if (!(error instanceof DOMException && error.name === 'AbortError')) {\n          console.error(error);\n        }\n      }\n    }, 300);\n  }\n\n  warnAboutEditing(e: Event) {\n    if (this.warnedAboutEditing) return;\n\n    const target = e.target as HTMLElement;\n    if (!['INPUT', 'SELECT', 'TEXTAREA'].includes(target.tagName)) return;\n\n    const message = (e.currentTarget as HTMLElement).dataset\n      .partnersWarningMessage;\n\n    if (!message) return;\n\n    this.warnedAboutEditing = true;\n    showToastMessage(message, {\n      type: 'bg-warning',\n      autohide: false\n    });\n  }\n\n  onAddFieldButton(_: Event) {}\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { getJSON } from '../utils';\nimport { openURL } from '../window_manager';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"partners-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  async setMarkedCount() {\n    try {\n      const json = await getJSON('/partners/marked-count');\n      const { count } = json;\n\n      if (count == null) return;\n\n      this.element.querySelectorAll('.marked-count').forEach(element => {\n        element.innerHTML = count;\n      });\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showMerge() {\n    openURL('/partners/merge-partners', { parentUrl: new URL(location) });\n  }\n\n  openNew() {\n    openURL('/partners/new');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { postFormData } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"partners-merge-partners\"\nexport default class extends Controller {\n  onPartnerChange(e) {\n    const html = Object.values(e.target.tomselect.options)\n      .filter(o => e.target.tomselect.getValue() !== o.value)\n      .map(o => `<li>${o.text}</li>`);\n\n    this.element.querySelector('ul.partners-list').innerHTML = html.join('');\n  }\n\n  async onSubmitForm(e) {\n    e.preventDefault();\n\n    try {\n      const form = this.element.querySelector('form');\n      const formData = new FormData(form);\n      const response = await postFormData(\n        form.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { status, turbo_stream: turboStream } = json;\n\n      if (!status) {\n        window.Turbo.renderStreamMessage(turboStream);\n\n        return;\n      }\n\n      window.close();\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"partners-new\"\nexport default class extends Controller {\n  connect() {}\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { deleteJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n// Connects to data-controller=\"partners-show\"\nexport default class extends Controller {\n  connect() {\n    console.log('asdas');\n  }\n\n  async delete(e) {\n    try {\n      const { confirm: confirmMessage } =\n        e.target.closest('.dropdown-item').dataset;\n\n      if (confirm(confirmMessage)) {\n        const response = await deleteJSON(\n          document.querySelector('form').getAttribute('action')\n        );\n\n        response.status === true\n          ? window.close()\n          : window.Turbo.renderStreamMessage(response.turbo_stream);\n      }\n    } catch (err) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  formatNumber,\n  getJSON,\n  parseNumber,\n  postJSON,\n  eightyPercent,\n  showRecord\n} from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { initializeTomSelect } from '../tom_select';\nimport { popupHelpers, updateDanovyPomerSelectboxes } from '../utils';\n\n// Connects to data-controller=\"pokladnicny-doklads\"\nexport default class extends Controller {\n  static targets = ['sumaEl', 'labelVatEl'];\n\n  #znamienkoEl = this.element.querySelector(\n    'select#pokladnicny_doklad_znamienko'\n  );\n  #partnerEl = this.element.querySelector('#pokladnicny_doklad_partner_id');\n  #pokladnaEl = this.element.querySelector('#pokladnicny_doklad_pokladna_id');\n  #datumUhradyEl = this.element.querySelector(\n    '#pokladnicny_doklad_datum_uhrady'\n  );\n  #cisloEl = this.element.querySelector('input#pokladnicny_doklad_cislo');\n\n  initialize() {\n    Object.assign(this, popupHelpers, { updateDanovyPomerSelectboxes });\n    dayjs.extend(customParseFormat);\n  }\n\n  connect() {\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n\n    import('../show_submit_buttons').then(module => {\n      this.showSubmitButton = module.showSubmitButton.bind(this);\n    });\n\n    import('../add').then(module => {\n      this.addFields = module.addFields.bind(this);\n    });\n\n    import('../delete').then(module => {\n      this.deleteResource = module.deleteResource.bind(this);\n    });\n\n    import('../form_serializer').then(module => {\n      this.serializeFormData = module.serializeFormData.bind(this);\n    });\n\n    const eightyPercCallback = (parentEl, _) => {\n      this.onSumaSDphKeyup({\n        target: parentEl\n          .closest('.pd-polozka')\n          .querySelector('[name$=\"[suma_s_dph]\"]')\n      });\n    };\n\n    Object.assign(this, {\n      showRecord,\n      eightyPercent: e => eightyPercent.call(this, e, eightyPercCallback)\n    });\n  }\n\n  async updateNumbering() {\n    try {\n      const json = await this.#getSampleNumbering();\n      const { number } = json;\n\n      this.#cisloEl.value = number;\n      this.element.querySelector('#pokladnicny_doklad_old_cislo').value =\n        number;\n\n      this.showSubmitButton(this.#cisloEl);\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async #getSampleNumbering() {\n    try {\n      const url = new URL(\n        '/pokladnicny-doklads/get-sample-numbering',\n        location\n      );\n      const datumUhradyVal = this.#datumUhradyEl.value;\n      const znamienkoVal = this.#znamienkoEl.value;\n\n      if (!datumUhradyVal || !znamienkoVal) return;\n\n      return await postJSON(\n        url,\n        {\n          id: this.#pokladnaEl.value,\n          pokladnicny_doklad: {\n            datum_uhrady: datumUhradyVal,\n            znamienko: znamienkoVal\n          }\n        },\n        'PATCH'\n      );\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  open(e) {\n    let url, id;\n\n    switch (e.target.closest('button').dataset.method) {\n      case 'pd-typs':\n        url = new URL('/pd_typs', location);\n        url.searchParams.set('znamienko', this.#znamienkoEl.value);\n\n        break;\n      case 'pokladna':\n        id = this.#pokladnaEl.value;\n        if (id) {\n          url = new URL(`/pokladnas/${id}`, location);\n        } else {\n          url = new URL('/pokladnas/new', location);\n        }\n\n        break;\n      case 'partner':\n        id = this.#partnerEl.value;\n        if (id) {\n          url = new URL(`/partners/${id}`, location);\n        } else {\n          url = new URL('/partners/new', location);\n        }\n\n        break;\n      case 'ciselny-rad':\n        id =\n          this.#pokladnaEl.tomselect.options[\n            this.#pokladnaEl.tomselect.getValue()\n          ].$option.dataset[\n            parseInt(this.#znamienkoEl.value) === 1 ? 'crPrijemId' : 'crVydajId'\n          ];\n\n        url = new URL(`/ciselny_rads/${id}`, location);\n        break;\n      case 'assigned':\n        const data = new FormData(\n          this.element.querySelector('form[id*=\"pokladnicny_doklad\"]')\n        );\n        const partner_id = this.#partnerEl.tomselect.getValue();\n        const invoiced = this.element.querySelector(\n          '#pokladnicny_doklad_suma'\n        ).value;\n\n        url = new URL('/pokladnicny-doklads/assigned', location);\n\n        if (partner_id) {\n          url.searchParams.set('partner_id', partner_id.toString());\n        }\n\n        if (invoiced) {\n          url.searchParams.set('invoiced', invoiced);\n        }\n\n        sessionStorage.setItem(\n          'assigned',\n          JSON.stringify(\n            this.serializeFormData(\n              Object.fromEntries(data),\n              'pokladnicny_doklad'\n            )\n          )\n        );\n        break;\n    }\n\n    this.openURL(url, { parentUrl: new URL(location) });\n  }\n\n  loadUnpaidPrice(e) {\n    const parent = e.target.closest('tr.assigned');\n    const suma_b = parent.querySelector('[name$=\"[suma_b]\"]');\n\n    makeRequest('/pokladnicny-doklads/load-unpaid-price', {\n      method: 'POST',\n      data: {\n        pokladna_id: this.#pokladnaEl.value,\n        data: {\n          okruh_id_a: parent.querySelector('[name$=\"[okruh_id_a]\"]').value,\n          id_a: parent.querySelector('[name$=\"[id_a]\"]').value\n        }\n      }\n    }).then(response => {\n      if (response.unpaid_price <= 0) {\n        suma_b.value = formatNumber(0);\n        showToastMessage(response.message);\n      } else {\n        suma_b.value = formatNumber(response.unpaid_price);\n      }\n\n      suma_b.dispatchEvent(new Event('keyup', { bubbles: true }));\n    });\n  }\n\n  deductUpToRecordPrice(e) {\n    const parentEl = e.target.closest('tr.assigned');\n    const sumaBEl = parentEl.querySelector('[name$=\"[suma_b]\"]');\n    const price = Array.from(\n      this.element.querySelectorAll('#pd_polozkas .pd-polozka')\n    ).reduce((acc, item) => {\n      if (\n        [\n          this.element.querySelector('#uhrada_faktury_prijem_id').value,\n          this.element.querySelector('#uhrada_faktury_vydaj_id').value\n        ].includes(item.querySelector('[name$=\"[pd_typ_id]\"]').value)\n      ) {\n        const sum = Array.from(\n          item.querySelectorAll('table#assigned tr.assigned'),\n          tr => {\n            return parseNumber(tr.querySelector('[name$=\"[suma_b]\"]').value);\n          }\n        ).reduce((acc2, value) => {\n          if (assigned === parentEl) return acc2;\n\n          return acc2 + value;\n        }, 0);\n\n        return acc + sum;\n      }\n\n      return acc + parseNumber(item.querySelector('[name$=\"[suma]\"]').value);\n    }, 0);\n\n    const difference = parseNumber(this.sumaElTarget.value) - price;\n\n    sumaBEl.value = formatNumber(difference);\n    sumaBEl.dispatchEvent(new Event('keyup', { bubbles: true }));\n  }\n\n  onDeleteResourceButton(e) {\n    this.deleteResource(\n      e.target.closest('.delete-resource'),\n      (parent_name, parent) => {\n        switch (parent_name) {\n          case 'pd-polozka':\n            const visibleItems = document.querySelectorAll(\n              '.pd-polozka:not([style=\"display: none;\"])'\n            );\n\n            if (\n              [\n                document.querySelector('#uhrada_faktury_prijem_id').value,\n                document.querySelector('#uhrada_faktury_vydaj_id').value\n              ].includes(\n                parent\n                  .querySelector('[name$=\"[pd_typ_id]\"]')\n                  .tomselect.getValue()\n              )\n            ) {\n              parent\n                .querySelectorAll(\n                  'table#assigned tr.assigned input[name$=\"[_destroy]\"]'\n                )\n                .forEach(input => {\n                  input.value = 'true';\n                });\n\n              if (visibleItems.length === 0) {\n                this.#partnerEl.tomselect\n                  ? this.#partnerEl.tomselect.enable()\n                  : this.#partnerEl.removeAttribute('disabled');\n                document\n                  .querySelector('input[name$=\"[partner_id]\"]')\n                  .setAttribute('disabled', 'disabled');\n              }\n            }\n\n            if (\n              visibleItems.length === 1 &&\n              ![\n                document.querySelector('#uhrada_faktury_prijem_id').value,\n                document.querySelector('#uhrada_faktury_vydaj_id').value\n              ].includes(\n                visibleItems[0]\n                  .querySelector('[name$=\"[pd_typ_id]\"]')\n                  .tomselect.getValue()\n              ) &&\n              visibleItems[0].querySelector('[name$=\"[suma_s_dph]\"]').value ===\n                ''\n            ) {\n              visibleItems[0].querySelector('[name$=\"[suma_s_dph]\"]').value =\n                this.sumaElTarget.value;\n            }\n\n            if (visibleItems.length === 0) {\n              this.#znamienkoEl.tomselect.enable();\n\n              const input = document.querySelector(\n                'input#pokladnicny_doklad_znamienko'\n              );\n              if (input) {\n                input.remove();\n              }\n            }\n            this.calcSumCount();\n\n            break;\n\n          default:\n            this.calcSumCount();\n        }\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onAddFieldButton(e) {\n    this.addFields(\n      e.target.closest('.add-fields'),\n      (copiedDiv, lastElBeforeInsert) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          if (copiedDiv.classList.contains('pd-polozka')) {\n            this.addPdPolozka(copiedDiv);\n          }\n\n          copiedDiv = copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  async #setPkart(copiedDiv) {\n    if (\n      !document.querySelector('form#new_pokladnicny_doklad') ||\n      this.#znamienkoEl.value !== '-1' ||\n      !this.#datumUhradyEl.value ||\n      !this.sumaElTarget.value\n    )\n      return;\n\n    try {\n      const url = new URL('/bank-vypises/check-5-upcoming-days', location);\n\n      url.searchParams.set('date', this.#datumUhradyEl.value);\n      url.searchParams.set('amount', parseNumber(this.sumaElTarget.value));\n\n      window.tempCopiedDiv = copiedDiv;\n\n      const response = await getJSON(url);\n\n      if (!response.exists) return;\n\n      const pkartEl = [...this.#pokladnaEl.options]\n        .filter(option => option.text === 'Pkart')\n        .pop();\n\n      if (!pkartEl) return;\n\n      this.#pokladnaEl.tomselect.setValue(pkartEl.value);\n      window.Turbo.renderStreamMessage(response.turbo_stream);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  #setCentVyr(copiedDiv) {\n    if (!this.sumaElTarget.value) return;\n\n    const pdTypEl = copiedDiv.querySelector('[name$=\"[pd_typ_id]\"]');\n    const centVyrOpt = [...pdTypEl.options]\n      .filter(opt => opt.text === 'Centov\u00E9 vyrovnanie')\n      .pop();\n\n    if (!centVyrOpt) return;\n\n    pdTypEl.tomselect.setValue(centVyrOpt.value);\n    this.onPdTypChange({ target: pdTypEl });\n  }\n\n  addPdPolozka(copiedDiv) {\n    const sumaSdphEl = copiedDiv.querySelector('[name$=\"[suma_s_dph]\"]');\n    const sumaSdphEls = this.element.querySelectorAll(\n      `#pd_polozkas input[name$=\"[suma_s_dph]\"], #pd_polozkas input[name$=\"[suma_b]\"]`\n    );\n\n    const currentSum = [...sumaSdphEls]\n      .filter(el => !el.closest('.pd-polozka[style=\"display: none;\"]'))\n      .filter(el => el !== copiedDiv.querySelector('[name$=\"[suma_s_dph]\"]'))\n      .reduce((acc, el) => {\n        return acc + parseNumber(el.value);\n      }, 0);\n\n    const sumDiff = parseNumber(this.sumaElTarget.value) - currentSum;\n\n    sumDiff > 0.2 ? this.#setPkart(copiedDiv) : this.#setCentVyr(copiedDiv);\n    sumaSdphEl.value = formatNumber(sumDiff);\n\n    this.onSumaSDphKeyup({ target: sumaSdphEl }); // init\n    this.calcSumCount();\n\n    copiedDiv.querySelector('[name$=\"[pd_typ_id]\"]').tomselect.focus();\n  }\n\n  #disableZnamienkoEl() {\n    if (displayedItems.length === 1) {\n      this.onSumaSDphKeyup({ target: sumaSdphEl });\n\n      znamienkoEl.insertAdjacentHTML(\n        'afterend',\n        `<input hidden=\"hidden\" name=\"pokladnicny_doklad[znamienko]\" id=\"pokladnicny_doklad_znamienko\" value=${znamienkoEl.value} />`\n      );\n      znamienkoEl.tomselect.disable();\n    }\n  }\n\n  remoteAddField(e) {\n    this.element.querySelector('#pd_polozkas a.add-fields').click();\n  }\n\n  calcSumCount() {\n    const visibleItems = this.element.querySelectorAll(\n      '#pd_polozkas .pd-polozka:not([style=\"display: none;\"])'\n    );\n\n    const sums = Array.from(visibleItems).reduce(\n      (acc, item) => {\n        if (\n          [\n            document.querySelector('#uhrada_faktury_prijem_id').value,\n            document.querySelector('#uhrada_faktury_vydaj_id').value\n          ].includes(\n            item.querySelector('[name$=\"[pd_typ_id]\"]').tomselect.getValue()\n          )\n        ) {\n          item.querySelectorAll('input[name$=\"[suma_b]\"]').forEach(suma_b => {\n            if (\n              suma_b\n                .closest('tr.assigned')\n                .querySelector('[name$=\"[_destroy]\"]').value !== 'true'\n            ) {\n              acc.without_vat += parseNumber(suma_b.value);\n              acc.with_vat += parseNumber(suma_b.value);\n            }\n          });\n\n          return acc;\n        }\n\n        acc.with_vat += parseNumber(\n          item.querySelector('[name$=\"[suma_s_dph]\"]').value\n        );\n        acc.without_vat += parseNumber(\n          item.querySelector('[name$=\"[suma_bez_dph]\"]').value\n        );\n\n        return acc;\n      },\n      { without_vat: 0.0, with_vat: 0.0 }\n    );\n\n    const stockItemsWithoutVat = parseNumber(\n      this.element.querySelector('#label-stock-items-without-vat').innerHTML\n    );\n    const stockItemsWithVat = parseNumber(\n      this.element.querySelector('#label-stock-items-with-vat').innerHTML\n    );\n\n    console.log('sums.with_vat: ', sums.with_vat);\n    console.log('stockItemsWithVat: ', stockItemsWithVat);\n\n    this.element.querySelector('#pd_polozka_with_vat').innerHTML = formatNumber(\n      sums.with_vat + stockItemsWithVat\n    );\n\n    this.labelVatElTarget.innerHTML = formatNumber(\n      sums.with_vat -\n        sums.without_vat +\n        (stockItemsWithVat - stockItemsWithoutVat)\n    );\n\n    this.element.querySelector('#pd_polozka_without_vat').innerHTML =\n      formatNumber(sums.without_vat + stockItemsWithoutVat);\n  }\n\n  async onZnamienkoChange(e) {\n    try {\n      this.#updateBtnData();\n      this.onPokladnaChange({ target: this.#pokladnaEl });\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async #updateBtnData() {\n    try {\n      const url = new URL('/pokladnicny-doklads/update-add-field', location);\n\n      url.searchParams.set('class', 'pokladnicny_doklad');\n      url.searchParams.set('target_id', 'pd_polozkas');\n      url.searchParams.set('znamienko', this.#znamienkoEl.value);\n      url.searchParams.set('partner_id', this.#partnerEl.value);\n      url.searchParams.set('pokladna_id', this.#pokladnaEl.value);\n\n      const json = await getJSON(url);\n      const { html } = json;\n\n      window.Turbo.renderStreamMessage(html);\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onPartnerChange(e) {\n    this.#updateBtnData();\n  }\n\n  async onPokladnaChange(e) {\n    try {\n      const json = await this.#getSampleNumbering();\n      const { number, kurz } = json;\n\n      if (!number) return;\n\n      this.#cisloEl.value = number;\n      this.element.querySelector('input#pokladnicny_doklad_old_cislo').value =\n        number;\n      this.element.querySelector('input#pokladnicny_doklad_kurz').value =\n        formatNumber(kurz, 3);\n\n      ['stredisko', 'zakazka', 'cinnost', 'pracovnik'].forEach(name => {\n        document.querySelectorAll(`[name$=\"[${name}_id]\"]`).forEach(elem => {\n          elem.tomselect.setValue(json[`${name}_id`]);\n        });\n      });\n\n      this.showSubmitButton(this.#cisloEl);\n\n      const selectedItem =\n        e.target.tomselect.options[e.target.tomselect.getValue()].$option;\n      this.element.querySelectorAll('.label-cis-mena').forEach(element => {\n        element.innerHTML = selectedItem.dataset.cisMenaKod;\n      });\n\n      const kurzDivEl = this.element.querySelector('#kurz_div');\n      if (selectedItem.dataset.cisMenaId === '1') {\n        kurzDivEl.classList.add('d-none');\n        this.element.querySelector('input#pokladnicny_doklad_kurz').value =\n          formatNumber(1, 3);\n      } else {\n        kurzDivEl.classList.remove('d-none');\n      }\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onPdTypChange(e) {\n    const parentEl = e.target.closest('.pd-polozka');\n    const danovyPomerWrapperEl = parentEl.querySelector(\n      '.danovy-pomer-wrapper'\n    );\n    const danovyPomerEl = parentEl.querySelector('[name$=\"[danovy_pomer_id]\"]');\n    const sumaBEl = parentEl.querySelector('[name$=\"[suma_b]\"]');\n    const selectedOption = e.target.options[e.target.selectedIndex];\n    const { predmet, dphPerc, accounts, danovyPomer } = selectedOption?.dataset;\n\n    if (\n      !parentEl.querySelector('[id*=\"_predmet\"]').value ||\n      Array.from(e.target.options)\n        .flatMap(e => e.dataset.predmet || [])\n        .includes(parentEl.querySelector('[id*=\"_predmet\"]').value)\n    )\n      parentEl.querySelector('[id*=\"_predmet\"]').value = predmet || '';\n\n    if (\n      [\n        this.element.querySelector('#uhrada_faktury_prijem_id').value,\n        this.element.querySelector('#uhrada_faktury_vydaj_id').value\n      ].includes(e.target.value)\n    ) {\n      parentEl.querySelectorAll('.uhrada-div').forEach(element => {\n        element.classList.remove('d-none');\n      });\n\n      parentEl.querySelectorAll('.not-uhrada-div').forEach(element => {\n        element.classList.add('d-none');\n      });\n\n      ['suma_s_dph', 'suma_bez_dph', 'dph'].forEach(name => {\n        parentEl\n          .querySelector(`[name$=\"[${name}]\"]`)\n          .removeAttribute('required');\n      });\n\n      if (sumaBEl) {\n        sumaBEl.setAttribute('required', 'required');\n      }\n\n      danovyPomerWrapperEl.classList.add('d-none');\n    } else {\n      parentEl\n        .querySelectorAll(\n          'table#assigned tr.assigned input[name$=\"[_destroy]\"]'\n        )\n        .forEach(input => {\n          input.value = 'true';\n        });\n\n      parentEl.querySelectorAll('.uhrada-div').forEach(element => {\n        element.classList.add('d-none');\n      });\n\n      parentEl.querySelectorAll('.not-uhrada-div').forEach(element => {\n        element.classList.remove('d-none');\n      });\n\n      ['suma_s_dph', 'suma_bez_dph', 'dph'].forEach(name => {\n        parentEl\n          .querySelector(`[name$=\"[${name}]\"]`)\n          .setAttribute('required', 'required');\n      });\n\n      if (sumaBEl) {\n        sumaBEl.removeAttribute('required');\n      }\n\n      danovyPomerEl.tomselect.setValue(danovyPomer);\n      danovyPomerWrapperEl.classList.remove('d-none');\n    }\n\n    if (!parentEl.querySelector('[name$=\"[id]\"]').value) {\n      const dphPercEl = parentEl.querySelector('input[name$=\"[dph_perc]\"]');\n\n      dphPercEl.value = dphPerc ? formatNumber(dphPerc, 0) : '';\n\n      this.onSumaSDphKeyup({\n        target: dphPercEl\n      });\n      this.calcSumCount();\n    }\n\n    parentEl.querySelector('.synt-analyt-ucet-kod').innerHTML = accounts;\n  }\n\n  onDatumUhradyChange(e) {\n    if (dayjs(e.target.value, 'DD.MM.YYYY', true).isValid()) {\n      this.#pokladnaEl.dispatchEvent(new Event('change', { bubbles: true }));\n      this.updateDanovyPomerSelectboxes();\n    }\n  }\n\n  onSumaSDphKeyup(e) {\n    const parentEl = e.target.closest('.pd-polozka');\n    const sumaSdphEl = parentEl.querySelector('[name$=\"[suma_s_dph]\"]');\n    const sumaBezDphEl = parentEl.querySelector('[name$=\"[suma_bez_dph]\"]');\n    const dphPercVal = parseNumber(\n      parentEl.querySelector('[name$=\"[dph_perc]\"]').value\n    );\n    const dphEl = parentEl.querySelector('[name$=\"[dph]\"]');\n\n    dphEl.value = formatNumber(\n      parseNumber(sumaSdphEl.value) -\n        (parseNumber(sumaSdphEl.value) / (100 + dphPercVal)) * 100\n    );\n\n    parentEl.dataset.lastEdited = 'suma-s-dph';\n    sumaBezDphEl.value = formatNumber(\n      parseNumber(sumaSdphEl.value) - parseNumber(dphEl.value)\n    );\n    this.calcSumCount();\n  }\n\n  onSumaBezDphKeyup(e) {\n    const parentEl = e.target.closest('.pd-polozka');\n    const sumaSdphEl = parentEl.querySelector('[name$=\"[suma_s_dph]\"]');\n    const dphPercVal = parseNumber(\n      parentEl.querySelector('[name$=\"[dph_perc]\"]').value\n    );\n    const dphEl = parentEl.querySelector('[name$=\"[dph]\"]');\n\n    sumaSdphEl.value = formatNumber(\n      (parseNumber(e.target.value) / 100) * (100 + dphPercVal)\n    );\n    dphEl.value = formatNumber(\n      parseNumber(sumaSdphEl.value) - parseNumber(e.target.value)\n    );\n\n    parentEl.dataset.lastEdited = 'suma-bez-dph';\n    this.calcSumCount();\n  }\n\n  onDphKeyup(e) {\n    const parentEl = e.target.closest('.pd-polozka');\n    const sumaSdphEl = parentEl.querySelector('[name$=\"[suma_s_dph]\"]');\n    const sumaBezDph = parentEl.querySelector('[name$=\"[suma_bez_dph]\"]');\n\n    if (parentEl.dataset.lastEdited === 'suma-s-dph') {\n      sumaBezDph.value = formatNumber(\n        parseNumber(sumaSdphEl.value) - parseNumber(e.target.value)\n      );\n    } else {\n      sumaSdphEl.value = formatNumber(\n        parseNumber(sumaBezDph.value) + parseNumber(e.target.value)\n      );\n    }\n\n    this.calcSumCount();\n  }\n\n  onSumaBKeyup(e) {\n    if (e.target.value !== '') {\n      this.calcSumCount();\n    }\n  }\n\n  updateSuma() {\n    const price = Array.from(\n      this.element.querySelectorAll('.pd-polozka:not([style=\"display: none;\"])')\n    ).reduce((acc, el) => {\n      const sumaBEl = el.querySelector('[name$=\"[suma_b]\"]');\n      const sumaSDphEl = el.querySelector('[name$=\"[suma_s_dph]\"]');\n\n      return acc + parseNumber(sumaBEl?.value || sumaSDphEl?.value);\n    }, 0);\n\n    this.sumaElTarget.value = formatNumber(price);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport { updateAdditionalInfo } from '../update_additional_info';\n\n// Connects to data-controller=\"pokladnicny-doklads-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  openFilter() {\n    let url;\n    let filterId = this.element.querySelector(\n      '#filter_filter_pd_filter_id'\n    ).value;\n\n    if (filterId) {\n      url = `/pd_filters/${filterId}.html`;\n    } else {\n      url = '/pd_filters/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  updateInfo(e) {\n    const target = e.target;\n    updateAdditionalInfo(e.target);\n  }\n\n  setMarkedCount() {\n    makeRequest('/pokladnicny-doklads/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(err => {\n        showToastMessage(err, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  openNew(e) {\n    const { url } = e.target.dataset;\n\n    openURL(url ? url : '/pokladnicny_doklads/new');\n  }\n\n  deleteMarked() {\n    makeRequest('/pokladnicny-doklads/delete-marked')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  chargeMarked() {\n    makeRequest('/pokladnicny-doklads/charge-records/4.json')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(err => {\n        showToastMessage(err, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  printList(e) {\n    openURL(\n      `/pd-prints/preview-list/${\n        e.target.closest('.dropdown-item').dataset.groupsOnly\n      }`,\n      { tab: true }\n    );\n  }\n\n  printRecords() {\n    openURL(`/pd-prints/preview-records`, { tab: true });\n  }\n\n  transferMarkedRecords(e) {\n    makeRequest('/pokladnicny-doklads/transfer-marked-records')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(err => {\n        showToastMessage(err, { autohide: false, type: 'bg-danger' });\n      });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { delay } from '../delay';\nimport { postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"pokladnicny-doklads-new\"\nexport default class extends Controller {\n  connect() {\n    this.element.querySelector('#qr_code')?.focus();\n  }\n\n  async processQrCode(e) {\n    const commitButton = this.element.querySelector(\n      '[data-action=\"pokladnicny-doklads#onSubmitButton\"]'\n    );\n\n    try {\n      if (e.keyCode !== 13) return; // Enter\n\n      if (e.target.value === '') {\n        return delay(() => {\n          const date = this.element.querySelector(\n            '#pokladnicny_doklad_datum_uhrady'\n          );\n\n          if (!date) return;\n\n          date.datepicker.element.focus();\n          date.select();\n        }, 250);\n      }\n\n      commitButton.setAttribute('disabled', 'disabled');\n\n      const response = await fetch(\n        'https://ekasa.financnasprava.sk/mdu/api/v1/opd/receipt/find',\n        {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json' },\n          body: JSON.stringify({ receiptId: e.target.value }),\n        }\n      );\n\n      const json = await response.json();\n      const jsonFromEu = await postJSON(\n        '/pokladnicny-doklads/process-qr-code',\n        json\n      );\n\n      const { status, path, turbo_stream: turboStream } = jsonFromEu;\n\n      if (!status) {\n        commitButton.removeAttribute('disabled');\n        window.Turbo.renderStreamMessage(turboStream);\n        return false;\n      }\n\n      if (path) window.location.href = path;\n    } catch (err) {\n      commitButton.removeAttribute('disabled');\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onDatumUhradyChange() {\n    const sumaEl = this.element.querySelector('#pokladnicny_doklad_suma');\n\n    sumaEl.focus();\n    sumaEl.select();\n  }\n\n  onDatumUhradyKeydown(e) {\n    if (e.keyCode === 13 && e.target.value !== '') {\n      delay(() => {\n        this.onDatumUhradyChange();\n      }, 250);\n    }\n  }\n\n  onSumaKeydown(e) {\n    if (e.keyCode === 13 && e.target.value !== '') {\n      this.element.querySelector('#pd_polozkas .add-fields').click();\n    }\n  }\n\n  onDphKeydown(e) {\n    if (e.keyCode === 13 && e.target.value !== '') {\n      this.element.querySelector('form#new_pokladnicny_doklad').submit();\n    }\n  }\n\n  onPdTypChange(e) {\n    const parent = e.target.closest('.pd-polozka');\n    const sumaSDphEl = parent.querySelector('[name$=\"[suma_s_dph]\"]');\n\n    if (!sumaSDphEl) return;\n\n    sumaSDphEl.focus();\n    sumaSDphEl.select();\n  }\n\n  onSumaSDphKeyup(e) {\n    this.onDphKeydown(e);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { parseNumber, showRecord } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"pokladnicny-doklads-show\"\nexport default class extends Controller {\n  connect() {\n    import('../show_submit_buttons').then(show_submit_buttons => {\n      this.boundRegisterKeyupToShowSubmitButton =\n        show_submit_buttons.registerKeyupToShowSubmitButton.bind(this);\n      this.boundRegisterChangeToShowSubmitButton =\n        show_submit_buttons.registerChangeToShowSubmitButton.bind(this);\n\n      this.element.addEventListener(\n        'change',\n        this.boundRegisterChangeToShowSubmitButton\n      );\n      this.element.addEventListener(\n        'keyup',\n        this.boundRegisterKeyupToShowSubmitButton\n      );\n    });\n\n    const newButton = this.element.querySelector(\n      '[href^=\"/pokladnicny_doklads/new\"]'\n    );\n\n    Object.assign(this, { showRecord });\n\n    if (newButton) {\n      newButton.focus();\n    }\n  }\n\n  disconnect() {\n    document.removeEventListener(\n      'keyup',\n      this.boundRegisterKeyupToShowSubmitButton\n    );\n    document.removeEventListener(\n      'change',\n      this.boundRegisterChangeToShowSubmitButton\n    );\n  }\n\n  findUd(e) {\n    e.preventDefault();\n\n    const sumaVal = parseNumber(\n      this.element.querySelector('#pd_polozka_with_vat')?.innerHTML\n    );\n\n    window.open(\n      `/uctovny_doklads?suma_do=${sumaVal}&suma_od=${sumaVal}`,\n      '_blank'\n    );\n  }\n\n  deleteRecord(e) {\n    if (confirm(e.target.dataset.confirm)) {\n      makeRequest(this.element.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          if (response.status && response.status === true) {\n            window.close();\n          } else {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  print(e) {\n    openURL(\n      `/pd-prints/preview-records/${this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}/${e.target.closest('.print').dataset.duplicate}`,\n      { fullscreen: true }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"pop-up\"\nexport default class extends Controller {\n  onSubmitButton() {\n    window.onbeforeunload = null;\n  }\n\n  onStornoButton(e) {\n    window.onbeforeunload = null;\n\n    if (\n      !e.target.hasAttribute('href') &&\n      !window.location.search.includes('backid')\n    )\n      window.close();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { formatNumber, parseNumber, popupHelpers, postJSON } from '../utils';\nimport { addFields } from '../add';\nimport { initializeTomSelect } from '../tom_select';\nimport { deleteResource } from '../delete';\nimport dayjs from 'dayjs';\nimport { showToastMessage } from '../show_toast_message';\nimport { TomSelectElement } from '../types';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { openURL } from '../window_manager';\nimport { abs } from 'mathjs/number';\nimport { delay } from '../delay';\n\n// Connects to data-controller=\"predajkas\"\nexport default class extends Controller {\n  static targets = [\n    'pokladnaEl',\n    'kurzEl',\n    'cisloEl',\n    'originCisloEl',\n    'oldCisloEl',\n    'datumUhradyEl',\n    'partnerEl',\n    'platbaKartouEl',\n    'hotovostEl',\n    'labelWithoutVat',\n    'labelWithVat',\n    'moneyBackEl',\n  ];\n\n  declare readonly pokladnaElTarget: TomSelectElement;\n  declare readonly kurzElTarget: HTMLInputElement;\n  declare readonly cisloElTarget: HTMLInputElement;\n  declare readonly originCisloElTarget: HTMLInputElement;\n  declare readonly oldCisloElTarget: HTMLInputElement;\n  declare readonly datumUhradyElTarget: HTMLInputElement;\n  declare readonly partnerElTarget: HTMLInputElement;\n  declare readonly platbaKartouElTarget: HTMLInputElement;\n  declare readonly hotovostElTarget: HTMLInputElement;\n  declare readonly labelWithoutVatTarget: HTMLSpanElement;\n  declare readonly labelWithVatTarget: HTMLSpanElement;\n  declare readonly moneyBackElTarget: HTMLSpanElement;\n\n  connect() {\n    Object.assign(this, popupHelpers);\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource((<HTMLElement>e.target).closest('.delete-resource'));\n\n    e.preventDefault();\n  }\n\n  onDatumUhradyChange(e: Event) {\n    if (\n      dayjs((<HTMLInputElement>e.target).value, 'DD.MM.YYYY', true).isValid()\n    ) {\n      const changeEvent = new Event('change', { bubbles: true });\n      Object.defineProperty(changeEvent, 'target', {\n        writable: false,\n        value: this.pokladnaElTarget,\n      });\n      this.onPokladnaChange(changeEvent);\n    }\n  }\n\n  async onPokladnaChange(e: Event) {\n    const target = <TomSelectElement>e.target;\n\n    try {\n      const json = await this.#getSampleNumbering();\n      const { number, kurz } = json;\n\n      if (!number) return;\n\n      this.cisloElTarget.value = number;\n      this.oldCisloElTarget.value = number;\n      this.kurzElTarget.value = formatNumber(kurz, 3);\n\n      ['stredisko', 'zakazka', 'cinnost', 'pracovnik'].forEach(name => {\n        this.element\n          .querySelectorAll(`[name$=\"[${name}_id]\"]`)\n          .forEach(elem => {\n            (<TomSelectElement>elem).tomselect.setValue(json[`${name}_id`]);\n          });\n      });\n\n      showSubmitButton(this.cisloElTarget);\n\n      const selectedItem =\n        target.tomselect.options[target.tomselect.getValue()].$option;\n      this.element.querySelectorAll('.label-cis-mena').forEach(element => {\n        element.innerHTML = selectedItem.dataset.cisMenaKod;\n      });\n\n      const kurzDivEl = <HTMLDivElement>this.element.querySelector('#kurz_div');\n      if (selectedItem.dataset.cisMenaId === '1') {\n        kurzDivEl.classList.add('d-none');\n        this.kurzElTarget.value = formatNumber(1, 3);\n      } else {\n        kurzDivEl.classList.remove('d-none');\n      }\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async #getSampleNumbering() {\n    try {\n      const url = new URL(\n        '/pokladnicny-doklads/get-sample-numbering',\n        location.toString()\n      );\n      const datumUhradyVal = this.datumUhradyElTarget.value;\n\n      if (!datumUhradyVal) return;\n\n      return await postJSON(\n        url,\n        {\n          id: this.pokladnaElTarget.value,\n          pokladnicny_doklad: {\n            datum_uhrady: datumUhradyVal,\n            znamienko: 1,\n          },\n        },\n        'PATCH'\n      );\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  open(e: Event) {\n    let url, id;\n\n    switch ((<HTMLElement>e.target).closest('button')!.dataset.method) {\n      case 'pokladna':\n        id = this.pokladnaElTarget.value;\n        if (id) {\n          url = new URL(`/pokladnas/${id}`, location.toString());\n        } else {\n          url = new URL('/pokladnas/new', location.toString());\n        }\n\n        break;\n      case 'partner':\n        id = this.partnerElTarget.value;\n        if (id) {\n          url = new URL(`/partners/${id}`, location.toString());\n        } else {\n          url = new URL('/partners/new', location.toString());\n        }\n\n        break;\n      case 'ciselny-rad':\n        id =\n          this.pokladnaElTarget.tomselect.options[\n            this.pokladnaElTarget.tomselect.getValue()\n          ].$option.dataset['crPrijemId'];\n\n        url = new URL(`/ciselny_rads/${id}`, location.toString());\n        break;\n    }\n\n    if (!url) return;\n\n    openURL(url.toString(), { parentUrl: new URL(location.toString()) });\n  }\n\n  async updateNumbering() {\n    try {\n      const json = await this.#getSampleNumbering();\n      const { number } = json;\n\n      this.cisloElTarget.value = number;\n      this.oldCisloElTarget.value = number;\n\n      showSubmitButton(this.cisloElTarget);\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onHotovostChange(e: Event) {\n    const target = <HTMLInputElement>e.target;\n    const totalValue = parseNumber(this.labelWithVatTarget.innerHTML);\n\n    delay(() => {\n      if (totalValue === parseNumber(this.platbaKartouElTarget.value))\n        return (target.value = formatNumber(0));\n\n      if (\n        abs(totalValue) >\n        abs(parseNumber(target.value)) +\n          abs(parseNumber(this.platbaKartouElTarget.value))\n      ) {\n        this.platbaKartouElTarget.value = formatNumber(\n          totalValue - parseNumber(target.value)\n        );\n      }\n\n      this.moneyBackElTarget.innerHTML = formatNumber(\n        parseNumber(target.value) +\n          parseNumber(this.platbaKartouElTarget.value) -\n          totalValue\n      );\n    }, 700);\n  }\n\n  onPlatbaKartouChange(e: Event) {\n    const target = <HTMLInputElement>e.target;\n    const totalValue = parseNumber(this.labelWithVatTarget.innerHTML);\n\n    delay(() => {\n      if (totalValue === parseNumber(this.hotovostElTarget.value)) {\n        return (target.value = formatNumber(0));\n      }\n\n      if (abs(totalValue) < abs(parseNumber(target.value))) {\n        this.platbaKartouElTarget.value = formatNumber(totalValue);\n        this.hotovostElTarget.value = formatNumber(0);\n      } else {\n        this.hotovostElTarget.value = formatNumber(\n          totalValue - parseNumber(target.value)\n        );\n      }\n\n      this.moneyBackElTarget.innerHTML = formatNumber(\n        parseNumber(target.value) +\n          parseNumber(this.hotovostElTarget.value) -\n          totalValue\n      );\n    }, 700);\n  }\n\n  fillPayment(e: Event) {\n    const target = (<HTMLInputElement>e.target).closest('button');\n    const price = this.element.querySelector(\n      '#label-stock-items-with-vat'\n    )?.innerHTML;\n    const input = <HTMLInputElement>target!.nextElementSibling;\n\n    if (input) input.value = price?.toString() || '';\n\n    const event = new Event('change', { bubbles: true });\n    Object.defineProperty(event, 'target', {\n      writable: false,\n      value: input,\n    });\n\n    input.name.includes('hotovost')\n      ? this.onHotovostChange(event)\n      : this.onPlatbaKartouChange(event);\n\n    showSubmitButton(input);\n  }\n\n  submitAndPrint(e: Event) {\n    e.preventDefault();\n\n    const formEl = <HTMLFormElement>this.element.querySelector('form');\n\n    window.onbeforeunload = null;\n\n    formEl.action = formEl.action + '?print=true';\n    formEl.requestSubmit();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"predajkas-new\"\nexport default class extends Controller {\n  connect() {\n    const url = new URL(location.toString());\n\n    if (url.searchParams.has('print')) {\n      window.location.href = `/predajkas/${url.searchParams.get(\n        'print'\n      )}/export`;\n\n      const newurl =\n        window.location.protocol +\n        '//' +\n        window.location.host +\n        window.location.pathname;\n      window.history.pushState({ path: newurl }, '', newurl);\n    }\n  }\n}\n", "import FormChangesController from './form_changes_controller';\nimport { deleteJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { showRecord } from '../utils';\n\n// Connects to data-controller=\"predajkas-show\"\nexport default class extends FormChangesController {\n  initialize(): void {\n    Object.assign(this, { showRecord });\n  }\n  connect() {\n    super.connect();\n  }\n\n  async deleteRecord(e: Event) {\n    try {\n      const target = <HTMLAnchorElement>(\n        (<HTMLElement>e.target).closest('.dropdown-item')\n      );\n      const { confirm: confirmMessage } = target.dataset;\n\n      if (!confirm(confirmMessage)) return;\n\n      const json = await deleteJSON(\n        `${(<HTMLFormElement>this.element.querySelector('form')).action}.json`\n      );\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n      if (turboStream) window.Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"prev-prikazs\"\nexport default class extends Controller {\n\tconnect() {\n\t\tconst buttonToDelete = document.querySelector('button[data-action=\"zavazoks-index#deletePrevPrikaz\"]');\n\t\tif (this.element.querySelector(\"form[class*=prev_prikaz] input#prev_prikaz_uhradeny\").checked || document.querySelector(\"form.new_prev_prikaz\")) {\n\t\t\tbuttonToDelete.setAttribute(\"disabled\", \"disabled\");\n\t\t} else {\n\t\t\tbuttonToDelete.removeAttribute(\"disabled\");\n\t\t}\n\n\t\tdocument.querySelectorAll('button[data-action=\"zavazoks-index#addToPrevPrikaz\"]').forEach(btn => {\n\t\t\tif ((this.element.querySelector(\"form[class*=prev_prikaz] input#prev_prikaz_uhradeny\").checked && btn.dataset.type === \"add\") || (document.querySelector(\"form.new_prev_prikaz\") && btn.dataset.type === \"new\")) {\n\t\t\t\tbtn.setAttribute(\"disabled\", \"disabled\");\n\t\t\t} else {\n\t\t\t\tbtn.removeAttribute(\"disabled\");\n\t\t\t}\n\t\t});\n\n\t\tconst exportButton = document.querySelector('button[data-action=\"zavazoks-index#export\"]');\n\t\tif (document.querySelector(\"form.new_prev_prikaz\")) {\n\t\t\texportButton.setAttribute(\"disabled\", \"disabled\");\n\t\t} else {\n\t\t\texportButton.removeAttribute(\"disabled\");\n\t\t}\n\t}\n}", "import { Controller } from '@hotwired/stimulus';\nimport { getJSON } from '../utils';\n\n// Connects to data-controller=\"prev-prikazs-index\"\nexport default class extends Controller {}\n", "import { Controller } from '@hotwired/stimulus';\nimport { showSkladovaKarta } from '../utils';\nimport { TomSelectElement } from '../types';\nimport { parseNumber, formatNumber } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { getStimulusController } from '../utils';\n\n// Connects to data-controller=\"prijemka-vydajka-polozkas\"\nexport default class extends Controller {\n  static targets = [\n    'skladovaKartaEl',\n    'cenaJednotkovaEl',\n    'mnozstvoHodnotaEl',\n    'cenaSpoluEl',\n    'mnozstvoJednotkaEl',\n    'poradoveCisloEl',\n    'destroyEl',\n  ];\n\n  static values = {\n    pocetDesMiest: Number,\n  };\n\n  declare readonly skladovaKartaElTarget: TomSelectElement;\n  declare readonly cenaJednotkovaElTarget: HTMLInputElement;\n  declare readonly mnozstvoHodnotaElTarget: HTMLInputElement;\n  declare readonly cenaSpoluElTarget: HTMLInputElement;\n  declare readonly mnozstvoJednotkaElTarget: TomSelectElement;\n  declare readonly pocetDesMiestValue: number;\n  declare readonly poradoveCisloElTarget: HTMLInputElement;\n  declare readonly destroyElTarget: HTMLInputElement;\n\n  initialize(): void {\n    Object.assign(this, { showSkladovaKarta });\n  }\n\n  connect() {}\n\n  selectSkladovaKarta(e: Event) {\n    this.mnozstvoHodnotaElTarget.value = formatNumber(1);\n\n    this.handleUnitMeassures();\n    this.setCenaJednotkova();\n    this.callParentCalc();\n    this.handleDuplicity();\n  }\n\n  callParentCalc() {\n    const pvpContainerController = <Controller & { recalculateSums: Function }>(\n      this.application.getControllerForElementAndIdentifier(\n        document.querySelector('[data-controller=\"pvp-container\"]')!,\n        'pvp-container'\n      )!\n    );\n    pvpContainerController.recalculateSums();\n  }\n\n  setCenaJednotkova() {\n    const { nakupnaCena } = this.selectedSkladovaKartaElOption.dataset;\n\n    this.cenaJednotkovaElTarget.value = formatNumber(nakupnaCena, 4);\n\n    this.setCenaSpolu();\n  }\n\n  handleUnitMeassures() {\n    console.log('handleUnitMeassures');\n\n    const { jednotky, jednotkyKoef } =\n      this.selectedSkladovaKartaElOption.dataset;\n\n    if (jednotky) {\n      this.mnozstvoJednotkaElTarget\n        .querySelectorAll('option')\n        .forEach((option: HTMLOptionElement) => {\n          if (option.value && option.value !== '') {\n            option.remove();\n          }\n        });\n\n      this.mnozstvoJednotkaElTarget.tomselect.clear(false);\n      this.mnozstvoJednotkaElTarget.tomselect.clearOptions(false);\n\n      jednotky.split(',').forEach((key, index) => {\n        let newOption = new Option(key, key, index === 0, index === 0);\n        newOption.dataset.prepocet = jednotkyKoef\n          ? jednotkyKoef.split(',')[index]\n          : '1';\n\n        if (index === 0) {\n          newOption.dataset.zakladna = 'true';\n        }\n\n        this.mnozstvoJednotkaElTarget.append(newOption);\n      });\n\n      this.mnozstvoJednotkaElTarget.tomselect.lastQuery = null;\n      this.mnozstvoJednotkaElTarget.tomselect.refreshItems();\n      this.mnozstvoJednotkaElTarget.tomselect.refreshOptions(false);\n\n      const zakladnaOption = [...this.mnozstvoJednotkaElTarget.options].find(\n        option => option.dataset.zakladna === 'true'\n      );\n\n      if (zakladnaOption) {\n        this.mnozstvoJednotkaElTarget.tomselect.setValue(zakladnaOption.value);\n      }\n    }\n  }\n\n  setCenaJednotkovaByMnozstvoHodnota(e: Event) {\n    const target = <TomSelectElement>e.target;\n    const basicOption = <HTMLOptionElement>(\n      target.querySelector('option[data-zakladna=\"true\"]')\n    );\n\n    if (!basicOption) return;\n\n    const selectedOption = target.options[target.selectedIndex];\n    const { prepocet: selectedPrepocet } = selectedOption.dataset;\n\n    let finalPrice = 0;\n\n    if (!this.cenaJednotkovaElTarget.value) return;\n\n    if (basicOption.value !== target.tomselect.getValue()) {\n      finalPrice =\n        parseNumber(this.cenaJednotkovaElTarget.value) *\n        (parseNumber(selectedPrepocet) *\n          parseNumber(basicOption.dataset.prepocet));\n\n      basicOption.dataset.prepocet = (\n        1 / parseNumber(selectedPrepocet)\n      ).toString();\n    } else {\n      finalPrice =\n        parseNumber(this.cenaJednotkovaElTarget.value) *\n        parseNumber(selectedPrepocet);\n\n      basicOption.dataset.prepocet = '1';\n    }\n\n    this.cenaJednotkovaElTarget.value = formatNumber(\n      finalPrice,\n      this.pocetDesMiestValue\n    );\n\n    this.setCenaSpolu();\n  }\n\n  setCenaSpolu() {\n    this.cenaSpoluElTarget.value = formatNumber(\n      parseNumber(this.mnozstvoHodnotaElTarget.value) *\n        parseNumber(this.cenaJednotkovaElTarget.value),\n      this.pocetDesMiestValue\n    );\n\n    this.callParentCalc();\n  }\n\n  handleDuplicity() {\n    const containerController = getStimulusController(\n      'pvp-container',\n      this.element.closest('[data-controller=\"pvp-container\"]')\n    );\n\n    const arr = [...containerController.prijemkaVydajkaPolozkasOutlets].map(\n      item => {\n        if (item === this) return null;\n\n        return item.destroyElTarget.value === 'false'\n          ? item.skladovaKartaElTarget.value\n          : null;\n      }\n    );\n\n    if (arr.some(item => item === this.skladovaKartaElTarget.value)) {\n      showToastMessage(this.skladovaKartaElTarget.dataset.duplicityMessage, {\n        autohide: true,\n        type: 'bg-warning',\n      });\n    }\n  }\n\n  private get selectedSkladovaKartaElOption() {\n    return this.skladovaKartaElTarget.options[\n      this.skladovaKartaElTarget.selectedIndex\n    ];\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { getStimulusController, popupHelpers } from '../utils';\nimport { addFields } from '../add';\nimport { initializeTomSelect } from '../tom_select';\nimport { deleteResource } from '../delete';\nimport { openURL } from '../window_manager';\nimport { TomSelectElement } from '../types';\nimport { postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { showSubmitButton } from '../show_submit_buttons';\n\n// Connects to data-controller=\"prijemka-vydajkas\"\nexport default class extends Controller {\n  static targets = [\n    'evidenciaEl',\n    'partnerEl',\n    'znamienkoEl',\n    'cisloEl',\n    'oldCisloEl',\n    'datumEl',\n  ];\n\n  declare readonly evidenciaElTarget: TomSelectElement;\n  declare readonly partnerElTarget: TomSelectElement;\n  declare readonly znamienkoElTarget: TomSelectElement;\n  declare readonly cisloElTarget: HTMLInputElement;\n  declare readonly oldCisloElTarget: HTMLInputElement;\n  declare readonly datumElTarget: HTMLInputElement;\n\n  initialize(): void {\n    Object.assign(this, popupHelpers);\n  }\n\n  connect() {}\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource(\n      (<HTMLElement>e.target).closest('.delete-resource'),\n      (parent_name: string, parent: HTMLDivElement) => {\n        switch (parent_name) {\n          case 'prijemka-vydajka-polozka':\n            getStimulusController(\n              'pvp-container',\n              parent.closest('[data-controller=\"pvp-container\"]')\n            )?.recalculateSums();\n            break;\n        }\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  remoteAddField(e: Event) {\n    (\n      this.element.querySelector(\n        '#prijemka_vydajka_polozkas a.add-fields'\n      ) as HTMLButtonElement\n    ).click();\n  }\n\n  showSklad() {\n    openURL(`/sklads/${this.selectedSkladId}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n\n  showCiselnyRad() {\n    openURL(`/ciselny_rads/${this.selectedCiselnyRadId}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n\n  showPartner() {\n    openURL(`/partners/${this.selectedPartnerId}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n\n  async updateNumbering() {\n    try {\n      const json = await this.#getSampleNumbering();\n      const { level1 } = json;\n\n      this.cisloElTarget.value = level1;\n      this.oldCisloElTarget.value = level1;\n\n      showSubmitButton(this.cisloElTarget);\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onSkladChange() {\n    ['stredisko', 'zakazka', 'cinnost', 'pracovnik'].forEach(key => {\n      const select = <TomSelectElement>(\n        this.element.querySelector(`select#prijemka_vydajka_${key}_id`)\n      );\n\n      if (!select) return;\n\n      select.tomselect.setValue(\n        this.selectedEvidencia?.dataset[`${key}Id`] || ''\n      );\n    });\n  }\n\n  get selectedPartnerId(): string {\n    return this.partnerElTarget.value || 'new';\n  }\n\n  get selectedCiselnyRadId(): string {\n    return (\n      this.selectedEvidencia?.dataset[\n        this.znamienkoElTarget.value === '1'\n          ? 'ciselnyRadPrijem'\n          : 'ciselnyRadVydaj'\n      ] || 'new'\n    );\n  }\n\n  get selectedSkladId(): string {\n    return this.selectedEvidencia?.dataset?.skladId || 'new';\n  }\n\n  get selectedEvidencia() {\n    return this.evidenciaElTarget.options[this.evidenciaElTarget.selectedIndex];\n  }\n\n  async #getSampleNumbering() {\n    try {\n      const url = new URL(\n        '/ciselny_rads/get-sample-numbering',\n        location.toString()\n      );\n\n      if (!this.datumElTarget.value) return;\n\n      return await postJSON(\n        url,\n        {\n          ciselny_rad_id: this.selectedCiselnyRadId,\n          datum: this.datumElTarget.value,\n        },\n        'PATCH'\n      );\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { setBackground, removeBackground } from '../fakt_sklad_polozkies_utils';\n\n// Connects to data-controller=\"prijemka-vydajkas-fakt-sklad-polozkies-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  initialize(): void {\n    Object.assign(this, { setBackground, removeBackground });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e: Event) {\n    updateAdditionalInfo(e.target);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"prijemka-vydajkas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e: Event) {\n    updateAdditionalInfo(e.target);\n  }\n\n  open(e: Event) {\n    const target = e.target as HTMLElement;\n    const button = target.closest('button');\n\n    if (!button) return;\n\n    const { href } = button.dataset;\n\n    if (!href) return;\n\n    openURL(href);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"prijemka-vydajkas-new\"\nexport default class extends Controller {\n  connect() {}\n}\n", "import FormChangesController from './form_changes_controller';\nimport { deleteJSON, showRecord } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"prijemka-vydajkas-show\"\nexport default class extends FormChangesController {\n  initialize(): void {\n    Object.assign(this, { showRecord, open });\n  }\n\n  connect() {\n    super.connect();\n  }\n\n  async deleteRecord(e: Event) {\n    try {\n      const target = <HTMLAnchorElement>(\n        (<HTMLElement>e.target).closest('.dropdown-item')\n      );\n      const { confirm: confirmMessage } = target.dataset;\n\n      if (!confirm(confirmMessage)) return;\n\n      const json = await deleteJSON(\n        `${(<HTMLFormElement>this.element.querySelector('form')).action}.json`\n      );\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n      if (turboStream) window.Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"print-settings\"\nexport default class extends Controller {\n  async update() {\n    try {\n      const list = <Array<HTMLSelectElement | HTMLInputElement>>[\n        ...this.element.querySelectorAll(\n          '.form-check-input, .form-control, select.tom-select'\n        ),\n      ];\n\n      const data = list.reduce((data, el) => {\n        el.nodeName === 'INPUT' && el.type === 'checkbox'\n          ? (data[el.name] = el.checked)\n          : (data[el.name] = el.value);\n\n        return data;\n      }, {} as Record<string, string | boolean | number>);\n\n      const json = await postJSON('/of-print-settings', data, 'PATCH');\n      const { message } = json;\n\n      if (message) showToastMessage(message);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport PrijemkaVydajkaPolozkasController from './prijemka_vydajka_polozkas_controller';\nimport { parseNumber, formatNumber } from '../utils';\n\n// Connects to data-controller=\"pvp-container\"\nexport default class extends Controller {\n  static targets = ['price', 'count'];\n  static outlets: string[] = ['prijemka-vydajka-polozkas'];\n\n  declare readonly priceTarget: HTMLSpanElement;\n  declare readonly countTarget: HTMLSpanElement;\n  declare readonly prijemkaVydajkaPolozkasOutlets: PrijemkaVydajkaPolozkasController[];\n  declare readonly prijemkaVydajkaPolozkasOutletElements: HTMLElement[];\n  declare readonly hasPrijemkaVydajkaPolozkasOutlet: boolean;\n\n  connect() {}\n\n  prijemkaVydajkaPolozkasOutletConnected(\n    outlet: PrijemkaVydajkaPolozkasController,\n    _: HTMLElement\n  ) {\n    if (outlet.poradoveCisloElTarget.value) return;\n\n    outlet.poradoveCisloElTarget.value = (this.lastVisibleItemNumber + 1)\n      .toString()\n      .padStart(3, '0');\n  }\n\n  recalculateSums() {\n    const result = this.prijemkaVydajkaPolozkasOutlets.reduce(\n      (acc, outlet) => {\n        if (outlet.destroyElTarget.value === 'true') return acc;\n\n        acc.price += parseNumber(outlet.cenaSpoluElTarget.value);\n        acc.count += 1;\n\n        return acc;\n      },\n      { price: 0, count: 0 }\n    );\n\n    this.priceTarget.textContent = formatNumber(result.price);\n    this.countTarget.textContent = result.count.toString();\n  }\n\n  get lastVisibleItemNumber() {\n    return parseInt(\n      this.prijemkaVydajkaPolozkasOutlets\n        .slice(0, -1)\n        .filter(i => i.destroyElTarget.value !== 'true')\n        .pop()?.poradoveCisloElTarget.value || '0'\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\nexport default class extends Controller {\n  static targets = ['submit'];\n  static values = { siteKey: String };\n\n  initialize() {}\n\n  connect() {\n    // Ensure submit button is disabled on connect\n    this.disableSubmit();\n\n    // Store controller instance for global callback\n    window.recaptchaController = this;\n\n    // Load script with callback\n    this.loadRecaptchaScript();\n  }\n\n  renderRecaptcha() {\n    if (window.grecaptcha && document.getElementById('recaptcha')) {\n      try {\n        window.grecaptcha.render('recaptcha', {\n          sitekey: this.siteKeyValue,\n          callback: 'enableSubmitBtn',\n          'expired-callback': 'disableSubmitBtn'\n        });\n      } catch (e) {\n        console.error('Failed to render reCAPTCHA:', e);\n      }\n    }\n  }\n\n  resetRecaptchaIfNeeded() {\n    // Check if form has error messages (indicating a failed submission)\n    const hasErrors = document.querySelector('#error_explanation');\n\n    if (hasErrors && window.grecaptcha) {\n      // Reset all reCAPTCHA widgets on the page\n      const widgets = document.querySelectorAll('.g-recaptcha');\n      widgets.forEach((widget, index) => {\n        try {\n          grecaptcha.reset(index);\n        } catch (e) {\n          console.warn('Failed to reset reCAPTCHA widget:', e);\n        }\n      });\n\n      // Re-disable submit button after reset\n      this.disableSubmit();\n    }\n  }\n\n  loadRecaptchaScript() {\n    // Check if script is already loaded\n    if (window.grecaptcha) {\n      this.renderRecaptcha();\n      return;\n    }\n\n    // Check if script tag already exists\n    if (document.querySelector('script[src*=\"recaptcha/api.js\"]')) {\n      return;\n    }\n\n    // Define global callback that Google will call when ready\n    window.onRecaptchaLoad = () => {\n      if (window.recaptchaController) {\n        window.recaptchaController.renderRecaptcha();\n      }\n    };\n\n    // Create and load the script with onload callback\n    const script = document.createElement('script');\n    script.src =\n      'https://www.google.com/recaptcha/api.js?hl=sk&onload=onRecaptchaLoad&render=explicit';\n    script.async = true;\n    script.defer = true;\n    document.head.appendChild(script);\n  }\n\n  enableSubmit() {\n    if (this.hasSubmitTarget) {\n      this.submitTarget.disabled = false;\n    }\n  }\n\n  disableSubmit() {\n    if (this.hasSubmitTarget) {\n      this.submitTarget.disabled = true;\n    }\n  }\n}\n\n// Make functions available globally for reCAPTCHA callbacks\nwindow.enableSubmitBtn = function () {\n  const controller = document.querySelector('[data-controller=\"recaptcha\"]');\n  if (controller) {\n    const stimulusController = Stimulus.getControllerForElementAndIdentifier(\n      controller,\n      'recaptcha'\n    );\n    if (stimulusController) {\n      stimulusController.enableSubmit();\n    }\n  }\n};\n\nwindow.disableSubmitBtn = function () {\n  const controller = document.querySelector('[data-controller=\"recaptcha\"]');\n  if (controller) {\n    const stimulusController = Stimulus.getControllerForElementAndIdentifier(\n      controller,\n      'recaptcha'\n    );\n    if (stimulusController) {\n      stimulusController.disableSubmit();\n    }\n  }\n};\n", "import { Controller } from '@hotwired/stimulus';\nimport dayjs from 'dayjs';\nimport dayjsQuarter from 'dayjs/plugin/quarterOfYear';\n\n// Connects to data-controller=\"record-counting\"\nexport default class extends Controller {\n  static targets = ['datumDuupOd', 'datumDuupDo'];\n\n  declare readonly datumDuupOdTarget: HTMLInputElement;\n  declare readonly datumDuupDoTarget: HTMLInputElement;\n\n  initialize() {\n    dayjs.extend(dayjsQuarter);\n  }\n\n  prevQuarter(e: Event) {\n    e.preventDefault();\n\n    const currentQ = dayjs().quarter();\n\n    this.datumDuupOdTarget.value = dayjs()\n      .quarter(currentQ - 1)\n      .startOf('quarter')\n      .format('DD.MM.YYYY');\n    this.datumDuupDoTarget.value = dayjs()\n      .quarter(currentQ - 1)\n      .endOf('quarter')\n      .format('DD.MM.YYYY');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { getJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"remote-document\"\nexport default class extends Controller {\n  static targets = ['textField'];\n\n  declare textFieldTarget: HTMLInputElement;\n\n  openUrl() {\n    window.open(this.textFieldTarget.value, '_blank');\n  }\n\n  async updateWindow() {\n    const { resource } = this.textFieldTarget.dataset;\n\n    const url = new URL(\n      `/${resource}/update_remote_document_view.json`,\n      location.toString()\n    );\n\n    url.searchParams.set('remote_document', this.textFieldTarget.value);\n\n    try {\n      const response = await getJSON(url.toString());\n\n      window.Turbo.renderStreamMessage(response.turbo_stream);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { fillEvidOnOkruhChange } from '../fill_evid_on_okruh_change';\nimport { getJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { updateAdditionalInfo } from '../update_additional_info';\n\n// Connects to data-controller=\"saldokontos-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  async onOkruhChange(e) {\n    await fillEvidOnOkruhChange(e.target);\n    await fillCiselnyRadOnEvidChange(\n      this.element.querySelector('#filter_filter_uctovny_doklad_evidencia_id')\n    );\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  onDatumDuupDoChange(e) {\n    ['filter_filter_datum_uhrady_do', 'filter_filter_splatnost'].forEach(\n      name => {\n        if (e.target.value === '' && name === 'filter_filter_splatnost') {\n          return;\n        }\n\n        this.element.querySelector(`input#${name}`).value = e.target.value;\n      }\n    );\n  }\n\n  async openNew() {\n    try {\n      const url = new URL('/saldokontos/new-uctovny-doklad', location);\n      const response = await getJSON(url);\n\n      if (!response.status) return;\n\n      openURL(response.path);\n    } catch (err) {\n      showToastMessage(err.message, {\n        autohide: false,\n        type: 'bg-danger',\n      });\n    }\n  }\n\n  printList(e) {\n    openURL(\n      `/saldo-prints/preview-list/${\n        e.target.closest('.dropdown-item').dataset.groupsOnly\n      }`,\n      { tab: true }\n    );\n  }\n\n  async reset(e) {\n    try {\n      const json = await getJSON('/saldokontos/reset');\n      const { status, message } = json;\n\n      status\n        ? showToastMessage(message)\n        : showToastMessage(message, { autohide: false, type: 'bg-danger' });\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\nimport FormChangesController from './form_changes_controller';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"sk-kategs\"\nexport default class extends FormChangesController {\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n\n  connect() {\n    super.connect();\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource((<HTMLElement>e.target).closest('.delete-resource'));\n\n    e.preventDefault();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { delay } from '../delay';\nimport { showToastMessage } from '../show_toast_message';\nimport { getJSON } from '../utils';\nimport { initializeTomSelect } from '../tom_select';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\nimport FaktSkladPolozkiesController from './fakt_sklad_polozkies_controller';\n\n// Connects to data-controller=\"sk-quick-search\"\nexport default class extends Controller {\n  dodavatel = <HTMLSelectElement>(\n    document.querySelector('[name$=\"[dodavatel_id]\"]')\n  );\n\n  pokladna = <HTMLSelectElement>(\n    document.querySelector('[name$=\"[pokladna_id]\"]')\n  );\n\n  static targets = [\n    'kodPlu',\n    'nazov',\n    'techParameterId',\n    'techParameterHodnota',\n    'list',\n  ];\n\n  static outlets: string[] = ['add-fields'];\n\n  declare readonly kodPluTarget: HTMLInputElement;\n  declare readonly hasKodPluTarget: boolean;\n  declare readonly nazovTarget: HTMLInputElement;\n  declare readonly techParameterIdTarget: HTMLSelectElement;\n  declare readonly techParameterHodnotaTarget: HTMLInputElement;\n  declare readonly listTarget: HTMLDivElement;\n\n  connect() {\n    this.resize();\n\n    document.addEventListener('hidden.bs.offcanvas', this.reduce.bind(this));\n\n    if (!this.hasKodPluTarget) return;\n\n    this.kodPluTarget.focus();\n    this.kodPluTarget.select();\n  }\n\n  disconnect() {\n    this.removeEventListener();\n  }\n\n  reduce() {\n    this.resize(false);\n    this.removeEventListener();\n  }\n\n  removeEventListener() {\n    document.removeEventListener('hidden.bs.offcanvas', this.reduce.bind(this));\n  }\n\n  resize(enlarge = true) {\n    const cardBodyEl = <HTMLDivElement>document.querySelector('.card-body');\n\n    if (!cardBodyEl) return;\n\n    cardBodyEl.style.height = enlarge\n      ? `${cardBodyEl.offsetHeight * 2}px`\n      : `${cardBodyEl.offsetHeight / 2}px`;\n  }\n\n  updateFilter(e: KeyboardEvent) {\n    try {\n      const target = <HTMLElement>e.target;\n\n      if (e.key === 'Enter') {\n        target.classList.add('active-input');\n        const activeRow = this.element.querySelector('.table-active');\n\n        if (activeRow)\n          activeRow.dispatchEvent(new Event('click', { bubbles: true }));\n\n        return;\n      }\n\n      delay(async () => {\n        const response = await getJSON(this.url);\n        this.listTarget.innerHTML = response.html;\n      }, 500);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  activate(e: MouseEvent) {\n    this.element.querySelectorAll('table tbody tr').forEach(tr => {\n      tr.classList.remove('table-active');\n    });\n\n    (<HTMLTableRowElement>e.target).classList.add('table-active');\n  }\n\n  private get url() {\n    const url = new URL(\n      '/skladova_kartas/ziskaj-podla-filtra',\n      location.toString()\n    );\n\n    url.searchParams.set(\n      'okruh_id',\n      (<HTMLInputElement>document.querySelector('#okruh_id')).value\n    );\n    url.searchParams.set('kod_plu', this.kodPluTarget.value);\n    url.searchParams.set('nazov', this.nazovTarget.value);\n    url.searchParams.set(\n      'sk_tech_parameter_hodnota',\n      this.techParameterHodnotaTarget.value\n    );\n    url.searchParams.set('tech_parameter_id', this.techParameterIdTarget.value);\n\n    this.appendUrl(url);\n\n    return url;\n  }\n\n  private appendUrl(url: URL) {\n    if (this.dodavatel) url.searchParams.set('doklad_id', this.dodavatel.value);\n    if (this.pokladna) url.searchParams.set('doklad_id', this.pokladna.value);\n  }\n\n  async choose(e: MouseEvent | KeyboardEvent) {\n    try {\n      (<HTMLButtonElement>(\n        document.querySelector('#fakt_sklad_polozkies .add-fields')!\n      )).click();\n\n      const url = new URL(\n        '/skladova_kartas/vyber-z-filtra',\n        location.toString()\n      );\n      url.searchParams.set(\n        'skladova_karta_id',\n        (<HTMLElement>e.target).closest('tr')!.dataset.id!.toString()\n      );\n\n      this.appendUrl(url);\n\n      const response = await getJSON(url);\n      const lastRow = <HTMLDivElement>(\n        Array.from(\n          document.querySelectorAll('#fakt_sklad_polozkies .stock-item')\n        ).pop()\n      );\n\n      console.log('lastRow: ', lastRow);\n\n      const faktSkladPolozkiesController = <FaktSkladPolozkiesController>(\n        this.application.getControllerForElementAndIdentifier(\n          lastRow,\n          'fakt-sklad-polozkies'\n        )\n      );\n\n      console.log(\n        'faktSkladPolozkiesController: ',\n        faktSkladPolozkiesController\n      );\n\n      faktSkladPolozkiesController.skladovaKartaIdElTarget.tomselect.destroy();\n\n      this.addOption(\n        faktSkladPolozkiesController.skladovaKartaIdElTarget,\n        response.option\n      );\n\n      initializeTomSelect([\n        faktSkladPolozkiesController.skladovaKartaIdElTarget,\n      ]);\n\n      faktSkladPolozkiesController.selectSkladovaKarta();\n\n      const items = document.querySelectorAll(\n        '#fakt_sklad_polozkies .stock-item'\n      );\n      items[items.length - 1].scrollIntoView({\n        behavior: 'smooth',\n        block: 'center',\n        inline: 'center',\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  private addOption(\n    select: HTMLSelectElement & TomSelect,\n    option: { [key: string]: any }\n  ) {\n    const newOption = new Option(option.text, option.value, true, true);\n\n    Object.assign(newOption.dataset, option.data);\n\n    select.querySelector('option')?.remove();\n    select.append(newOption);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { popupHelpers, postJSON, open, onSyntUcetChange } from '../utils';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { initializeTomSelect } from '../tom_select';\nimport { showToastMessage } from '../show_toast_message';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\n\n// Connects to data-controller=\"skladova-kartas\"\nexport default class extends Controller {\n  static targets = [\n    'partnerEl',\n    'ciselnyRadEl',\n    'cisloSkEl',\n    'oldCisloSkEl',\n    'evidenciaEl',\n    'internePoznamkyEl',\n  ];\n\n  declare readonly partnerElTarget: HTMLSelectElement;\n  declare readonly ciselnyRadElTarget: HTMLSelectElement;\n  declare readonly cisloSkElTarget: HTMLInputElement;\n  declare readonly oldCisloSkElTarget: HTMLInputElement;\n  declare readonly evidenciaElTarget: HTMLSelectElement;\n  declare readonly internePoznamkyElTarget: HTMLSpanElement;\n\n  initialize(): void {\n    Object.assign(this, popupHelpers, { open, onSyntUcetChange });\n  }\n\n  connect(): void {}\n\n  async onEvidChange(e: Event) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  async onCiselnyRadChange() {\n    await this.updateNumbering();\n  }\n\n  onAddFieldButton(e: Event) {\n    addFields(\n      (<HTMLElement>e.target).closest('.add-fields'),\n      (copiedDiv: HTMLDivElement, lastElBeforeInsert: HTMLDivElement) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          if (copiedDiv.classList.contains('sk-balicek')) {\n            this.setSkBalicekLabel();\n          }\n\n          copiedDiv = <HTMLDivElement>copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResourceButton(e: Event) {\n    deleteResource(\n      (<HTMLElement>e.target).closest('.delete-resource'),\n      (parent_name: string, parent: HTMLDivElement) => {\n        switch (parent_name) {\n          case 'sk-tech-parameter':\n            this.updateTechParameterLabel();\n            break;\n          case 'sk-balicek':\n            this.setSkBalicekLabel();\n            break;\n          case 'sk-prepocet':\n            parent\n              .querySelector('input[id*=\"_merna_jednotka\"]')!\n              .dispatchEvent(new Event('keyup', { bubbles: true }));\n            break;\n          default:\n            parent\n              .querySelector('input[type=\"text\"]:not(.vanillajs-datepicker)')!\n              .dispatchEvent(new Event('keyup'));\n        }\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  showPartner(e: Event): void {\n    openURL(`/partners/${this.partnerElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n\n  showCiselnyRad(e: Event) {\n    if (this.ciselnyRadElTarget.value) {\n      openURL(`/ciselny_rads/${this.ciselnyRadElTarget.value}`, {\n        parentUrl: new URL(location.toString()),\n      });\n    } else {\n      openURL(`/ciselny_rads/new/${this.evidenciaElTarget.value}`, {\n        parentUrl: new URL(location.toString()),\n      });\n    }\n  }\n\n  async updateNumbering() {\n    try {\n      const json = await this.getSampleNumbering();\n      const { level1 } = json;\n\n      console.log('level1', level1);\n\n      this.cisloSkElTarget.value = level1;\n      this.oldCisloSkElTarget.value = level1;\n\n      showSubmitButton(this.cisloSkElTarget);\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showUctovnyRozvrh() {\n    openURL('/uctovny_rozvrhs');\n  }\n\n  updateMeassurementUnit(e: Event) {\n    this.element.querySelectorAll('.label-merna-jednotka').forEach(label => {\n      label.innerHTML = (<HTMLInputElement>e.target).value;\n    });\n  }\n\n  updateTechParameterLabel() {\n    this.element.querySelector('#label_tech_parameters')!.innerHTML = [\n      ...document.querySelectorAll(\n        '.sk-tech-parameter:not([style=\"display: none;\"]) input[id*=\"_hodnota\"]'\n      ),\n    ]\n      .map(input => (<HTMLInputElement>input).value)\n      .join(', ');\n  }\n\n  updateSettingsLabel(e: Event) {\n    if (!(e.target instanceof HTMLInputElement)) return;\n\n    const target = <HTMLInputElement>e.target;\n    const label = this.element.querySelector(`#label_${target.id}`);\n\n    if (label) {\n      label.querySelector('.positive')!.removeAttribute('hidden');\n      label.querySelector('.negative')!.removeAttribute('hidden');\n      (<HTMLSpanElement>label.querySelector('.positive')).style.display =\n        target.checked ? 'inline' : 'none';\n      (<HTMLSpanElement>label.querySelector('.negative')).style.display =\n        target.checked ? 'none' : 'inline';\n    }\n  }\n\n  updateCalcsLabel(e: Event) {\n    if ((<HTMLInputElement>e.target).value) {\n      this.element.querySelector('#label_prepocet')!.innerHTML = [\n        ...document.querySelectorAll(\n          '.sk-prepocet:not([style=\"display: none;\"]) input[id*=\"_merna_jednotka\"]'\n        ),\n      ]\n        .map(input => (<HTMLInputElement>input).value)\n        .join(', ');\n    }\n  }\n\n  updateInternePoznamkyLabel(e: Event) {\n    const target = <HTMLTextAreaElement>e.target;\n    this.internePoznamkyElTarget.innerHTML = target.value.substring(0, 22);\n\n    if (target.value.length > 22) {\n      this.internePoznamkyElTarget.innerHTML += '...';\n    }\n  }\n\n  private async getSampleNumbering() {\n    try {\n      const url = new URL(\n        '/ciselny_rads/get-sample-numbering',\n        location.toString()\n      );\n\n      return await postJSON(\n        url,\n        { ciselny_rad_id: this.ciselnyRadElTarget.value },\n        'PATCH'\n      );\n    } catch (e: any) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  private setSkBalicekLabel() {\n    const positive = <HTMLSpanElement>(\n      this.element.querySelector('#label_sk_baliceks .positive')\n    );\n    const negative = <HTMLSpanElement>(\n      this.element.querySelector('#label_sk_baliceks .negative')\n    );\n\n    positive.removeAttribute('hidden');\n    negative.removeAttribute('hidden');\n\n    if (document.querySelector('.sk-balicek:not([style=\"display: none;\"])')) {\n      positive.style.display = 'inline';\n      negative.style.display = 'none';\n    } else {\n      positive.style.display = 'none';\n      negative.style.display = 'inline';\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { openURL } from '../window_manager';\nimport { showFilter } from '../utils';\n\n// Connects to data-controller=\"skladova-kartas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  declare readonly submitBtnTarget: HTMLButtonElement;\n\n  initialize(): void {\n    Object.assign(this, { showFilter });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e: Event) {\n    updateAdditionalInfo(e.target);\n  }\n\n  open(e: Event) {\n    const target = e.target as HTMLElement;\n    const button = target.closest('button');\n\n    if (!button) return;\n\n    const { href } = button.dataset;\n\n    if (!href) return;\n\n    openURL(href);\n  }\n\n  printList(e: Event) {\n    const target = e.target as HTMLButtonElement;\n    const item = target.closest('.dropdown-item') as HTMLButtonElement;\n\n    openURL(`/sk_prints/preview-list/${item.dataset.groupsOnly}`, {\n      tab: true,\n    });\n  }\n}\n", "import { destroyFilePond, initializeFilePond } from '../filepond';\nimport FormChangesController from './form_changes_controller';\n\n// Connects to data-controller=\"skladova-kartas-show\"\nexport default class extends FormChangesController {\n  connect() {\n    super.connect();\n\n    initializeFilePond();\n  }\n\n  disconnect() {\n    destroyFilePond();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { onSyntUcetChange } from '../utils';\nimport { popupHelpers } from '../utils';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"sklads\"\nexport default class extends Controller {\n  connect() {\n    Object.assign(this, popupHelpers, {\n      onSyntUcetChange,\n    });\n  }\n\n  showUctovnyRozvrh() {\n    openURL('/uctovny_rozvrhs');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { simpleCardMethods } from '../utils';\n\n// Connects to data-controller=\"sklads-index\"\nexport default class extends Controller {\n  connect() {\n    Object.assign(this, simpleCardMethods);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"sklads-show\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { popupHelpers } from '../utils';\n\n// Connects to data-controller=\"stock-pop-up\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { getJSON, postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"switch-active-company\"\nexport default class extends Controller {\n  static targets = ['switch'];\n\n  static values = {\n    checkStatus: Boolean\n  };\n\n  declare switchTarget: HTMLInputElement;\n  declare checkStatusValue: boolean;\n\n  async connect(): Promise<void> {\n    if (this.checkStatusValue) {\n      try {\n        await this.status();\n      } catch (err: any) {\n        showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n      }\n    }\n  }\n\n  async toggle() {\n    try {\n      const response = await postJSON(`/disk_folders/toggle_status`, {\n        checked: this.switchTarget.checked\n      });\n\n      const { status, notice, errors } = response;\n\n      if (!status) {\n        this.switchTarget.checked = !this.switchTarget.checked; // Revert\n\n        return showToastMessage(errors, { autohide: false, type: 'bg-danger' });\n      }\n\n      showToastMessage(notice);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async status() {\n    try {\n      const response = await getJSON(`/disk_folders/status`);\n\n      const { status, errors } = response;\n\n      if (errors)\n        showToastMessage(errors, { autohide: false, type: 'bg-danger' });\n\n      this.switchTarget.checked = status;\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"tax-liability\"\nexport default class extends Controller {\n\tconnect() {\n\n\t\t[36, 37, 38].forEach(i => {\n\t\t\tif (window[`r${i.toString()}Value`]) {\n\t\t\t\tconst elem = this.element.querySelector(`#filter_filter_r${i}`);\n\n\t\t\t\tif (elem) {\n\t\t\t\t\telem.value = window[`r${i}Value`];\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tif (window.taxLiabilityExpanded) {\n\t\t\tthis.element.querySelector('button.rounded-circle').dispatchEvent(new Event('click', { bubbles: true }));\n\t\t}\n\t}\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"toasts\"\nexport default class extends Controller {\n\n\tconnect() {\n\t\tthis.waitForBootstrap(this.element);\n\t}\n\n\twaitForBootstrap(element){\n\t\tif(typeof window.bootstrap !== \"undefined\"){\n\t\t\tconst toast = window.bootstrap.Toast.getOrCreateInstance(element);\n\n\t\t\tif (toast._element.classList.contains(\"d-none\")) {\n\t\t\t\ttoast._element.classList.remove('d-none');\n\t\t\t}\n\n\t\t\ttoast.show();\n\t\t}\n\t\telse{\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.waitForBootstrap(element);\n\t\t\t}, 250);\n\t\t}\n\t}\n}", "import { Controller } from '@hotwired/stimulus';\nimport { initializeTomSelect } from '../tom_select';\nimport TomSelect from 'tom-select/dist/js/tom-select.complete.min.js';\n\n// Connects to data-controller=\"tom-select\"\nexport default class extends Controller {\n  connect() {\n    initializeTomSelect(this.element.querySelectorAll('select.tom-select'));\n\n    this.element.querySelectorAll('input.tom-select').forEach(input => {\n      let tomSelect;\n\n      try {\n        tomSelect = new TomSelect(input, {\n          valueField: 'value',\n          labelField: 'text',\n          searchField: ['text'],\n          plugins: ['remove_button'],\n          persist: false,\n          createOnBlur: true,\n          create: true,\n          createFilter:\n            \"([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\",\n          render: {\n            option_create: function (data, escape) {\n              return (\n                '<div class=\"create\">Pridaj <strong>' +\n                escape(data.input) +\n                '</strong>&hellip;</div>'\n              );\n            },\n            no_results: function (data, escape) {\n              return '<div class=\"no-results\">Iba validn\u00E9 e-mailov\u00E9 adresy</div>';\n            }\n          }\n        });\n      } catch (e) {\n        console.warn('Failed to initialize tom-select for input', e);\n        return;\n      }\n\n      if (input.dataset.options) {\n        try {\n          const options = JSON.parse(input.dataset.options);\n\n          options.forEach(option => {\n            tomSelect.addOption({\n              value: option.value,\n              text: option.text\n            });\n          });\n        } catch (e) {\n          console.warn('Failed to parse tom-select options', e);\n        }\n      }\n    });\n  }\n\n  disconnect() {\n    this.element\n      .querySelectorAll('tom-select')\n      .forEach(select => select.tomselect?.destroy());\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { fillEvidOnOkruhChange } from '../fill_evid_on_okruh_change';\nimport { getJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"uctovny-denniks-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    import('../update_additional_info').then(module => {\n      this.updateAdditionalInfo = module.updateAdditionalInfo.bind(this);\n    });\n\n    this.submitBtnTarget.click();\n  }\n\n  showUctovnyRozvrh() {\n    openURL('/uctovny_rozvrhs');\n  }\n\n  showZavierkas(e) {\n    openURL(`/zavierkas`);\n  }\n\n  async onOkruhChange(e) {\n    await fillEvidOnOkruhChange(e.target);\n    await fillCiselnyRadOnEvidChange(\n      this.element.querySelector('#filter_filter_uctovny_doklad_evidencia_id')\n    );\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  onHospRokChange(e) {\n    if (e.target.value === '') {\n      return false;\n    }\n\n    makeRequest(`/uctovny-doklads/set-last-used-hr/${e.target.value}.json`)\n      .then(\n        this.element.querySelector('[name=\"commit\"][type=\"submit\"]').click()\n      )\n      .catch(err =>\n        showToastMessage(err, {\n          autohide: false,\n          class: 'bg-danger',\n        })\n      );\n  }\n\n  updateInfo(e) {\n    this.updateAdditionalInfo(e.target);\n  }\n\n  openFilter() {\n    let url;\n    let filterId = this.element.querySelector(\n      '#filter_filter_uden_filter_id'\n    ).value;\n\n    if (filterId) {\n      url = `/uden_filters/${filterId}.html`;\n    } else {\n      url = '/uden_filters/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  openNew() {\n    openURL('/uctovny_doklads/new');\n  }\n\n  async setMarkedCount() {\n    try {\n      const json = await getJSON('/uctovny-doklads/marked-count');\n      const { count } = json;\n\n      this.element.querySelectorAll('.marked-count').forEach(element => {\n        element.innerHTML = count ?? 0;\n      });\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  printList(e) {\n    openURL(\n      `/uden-prints/preview-list/${\n        e.target.closest('[data-action=\"uctovny-denniks-index#printList\"]')\n          .dataset.groupsOnly\n      }`,\n      { tab: true }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { onSyntUcetChange } from '../utils';\n\n// Connects to data-controller=\"uctovny-doklads-change-accounts-window\"\nexport default class extends Controller {\n  connect() {\n    this.onSyntUcetChange = onSyntUcetChange.bind(this);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"uctovny-doklads-change-accounts-window\"\nexport default class extends Controller {\n\tconnect() {\n\t\timport(\"../utils\").then(utils => {\n\t\t\tthis.onSyntUcetChange = utils.onSyntUcetChange.bind(this);\n\t\t});\n\t}\n}", "import { Controller } from '@hotwired/stimulus';\nimport { fillEvidOnOkruhChange } from '../fill_evid_on_okruh_change';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { postJSON, postFormData } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { openURL } from '../window_manager';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\n\n// Connects to data-controller=\"uctovny-doklads-change-numbering\"\nexport default class extends Controller<HTMLFormElement> {\n  static targets = ['evidenciaEl', 'labelEl', 'ciselnyRadArr', 'okruhEl'];\n\n  declare readonly evidenciaElTargets: HTMLSelectElement[];\n  declare readonly labelElTarget: HTMLSpanElement;\n  declare readonly ciselnyRadArrTargets: HTMLSelectElement[];\n  declare readonly okruhElTarget: HTMLSelectElement;\n\n  onSubmitButton() {\n    window.onbeforeunload = null;\n  }\n\n  async onOkruhChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n\n    for (const element of this.evidenciaElTargets) {\n      await fillEvidOnOkruhChange(target, null, element);\n      await fillCiselnyRadOnEvidChange(element);\n    }\n\n    await this.updateLabel();\n  }\n\n  async onEvidChange(e: Event) {\n    await fillCiselnyRadOnEvidChange(e.target);\n    await this.updateLabel();\n  }\n\n  async updateLabel() {\n    if (!this.newCiselnyRadEl.value) return;\n\n    try {\n      const response = await postJSON(this.buildUrl(), {}, 'PATCH');\n      this.labelElTarget.innerHTML = response.level1;\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n  showCiselnyRad(_: Event) {\n    if (this.newCiselnyRadEl.value)\n      return openURL(`/ciselny_rads/${this.newCiselnyRadEl.value}`, {\n        parentUrl: new URL(location.toString()),\n      });\n\n    openURL(`/ciselny_rads/new/${this.evidenciaElTargets.pop()!.value}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n\n  onCiselnyRadChange(e: Event) {\n    const target = <HTMLSelectElement & TomSelect>e.target;\n    const choosen = target.options[target.selectedIndex].text;\n\n    if (this.okruhElTarget.value !== '4') return;\n\n    this.ciselnyRadArrTargets.forEach(el => {\n      const select = <HTMLSelectElement & TomSelect>el;\n\n      if (select.options[select.selectedIndex].text !== choosen) {\n        const arr = select.options;\n\n        select.tomselect.setValue(\n          [...arr].filter(option => option.text === choosen)[0]?.value,\n          true\n        );\n      }\n    });\n  }\n\n  async onSubmitForm(e: Event) {\n    e.preventDefault();\n\n    try {\n      const formData = new FormData(this.element);\n      const response = await postFormData(\n        this.element.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { status, errors } = json;\n\n      if (status) window.close();\n\n      showToastMessage(errors, { autohide: false, type: 'bg-danger' });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  private buildUrl() {\n    const url = new URL(\n      '/ciselny_rads/get-sample-numbering',\n      location.toString()\n    );\n\n    url.searchParams.set('ciselny_rad_id', this.newCiselnyRadEl.value);\n\n    return url;\n  }\n\n  private get newCiselnyRadEl() {\n    return this.ciselnyRadArrTargets.pop()!;\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { onSyntUcetChange } from '../utils';\n\n// Connects to data-controller=\"uctovny-doklads-change-szcp-window\"\nexport default class extends Controller {\n  initialize(): void {\n    Object.assign(this, { onSyntUcetChange });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { fillEvidOnOkruhChange } from '../fill_evid_on_okruh_change';\nimport {\n  formatNumber,\n  parseNumber,\n  changeItemSzcp,\n  popupHelpers,\n  getJSON\n} from '../utils';\nimport { onSyntUcetChange, showRecord } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { initializeTomSelect } from '../tom_select';\n\n// Connects to data-controller=\"uctovny-doklads\"\nexport default class extends Controller {\n  static targets = ['filterPartnerEl', 'datumDodaniaEl', 'cisMenaEl', 'kurzEl'];\n\n  static CURRENCY_DIFF_ACCOUNTS = ['563', '663'];\n\n  initialize() {\n    this.onStornoButton = popupHelpers.onStornoButton;\n\n    dayjs.extend(customParseFormat);\n  }\n\n  connect() {\n    import('../delete').then(module => {\n      this.deleteResource = module.deleteResource.bind(this);\n    });\n\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n\n    import('../add').then(module => {\n      this.addFields = module.addFields.bind(this);\n    });\n\n    import('../delay').then(module => {\n      this.delay = module.delay.bind(this);\n    });\n\n    import('../show_submit_buttons').then(module => {\n      this.showSubmitButton = module.showSubmitButton.bind(this);\n    });\n\n    import('../update_pozicia').then(module => {\n      this.updatePozicia = module.updatePozicia.bind(this);\n\n      this.sortableCallback = e => {\n        this.updatePozicia('.ud-predkontacia');\n        this.showSubmitButton(e.detail.origin.container);\n      };\n\n      import('html5sortable/dist/html5sortable.es').then(module => {\n        this.sortable = module;\n        this.sortable.default(\n          this.element.querySelectorAll('#ud_predkontacias'),\n          {\n            items: this.element.querySelectorAll(\n              '.ud-predkontacia:not(.last-row-with-button)'\n            ),\n            handle: '.move'\n          }\n        );\n        this.sortable\n          .default(this.element.querySelectorAll('#ud_predkontacias'))[0]\n          .addEventListener('sortstop', this.sortableCallback); // update position when sort order changes\n      });\n    });\n\n    Object.assign(this, { showRecord });\n  }\n\n  disconnect() {\n    this.sortable\n      .default(this.element.querySelectorAll('#ud_predkontacias'))[0]\n      .removeEventListener('sortstop', this.sortableCallback, false);\n    this.sortable.default(\n      this.element.querySelectorAll('#ud_predkontacias'),\n      'destroy'\n    );\n  }\n\n  showEvid(e) {\n    this.openURL(\n      `/evids/${\n        this.element.querySelector('#uctovny_doklad_okruh_id').value\n      }/true`,\n      { parentUrl: new URL(location) }\n    );\n  }\n\n  showCiselnyRad(e) {\n    let id = this.element.querySelector('#uctovny_doklad_ciselny_rad_id').value;\n\n    if (id) {\n      this.openURL(`/ciselny_rads/${id}`, { parentUrl: new URL(location) });\n    } else {\n      this.openURL(\n        `/ciselny_rads/new/${\n          this.element.querySelector('#uctovny_doklad_evidencia_id').value\n        }`,\n        { parentUrl: new URL(location) }\n      );\n    }\n  }\n\n  showPartner(e) {\n    let url;\n    let partnerId = this.element.querySelector(\n      '#uctovny_doklad_partner_id'\n    ).value;\n\n    if (partnerId) {\n      url = `/partners/${partnerId}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    this.openURL(url, { parentUrl: new URL(location) });\n  }\n\n  onAddFieldButton(e) {\n    this.addFields(\n      e.target.closest('.add-fields'),\n      (copiedDiv, lastElBeforeInsert) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n\n          if (copiedDiv.classList.contains('ud-predkontacia')) {\n            this.updatePozicia('.ud-predkontacia');\n\n            this.sortable.default(\n              document.querySelectorAll('#ud_predkontacias')\n            );\n\n            ['stredisko', 'zakazka', 'cinnost', 'pracovnik'].forEach(name => {\n              copiedDiv\n                .querySelector(`select[id*=_${name}_id]`)\n                ?.tomselect.setValue(\n                  this.element.querySelector(`select#uctovny_doklad_${name}_id`)\n                    .value\n                );\n            });\n\n            this.onSumaChange({\n              target: copiedDiv.querySelector('[id$=\"suma_cm\"]')\n            });\n          }\n\n          copiedDiv = copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onDeleteResource(e) {\n    this.deleteResource(\n      e.target.closest('.delete-resource'),\n      (parent_name, parent) => {\n        switch (parent_name) {\n          case 'ud-predkontacia':\n            this.UdpCalcLabels();\n            this.updatePozicia('.ud-predkontacia');\n          default:\n          // nothing to do ...\n        }\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onSubmitButton(e) {\n    window.onbeforeunload = null;\n\n    const sumaCmEl = document.querySelector('#uctovny_doklad_suma_cm');\n    const mdCmVal = parseNumber(document.querySelector('#md_cm').innerHTML);\n\n    if (parseNumber(sumaCmEl.value) === mdCmVal) return;\n\n    if (confirm(document.querySelector('#md_dal_not_equal_to_suma').value))\n      sumaCmEl.value = formatNumber(mdCmVal);\n  }\n\n  showUctovnyRozvrh() {\n    this.openURL('/uctovny_rozvrhs', { parentUrl: new URL(location) });\n  }\n\n  addUdPredkontacia(e) {\n    const event = new Event('click');\n    Object.defineProperty(event, 'target', {\n      writable: false,\n      value: document.querySelector('#ud_predkontacias a.add-fields i')\n    });\n\n    this.onAddFieldButton(event);\n\n    const arr = document.querySelectorAll('#ud_predkontacias .ud-predkontacia');\n    const udPredkontaciaEl = arr[arr.length - 1];\n    udPredkontaciaEl.querySelector('input[id*=\"_predmet\"]').value =\n      document.querySelector('#uctovny_doklad_predmet').value;\n    const sumaEl = udPredkontaciaEl.querySelector('input[name$=\"[suma]\"]');\n\n    this.onSumaChange({ target: sumaEl });\n\n    sumaEl.focus();\n    sumaEl.select();\n  }\n\n  addPaidDocument(e) {\n    let filterDOM = document.querySelector('#uctovny_doklads_filter');\n    let uhradenyDokladId = e.target\n      .closest('[data-bs-target=\"#ud_add_paid_document\"]')\n      .closest('.ud-predkontacia')\n      .querySelector('[name$=\"[uhradeny_doklad_id]\"]').value;\n\n    filterDOM.querySelector(\n      'input#uctovny_doklad_filter_ud_predkontacia_id'\n    ).value = e.target\n      .closest('[data-bs-target=\"#ud_add_paid_document\"]')\n      .closest('.ud-predkontacia').dataset.id;\n    filterDOM.querySelector(\n      'input#uctovny_doklad_filter_uhradeny_doklad_id'\n    ).value = uhradenyDokladId;\n\n    if (uhradenyDokladId) {\n      makeRequest(`/uctovny-doklads/get-number/${uhradenyDokladId}`)\n        .then(result => {\n          if (result.status) {\n            filterDOM\n              .querySelector('#uctovny_doklad_filter_no_record_label')\n              .setAttribute('hidden', 'hidden');\n            filterDOM\n              .querySelector('#uctovny_doklad_filter_record_label')\n              .removeAttribute('hidden');\n            filterDOM.querySelector(\n              '#uctovny_doklad_filter_record_label #uctovny_doklad_filter_record_number'\n            ).innerHTML = result.number;\n          } else {\n            filterDOM\n              .querySelector('#uctovny_doklad_filter_no_record_label')\n              .removeAttribute('hidden');\n            filterDOM\n              .querySelector('#uctovny_doklad_filter_record_label')\n              .setAttribute('hidden', 'hidden');\n\n            showToastMessage(result.message, {\n              autohide: false,\n              type: 'bg-danger'\n            });\n          }\n        })\n        .catch(error =>\n          showToastMessage(error, { autohide: false, type: 'bg-danger' })\n        );\n    } else {\n      filterDOM\n        .querySelector('#uctovny_doklad_filter_no_record_label')\n        .removeAttribute('hidden');\n      filterDOM\n        .querySelector('#uctovny_doklad_filter_record_label')\n        .setAttribute('hidden', 'hidden');\n    }\n\n    this.delay(() => {\n      filterDOM\n        .querySelector('input#uctovny_doklad_filter_cele_cislo')\n        .dispatchEvent(new Event('keyup', { bubbles: true }));\n\n      e.target\n        .closest('[data-bs-target=\"#ud_add_paid_document\"]')\n        .closest('.ud-predkontacia')\n        .scrollIntoView({\n          behavior: 'smooth'\n        });\n    }, 500);\n  }\n\n  swap(e) {\n    const parentEl = e.target.closest('.ud-predkontacia');\n\n    let md_synt_id = parentEl.querySelector(\n      'select[id*=\"_md_synt_ucet_id\"]'\n    ).id;\n    let dal_synt_id = parentEl.querySelector(\n      'select[id*=\"_dal_synt_ucet_id\"]'\n    ).id;\n    let md_analyt_id = parentEl.querySelector(\n      'select[id*=\"_md_analyt_ucet_id\"]'\n    ).id;\n    let dal_analyt_id = parentEl.querySelector(\n      'select[id*=\"_dal_analyt_ucet_id\"]'\n    ).id;\n\n    const mdSyntUcetOption = parentEl.querySelector(`#${md_synt_id}`).tomselect\n      .options[parentEl.querySelector(`#${md_synt_id}`).tomselect.getValue()];\n    const mdAnalytUcetOption = parentEl.querySelector(`#${md_analyt_id}`)\n      .tomselect.options[\n      parentEl.querySelector(`#${md_analyt_id}`).tomselect.getValue()\n    ];\n    const dalSyntUcetOption = parentEl.querySelector(`#${dal_synt_id}`)\n      .tomselect.options[\n      parentEl.querySelector(`#${dal_synt_id}`).tomselect.getValue()\n    ];\n    const dalAnalytUcetOption = parentEl.querySelector(`#${dal_analyt_id}`)\n      .tomselect.options[\n      parentEl.querySelector(`#${dal_analyt_id}`).tomselect.getValue()\n    ];\n\n    const mdSyntUcetEl = parentEl.querySelector(`#${md_synt_id}`);\n    const dalSyntUcetEl = parentEl.querySelector(`#${dal_synt_id}`);\n    const mdAnalytUcetEl = parentEl.querySelector(`#${md_analyt_id}`);\n    const dalAnalytUcetEl = parentEl.querySelector(`#${dal_analyt_id}`);\n\n    const mdAnalytucetOptions = mdAnalytUcetEl.tomselect.options;\n    const dalAnalytUcetOptions = dalAnalytUcetEl.tomselect.options;\n\n    if (mdSyntUcetOption) {\n      dalSyntUcetEl.tomselect.setValue(null, true);\n      dalSyntUcetEl.tomselect.clearOptions();\n      dalSyntUcetEl.tomselect.addOption(mdSyntUcetOption);\n      dalSyntUcetEl.tomselect.setValue(\n        (mdSyntUcetOption.id || mdSyntUcetOption.value).toString(),\n        true\n      );\n      dalSyntUcetEl.tomselect.refreshOptions(false);\n\n      if (!dalSyntUcetOption) {\n        mdSyntUcetEl.tomselect.setValue(null, true);\n        mdSyntUcetEl.tomselect.clearOptions();\n        mdSyntUcetEl.tomselect.input.innerHTML = '<option value=\"\"></option>';\n      }\n    }\n\n    if (dalSyntUcetOption) {\n      mdSyntUcetEl.tomselect.setValue(null, true);\n      mdSyntUcetEl.tomselect.clearOptions();\n      mdSyntUcetEl.tomselect.addOption(dalSyntUcetOption);\n      mdSyntUcetEl.tomselect.setValue(\n        (dalSyntUcetOption.id || dalSyntUcetOption.value).toString(),\n        true\n      );\n      mdSyntUcetEl.tomselect.refreshOptions(false);\n\n      if (!mdSyntUcetOption) {\n        dalSyntUcetEl.tomselect.setValue(null, true);\n        dalSyntUcetEl.tomselect.clearOptions();\n        dalSyntUcetEl.tomselect.input.innerHTML = '<option value=\"\"></option>';\n      }\n    }\n\n    if (mdAnalytUcetOption) {\n      dalAnalytUcetEl.tomselect.setValue(null, true);\n      dalAnalytUcetEl.tomselect.clearOptions();\n\n      Object.values(mdAnalytucetOptions).forEach(option =>\n        dalAnalytUcetEl.tomselect.addOption(option)\n      );\n\n      dalAnalytUcetEl.tomselect.setValue(\n        (mdAnalytUcetOption.id || mdAnalytUcetOption.value).toString(),\n        true\n      );\n\n      dalAnalytUcetEl.tomselect.refreshOptions(false);\n\n      if (!dalAnalytUcetOption) {\n        mdAnalytUcetEl.tomselect.setValue(null, true);\n        mdAnalytUcetEl.tomselect.clearOptions();\n        mdAnalytUcetEl.tomselect.input.innerHTML = '<option value=\"\"></option>';\n      }\n    }\n\n    if (dalAnalytUcetOption) {\n      mdAnalytUcetEl.tomselect.setValue(null, true);\n      mdAnalytUcetEl.tomselect.clearOptions();\n\n      Object.values(dalAnalytUcetOptions).forEach(option =>\n        mdAnalytUcetEl.tomselect.addOption(option)\n      );\n\n      mdAnalytUcetEl.tomselect.setValue(\n        (dalAnalytUcetOption.id || dalAnalytUcetOption.value).toString(),\n        true\n      );\n      mdAnalytUcetEl.tomselect.refreshOptions(false);\n\n      if (!mdAnalytUcetOption) {\n        dalAnalytUcetEl.tomselect.setValue(null, true);\n        dalAnalytUcetEl.tomselect.clearOptions();\n        dalAnalytUcetEl.tomselect.input.innerHTML =\n          '<option value=\"\"></option>';\n      }\n    }\n\n    this.UdpCalcLabels();\n    this.showSubmitButton(e.target);\n  }\n\n  uhradDoklad(e) {\n    makeRequest(\n      `/uctovny-doklads/uhradzany-doklad-uhrad/${\n        e.target.closest('.uhrad-doklad').dataset.id\n      }`\n    )\n      .then(response => {\n        let target = document.querySelector(\n          `#ud_predkontacias .ud-predkontacia[data-id=\"${\n            document.querySelector(\n              '#uctovny_doklads_filter #uctovny_doklad_filter_ud_predkontacia_id'\n            ).value\n          }\"]`\n        );\n\n        switch (response.state) {\n          case 1:\n            if (confirm('Prenies\u0165 sumu a analytick\u00FD \u00FA\u010Det z dokladu?')) {\n              let dal_su = target.querySelector(\n                'select[name$=\"[dal_synt_ucet_id]\"]'\n              );\n              dal_su.tomselect.setValue(null, true);\n              dal_su.tomselect.clearOptions();\n              dal_su.tomselect.addOption({\n                concated: `${response.md_synt_ucet.kod} - ${response.md_synt_ucet.nazov}`,\n                id: response.md_synt_ucet.id,\n                kod: response.md_synt_ucet.kod\n              });\n              dal_su.tomselect.refreshOptions(false);\n              dal_su.tomselect.setValue(\n                response.md_synt_ucet.id.toString(),\n                true\n              );\n\n              let dal_au = target.querySelector(\n                'select[name$=\"[dal_analyt_ucet_id]\"]'\n              );\n              dal_au.tomselect.setValue(null, true);\n              dal_au.tomselect.clearOptions();\n              dal_au.tomselect.addOption({\n                concated: `${response.md_analyt_ucet.kod} - ${response.md_analyt_ucet.nazov}`,\n                value: response.md_analyt_ucet.id,\n                kod: response.md_analyt_ucet.kod\n              });\n              dal_au.tomselect.refreshOptions(false);\n              dal_au.tomselect.setValue(\n                response.md_analyt_ucet.id.toString(),\n                true\n              );\n\n              let suma = target.querySelector(\"input[name$='[suma]']\");\n              suma.value = formatNumber(response.suma);\n              this.onSumaChange({ target: suma });\n            }\n\n            [\n              'stredisko_id',\n              'zakazka_id',\n              'cinnost_id',\n              'pracovnik_id'\n            ].forEach(name => {\n              target\n                .querySelector(`select[name$=\"[${name}]\"]`)\n                ?.tomselect?.setValue(response[name]);\n            });\n\n            break;\n          case 2:\n            if (confirm('Prenies\u0165 sumu a analytick\u00FD \u00FA\u010Det z dokladu?')) {\n              let md_su = target.querySelector(\n                'select[name$=\"[md_synt_ucet_id]\"]'\n              );\n              md_su.tomselect.setValue(null, true);\n              md_su.tomselect.clearOptions();\n              md_su.tomselect.addOption({\n                concated: `${response.dal_synt_ucet.kod} - ${response.dal_synt_ucet.nazov}`,\n                id: response.dal_synt_ucet.id,\n                kod: response.dal_synt_ucet.kod\n              });\n              md_su.tomselect.refreshOptions(false);\n              md_su.tomselect.setValue(\n                response.dal_synt_ucet.id.toString(),\n                true\n              );\n\n              let md_au = target.querySelector(\n                'select[name$=\"[md_analyt_ucet_id]\"]'\n              );\n              md_au.tomselect.setValue(null, true);\n              md_au.tomselect.clearOptions();\n              md_au.tomselect.addOption({\n                concated: `${response.dal_analyt_ucet.kod} - ${response.dal_analyt_ucet.nazov}`,\n                value: response.dal_analyt_ucet.id,\n                kod: response.dal_analyt_ucet.kod\n              });\n              md_au.tomselect.refreshOptions(false);\n              md_au.tomselect.setValue(\n                response.dal_analyt_ucet.id.toString(),\n                true\n              );\n\n              let suma = target.querySelector(\"input[name$='[suma]']\");\n              suma.value = formatNumber(response.suma);\n              this.onSumaChange({ target: suma });\n            }\n\n            [\n              'stredisko_id',\n              'zakazka_id',\n              'cinnost_id',\n              'pracovnik_id'\n            ].forEach(name => {\n              target\n                .querySelector(`select[name$=\"[${name}]\"]`)\n                ?.tomselect?.setValue(response[name]);\n            });\n\n            break;\n          case 5:\n          //Martin: nothing to do...\n        }\n\n        this.showNumber([1, 2].includes(response.state)); // hide if state == 5\n\n        target.querySelector('[name$=\"[uhradeny_doklad_id]\"]').value =\n          e.target.closest('.uhrad-doklad').dataset.id;\n        document.querySelector(\n          '#uctovny_doklads_filter #uctovny_doklad_filter_uhradeny_doklad_id'\n        ).value = e.target.closest('.uhrad-doklad').dataset.id;\n        target.querySelector('.uhradeny-doklad-cele-cislo').innerHTML =\n          response.cele_cislo;\n        document.querySelector(\n          '#uctovny_doklads_filter #uctovny_doklad_filter_record_label span'\n        ).innerHTML = response.cele_cislo;\n        document\n          .querySelector(\n            '#uctovny_doklads_filter #uctovny_doklad_filter_cele_cislo'\n          )\n          .dispatchEvent(new Event('keyup', { bubbles: true }));\n      })\n      .catch(err =>\n        showToastMessage(err, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  copyUdPredkontacia(e) {\n    let source = e.target\n      .closest('.copy-ud-predkontacia')\n      .closest('.ud-predkontacia');\n    const sourceId = source.dataset.id;\n    const sourceIndex = source.querySelector('input').id.match(/\\d+/)[0];\n    let nodes = document.querySelectorAll('#ud_predkontacias .ud-predkontacia');\n    let last = nodes[nodes.length - 1];\n    let now = new Date().getTime().toString();\n\n    let pattern = new RegExp(\n      `uctovny_doklad\\\\[ud_predkontacias_attributes]\\\\[${sourceIndex}]`,\n      'g'\n    );\n    let target = source.outerHTML.replace(\n      pattern,\n      `uctovny_doklad[ud_predkontacias_attributes][${now}]`\n    ); // change name\n\n    pattern = new RegExp(\n      `uctovny_doklad_ud_predkontacias_attributes_${sourceIndex}_`,\n      'g'\n    );\n    target = target.replace(\n      pattern,\n      `uctovny_doklad_ud_predkontacias_attributes_${now}_`\n    ); // change id\n\n    pattern = new RegExp(`ud_predkontacias_data_${sourceId}`, 'g');\n    target = target.replace(pattern, `ud_predkontacias_data_${now}`); // change reference\n\n    last.insertAdjacentHTML('afterend', target);\n    nodes = document.querySelectorAll('#ud_predkontacias .ud-predkontacia');\n    last = nodes[nodes.length - 1];\n\n    last.dataset.id = now;\n    last.querySelector('[name$=\"[id]\"]').value = '';\n    last.querySelector('[name$=\"[uhradeny_doklad_id]\"]').value = '';\n    last.querySelector('[name$=\"[pozicia]\"]').value = nodes.length - 1;\n    last.querySelector('.uhradeny-doklad-cele-cislo').innerHTML =\n      'Bez prepojenia';\n    last\n      .querySelector('[name$=\"[suma]\"]')\n      .dispatchEvent(new Event('keyup', { bubbles: true }));\n\n    last.querySelectorAll('select.tom-select').forEach(select => {\n      select.classList.remove('tomselected', 'ts-hidden-accessible');\n      select.nextSibling.remove();\n    });\n\n    source\n      .querySelectorAll('input.form-control, select.tom-select')\n      .forEach(element => {\n        if (element.nodeName === 'INPUT') {\n          if (element.value) {\n            last.querySelector(\n              `.form-control[id*=\"_${element.name\n                .match(/[0-9a-z_]{2,}/g)\n                .pop()}\"]`\n            ).value = element.value;\n          }\n        } else {\n          if (element.value) {\n            last.querySelector(\n              `.tom-select[id*=\"_${element.name\n                .match(/[0-9a-z_]{2,}/g)\n                .pop()}\"]`\n            ).value = element.value;\n          }\n        }\n      });\n\n    initializeTomSelect(last.querySelectorAll('select.tom-select'));\n\n    this.updatePozicia('.ud-predkontacia');\n  }\n\n  getSampleNumbering(e) {\n    makeRequest(\n      `/ciselny_rads/get-sample-numbering?ciselny_rad_id=${\n        document.querySelector('#uctovny_doklad_ciselny_rad_id').value\n      }&datum=${document.querySelector('#uctovny_doklad_datum_dodania').value}`,\n      { method: 'PATCH' }\n    )\n      .then(json => {\n        document.querySelector('#uctovny_doklad_cislo').value = json.level1;\n        document.querySelector('#uctovny_doklad_old_cislo').value = json.level1;\n        this.showSubmitButton(e.target.closest('#get-sample-numbering'));\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  toggleAll(e) {\n    let icon = e.target.closest('i');\n\n    this.element\n      .querySelectorAll('#ud_predkontacias .ud-predkontacia')\n      .forEach(predk => {\n        let button = predk.querySelector('[data-bs-toggle=\"collapse\"]');\n\n        if (icon.classList.contains('fa-minimize')) {\n          if (!button.classList.contains('collapsed')) {\n            button.click();\n          }\n        } else {\n          if (button.classList.contains('collapsed')) {\n            button.click();\n          }\n        }\n      });\n\n    if (icon.classList.contains('fa-minimize')) {\n      icon.classList.remove('fa-minimize');\n      icon.classList.add('fa-maximize');\n    } else {\n      icon.classList.remove('fa-maximize');\n      icon.classList.add('fa-minimize');\n    }\n  }\n\n  showUhradenyDoklad(e) {\n    e.preventDefault();\n\n    const parent = e.target.closest('.uhradeny-doklad-cele-cislo');\n\n    if (parent.dataset.id) {\n      this.openURL(`/uctovny_doklads/${parent.dataset.id}`, {\n        parentUrl: new URL(location)\n      });\n    }\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  async onOkruhChange(e) {\n    await fillEvidOnOkruhChange(e.target);\n  }\n\n  async onEvidFilterChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n    this.updateFilter(e);\n  }\n\n  async onOkruhFilterChange(e) {\n    await fillEvidOnOkruhChange(e.target);\n    this.updateFilter(e);\n  }\n\n  async onSyntUcetChange(e) {\n    await onSyntUcetChange.call(this, e);\n\n    const parent = e.target.closest('.ud-predkontacia');\n    const tomselectEl = e.target.tomselect;\n\n    if (\n      this.constructor.CURRENCY_DIFF_ACCOUNTS.includes(\n        tomselectEl.options[tomselectEl.getValue()].kod\n      )\n    ) {\n      parent.querySelector('input[id$=\"_suma_cm\"').value = '';\n    }\n\n    this.UdpCalcLabels();\n  }\n\n  onCisMenaChange(e) {\n    let label = document.querySelector('#label_rate_to_date');\n    let rate = this.kurzElTarget;\n\n    if (e.target.value !== '1') {\n      label.classList.remove('d-none');\n      label.classList.add('d-flex');\n\n      makeRequest(\n        `/rates/get?cis_mena_id=${e.target.value}&datum=${\n          document.querySelector('#uctovny_doklad_datum_duup').value\n        }`\n      )\n        .then(result => (rate.value = formatNumber(result.rate, 3)))\n        .catch(err =>\n          showToastMessage(err, {\n            autohide: false,\n            type: 'bg-danger'\n          })\n        );\n    } else {\n      label.classList.remove('d-flex');\n      label.classList.add('d-none');\n      rate.value = formatNumber(1, 3);\n    }\n  }\n\n  onDatumDuupChange(e) {\n    const rateEl = this.kurzElTarget;\n    const dateVal = dayjs(e.target.value, 'DD.MM.YYYY').subtract(1, 'day');\n\n    document.querySelector('#label_date_of_rate').innerHTML =\n      dateVal.format('DD.MM.YYYY');\n\n    if (document.querySelector('#uctovny_doklad_cis_mena_id').value === '1') {\n      rateEl.value = formatNumber(1, 3);\n\n      return;\n    }\n\n    makeRequest(\n      `/rates/get?cis_mena_id=${\n        document.querySelector('#uctovny_doklad_cis_mena_id').value\n      }&datum=${e.target.value}`\n    )\n      .then(result => (rateEl.value = formatNumber(result.rate, 3)))\n      .catch(err =>\n        showToastMessage(err, {\n          autohide: false,\n          type: 'bg-danger'\n        })\n      );\n  }\n\n  onDatumVystaveniaChange(e) {\n    let d_dodania = document.querySelector('#uctovny_doklad_datum_dodania');\n    let d_splatnosti = document.querySelector(\n      '#uctovny_doklad_datum_splatnosti'\n    );\n    let d_duup = document.querySelector('#uctovny_doklad_datum_duup');\n    let d_dud = document.querySelector('#uctovny_doklad_datum_dud');\n\n    [d_dodania, d_splatnosti, d_duup, d_dud].forEach(date => {\n      date.value = e.target.value;\n    });\n  }\n\n  onDatumDodaniaChange(e) {\n    let d_duup = document.querySelector('#uctovny_doklad_datum_duup');\n    let d_dud = document.querySelector('#uctovny_doklad_datum_dud');\n\n    [d_duup, d_dud].forEach(date => {\n      date.value = e.target.value;\n    });\n\n    this.#updateCurrencyRate();\n  }\n\n  onCiselnyRadChange(e) {\n    makeRequest(\n      `/ciselny_rads/get-sample-numbering?ciselny_rad_id=${\n        document.querySelector('#uctovny_doklad_ciselny_rad_id').value\n      }&datum=${document.querySelector('#uctovny_doklad_datum_dodania').value}`,\n      { method: 'PATCH' }\n    )\n      .then(response => {\n        if (document.querySelector('form#new_uctovny_doklad')) {\n          document.querySelector('#uctovny_doklad_cislo').value =\n            response.level1;\n          document.querySelector('#uctovny_doklad_old_cislo').value =\n            response.level1;\n          document.querySelector('#uctovny_doklad_var_symbol').value = [\n            '1',\n            '2',\n            '10',\n            '11'\n          ].includes(document.querySelector('#uctovny_doklad_okruh_id').value)\n            ? response.level1.match(/\\d+/g).join('').substring(0, 10)\n            : '';\n\n          this.showSubmitButton(e.target);\n        }\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  onPartnerChange(e) {\n    const name = e.target.options[e.target.selectedIndex].dataset.obchodneMeno;\n    const tomSelectEl = this.filterPartnerElTarget?.tomselect;\n\n    console.log('filterPartner', this.filterPartnerElTarget);\n\n    if (!tomSelectEl) return;\n\n    if (!name) {\n      tomSelectEl.setValue(null);\n      return;\n    }\n\n    tomSelectEl.addOption({ obchodne_meno: name });\n    tomSelectEl.refreshOptions(false);\n    tomSelectEl.setValue(name);\n  }\n\n  onSumaChange(e) {\n    const parentEl = e.target.closest('.ud-predkontacia');\n    const tomselectEl = e.target.tomselect;\n    const accounts = [\n      parentEl.querySelector('select[id$=\"_md_synt_ucet_id\"'),\n      parentEl.querySelector('select[id$=\"_dal_synt_ucet_id\"')\n    ].map(select => {\n      const tomselectEl = select.tomselect;\n\n      return tomselectEl.getValue()\n        ? tomselectEl.options[tomselectEl.getValue()].kod\n        : null;\n    });\n\n    // if currency diff account, do not update suma_cm\n    if (\n      !accounts.some(acc =>\n        this.constructor.CURRENCY_DIFF_ACCOUNTS.includes(acc)\n      )\n    ) {\n      parentEl.querySelector('[id$=\"_suma_cm\"]').value = formatNumber(\n        e.target.value\n          ? parseNumber(this.kurzElTarget.value || 1) *\n              parseNumber(e.target.value)\n          : 0\n      );\n    }\n\n    this.UdpCalcLabels();\n  }\n\n  onSumaCmChange(e) {\n    const parentEl = e.target.closest('.ud-predkontacia');\n\n    if (e.target.value) {\n      parentEl.querySelector('[id$=\"_suma\"]').value = formatNumber(\n        parseNumber(e.target.value) / parseNumber(this.kurzElTarget.value || 1)\n      );\n    } else {\n      parentEl.querySelector('[id$=\"_suma\"]').value = formatNumber(0);\n    }\n\n    this.UdpCalcLabels();\n  }\n\n  onKurzChange() {\n    document.querySelectorAll('.ud-predkontacia').forEach(udp => {\n      const suma = udp.querySelector('[id$=\"_suma\"]');\n      const sumaCm = udp.querySelector('[id$=\"_suma_cm\"]');\n\n      if (!sumaCm.value) return;\n\n      suma.value = formatNumber(\n        parseNumber(sumaCm.value) / parseNumber(this.kurzElTarget.value || 1)\n      );\n\n      this.UdpCalcLabels();\n    });\n  }\n\n  updateFilter(e) {\n    this.delay(() => {\n      const parent = e.target.closest('#uctovny_doklads_filter');\n      const editForm = document.querySelector(\n        'form[id^=\"edit_uctovny_doklad_\"]'\n      );\n      let data = {};\n\n      if (editForm) {\n        data['id'] = editForm.id.split('_').pop();\n      }\n\n      [\n        'uctovny_doklad_filter_uhradeny_doklad_id',\n        'uctovny_doklad_filter_partner_obchodne_meno',\n        'uctovny_doklad_filter_okruh_id',\n        'uctovny_doklad_filter_evidencia_id',\n        'uctovny_doklad_filter_ciselny_rad_id',\n        'uctovny_doklad_filter_datum_duup_od',\n        'uctovny_doklad_filter_datum_duup_do',\n        'uctovny_doklad_filter_var_symbol',\n        'uctovny_doklad_filter_cele_cislo',\n        'uctovny_doklad_filter_iba_nepriradene'\n      ].forEach(name => {\n        data[name] = parent.querySelector(`#${name}`).value;\n      });\n\n      makeRequest(`/uctovny-doklads/ziskaj-podla-filtra`, {\n        method: 'PATCH',\n        data: data\n      })\n        .then(response => {\n          const list = document.querySelector('#uctovny_doklads_filter_list');\n          list.innerHTML = response.html;\n\n          list.querySelectorAll('table tbody tr').forEach(tr => {\n            tr.addEventListener('mouseenter', e => {\n              document\n                .querySelectorAll('#uctovny_doklads_filter_list table tbody tr')\n                .forEach(el => {\n                  el.classList.remove('table-active');\n                });\n\n              e.target.classList.add('table-active');\n            });\n          });\n\n          this.showNumber(\n            !!document.querySelector(\n              '#uctovny_doklads_filter #uctovny_doklad_filter_uhradeny_doklad_id'\n            ).value\n          );\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }, 500);\n  }\n\n  showNumber(show = true) {\n    let parent = document.querySelector('#uctovny_doklads_filter');\n\n    if (show) {\n      parent\n        .querySelector('#uctovny_doklad_filter_no_record_label')\n        .setAttribute('hidden', 'hidden');\n      parent\n        .querySelector('#uctovny_doklad_filter_record_label')\n        .removeAttribute('hidden');\n\n      parent\n        .querySelectorAll('#uctovny_doklads_filter_list .uhrad-doklad')\n        .forEach(button => {\n          button.setAttribute('disabled', 'disabled');\n        });\n    } else {\n      parent\n        .querySelector('#uctovny_doklad_filter_no_record_label')\n        .removeAttribute('hidden');\n      parent\n        .querySelector('#uctovny_doklad_filter_record_label')\n        .setAttribute('hidden', 'hidden');\n\n      parent\n        .querySelectorAll('#uctovny_doklads_filter_list .uhrad-doklad')\n        .forEach(button => {\n          button.removeAttribute('disabled');\n        });\n    }\n  }\n\n  filterList(e) {\n    Object.defineProperty(e, 'target', {\n      writable: false,\n      value: this.element.querySelector(\n        '#uctovny_doklads_filter #uctovny_doklad_filter_var_symbol'\n      )\n    });\n\n    this.updateFilter(e);\n  }\n\n  UdpCalcLabels() {\n    const sums = Array.from(\n      document.querySelectorAll(\n        '#ud_predkontacias .ud-predkontacia:not([style=\"display: none;\"])'\n      )\n    ).reduce(\n      (acc, udp) => {\n        if (udp.querySelector('select[id*=_md_analyt_ucet_id]').value) {\n          if (udp.querySelector('input[id*=_suma]').value) {\n            acc.md_eur += parseNumber(\n              udp.querySelector('input[id*=_suma]').value\n            );\n          }\n\n          if (udp.querySelector('input[id*=_suma_cm]').value) {\n            acc.md_cm += parseNumber(\n              udp.querySelector('input[id*=_suma_cm]').value\n            );\n          }\n        }\n\n        if (udp.querySelector('select[id*=_dal_analyt_ucet_id]').value) {\n          if (udp.querySelector('input[id*=_suma]').value) {\n            acc.dal_eur += parseNumber(\n              udp.querySelector('input[id*=_suma]').value\n            );\n          }\n\n          if (udp.querySelector('input[id*=_suma_cm]').value) {\n            acc.dal_cm += parseNumber(\n              udp.querySelector('input[id*=_suma_cm]').value\n            );\n          }\n        }\n\n        return acc;\n      },\n      { md_eur: 0, md_cm: 0, dal_eur: 0, dal_cm: 0 }\n    );\n\n    document.querySelector('#md_eur').innerHTML = formatNumber(sums.md_eur);\n    document.querySelector('#md_cm').innerHTML = formatNumber(sums.md_cm);\n    document.querySelector('#dal_eur').innerHTML = formatNumber(sums.dal_eur);\n    document.querySelector('#dal_cm').innerHTML = formatNumber(sums.dal_cm);\n\n    const differenceEl = document.querySelector('#difference');\n    const differenceCmEl = document.querySelector('#difference_cm');\n\n    if (sums.md_eur - sums.dal_eur !== 0 || sums.md_cm - sums.dal_cm !== 0) {\n      differenceEl.classList.add('d-sm-block');\n      differenceCmEl.classList.add('d-sm-block');\n      differenceEl.querySelector('span').innerHTML = formatNumber(\n        sums.md_eur - sums.dal_eur\n      );\n      differenceCmEl.querySelector('span').innerHTML = formatNumber(\n        sums.md_cm - sums.dal_cm\n      );\n\n      return;\n    }\n\n    differenceEl.classList.remove('d-sm-block');\n    differenceCmEl.classList.remove('d-sm-block');\n  }\n\n  changeOffcanvasHeight(e) {\n    const string = `${parseInt(\n      this.element.getElementsByClassName('card')[0].offsetHeight\n    )}${e.target.classList.contains('show') ? '+' : '-'}${parseInt(\n      this.element.querySelector('#ud_add_paid_document').offsetHeight\n    )}`;\n\n    this.element.getElementsByClassName('card')[0].style.height = `${Function(\n      `'use strict'; return (${string})`\n    )()}px`;\n  }\n\n  onSzcpChange(e) {\n    changeItemSzcp(\n      e.target,\n      '.ud-predkontacia',\n      e.target.id.replace('uctovny_doklad', '')\n    );\n  }\n\n  async #updateCurrencyRate() {\n    if (!dayjs(this.datumDodaniaElTarget.value, 'DD.MM.YYYY', true).isValid()) {\n      return;\n    }\n\n    try {\n      const rate = await getJSON(\n        `/currency-rates/get-by-date?date=${this.datumDodaniaElTarget.value}&cis_mena_id=${this.cisMenaElTarget.value}`\n      );\n\n      this.kurzElTarget.value = formatNumber(rate, 4);\n      this.onKurzChange();\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { fillEvidOnOkruhChange } from '../fill_evid_on_okruh_change';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showFilter } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"uctovny-doklads-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  initialize() {\n    Object.assign(this, { showFilter });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  openNewRecord(e) {\n    openURL('/uctovny_doklads/new');\n  }\n\n  showUctovnyRozvrh(e) {\n    openURL('/uctovny_rozvrhs');\n  }\n\n  updateMarkedCount(e) {\n    makeRequest('/uctovny-doklads/marked-count')\n      .then(response => {\n        document.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  deleteMarked(e) {\n    makeRequest('/uctovny-doklads/delete-marked')\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  showZavierkas(e) {\n    openURL(`/zavierkas`);\n  }\n\n  printList(e) {\n    openURL(\n      `/ud-prints/preview-list/${\n        e.target.closest('.print-list').dataset.groupsOnly\n      }`,\n      { tab: true }\n    );\n  }\n\n  async onOkruhChange(e) {\n    await fillEvidOnOkruhChange(e.target);\n    await fillCiselnyRadOnEvidChange(\n      this.element.querySelector('#filter_filter_evidencia_id')\n    );\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  onHospRokChange(e) {\n    if (e.target.value) {\n      makeRequest(`/uctovny-doklads/set-last-used-hr/${e.target.value}.json`);\n\n      document.querySelector('[name=\"commit\"][type=\"submit\"]').click();\n    }\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\nimport { parseNumber } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"uctovny-doklads-show\"\nexport default class extends Controller {\n  connect() {\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n    import('../show_submit_buttons').then(show_submit_buttons => {\n      this.boundRegisterKeyupToShowSubmitButton =\n        show_submit_buttons.registerKeyupToShowSubmitButton.bind(this);\n      this.boundRegisterChangeToShowSubmitButton =\n        show_submit_buttons.registerChangeToShowSubmitButton.bind(this);\n\n      this.element.addEventListener(\n        'change',\n        this.boundRegisterChangeToShowSubmitButton\n      );\n      this.element.addEventListener(\n        'keyup',\n        this.boundRegisterKeyupToShowSubmitButton\n      );\n    });\n\n    initializeFilePond();\n  }\n\n  disconnect() {\n    destroyFilePond();\n\n    this.element.removeEventListener(\n      'change',\n      this.boundRegisterChangeToShowSubmitButton\n    );\n    this.element.removeEventListener(\n      'keyup',\n      this.boundRegisterKeyupToShowSubmitButton\n    );\n  }\n\n  changeCount(e) {\n    const p = e.target.closest('div.modal').querySelector('#data_count_p');\n\n    p.innerHTML = p.dataset.text.replace('%count%', e.target.value);\n  }\n\n  deleteRecord(e) {\n    if (confirm(e.target.dataset.confirm)) {\n      makeRequest(this.element.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          if (response.status && response.status === true) {\n            window.close();\n          } else {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  previewRecords() {\n    this.openURL(\n      `/ud-prints/preview-records/false/${this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}.pdf`,\n      { fullscreen: true }\n    );\n  }\n\n  createXCopies(e) {\n    const parent = e.target.closest('div.modal');\n\n    e.preventDefault();\n    e.submitter.setAttribute('disabled', 'disabled');\n\n    makeRequest(e.target.action, {\n      method: 'POST',\n      fillContentType: false,\n      data: new FormData(e.target),\n    })\n      .then(response => {\n        if (response.status) {\n          parent.querySelector('[data-bs-dismiss=\"modal\"]').click();\n        } else {\n          e.submitter.classList.remove('disabled');\n        }\n\n        window.Turbo.renderStreamMessage(response.turbo_stream);\n      })\n      .catch(e => showToastMessage(e, { autohide: false, type: 'bg-danger' }));\n  }\n\n  findUd() {\n    const suma = this.element.querySelector('#uctovny_doklad_suma_cm');\n\n    if (!suma) return;\n\n    window.open(\n      `/uctovny_doklads?suma_do=${parseNumber(\n        suma.value\n      )}&suma_od=${parseNumber(suma.value)}`,\n      '_blank'\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"ud-mass-changes-anchor-handler\"\nexport default class extends Controller {\n  windows = ['accounts', 'vat', 'cr-vat', 'dud', 'duup', 'szcp', 'numbering'];\n\n  initialize() {\n    let methods: { [key: string]: Function } = {};\n\n    this.windows.forEach(window => {\n      methods[`change${this.capitalize(window)}Window`] = () => {\n        openURL(`/uctovny_doklads/change-${window}`);\n      };\n    });\n\n    Object.assign(this, methods);\n  }\n\n  changeFlagsWindow(e: Event) {\n    const target = <HTMLElement>e.target;\n\n    openURL(\n      `/uctovny_doklads/change-flags/${\n        (<HTMLButtonElement>target.closest('.dropdown-item'))?.dataset?.set ||\n        true\n      }`\n    );\n  }\n\n  private capitalize(str: string): string {\n    return str\n      .split('-')\n      .map(n => n.charAt(0).toUpperCase() + n.slice(1))\n      .join('');\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"unasigned\"\nexport default class extends Controller {\n\tconnect() {\n\t\tlet event = new Event('change');\n\t\tObject.defineProperty(event, 'target', {\n\t\t\twritable: false,\n\t\t\tvalue: document.querySelector('#filter select.tom-select')\n\t\t});\n\n\t\tchangeEvents(event);\n\t}\n}", "import { Controller } from '@hotwired/stimulus';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"up-emails\"\nexport default class extends Controller {\n  showPartner(e) {\n    e.preventDefault();\n\n    const target = this.element.querySelector('#show_partner');\n    const { partnerId: id } = target.dataset;\n\n    if (!id) return;\n\n    const url = new URL(`/partner/${id}.html`, location);\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  async submit(e) {\n    const submitter = e.target.closest(\n      '[data-action=\"click->up-emails#submit\"]'\n    );\n\n    submitter.classList.add('disabled');\n\n    try {\n      e.preventDefault();\n\n      const form = this.element.querySelector('form');\n      const json = await makeRequest(form.action, {\n        method: 'POST',\n        fillContentType: false,\n        data: new FormData(form),\n      });\n\n      if (json.status) window.close();\n\n      window.Turbo.renderStreamMessage(json.turbo_stream);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n\n    if (!submitter) return;\n\n    submitter.classList.remove('disabled');\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { onPartnerChange, onDodavatelChange } from '../utils';\n\n// Connects to data-controller=\"upomienkas\"\nexport default class extends Controller {\n  static targets = ['partnerEl'];\n\n  declare partnerElTarget: HTMLSelectElement;\n\n  initialize() {\n    Object.assign(this, { onPartnerChange, onDodavatelChange });\n  }\n\n  showPartner(e: Event) {\n    openURL(`/partners/${this.partnerElTarget.value || 'new'}`, {\n      parentUrl: new URL(location.toString())\n    });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { deleteJSON, getJSON, postJSON } from '../utils';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"upomienkas-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  openNew() {\n    openURL('/upomienkas/new');\n  }\n\n  printList(e) {\n    openURL(\n      `/up-prints/preview-list/${\n        e.target.closest('.dropdown-item').dataset.groupsOnly\n      }`,\n      { tab: true }\n    );\n  }\n\n  printRecords() {\n    openURL('/up-prints/preview-records.pdf', { tab: true });\n  }\n\n  async setMarkedCount() {\n    try {\n      const json = await getJSON('/upomienkas-marked-count');\n      const { count } = json;\n\n      if (!count) return;\n\n      this.element.querySelectorAll('.marked-count').forEach(element => {\n        element.innerHTML = count;\n      });\n    } catch (err) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async deleteMarked() {\n    try {\n      const json = await deleteJSON('/upomienkas/delete-marked');\n      const { turbo_stream: turboStream } = json;\n\n      if (!turboStream) return;\n\n      window.Turbo.renderStreamMessage(turboStream);\n    } catch (err) {\n      showToastMessage(err, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async send(e) {\n    try {\n      const { message } = e.target.closest('.dropdown-item').dataset;\n\n      if (!message) return;\n\n      if (!confirm(message)) return;\n\n      const json = await postJSON('/up-emails/send');\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return;\n\n      window.Turbo.renderStreamMessage(turboStream);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"upomienkas-show\"\nexport default class extends Controller {\n  print() {\n    openURL(\n      `/up-prints/${this.element\n        ?.querySelector('form')\n        ?.getAttribute('action')\n        ?.split('/')\n        .pop()}.pdf`,\n      { fullscreen: true }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"users\"\nexport default class extends Controller {\n  connect() {}\n\n  onSubmitButton() {\n    window.onbeforeunload = null;\n  }\n\n  onStornoButton() {\n    window.onbeforeunload = null;\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { appendCanvas, deleteJSON, getJSON } from '../utils';\nimport { postFormData } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"users-index\"\nexport default class extends Controller {\n  connect() {\n    Object.assign(this, {\n      appendCanvas: e => appendCanvas(e, this.#appendCanvasCallback),\n    });\n  }\n\n  #appendCanvasCallback(canvas, method) {\n    [...canvas.classList].forEach(className => {\n      if (!['offcanvas', 'offcanvas-end', 'showing'].includes(className))\n        canvas.classList.remove(className);\n    });\n\n    canvas.classList.add(method);\n  }\n\n  update() {\n    this.element.querySelector('form').submit();\n  }\n\n  async onSubmitPermissions(e) {\n    e.preventDefault();\n\n    try {\n      const form = this.element.querySelector(\n        'form[data-action=\"change->users-index#onSubmitPermissions\"]'\n      );\n      const formData = new FormData(form);\n      const response = await postFormData(\n        form.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { status, turbo_stream: turboStream } = json;\n      const flagEl = this.element.querySelector('#canvas .status-flag');\n\n      if (status && flagEl) {\n        flagEl.classList.remove('d-none');\n\n        setTimeout(() => {\n          flagEl.classList.add('d-none');\n        }, 2000);\n\n        return;\n      }\n\n      window.Turbo.renderStreamMessage(turboStream);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async onSubmitSearchUser(e) {\n    try {\n      e.preventDefault();\n      const canvas = this.element.querySelector('#canvas');\n      const form = this.element.querySelector(\n        'form[data-action=\"submit->users-index#onSubmitSearchUser\"]'\n      );\n      const formData = new FormData(form);\n      const response = await postFormData(\n        form.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { status, message, html } = json;\n\n      if (!status) {\n        showToastMessage(message, { type: 'bg-danger' });\n\n        return e.submitter.classList.remove('disabled');\n      }\n\n      canvas.innerHTML = html;\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async removeUser(e) {\n    const btnEl = e.target.closest('button');\n    const { id, confirm: confirmMsg } = btnEl.dataset;\n\n    if (confirm(confirmMsg)) {\n      try {\n        const json = await deleteJSON(`/firma_public_users/${id}`);\n\n        const { turbo_stream: turboStream, status } = json;\n\n        if (status) e.target.closest('.firma-public-user').remove();\n\n        window.Turbo.renderStreamMessage(turboStream);\n      } catch (err) {\n        showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n      }\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\n\n// Connects to data-controller=\"users-show\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\n\n// Connects to data-controller=\"vanillajs-datepicker\"\nexport default class extends Controller {\n  datepickers = [];\n\n  connect() {\n    this.element\n      .querySelectorAll('input.vanillajs-datepicker')\n      .forEach(datepicker => {\n        this.datepickers.push(initializeVanillajsDatepicker(datepicker));\n      });\n  }\n\n  disconnect() {\n    this.datepickers.forEach(datepicker => datepicker.destroy());\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { popupHelpers, onSyntUcetChange } from '../utils';\n\n// Connects to data-controller=\"vykaz-polozkas\"\nexport default class extends Controller {\n  initialize(): void {\n    Object.assign(this, popupHelpers, { onSyntUcetChange });\n  }\n\n  onTypChange(e: Event) {\n    const target = e.target as HTMLSelectElement;\n\n    if (!target.value) return;\n\n    const typ = (\n      this.element.querySelector('[name$=\"[typ]\"]') as HTMLSelectElement\n    ).value;\n\n    this.element.querySelectorAll('.partial').forEach(element => {\n      element.classList.contains(`partial--${typ}`)\n        ? element.classList.add('d-none')\n        : element.classList.remove('d-none');\n    });\n  }\n\n  onAddFieldButton(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLSelectElement;\n    const btnEl = target.closest('.add-fields') as HTMLButtonElement;\n\n    addFields(btnEl);\n  }\n\n  onDeleteResourceButton(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLSelectElement;\n    const btnEl = target.closest('.btn') as HTMLButtonElement;\n\n    deleteResource(btnEl);\n  }\n}\n", "import FormChangesController from './form_changes_controller';\nimport { deleteJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\n\n// Connects to data-controller=\"vykaz-polozkas-show\"\nexport default class extends FormChangesController {\n  async delete(e: Event) {\n    try {\n      e.preventDefault();\n\n      const target = e.target as HTMLButtonElement;\n      const btn = target.closest('.btn') as HTMLButtonElement;\n      const { message } = btn.dataset;\n      const id = (window as any).location.href.split('/').pop();\n\n      if (!id) return;\n\n      if (confirm(message)) {\n        const response = await deleteJSON(`/vykaz_polozkas/${id}`);\n        const { status, message } = response;\n\n        if (status) return (window as any).close();\n\n        showToastMessage(message, {\n          autohide: false,\n          type: 'bg-danger',\n        });\n      }\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  onResetButton(e: Event) {\n    const target = e.target as HTMLEmbedElement;\n    const { message } = target.closest('a')!.dataset;\n\n    if (!confirm(message)) e.preventDefault();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\n\n// Connects to data-controller=\"vykaz-statement-export\"\nexport default class extends Controller {\n  static targets = ['type'];\n\n  declare readonly typeTarget: HTMLSelectElement & { tomselect: TomSelect };\n\n  connect() {\n    const vykazEl: HTMLSelectElement =\n      document.querySelector('#filter_vykaz_id')!;\n    const selectedOption = vykazEl.options[vykazEl.selectedIndex];\n    const { tuj } = selectedOption.dataset;\n\n    if (!tuj) return;\n\n    this.typeTarget.tomselect.setValue(tuj);\n  }\n}\n", "import { showToastMessage } from '../show_toast_message';\nimport { postFormData, appendCanvas } from '../utils';\nimport { customJSON } from '../types';\nimport StatementsIndex from './statements_index_controller';\nimport { Context } from '@hotwired/stimulus';\nimport { StatementType } from '../enums';\n// @ts-ignore\nimport Datepicker from 'vanillajs-datepicker/js/datepicker-full';\nimport { download } from '../reader';\nimport { openURL } from '../window_manager';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\n// Connects to data-controller=\"vykazs-index\"\nexport default class extends StatementsIndex {\n  static targets = ['vykazEl', 'zostaveneEl', 'schvaleneEl', 'submitButtons'];\n\n  declare readonly submitButtonsTargets: HTMLButtonElement[];\n  declare readonly zostaveneElTarget: HTMLInputElement;\n  declare readonly schvaleneElTarget: HTMLInputElement;\n  declare readonly vykazElTarget: HTMLSelectElement;\n\n  constructor(context: Context) {\n    super(context, StatementType.VYKAZ);\n  }\n\n  initialize(): void {\n    dayjs.extend(customParseFormat);\n    Object.assign(this, { appendCanvas });\n  }\n\n  connect() {\n    super.connect();\n\n    if (this.vykazElTarget.value) this.onVykazChange(new Event('change'));\n  }\n\n  disconnect(): void {\n    super.disconnect();\n  }\n\n  onVykazChange(_: Event) {\n    ['stredisko', 'zakazka', 'cinnost', 'pracovnik'].forEach(name => {\n      const select = this.element.querySelector(\n        `select#filter_${name}_id`\n      ) as HTMLSelectElement & { tomselect: TomSelect };\n\n      if (!select) return;\n\n      const value =\n        this.vykazElTarget.options[this.vykazElTarget.selectedIndex].dataset[\n          `${name}Id`\n        ];\n      select.tomselect.setValue(value || '', true);\n    });\n\n    if (!this.vykazElTarget.value) return;\n\n    const { custom, zostava } =\n      this.vykazElTarget.options[this.vykazElTarget.selectedIndex].dataset;\n\n    this.submitButtonsTargets.forEach(btn => btn.classList.add('disabled'));\n    this.onSubmit(new SubmitEvent('submit'));\n    this.toggleLastRow(custom === 'true');\n    this.toggleButtons(custom === 'true');\n    this.toggleLangs(zostava);\n  }\n\n  async onSubmit(e: SubmitEvent) {\n    e.preventDefault();\n\n    try {\n      const form = this.element.querySelector('form')!;\n      const formData = new FormData(form);\n      const url = new URL(form.getAttribute('action')!, location.toString());\n      const expandedIds = [\n        ...form.querySelectorAll(\n          '.rows-0 .accordion-button[aria-expanded=\"true\"]'\n        )\n      ].map(e => {\n        const btnEl = <HTMLDivElement>e;\n        const itemEl = <HTMLDivElement>btnEl.closest('.accordion-item');\n\n        return itemEl.dataset.id;\n      });\n\n      url.searchParams.set('expanded', expandedIds?.join(',') || '');\n\n      const response = await postFormData(url, formData);\n      const json: customJSON = await response.json();\n      const { turbo_stream: turboStream } = json;\n\n      if (!turboStream) return;\n\n      (window as any).Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      this.submitButtonsTargets.forEach(btn => {\n        btn.classList.remove('disabled');\n        btn.removeAttribute('disabled');\n      });\n    }\n  }\n\n  async export(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLElement;\n    const submitter = target.closest(\n      '[data-action=\"vykazs-index#export\"]'\n    ) as HTMLButtonElement;\n\n    try {\n      const form = this.element.querySelector<HTMLFormElement>('#new_filter')!;\n      const target = <HTMLDListElement>e.target;\n      const btnEl = target.closest(\n        '[data-action=\"vykazs-index#export\"]'\n      ) as HTMLButtonElement;\n      const { file, lang, type } = btnEl.dataset;\n      let url = new URL('/vykazs/export', location.toString());\n\n      if (file) url.searchParams.set('file', file);\n      if (lang) url.searchParams.set('lang', lang);\n      if (type) url.searchParams.set('type', type);\n\n      submitter.setAttribute('disabled', 'disabled');\n\n      const formData = new FormData(form);\n\n      if (file === 'all' && type === 'all') this.includeExportFilter(formData);\n\n      const response = await postFormData(url, formData);\n\n      if (response.status === 200)\n        return download(\n          response,\n          response.headers.get('Report-Filename') ?? ''\n        );\n\n      showToastMessage(await response.text(), {\n        autohide: false,\n        type: 'bg-danger'\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      submitter.removeAttribute('disabled');\n      this.element\n        .querySelector<HTMLButtonElement>('.offcanvas button.btn-close')!\n        .click();\n    }\n  }\n\n  private includeExportFilter(formData: FormData) {\n    ['uzozn', 'ozn493', 'path', 'root_path', 'name', 'tuj'].forEach(name => {\n      const element = this.element.querySelector<HTMLInputElement>(\n        `#filter_filter_${name}`\n      );\n      const value =\n        element?.type === 'checkbox' ? element?.checked : element?.value;\n\n      formData.set(`filter[filter][${name}]`, value?.toString() || '');\n    });\n  }\n\n  onVykazTypChange(e: Event) {\n    const target = <HTMLSelectElement>e.target;\n\n    if (!target.value) return;\n\n    if (\n      target.value === '1' &&\n      this.element.querySelector('.periods.periods--x.d-none')\n    )\n      return;\n\n    if (\n      target.value !== '1' &&\n      this.element.querySelector('.periods.periods--2.d-none')\n    )\n      return;\n\n    this.element\n      .querySelectorAll('.periods')\n      .forEach(element => element.classList.toggle('d-none'));\n  }\n\n  changePeriod(e: Event) {\n    e.preventDefault();\n\n    const target = (e.target as HTMLElement).closest(\n      '.btn'\n    ) as HTMLButtonElement;\n    const { func } = target.dataset as { func: 'add' | 'subtract' };\n    const parent = target.closest('.input-group') as HTMLDivElement;\n\n    parent.querySelectorAll('.vanillajs-datepicker').forEach(element => {\n      const inputEl = element as Datepicker;\n\n      if (!inputEl.value) return;\n\n      const dayjsObj = dayjs(inputEl.value, 'DD.MM.YYYY', true);\n\n      inputEl.datepicker.setDate(dayjsObj[func](1, 'year').toDate());\n    });\n  }\n\n  print(e: Event) {\n    e.preventDefault();\n    const anchor = (e.target as HTMLElement).closest(\n      '.dropdown-item'\n    ) as HTMLAnchorElement;\n    const { all } = anchor.dataset;\n\n    openURL(\n      `/vyk-prints/preview-list?vykaz_id=${this.vykazElTarget.value}&all=${all}`,\n      {\n        tab: true\n      }\n    );\n  }\n\n  newItem(e: Event) {\n    e.preventDefault();\n\n    openURL(`/vykaz_polozkas/new?vykaz_id=${this.vykazElTarget.value}`);\n  }\n\n  async customExport(e: Event) {\n    e.preventDefault();\n\n    try {\n      const response = await fetch(\n        `/vykazs/custom-export/${this.vykazElTarget.value}`\n      );\n\n      if (response.status === 200)\n        return download(\n          response,\n          response.headers.get('Report-Filename') ?? ''\n        );\n\n      showToastMessage(await response.text(), {\n        autohide: false,\n        type: 'bg-danger'\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showList(e: Event) {\n    e.preventDefault();\n\n    openURL(`/vykazs/list`);\n  }\n\n  private toggleLastRow(hide: boolean) {\n    const lastRowDiv = this.element.querySelector(\n      '.filter__last-row'\n    ) as HTMLDivElement;\n\n    hide\n      ? lastRowDiv.classList.add('d-none')\n      : lastRowDiv.classList.remove('d-none');\n  }\n\n  private toggleButtons(showCustom: boolean) {\n    (\n      [...this.element.querySelectorAll('.togglable')] as HTMLButtonElement[]\n    ).forEach(element => {\n      const custom = element.dataset.custom === 'true';\n\n      custom === showCustom || !element.dataset.custom\n        ? element.removeAttribute('disabled')\n        : element.setAttribute('disabled', 'disabled');\n    });\n  }\n\n  private toggleLangs(zostava: string | undefined) {\n    (\n      [\n        ...this.element.querySelectorAll('a[data-file=\"pdf\"]')\n      ] as HTMLAnchorElement[]\n    ).forEach(elem => {\n      const { only } = elem.dataset;\n\n      console.log('only === zostava || !only: ', only === zostava || !only);\n\n      (zostava && only?.split(',').includes(zostava)) || !only\n        ? elem.classList.remove('disabled')\n        : elem.classList.add('disabled');\n    });\n  }\n}\n", "import { addFields } from '../add';\nimport { deleteResource } from '../delete';\nimport { initializeTomSelect } from '../tom_select';\nimport FormChangesController from './form_changes_controller';\nimport { popupHelpers } from '../utils';\n\n// Connects to data-controller=\"vykazs-list\"\nexport default class extends FormChangesController {\n  connect(): void {\n    super.connect();\n\n    Object.assign(this, popupHelpers);\n  }\n\n  disconnect(): void {\n    super.disconnect();\n  }\n\n  onAddFieldButton(e: Event) {\n    e.preventDefault();\n\n    const btnEl = (e.target! as HTMLElement).closest(\n      '.add-fields'\n    ) as HTMLButtonElement;\n\n    addFields(btnEl, (div: HTMLDivElement) => {\n      initializeTomSelect(div.querySelectorAll('.tom-select'));\n    });\n  }\n\n  onDeleteButton(e: Event) {\n    e.preventDefault();\n\n    const target = e.target as HTMLButtonElement;\n    deleteResource(target.closest('.btn'));\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"zap-emails\"\nexport default class extends Controller {\n  showPartner(e) {\n    e.preventDefault();\n\n    const target = e.target.closest('.btn');\n    const { partnerId: id } = target.dataset;\n\n    if (!id) return;\n\n    const url = new URL(`/partners/${id}.html`, location);\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  async submit(e) {\n    const submitter = e.target.closest(\n      '[data-action=\"click->zap-emails#submit\"]'\n    );\n\n    try {\n      submitter.classList.add('disabled');\n      e.preventDefault();\n\n      const form = this.element.querySelector('form');\n      const json = await makeRequest(form.action, {\n        method: 'POST',\n        fillContentType: false,\n        data: new FormData(form),\n      });\n\n      if (json.status) window.close();\n\n      window.Turbo.renderStreamMessage(json.turbo_stream);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    } finally {\n      submitter?.classList.remove('disabled');\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { deleteResource } from '../delete';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\nimport { openURL } from '../window_manager';\nimport { serializeFormData } from '../form_serializer';\nimport { showSubmitButton } from '../show_submit_buttons';\nimport { formatNumber, parseNumber } from '../utils';\nimport makeRequest from '../make_request';\nimport { popupHelpers, onPartnerChange, onDodavatelChange } from '../utils';\n\n// Connects to data-controller=\"zapocets\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers, { onPartnerChange, onDodavatelChange });\n  }\n\n  updateLabel(e) {\n    const numberEl = this.element.querySelector('#label_invoice_number');\n\n    if (!numberEl) return;\n\n    const evidEl = this.element.querySelector('#zapocet_evidencia_id');\n    const cisRadEl = this.element.querySelector('#zapocet_ciselny_rad_id');\n\n    [evidEl, cisRadEl].forEach(element => {\n      if (element.tomselect.getValue()) {\n        numberEl.classList.remove('text-danger');\n        numberEl.classList.add('text-primary');\n      } else {\n        numberEl.classList.remove('text-primary');\n        numberEl.classList.add('text-danger');\n      }\n    });\n\n    numberEl.innerHTML = `${evidEl.options[evidEl.selectedIndex].dataset.kod}-${\n      cisRadEl.options[cisRadEl.selectedIndex].dataset.kod\n    }-${this.element.querySelector('#zapocet_cislo').value}`;\n  }\n\n  onTypChange(e) {\n    this.element.querySelector('#label_typ').innerHTML =\n      e.target.options[e.target.selectedIndex].text;\n  }\n\n  onDatumChange(e) {\n    this.element.querySelector('#label_date').innerHTML = e.target.value;\n  }\n\n  async onEvidChange(e) {\n    await fillCiselnyRadOnEvidChange(e.target);\n  }\n\n  onSumaBChange(e) {\n    const parentEl = e.target.closest('tr');\n\n    parentEl.querySelector('td.payment').innerHTML = formatNumber(\n      parseNumber(parentEl.querySelector('td.invoiced').innerHTML) -\n        parseNumber(e.target.value) -\n        parseNumber(parentEl.querySelector('td.paid').innerHTML)\n    );\n\n    this.calc(e.target.closest('.assigned-part').dataset.id);\n  }\n\n  openAssigned(e) {\n    if (e.target.closest('td').classList.contains('unclickable')) {\n      return false;\n    }\n\n    e.preventDefault();\n\n    let url = '/';\n\n    switch (e.target.closest('.tpd').closest('.assigned-part').dataset.id) {\n      case 'ofs':\n        url += 'odoslana_fakturas/';\n        break;\n      case 'dfs':\n        url += 'dosla_fakturas/';\n        break;\n      default:\n        return alert('not supported');\n    }\n\n    openURL(url + e.target.closest('.tpd').dataset.idA, {\n      parentUrl: new URL(location)\n    });\n  }\n\n  openUnassigned(e) {\n    if (e.target.closest('td').classList.contains('unclickable')) {\n      return false;\n    }\n\n    e.preventDefault();\n\n    let url = '/';\n\n    switch (\n      e.target.closest('.unassigned-record').closest('.unassigned-part').dataset\n        .id\n    ) {\n      case 'ofs':\n        url += 'odoslana_fakturas/';\n        break;\n      case 'dfs':\n        url += 'dosla_fakturas/';\n        break;\n      default:\n        return alert('not supported');\n    }\n\n    openURL(url + e.target.closest('.unassigned-record').dataset.id, {\n      parentUrl: new URL(location)\n    });\n  }\n\n  openCiselnyRad() {\n    let id = this.element.querySelector('#zapocet_ciselny_rad_id').value;\n\n    if (id) {\n      openURL(`/ciselny_rads/${id}`, { parentUrl: new URL(location) });\n    } else {\n      openURL(\n        `/ciselny_rads/new/${\n          this.element.querySelector('#zapocet_evidencia_id').value\n        }`,\n        { parentUrl: new URL(location) }\n      );\n    }\n  }\n\n  openEvidencia() {\n    openURL('/evids/14', { parentUrl: new URL(location) });\n  }\n\n  showPartner() {\n    let url;\n    let partnerId = this.element.querySelector(\n      '#zapocet_partner_id:not(:disabled)'\n    ).value;\n\n    if (partnerId) {\n      url = `/partners/${partnerId}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  deleteAssigned(e) {\n    deleteResource(e.target.closest('.delete-resource'), () => {\n      const actionAttr = this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .match(/\\b\\w+/g);\n      const id = actionAttr.length === 2 ? actionAttr.pop() : null;\n      const data = new FormData(\n        this.element.querySelector('form[class$=\"_zapocet\"]')\n      );\n      const part = e.target\n        .closest('.delete-resource')\n        .closest('.assigned-part').dataset.id;\n\n      makeRequest(\n        `/zapocets/add-tpd/${\n          this.element.querySelector('#zapocet_partner_id:not(:disabled)').value\n        }?part=${part}${id ? `&zapocet_id=${id}` : ''}`,\n        {\n          method: 'POST',\n          data: {\n            assigned: JSON.stringify(\n              serializeFormData(\n                Object.fromEntries(data),\n                'zapocet',\n                `assigned_${part}`\n              )\n            )\n          }\n        }\n      ).then(json => {\n        window.Turbo.renderStreamMessage(json.assigned);\n        window.Turbo.renderStreamMessage(json.unassigned);\n      });\n\n      this.calc(part);\n    });\n\n    e.preventDefault();\n  }\n\n  assign(e) {\n    const data = new FormData(\n      this.element.querySelector('form[class$=\"_zapocet\"]')\n    );\n    const part = e.target.closest('.assign').closest('.unassigned-part')\n      .dataset.id;\n    const actionAttr = this.element\n      .querySelector('form')\n      .getAttribute('action')\n      .match(/\\b\\w+/g);\n    const id = actionAttr.length === 2 ? actionAttr.pop() : null;\n\n    makeRequest(\n      `/zapocets/add-tpd/${\n        this.element.querySelector('#zapocet_partner_id:not(:disabled)').value\n      }/${e.target.closest('.unassigned-record').dataset.id}?part=${part}${\n        id ? `&zapocet_id=${id}` : ''\n      }`,\n      {\n        method: 'POST',\n        data: {\n          assigned: JSON.stringify(\n            serializeFormData(\n              Object.fromEntries(data),\n              'zapocet',\n              `assigned_${part}`\n            )\n          )\n        }\n      }\n    ).then(json => {\n      showSubmitButton(e.target);\n\n      window.Turbo.renderStreamMessage(json.assigned);\n      window.Turbo.renderStreamMessage(json.unassigned);\n\n      // this.calc(part);\n    });\n  }\n\n  calc(part) {\n    const sums = Array.from(\n      this.element.querySelectorAll(`table#assigned_${part}_table tbody tr`)\n    ).reduce(\n      (acc, row) => {\n        if (\n          row.classList.length === 0 ||\n          row.querySelector('input[name$=\"[_destroy]\"]').value === 'true'\n        ) {\n          return acc;\n        }\n\n        ['paid', 'payment', 'invoiced', 'credit'].forEach(className => {\n          const element = row.querySelector(`.${className}`);\n\n          acc[className] += parseNumber(\n            element.nodeName === 'INPUT' ? element.value : element.innerHTML\n          );\n        });\n\n        return acc;\n      },\n      { paid: 0.0, payment: 0.0, invoiced: 0.0, credit: 0.0 }\n    );\n\n    this.element.querySelector(`span#label_${part}_invoiced`).innerHTML =\n      formatNumber(sums.invoiced);\n    this.element.querySelector(`span#label_${part}_paid`).innerHTML =\n      formatNumber(sums.paid);\n    this.element.querySelector(`span#label_${part}_credit`).innerHTML =\n      formatNumber(sums.credit);\n    this.element.querySelector(`span#label_${part}_payment`).innerHTML =\n      formatNumber(sums.payment);\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"zapocets-index\"\nexport default class extends Controller {\n  static targets = ['submitBtn'];\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  chargeMarked(e) {\n    makeRequest('/zapocets/charge-records/14.json', { method: 'PATCH' })\n      .then(response => {\n        showToastMessage(response.message);\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  createNew(e) {\n    openURL('/zapocets/new');\n  }\n\n  additionalFunctions(e) {\n    makeRequest('odoslana-fakturas/marked-count')\n      .then(response => {\n        this.element.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"zapocets-new\"\nexport default class extends Controller {\n  onPartnerChange(e) {\n    window.onbeforeunload = null;\n\n    const partnerId = e.target.value;\n    const url = new URL(location);\n\n    if (partnerId) {\n      openURL(`/zapocets/new/${partnerId}${url.search}`, {\n        target: '_self',\n      });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\n\n// Connects to data-controller=\"zapocets-refresher\"\nexport default class extends Controller {\n  connect() {\n    const part = this.element.id.split('_')[1];\n    const suma = this.element.querySelector('[name$=\"[suma_b]\"]');\n\n    const zapocetsController =\n      this.application.getControllerForElementAndIdentifier(\n        document.querySelector('[data-controller^=\"zapocets\"]'),\n        'zapocets'\n      );\n\n    if (suma) zapocetsController?.calc(part);\n\n    document.querySelector(`span#assigned_${part}_count`).innerHTML =\n      document.querySelectorAll(\n        `#assigned_${part}_table .tpd:not(.d-none)`\n      ).length;\n    document.querySelector(`span#unassigned_${part}_count`).innerHTML =\n      document.querySelectorAll(\n        `#unassigned_${part}_table .unassigned-record`\n      ).length;\n\n    const partnerSelectEl = document.querySelector('select#zapocet_partner_id');\n    const partnerInputEl = document.querySelector('input#zapocet_partner_id');\n\n    if (\n      parseInt(document.querySelector(`span#assigned_ofs_count`).innerHTML) ===\n        0 &&\n      parseInt(document.querySelector(`span#assigned_dfs_count`).innerHTML) ===\n        0\n    ) {\n      partnerSelectEl.tomselect\n        ? partnerSelectEl.tomselect.enable()\n        : partnerSelectEl.removeAttribute('disabled'); // if not initialized at the time of execution\n      partnerInputEl.setAttribute('disabled', 'disabled');\n\n      return;\n    }\n\n    partnerSelectEl.tomselect\n      ? partnerSelectEl.tomselect.disable()\n      : partnerSelectEl.setAttribute('disabled', 'disabled');\n    partnerInputEl.removeAttribute('disabled');\n    partnerInputEl.value = partnerSelectEl.tomselect.getValue();\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"zapocets-show\"\nexport default class extends Controller {\n  connect() {\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  disconnect() {\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  delete(e) {\n    if (confirm(e.target.dataset.confirm)) {\n      makeRequest(this.element.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          if (response.status && response.status === true) {\n            window.close();\n          } else {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  onPartnerChange(e) {\n    const data = new FormData(\n      this.element.querySelector('form[class$=\"_zapocet\"]')\n    );\n\n    ['ofs', 'dfs'].forEach(part => {\n      makeRequest(\n        `/zapocets/add-tpd/${\n          e.target.value\n        }?part=${part}&zapocet_id=${this.element\n          .querySelector('form')\n          .getAttribute('action')\n          .match(/\\b\\w+/g)\n          .pop()}`,\n        {\n          method: 'POST',\n          data: { assigned: '{}' },\n        }\n      ).then(json => {\n        window.Turbo.renderStreamMessage(json.assigned);\n        window.Turbo.renderStreamMessage(json.unassigned);\n      });\n    });\n  }\n\n  previewRecords() {\n    openURL(\n      `/zap-prints/preview-records/${this.element\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}.pdf`,\n      { fullscreen: true }\n    );\n  }\n\n  send() {\n    openURL(\n      `/zap-emails/${document\n        .querySelector('form')\n        .getAttribute('action')\n        .split('/')\n        .pop()}`,\n      { parentUrl: new URL(location) }\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\n// Connects to data-controller=\"zav-emails\"\nexport default class extends Controller {\n  showPartner(e) {\n    e.preventDefault();\n\n    const target = this.element.querySelector('#show_partner');\n    const { partnerId: id } = target.dataset;\n\n    if (!id) return;\n\n    const url = new URL(`/partner/${id}.html`, location);\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n\n  async submit(e) {\n    const submitter = e.target.closest(\n      '[data-action=\"click->zav-emails#submit\"]'\n    );\n\n    submitter.classList.add('disabled');\n\n    try {\n      e.preventDefault();\n\n      const form = this.element.querySelector('form');\n      const json = await makeRequest(form.action, {\n        method: 'POST',\n        fillContentType: false,\n        data: new FormData(form),\n      });\n\n      if (json.status) window.close();\n\n      window.Turbo.renderStreamMessage(json.turbo_stream);\n    } catch (err) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n\n    if (!submitter) return;\n\n    submitter.classList.remove('disabled');\n  }\n}\n", "import FiltersController from \"./filters_controller\";\n\n// Connects to data-controller=\"zav-filters\"\nexport default class extends FiltersController {\n}", "import { Controller } from \"@hotwired/stimulus\";\nimport FilterNewController from \"./filters_new_controller\";\n\n// Connects to data-controller=\"zav-filters-new\"\nexport default class extends FilterNewController {\n}", "import FiltersShowController from \"./filters_show_controller\";\n\n// Connects to data-controller=\"zav-filters-show\"\nexport default class extends FiltersShowController {\n}", "import { Controller } from '@hotwired/stimulus';\nimport { fillCiselnyRadOnEvidChange } from '../fill_ciselny_rad_on_evid_change';\n\n// Connects to data-controller=\"zav-prijatie-fakturs-index\"\nexport default class extends Controller {\n  connect() {\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n  }\n\n  collapseExpandItems(e) {\n    e.target\n      .closest('.dosla-faktura')\n      .querySelector('[data-bs-target^=\"#df_polozkas_\"]')\n      .click();\n  }\n\n  toggleAttributes(e) {\n    const div = e.target.closest('.dosla-faktura').querySelector('.attributes');\n\n    e.target.value === '0'\n      ? div.classList.remove('d-none')\n      : div.classList.add('d-none');\n  }\n\n  async onEvidCrChange(e) {\n    if (e.target.id.includes('_evidencia_id')) {\n      await fillCiselnyRadOnEvidChange(e.target);\n    }\n  }\n\n  showPartner() {\n    let url;\n    let partnerId = this.element.querySelector('[name$=\"[partner_id]\"]').value;\n\n    if (partnerId) {\n      url = `/partners/${partnerId}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    this.openURL(url, { parentUrl: new URL(location) });\n  }\n\n  showDfTyp() {\n    this.openURL('/df_typs', { parentUrl: new URL(location) });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { initializeVanillajsDatepicker } from '../vanillajs_datepicker';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport { initializeTomSelect } from '../tom_select';\nimport { popupHelpers, onPartnerChange } from '../utils';\n\n// Connects to data-controller=\"zavazoks\"\nexport default class extends Controller {\n  initialize() {\n    Object.assign(this, popupHelpers, { onPartnerChange });\n  }\n\n  connect() {\n    import('../delete').then(module => {\n      this.deleteResource = module.deleteResource.bind(this);\n    });\n\n    import('../add').then(module => {\n      this.addFields = module.addFields.bind(this);\n    });\n\n    import('../window_manager').then(module => {\n      this.openURL = module.openURL.bind(this);\n    });\n  }\n\n  onDeleteResourceButton(e) {\n    this.deleteResource(\n      e.target.closest('.delete-resource'),\n      (parent_name, parent) => {\n        switch (parent_name) {\n          case 'payment':\n            this.element['zavazoks-show'].updateZadanaUhradaLabels();\n            break;\n          default:\n            parent\n              .querySelector('input[type=\"text\"]:not(.vanillajs-datepicker)')\n              .dispatchEvent(new Event('keyup'));\n        }\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  onAddFieldButton(e) {\n    this.addFields(\n      e.target.closest('.add-fields'),\n      (copiedDiv, lastElBeforeInsert) => {\n        do {\n          initializeTomSelect(copiedDiv.querySelectorAll('select.tom-select'));\n          copiedDiv\n            .querySelectorAll('input.vanillajs-datepicker')\n            .forEach(input => {\n              initializeVanillajsDatepicker(input);\n            });\n\n          copiedDiv = copiedDiv.previousElementSibling;\n        } while (copiedDiv !== lastElBeforeInsert);\n      }\n    );\n\n    e.preventDefault();\n  }\n\n  updateTitleRow(e) {\n    this.element.querySelector(\n      `#label_${e.target.name.match(/\\b\\w+/g).pop()}`\n    ).innerHTML = e.target.value;\n  }\n\n  showPartner(e) {\n    let url;\n    let partnerId = document.querySelector('#zavazok_partner_id').value;\n\n    if (partnerId) {\n      url = `/partners/${partnerId}.html`;\n    } else {\n      url = '/partners/new.html';\n    }\n\n    this.openURL(url, { parentUrl: new URL(location) });\n  }\n\n  loadPartnersAccounts(_) {\n    makeRequest(\n      `/partners/${\n        this.element.querySelector('#zavazok_partner_id').value\n      }/accounts`\n    )\n      .then(accounts => {\n        const select = this.element.querySelector(\n          '#zavazok_partner_bank_ucet_id'\n        );\n        const value = parseInt(select.tomselect.getValue());\n\n        select.tomselect.destroy();\n        select.innerHTML = '';\n        select.append(new Option());\n        accounts.forEach(account => {\n          select.append(\n            new Option(\n              account.iban,\n              account.id,\n              parseInt(account.id) === value,\n              parseInt(account.id) === value\n            )\n          );\n        });\n\n        initializeTomSelect([select]);\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n}\n", "// Connects to data-controller=\"zavazoks-index\"\nimport { Controller } from '@hotwired/stimulus';\nimport { formatNumber, parseNumber, getJSON, showFilter } from '../utils';\nimport { openURL } from '../window_manager';\nimport { updateAdditionalInfo } from '../update_additional_info';\nimport * as fileSaver from 'file-saver';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\n\nexport default class extends Controller {\n  static targets = ['prevPrikazUhradenyEl', 'submitBtn'];\n\n  initialize() {\n    Object.assign(this, { showFilter });\n  }\n\n  connect() {\n    this.submitBtnTarget.click();\n  }\n\n  setMarkedCount() {\n    makeRequest('/zavazoks/marked-count')\n      .then(response => {\n        document.querySelectorAll('.marked-count').forEach(element => {\n          element.innerHTML = response.count;\n        });\n      })\n      .catch(error => {\n        showToastMessage(error, { autohide: false, type: 'bg-danger' });\n      });\n  }\n\n  showNewRecord() {\n    openURL('/zavazoks/new');\n  }\n\n  updateInfo(e) {\n    updateAdditionalInfo(e.target);\n  }\n\n  deleteFromPrevPrikaz(e) {\n    makeRequest(\n      `/prev-prikaz/${e.target\n        .closest('form')\n        .action.split('/')\n        .pop()}/delete-zavazok/${e.target.closest('tr').dataset.id}`,\n      { method: 'DELETE' }\n    )\n      .then(response => {\n        this.refreshTpdsTable(response);\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  showRecord(e) {\n    if (e.target.role !== 'button') {\n      return false;\n    }\n\n    if (e.target.dataset.url) {\n      openURL(e.target.dataset.url);\n    } else {\n      openURL(e.target.closest('tr').dataset.zavazokUrl);\n    }\n  }\n\n  updateSum() {\n    const rows = this.element.querySelectorAll('table#tpds tbody tr');\n    this.element.querySelector('span#label_prev_prikaz_count').innerHTML =\n      rows.length;\n    this.element.querySelector('span#label_prev_prikaz_sum').innerHTML =\n      formatNumber(\n        [...rows].reduce(\n          (sum, b) =>\n            sum + parseNumber(b.querySelector('input[type=\"text\"]').value),\n          0\n        )\n      );\n  }\n\n  deletePrevPrikaz() {\n    makeRequest(\n      `/prev_prikazs/${this.element\n        .querySelector('form.edit_prev_prikaz')\n        .action.split('/')\n        .pop()}`,\n      { method: 'DELETE' }\n    )\n      .then(response => {\n        this.refreshTpdsTable(response);\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  async deleteMarked() {\n    try {\n      const json = await getJSON('/zavazoks/delete-marked');\n      const { turbo_stream: turboStream } = json;\n\n      window.Turbo.renderStreamMessage(turboStream);\n    } catch (e) {\n      showToastMessage(e.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  refreshTpdsTable(response, opts = {}) {\n    if (\n      !this.element\n        .querySelector('div#collapse_prev_prikaz')\n        .classList.contains('show')\n    ) {\n      this.element\n        .querySelector('button[href=\"#collapse_prev_prikaz\"]')\n        .click();\n    }\n\n    window.Turbo.renderStreamMessage(response.turbo_stream);\n\n    if (response.button) {\n      window.Turbo.renderStreamMessage(response.button);\n    }\n  }\n\n  addToPrevPrikaz(e) {\n    let url = 'prev_prikazs';\n    const form = this.element.querySelector('form[class*=prev_prikaz]');\n    const id = form.action.split('/').pop();\n\n    if (isNaN(id)) {\n      if (e.target.id === 'prev_prikaz_ucet_id') {\n        makeRequest(`/prev-prikaz/set-default-account/${e.target.value}`, {\n          method: 'PATCH',\n        }).catch(error =>\n          showToastMessage(error, { autohide: false, type: 'bg-danger' })\n        );\n      }\n\n      if (!e.target.closest('button')) {\n        return false;\n      }\n    } else {\n      url += `/${id}`;\n    }\n\n    url += `?type=${e.target.dataset.type}`;\n\n    makeRequest(url, {\n      method: isNaN(id) ? 'POST' : 'PATCH',\n      fillContentType: false,\n      data: new FormData(form),\n    })\n      .then(response => {\n        this.refreshTpdsTable(response);\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  async prevPrikazsByFilter(e) {\n    const url = new URL('/prev_prikazs.turbo_stream', location);\n    url.searchParams.set(\n      'uhradeny',\n      this.element.querySelector('select#prev_prikaz_uhradeny').value\n    );\n\n    const turboResponse = await fetch(url, {\n      headers: {\n        Accept: 'text/vnd.turbo-stream.html',\n      },\n    });\n\n    Turbo.renderStreamMessage(await turboResponse.text());\n  }\n\n  showPrevPrikaz(e) {\n    makeRequest(\n      `/prev_prikazs/${\n        e.target.closest(\n          'tr[data-action=\"click->zavazoks-index#showPrevPrikaz\"]'\n        ).dataset.id\n      }?dom_id=${this.element.querySelector('form[class*=prev_prikaz]').id}`\n    )\n      .then(response => {\n        this.refreshTpdsTable(response);\n        e.target\n          .closest('.offcanvas')\n          .querySelector('button.btn-close')\n          .click();\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  export(e) {\n    if (this.shouldConfirmExport) return;\n\n    makeRequest(\n      `prev-prikaz/export/${this.element\n        .querySelector('form.edit_prev_prikaz')\n        .action.split('/')\n        .pop()}`\n    )\n      .then(response => {\n        window.Turbo.renderStreamMessage(response.turbo_stream);\n\n        if (response.button) {\n          window.Turbo.renderStreamMessage(response.button);\n        }\n\n        if (response.data) {\n          let blob = new Blob([response.data], { type: 'text/xml' });\n          fileSaver.saveAs(blob, response.filename);\n\n          const form = this.element.querySelector('form.edit_prev_prikaz');\n          makeRequest(\n            `/prev_prikazs/${form.action.split('/').pop()}?dom_id=${form.id}`\n          )\n            .then(response => {\n              this.refreshTpdsTable(response);\n            })\n            .catch(error =>\n              showToastMessage(error, { autohide: false, type: 'bg-danger' })\n            );\n        }\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  showPrijatieFaktur(e) {\n    openURL('/zav_prijatie_fakturs');\n  }\n\n  updateSumaB(e) {\n    makeRequest(\n      `prev-prikaz/update-suma-b/${e.target\n        .closest('form.edit_prev_prikaz')\n        .id.split('_')\n        .pop()}/${e.target.closest('tr').dataset.idA}`\n    )\n      .then(response => {\n        const sumaB = e.target.closest('button').previousElementSibling;\n        sumaB.value = formatNumber(response.price);\n        sumaB.dispatchEvent(new Event('change'));\n        this.updateSum();\n      })\n      .catch(error =>\n        showToastMessage(error, { autohide: false, type: 'bg-danger' })\n      );\n  }\n\n  importCommands() {\n    openURL('zavazoks/parse-commands-window');\n  }\n\n  get shouldConfirmExport() {\n    return (\n      this.prevPrikazUhradenyElTarget.checked &&\n      !confirm(this.prevPrikazUhradenyElTarget.dataset.confirmExport)\n    );\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { openURL } from '../window_manager';\n\n// Connects to data-controller=\"zavazoks-new\"\nexport default class extends Controller {\n  onPartnerChange(e) {\n    window.onbeforeunload = null;\n\n    if (e.target.closest('.bg-copy')) return;\n\n    const partner_id = e.target.value;\n    const url = new URL(location);\n\n    if (partner_id) {\n      openURL(`/zavazoks/new?partner_id=${partner_id}${url.search}`, {\n        target: '_self'\n      });\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { initializeFilePond, destroyFilePond } from '../filepond';\nimport { postFormData, getJSON, postJSON } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport { openURL } from '../window_manager';\nimport TomSelect from 'tom-select/dist/types/tom-select.js';\n\ninterface BankAccount {\n  id: number;\n  iban: string;\n}\n\n// Connects to data-controller=\"zavazoks-parse-commands-window\"\nexport default class extends Controller {\n  connect(): void {\n    initializeFilePond();\n  }\n\n  disconnect(): void {\n    destroyFilePond();\n  }\n\n  async onSubmitButton(e: SubmitEvent) {\n    e.preventDefault();\n\n    try {\n      const form = this.element.querySelector(\n        'form.zavazoks__form'\n      ) as HTMLFormElement;\n\n      if (!form) return;\n\n      const formData = new FormData(form);\n      const { message } = form.dataset;\n\n      if (message) this.checkPartners(formData, message);\n\n      const response = await postFormData(\n        form.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { status, turbo_stream: turboStream } = json;\n\n      if (status) return window.close();\n\n      (window as any).Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  private checkPartners(data: FormData, message: string) {\n    const emptyPartnerIds = Array.from(data).filter(entry => {\n      const [name, value] = entry;\n\n      return name.includes('partner_id') && !value;\n    });\n\n    if (emptyPartnerIds.length > 0) throw new Error(message);\n  }\n\n  onFileChange() {\n    this.onDrop();\n  }\n\n  onDrop() {\n    const uploadForm = this.element.querySelector(\n      'form[action=\"/zavazoks/parse-commands\"]'\n    );\n\n    if (uploadForm) (uploadForm as HTMLFormElement).requestSubmit();\n  }\n\n  async onSubmit(e: SubmitEvent) {\n    e.preventDefault();\n\n    try {\n      const form = e.target! as HTMLFormElement;\n      const formData = new FormData(form);\n      const response = await postFormData(\n        form.getAttribute('action'),\n        formData\n      );\n\n      const json = await response.json();\n      const { turbo_stream: turboStream } = json;\n\n      (window as any).Turbo.renderStreamMessage(turboStream);\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  async onPartnerChange(e: Event) {\n    try {\n      const partnerEl = e.target as HTMLSelectElement & {\n        tomselect: TomSelect;\n      };\n      const form = partnerEl.closest('.zavazoks__form') as HTMLFormElement;\n      const { confirmAccountMessage } = form.dataset;\n      const accountEl = this.element.querySelector(\n        `#${partnerEl.id.replace('partner_id', 'IBAN')}`\n      ) as HTMLInputElement;\n\n      if (partnerEl.tomselect.getValue() === '') return;\n      if (!accountEl.value) return;\n\n      const accountsArr: BankAccount[] = await getJSON(\n        `/partners/${partnerEl.value}/accounts`\n      );\n\n      partnerEl.tomselect.blur();\n\n      if (\n        accountsArr.map(account => account.iban).includes(accountEl.value) ||\n        !confirm(\n          confirmAccountMessage\n            ?.replace('%{account}', accountEl.value)\n            .replace('%{name}', partnerEl.options[partnerEl.selectedIndex].text)\n        )\n      )\n        return;\n\n      await postJSON(`/partners/${partnerEl.value}/accounts`, {\n        account: accountEl.value,\n      });\n    } catch (err: any) {\n      showToastMessage(err.message, { autohide: false, type: 'bg-danger' });\n    }\n  }\n\n  showPartner(e: Event) {\n    const btnEl = (e.target as HTMLElement).closest('.btn');\n    const partnerEl = btnEl\n      ?.closest('.input-group')\n      ?.querySelector(\"[id*='_partner_id']\") as HTMLSelectElement;\n\n    openURL(`/partners/${partnerEl?.value || 'new'}`, {\n      parentUrl: new URL(location.toString()),\n    });\n  }\n}\n", "import { Controller } from '@hotwired/stimulus';\nimport { destroyFilePond, initializeFilePond } from '../filepond';\nimport { openURL } from '../window_manager';\nimport {\n  registerChangeToShowSubmitButton,\n  registerKeyupToShowSubmitButton,\n} from '../show_submit_buttons';\nimport { formatNumber, parseNumber, showRecord } from '../utils';\nimport { showToastMessage } from '../show_toast_message';\nimport makeRequest from '../make_request';\nimport dayjs from 'dayjs';\n\n// Connects to data-controller=\"zavazoks-show\"\nexport default class extends Controller {\n  connect() {\n    this.element[this.identifier] = this;\n\n    initializeFilePond();\n\n    this.element.addEventListener('change', registerChangeToShowSubmitButton);\n    this.element.addEventListener('keyup', registerKeyupToShowSubmitButton);\n\n    Object.assign(this, { showRecord });\n  }\n\n  disconnect() {\n    destroyFilePond();\n\n    this.element.removeEventListener(\n      'change',\n      registerChangeToShowSubmitButton\n    );\n    this.element.removeEventListener('keyup', registerKeyupToShowSubmitButton);\n  }\n\n  deleteRecord(e) {\n    if (confirm(e.target.dataset.confirm)) {\n      makeRequest(this.element.querySelector('form').getAttribute('action'), {\n        method: 'DELETE',\n      })\n        .then(response => {\n          if (response.status && response.status === true) {\n            window.close();\n          } else {\n            window.Turbo.renderStreamMessage(response.turbo_stream);\n          }\n        })\n        .catch(err =>\n          showToastMessage(err, { autohide: false, type: 'bg-danger' })\n        );\n    }\n  }\n\n  payFully(e) {\n    if (e.target.checked) {\n      e.target.setAttribute('disabled', 'disabled');\n\n      const parentEl = document.querySelector('#zadana-uhradas');\n      parentEl.querySelector('.add-fields').click();\n      const paymentEl = [...parentEl.querySelectorAll('.payment')].pop();\n      const sumaEl = paymentEl.querySelector('[name$=\"[suma]\"]');\n      sumaEl.value = formatNumber(\n        parseNumber(document.querySelector('#zavazok_suma').value) -\n          parseNumber(document.querySelector('#label_assigned').innerHTML)\n      );\n\n      paymentEl.querySelector('[name$=\"[datum]\"]').value =\n        dayjs().format('DD.MM.YYYY');\n      paymentEl.querySelector('[name$=\"[poznamka]\"]').value =\n        'Vlo\u017Een\u00E9 kliknut\u00EDm na uhraden\u00E9';\n\n      this.updateZadanaUhradaLabels();\n    }\n  }\n\n  updateZadanaUhradaLabels() {\n    const sumVal = Array.from(\n      document.querySelectorAll(\n        '#zadana-uhradas .payment:not([style=\"display: none;\"]) input[id*=\"_suma\"]'\n      ),\n      el => parseNumber(el.value)\n    ).reduce((acc, amount) => acc + amount, 0);\n\n    const payments =\n      sumVal + parseNumber(document.querySelector('#label_unpaid').innerHTML);\n\n    document.querySelector('#label-manual-payments').textContent =\n      formatNumber(sumVal);\n    document.querySelector('#label_payments').textContent =\n      formatNumber(payments);\n    document.querySelector('#label_assigned').textContent = formatNumber(\n      sumVal + parseNumber(document.querySelector('#label_paid').innerHTML)\n    );\n\n    if (payments) {\n      const chboxEl = document.querySelector('#zavazok_uhradene');\n      chboxEl.removeAttribute('disabled');\n      chboxEl.checked = false;\n    }\n  }\n\n  open(e) {\n    e.preventDefault();\n\n    const target = e.target.closest('[data-action=\"zavazoks-show#open\"]');\n    const { url } = target.dataset;\n\n    if (!url) return;\n\n    openURL(url, { parentUrl: new URL(location) });\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport AccountAssignmentsIndexController from \"./account_assignments_index_controller\"\napplication.register(\"account-assignments-index\", AccountAssignmentsIndexController)\n\nimport AgentGlobalPromptsIndexController from \"./agent_global_prompts_index_controller\"\napplication.register(\"agent-global-prompts-index\", AgentGlobalPromptsIndexController)\n\nimport AgentLocalPromptsController from \"./agent_local_prompts_controller\"\napplication.register(\"agent-local-prompts\", AgentLocalPromptsController)\n\nimport AiAccountingWrapperController from \"./ai_accounting_wrapper_controller\"\napplication.register(\"ai-accounting-wrapper\", AiAccountingWrapperController)\n\nimport AttachmentController from \"./attachment_controller\"\napplication.register(\"attachment\", AttachmentController)\n\nimport BankUcetsController from \"./bank_ucets_controller\"\napplication.register(\"bank-ucets\", BankUcetsController)\n\nimport BankVypisesController from \"./bank_vypises_controller\"\napplication.register(\"bank-vypises\", BankVypisesController)\n\nimport BankVypisesIndexController from \"./bank_vypises_index_controller\"\napplication.register(\"bank-vypises-index\", BankVypisesIndexController)\n\nimport CanvasController from \"./canvas_controller\"\napplication.register(\"canvas\", CanvasController)\n\nimport CloseOffcanvasController from \"./close_offcanvas_controller\"\napplication.register(\"close-offcanvas\", CloseOffcanvasController)\n\nimport DanovyPomerSelectboxController from \"./danovy_pomer_selectbox_controller\"\napplication.register(\"danovy-pomer-selectbox\", DanovyPomerSelectboxController)\n\nimport DanovyPomersIndexController from \"./danovy_pomers_index_controller\"\napplication.register(\"danovy-pomers-index\", DanovyPomersIndexController)\n\nimport DfPolozkasController from \"./df_polozkas_controller\"\napplication.register(\"df-polozkas\", DfPolozkasController)\n\nimport DifferencesController from \"./differences_controller\"\napplication.register(\"differences\", DifferencesController)\n\nimport DodaciListsController from \"./dodaci_lists_controller\"\napplication.register(\"dodaci-lists\", DodaciListsController)\n\nimport DodaciListsIndexController from \"./dodaci_lists_index_controller\"\napplication.register(\"dodaci-lists-index\", DodaciListsIndexController)\n\nimport DodaciListsNewController from \"./dodaci_lists_new_controller\"\napplication.register(\"dodaci-lists-new\", DodaciListsNewController)\n\nimport DodaciListsShowController from \"./dodaci_lists_show_controller\"\napplication.register(\"dodaci-lists-show\", DodaciListsShowController)\n\nimport DodavatelsController from \"./dodavatels_controller\"\napplication.register(\"dodavatels\", DodavatelsController)\n\nimport DodavatelsIndexController from \"./dodavatels_index_controller\"\napplication.register(\"dodavatels-index\", DodavatelsIndexController)\n\nimport DodavatelsShowController from \"./dodavatels_show_controller\"\napplication.register(\"dodavatels-show\", DodavatelsShowController)\n\nimport DoslaFakturasController from \"./dosla_fakturas_controller\"\napplication.register(\"dosla-fakturas\", DoslaFakturasController)\n\nimport DoslaFakturasIndexController from \"./dosla_fakturas_index_controller\"\napplication.register(\"dosla-fakturas-index\", DoslaFakturasIndexController)\n\nimport DoslaFakturasNewController from \"./dosla_fakturas_new_controller\"\napplication.register(\"dosla-fakturas-new\", DoslaFakturasNewController)\n\nimport DoslaFakturasShowController from \"./dosla_fakturas_show_controller\"\napplication.register(\"dosla-fakturas-show\", DoslaFakturasShowController)\n\nimport DoslaZalohovaFakturasController from \"./dosla_zalohova_fakturas_controller\"\napplication.register(\"dosla-zalohova-fakturas\", DoslaZalohovaFakturasController)\n\nimport DoslaZalohovaFakturasIndexController from \"./dosla_zalohova_fakturas_index_controller\"\napplication.register(\"dosla-zalohova-fakturas-index\", DoslaZalohovaFakturasIndexController)\n\nimport DoslaZalohovaFakturasNewController from \"./dosla_zalohova_fakturas_new_controller\"\napplication.register(\"dosla-zalohova-fakturas-new\", DoslaZalohovaFakturasNewController)\n\nimport DpMvsController from \"./dp_mvs_controller\"\napplication.register(\"dp-mvs\", DpMvsController)\n\nimport DpMvsShowController from \"./dp_mvs_show_controller\"\napplication.register(\"dp-mvs-show\", DpMvsShowController)\n\nimport DpPposIndexController from \"./dp_ppos_index_controller\"\napplication.register(\"dp-ppos-index\", DpPposIndexController)\n\nimport EvidenciaDphsIndexController from \"./evidencia_dphs_index_controller\"\napplication.register(\"evidencia-dphs-index\", EvidenciaDphsIndexController)\n\nimport FaktPolozkiesController from \"./fakt_polozkies_controller\"\napplication.register(\"fakt-polozkies\", FaktPolozkiesController)\n\nimport FaktSkladPolozkiesController from \"./fakt_sklad_polozkies_controller\"\napplication.register(\"fakt-sklad-polozkies\", FaktSkladPolozkiesController)\n\nimport FiltersController from \"./filters_controller\"\napplication.register(\"filters\", FiltersController)\n\nimport FiltersNewController from \"./filters_new_controller\"\napplication.register(\"filters-new\", FiltersNewController)\n\nimport FiltersShowController from \"./filters_show_controller\"\napplication.register(\"filters-show\", FiltersShowController)\n\nimport FirmaPublicInvoicingController from \"./firma_public_invoicing_controller\"\napplication.register(\"firma-public-invoicing\", FirmaPublicInvoicingController)\n\nimport FirmaPublicsNewController from \"./firma_publics_new_controller\"\napplication.register(\"firma-publics-new\", FirmaPublicsNewController)\n\nimport FirmasController from \"./firmas_controller\"\napplication.register(\"firmas\", FirmasController)\n\nimport FirmasShowController from \"./firmas_show_controller\"\napplication.register(\"firmas-show\", FirmasShowController)\n\nimport FormChangesController from \"./form_changes_controller\"\napplication.register(\"form-changes\", FormChangesController)\n\nimport FspContainerController from \"./fsp_container_controller\"\napplication.register(\"fsp-container\", FspContainerController)\n\nimport HkFiltersController from \"./hk_filters_controller\"\napplication.register(\"hk-filters\", HkFiltersController)\n\nimport HkFiltersNewController from \"./hk_filters_new_controller\"\napplication.register(\"hk-filters-new\", HkFiltersNewController)\n\nimport HkFiltersShowController from \"./hk_filters_show_controller\"\napplication.register(\"hk-filters-show\", HkFiltersShowController)\n\nimport HlavnaKnihasImportController from \"./hlavna_knihas_import_controller\"\napplication.register(\"hlavna-knihas-import\", HlavnaKnihasImportController)\n\nimport HlavnaKnihasIndexController from \"./hlavna_knihas_index_controller\"\napplication.register(\"hlavna-knihas-index\", HlavnaKnihasIndexController)\n\nimport HomeIndexController from \"./home_index_controller\"\napplication.register(\"home-index\", HomeIndexController)\n\nimport KontrolnyVykazDphsIndexController from \"./kontrolny_vykaz_dphs_index_controller\"\napplication.register(\"kontrolny-vykaz-dphs-index\", KontrolnyVykazDphsIndexController)\n\nimport ListsController from \"./lists_controller\"\napplication.register(\"lists\", ListsController)\n\nimport MakeVykazPolozkasSortableController from \"./make_vykaz_polozkas_sortable_controller\"\napplication.register(\"make-vykaz-polozkas-sortable\", MakeVykazPolozkasSortableController)\n\nimport MassChangesNumberingController from \"./mass_changes_numbering_controller\"\napplication.register(\"mass-changes-numbering\", MassChangesNumberingController)\n\nimport MassChangesTypeController from \"./mass_changes_type_controller\"\napplication.register(\"mass-changes-type\", MassChangesTypeController)\n\nimport MessagesController from \"./messages_controller\"\napplication.register(\"messages\", MessagesController)\n\nimport ModalController from \"./modal_controller\"\napplication.register(\"modal\", ModalController)\n\nimport MotoroveVozidlosController from \"./motorove_vozidlos_controller\"\napplication.register(\"motorove-vozidlos\", MotoroveVozidlosController)\n\nimport MotoroveVozidlosIndexController from \"./motorove_vozidlos_index_controller\"\napplication.register(\"motorove-vozidlos-index\", MotoroveVozidlosIndexController)\n\nimport MotoroveVozidlosShowController from \"./motorove_vozidlos_show_controller\"\napplication.register(\"motorove-vozidlos-show\", MotoroveVozidlosShowController)\n\nimport ObjednavkasController from \"./objednavkas_controller\"\napplication.register(\"objednavkas\", ObjednavkasController)\n\nimport ObjednavkasFaktSkladPolozkiesIndexController from \"./objednavkas_fakt_sklad_polozkies_index_controller\"\napplication.register(\"objednavkas-fakt-sklad-polozkies-index\", ObjednavkasFaktSkladPolozkiesIndexController)\n\nimport ObjednavkasIndexController from \"./objednavkas_index_controller\"\napplication.register(\"objednavkas-index\", ObjednavkasIndexController)\n\nimport ObjednavkasNewController from \"./objednavkas_new_controller\"\napplication.register(\"objednavkas-new\", ObjednavkasNewController)\n\nimport ObjednavkasShowController from \"./objednavkas_show_controller\"\napplication.register(\"objednavkas-show\", ObjednavkasShowController)\n\nimport OdoslanaFakturasAssignedAdvancesController from \"./odoslana_fakturas_assigned_advances_controller\"\napplication.register(\"odoslana-fakturas-assigned-advances\", OdoslanaFakturasAssignedAdvancesController)\n\nimport OdoslanaFakturasAssignedInvoicesController from \"./odoslana_fakturas_assigned_invoices_controller\"\napplication.register(\"odoslana-fakturas-assigned-invoices\", OdoslanaFakturasAssignedInvoicesController)\n\nimport OdoslanaFakturasController from \"./odoslana_fakturas_controller\"\napplication.register(\"odoslana-fakturas\", OdoslanaFakturasController)\n\nimport OdoslanaFakturasIndexController from \"./odoslana_fakturas_index_controller\"\napplication.register(\"odoslana-fakturas-index\", OdoslanaFakturasIndexController)\n\nimport OdoslanaFakturasNewController from \"./odoslana_fakturas_new_controller\"\napplication.register(\"odoslana-fakturas-new\", OdoslanaFakturasNewController)\n\nimport OdoslanaFakturasShowController from \"./odoslana_fakturas_show_controller\"\napplication.register(\"odoslana-fakturas-show\", OdoslanaFakturasShowController)\n\nimport OdoslanaZalohovaFakturasController from \"./odoslana_zalohova_fakturas_controller\"\napplication.register(\"odoslana-zalohova-fakturas\", OdoslanaZalohovaFakturasController)\n\nimport OdoslanaZalohovaFakturasIndexController from \"./odoslana_zalohova_fakturas_index_controller\"\napplication.register(\"odoslana-zalohova-fakturas-index\", OdoslanaZalohovaFakturasIndexController)\n\nimport OdoslanaZalohovaFakturasNewController from \"./odoslana_zalohova_fakturas_new_controller\"\napplication.register(\"odoslana-zalohova-fakturas-new\", OdoslanaZalohovaFakturasNewController)\n\nimport OdoslanaZalohovaFakturasShowController from \"./odoslana_zalohova_fakturas_show_controller\"\napplication.register(\"odoslana-zalohova-fakturas-show\", OdoslanaZalohovaFakturasShowController)\n\nimport OfDavkasController from \"./of_davkas_controller\"\napplication.register(\"of-davkas\", OfDavkasController)\n\nimport OfDavkasIndexController from \"./of_davkas_index_controller\"\napplication.register(\"of-davkas-index\", OfDavkasIndexController)\n\nimport OfDavkasShowController from \"./of_davkas_show_controller\"\napplication.register(\"of-davkas-show\", OfDavkasShowController)\n\nimport OfEmailsShowController from \"./of_emails_show_controller\"\napplication.register(\"of-emails-show\", OfEmailsShowController)\n\nimport OfFaktPolozkiesController from \"./of_fakt_polozkies_controller\"\napplication.register(\"of-fakt-polozkies\", OfFaktPolozkiesController)\n\nimport OpfEmailsShowController from \"./opf_emails_show_controller\"\napplication.register(\"opf-emails-show\", OpfEmailsShowController)\n\nimport OpfFaktPolozkiesController from \"./opf_fakt_polozkies_controller\"\napplication.register(\"opf-fakt-polozkies\", OpfFaktPolozkiesController)\n\nimport PaginationsController from \"./paginations_controller\"\napplication.register(\"paginations\", PaginationsController)\n\nimport PartnersController from \"./partners_controller\"\napplication.register(\"partners\", PartnersController)\n\nimport PartnersIndexController from \"./partners_index_controller\"\napplication.register(\"partners-index\", PartnersIndexController)\n\nimport PartnersMergePartnersController from \"./partners_merge_partners_controller\"\napplication.register(\"partners-merge-partners\", PartnersMergePartnersController)\n\nimport PartnersNewController from \"./partners_new_controller\"\napplication.register(\"partners-new\", PartnersNewController)\n\nimport PartnersShowController from \"./partners_show_controller\"\napplication.register(\"partners-show\", PartnersShowController)\n\nimport PokladnicnyDokladsController from \"./pokladnicny_doklads_controller\"\napplication.register(\"pokladnicny-doklads\", PokladnicnyDokladsController)\n\nimport PokladnicnyDokladsIndexController from \"./pokladnicny_doklads_index_controller\"\napplication.register(\"pokladnicny-doklads-index\", PokladnicnyDokladsIndexController)\n\nimport PokladnicnyDokladsNewController from \"./pokladnicny_doklads_new_controller\"\napplication.register(\"pokladnicny-doklads-new\", PokladnicnyDokladsNewController)\n\nimport PokladnicnyDokladsShowController from \"./pokladnicny_doklads_show_controller\"\napplication.register(\"pokladnicny-doklads-show\", PokladnicnyDokladsShowController)\n\nimport PopUpController from \"./pop_up_controller\"\napplication.register(\"pop-up\", PopUpController)\n\nimport PredajkasController from \"./predajkas_controller\"\napplication.register(\"predajkas\", PredajkasController)\n\nimport PredajkasNewController from \"./predajkas_new_controller\"\napplication.register(\"predajkas-new\", PredajkasNewController)\n\nimport PredajkasShowController from \"./predajkas_show_controller\"\napplication.register(\"predajkas-show\", PredajkasShowController)\n\nimport PrevPrikazsController from \"./prev_prikazs_controller\"\napplication.register(\"prev-prikazs\", PrevPrikazsController)\n\nimport PrevPrikazsIndexController from \"./prev_prikazs_index_controller\"\napplication.register(\"prev-prikazs-index\", PrevPrikazsIndexController)\n\nimport PrijemkaVydajkaPolozkasController from \"./prijemka_vydajka_polozkas_controller\"\napplication.register(\"prijemka-vydajka-polozkas\", PrijemkaVydajkaPolozkasController)\n\nimport PrijemkaVydajkasController from \"./prijemka_vydajkas_controller\"\napplication.register(\"prijemka-vydajkas\", PrijemkaVydajkasController)\n\nimport PrijemkaVydajkasFaktSkladPolozkiesIndexController from \"./prijemka_vydajkas_fakt_sklad_polozkies_index_controller\"\napplication.register(\"prijemka-vydajkas-fakt-sklad-polozkies-index\", PrijemkaVydajkasFaktSkladPolozkiesIndexController)\n\nimport PrijemkaVydajkasIndexController from \"./prijemka_vydajkas_index_controller\"\napplication.register(\"prijemka-vydajkas-index\", PrijemkaVydajkasIndexController)\n\nimport PrijemkaVydajkasNewController from \"./prijemka_vydajkas_new_controller\"\napplication.register(\"prijemka-vydajkas-new\", PrijemkaVydajkasNewController)\n\nimport PrijemkaVydajkasShowController from \"./prijemka_vydajkas_show_controller\"\napplication.register(\"prijemka-vydajkas-show\", PrijemkaVydajkasShowController)\n\nimport PrintSettingsController from \"./print_settings_controller\"\napplication.register(\"print-settings\", PrintSettingsController)\n\nimport PvpContainerController from \"./pvp_container_controller\"\napplication.register(\"pvp-container\", PvpContainerController)\n\nimport RecaptchaController from \"./recaptcha_controller\"\napplication.register(\"recaptcha\", RecaptchaController)\n\nimport RecordCountingController from \"./record_counting_controller\"\napplication.register(\"record-counting\", RecordCountingController)\n\nimport RemoteDocumentController from \"./remote_document_controller\"\napplication.register(\"remote-document\", RemoteDocumentController)\n\nimport SaldokontosIndexController from \"./saldokontos_index_controller\"\napplication.register(\"saldokontos-index\", SaldokontosIndexController)\n\nimport SkKategsIndexController from \"./sk_kategs_index_controller\"\napplication.register(\"sk-kategs-index\", SkKategsIndexController)\n\nimport SkQuickSearchController from \"./sk_quick_search_controller\"\napplication.register(\"sk-quick-search\", SkQuickSearchController)\n\nimport SkladovaKartasController from \"./skladova_kartas_controller\"\napplication.register(\"skladova-kartas\", SkladovaKartasController)\n\nimport SkladovaKartasIndexController from \"./skladova_kartas_index_controller\"\napplication.register(\"skladova-kartas-index\", SkladovaKartasIndexController)\n\nimport SkladovaKartasShowController from \"./skladova_kartas_show_controller\"\napplication.register(\"skladova-kartas-show\", SkladovaKartasShowController)\n\nimport SkladsController from \"./sklads_controller\"\napplication.register(\"sklads\", SkladsController)\n\nimport SkladsIndexController from \"./sklads_index_controller\"\napplication.register(\"sklads-index\", SkladsIndexController)\n\nimport SkladsShowController from \"./sklads_show_controller\"\napplication.register(\"sklads-show\", SkladsShowController)\n\nimport StatementsIndexController from \"./statements_index_controller\"\napplication.register(\"statements-index\", StatementsIndexController)\n\nimport StockPopUpController from \"./stock_pop_up_controller\"\napplication.register(\"stock-pop-up\", StockPopUpController)\n\nimport StockWithCalcPopUpController from \"./stock_with_calc_pop_up_controller\"\napplication.register(\"stock-with-calc-pop-up\", StockWithCalcPopUpController)\n\nimport SwitchActiveCompanyController from \"./switch_active_company_controller\"\napplication.register(\"switch-active-company\", SwitchActiveCompanyController)\n\nimport TaxLiabilityController from \"./tax_liability_controller\"\napplication.register(\"tax-liability\", TaxLiabilityController)\n\nimport ToastsController from \"./toasts_controller\"\napplication.register(\"toasts\", ToastsController)\n\nimport TomSelectController from \"./tom_select_controller\"\napplication.register(\"tom-select\", TomSelectController)\n\nimport UctovnyDenniksIndexController from \"./uctovny_denniks_index_controller\"\napplication.register(\"uctovny-denniks-index\", UctovnyDenniksIndexController)\n\nimport UctovnyDokladsChangeAccountsWindowController from \"./uctovny_doklads_change_accounts_window_controller\"\napplication.register(\"uctovny-doklads-change-accounts-window\", UctovnyDokladsChangeAccountsWindowController)\n\nimport UctovnyDokladsChangeFlagsWindowController from \"./uctovny_doklads_change_flags_window_controller\"\napplication.register(\"uctovny-doklads-change-flags-window\", UctovnyDokladsChangeFlagsWindowController)\n\nimport UctovnyDokladsChangeNumberingController from \"./uctovny_doklads_change_numbering_controller\"\napplication.register(\"uctovny-doklads-change-numbering\", UctovnyDokladsChangeNumberingController)\n\nimport UctovnyDokladsChangeSzcpWindowController from \"./uctovny_doklads_change_szcp_window_controller\"\napplication.register(\"uctovny-doklads-change-szcp-window\", UctovnyDokladsChangeSzcpWindowController)\n\nimport UctovnyDokladsController from \"./uctovny_doklads_controller\"\napplication.register(\"uctovny-doklads\", UctovnyDokladsController)\n\nimport UctovnyDokladsIndexController from \"./uctovny_doklads_index_controller\"\napplication.register(\"uctovny-doklads-index\", UctovnyDokladsIndexController)\n\nimport UctovnyDokladsShowController from \"./uctovny_doklads_show_controller\"\napplication.register(\"uctovny-doklads-show\", UctovnyDokladsShowController)\n\nimport UdMassChangesAnchorHandlerController from \"./ud_mass_changes_anchor_handler_controller\"\napplication.register(\"ud-mass-changes-anchor-handler\", UdMassChangesAnchorHandlerController)\n\nimport UnasignedController from \"./unasigned_controller\"\napplication.register(\"unasigned\", UnasignedController)\n\nimport UpEmailsController from \"./up_emails_controller\"\napplication.register(\"up-emails\", UpEmailsController)\n\nimport UpomienkasController from \"./upomienkas_controller\"\napplication.register(\"upomienkas\", UpomienkasController)\n\nimport UpomienkasIndexController from \"./upomienkas_index_controller\"\napplication.register(\"upomienkas-index\", UpomienkasIndexController)\n\nimport UpomienkasShowController from \"./upomienkas_show_controller\"\napplication.register(\"upomienkas-show\", UpomienkasShowController)\n\nimport UsersController from \"./users_controller\"\napplication.register(\"users\", UsersController)\n\nimport UsersIndexController from \"./users_index_controller\"\napplication.register(\"users-index\", UsersIndexController)\n\nimport UsersShowController from \"./users_show_controller\"\napplication.register(\"users-show\", UsersShowController)\n\nimport VanillajsDatepickerController from \"./vanillajs_datepicker_controller\"\napplication.register(\"vanillajs-datepicker\", VanillajsDatepickerController)\n\nimport VykazPolozkasController from \"./vykaz_polozkas_controller\"\napplication.register(\"vykaz-polozkas\", VykazPolozkasController)\n\nimport VykazPolozkasShowController from \"./vykaz_polozkas_show_controller\"\napplication.register(\"vykaz-polozkas-show\", VykazPolozkasShowController)\n\nimport VykazStatementExportController from \"./vykaz_statement_export_controller\"\napplication.register(\"vykaz-statement-export\", VykazStatementExportController)\n\nimport VykazsIndexController from \"./vykazs_index_controller\"\napplication.register(\"vykazs-index\", VykazsIndexController)\n\nimport VykazsListController from \"./vykazs_list_controller\"\napplication.register(\"vykazs-list\", VykazsListController)\n\nimport ZapEmailsController from \"./zap_emails_controller\"\napplication.register(\"zap-emails\", ZapEmailsController)\n\nimport ZapocetsController from \"./zapocets_controller\"\napplication.register(\"zapocets\", ZapocetsController)\n\nimport ZapocetsIndexController from \"./zapocets_index_controller\"\napplication.register(\"zapocets-index\", ZapocetsIndexController)\n\nimport ZapocetsNewController from \"./zapocets_new_controller\"\napplication.register(\"zapocets-new\", ZapocetsNewController)\n\nimport ZapocetsRefresherController from \"./zapocets_refresher_controller\"\napplication.register(\"zapocets-refresher\", ZapocetsRefresherController)\n\nimport ZapocetsShowController from \"./zapocets_show_controller\"\napplication.register(\"zapocets-show\", ZapocetsShowController)\n\nimport ZavEmailsController from \"./zav_emails_controller\"\napplication.register(\"zav-emails\", ZavEmailsController)\n\nimport ZavFiltersController from \"./zav_filters_controller\"\napplication.register(\"zav-filters\", ZavFiltersController)\n\nimport ZavFiltersNewController from \"./zav_filters_new_controller\"\napplication.register(\"zav-filters-new\", ZavFiltersNewController)\n\nimport ZavFiltersShowController from \"./zav_filters_show_controller\"\napplication.register(\"zav-filters-show\", ZavFiltersShowController)\n\nimport ZavPrijatieFaktursIndexController from \"./zav_prijatie_fakturs_index_controller\"\napplication.register(\"zav-prijatie-fakturs-index\", ZavPrijatieFaktursIndexController)\n\nimport ZavazoksController from \"./zavazoks_controller\"\napplication.register(\"zavazoks\", ZavazoksController)\n\nimport ZavazoksIndexController from \"./zavazoks_index_controller\"\napplication.register(\"zavazoks-index\", ZavazoksIndexController)\n\nimport ZavazoksNewController from \"./zavazoks_new_controller\"\napplication.register(\"zavazoks-new\", ZavazoksNewController)\n\nimport ZavazoksParseCommandsWindowController from \"./zavazoks_parse_commands_window_controller\"\napplication.register(\"zavazoks-parse-commands-window\", ZavazoksParseCommandsWindowController)\n\nimport ZavazoksShowController from \"./zavazoks_show_controller\"\napplication.register(\"zavazoks-show\", ZavazoksShowController)\n", "var sparkMd5 = {\n  exports: {}\n};\n\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })((function(undefined$1) {\n    var hex_chr = [ \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\" ];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [ 1732584193, -271733879, -1732584194, 271733878 ], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex) {\n      var bytes = [], length = hex.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD5() {\n      this.reset();\n    }\n    SparkMD5.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD5.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD5.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD5.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD5.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD5.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD5.hash = function(str, raw) {\n      return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD5.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD5.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD5.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD5.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [ 1732584193, -271733879, -1732584194, 271733878 ];\n      return this;\n    };\n    SparkMD5.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD5.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD5.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD5.prototype.setState.call(this, state);\n    };\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    SparkMD5.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD5;\n  }));\n})(sparkMd5);\n\nvar SparkMD5 = sparkMd5.exports;\n\nconst fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\nclass FileChecksum {\n  static create(file, callback) {\n    const instance = new FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer;\n    this.fileReader = new FileReader;\n    this.fileReader.addEventListener(\"load\", (event => this.fileReaderDidLoad(event)));\n    this.fileReader.addEventListener(\"error\", (event => this.fileReaderDidError(event)));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\n\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\n\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const {disabled: disabled} = element;\n  const {bubbles: bubbles, cancelable: cancelable, detail: detail} = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\n\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\n\nclass BlobRecord {\n  constructor(file, checksum, url) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum: checksum\n    };\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != undefined) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const {responseType: responseType, response: response} = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const {response: response} = this;\n      const {direct_upload: direct_upload} = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n}\n\nclass BlobUpload {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const {url: url, headers: headers} = blob.directUploadData;\n    this.xhr = new XMLHttpRequest;\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event => this.requestDidLoad(event)));\n    this.xhr.addEventListener(\"error\", (event => this.requestDidError(event)));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const {status: status, response: response} = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n}\n\nlet id = 0;\n\nclass DirectUpload {\n  constructor(file, url, delegate) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, ((error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error => {\n        if (error) {\n          callback(error);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error => {\n            if (error) {\n              callback(error);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          }));\n        }\n      }));\n    }));\n  }\n}\n\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\n\nclass DirectUploadController {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create(((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    }));\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress: progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail: detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error: error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr: xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr: xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event => this.uploadRequestDidProgress(event)));\n  }\n}\n\nconst inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\nclass DirectUploadsController {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input => input.files.length));\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        }));\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input => {\n      toArray(input.files).forEach((file => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      }));\n    }));\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail: detail\n    });\n  }\n}\n\nconst processingAttribute = \"data-direct-uploads-processing\";\n\nconst submitButtonsByForm = new WeakMap;\n\nlet started = false;\n\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\n\nfunction didClick(event) {\n  const {target: target} = event;\n  if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n    submitButtonsByForm.set(target.form, target);\n  }\n}\n\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\n\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\n\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const {inputs: inputs} = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    }));\n  }\n}\n\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const {disabled: disabled} = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\n\nfunction disable(input) {\n  input.disabled = true;\n}\n\nfunction enable(input) {\n  input.disabled = false;\n}\n\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\n\nsetTimeout(autostart, 1);\n\nexport { DirectUpload, start };\n", "console.log('application.js');\n\n// Entry point for the build script in your package.json\nimport '@hotwired/turbo-rails';\nimport './channels';\nimport './controllers';\nimport '@rails/activestorage';\nimport { openURL } from './window_manager';\nimport { delay } from './delay';\n\nfunction keyupEvents(e) {\n  if (e.target.classList.contains('vanillajs-datepicker')) {\n    if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Enter'].includes(e.key)) {\n      if (window.getSelection().toString() !== '') {\n        // delay event until selection is reseted by user\n        delay(() => {\n          keypressEvents(e);\n        });\n      } else {\n        if (e.target.value !== '') {\n          debouncedCompleteDate(e.target);\n        }\n      }\n    }\n  }\n}\n\nfunction keypressEvents(e) {\n  switch (e.key) {\n    case 'Enter':\n      if (\n        e.target.closest('form') &&\n        e.target.classList.contains('form-control') &&\n        !e.target.closest('div#filter') &&\n        e.target.nodeName !== 'TEXTAREA'\n      ) {\n        e.target.blur();\n        e.preventDefault();\n      }\n\n      break;\n  }\n}\n\nfunction clickEvents(e) {\n  if (e.target.closest(`#strediskos-index`)) {\n    openURL('/strediskos', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#show_dodavatels`)) {\n    openURL('/dodavatels', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#zakazkas-index`)) {\n    openURL('/zakazkas', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#show_mvs`)) {\n    openURL('/motorove_vozidlos', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#show_dp_mv`)) {\n    openURL('/dp_mvs', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#cinnosts-index`)) {\n    openURL('/cinnosts', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#pracovniks-index`)) {\n    openURL('/pracovniks', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#bank_ucets_index`)) {\n    openURL('/bank_ucets?canceled=false', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#pokladnas_index`)) {\n    openURL('/pokladnas', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#sklads_index`)) {\n    openURL('/sklads', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`.create-firma`)) {\n    openURL('/firma_publics/new', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`.show-firma`)) {\n    openURL('/firmas/1', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`.show-profile`)) {\n    openURL('/user', { parentUrl: new URL(location) });\n  } else if (e.target.closest(`#show_users_management`)) {\n    openURL('/users', { parentUrl: new URL(location) });\n  } else if (e.target.closest('[name=\"commit\"][type=\"submit\"]')) {\n    let newlyAdded = document.querySelector('#newly_added');\n    if (newlyAdded) {\n      newlyAdded.querySelector('table#list_newly_added tbody').innerHTML = '';\n      newlyAdded.classList.remove('show');\n      delay(() => {\n        newlyAdded.setAttribute('hidden', 'hidden');\n      }, 300);\n    }\n  } else if (e.target.closest('.transfer-value')) {\n    let group = e.target.closest('.input-group');\n    let from = group.querySelector('input[id$=\"_od\"]');\n    let to = group.querySelector('input[id$=\"_do\"]');\n\n    if (from.value) {\n      to.value = from.value;\n    } else {\n      from.value = to.value;\n    }\n  } else if (\n    e.target.closest('button.rounded-circle') &&\n    e.target.closest('button.rounded-circle').dataset.bsToggle === 'collapse'\n  ) {\n    const target = e.target.closest('button.rounded-circle');\n    const icons = target.querySelectorAll('i');\n    const span = target.closest('span.rounded-square');\n\n    // change width of window when working with stock on OF, OPF, Df, DPF, PD\n    if (target.getAttribute('href') === '#fakt_sklad_polozkies') {\n      if (target.classList.contains('collapsed')) {\n        setDefaultWindowWidth();\n      } else {\n        localStorage.setItem('outerWidth', window.outerWidth);\n\n        window.resizeTo(1380, window.outerHeight);\n      }\n    }\n\n    if (icons.length > 1) return;\n\n    const i = icons[0];\n\n    if (i) {\n      if (i.classList.contains('fa-plus')) {\n        i.classList.remove('fa-plus');\n        i.classList.add('fa-minus');\n      } else {\n        i.classList.remove('fa-minus');\n        i.classList.add('fa-plus');\n      }\n    }\n\n    if (!span) return;\n\n    span.innerHTML =\n      target.getAttribute('aria-expanded') === 'true' ? '+' : '-';\n  }\n}\n\nfunction changeEvents(e) {\n  if (e.target.id === 'kod_firmy' && e.target.value) {\n    if (\n      window.windowObjectReference != null &&\n      window.windowObjectReference !== window\n    ) {\n      window.windowObjectReference.close();\n    }\n\n    openURL(`/switch/${e.target.value}`, { target: '_self' });\n  }\n}\n\nfunction changeDateEvents(e) {\n  if (e.target.classList.contains('vanillajs-datepicker')) {\n    e.target.dispatchEvent(new Event('change', { bubbles: true }));\n  }\n}\n\n// Debounce timers and processing flags for each input\nconst dateInputTimers = new WeakMap();\nconst dateInputProcessing = new WeakMap();\n\nfunction completeDate(target) {\n  // Prevent re-entrant execution\n  if (dateInputProcessing.get(target)) return;\n\n  dateInputProcessing.set(target, true);\n\n  try {\n    while (target.value.includes('..')) {\n      target.value = target.value.replace('..', '.');\n    }\n\n    const today = new Date();\n    let yyyy = today.getFullYear();\n    let length = target.value.length;\n\n    let values = target.value.match(/[0-9]{1,4}/g);\n    if (!values) return false;\n\n    let day = parseInt(values[0]);\n    if (day > 31) day = 31;\n\n    let month = parseInt(values[1]);\n    if (month > 12) month = 12;\n\n    const year = parseInt(values[2]);\n\n    switch (values.length) {\n      case 1:\n        const mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!\n\n        if (\n          (day > 3 && day < 10 && length !== 2) ||\n          (day < 4 && day > 0 && target.value.endsWith('.'))\n        ) {\n          target.value = `${day.toString().padStart(2, '0')}.${mm}.${yyyy}`;\n          length = 2;\n        } else if (day > 10 || length === 2) {\n          target.value += `.${mm}.${yyyy}`;\n        } else {\n          target.value += `1.${mm}.${yyyy}`;\n        }\n\n        break;\n      case 2:\n        if (month - today.getMonth() > 1) {\n          // if input month higher then 2 from current, set last year\n          yyyy -= 1;\n        }\n\n        if (month < 2 && length !== 5) {\n          target.value += `1.${yyyy}`;\n        } else if (month > 1 && month < 10) {\n          target.value = `${target.value.replace(\n            `.${month}`,\n            `.${month.toString().padStart(2, '0')}`\n          )}.${yyyy}`;\n          length = 5;\n        } else if (month < 2 && target.value.endsWith('.')) {\n          target.value = `${target.value.replace(`.${month}.`, `.01`)}.${yyyy}`;\n          length = 5;\n        } else {\n          target.value = `${day.toString().padStart(2, '0')}.${month\n            .toString()\n            .padStart(2, '0')}.${yyyy}`;\n        }\n\n        break;\n      default:\n        target.value = `${day.toString().padStart(2, '0')}.${month\n          .toString()\n          .padStart(2, '0')}.${year}${yyyy\n          .toString()\n          .slice(year.toString().length)}`;\n    }\n\n    target.value = target.value.substring(0, 10); // always append 10 chars\n    target.setSelectionRange(\n      length === 2 || length === 5 ? length + 1 : length,\n      target.value.length\n    );\n  } finally {\n    // Always clear the processing flag\n    dateInputProcessing.set(target, false);\n  }\n}\n\nfunction debouncedCompleteDate(target) {\n  // Clear existing timer for this input\n  const existingTimer = dateInputTimers.get(target);\n  if (existingTimer) {\n    clearTimeout(existingTimer);\n  }\n\n  // Set new timer with shorter delay for other patterns\n  const timer = setTimeout(() => {\n    completeDate(target);\n    dateInputTimers.delete(target);\n  }, 5);\n\n  dateInputTimers.set(target, timer);\n}\n\nfunction submitEvents(e) {\n  if (e.submitter && e.submitter.dataset.turbo === 'false') {\n    e.submitter.classList.add('disabled');\n    e.submitter.setAttribute('disabled', 'disabled');\n  } else if (e.target.closest('[action=\"/records_counting\"]')) {\n    e.target\n      .closest('.offcanvas')\n      .querySelector('.btn-close[data-bs-dismiss=\"offcanvas\"]')\n      .click();\n  }\n}\n\nfunction visibilityChangeEvents() {\n  if (\n    window.windowObjectReference != null &&\n    window.windowObjectReference !== window\n  ) {\n    if (!document.hidden) {\n      window.windowObjectReference.blur();\n      delay(() => {\n        window.windowObjectReference.focus();\n      }, 0);\n    }\n  }\n}\n\nconst setDefaultWindowWidth = () => {\n  if (localStorage.getItem('outerWidth')) {\n    window.resizeTo(+localStorage.getItem('outerWidth'), window.outerHeight);\n\n    localStorage.removeItem('outerWidth');\n  }\n};\n\nwindow.windowObjectReference = null;\n\nwindow.onunload = () => {\n  if (\n    window.windowObjectReference !== null &&\n    window.windowObjectReference !== window\n  ) {\n    window.windowObjectReference.close();\n    window.windowObjectReference = null;\n  }\n};\n\ndocument.addEventListener('turbo:load', () => {\n  console.log('application.js turbo:load');\n\n  setDefaultWindowWidth();\n\n  const url = new URL(location);\n  if (\n    url.searchParams.has('forced_reload') &&\n    url.searchParams.get('forced_reload') === 'true'\n  ) {\n    if (history.pushState) {\n      const newurl =\n        window.location.protocol +\n        '//' +\n        window.location.host +\n        window.location.pathname +\n        '?forced_reload=false';\n      window.history.pushState({ path: newurl }, '', newurl);\n    }\n  } else if (\n    url.searchParams.has('forced_reload') &&\n    url.searchParams.get('forced_reload') === 'false'\n  ) {\n    if (history.pushState) {\n      const newurl =\n        window.location.protocol +\n        '//' +\n        window.location.host +\n        window.location.pathname;\n      window.history.pushState({ path: newurl }, '', newurl);\n    }\n  }\n\n  document.addEventListener('keyup', keyupEvents);\n  document.addEventListener('keypress', keypressEvents);\n  document.addEventListener('click', clickEvents);\n  document.addEventListener('change', changeEvents);\n  document.addEventListener('changeDate', changeDateEvents, true);\n  document.addEventListener('submit', submitEvents);\n  document.addEventListener('visibilitychange', visibilityChangeEvents);\n});\n\ndocument.addEventListener('turbo:before-cache', () => {\n  console.log('application.js before-cache:');\n\n  document.removeEventListener('keyup', keyupEvents);\n  document.removeEventListener('keypress', keypressEvents);\n  document.removeEventListener('click', clickEvents);\n  document.removeEventListener('change', changeEvents);\n  document.removeEventListener('changeDate', changeDateEvents, true);\n  document.removeEventListener('submit', submitEvents);\n  document.removeEventListener('visibilitychange', visibilityChangeEvents);\n});\n"],
  "mappings": "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OAAQ,CAAC,YAAY,EACrB,YAAa,sFACb,SAAU,CAAC,eAAgB,yBAA0B,4BAA6B,0BAA2B,yBAA0B,kCAAkC,EACzK,QAAS,CAAC,SAAU,WAAY,YAAa,SAAU,QAAQ,CACjE,ICPA,IAAWG,GAAXC,GAAAC,EAAA,KAAWF,GAAU,CACnB,KAAM,MACN,SAAU,QACV,OAAQ,CAAC,YAAY,EACrB,YAAa,2BACb,SAAU,CAAC,SAAS,EACpB,QAAS,CAAC,MAAO,KAAK,CACxB,ICPA,IAAWG,GAAXC,GAAAC,EAAA,KAAWF,GAAY,CACrB,KAAM,QACN,SAAU,QACV,OAAQ,CAAC,0BAA2B,oCAAoC,EACxE,YAAa,6CACb,SAAU,CAAC,4CAA6C,+CAAgD,sDAAuD,wCAAwC,EACvM,QAAS,CAAC,QAAQ,CACpB,ICPA,IAAWG,GAAXC,GAAAC,EAAA,KAAWF,GAAa,CACtB,KAAM,SACN,SAAU,QACV,OAAQ,CAAC,WAAW,EACpB,YAAa,8BACb,SAAU,CAAC,cAAe,iBAAkB,iBAAkB,uBAAuB,EACrF,QAAS,CAAC,mBAAmB,CAC/B,ICPA,IAyOWG,GAzOXC,GAAAC,EAAA,KAAAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACW3O,GAAe,CAExB,UAAW4O,GACX,QAASC,GACT,QAASC,GACT,WAAYC,GACZ,SAAUC,GACV,MAAOC,GACP,OAAQC,GACR,OAAQC,GACR,OAAQC,GACR,UAAWC,GACX,OAAQC,GACR,KAAMC,GAEN,EAAGC,GACH,EAAGA,GACH,MAAOC,GACP,EAAGC,GACH,SAAUC,GACV,IAAKC,GACL,KAAMC,GACN,MAAOC,GACP,OAAQC,GACR,IAAKC,GACL,KAAMC,GACN,GAAIC,GACJ,GAAIA,GACJ,IAAKC,GACL,QAASC,GACT,MAAOC,GACP,IAAKC,GACL,KAAMC,GACN,QAASC,GAGT,aAAc,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qBAEH,SAAU,CACR,SAAU,CACR,YAAa,EACf,EACA,SAAU,CACR,MAAO,EACT,CACF,CACF,EAAG,CACD,EAAG,qBAEH,SAAU,CACR,SAAU,CACR,YAAa,EACf,EACA,SAAU,CACR,MAAO,EACT,CACF,CACF,EAAG,CACD,EAAG,qBAEH,SAAU,CACR,SAAU,CACR,YAAa,EACf,EACA,SAAU,CACR,MAAO,EACT,CACF,CACF,EAAG,CACD,EAAG,WACH,EAAG,QACL,EAAG,CACD,EAAG,KACH,EAAG,UACL,EACA,CACE,EAAG,iBACH,EAAG,oBACH,OAAQ,EACV,EACA,CACE,EAAG,UACH,EAAG,UACL,EACA,CACE,EAAG,OACH,EAAG,SACL,EAAG,CACD,EAAG,8BACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,oCACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EACA,CACE,EAAG,iCACH,SAAU,CACR,OAAQ,CACN,MAAO,EACT,CACF,CAEF,EACA,CACE,EAAG,0BACH,EAAG,4BACL,EAAG,CACD,EAAG,2DACH,SAAU,CACR,OAAQ,CACN,MAAO,EACT,CACF,CAEF,EAAG,CACD,EAAG,2DACH,SAAU,CACR,OAAQ,CACN,MAAO,EACT,CACF,CACF,EAAG,CACD,EAAG,2DACH,SAAU,CACR,OAAQ,CACN,MAAO,EACT,CACF,CACF,EAAG,CACD,EAAG,MACH,EAAG,KACL,EAAG,CACD,EAAG,uBACH,SAAU,CACR,OAAQ,CACN,MAAO,EACT,CACF,CAEF,EAAG,CACD,EAAG,2BACH,SAAU,CACR,OAAQ,CACN,MAAO,EACT,CACF,CAEF,EAIAc,GAEA,CACE,EAAG,aACH,SAAU,CACR,IAAK,CACH,MAAO,EACT,CACF,CAEF,EAAG,CACD,EAAG,OACH,EAAG,GACL,EAAG,CACD,EAAG,UACH,EAAG,SACL,EACA,CACE,EAAG,gBACH,EAAG,YACL,EACA,CACE,EAAG,2BACH,EAAG,+BACL,EAAG,CACD,EAAG,2BACH,EAAG,+BACL,EAAG,CACD,EAAG,qBAEH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,8BACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,8DACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,8DACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,UACH,EAAG,SACL,EAAG,CACD,EAAG,qBACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAGA,GAEH,CACE,EAAG,qBACH,SAAU,CACR,SAAU,CACR,MAAO,EACT,CACF,CACF,EAAG,CACD,EAAG,qBAEH,SAAU,CACR,SAAU,CACR,MAAO,EACT,EACA,SAAU,CACR,YAAa,EACf,CACF,CACF,EACA,CACE,EAAG,aACH,SAAU,CACR,IAAK,CACH,YAAa,EACf,CACF,EACA,cAAe,CACb,IAAK,CACH,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,aACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,EACA,cAAe,CACb,SAAU,CACR,YAAa,EACf,CACF,CACF,EAEA,CACE,EAAG,QACH,EAAG,MACL,EACA,CACE,EAAG,oBAEH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CAEF,EAAG,CACD,EAAG,sBACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CAEF,EAAG,CACD,EAAG,cACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CAEF,EAAG,CACD,EAAG,MACH,EAAG,GACL,EACA,CACE,EAAG,yBAEH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,uBAEH,SAAU,CACR,SAAU,CACR,YAAa,GACb,YAAa,EACf,CACF,CACF,EAIA,CACE,EAAG,MACH,EAAG,IACH,cAAe,CACb,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,2BACH,SAAU,CACR,SAAU,CACR,YAAa,EACf,CACF,CACF,EAAG,CACD,EAAG,WACH,EAAG,QACL,C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W,CAAC/C,EAChB,CACE,EAAG,MACH,EAAG,KACL,EAAG,CACD,EAAG,OACH,EAAG,GACL,EAAGe,GACH,CACE,EAAG,YACH,EAAG,MACL,EAAG,CACD,EAAG,WACH,EAAG,SACL,EAAG,CACD,EAAG,QACH,EAAG,MACL,EAAG,CACD,EAAG,YACH,EAAG,WACL,EAAG,CACD,EAAG,MACH,EAAG,GACL,CAAC,EACGiC,EAAa,CAAC,CAChB,EAAG,cACH,EAAG,OACL,EACA,CACE,EAAG,cACH,EAAG,OACL,EACA,CACE,EAAG,SACH,EAAG,OACL,EACA,CACE,EAAG,QACH,EAAG,UACL,EACA,CACE,EAAG,aACH,EAAG,iBACL,EACA,CACE,EAAG,aACH,EAAG,eACL,EACA,CACE,EAAG,cACH,EAAG,WACL,EACA,CACE,EAAG,WACH,EAAG,UACL,EACA,CACE,EAAG,cACH,EAAG,WACL,EACA,CACE,EAAG,WACH,EAAG,UACL,EACA,CACE,EAAG,MACH,EAAG,SACL,EACA,CACE,EAAG,OACH,EAAG,UACL,EACA,CACE,EAAG,QACH,EAAG,KACL,EACA,CACE,EAAG,OACH,EAAG,MACL,EACA,CACE,EAAG,OACH,EAAG,MACL,EACA,CACE,EAAG,MACH,EAAG,KACL,EACA,CACE,EAAG,YACH,EAAG,SACL,EACA,CACE,EAAG,WACH,EAAG,UACL,EACA,CACE,EAAG,YACH,EAAG,SACL,EACA,CACE,EAAG,WACH,EAAG,UACL,EACA,CACE,EAAG,aACH,EAAG,cACL,EACA,CACE,EAAG,YACH,EAAG,SACL,EACA,CACE,EAAG,WACH,EAAG,UACL,CAAC,EAEGC,EAAgB,CAAC,CACnB,EAAG,kBACH,EAAG,2BACL,EACA,CACE,EAAG,eACH,EAAG,mBACL,EACA,CACE,EAAG,eACH,EAAG,mBACL,CAAC,EAEGC,GAAc,CAAC,CACjB,EAAG,eACH,EAAG,cACL,EACA,CACE,EAAG,aACH,EAAG,cACL,CAAC,EACG9B,GAAW,CAAC,EAIhB,OAAAA,GAAS,WAAa2B,GAAS,OAAOC,EAAYE,EAAW,EAE7D9B,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C,GAEAC,GAKAC,GACAC,GACAC,GAwCAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAUAC,GASAC,GACAC,GAGAC,GACAC,GACAC,GAjNXC,GAAAC,EAAA,KAAAC,KACAC,KACAC,KAIAC,KAEAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAEAC,KACAC,KACAC,KACAC,KACAC,KAOAC,KAIAC,KACAC,KAoBAC,KAYAC,KACAC,KACAC,KACAC,KAEAC,KAIAvB,KACAwB,KACAC,KACAC,KAEAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAOAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAQAC,KAKAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAEAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAEAC,KAEAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAEAC,KACAC,KA4BAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KAIAC,KACAC,KACAC,KACAC,KAEAC,KAGAC,KACAC,KAIAC,KACAC,KACAC,KAEAC,KACAC,KAlMW1L,GAAkCR,GAAoB,aAAcmM,EAAgB,EACpF1L,GAAiCT,GAAoB,YAAaoM,EAAe,EACjF1L,GAA2BV,GAAoB,MAAOqM,EAAS,EAC/D1L,GAAiCX,GAAoB,YAAasM,EAAS,EAC3E1L,GAA4BZ,GAAoB,OAAQuM,EAAU,EAElE1L,GAA4Bb,GAAoB,OAAQwM,EAAU,EAClE1L,GAA2Bd,GAAoB,MAAOyM,EAAS,EAC/D1L,GAA6Bf,GAAoB,QAAS0M,EAAW,EAGrE1L,GAA2BhB,GAAoB,MAAO2M,EAAS,EAC/D1L,GAA2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",
  "names": ["adapters_default", "init_adapters", "__esmMin", "logger_default", "init_logger", "__esmMin", "init_adapters", "messages", "adapters_default", "now", "secondsSince", "ConnectionMonitor", "connection_monitor_default", "init_connection_monitor", "__esmMin", "init_logger", "time", "connection", "logger_default", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "internal_default", "init_internal", "__esmMin", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "connection_default", "init_connection", "__esmMin", "init_adapters", "init_connection_monitor", "init_internal", "init_logger", "internal_default", "consumer", "connection_monitor_default", "data", "logger_default", "adapters_default", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "Subscription", "init_subscription", "__esmMin", "object", "properties", "key", "value", "consumer", "params", "mixin", "action", "data", "SubscriptionGuarantor", "subscription_guarantor_default", "init_subscription_guarantor", "__esmMin", "init_logger", "subscriptions", "subscription", "logger_default", "s", "Subscriptions", "init_subscriptions", "__esmMin", "init_subscription", "init_subscription_guarantor", "init_logger", "consumer", "subscription_guarantor_default", "channelName", "mixin", "channel", "params", "subscription", "Subscription", "identifier", "s", "callbackName", "args", "subscriptions", "logger_default", "command", "createWebSocketURL", "url", "a", "Consumer", "init_consumer", "__esmMin", "init_connection", "init_subscriptions", "Subscriptions", "connection_default", "data", "src_exports", "__export", "connection_default", "connection_monitor_default", "Consumer", "internal_default", "Subscription", "subscription_guarantor_default", "Subscriptions", "adapters_default", "createConsumer", "createWebSocketURL", "getConfig", "logger_default", "url", "name", "element", "init_src", "__esmMin", "init_connection", "init_connection_monitor", "init_consumer", "init_internal", "init_subscription", "init_subscriptions", "init_subscription_guarantor", "init_adapters", "init_logger", "createWebSocketURL", "url", "a", "createConsumer", "getConfig", "INTERNAL", "Consumer", "name", "element", "adapters", "logger", "now", "secondsSince", "ConnectionMonitor", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "extend", "Subscription", "SubscriptionGuarantor", "Subscriptions", "init_actioncable_esm", "__esmMin", "messages", "time", "connection", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "consumer", "data", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "object", "properties", "key", "value", "params", "mixin", "action", "subscriptions", "subscription", "s", "channelName", "channel", "callbackName", "args", "command", "consumer_default", "init_consumer", "__esmMin", "init_actioncable_esm", "createConsumer", "show_submit_buttons_exports", "__export", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "showSubmitButton", "e", "target", "visibleButtons", "hiddenButtons", "button", "init_show_submit_buttons", "__esmMin", "window_manager_exports", "__export", "openURL", "url", "options", "setWindowDimensions", "windowWidth", "parentWidth", "button", "width", "fullscreen", "height", "parentUrl", "pathname", "init_window_manager", "__esmMin", "showToastMessage", "message", "args", "parent", "toast", "_class", "myToast", "hideIfProgressed", "init_show_toast_message", "__esmMin", "autohide", "progress", "progressBar", "i", "forEvents", "events", "callback", "split", "forEach", "event", "MicroEvent", "constructor", "this", "_events", "on", "fct", "event_array", "push", "off", "n", "arguments", "length", "splice", "indexOf", "trigger", "args", "self", "apply", "arrayToPattern", "chars", "filter", "Boolean", "maxValueLength", "join", "sequencePattern", "array", "hasDuplicates", "pattern", "prev_char_count", "prev_pattern", "char", "i", "setToPattern", "Array", "from", "Set", "size", "escape_regex", "str", "replace", "reduce", "longest", "value", "Math", "max", "unicodeLength", "allSubstrings", "input", "result", "start", "substring", "subresult", "tmp", "slice", "charAt", "unshift", "code_points", "unicode_map", "multi_char_reg", "latin_convert", "latin_condensed", "a", "aa", "ae", "ao", "au", "av", "ay", "b", "c", "d", "e", "f", "g", "h", "j", "k", "l", "m", "o", "oe", "oi", "oo", "ou", "p", "q", "r", "s", "t", "th", "tz", "u", "v", "vy", "w", "y", "z", "hv", "latin", "unicode", "convert_pat", "RegExp", "Object", "keys", "normalize", "form", "asciifold", "_asciifold", "toLowerCase", "generateSets", "unicode_sets", "addMatching", "folded", "to_add", "folded_set", "patt", "match", "add", "code_point_min", "code_point_max", "composed", "String", "fromCharCode", "code_point", "generateMap", "multi_char", "set", "sort", "multi_char_patt", "substringsToPattern", "min_replacement", "map", "sub_pat", "strings", "chars_replaced", "sequencesToPattern", "sequences", "all", "sequence", "seq", "len", "substrs", "inSequences", "needle_seq", "end", "needle_parts", "parts", "part", "needle_part", "substr", "Sequence", "min", "last", "position", "last_piece", "clone", "JSON", "parse", "stringify", "last_part", "pop", "last_substr", "clone_last_len", "getPattern", "match_str", "overlapping", "added_types", "has", "new_seq", "old_seq", "getAttr", "obj", "name", "getAttrNesting", "names", "shift", "scoreValue", "token", "weight", "score", "pos", "regex", "search", "string", "propToArray", "key", "isArray", "iterate", "object", "hasOwnProperty", "cmp", "Sifter", "items", "settings", "diacritics", "query", "respect_word_boundaries", "weights", "tokens", "words", "field_regex", "word", "field_match", "field", "options", "prepareSearch", "_getScoreFunction", "token_count", "fields", "field_count", "getAttrFn", "scoreObject", "data", "sum", "conjunction", "_getSortFunction", "implicit_score", "sort_flds", "sort_empty", "bind", "get_field", "id", "fld", "direction", "sort_fld", "optsUser", "assign", "trim", "tokenize", "total", "fn_score", "item", "_", "fn_sort", "limit", "hash_key", "get_hash", "escape_html", "loadDebounce", "fn", "delay", "timeout", "loading", "clearTimeout", "setTimeout", "loadedSearches", "call", "debounce_events", "types", "type", "event_args", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "target", "addEventListener", "isKeyDown", "key_name", "altKey", "ctrlKey", "shiftKey", "metaKey", "getId", "el", "getAttribute", "setAttribute", "addSlashes", "append", "parent", "node", "getDom", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "content", "firstChild", "querySelector", "arg", "triggerEvent", "dom_el", "event_name", "createEvent", "initEvent", "dispatchEvent", "applyCSS", "css", "style", "addClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "cls", "classList", "removeClasses", "remove", "_classes", "concat", "parentMatch", "selector", "wrapper", "contains", "matches", "parentNode", "getTail", "list", "nodeIndex", "amongst", "nodeName", "previousElementSibling", "setAttr", "attrs", "val", "attr", "removeAttribute", "replaceNode", "existing", "replacement", "replaceChild", "highlight", "element", "highlightRecursive", "nodeType", "spannode", "className", "middlebit", "splitText", "index", "middleclone", "cloneNode", "appendChild", "childNodes", "test", "tagName", "KEY_SHORTCUT", "navigator", "userAgent", "defaults", "optgroups", "plugins", "delimiter", "splitOn", "persist", "create", "createOnBlur", "createFilter", "clearAfterSelect", "openOnFocus", "shouldOpen", "maxOptions", "maxItems", "hideSelected", "duplicates", "addPrecedence", "selectOnTab", "preload", "allowEmptyOption", "refreshThrottle", "loadThrottle", "loadingClass", "dataAttr", "optgroupField", "valueField", "labelField", "disabledField", "optgroupLabelField", "optgroupValueField", "lockOptgroupOrder", "sortField", "searchField", "searchConjunction", "mode", "wrapperClass", "controlClass", "dropdownClass", "dropdownContentClass", "itemClass", "optionClass", "dropdownParent", "controlInput", "copyClassesToDropdown", "placeholder", "hidePlaceholder", "shouldLoad", "render", "getSettings", "settings_user", "attr_data", "field_label", "field_value", "field_disabled", "field_optgroup", "field_optgroup_label", "field_optgroup_value", "tag_name", "option", "textContent", "settings_element", "init_select", "optionsMap", "group_count", "$order", "readData", "dataset", "json", "addOption", "group", "arr", "option_data", "disabled", "$option", "selected", "hasAttribute", "children", "child", "optgroup", "optgroup_data", "init_textbox", "data_raw", "opt", "_input$value$trim", "_input$value", "values", "instance_i", "TomSelect", "Interface", "super", "requested", "loaded", "initializePlugins", "queue", "plugin", "require", "loadPlugin", "Error", "input_arg", "user_settings", "dir", "order", "isOpen", "isDisabled", "isReadOnly", "isInvalid", "isValid", "isLocked", "isFocused", "isInputHidden", "isSetup", "isDropdownContentStale", "ignoreFocus", "ignoreHover", "hasOptions", "lastValue", "caretPos", "activeOption", "activeItems", "userOptions", "refreshTimeout", "tomselect", "window", "getComputedStyle", "getPropertyValue", "tabIndex", "is_select_tag", "rtl", "inputId", "isRequired", "required", "sifter", "setupCallbacks", "setupTemplates", "control", "dropdown", "_render", "dropdown_content", "inputMode", "control_input", "focus_node", "setup", "passive_event", "passive", "listboxId", "role", "control_id", "label", "label_click", "focus", "for", "label_id", "width", "minWidth", "maxWidth", "classes_plugins", "multiple", "load", "target_match", "onOptionHover", "capture", "onOptionSelect", "onItemSelect", "onClick", "onKeyDown", "onKeyPress", "onInput", "onBlur", "onFocus", "onPaste", "doc_mousedown", "composedPath", "blur", "inputState", "win_scroll", "positionDropdown", "input_invalid", "refreshState", "_destroy", "removeEventListener", "revertSettings", "insertAdjacentElement", "sync", "refreshItems", "close", "onChange", "setupOptions", "addOptions", "registerOptionGroup", "templates", "optgroup_header", "escape", "option_create", "no_results", "not_loading", "callbacks", "initialize", "change", "item_add", "item_remove", "item_select", "clear", "option_add", "option_remove", "option_clear", "optgroup_add", "optgroup_remove", "optgroup_clear", "dropdown_open", "dropdown_close", "get_settings", "setValue", "disable", "readOnly", "setReadOnly", "enable", "lastQuery", "clearActiveItems", "onMouseDown", "pastedText", "inputValue", "splitInput", "piece", "addItem", "createItem", "character", "keyCode", "which", "constants", "selectAll", "open", "next", "getAdjacent", "setActiveOption", "prev", "canSelect", "activeElement", "advanceSelection", "deleteSelection", "_onInput", "refreshOptions", "wasFocused", "hasFocus", "deactivate", "setActiveItem", "setCaret", "parentElement", "closeAfterSelect", "setTextboxValue", "canLoad", "loadCallback", "clearActiveOption", "getValue", "silent", "addItems", "setMaxItems", "eventName", "begin", "swap", "getLastActive", "prototype", "setActiveItemClass", "removeActiveItem", "last_active", "idx", "scroll", "scrollToOption", "behavior", "height_menu", "clientHeight", "scrollTop", "height_item", "offsetHeight", "getBoundingClientRect", "top", "scrollBehavior", "controlChildren", "toggle", "focusTarget", "offsetWidth", "getRootNode", "getScoreFunction", "getSearchOptions", "nesting", "calculateScore", "currentResults", "hashed", "triggerDropdown", "html", "has_create_option", "active_group", "groups", "groups_order", "same_query", "results", "active_option", "show_dropdown", "closest", "getGroupFragment", "group_order_i", "order_group", "fragment", "group_fragment", "createDocumentFragment", "opt_value", "opt_hash", "option_el", "getOption", "includes", "self_optgroup", "regGroup", "optionGroupRegister", "$id", "toString", "elements", "group_order", "group_heading", "group_options", "header", "group_html", "querySelectorAll", "tok", "add_template", "template", "insertBefore", "canCreate", "undefined", "active_index", "selectable", "user_created", "updateOption", "dat", "registerOption", "addOptionGroup", "hashed_id", "removeOptionGroup", "clearCache", "clearOptionGroups", "item_new", "index_item", "value_old", "value_new", "data_old", "getItem", "uncacheValue", "option_new", "removeOption", "removeItem", "clearOptions", "boundFilter", "clearFilter", "$div", "last_item", "x", "isPending", "wasFull", "isFull", "insertAtCaret", "updateOriginalInput", "output", "caret", "lock", "created", "unlock", "refreshValidityState", "wrap_classList", "validity", "valid", "opts", "empty_option", "AddSelected", "has_selected", "visibility", "display", "context", "rect", "scrollY", "left", "scrollX", "selection", "tail", "selectionStart", "selectionEnd", "rm_items", "rm_item", "shouldDelete", "onDelete", "adjacent", "nextElementSibling", "moveCaret", "new_pos", "setLocked", "setDisabled", "destroy", "templateName", "hook", "when", "method", "new_fn", "orig_method", "result_new", "define", "orig_onOptionSelect", "cbOptions", "checkedClassNames", "uncheckedClassNames", "UpdateChecked", "checkbox", "toCheck", "checked", "UpdateCheckbox", "HTMLInputElement", "orig_render_option", "rendered", "prepend", "title", "tabindex", "button", "orig_lock", "orig_unlock", "drag_item", "sortable", "orig_render_item", "draggable", "dragOver", "moveitem", "targetitem", "dragitem", "insertAfter", "referenceNode", "newNode", "_referenceNode$parent", "isBefore", "_newNode", "nextSibling", "_referenceNode$parent2", "dragLeave", "dragend", "_drag_item", "headerClass", "titleRowClass", "labelClass", "closeClass", "close_link", "_self$input", "div", "orig_onBlur", "relatedTarget", "preventScroll", "test_input", "cssText", "style_name", "resize", "clientWidth", "orig_deleteSelection", "orig_keydown", "previousSibling", "_data$tabindex", "close_button", "text", "orig_canLoad", "orig_clearActiveOption", "orig_loadCallback", "load_more_opt", "default_pagination", "pagination", "loading_more", "default_values", "default_values_loaded", "default_options", "html_values", "shouldLoadMore", "scrollHeight", "firstUrl", "canLoadMore", "setNextUrl", "next_url", "getUrl", "clearPagination", "first_option", "activeFilter", "_option", "restoreDefaults", "no_more_results", "ce", "make_request_default", "url", "params", "csrf", "parameters", "response", "init_make_request", "__esmMin", "setLabel", "data", "escape", "label", "setPartnerLabel", "import_tom_select_complete_min", "initializeTomSelect", "descendingSort", "ascendingSort", "init_tom_select", "__esmMin", "init_make_request", "nodeList", "select", "option", "index", "options", "placeholder", "defaultPlaceholder", "dropdown", "bounding", "selectedOption", "allowClear", "sort", "loadingDataZoznam", "loadingData", "loadingDataSkladovaKarta", "text", "loadingDataCisStat", "loadSyntUcet", "loadAnalytUcet", "loadVykazPolozka", "szcp", "item", "query", "callback", "make_request_default", "json", "editForm", "tsOption", "desirableOption", "okruh", "model_id", "dodavatel", "evidencia", "value", "$item", "SU_AU_TEXT_LENGTH", "parent", "TomSelect", "a", "b", "_extends", "n", "r", "init_extends", "__esmMin", "DEFAULT_CONFIG", "init_config", "__esmMin", "isNumber", "x", "isBigNumber", "isComplex", "isFraction", "isUnit", "isString", "isMatrix", "isCollection", "isDenseMatrix", "isSparseMatrix", "isRange", "isIndex", "isBoolean", "isResultSet", "isHelp", "isFunction", "isDate", "isRegExp", "isObject", "isNull", "isUndefined", "isAccessorNode", "isArrayNode", "isAssignmentNode", "isBlockNode", "isConditionalNode", "isConstantNode", "isFunctionAssignmentNode", "isFunctionNode", "isIndexNode", "isNode", "isObjectNode", "isOperatorNode", "isParenthesisNode", "isRangeNode", "isSymbolNode", "isChain", "typeOf", "t", "isArray", "init_is", "__esmMin", "clone", "x", "type", "value", "isBigNumber", "mapObject", "object", "callback", "key", "hasOwnProperty", "deepStrictEqual", "a", "b", "prop", "i", "len", "lazy", "valueResolver", "_uninitialized", "_value", "property", "pickShallow", "properties", "copy", "init_object", "__esmMin", "init_is", "MATRIX_OPTIONS", "NUMBER_OPTIONS", "init_config", "__esmMin", "config", "init_configReadonly", "__esmMin", "init_extends", "init_config", "options", "DEFAULT_CONFIG", "_extends", "MATRIX_OPTIONS", "NUMBER_OPTIONS", "isInteger", "value", "formatNumberToBase", "n", "base", "size", "prefixes", "prefix", "suffix", "sign", "format", "options", "notation", "precision", "wordSize", "isNumber", "toFixed", "toExponential", "toEngineering", "toPrecision", "digits", "e", "splitNumber", "match", "exponent", "dot", "coefficients", "zeros", "d", "split", "rounded", "roundDigits", "c", "newExp", "missingZeros", "i", "expDiff", "decimalIdx", "decimals", "decimalVal", "str", "splitValue", "p", "pp", "first", "lowerExp", "upperExp", "removed", "length", "arr", "nearlyEqual", "x", "y", "epsilon", "diff", "DBL_EPSILON", "log2", "log10", "log1p", "cbrt", "expm1", "acosh", "asinh", "atanh", "cosh", "sinh", "tanh", "init_number", "__esmMin", "init_is", "negate", "result", "absNumber", "a", "addNumber", "b", "subtractNumber", "multiplyNumber", "divideNumber", "unaryMinusNumber", "x", "unaryPlusNumber", "cbrtNumber", "cbrt", "cubeNumber", "expNumber", "expm1Number", "expm1", "gcdNumber", "isInteger", "r", "lcmNumber", "prod", "logNumber", "y", "log10Number", "log10", "log2Number", "log2", "log1pNumber", "log1p", "modNumber", "nthRootNumber", "root", "inv", "signNumber", "sign", "sqrtNumber", "squareNumber", "xgcdNumber", "q", "lastx", "lasty", "res", "powNumber", "roundNumber", "value", "decimals", "toFixed", "normNumber", "n1", "n2", "init_arithmetic", "__esmMin", "init_number", "bitAndNumber", "x", "y", "isInteger", "bitNotNumber", "bitOrNumber", "bitXorNumber", "leftShiftNumber", "rightArithShiftNumber", "rightLogShiftNumber", "n1", "n2", "init_bitwise", "__esmMin", "init_number", "product", "i", "n", "half", "init_product", "__esmMin", "combinationsNumber", "n", "k", "isInteger", "nMinusk", "answer", "firstnumerator", "nextdivisor", "lastdivisor", "nextnumerator", "product", "init_combinations", "__esmMin", "init_number", "init_product", "pi", "tau", "e", "phi", "init_constants", "__esmMin", "notNumber", "x", "orNumber", "y", "xorNumber", "andNumber", "n1", "n2", "init_logical", "__esmMin", "init_relational", "__esmMin", "gammaNumber", "n", "x", "isInteger", "product", "twoN", "threeN", "fourN", "fiveN", "gammaP", "i", "t", "gammaG", "lgammaNumber", "base", "lgammaG", "sum", "lgammaSeries", "lgammaN", "lnSqrt2PI", "init_probability", "__esmMin", "init_number", "init_product", "acosNumber", "x", "acoshNumber", "acosh", "acotNumber", "acothNumber", "acscNumber", "acschNumber", "xInv", "asecNumber", "asechNumber", "ret", "asinNumber", "asinhNumber", "asinh", "atanNumber", "atan2Number", "y", "atanhNumber", "atanh", "cosNumber", "coshNumber", "cosh", "cotNumber", "cothNumber", "cscNumber", "cschNumber", "sign", "secNumber", "sechNumber", "sinNumber", "sinhNumber", "sinh", "tanNumber", "tanhNumber", "tanh", "n1", "n2", "init_trigonometry", "__esmMin", "init_number", "isIntegerNumber", "x", "isInteger", "isNegativeNumber", "isPositiveNumber", "isZeroNumber", "isNaNNumber", "n1", "init_utils", "__esmMin", "init_number", "init_number", "__esmMin", "init_arithmetic", "init_bitwise", "init_combinations", "init_constants", "init_logical", "init_relational", "init_probability", "init_trigonometry", "init_utils", "formatBigNumberToBase", "n", "base", "size", "BigNumberCtor", "big2", "suffix", "isInteger", "format", "value", "options", "notation", "precision", "wordSize", "toFixed", "toExponential", "toEngineering", "lowerExp", "upperExp", "str", "rounded", "exp", "digits", "e", "newExp", "valueWithoutExp", "valueStr", "init_formatter", "__esmMin", "init_number", "format", "value", "options", "result", "_format", "isBigNumber", "looksLikeFraction", "formatArray", "isString", "entries", "key", "stringify", "text", "escaped", "i", "c", "escape", "array", "str", "len", "compareText", "x", "y", "typeOf", "init_string", "__esmMin", "init_is", "init_number", "init_formatter", "IndexError", "index", "min", "max", "init_IndexError", "__esmMin", "arraySize", "x", "s", "flatten", "array", "flat", "callback", "value", "map", "forEach", "filter", "filterRegExp", "regexp", "entry", "join", "separator", "init_array", "__esmMin", "factory", "name", "dependencies", "create", "meta", "assertAndCreate", "scope", "deps", "pickShallow", "stripOptionalNotation", "assertDependencies", "allDefined", "dependency", "isOptionalDependency", "missingDependencies", "d", "init_factory", "__esmMin", "init_object", "noBignumber", "noFraction", "noMatrix", "noIndex", "noSubset", "init_noop", "__esmMin", "require_typed_function", "__commonJSMin", "exports", "module", "root", "factory", "ok", "notOk", "undef", "create", "_types", "x", "anyType", "_ignore", "_conversions", "typed", "findTypeByName", "typeName", "entry", "findInArray", "hint", "findTypeIndex", "type", "findTypeName", "value", "find", "fn", "signature", "arr", "i", "str", "match", "convert", "from", "conversion", "stringifyParams", "params", "param", "typeNames", "getTypeName", "parseParam", "conversions", "restParam", "types", "trim", "notEmpty", "notIgnore", "matchingConversions", "filterConversions", "exactTypes", "convertibleTypes", "parseSignature", "index", "array", "parsedParam", "isInvalidParam", "hasRestParam", "last", "hasConversions", "compileTest", "test0", "test1", "tests", "compileTests", "initial", "varIndex", "lastTest", "testRestParam", "args", "getParamAtIndex", "getExpectedTypeNames", "excludeConversions", "isExactType", "mergeExpectedParams", "signatures", "uniq", "flatMap", "createError", "name", "err", "expected", "_name", "matchingSignatures", "nextMatchingDefs", "test", "actualType", "lengths", "maxLength", "getLowestTypeIndex", "min", "getLowestConversionIndex", "compareParams", "param1", "param2", "c", "compareSignatures", "signature1", "signature2", "len", "matches", "compileArgsPreprocessing", "fnConvert", "compiledConversions", "compileArgConversion", "fnPreprocess", "offset", "slice", "conversion0", "conversion1", "arg", "createSignaturesMap", "signaturesMap", "splitParams", "ignoreConversionTypes", "_splitParams", "filteredTypes", "typeGroups", "typeGroup", "splittedParams", "typeIndex", "hasConflictingParams", "ii", "typesNames1", "typesNames2", "hasOverlap", "len1", "len2", "restParam1", "restParam2", "createTypedFunction", "parsedSignatures", "notNull", "parsedSignature", "conflictingSignature", "s", "ok0", "ok1", "ok2", "ok3", "ok4", "ok5", "allOk", "test00", "test10", "test20", "test30", "test40", "test50", "test01", "test11", "test21", "test31", "test41", "test51", "fns", "fn0", "fn1", "fn2", "fn3", "fn4", "fn5", "len0", "len3", "len4", "len5", "iStart", "iEnd", "generic", "arg0", "arg1", "_onMismatch", "start", "end", "contains", "item", "array1", "array2", "entries", "callback", "getName", "extractSignatures", "validateUnique", "_signature", "_fn", "beforeObjectTest", "getSafeProperty", "object", "prop", "isPlainObject", "isSafeProperty", "isSafeMethod", "setSafeProperty", "value", "hasSafeProperty", "hasOwnProperty", "safeNativeProperties", "validateSafeMethod", "method", "safeNativeMethods", "init_customs", "__esmMin", "init_object", "createEmptyMap", "createMap", "mapOrObject", "isMap", "isObject", "ObjectWrappingMap", "toObject", "map", "object", "key", "value", "setSafeProperty", "assign", "_len", "objects", "_key", "args", "_key2", "init_map", "__esmMin", "init_customs", "init_is", "getSafeProperty", "hasSafeProperty", "throwNoBignumber", "x", "throwNoComplex", "throwNoMatrix", "throwNoFraction", "import_typed_function", "_createTyped2", "dependencies", "createTyped", "init_typed", "__esmMin", "init_is", "init_number", "init_factory", "init_map", "typedFunction", "factory", "_ref", "BigNumber", "Complex", "DenseMatrix", "Fraction", "typed", "isNumber", "isComplex", "isBigNumber", "isFraction", "isUnit", "isString", "isChain", "isArray", "isMatrix", "isDenseMatrix", "isSparseMatrix", "isRange", "isIndex", "isBoolean", "isResultSet", "isHelp", "isFunction", "isDate", "isRegExp", "isNull", "isUndefined", "isAccessorNode", "isArrayNode", "isAssignmentNode", "isBlockNode", "isConditionalNode", "isConstantNode", "isFunctionNode", "isFunctionAssignmentNode", "isIndexNode", "isNode", "isObjectNode", "isOperatorNode", "isParenthesisNode", "isRangeNode", "isSymbolNode", "isMap", "isObject", "digits", "f", "n", "array", "matrix", "name", "dependencies", "createResultSet", "init_ResultSet", "__esmMin", "init_factory", "factory", "ResultSet", "entries", "json", "name", "dependencies", "createRangeClass", "init_Range", "__esmMin", "init_is", "init_number", "init_factory", "factory", "Range", "start", "end", "step", "hasStart", "hasEnd", "hasStep", "isBigNumber", "str", "args", "nums", "arg", "invalid", "num", "len", "diff", "sign", "size", "callback", "x", "i", "array", "value", "index", "obj", "options", "format", "json", "name", "dependencies", "createHelpClass", "init_Help", "__esmMin", "init_is", "init_object", "init_string", "init_factory", "factory", "_ref", "parse", "Help", "doc", "desc", "scope", "i", "expr", "res", "e", "isHelp", "format", "obj", "clone", "json", "prop", "name", "dependencies", "createChainClass", "init_Chain", "__esmMin", "init_is", "init_string", "init_object", "init_factory", "factory", "_ref", "on", "math", "Chain", "value", "isChain", "format", "json", "createProxy", "fn", "chainify", "createLazyProxy", "resolver", "lazy", "args", "i", "arg0", "arg1", "_loop", "_name", "hasOwnProperty", "excludedNames", "path", "eDocs", "init_e", "__esmMin", "falseDocs", "init_false", "__esmMin", "iDocs", "init_i", "__esmMin", "InfinityDocs", "init_Infinity", "__esmMin", "LN10Docs", "init_LN10", "__esmMin", "LN2Docs", "init_LN2", "__esmMin", "LOG10EDocs", "init_LOG10E", "__esmMin", "LOG2EDocs", "init_LOG2E", "__esmMin", "NaNDocs", "init_NaN", "__esmMin", "nullDocs", "init_null", "__esmMin", "phiDocs", "init_phi", "__esmMin", "piDocs", "init_pi", "__esmMin", "SQRT12Docs", "init_SQRT1_2", "__esmMin", "SQRT2Docs", "init_SQRT2", "__esmMin", "tauDocs", "init_tau", "__esmMin", "trueDocs", "init_true", "__esmMin", "versionDocs", "init_version", "__esmMin", "bignumberDocs", "init_bignumber", "__esmMin", "booleanDocs", "init_boolean", "__esmMin", "complexDocs", "init_complex", "__esmMin", "createUnitDocs", "init_createUnit", "__esmMin", "fractionDocs", "init_fraction", "__esmMin", "indexDocs", "init_construction", "__esmMin", "matrixDocs", "init_matrix", "__esmMin", "numberDocs", "init_number", "__esmMin", "sparseDocs", "init_sparse", "__esmMin", "splitUnitDocs", "init_splitUnit", "__esmMin", "stringDocs", "init_string", "__esmMin", "unitDocs", "init_unit", "__esmMin", "configDocs", "init_config", "__esmMin", "importDocs", "init_import", "__esmMin", "typedDocs", "init_typed", "__esmMin", "derivativeDocs", "init_derivative", "__esmMin", "leafCountDocs", "init_leafCount", "__esmMin", "lsolveDocs", "init_lsolve", "__esmMin", "lsolveAllDocs", "init_lsolveAll", "__esmMin", "lupDocs", "init_lup", "__esmMin", "lusolveDocs", "init_lusolve", "__esmMin", "qrDocs", "init_qr", "__esmMin", "rationalizeDocs", "init_rationalize", "__esmMin", "resolveDocs", "init_resolve", "__esmMin", "simplifyDocs", "init_simplify", "__esmMin", "simplifyCoreDocs", "init_simplifyCore", "__esmMin", "sluDocs", "init_slu", "__esmMin", "symbolicEqualDocs", "init_symbolicEqual", "__esmMin", "usolveDocs", "init_usolve", "__esmMin", "usolveAllDocs", "init_usolveAll", "__esmMin", "absDocs", "init_abs", "__esmMin", "addDocs", "init_add", "__esmMin", "cbrtDocs", "init_cbrt", "__esmMin", "ceilDocs", "init_ceil", "__esmMin", "cubeDocs", "init_cube", "__esmMin", "divideDocs", "init_divide", "__esmMin", "dotDivideDocs", "init_dotDivide", "__esmMin", "dotMultiplyDocs", "init_dotMultiply", "__esmMin", "dotPowDocs", "init_dotPow", "__esmMin", "expDocs", "init_exp", "__esmMin", "expmDocs", "init_expm", "__esmMin", "expm1Docs", "init_expm1", "__esmMin", "fixDocs", "init_fix", "__esmMin", "floorDocs", "init_floor", "__esmMin", "gcdDocs", "init_gcd", "__esmMin", "hypotDocs", "init_hypot", "__esmMin", "invmodDocs", "init_invmod", "__esmMin", "lcmDocs", "init_lcm", "__esmMin", "logDocs", "init_log", "__esmMin", "log10Docs", "init_log10", "__esmMin", "log1pDocs", "init_log1p", "__esmMin", "log2Docs", "init_log2", "__esmMin", "modDocs", "init_mod", "__esmMin", "multiplyDocs", "init_multiply", "__esmMin", "normDocs", "init_norm", "__esmMin", "nthRootDocs", "init_nthRoot", "__esmMin", "nthRootsDocs", "init_nthRoots", "__esmMin", "powDocs", "init_pow", "__esmMin", "roundDocs", "init_round", "__esmMin", "signDocs", "init_sign", "__esmMin", "sqrtDocs", "init_sqrt", "__esmMin", "sqrtmDocs", "init_sqrtm", "__esmMin", "squareDocs", "init_square", "__esmMin", "subtractDocs", "init_subtract", "__esmMin", "unaryMinusDocs", "init_unaryMinus", "__esmMin", "unaryPlusDocs", "init_unaryPlus", "__esmMin", "xgcdDocs", "init_xgcd", "__esmMin", "bitAndDocs", "init_bitAnd", "__esmMin", "bitNotDocs", "init_bitNot", "__esmMin", "bitOrDocs", "init_bitOr", "__esmMin", "bitXorDocs", "init_bitXor", "__esmMin", "leftShiftDocs", "init_leftShift", "__esmMin", "rightArithShiftDocs", "init_rightArithShift", "__esmMin", "rightLogShiftDocs", "init_rightLogShift", "__esmMin", "bellNumbersDocs", "init_bellNumbers", "__esmMin", "catalanDocs", "init_catalan", "__esmMin", "compositionDocs", "init_composition", "__esmMin", "stirlingS2Docs", "init_stirlingS2", "__esmMin", "argDocs", "init_arg", "__esmMin", "conjDocs", "init_conj", "__esmMin", "imDocs", "init_im", "__esmMin", "reDocs", "init_re", "__esmMin", "evaluateDocs", "init_evaluate", "__esmMin", "helpDocs", "init_help", "__esmMin", "distanceDocs", "init_distance", "__esmMin", "intersectDocs", "init_intersect", "__esmMin", "andDocs", "init_and", "__esmMin", "notDocs", "init_not", "__esmMin", "orDocs", "init_or", "__esmMin", "xorDocs", "init_xor", "__esmMin", "columnDocs", "init_column", "__esmMin", "concatDocs", "init_concat", "__esmMin", "countDocs", "init_count", "__esmMin", "crossDocs", "init_cross", "__esmMin", "ctransposeDocs", "init_ctranspose", "__esmMin", "detDocs", "init_det", "__esmMin", "diagDocs", "init_diag", "__esmMin", "diffDocs", "init_diff", "__esmMin", "dotDocs", "init_dot", "__esmMin", "eigsDocs", "init_eigs", "__esmMin", "filterDocs", "init_filter", "__esmMin", "flattenDocs", "init_flatten", "__esmMin", "forEachDocs", "init_forEach", "__esmMin", "getMatrixDataTypeDocs", "init_getMatrixDataType", "__esmMin", "identityDocs", "init_identity", "__esmMin", "invDocs", "init_inv", "__esmMin", "pinvDocs", "init_pinv", "__esmMin", "kronDocs", "init_kron", "__esmMin", "mapDocs", "init_map", "__esmMin", "matrixFromColumnsDocs", "init_matrixFromColumns", "__esmMin", "matrixFromFunctionDocs", "init_matrixFromFunction", "__esmMin", "matrixFromRowsDocs", "init_matrixFromRows", "__esmMin", "onesDocs", "init_ones", "__esmMin", "partitionSelectDocs", "init_partitionSelect", "__esmMin", "rangeDocs", "init_range", "__esmMin", "reshapeDocs", "init_reshape", "__esmMin", "resizeDocs", "init_resize", "__esmMin", "rotateDocs", "init_rotate", "__esmMin", "rotationMatrixDocs", "init_rotationMatrix", "__esmMin", "rowDocs", "init_row", "__esmMin", "sizeDocs", "init_size", "__esmMin", "sortDocs", "init_sort", "__esmMin", "squeezeDocs", "init_squeeze", "__esmMin", "subsetDocs", "init_subset", "__esmMin", "traceDocs", "init_trace", "__esmMin", "transposeDocs", "init_transpose", "__esmMin", "zerosDocs", "init_zeros", "__esmMin", "fftDocs", "init_fft", "__esmMin", "ifftDocs", "init_ifft", "__esmMin", "combinationsDocs", "init_combinations", "__esmMin", "combinationsWithRepDocs", "init_combinationsWithRep", "__esmMin", "factorialDocs", "init_factorial", "__esmMin", "gammaDocs", "init_gamma", "__esmMin", "lgammaDocs", "init_lgamma", "__esmMin", "kldivergenceDocs", "init_kldivergence", "__esmMin", "multinomialDocs", "init_multinomial", "__esmMin", "permutationsDocs", "init_permutations", "__esmMin", "pickRandomDocs", "init_pickRandom", "__esmMin", "randomDocs", "init_random", "__esmMin", "randomIntDocs", "init_randomInt", "__esmMin", "compareDocs", "init_compare", "__esmMin", "compareNaturalDocs", "init_compareNatural", "__esmMin", "compareTextDocs", "init_compareText", "__esmMin", "deepEqualDocs", "init_deepEqual", "__esmMin", "equalDocs", "init_equal", "__esmMin", "equalTextDocs", "init_equalText", "__esmMin", "largerDocs", "init_larger", "__esmMin", "largerEqDocs", "init_largerEq", "__esmMin", "smallerDocs", "init_smaller", "__esmMin", "smallerEqDocs", "init_smallerEq", "__esmMin", "unequalDocs", "init_unequal", "__esmMin", "setCartesianDocs", "init_setCartesian", "__esmMin", "setDifferenceDocs", "init_setDifference", "__esmMin", "setDistinctDocs", "init_setDistinct", "__esmMin", "setIntersectDocs", "init_setIntersect", "__esmMin", "setIsSubsetDocs", "init_setIsSubset", "__esmMin", "setMultiplicityDocs", "init_setMultiplicity", "__esmMin", "setPowersetDocs", "init_setPowerset", "__esmMin", "setSizeDocs", "init_setSize", "__esmMin", "setSymDifferenceDocs", "init_setSymDifference", "__esmMin", "setUnionDocs", "init_setUnion", "__esmMin", "erfDocs", "init_erf", "__esmMin", "madDocs", "init_mad", "__esmMin", "maxDocs", "init_max", "__esmMin", "meanDocs", "init_mean", "__esmMin", "medianDocs", "init_median", "__esmMin", "minDocs", "init_min", "__esmMin", "modeDocs", "init_mode", "__esmMin", "prodDocs", "init_prod", "__esmMin", "quantileSeqDocs", "init_quantileSeq", "__esmMin", "stdDocs", "init_std", "__esmMin", "cumSumDocs", "init_cumsum", "__esmMin", "sumDocs", "init_sum", "__esmMin", "varianceDocs", "init_variance", "__esmMin", "acosDocs", "init_acos", "__esmMin", "acoshDocs", "init_acosh", "__esmMin", "acotDocs", "init_acot", "__esmMin", "acothDocs", "init_acoth", "__esmMin", "acscDocs", "init_acsc", "__esmMin", "acschDocs", "init_acsch", "__esmMin", "asecDocs", "init_asec", "__esmMin", "asechDocs", "init_asech", "__esmMin", "asinDocs", "init_asin", "__esmMin", "asinhDocs", "init_asinh", "__esmMin", "atanDocs", "init_atan", "__esmMin", "atan2Docs", "init_atan2", "__esmMin", "atanhDocs", "init_atanh", "__esmMin", "cosDocs", "init_cos", "__esmMin", "coshDocs", "init_cosh", "__esmMin", "cotDocs", "init_cot", "__esmMin", "cothDocs", "init_coth", "__esmMin", "cscDocs", "init_csc", "__esmMin", "cschDocs", "init_csch", "__esmMin", "secDocs", "init_sec", "__esmMin", "sechDocs", "init_sech", "__esmMin", "sinDocs", "init_sin", "__esmMin", "sinhDocs", "init_sinh", "__esmMin", "tanDocs", "init_tan", "__esmMin", "tanhDocs", "init_tanh", "__esmMin", "toDocs", "init_to", "__esmMin", "binDocs", "init_bin", "__esmMin", "cloneDocs", "init_clone", "__esmMin", "formatDocs", "init_format", "__esmMin", "hasNumericValueDocs", "init_hasNumericValue", "__esmMin", "hexDocs", "init_hex", "__esmMin", "isIntegerDocs", "init_isInteger", "__esmMin", "isNaNDocs", "init_isNaN", "__esmMin", "isNegativeDocs", "init_isNegative", "__esmMin", "isNumericDocs", "init_isNumeric", "__esmMin", "isPositiveDocs", "init_isPositive", "__esmMin", "isPrimeDocs", "init_isPrime", "__esmMin", "isZeroDocs", "init_isZero", "__esmMin", "numericDocs", "init_numeric", "__esmMin", "octDocs", "init_oct", "__esmMin", "printDocs", "init_print", "__esmMin", "typeOfDocs", "init_typeOf", "__esmMin", "embeddedDocs", "init_embeddedDocs", "__esmMin", "init_e", "init_false", "init_i", "init_Infinity", "init_LN10", "init_LN2", "init_LOG10E", "init_LOG2E", "init_NaN", "init_null", "init_phi", "init_pi", "init_SQRT1_2", "init_SQRT2", "init_tau", "init_true", "init_version", "init_bignumber", "init_boolean", "init_complex", "init_createUnit", "init_fraction", "init_construction", "init_matrix", "init_number", "init_sparse", "init_splitUnit", "init_string", "init_unit", "init_config", "init_import", "init_typed", "init_derivative", "init_leafCount", "init_lsolve", "init_lsolveAll", "init_lup", "init_lusolve", "init_qr", "init_rationalize", "init_resolve", "init_simplify", "init_simplifyCore", "init_slu", "init_symbolicEqual", "init_usolve", "init_usolveAll", "init_abs", "init_add", "init_cbrt", "init_ceil", "init_cube", "init_divide", "init_dotDivide", "init_dotMultiply", "init_dotPow", "init_exp", "init_expm", "init_expm1", "init_fix", "init_floor", "init_gcd", "init_hypot", "init_invmod", "init_lcm", "init_log", "init_log10", "init_log1p", "init_log2", "init_mod", "init_multiply", "init_norm", "init_nthRoot", "init_nthRoots", "init_pow", "init_round", "init_sign", "init_sqrt", "init_sqrtm", "init_square", "init_subtract", "init_unaryMinus", "init_unaryPlus", "init_xgcd", "init_bitAnd", "init_bitNot", "init_bitOr", "init_bitXor", "init_leftShift", "init_rightArithShift", "init_rightLogShift", "init_bellNumbers", "init_catalan", "init_composition", "init_stirlingS2", "init_arg", "init_conj", "init_im", "init_re", "init_evaluate", "init_help", "init_distance", "init_intersect", "init_and", "init_not", "init_or", "init_xor", "init_column", "init_concat", "init_count", "init_cross", "init_ctranspose", "init_det", "init_diag", "init_diff", "init_dot", "init_eigs", "init_filter", "init_flatten", "init_forEach", "init_getMatrixDataType", "init_identity", "init_inv", "init_pinv", "init_kron", "init_map", "init_matrixFromColumns", "init_matrixFromFunction", "init_matrixFromRows", "init_ones", "init_partitionSelect", "init_range", "init_reshape", "init_resize", "init_rotate", "init_rotationMatrix", "init_row", "init_size", "init_sort", "init_squeeze", "init_subset", "init_trace", "init_transpose", "init_zeros", "init_fft", "init_ifft", "init_combinations", "init_combinationsWithRep", "init_factorial", "init_gamma", "init_lgamma", "init_kldivergence", "init_multinomial", "init_permutations", "init_pickRandom", "init_random", "init_randomInt", "init_compare", "init_compareNatural", "init_compareText", "init_deepEqual", "init_equal", "init_equalText", "init_larger", "init_largerEq", "init_smaller", "init_smallerEq", "init_unequal", "init_setCartesian", "init_setDifference", "init_setDistinct", "init_setIntersect", "init_setIsSubset", "init_setMultiplicity", "init_setPowerset", "init_setSize", "init_setSymDifference", "init_setUnion", "init_erf", "init_mad", "init_max", "init_mean", "init_median", "init_min", "init_mode", "init_prod", "init_quantileSeq", "init_std", "init_cumsum", "init_sum", "init_variance", "init_acos", "init_acosh", "init_acot", "init_acoth", "init_acsc", "init_acsch", "init_asec", "init_asech", "init_asin", "init_asinh", "init_atan", "init_atan2", "init_atanh", "init_cos", "init_cosh", "init_cot", "init_coth", "init_csc", "init_csch", "init_sec", "init_sech", "init_sin", "init_sinh", "init_tan", "init_tanh", "init_to", "init_bin", "init_clone", "init_format", "init_hasNumericValue", "init_hex", "init_isInteger", "init_isNaN", "init_isNegative", "init_isNumeric", "init_isPositive", "init_isPrime", "init_isZero", "init_numeric", "init_oct", "init_print", "init_typeOf", "bignumberDocs", "booleanDocs", "complexDocs", "createUnitDocs", "fractionDocs", "indexDocs", "matrixDocs", "numberDocs", "sparseDocs", "splitUnitDocs", "stringDocs", "unitDocs", "eDocs", "falseDocs", "iDocs", "InfinityDocs", "LN2Docs", "LN10Docs", "LOG2EDocs", "LOG10EDocs", "NaNDocs", "nullDocs", "piDocs", "phiDocs", "SQRT12Docs", "SQRT2Docs", "tauDocs", "trueDocs", "versionDocs", "derivativeDocs", "lsolveDocs", "lsolveAllDocs", "lupDocs", "lusolveDocs", "leafCountDocs", "resolveDocs", "simplifyDocs", "simplifyCoreDocs", "symbolicEqualDocs", "rationalizeDocs", "sluDocs", "usolveDocs", "usolveAllDocs", "qrDocs", "absDocs", "addDocs", "cbrtDocs", "ceilDocs", "cubeDocs", "divideDocs", "dotDivideDocs", "dotMultiplyDocs", "dotPowDocs", "expDocs", "expmDocs", "expm1Docs", "fixDocs", "floorDocs", "gcdDocs", "hypotDocs", "lcmDocs", "logDocs", "log2Docs", "log1pDocs", "log10Docs", "modDocs", "multiplyDocs", "normDocs", "nthRootDocs", "nthRootsDocs", "powDocs", "roundDocs", "signDocs", "sqrtDocs", "sqrtmDocs", "squareDocs", "subtractDocs", "unaryMinusDocs", "unaryPlusDocs", "xgcdDocs", "invmodDocs", "bitAndDocs", "bitNotDocs", "bitOrDocs", "bitXorDocs", "leftShiftDocs", "rightArithShiftDocs", "rightLogShiftDocs", "bellNumbersDocs", "catalanDocs", "compositionDocs", "stirlingS2Docs", "configDocs", "importDocs", "typedDocs", "argDocs", "conjDocs", "reDocs", "imDocs", "evaluateDocs", "helpDocs", "distanceDocs", "intersectDocs", "andDocs", "notDocs", "orDocs", "xorDocs", "concatDocs", "countDocs", "crossDocs", "columnDocs", "ctransposeDocs", "detDocs", "diagDocs", "diffDocs", "dotDocs", "getMatrixDataTypeDocs", "identityDocs", "filterDocs", "flattenDocs", "forEachDocs", "invDocs", "pinvDocs", "eigsDocs", "kronDocs", "matrixFromFunctionDocs", "matrixFromRowsDocs", "matrixFromColumnsDocs", "mapDocs", "onesDocs", "partitionSelectDocs", "rangeDocs", "resizeDocs", "reshapeDocs", "rotateDocs", "rotationMatrixDocs", "rowDocs", "sizeDocs", "sortDocs", "squeezeDocs", "subsetDocs", "traceDocs", "transposeDocs", "zerosDocs", "fftDocs", "ifftDocs", "combinationsDocs", "combinationsWithRepDocs", "factorialDocs", "gammaDocs", "kldivergenceDocs", "lgammaDocs", "multinomialDocs", "permutationsDocs", "pickRandomDocs", "randomDocs", "randomIntDocs", "compareDocs", "compareNaturalDocs", "compareTextDocs", "deepEqualDocs", "equalDocs", "equalTextDocs", "largerDocs", "largerEqDocs", "smallerDocs", "smallerEqDocs", "unequalDocs", "setCartesianDocs", "setDifferenceDocs", "setDistinctDocs", "setIntersectDocs", "setIsSubsetDocs", "setMultiplicityDocs", "setPowersetDocs", "setSizeDocs", "setSymDifferenceDocs", "setUnionDocs", "erfDocs", "cumSumDocs", "madDocs", "maxDocs", "meanDocs", "medianDocs", "minDocs", "modeDocs", "prodDocs", "quantileSeqDocs", "stdDocs", "sumDocs", "varianceDocs", "acosDocs", "acoshDocs", "acotDocs", "acothDocs", "acscDocs", "acschDocs", "asecDocs", "asechDocs", "asinDocs", "asinhDocs", "atanDocs", "atanhDocs", "atan2Docs", "cosDocs", "coshDocs", "cotDocs", "cothDocs", "cscDocs", "cschDocs", "secDocs", "sechDocs", "sinDocs", "sinhDocs", "tanDocs", "tanhDocs", "toDocs", "cloneDocs", "formatDocs", "binDocs", "octDocs", "hexDocs", "isNaNDocs", "isIntegerDocs", "isNegativeDocs", "isNumericDocs", "hasNumericValueDocs", "isPositiveDocs", "isPrimeDocs", "isZeroDocs", "printDocs", "typeOfDocs", "numericDocs", "name", "dependencies", "createHelp", "init_help", "__esmMin", "init_factory", "init_customs", "init_embeddedDocs", "init_object", "factory", "_ref", "typed", "mathWithTransform", "Help", "search", "prop", "searchName", "hasOwnProperty", "doc", "getSafeProperty", "embeddedDocs", "searchText", "name", "dependencies", "createChain", "init_chain", "__esmMin", "init_factory", "factory", "_ref", "typed", "Chain", "value", "name", "dependencies", "createResolve", "init_resolve", "__esmMin", "init_map", "init_is", "init_factory", "factory", "_ref", "parse", "ConstantNode", "FunctionNode", "OperatorNode", "ParenthesisNode", "resolve", "node", "scope", "within", "isMap", "createMap", "isSymbolNode", "variables", "value", "isNode", "nextWithin", "isOperatorNode", "args", "arg", "isParenthesisNode", "isFunctionNode", "_args", "child", "_typeof", "o", "init_typeof", "__esmMin", "toPrimitive", "t", "r", "_typeof", "e", "i", "init_toPrimitive", "__esmMin", "init_typeof", "toPropertyKey", "t", "i", "toPrimitive", "_typeof", "init_toPropertyKey", "__esmMin", "init_typeof", "init_toPrimitive", "_defineProperty", "e", "r", "toPropertyKey", "init_defineProperty", "__esmMin", "init_toPropertyKey", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread", "target", "i", "source", "key", "_defineProperty", "name", "dependencies", "createUtil", "init_util", "__esmMin", "init_defineProperty", "init_is", "init_factory", "init_object", "factory", "_ref", "FunctionNode", "OperatorNode", "SymbolNode", "T", "F", "defaultName", "defaultContext", "realContext", "positiveContext", "hasProperty", "nodeOrName", "property", "context", "isOperatorNode", "isFunctionNode", "isParenthesisNode", "hasOwnProperty", "properties", "_properties", "_properties2", "isCommutative", "node", "isAssociative", "mergeContext", "primary", "secondary", "merged", "prop", "flatten", "allChildren", "op", "children", "findChildren", "child", "unflattenr", "makeNode", "createMakeNodeFunction", "l", "curnode", "unflattenl", "args", "err", "name", "dependencies", "createSimplifyConstant", "init_simplifyConstant", "__esmMin", "init_is", "init_factory", "init_util", "init_noop", "factory", "_ref", "typed", "config", "mathWithTransform", "matrix", "fraction", "bignumber", "AccessorNode", "ArrayNode", "ConstantNode", "FunctionNode", "IndexNode", "ObjectNode", "OperatorNode", "SymbolNode", "isCommutative", "isAssociative", "allChildren", "createMakeNodeFunction", "createUtil", "simplifyConstant", "expr", "options", "_ensureNode", "foldFraction", "_removeFractions", "thing", "isFraction", "isMatrix", "_eval", "fnname", "args", "_toNumber", "_toNode", "_fractionToNode", "n", "unaryMinusNode", "s", "m", "e", "isNode", "_exactFraction", "exactFractions", "f", "fractionsLimit", "noBignumber", "noFraction", "vn", "_foldAccessor", "obj", "index", "isIndexNode", "isArrayNode", "remainingDims", "isConstantNode", "first", "second", "tryItems", "fromItems", "item", "isObjectNode", "key", "foldOp", "fn", "makeNode", "a", "b", "node", "operatorFunctions", "arg", "sz", "section", "_args", "res", "isOperatorNode", "consts", "vars", "i", "foldItems", "foldProps", "prop", "name", "dependencies", "createSimplify", "init_simplify", "__esmMin", "init_is", "init_factory", "init_util", "init_simplifyConstant", "init_object", "init_map", "factory", "_ref", "config", "typed", "parse", "add", "subtract", "multiply", "divide", "pow", "isZero", "equal", "resolve", "simplifyCore", "fraction", "bignumber", "mathWithTransform", "matrix", "AccessorNode", "ArrayNode", "ConstantNode", "FunctionNode", "IndexNode", "ObjectNode", "OperatorNode", "ParenthesisNode", "SymbolNode", "simplifyConstant", "createSimplifyConstant", "hasProperty", "isCommutative", "isAssociative", "mergeContext", "flatten", "unflattenr", "unflattenl", "createMakeNodeFunction", "defaultContext", "realContext", "positiveContext", "createUtil", "simplify", "expr", "createEmptyMap", "scope", "options", "rules", "createMap", "debug", "_buildRules", "res", "removeParens", "visited", "str", "_lastsym", "laststr", "i", "rulestr", "applyRule", "newstr", "node", "path", "parent", "isParenthesisNode", "SUPPORTED_CONSTANTS", "_canonicalizeRule", "ruleObject", "context", "newRule", "lr", "prop", "makeNode", "expandsym", "_getExpandPlaceholderSymbol", "ruleSet", "rule", "ruleType", "mapRule", "nodes", "resNodes", "newNode", "symbol", "property", "mergedContext", "newArgs", "newContent", "newItems", "newObj", "newIndex", "newDims", "changed", "newProps", "repl", "matches", "_ruleMatch", "implicit", "hasOwnProperty", "getSplits", "right", "rightArgs", "_i", "left", "mergeMatch", "match1", "match2", "key", "_exactMatch", "_key", "combineChildMatches", "list1", "list2", "merged", "i1", "i2", "mergeChildMatches", "childMatches", "sets", "uniqueSets", "unique", "s", "isSplit", "childMatch", "leftMatch", "rightMatch", "splits", "splitMatches", "_i2", "matchSet", "isConstantNode", "p", "q", "name", "dependencies", "createSimplifyCore", "init_simplifyCore", "__esmMin", "init_is", "init_util", "init_factory", "factory", "_ref", "equal", "isZero", "add", "subtract", "multiply", "divide", "pow", "AccessorNode", "ArrayNode", "ConstantNode", "FunctionNode", "IndexNode", "ObjectNode", "OperatorNode", "ParenthesisNode", "SymbolNode", "node0", "node1", "hasProperty", "isCommutative", "createUtil", "simplifyCore", "node", "options", "context", "isFunctionNode", "simpChild", "childCount", "c", "isOperatorNode", "a0", "_a", "a1", "isConstantNode", "a00", "a00a1", "a01", "n", "isArrayNode", "isAccessorNode", "isIndexNode", "isObjectNode", "newProps", "prop", "name", "dependencies", "createDerivative", "init_derivative", "__esmMin", "init_is", "init_factory", "factory", "_ref", "typed", "config", "parse", "simplify", "equal", "isZero", "numeric", "ConstantNode", "FunctionNode", "OperatorNode", "ParenthesisNode", "SymbolNode", "derivative", "expr", "variable", "options", "constNodes", "constTag", "res", "_derivative", "deriv", "_derivTex", "x", "isConstantNode", "typeOf", "order", "d", "node", "varName", "isConst", "i", "createConstantNode", "funcArgsCheck", "arg0", "arg1", "div", "negative", "funcDerivative", "op", "func", "chainDerivative", "arg", "constantTerms", "nonConstantTerms", "nonConstantNode", "newArgs", "argOuter", "argInner", "_arg", "_arg2", "powMinusOne", "value", "valueType", "name", "dependencies", "createRationalize", "init_rationalize", "__esmMin", "init_number", "init_factory", "init_simplifyConstant", "factory", "_ref", "config", "typed", "equal", "isZero", "add", "subtract", "multiply", "divide", "pow", "parse", "simplifyCore", "simplify", "fraction", "bignumber", "mathWithTransform", "matrix", "AccessorNode", "ArrayNode", "ConstantNode", "FunctionNode", "IndexNode", "ObjectNode", "OperatorNode", "SymbolNode", "ParenthesisNode", "simplifyConstant", "createSimplifyConstant", "expr", "detailed", "scope", "setRules", "rulesRationalize", "polyRet", "polynomial", "nVars", "noExactFractions", "withExactFractions", "expandPower", "sBefore", "rules", "eDistrDiv", "redoInic", "s", "coefficients", "retRationalize", "polyToCanonical", "extended", "variables", "node", "oper", "recPoly", "retFunc", "tp", "isInteger", "i", "_name", "pos", "oldRules", "rulesFirst", "rulesDistrDiv", "rulesSucDiv", "parent", "indParent", "internal", "does", "val", "nEsqTopo", "nDirTopo", "o", "maxExpo", "varname", "recurPol", "first", "no", "n1", "op", "n2", "n3", "noPai", "_i", "valor", "_i2", "digitsToString", "d", "i", "k", "ws", "indexOfLastWord", "str", "w", "LOG_BASE", "getZeroString", "checkInt32", "min", "max", "invalidArgument", "checkRoundingDigits", "rm", "repeating", "di", "r", "rd", "mathpow", "convertBase", "baseIn", "baseOut", "j", "arr", "arrL", "strL", "NUMERALS", "cosine", "Ctor", "x", "len", "y", "tinyPow", "taylorSeries", "cos2x", "finalise", "sd", "isTruncated", "digits", "roundUp", "xd", "xdi", "out", "BASE", "external", "finiteToString", "isExp", "nonFiniteToString", "e", "getBase10Exponent", "getLn10", "pr", "LN10_PRECISION", "precisionLimitExceeded", "LN10", "getPi", "PI_PRECISION", "PI", "getPrecision", "zs", "intPow", "n", "truncate", "mathfloor", "isOdd", "maxOrMin", "args", "naturalExponential", "denominator", "guard", "pow", "sum", "t", "wpr", "rep", "divide", "naturalLogarithm", "c", "c0", "numerator", "x1", "x2", "parseDecimal", "parseOther", "base", "divisor", "isFloat", "p", "xe", "isDecimal", "isHex", "isBinary", "isOctal", "Decimal", "sine", "sin2_x", "d5", "d16", "d20", "isHyperbolic", "u", "b", "toLessThanHalfPi", "isNeg", "pi", "halfPi", "quadrant", "toStringBinary", "MAX_DIGITS", "inexact", "abs", "acos", "acosh", "add", "asin", "asinh", "atan", "atanh", "atan2", "cbrt", "ceil", "clamp", "config", "obj", "decimalError", "v", "useDefaults", "ps", "EXP_LIMIT", "DEFAULTS", "cryptoUnavailable", "cos", "cosh", "clone", "isDecimalInstance", "P", "div", "exp", "floor", "hypot", "ln", "log", "log10", "log2", "mod", "mul", "random", "round", "sign", "sin", "sinh", "sqrt", "sub", "tan", "tanh", "trunc", "tag", "MAX_SAFE_INTEGER", "init_decimal", "__esmMin", "xdL", "ydL", "yd", "xs", "ys", "m", "s", "t3", "t3plusx", "one", "cosh2_x", "d8", "sinh2_x", "xsd", "px", "isBase10", "inf", "num", "arg", "xLTy", "q", "carry", "z", "rL", "dp", "maxD", "d0", "d1", "d2", "n0", "n1", "yn", "multiplyInteger", "temp", "compare", "a", "aL", "bL", "subtract", "cmp", "logBase", "more", "prod", "prodL", "qd", "rem", "remL", "rem0", "xi", "xL", "yd0", "yL", "yz", "_switch", "mat", "I", "J", "i", "j", "ret", "tmp", "init_switch", "__esmMin", "containsCollections", "array", "i", "isCollection", "deepForEach", "callback", "isMatrix", "ii", "value", "deepMap", "skipZeros", "x", "reduce", "mat", "dim", "size", "arraySize", "IndexError", "_reduce", "ret", "val", "tran", "_switch", "init_collection", "__esmMin", "init_is", "init_IndexError", "init_array", "init_switch", "name", "createCeilNumber", "init_ceil", "__esmMin", "init_decimal", "init_factory", "init_number", "factory", "_ref", "typed", "config", "round", "x", "nearlyEqual", "n", "number", "exponent", "result", "name", "createFixNumber", "init_fix", "__esmMin", "init_factory", "factory", "_ref", "typed", "ceil", "floor", "x", "n", "name", "createFloorNumber", "init_floor", "__esmMin", "init_decimal", "init_factory", "init_number", "factory", "_ref", "typed", "config", "round", "x", "nearlyEqual", "n", "number", "exponent", "result", "name", "dependencies", "createHypot", "init_hypot", "__esmMin", "init_factory", "init_array", "factory", "_ref", "typed", "abs", "addScalar", "divideScalar", "multiplyScalar", "sqrt", "smaller", "isPositive", "_hypot", "x", "flatten", "args", "result", "largest", "i", "value", "name", "dependencies", "createStirlingS2", "init_stirlingS2", "__esmMin", "init_factory", "init_is", "factory", "_ref", "typed", "addScalar", "subtract", "multiplyScalar", "divideScalar", "pow", "factorial", "combinations", "isNegative", "isInteger", "number", "bignumber", "larger", "smallCache", "bigCache", "n", "k", "big", "isNumber", "cache", "make", "nn", "nk", "m", "row", "prev", "i", "name", "dependencies", "createBellNumbers", "init_bellNumbers", "__esmMin", "init_factory", "factory", "_ref", "typed", "addScalar", "isNegative", "isInteger", "stirlingS2", "n", "result", "i", "name", "dependencies", "createCatalan", "init_catalan", "__esmMin", "init_factory", "factory", "_ref", "typed", "addScalar", "divideScalar", "multiplyScalar", "combinations", "isNegative", "isInteger", "n", "name", "dependencies", "createComposition", "init_composition", "__esmMin", "init_factory", "factory", "_ref", "typed", "addScalar", "combinations", "isPositive", "isNegative", "isInteger", "larger", "n", "k", "version", "init_version", "__esmMin", "lruQueue", "limit", "size", "base", "queue", "map", "index", "del", "id", "oldIndex", "nuIndex", "init_lruQueue", "__esmMin", "memoize", "fn", "hasher", "limit", "lruQueue", "args", "i", "hash", "newVal", "maxArgumentCount", "signature", "count", "init_function", "__esmMin", "init_lruQueue", "hasher", "args", "createBigNumberE", "createBigNumberPhi", "createBigNumberPi", "createBigNumberTau", "init_constants", "__esmMin", "init_function", "memoize", "BigNumber", "recreateFactory", "name", "dependencies", "create", "factory", "createTrue", "createFalse", "createNull", "createInfinity", "createNaN", "createPi", "createTau", "createE", "createPhi", "createLN2", "createLN10", "createLOG2E", "createLOG10E", "createSQRT1_2", "createSQRT2", "createVersion", "init_constants", "__esmMin", "init_factory", "init_version", "init_number", "_ref", "config", "BigNumber", "_ref2", "_ref3", "createBigNumberPi", "pi", "_ref4", "createBigNumberTau", "tau", "_ref5", "createBigNumberE", "e", "_ref6", "createBigNumberPhi", "phi", "_ref7", "_ref8", "_ref9", "_ref10", "_ref11", "_ref12", "version", "getNonDecimalNumberParts", "input", "nonDecimalWithRadixMatch", "radix", "integerPart", "fractionalPart", "makeNumberFromNonDecimalParts", "parts", "n", "f", "i", "digitValue", "result", "name", "dependencies", "createNumber", "init_number", "__esmMin", "init_factory", "init_collection", "factory", "_ref", "typed", "number", "x", "nonDecimalNumberParts", "size", "wordSizeSuffixMatch", "num", "unit", "valuelessUnit", "deepMap", "json", "name", "dependencies", "createString", "init_string", "__esmMin", "init_factory", "init_collection", "init_number", "factory", "_ref", "typed", "format", "x", "deepMap", "name", "dependencies", "createBoolean", "init_boolean", "__esmMin", "init_factory", "init_collection", "factory", "_ref", "typed", "x", "lcase", "num", "deepMap", "name", "dependencies", "createParser", "init_parser", "__esmMin", "init_factory", "factory", "_ref", "typed", "Parser", "keywords", "init_keywords", "__esmMin", "name", "dependencies", "createNode", "init_Node", "__esmMin", "init_is", "init_keywords", "init_object", "init_factory", "init_map", "factory", "_ref", "mathWithTransform", "Node", "scope", "expr", "args", "context", "evaluate", "s", "createMap", "_validateScope", "math", "argNames", "callback", "node", "isNode", "_traverse", "child", "path", "parent", "_transform", "replacement", "nodes", "other", "deepStrictEqual", "options", "customString", "symbol", "keywords", "errorTransform", "err", "IndexError", "init_errorTransform", "__esmMin", "init_IndexError", "accessFactory", "_ref", "subset", "object", "index", "getSafeProperty", "err", "errorTransform", "init_access", "__esmMin", "init_errorTransform", "init_customs", "name", "dependencies", "createAccessorNode", "init_AccessorNode", "__esmMin", "init_is", "init_customs", "init_factory", "init_access", "factory", "_ref", "subset", "Node", "access", "accessFactory", "AccessorNode", "object", "index", "isNode", "isIndexNode", "math", "argNames", "evalObject", "evalIndex", "prop", "scope", "args", "context", "getSafeProperty", "callback", "options", "needParenthesis", "json", "node", "isAccessorNode", "isArrayNode", "isConstantNode", "isFunctionNode", "isObjectNode", "isParenthesisNode", "isSymbolNode", "name", "dependencies", "createArrayNode", "init_ArrayNode", "__esmMin", "init_is", "init_array", "init_factory", "factory", "_ref", "Node", "ArrayNode", "items", "isNode", "math", "argNames", "evalItems", "map", "item", "asMatrix", "matrix", "scope", "args", "context", "evalItem", "callback", "node", "i", "options", "json", "itemsToTex", "nested", "mixedItems", "isArrayNode", "itemsFormRow", "itemSep", "itemsTex", "assignFactory", "_ref", "subset", "matrix", "object", "index", "value", "setSafeProperty", "err", "errorTransform", "init_assign", "__esmMin", "init_errorTransform", "init_customs", "getPrecedence", "_node", "parenthesis", "node", "identifier", "properties", "getAssociativity", "index", "property", "hasOwnProperty", "isAssociativeWith", "nodeA", "nodeB", "a", "b", "identifierA", "identifierB", "i", "init_operators", "__esmMin", "init_object", "name", "dependencies", "createAssignmentNode", "init_AssignmentNode", "__esmMin", "init_is", "init_customs", "init_factory", "init_access", "init_assign", "init_operators", "factory", "_ref", "subset", "matrix", "Node", "access", "accessFactory", "assign", "assignFactory", "AssignmentNode", "object", "index", "value", "isSymbolNode", "isAccessorNode", "isIndexNode", "isNode", "math", "argNames", "evalObject", "evalIndex", "evalValue", "prop", "scope", "args", "context", "setSafeProperty", "childObject", "evalParentObject", "parentProp", "parent", "getSafeProperty", "evalParentIndex", "parentIndex", "callback", "needParenthesis", "node", "parenthesis", "precedence", "getPrecedence", "exprPrecedence", "options", "json", "name", "dependencies", "createBlockNode", "init_BlockNode", "__esmMin", "init_is", "init_array", "init_factory", "factory", "_ref", "ResultSet", "Node", "BlockNode", "blocks", "block", "node", "visible", "isNode", "math", "argNames", "evalBlocks", "map", "scope", "args", "context", "results", "forEach", "result", "callback", "i", "options", "param", "json", "name", "dependencies", "createConditionalNode", "init_ConditionalNode", "__esmMin", "init_is", "init_factory", "init_operators", "factory", "_ref", "Node", "ConditionalNode", "condition", "trueExpr", "falseExpr", "isNode", "math", "argNames", "evalCondition", "evalTrueExpr", "evalFalseExpr", "scope", "args", "context", "testCondition", "callback", "options", "parenthesis", "precedence", "getPrecedence", "conditionPrecedence", "truePrecedence", "falsePrecedence", "json", "isBigNumber", "isComplex", "isUnit", "typeOf", "require_dist", "__commonJSMin", "exports", "module", "_extends", "target", "i", "source", "key", "defaultEscapes", "formatEscapes", "defaultEscapeMapFn", "str", "_ref", "_ref$preserveFormatti", "preserveFormatting", "_ref$escapeMapFn", "escapeMapFn", "runningStr", "result", "escapes", "escapeKeys", "_loop", "specialCharFound", "index", "escapeLatex", "string", "escapeLatexLib", "toSymbol", "name", "isUnit", "hasOwnProperty", "latexUnits", "latexSymbols", "import_escape_latex", "latexOperators", "latexFunctions", "defaultTemplate", "init_latex", "__esmMin", "init_object", "node", "options", "name", "dependencies", "createConstantNode", "init_ConstantNode", "__esmMin", "init_string", "init_is", "init_latex", "init_factory", "factory", "_ref", "Node", "ConstantNode", "value", "math", "argNames", "callback", "options", "format", "typeOf", "json", "escapeLatex", "index", "name", "dependencies", "createFunctionAssignmentNode", "init_FunctionAssignmentNode", "__esmMin", "init_is", "init_keywords", "init_string", "init_array", "init_latex", "init_operators", "init_factory", "factory", "_ref", "typed", "Node", "FunctionAssignmentNode", "params", "expr", "isNode", "keywords", "param", "math", "argNames", "childArgNames", "forEach", "evalExpr", "signature", "join", "syntax", "scope", "args", "context", "signatures", "childArgs", "i", "fn", "callback", "needParenthesis", "node", "parenthesis", "precedence", "getPrecedence", "exprPrecedence", "options", "types", "index", "json", "escape", "toSymbol", "name", "dependencies", "createIndexNode", "init_IndexNode", "__esmMin", "init_array", "init_customs", "init_factory", "init_is", "init_string", "factory", "_ref", "Node", "size", "IndexNode", "dimensions", "dotNotation", "isNode", "math", "argNames", "evalDimensions", "map", "dimension", "i", "needsEnd", "node", "childArgNames", "_evalDimension", "scope", "args", "context", "isMatrix", "isArray", "isString", "typeOf", "s", "childArgs", "index", "getSafeProperty", "evalDimension", "callback", "isConstantNode", "options", "json", "escape", "range", "name", "dependencies", "createObjectNode", "init_ObjectNode", "__esmMin", "init_is", "init_string", "init_customs", "init_object", "init_factory", "factory", "_ref", "Node", "ObjectNode", "properties", "key", "isNode", "math", "argNames", "evalEntries", "hasOwnProperty", "stringifiedKey", "stringify", "parsedKey", "isSafeProperty", "scope", "args", "context", "obj", "_key", "callback", "options", "entries", "json", "escape", "name", "dependencies", "createOperatorNode", "init_OperatorNode", "__esmMin", "init_is", "init_array", "init_string", "init_customs", "init_operators", "init_latex", "init_factory", "factory", "_ref", "Node", "OperatorNode", "op", "fn", "args", "implicit", "isPercentage", "isNode", "math", "argNames", "isSafeMethod", "getSafeProperty", "evalArgs", "map", "arg", "evalArg0", "scope", "context", "_evalArg", "evalArg1", "evalArg", "callback", "i", "calculateNecessaryParentheses", "root", "parenthesis", "latex", "precedence", "getPrecedence", "associativity", "getAssociativity", "result", "operandPrecedence", "operandIdentifier", "rootIdentifier", "properties", "lhsParens", "lhsPrecedence", "assocWithLhs", "isAssociativeWith", "rhsParens", "rhsPrecedence", "assocWithRhs", "_rootIdentifier", "lhsIdentifier", "rhsIdentifier", "argPrecedence", "assocWithArg", "argAssociativity", "index", "isParenthesisNode", "options", "parens", "assoc", "operand", "opIsNamed", "lhs", "rhs", "stringifiedArgs", "json", "escape", "latexOperators", "lhsTex", "rhsTex", "texifiedArgs", "name", "dependencies", "createParenthesisNode", "init_ParenthesisNode", "__esmMin", "init_is", "init_factory", "factory", "_ref", "Node", "ParenthesisNode", "content", "isNode", "math", "argNames", "callback", "options", "json", "name", "dependencies", "createRangeNode", "init_RangeNode", "__esmMin", "init_is", "init_factory", "init_operators", "factory", "_ref", "Node", "RangeNode", "start", "end", "step", "isNode", "endSymbols", "node", "isSymbolNode", "math", "argNames", "range", "evalStart", "evalEnd", "evalStep", "scope", "args", "context", "callback", "calculateNecessaryParentheses", "parenthesis", "precedence", "getPrecedence", "parens", "startPrecedence", "stepPrecedence", "endPrecedence", "options", "str", "json", "name", "dependencies", "createRelationalNode", "init_RelationalNode", "__esmMin", "init_operators", "init_string", "init_customs", "init_latex", "init_factory", "factory", "_ref", "Node", "RelationalNode", "conditionals", "params", "math", "argNames", "self", "compiled", "p", "scope", "args", "context", "evalLhs", "evalRhs", "i", "condFn", "getSafeProperty", "callback", "n", "options", "parenthesis", "precedence", "getPrecedence", "paramStrings", "index", "paramPrecedence", "operatorMap", "ret", "json", "escape", "latexOperators", "name", "dependencies", "createSymbolNode", "init_SymbolNode", "__esmMin", "init_string", "init_customs", "init_factory", "init_latex", "factory", "_ref", "math", "Unit", "Node", "isValuelessUnit", "SymbolNode", "argNames", "scope", "args", "context", "getSafeProperty", "isUnit", "callback", "options", "escape", "json", "symbol", "toSymbol", "createSubScope", "parentScope", "_len", "args", "_key", "assign", "createEmptyMap", "init_scope", "__esmMin", "init_map", "name", "dependencies", "createFunctionNode", "init_FunctionNode", "__esmMin", "init_is", "init_string", "init_object", "init_customs", "init_scope", "init_factory", "init_latex", "factory", "_ref", "math", "Node", "SymbolNode", "FunctionNode", "fn", "args", "isNode", "strin", "entity", "format", "argNames", "evalArgs", "arg", "isSymbolNode", "_name", "_rawArgs", "scope", "context", "createSubScope", "values", "evalArg", "getSafeProperty", "isRaw", "resolveFn", "value", "rawArgs", "evalArg0", "evalArg1", "isAccessorNode", "isIndexNode", "evalObject", "prop", "_rawArgs2", "object", "validateSafeMethod", "fnExpr", "evalFn", "_rawArgs3", "callback", "i", "nodeToString", "options", "customString", "hasOwnProperty", "isFunctionAssignmentNode", "json", "escape", "expandTemplate", "template", "node", "latex", "regex", "inputPos", "match", "property", "index", "nodeToTex", "customTex", "latexConverter", "latexFunctions", "customToTex", "defaultTemplate", "name", "dependencies", "createParse", "init_parse", "__esmMin", "init_extends", "init_factory", "init_is", "init_collection", "init_object", "factory", "_ref", "typed", "numeric", "config", "AccessorNode", "ArrayNode", "AssignmentNode", "BlockNode", "ConditionalNode", "ConstantNode", "FunctionAssignmentNode", "FunctionNode", "IndexNode", "ObjectNode", "OperatorNode", "ParenthesisNode", "RangeNode", "RelationalNode", "SymbolNode", "parse", "expression", "parseStart", "expressions", "parseMultiple", "options", "extraNodes", "deepMap", "elem", "TOKENTYPE", "DELIMITERS", "NAMED_DELIMITERS", "CONSTANTS", "NUMERIC_CONSTANTS", "initialState", "currentString", "state", "length", "currentCharacter", "next", "prevCharacter", "nextCharacter", "getToken", "c1", "c2", "c3", "_c", "createSyntaxError", "hasOwnProperty", "getTokenSkipNewline", "openParams", "closeParams", "c", "cPrev", "cNext", "high", "low", "nestingLevel", "_extends", "node", "parseBlock", "createError", "blocks", "visible", "parseAssignment", "args", "value", "valid", "parseConditional", "isSymbolNode", "isAccessorNode", "isFunctionNode", "arg", "index", "parseLogicalOr", "prev", "condition", "trueExpr", "falseExpr", "parseLogicalXor", "parseLogicalAnd", "parseBitwiseOr", "parseBitwiseXor", "parseBitwiseAnd", "parseRelational", "params", "parseShift", "conditionals", "operators", "cond", "fn", "parseConversion", "parseRange", "parseAddSubtract", "parseMultiplyDivide", "rightNode", "last", "parseImplicitMultiplication", "parseRule2", "isConstantNode", "isOperatorNode", "parsePercentage", "tokenStates", "parseUnary", "parsePow", "parseLeftHandOperators", "parseCustomNodes", "parseAccessors", "CustomNode", "parseSymbol", "parseDoubleQuotesString", "types", "dotNotation", "str", "parseDoubleQuotesStringToken", "parseSingleQuotesString", "parseSingleQuotesStringToken", "parseMatrix", "array", "rows", "cols", "row", "parseRow", "r", "parseObject", "len", "key", "properties", "parseNumber", "numberStr", "parseParentheses", "parseEnd", "col", "message", "error", "name", "dependencies", "createCompile", "init_compile", "__esmMin", "init_collection", "init_factory", "factory", "_ref", "typed", "parse", "expr", "deepMap", "entry", "name", "dependencies", "createEvaluate", "init_evaluate", "__esmMin", "init_collection", "init_factory", "init_map", "factory", "_ref", "typed", "parse", "expr", "scope", "createEmptyMap", "deepMap", "entry", "name", "dependencies", "createParserClass", "init_Parser", "__esmMin", "init_factory", "init_map", "factory", "_ref", "evaluate", "Parser", "createEmptyMap", "expr", "toObject", "value", "_apply", "mat", "dim", "callback", "i", "ret", "tran", "_switch", "I", "J", "j", "tmp", "name", "dependencies", "createApply", "init_apply", "__esmMin", "init_factory", "init_array", "init_is", "init_IndexError", "factory", "_ref", "typed", "isInteger", "size", "arraySize", "IndexError", "isMatrix", "_filterCallback", "x", "callback", "args", "maxArgumentCount", "filter", "value", "index", "array", "name", "dependencies", "createFilter", "init_filter", "__esmMin", "init_array", "init_function", "init_factory", "factory", "_ref", "typed", "test", "filterRegExp", "_forEach", "array", "callback", "args", "maxArgumentCount", "recurse", "value", "index", "forEach", "child", "i", "name", "dependencies", "createForEach", "init_forEach", "__esmMin", "init_function", "init_array", "init_factory", "factory", "_ref", "typed", "x", "_map", "array", "callback", "args", "maxArgumentCount", "recurse", "value", "index", "child", "i", "err", "newmsg", "indexString", "name", "dependencies", "createMap", "init_map", "__esmMin", "init_function", "init_factory", "factory", "_ref", "typed", "x", "name", "dependencies", "createRange", "init_range", "__esmMin", "init_factory", "init_noop", "factory", "_ref", "typed", "config", "matrix", "bignumber", "smaller", "smallerEq", "larger", "largerEq", "_strRange", "start", "end", "_out", "_rangeEx", "step", "includeEnd", "_rangeInc", "BigNumber", "_bigRangeEx", "_bigRangeInc", "arr", "noMatrix", "str", "r", "_parse", "fn", "noBignumber", "array", "x", "zero", "args", "nums", "arg", "invalid", "num", "name", "dependencies", "createSize", "init_size", "__esmMin", "init_array", "init_factory", "init_noop", "factory", "_ref", "typed", "config", "matrix", "x", "arraySize", "noMatrix", "name", "dependencies", "createPartitionSelect", "init_partitionSelect", "__esmMin", "init_is", "init_number", "init_factory", "factory", "_ref", "typed", "isNumeric", "isNaN", "compare", "asc", "desc", "a", "b", "x", "k", "_partitionSelect", "isInteger", "isMatrix", "size", "quickSelect", "arr", "i", "from", "to", "r", "w", "pivot", "tmp", "isPositiveInteger", "n", "name", "dependencies", "createCombinationsWithRep", "init_combinationsWithRep", "__esmMin", "init_factory", "init_number", "init_product", "factory", "_ref", "typed", "k", "isInteger", "_prodrange", "product", "prodrange", "BigNumber", "result", "i", "one", "nMinusOne", "name", "dependencies", "createFactorial", "init_factorial", "__esmMin", "init_collection", "init_factory", "factory", "_ref", "typed", "gamma", "n", "deepMap", "name", "dependencies", "createMultinomial", "init_multinomial", "__esmMin", "init_collection", "init_factory", "factory", "_ref", "typed", "add", "divide", "multiply", "factorial", "isInteger", "isPositive", "a", "sum", "denom", "deepForEach", "ai", "isPositiveInteger", "n", "name", "dependencies", "createPermutations", "init_permutations", "__esmMin", "init_number", "init_product", "init_factory", "factory", "_ref", "typed", "factorial", "k", "isInteger", "product", "result", "i", "one", "require_alea", "__commonJSMin", "exports", "module", "global", "define", "Alea", "seed", "me", "mash", "Mash", "t", "copy", "f", "impl", "opts", "xg", "state", "prng", "n", "data", "i", "h", "require_xor128", "__commonJSMin", "exports", "module", "global", "define", "XorGen", "seed", "me", "strseed", "t", "k", "copy", "f", "impl", "opts", "xg", "state", "prng", "top", "bot", "result", "require_xorwow", "__commonJSMin", "exports", "module", "global", "define", "XorGen", "seed", "me", "strseed", "t", "k", "copy", "f", "impl", "opts", "xg", "state", "prng", "top", "bot", "result", "require_xorshift7", "__commonJSMin", "exports", "module", "global", "define", "XorGen", "seed", "me", "X", "i", "t", "v", "w", "init", "j", "copy", "f", "impl", "opts", "xg", "state", "prng", "top", "bot", "result", "require_xor4096", "__commonJSMin", "exports", "module", "global", "define", "XorGen", "seed", "me", "w", "X", "i", "t", "v", "init", "j", "limit", "copy", "f", "impl", "opts", "xg", "state", "prng", "top", "bot", "result", "require_tychei", "__commonJSMin", "exports", "module", "global", "define", "XorGen", "seed", "me", "strseed", "b", "c", "d", "a", "k", "copy", "f", "t", "impl", "opts", "xg", "state", "prng", "top", "bot", "result", "require_crypto", "__commonJSMin", "require_seedrandom", "__commonJSMin", "exports", "module", "global", "pool", "math", "width", "chunks", "digits", "rngname", "startdenom", "significance", "overflow", "mask", "nodecrypto", "seedrandom", "seed", "options", "callback", "key", "shortseed", "mixkey", "flatten", "tostring", "autoseed", "arc4", "ARC4", "prng", "n", "d", "x", "is_math_call", "state", "copy", "t", "keylen", "me", "i", "j", "s", "count", "r", "f", "obj", "depth", "result", "typ", "prop", "stringseed", "smear", "out", "browser", "plugins", "a", "require_seedrandom", "__commonJSMin", "exports", "module", "alea", "xor128", "xorwow", "xorshift7", "xor4096", "tychei", "sr", "createRng", "randomSeed", "random", "setSeed", "seed", "singletonRandom", "seedrandom", "rng", "import_seedrandom", "init_seededRNG", "__esmMin", "name", "dependencies", "createPickRandom", "init_pickRandom", "__esmMin", "init_array", "init_factory", "init_is", "init_seededRNG", "factory", "_ref", "typed", "config", "on", "rng", "createRng", "curr", "prev", "possibles", "_pickRandom", "options", "number", "weights", "_ref2", "elementWise", "single", "createMatrix", "isMatrix", "flatten", "totalWeights", "i", "len", "isNumber", "length", "result", "pick", "randKey", "_i", "_len", "randomMatrix", "size", "random", "data", "i", "length", "_i", "_length", "init_randomMatrix", "__esmMin", "name", "createRandomNumber", "init_random", "__esmMin", "init_factory", "init_seededRNG", "factory", "_ref2", "typed", "config", "on", "matrix", "rng", "createRng", "curr", "prev", "_random", "max", "min", "name", "dependencies", "createRandomInt", "init_randomInt", "__esmMin", "init_factory", "init_randomMatrix", "init_seededRNG", "init_is", "factory", "_ref", "typed", "config", "on", "rng", "createRng", "curr", "prev", "_randomInt", "max", "min", "size", "_randomIntMatrix", "res", "randomMatrix", "isMatrix", "name", "createEqualScalarNumber", "init_equalScalar", "__esmMin", "init_number", "init_factory", "factory", "_ref2", "typed", "config", "x", "y", "nearlyEqual", "name", "createCompareNumber", "init_compare", "__esmMin", "init_number", "init_factory", "factory", "_ref2", "typed", "config", "x", "y", "nearlyEqual", "require_naturalSort", "__commonJSMin", "exports", "module", "naturalSort", "a", "b", "re", "sre", "dre", "hre", "ore", "i", "s", "x", "y", "xN", "yN", "xD", "yD", "oFxNcL", "oFyNcL", "cLoc", "numS", "compareComplexNumbers", "x", "y", "import_javascript_natural_sort", "name", "dependencies", "createCompareNatural", "init_compareNatural", "__esmMin", "init_is", "init_factory", "factory", "_ref", "typed", "compare", "compareBooleans", "typeX", "typeOf", "typeY", "c", "naturalSort", "compareMatricesAndArrays", "compareArrays", "compareObjects", "compareNatural", "isSparseMatrix", "isDenseMatrix", "i", "ii", "v", "keysX", "keysY", "name", "createCompareTextNumber", "init_compareText", "__esmMin", "init_string", "init_factory", "factory", "_ref2", "typed", "compareText", "name", "createEqualNumber", "init_equal", "__esmMin", "init_factory", "factory", "_ref2", "typed", "equalScalar", "x", "y", "name", "dependencies", "createEqualText", "init_equalText", "__esmMin", "init_factory", "factory", "_ref", "typed", "compareText", "isZero", "x", "y", "name", "createSmallerNumber", "init_smaller", "__esmMin", "init_number", "init_factory", "factory", "_ref2", "typed", "config", "x", "y", "nearlyEqual", "name", "createSmallerEqNumber", "init_smallerEq", "__esmMin", "init_number", "init_factory", "factory", "_ref2", "typed", "config", "x", "y", "nearlyEqual", "name", "createLargerNumber", "init_larger", "__esmMin", "init_number", "init_factory", "factory", "_ref2", "typed", "config", "x", "y", "nearlyEqual", "name", "createLargerEqNumber", "init_largerEq", "__esmMin", "init_number", "init_factory", "factory", "_ref2", "typed", "config", "x", "y", "nearlyEqual", "name", "dependencies", "createDeepEqual", "init_deepEqual", "__esmMin", "init_factory", "factory", "_ref", "typed", "equal", "x", "y", "_deepEqual", "len", "i", "name", "createUnequalNumber", "init_unequal", "__esmMin", "init_factory", "factory", "_ref2", "typed", "equalScalar", "x", "y", "name", "dependencies", "createErf", "THRESH", "SQRPI", "P", "Q", "MAX_NUM", "init_erf", "__esmMin", "init_collection", "init_number", "init_factory", "factory", "_ref", "typed", "x", "y", "sign", "erf1", "erfc2", "erfc3", "n", "deepMap", "ysq", "xnum", "xden", "i", "result", "del", "name", "dependencies", "createMode", "init_mode", "__esmMin", "init_array", "init_factory", "factory", "_ref", "typed", "isNaN", "isNumeric", "_mode", "args", "values", "flatten", "num", "count", "mode", "max", "i", "value", "improveErrorMessage", "err", "fnName", "value", "details", "typeOf", "init_improveErrorMessage", "__esmMin", "init_is", "name", "dependencies", "createProd", "init_prod", "__esmMin", "init_collection", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "config", "multiplyScalar", "numeric", "_prod", "array", "dim", "args", "prod", "deepForEach", "value", "err", "improveErrorMessage", "name", "dependencies", "createMax", "init_max", "__esmMin", "init_collection", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "config", "numeric", "larger", "_max", "array", "dim", "reduce", "_largest", "args", "containsCollections", "x", "y", "err", "improveErrorMessage", "res", "deepForEach", "value", "name", "dependencies", "createMin", "init_min", "__esmMin", "init_collection", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "config", "numeric", "smaller", "_min", "array", "dim", "reduce", "_smallest", "args", "containsCollections", "x", "y", "err", "improveErrorMessage", "min", "deepForEach", "value", "name", "dependencies", "createSum", "init_sum", "__esmMin", "init_collection", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "config", "add", "numeric", "_sum", "_nsumDim", "args", "containsCollections", "array", "sum", "deepForEach", "value", "err", "improveErrorMessage", "dim", "reduce", "name", "dependencies", "createCumSum", "init_cumsum", "__esmMin", "init_collection", "init_factory", "init_switch", "init_improveErrorMessage", "init_array", "init_IndexError", "factory", "_ref", "typed", "add", "unaryPlus", "_cumsum", "matrix", "_ncumSumDim", "dim", "args", "containsCollections", "array", "_cumsummap", "err", "improveErrorMessage", "sums", "i", "size", "arraySize", "IndexError", "_cumsumDimensional", "mat", "ret", "tran", "initialValue", "_switch", "name", "dependencies", "createMean", "init_mean", "__esmMin", "init_collection", "init_array", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "add", "divide", "_mean", "_nmeanDim", "args", "containsCollections", "array", "dim", "sum", "reduce", "s", "arraySize", "err", "improveErrorMessage", "num", "deepForEach", "value", "name", "dependencies", "createMedian", "init_median", "__esmMin", "init_collection", "init_array", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "add", "divide", "compare", "partitionSelect", "_median", "array", "flatten", "num", "mid", "right", "left", "i", "middle2", "m", "middle", "err", "improveErrorMessage", "value", "dim", "args", "containsCollections", "name", "dependencies", "createMad", "init_mad", "__esmMin", "init_array", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "abs", "map", "median", "subtract", "_mad", "args", "array", "flatten", "med", "value", "err", "improveErrorMessage", "DEFAULT_NORMALIZATION", "name", "dependencies", "createVariance", "init_variance", "__esmMin", "init_collection", "init_is", "init_factory", "init_improveErrorMessage", "factory", "_ref", "typed", "add", "subtract", "multiply", "divide", "apply", "isNaN", "array", "_var", "dim", "_varDim", "args", "normalization", "sum", "num", "deepForEach", "value", "err", "improveErrorMessage", "mean", "diff", "zero", "isBigNumber", "x", "name", "dependencies", "createQuantileSeq", "init_quantileSeq", "__esmMin", "init_is", "init_number", "init_array", "init_factory", "factory", "_ref", "typed", "add", "multiply", "partitionSelect", "compare", "quantileSeq", "data", "probOrN", "sorted", "probArr", "dataArr", "one", "isCollection", "isNumber", "_quantileSeq", "isInteger", "nPlusOne", "i", "isBigNumber", "BigNumber", "intN", "_nPlusOne", "_i", "_i2", "currProb", "array", "prob", "flat", "flatten", "len", "_index", "_fracPart", "value", "validate", "_integerPart", "_left", "_right", "index", "_value", "integerPart", "fracPart", "integerPartNumber", "left", "right", "_i3", "x", "name", "dependencies", "createStd", "init_std", "__esmMin", "init_factory", "factory", "_ref", "typed", "sqrt", "variance", "_std", "args", "array", "normalization", "err", "name", "dependencies", "createFormat", "init_format", "__esmMin", "init_string", "init_factory", "factory", "_ref", "typed", "format", "_print", "template", "values", "options", "original", "key", "keys", "value", "k", "isString", "format", "name", "dependencies", "createPrint", "init_print", "__esmMin", "init_string", "init_is", "init_factory", "factory", "_ref", "typed", "name", "dependencies", "createApplyTransform", "init_apply_transform", "__esmMin", "init_errorTransform", "init_factory", "init_apply", "init_is", "factory", "_ref", "typed", "isInteger", "apply", "createApply", "args", "dim", "isNumber", "isBigNumber", "err", "errorTransform", "compileInlineExpression", "expression", "math", "scope", "symbol", "node", "isSymbolNode", "name", "subScope", "createSubScope", "eq", "x", "init_compileInlineExpression", "__esmMin", "init_is", "init_scope", "_filter", "x", "callback", "args", "maxArgumentCount", "filter", "value", "index", "array", "name", "dependencies", "createFilterTransform", "init_filter_transform", "__esmMin", "init_is", "init_array", "init_function", "init_compileInlineExpression", "init_factory", "factory", "_ref", "typed", "filterTransform", "math", "scope", "isSymbolNode", "isFunctionAssignmentNode", "compileInlineExpression", "test", "filterRegExp", "name", "dependencies", "createForEachTransform", "init_forEach_transform", "__esmMin", "init_is", "init_function", "init_array", "init_factory", "init_compileInlineExpression", "factory", "_ref", "typed", "forEachTransform", "args", "math", "scope", "x", "callback", "isSymbolNode", "isFunctionAssignmentNode", "compileInlineExpression", "_forEach", "array", "maxArgumentCount", "recurse", "value", "index", "forEach", "child", "i", "_map", "array", "callback", "orig", "argsCount", "maxArgumentCount", "recurse", "value", "index", "map", "child", "i", "name", "dependencies", "createMapTransform", "init_map_transform", "__esmMin", "init_is", "init_function", "init_array", "init_factory", "init_compileInlineExpression", "factory", "_ref", "typed", "mapTransform", "args", "math", "scope", "x", "isSymbolNode", "isFunctionAssignmentNode", "compileInlineExpression", "lastDimToZeroBase", "args", "isCollection", "dim", "isNumber", "isBigNumber", "init_lastDimToZeroBase", "__esmMin", "init_is", "name", "dependencies", "createMaxTransform", "init_max_transform", "__esmMin", "init_factory", "init_errorTransform", "init_max", "init_lastDimToZeroBase", "factory", "_ref", "typed", "config", "numeric", "larger", "max", "createMax", "args", "lastDimToZeroBase", "err", "errorTransform", "name", "dependencies", "createMeanTransform", "init_mean_transform", "__esmMin", "init_factory", "init_errorTransform", "init_mean", "init_lastDimToZeroBase", "factory", "_ref", "typed", "add", "divide", "mean", "createMean", "args", "lastDimToZeroBase", "err", "errorTransform", "name", "dependencies", "createMinTransform", "init_min_transform", "__esmMin", "init_factory", "init_errorTransform", "init_min", "init_lastDimToZeroBase", "factory", "_ref", "typed", "config", "numeric", "smaller", "min", "createMin", "args", "lastDimToZeroBase", "err", "errorTransform", "name", "dependencies", "createRangeTransform", "init_range_transform", "__esmMin", "init_factory", "init_range", "factory", "_ref", "typed", "config", "matrix", "bignumber", "smaller", "smallerEq", "larger", "largerEq", "range", "createRange", "args", "lastIndex", "last", "name", "dependencies", "createStdTransform", "init_std_transform", "__esmMin", "init_factory", "init_std", "init_errorTransform", "init_lastDimToZeroBase", "factory", "_ref", "typed", "sqrt", "variance", "std", "createStd", "args", "lastDimToZeroBase", "err", "errorTransform", "name", "dependencies", "createSumTransform", "init_sum_transform", "__esmMin", "init_factory", "init_errorTransform", "init_sum", "init_lastDimToZeroBase", "factory", "_ref", "typed", "config", "add", "numeric", "sum", "createSum", "args", "lastDimToZeroBase", "err", "errorTransform", "name", "dependencies", "createCumSumTransform", "init_cumsum_transform", "__esmMin", "init_is", "init_factory", "init_errorTransform", "init_cumsum", "factory", "_ref", "typed", "add", "unaryPlus", "cumsum", "createCumSum", "args", "isCollection", "dim", "isNumber", "isBigNumber", "err", "errorTransform", "name", "dependencies", "createVarianceTransform", "init_variance_transform", "__esmMin", "init_factory", "init_errorTransform", "init_variance", "init_lastDimToZeroBase", "factory", "_ref", "typed", "add", "subtract", "multiply", "divide", "apply", "isNaN", "variance", "createVariance", "args", "lastDimToZeroBase", "err", "errorTransform", "name", "dependencies", "createClone", "init_clone", "__esmMin", "init_object", "init_factory", "factory", "_ref", "typed", "clone", "name", "dependencies", "createIsNumeric", "init_isNumeric", "__esmMin", "init_collection", "init_factory", "factory", "_ref", "typed", "x", "deepMap", "name", "dependencies", "createHasNumericValue", "init_hasNumericValue", "__esmMin", "init_factory", "factory", "_ref", "typed", "isNumeric", "x", "name", "dependencies", "createTypeOf", "init_typeOf", "__esmMin", "init_factory", "init_is", "factory", "_ref", "typed", "typeOf", "name", "dependencies", "createIsPrime", "init_isPrime", "__esmMin", "init_collection", "init_factory", "factory", "_ref", "typed", "x", "i", "modPow", "base", "exponent", "modulus", "accumulator", "Decimal", "r", "bases", "max", "_i", "_i2", "a", "adn", "_i3", "_x", "deepMap", "name", "dependencies", "createNumeric", "init_numeric", "__esmMin", "init_is", "init_factory", "init_noop", "factory", "_ref", "_number", "bignumber", "fraction", "validInputTypes", "validOutputTypes", "x", "noBignumber", "noFraction", "value", "outputType", "inputType", "typeOf", "name", "dependencies", "createReviver", "init_reviver", "__esmMin", "init_factory", "factory", "_ref", "classes", "key", "value", "constructor", "name", "dependencies", "createReplacer", "init_replacer", "__esmMin", "init_factory", "factory", "key", "value", "createNumberFactory", "name", "fn", "factory", "_ref", "typed", "createNumberOptionalSecondArgFactory", "_ref2", "createUnaryMinus", "createUnaryPlus", "createAbs", "createAddScalar", "createCbrt", "createCube", "createExp", "createExpm1", "createGcd", "createLcm", "createLog10", "createLog2", "createMod", "createMultiplyScalar", "createMultiply", "createNthRoot", "createSign", "createSqrt", "createSquare", "createSubtract", "createXgcd", "createDivideScalar", "createPow", "createRound", "createLog", "createLog1p", "createAdd", "createNorm", "createDivide", "createBitAnd", "createBitNot", "createBitOr", "createBitXor", "createLeftShift", "createRightArithShift", "createRightLogShift", "createAnd", "createNot", "createOr", "createXor", "createIndex", "createMatrix", "createSubset", "createCombinations", "createGamma", "createLgamma", "createAcos", "createAcosh", "createAcot", "createAcoth", "createAcsc", "createAcsch", "createAsec", "createAsech", "createAsin", "createAsinh", "createAtan", "createAtan2", "createAtanh", "createCos", "createCosh", "createCot", "createCoth", "createCsc", "createCsch", "createSec", "createSech", "createSin", "createSinh", "createTan", "createTanh", "createSubsetTransform", "createIsInteger", "createIsNegative", "createIsPositive", "createIsZero", "createIsNaN", "init_factoriesNumber", "__esmMin", "init_number", "init_factory", "init_noop", "init_typed", "init_ResultSet", "init_Range", "init_Help", "init_Chain", "init_help", "init_chain", "init_resolve", "init_simplify", "init_simplifyCore", "init_derivative", "init_rationalize", "init_ceil", "init_fix", "init_floor", "init_hypot", "init_stirlingS2", "init_bellNumbers", "init_catalan", "init_composition", "init_constants", "init_string", "init_boolean", "init_parser", "init_Node", "init_AccessorNode", "init_ArrayNode", "init_AssignmentNode", "init_BlockNode", "init_ConditionalNode", "init_ConstantNode", "init_FunctionAssignmentNode", "init_IndexNode", "init_ObjectNode", "init_OperatorNode", "init_ParenthesisNode", "init_RangeNode", "init_RelationalNode", "init_SymbolNode", "init_FunctionNode", "init_parse", "init_compile", "init_evaluate", "init_Parser", "init_apply", "init_filter", "init_forEach", "init_map", "init_range", "init_size", "init_partitionSelect", "init_combinationsWithRep", "init_factorial", "init_multinomial", "init_permutations", "init_pickRandom", "init_random", "init_randomInt", "init_equalScalar", "init_compare", "init_compareNatural", "init_compareText", "init_equal", "init_equalText", "init_smaller", "init_smallerEq", "init_larger", "init_largerEq", "init_deepEqual", "init_unequal", "init_erf", "init_mode", "init_prod", "init_max", "init_min", "init_sum", "init_cumsum", "init_mean", "init_median", "init_mad", "init_variance", "init_quantileSeq", "init_std", "init_format", "init_print", "init_apply_transform", "init_filter_transform", "init_forEach_transform", "init_map_transform", "init_max_transform", "init_mean_transform", "init_min_transform", "init_range_transform", "init_std_transform", "init_sum_transform", "init_cumsum_transform", "init_variance_transform", "init_clone", "init_isNumeric", "init_hasNumericValue", "init_typeOf", "init_isPrime", "init_numeric", "init_reviver", "init_replacer", "unaryMinusNumber", "unaryPlusNumber", "absNumber", "addNumber", "cbrtNumber", "cubeNumber", "expNumber", "expm1Number", "gcdNumber", "lcmNumber", "log10Number", "log2Number", "modNumber", "multiplyNumber", "nthRootNumber", "signNumber", "sqrtNumber", "squareNumber", "subtractNumber", "xgcdNumber", "divideNumber", "powNumber", "roundNumber", "logNumber", "log1pNumber", "normNumber", "bitAndNumber", "bitNotNumber", "bitOrNumber", "bitXorNumber", "leftShiftNumber", "rightArithShiftNumber", "rightLogShiftNumber", "andNumber", "notNumber", "orNumber", "xorNumber", "noIndex", "noMatrix", "noSubset", "combinationsNumber", "gammaNumber", "lgammaNumber", "acosNumber", "acoshNumber", "acotNumber", "acothNumber", "acscNumber", "acschNumber", "asecNumber", "asechNumber", "asinNumber", "asinhNumber", "atanNumber", "atan2Number", "atanhNumber", "cosNumber", "coshNumber", "cotNumber", "cothNumber", "cscNumber", "cschNumber", "secNumber", "sechNumber", "sinNumber", "sinhNumber", "tanNumber", "tanhNumber", "isIntegerNumber", "isNegativeNumber", "isPositiveNumber", "isZeroNumber", "isNaNNumber", "e", "_false", "index", "_Infinity", "LN10", "LOG10E", "matrix", "_NaN", "_null", "phi", "Range", "replacer", "ResultSet", "SQRT1_2", "subset", "tau", "typed", "unaryPlus", "version", "xor", "abs", "acos", "acot", "acsc", "add", "and", "asec", "asin", "atan", "atanh", "bitAnd", "bitOr", "boolean", "cbrt", "combinations", "compare", "compareText", "cos", "cot", "csc", "cube", "divide", "equalScalar", "erf", "exp", "filter", "forEach", "format", "gamma", "isInteger", "isNegative", "isPositive", "isZero", "LOG2E", "largerEq", "leftShift", "log", "log1p", "map", "mean", "mod", "multiply", "not", "number", "or", "pi", "pow", "random", "rightLogShift", "SQRT2", "sech", "sin", "size", "smallerEq", "square", "string", "subtract", "tanh", "typeOf", "unequal", "xgcd", "acoth", "addScalar", "asech", "bitNot", "clone", "compareNatural", "cosh", "csch", "divideScalar", "equalText", "expm1", "isNumeric", "LN2", "lcm", "log10", "multiplyScalar", "nthRoot", "pickRandom", "randomInt", "rightArithShift", "sec", "sinh", "sqrt", "tan", "unaryMinus", "acosh", "apply", "asinh", "bitXor", "combinationsWithRep", "cumsum", "equal", "factorial", "hasNumericValue", "isNaN", "larger", "log2", "mode", "norm", "partitionSelect", "print", "quantileSeq", "round", "smaller", "stirlingS2", "_true", "variance", "acsch", "atan2", "catalan", "composition", "deepEqual", "floor", "hypot", "lgamma", "median", "multinomial", "permutations", "range", "sign", "std", "ceil", "coth", "fix", "isPrime", "numeric", "prod", "sum", "bellNumbers", "gcd", "mad", "max", "min", "init_pureFunctionsNumber_generated", "__esmMin", "init_configReadonly", "init_factoriesNumber", "createE", "config", "createFalse", "createIndex", "createInfinity", "createLN10", "createLOG10E", "createMatrix", "createNaN", "createNull", "createPhi", "createRangeClass", "createReplacer", "createResultSet", "createSQRT1_2", "createSubset", "createTau", "createTyped", "createUnaryPlus", "createVersion", "createXor", "createAbs", "createAcos", "createAcot", "createAcsc", "createAdd", "createAnd", "createAsec", "createAsin", "createAtan", "createAtanh", "createBitAnd", "createBitOr", "createBoolean", "createCbrt", "createCombinations", "createCompareNumber", "createCompareTextNumber", "createCos", "createCot", "createCsc", "createCube", "createDivide", "createEqualScalarNumber", "createErf", "createExp", "createFilter", "createForEach", "createFormat", "createGamma", "createIsInteger", "createIsNegative", "createIsPositive", "createIsZero", "createLOG2E", "createLargerEqNumber", "createLeftShift", "createLog", "createLog1p", "createMap", "createMean", "createMod", "createMultiply", "createNot", "createNumber", "createOr", "createPi", "createPow", "createRandomNumber", "createRightLogShift", "createSQRT2", "createSech", "createSin", "createSize", "createSmallerEqNumber", "createSquare", "createString", "createSubtract", "createTanh", "createTypeOf", "createUnequalNumber", "createXgcd", "createAcoth", "createAddScalar", "createAsech", "createBitNot", "createClone", "createCompareNatural", "createCosh", "createCsch", "createDivideScalar", "createEqualText", "createExpm1", "createIsNumeric", "createLN2", "createLcm", "createLog10", "createMultiplyScalar", "createNthRoot", "createPickRandom", "createRandomInt", "createRightArithShift", "createSec", "createSinh", "createSqrt", "createTan", "createUnaryMinus", "createAcosh", "createApply", "createAsinh", "createBitXor", "createCombinationsWithRep", "createCumSum", "createEqualNumber", "createFactorial", "createHasNumericValue", "createIsNaN", "createLargerNumber", "createLog2", "createMode", "createNorm", "createPartitionSelect", "createPrint", "createQuantileSeq", "createRound", "createSmallerNumber", "createStirlingS2", "createTrue", "createVariance", "createAcsch", "createAtan2", "createCatalan", "createComposition", "createDeepEqual", "createFloorNumber", "createHypot", "createLgamma", "createMedian", "createMultinomial", "createPermutations", "createRange", "createSign", "createStd", "createCeilNumber", "createCoth", "createFixNumber", "createIsPrime", "createNumeric", "createProd", "createSum", "createBellNumbers", "createGcd", "createMad", "createMax", "createMin", "math", "mathWithTransform", "classes", "Chain", "chain", "Node", "ObjectNode", "RangeNode", "RelationalNode", "reviver", "SymbolNode", "AccessorNode", "AssignmentNode", "BlockNode", "ConditionalNode", "FunctionNode", "IndexNode", "OperatorNode", "ConstantNode", "FunctionAssignmentNode", "ParenthesisNode", "ArrayNode", "simplifyCore", "parse", "resolve", "compile", "evaluate", "Help", "Parser", "simplify", "derivative", "rationalize", "help", "parser", "init_impureFunctionsNumber_generated", "__esmMin", "init_extends", "init_configReadonly", "init_factoriesNumber", "init_pureFunctionsNumber_generated", "createChainClass", "createChain", "typed", "createNode", "createObjectNode", "createRangeNode", "createRelationalNode", "createReviver", "createSymbolNode", "createAccessorNode", "subset", "createAssignmentNode", "matrix", "createBlockNode", "ResultSet", "createConditionalNode", "createFunctionNode", "createIndexNode", "size", "createOperatorNode", "createConstantNode", "createFunctionAssignmentNode", "createParenthesisNode", "createArrayNode", "createSimplifyCore", "add", "divide", "equal", "isZero", "multiply", "pow", "subtract", "createParse", "config", "numeric", "createResolve", "createCompile", "createEvaluate", "createHelpClass", "createParserClass", "createSimplify", "createDerivative", "createRationalize", "createHelp", "createParser", "_extends", "e", "_false", "index", "_Infinity", "LN10", "LOG10E", "_NaN", "_null", "phi", "replacer", "SQRT1_2", "tau", "unaryPlus", "version", "xor", "abs", "acos", "acot", "acsc", "and", "asec", "asin", "atan", "atanh", "bitAnd", "bitOr", "boolean", "cbrt", "combinations", "compare", "compareText", "cos", "cot", "csc", "cube", "equalScalar", "erf", "exp", "filter", "forEach", "format", "gamma", "isInteger", "isNegative", "isPositive", "LOG2E", "largerEq", "leftShift", "log", "log1p", "map", "mean", "mod", "not", "number", "or", "pi", "random", "rightLogShift", "SQRT2", "sech", "sin", "smallerEq", "square", "string", "tanh", "typeOf", "unequal", "xgcd", "acoth", "addScalar", "asech", "bitNot", "clone", "compareNatural", "cosh", "csch", "divideScalar", "equalText", "expm1", "isNumeric", "LN2", "lcm", "log10", "multiplyScalar", "nthRoot", "pickRandom", "randomInt", "rightArithShift", "sec", "sinh", "sqrt", "tan", "unaryMinus", "acosh", "apply", "asinh", "bitXor", "combinationsWithRep", "cumsum", "factorial", "hasNumericValue", "isNaN", "larger", "log2", "mode", "norm", "partitionSelect", "print", "quantileSeq", "round", "smaller", "stirlingS2", "_true", "variance", "acsch", "atan2", "catalan", "composition", "deepEqual", "floor", "hypot", "lgamma", "median", "multinomial", "permutations", "range", "sign", "std", "ceil", "coth", "fix", "isPrime", "prod", "sum", "bellNumbers", "gcd", "mad", "max", "min", "createCumSumTransform", "createApplyTransform", "createFilterTransform", "createForEachTransform", "createMapTransform", "createMeanTransform", "createSubsetTransform", "createVarianceTransform", "createMaxTransform", "createMinTransform", "createRangeTransform", "createStdTransform", "createSumTransform", "Range", "init_typeChecks", "__esmMin", "init_dependenciesNumber_generated", "__esmMin", "init_mainNumber", "__esmMin", "init_pureFunctionsNumber_generated", "init_impureFunctionsNumber_generated", "init_typeChecks", "init_dependenciesNumber_generated", "init_factoriesNumber", "init_number", "__esmMin", "init_mainNumber", "utils_exports", "__export", "appendAnalytUcetSelect", "appendCanvas", "callCalcSumFunction", "capitalize", "changeItemSzcp", "deleteJSON", "eightyPercent", "formatNumber", "getCurrentController", "getFormData", "getJSON", "getStimulusController", "onDodavatelChange", "onPartnerChange", "onSyntUcetChange", "open", "parseNumber", "popupHelpers", "postFormData", "postJSON", "reloadDanovyPomerOptions", "round", "showFilter", "showRecord", "showSkladovaKarta", "simpleCardMethods", "updateDanovyPomerSelectboxes", "updateZadanaUhradaLabels", "whenControllerReady", "sumVal", "input", "sum", "value", "paymentVal", "chboxEl", "select", "url", "json", "tsObj", "ucet", "i", "initializeTomSelect", "err", "res", "throwError", "body", "method", "init_utils", "__esmMin", "init_window_manager", "init_show_toast_message", "init_tom_select", "init_number", "contentType", "str", "number", "precision", "result", "target", "item", "suffix", "udp", "e", "parent", "analytUcetEl", "showToastMessage", "id", "openURL", "href", "btnEl", "confirmMessage", "status", "message", "block", "s", "canvas", "canvasObj", "event", "match", "p1", "p2", "offset", "type", "optionName", "parentEl", "sumaSdphEl", "hundredVal", "addedEl", "typEl", "phm20El", "o", "el", "controllerName", "node", "methodName", "args", "maxAttempts", "interval", "resolve", "reject", "attempts", "tryGetController", "controller", "filterId", "abbrev", "button", "dereference", "tab", "date", "selectedValue", "danovyPomersArr", "selected", "option", "optionElement", "partnerId", "response", "dodavatelId", "indices_default", "init_indices", "__esmMin", "shows_default", "init_shows", "__esmMin", "show_news_default", "init_show_news", "__esmMin", "filters_default", "init_filters", "__esmMin", "typs_default", "init_typs", "__esmMin", "require_notifications_channel", "__commonJSMin", "exports", "init_consumer", "init_show_submit_buttons", "init_utils", "init_indices", "init_shows", "init_show_news", "init_filters", "init_typs", "init_show_toast_message", "init_make_request", "init_tom_select", "consumer_default", "baseHandler", "targets", "handler", "hash", "target", "indices_default", "handleIndex", "filters_default", "handleFilter", "shows_default", "handleShow", "show_news_default", "handleShowNew", "typs_default", "handleTyps", "updateDanovyPomerSelectboxes", "handleBankUcetUpdate", "handleEvidUpdate", "handleSkladUpdate", "handlePartnersUpdate", "handlePokladnaUpdate", "handleVykazUpdate", "handleCiselnyRadUpdate", "handleCiselnyRadsDestroy", "handleAnalytUcetsUpdate", "handleAnalytUcetsDestroy", "data", "handleFirmaPublicUserCreate", "handleFirmaPublicUserDestroy", "handleProgressBar", "handleOfDruhPolozkiesUpdate", "handleAdvanceInvoice", "handleHospRokyUpdate", "property", "showToastMessage", "triggerStrimulusAction", "actionName", "element", "addNewlyAdded", "html", "update", "newlyAdded", "table", "reflow", "tr", "addedTr", "updateSelectbox", "selector", "customTextValueBlock", "customOptionDatasetBlock", "selects", "select", "tomselect", "selectedValue", "item", "textValue", "option", "initializeTomSelect", "name", "el", "params", "parent", "child", "cisMena", "url", "make_request_default", "response", "error", "okruh", "message", "status", "suffix", "propertyHandlers", "dataParam", "refreshList", "markRemoved", "turbo", "id", "row", "_", "ids", "updateRecord", "payment", "action", "sums", "obj", "parseNumber", "formatNumber", "showSubmitButton", "visibleAssignedTable", "dom", "updatePartnerElements", "sumaB", "partnerSel", "partnerInp", "filteredData", "record", "znamienko", "ciselnyRad", "syntUcets", "ucet", "analytUcet", "au", "cost", "acc", "selectEl", "require_filepond", "__commonJSMin", "exports", "module", "global", "factory", "isNode", "value", "createStore", "initialState", "queries", "actions", "state", "actionQueue", "dispatchQueue", "getState", "processActionQueue", "queue", "processDispatchQueue", "_ref", "type", "data", "dispatch", "isBlocking", "actionHandlers", "query", "str", "_queryHandles", "_len", "args", "_key", "queryHandles", "api", "action", "defineProperty", "obj", "property", "definition", "forin", "cb", "key", "createObject", "attr", "node", "name", "ns", "svgElements", "isSVGElement", "tag", "createElement", "className", "attributes", "element", "appendChild", "parent", "child", "index", "appendChildView", "childViews", "view", "removeChildView", "IS_BROWSER", "isBrowser", "testElement", "getChildCount", "el", "getViewRect", "elementRect", "offset", "scale", "left", "top", "right", "bottom", "rect", "childView", "childViewRect", "expandRect", "calculateRectSize", "isNumber", "thereYet", "position", "destination", "velocity", "errorMargin", "spring", "_ref$stiffness", "stiffness", "_ref$damping", "damping", "_ref$mass", "mass", "target", "resting", "interpolate", "ts", "skipToEndState", "f", "setTarget", "easeLinear", "t", "easeInOutQuad", "tween", "_ref$duration", "duration", "_ref$easing", "easing", "_ref$delay", "delay", "start", "p", "reverse", "animator", "createAnimator", "category", "def", "props", "addGetSet", "keys", "overwrite", "o", "getter", "setter", "animations", "mixinConfig", "viewProps", "viewInternalAPI", "viewExternalAPI", "initialProps", "animation", "prop", "addEvent", "fn", "removeEvent", "listeners", "viewState", "events", "add", "remove", "event", "apis", "isDefined", "defaults", "styles", "currentProps", "getOffset", "getScale", "getRect", "propsHaveChanged", "applyStyles", "newProps", "_ref2", "opacity", "perspective", "translateX", "translateY", "scaleX", "scaleY", "rotateX", "rotateY", "rotateZ", "originX", "originY", "width", "height", "transforms", "elementCurrentStyle", "Mixins", "updateRect", "style", "createView", "_ref$tag", "_ref$name", "_ref$attributes", "_ref$read", "read", "_ref$write", "write", "_ref$create", "create", "_ref$destroy", "destroy", "_ref$filterFrameActio", "filterFrameActionsForChild", "_ref$didCreateView", "didCreateView", "_ref$didWriteView", "didWriteView", "_ref$ignoreRect", "ignoreRect", "_ref$ignoreRectUpdate", "ignoreRectUpdate", "_ref$mixins", "mixins", "store", "frameRect", "isResting", "activeMixins", "ref", "writers", "readers", "destroyers", "getElement", "getChildViews", "getReference", "createChildView", "getStyle", "_read", "shouldUpdate", "internalAPI", "reader", "_write", "frameActions", "shouldOptimize", "writer", "writerResting", "mixin", "mixinResting", "childResting", "_destroy", "destroyer", "sharedAPIDefinition", "internalAPIDefinition", "needle", "externalAPIDefinition", "mixinAPIDefinition", "a", "b", "mixinAPI", "childCount", "createPainter", "fps", "painter", "interval", "last", "id", "requestTick", "cancelTick", "setTimerType", "tick", "delta", "createRoute", "routes", "root", "_ref$actions", "timestamp", "insertBefore", "newNode", "referenceNode", "insertAfter", "isArray", "isEmpty", "trim", "toString", "toArray", "splitter", "isBoolean", "toBoolean", "isString", "toNumber", "toInt", "toFloat", "isInt", "toBytes", "base", "naturalFileSize", "isFunction", "toFunctionReference", "string", "levels", "level", "methods", "createServerAPI", "outline", "createAction", "method", "timeout", "headers", "parts", "toServerAPI", "isNull", "isObject", "isAPI", "getType", "replaceSingleQuotes", "conversionTable", "convertTo", "getValueByType", "newValue", "defaultValue", "valueType", "newValueType", "convertedValue", "createOption", "currentValue", "createOptions", "options", "optionDefinition", "createInitialState", "fromCamels", "separator", "part", "createOptionAPI", "createOptionActions", "createOptionQueries", "InteractionMethod", "getUniqueId", "_typeof", "REACT_ELEMENT_TYPE", "_jsx", "children", "defaultProps", "childrenLength", "propName", "childArray", "i", "_asyncIterator", "iterable", "_AwaitValue", "_AsyncGenerator", "gen", "front", "back", "send", "arg", "resolve", "reject", "request", "resume", "result", "wrappedAwait", "settle", "err", "_wrapAsyncGenerator", "_awaitAsyncGenerator", "_asyncGeneratorDelegate", "inner", "awaitWrap", "iter", "waiting", "pump", "asyncGeneratorStep", "_next", "_throw", "info", "error", "_asyncToGenerator", "self", "_classCallCheck", "instance", "Constructor", "_defineProperties", "descriptor", "_createClass", "protoProps", "staticProps", "_defineEnumerableProperties", "descs", "desc", "objectSymbols", "sym", "_defaults", "_defineProperty", "_extends", "source", "_objectSpread", "ownKeys", "object", "enumerableOnly", "symbols", "_objectSpread2", "_inherits", "subClass", "superClass", "_setPrototypeOf", "_inheritsLoose", "_getPrototypeOf", "isNativeReflectConstruct", "_construct", "Parent", "Class", "_isNativeFunction", "_wrapNativeSuper", "_cache", "Wrapper", "_instanceof", "_interopRequireDefault", "_interopRequireWildcard", "newObj", "_newArrowCheck", "innerThis", "boundThis", "_objectDestructuringEmpty", "_objectWithoutPropertiesLoose", "excluded", "sourceKeys", "_objectWithoutProperties", "sourceSymbolKeys", "_assertThisInitialized", "_possibleConstructorReturn", "call", "_superPropBase", "_get", "receiver", "set", "_set", "isStrict", "s", "_taggedTemplateLiteral", "strings", "raw", "_taggedTemplateLiteralLoose", "_temporalRef", "val", "_temporalUndefined", "_readOnlyError", "_classNameTDZError", "_slicedToArray", "arr", "_arrayWithHoles", "_iterableToArrayLimit", "_nonIterableRest", "_slicedToArrayLoose", "_iterableToArrayLimitLoose", "_toArray", "_iterableToArray", "_toConsumableArray", "_arrayWithoutHoles", "_nonIterableSpread", "arr2", "_arr", "_n", "_d", "_e", "_i", "_s", "_iterator", "_step", "_skipFirstGeneratorNext", "it", "_toPrimitive", "input", "hint", "prim", "res", "_toPropertyKey", "_initializerWarningHelper", "context", "_initializerDefineProperty", "_applyDecoratedDescriptor", "decorators", "decorator", "_classPrivateFieldLooseKey", "_classPrivateFieldLooseBase", "privateKey", "_classPrivateFieldGet", "privateMap", "_classPrivateFieldSet", "_classPrivateFieldDestructureSet", "v", "_classStaticPrivateFieldSpecGet", "classConstructor", "_classStaticPrivateFieldSpecSet", "_classStaticPrivateMethodGet", "_classStaticPrivateMethodSet", "_decorate", "_getDecoratorsApi", "r", "O", "decorated", "_coalesceClassElements", "_createElementDescriptor", "elements", "kind", "F", "proto", "placement", "initializer", "newElements", "finishers", "placements", "_hasDecorators", "elementFinishersExtras", "silent", "extras", "elementObject", "elementFinisherExtras", "newExtras", "j", "elementsAndFinisher", "k", "elementObjects", "finisher", "_optionalCallableProperty", "constructor", "newConstructor", "objectType", "_coalesceGetterSetter", "other", "isSameElement", "_isDataDescriptor", "_classPrivateMethodGet", "privateSet", "_classPrivateMethodSet", "_wrapRegExp", "re", "groups", "BabelRegExp", "_RegExp", "_super", "_groups", "_this", "buildGroups", "substitution", "_", "g", "arrayRemove", "run", "sync", "on", "off", "listener", "_fire", "_len2", "_key2", "_cb", "copyObjectPropertiesToObject", "src", "PRIVATE", "createItemAPI", "item", "removeReleasedItems", "items", "ItemStatus", "FileOrigin", "getNonNumeric", "getDecimalSeparator", "getThousandsSeparator", "decimalSeparator", "thousandsStringWithSeparator", "thousandsStringWithoutSeparator", "Type", "filters", "applyFilterChain", "utils", "matchingFilters", "initialFilter", "current", "next", "applyFilters", "addFilter", "extendDefaultOptions", "additionalOptions", "defaultOptions", "getOptions", "setOptions", "opts", "getItemByQuery", "getNumericAspectRatioFromString", "aspectRatio", "getActiveItems", "Status", "canUpdateFileInput", "dataTransfer", "ITEM_ERROR", "ITEM_BUSY", "ITEM_READY", "isItemInErrorState", "isItemInBusyState", "isItemInReadyState", "isAsync", "EMPTY", "ERROR", "BUSY", "IDLE", "READY", "option", "isShapeCircle", "status", "hasRoomForItem", "count", "maxFileCount", "limit", "min", "max", "arrayInsert", "insertItem", "isBase64DataURI", "getFilenameFromURL", "url", "getExtensionFromFilename", "guesstimateExtension", "subtype", "leftPad", "padding", "getDateString", "date", "getFileFromBlob", "blob", "filename", "extension", "file", "getBlobBuilder", "createBlob", "arrayBuffer", "mimeType", "BB", "bb", "getBlobFromByteStringWithMimeType", "byteString", "ab", "ia", "getMimeTypeFromBase64DataURI", "dataURI", "getBase64DataFromBase64DataURI", "getByteStringFromBase64DataURI", "getBlobFromBase64DataURI", "getFileFromBase64DataURI", "getFileNameFromHeader", "header", "matches", "getFileSizeFromHeader", "size", "getTranfserIdFromHeader", "getFileInfoFromHeaders", "rows", "_iteratorNormalCompletion", "_didIteratorError", "_iteratorError", "createFileLoader", "fetchFn", "getProgress", "abort", "load", "loadURL", "response", "computable", "total", "fileinfo", "isGet", "sendRequest", "aborted", "xhr", "headersReceived", "process", "e", "createResponse", "code", "body", "createTimeoutResponse", "hasQS", "buildURL", "createFetchFunction", "apiUrl", "onload", "onerror", "progress", "ChunkStatus", "processFileChunked", "metadata", "transfer", "chunks", "chunkTransferId", "chunkServer", "chunkSize", "chunkRetryDelays", "ondata", "fd", "requestTransferId", "formData", "requestParams", "requestTransferOffset", "requestUrl", "lastChunkIndex", "completeProcessingChunks", "canProcessChunk", "chunk", "processChunk", "processChunks", "lengthComputable", "loaded", "updateTotalProgress", "retryProcessChunk", "totalBytesTransfered", "totalSize", "totalProcessing", "abortChunks", "serverId", "createFileProcessorFunction", "canChunkUpload", "shouldChunkUpload", "willChunkUpload", "createProcessorFunction", "params", "createRevertFunction", "uniqueFileId", "getRandomNumber", "createPerceivedPerformanceUpdater", "tickMin", "tickMax", "runtime", "createFileProcessor", "processFn", "allowMinimumUploadDuration", "progressFn", "completeFn", "transferId", "reset", "getDuration", "getFilenameWithoutExtension", "createFileStub", "isFile", "deepCloneObject", "createItem", "origin", "serverFileReference", "abortProcessingRequestComplete", "setStatus", "fire", "getFileExtension", "getFileType", "getFileSize", "getFile", "loader", "meta", "success", "retryLoad", "abortLoad", "processor", "onprocess", "requestProcessing", "abortProcessing", "revert", "revertFileUpload", "forceRevert", "serverTransferId", "_setMetadata", "getMetadata", "handler", "itemAPI", "getItemIndexByQuery", "getItemById", "itemId", "fetchBlob", "getDomainFromURL", "isExternalURL", "dynamicLabel", "label", "isMockItem", "listUpdated", "optionalPromise", "sortItems", "compare", "getItemByQueryFromState", "itemHandler", "_ref$success", "_ref$failure", "failure", "_ref2$value", "files", "activeItems", "_ref3", "change", "shouldPrepareOutput", "beforePrepareFile", "upload", "doUpload", "_ref4", "currentIndex", "_ref5", "_ref6", "interactionMethod", "_ref6$success", "_ref6$failure", "insertLocation", "totalItems", "ignoredFiles", "isValidFile", "validItems", "promises", "_ref7", "_ref7$index", "_ref7$success", "_ref7$failure", "_ref7$options", "_item", "itemInsertLocation", "mainStatus", "handleAdd", "shouldAdd", "loadComplete", "_ref8", "restore", "fetch", "_ref9", "_ref9$failure", "_ref10", "_success", "itemCanBeQueuedForProcessing", "processNow", "maxParallelUploads", "totalCurrentUploads", "processNext", "queueEntry", "itemReference", "server", "instantUpload", "noop", "allItemsProcessed", "shouldRemove", "removeFromView", "handleRevert", "shouldRevert", "requestRemoveResult", "_ref11", "optionKeys", "prioritizedOptionKeys", "PrioritizedOptions", "orderedOptionKeys", "formatFilename", "createElement$1", "tagName", "text", "textNode", "polarToCartesian", "centerX", "centerY", "radius", "angleInDegrees", "angleInRadians", "describeArc", "x", "y", "startAngle", "endAngle", "arcSweep", "end", "percentageArc", "from", "to", "svg", "ringStrokeWidth", "ringFrom", "ringTo", "coordinates", "progressIndicator", "create$1", "write$1", "isDisabled", "shouldDisable", "fileActionButton", "toNaturalFileSize", "bytes", "_options$labelBytes", "labelBytes", "_options$labelKilobyt", "labelKilobytes", "_options$labelMegabyt", "labelMegabytes", "_options$labelGigabyt", "labelGigabytes", "KB", "MB", "GB", "removeDecimalsWhenZero", "decimalCount", "create$2", "fileName", "fileSize", "updateFile", "updateFileSizeOnError", "fileInfo", "toPercentage", "create$3", "main", "sub", "didSetItemLoadProgress", "title", "didSetItemProcessProgress", "didRequestItemProcessing", "didAbortItemProcessing", "didCompleteItemProcessing", "clear", "fileStatus", "Buttons", "ButtonKeys", "calculateFileInfoOffset", "getRemoveIndicatorAligment", "buttonRect", "calculateButtonWidth", "calculateFileVerticalCenterOffset", "calculateFileHorizontalCenterOffset", "getLoadIndicatorAlignment", "getProcessIndicatorAlignment", "DefaultStyle", "IdleStyle", "ProcessingStyle", "StyleMap", "processingCompleteIndicatorView", "create$4", "LocalButtons", "prev", "curr", "allowRevert", "allowRemove", "allowProcess", "alignRemoveItemButton", "buttonFilter", "enabledButtons", "map", "_map", "buttonView", "loadIndicatorView", "progressIndicatorView", "write$2", "route", "stylesToApply", "defaultStyles", "control", "_ref12", "create$5", "didLoadItem", "fileWrapper", "PANEL_SPRING_PROPS", "create$6", "section", "createSection", "viewConstructor", "write$3", "topRect", "bottomRect", "panel", "createDragHelper", "itemIds", "prevIndex", "ITEM_TRANSLATE_SPRING", "ITEM_SCALE_SPRING", "StateMap", "create$7", "grab", "removedActivateListener", "dragState", "drag", "dist", "drop", "cancel", "route$1", "write$4", "getItemsPerRow", "horizontalSpace", "itemWidth", "getItemIndexByPosition", "positionInView", "l", "itemRect", "itemHorizontalMargin", "itemsPerRow", "childMid", "itemVerticalMargin", "itemHeight", "_index", "indexX", "indexY", "offsetX", "offsetY", "itemTop", "itemRight", "itemBottom", "dropAreaDimensions", "create$8", "addItemView", "now", "spawnDate", "cooldown", "moveItem", "vx", "vy", "introItemView", "removeItemView", "getItemHeight", "getItemWidth", "dragItem", "numItems", "oldIndex", "dragPosition", "dragHeight", "dragWidth", "cols", "location", "visibleChildren", "idx", "childHeight", "childBottom", "childTop", "route$2", "write$5", "dragCoordinates", "dragIndex", "addIndex", "dragIndexOffset", "removeIndexOffset", "addIndexOffset", "childRect", "dragOffset", "visualHeight", "prevX", "prevY", "visualIndex", "vectorX", "vectorY", "filterSetItemActions", "list", "create$9", "storeDragCoordinates", "clearDragCoordinates", "route$3", "write$6", "newHeight", "listScroller", "attrToggle", "enabledValue", "resetFileInput", "form", "parentNode", "create$a", "setAcceptedFileTypes", "toggleAllowMultiple", "toggleDirectoryFilter", "toggleDisabled", "toggleRequired", "setCaptureMethod", "doesAllowBrowse", "disableField", "updateRequiredStatus", "shouldCheckValidity", "updateFieldValidityStatus", "browser", "Key", "create$b", "isActivationKey", "isLabelClick", "updateLabelValue", "clickable", "dropLabel", "addBlob", "moveBlob", "hideBlob", "explodeBlob", "write$7", "route$4", "drip", "setInputFiles", "create$c", "getField", "syncFieldPositionsWithItems", "didReorderItems", "didAddItem", "fileItem", "isLocalFile", "shouldUseFileInput", "dataContainer", "didLoadItem$1", "field", "didPrepareOutput", "didSetDisabled", "didRemoveItem", "didDefineValue", "write$8", "getRootNode", "images", "text$1", "guesstimateMimeType", "requestDataTransferItems", "links", "getLinks", "hasFiles", "getFiles", "promisedFiles", "isFileSystemItem", "getFilesFromItem", "returnedFileGroups", "group", "isEntry", "entry", "getAsEntry", "isDirectoryEntry", "getFilesInDirectory", "dirCounter", "fileCounter", "resolveIfDone", "readEntries", "dirEntry", "directoryReader", "readBatch", "entries", "correctedFile", "correctMissingFileType", "getLinksFromTransferMetaData", "getLinksFromTransferURLData", "dragNDropObservers", "eventPosition", "createDragNDropClient", "scopeToObserve", "filterElement", "observer", "getDragNDropObserver", "client", "newObserver", "createDragNDropObserver", "clients", "dragenter", "dragover", "dragleave", "handlers", "createHandler", "elementFromPoint", "point", "isEventTarget", "elementAtPosition", "initialTarget", "setDropEffect", "effect", "onenter", "overDropTarget", "onexit", "ondrag", "allowdrop", "allowsTransfer", "ondrop", "createHopper", "scope", "validateItems", "catchesDropsOnPage", "requiresDropOnElement", "_options$filterItems", "filterItems", "lastState", "currentState", "filteredItems", "listening", "listeners$1", "handlePaste", "activeEl", "inScope", "listen", "unlisten", "createPaster", "create$d", "addFilesNotificationTimeout", "notificationClearTimeout", "filenames", "assist", "message", "clear$1", "listModified", "isUsingFilePond", "itemAdded", "itemRemoved", "itemProcessed", "itemProcessedUndo", "itemError", "assistant", "toCamels", "debounce", "func", "immidiateOnly", "MAX_FILES_LIMIT", "prevent", "create$e", "canHover", "hasPointerEvents", "credits", "hasCredits", "frag", "write$9", "route$5", "bounds", "calculateRootBoundingBoxHeight", "_root$ref", "hopper", "isMultiItem", "maxItems", "atMaxCapacity", "addAction", "listItemMargin", "calculateListItemMargin", "listHeight", "calculateListHeight", "labelHeight", "currentLabelHeight", "listMarginTop", "listMarginBottom", "boundsHeight", "history", "MAX_BOUNCES", "bounces", "listAvailableHeight", "_listAvailableHeight", "isCappedHeight", "panelHeight", "_listAvailableHeight2", "itemMargin", "visual", "scrollList", "itemList", "newItem", "removedItem", "verticalItemCount", "cappedHeight", "fixedHeight", "exceedsMaxFiles", "allowReplace", "allowMultiple", "totalBrowseItems", "hasMaxItems", "getDragIndex", "toggleDrop", "isAllowed", "enabled", "beforeDropFile", "dropValidation", "toggleBrowse", "togglePaste", "createApp", "initialOptions", "originalElement", "visibilityHandler", "resizeDoneTimer", "isResizing", "isResizingHorizontally", "initialWindowWidth", "currentWindowWidth", "resizeHandler", "isHidden", "readWriteApi", "routeActionsToEvents", "createEvent", "eventRoutes", "exposeEvent", "detail", "filtered", "prepareFile", "addFile", "addFiles", "isFilePondFile", "removeFile", "sources", "lastArgument", "processFile", "prepareFiles", "processFiles", "_len3", "_key3", "removeFiles", "_len4", "_key4", "mappedQueries", "q", "createAppObject", "customOptions", "app", "lowerCaseFirstLetter", "attributeNameToPropertyName", "attributeName", "mapObject", "propertyMap", "selector", "mapping", "selectorRegExp", "getAttributesAsObject", "attributeMapping", "output", "attribute", "createAppAtElement", "mergedOptions", "attributeOptions", "createApp$1", "PRIVATE_METHODS", "createAppAPI", "replaceInString", "replacements", "match", "createWorker", "workerBlob", "workerURL", "worker", "transferList", "loadImage", "img", "renameFile", "renamedFile", "copyFile", "registeredPlugins", "createAppPlugin", "plugin", "pluginOutline", "isOperaMini", "hasPromises", "hasBlobSlice", "hasCreateObjectURL", "hasVisibility", "hasTiming", "hasCSSSupports", "isIE11", "supported", "isSupported", "updateOptionTypes", "hook", "indexToRemove", "matchedHooks", "newHooks", "newHook", "plugins", "update_additional_info_exports", "__export", "updateAdditionalInfo", "target", "options", "value", "make_request_default", "json", "element", "showToastMessage", "err", "init_update_additional_info", "__esmMin", "init_show_toast_message", "init_make_request", "require_dayjs_min", "__commonJSMin", "exports", "module", "t", "n", "r", "s", "u", "a", "o", "c", "f", "h", "d", "l", "$", "y", "M", "e", "m", "v", "i", "g", "D", "p", "S", "_", "w", "O", "b", "k", "require_customParseFormat", "__commonJSMin", "exports", "module", "e", "t", "n", "r", "s", "a", "f", "h", "u", "i", "d", "c", "o", "l", "m", "M", "Y", "p", "v", "D", "g", "add_exports", "__export", "addFields", "target", "block", "id", "container", "association", "fields", "time", "regexp", "point", "lastElBeforeInsert", "copiedDiv", "showSubmitButton", "init_add", "__esmMin", "init_show_submit_buttons", "delete_exports", "__export", "deleteResource", "target", "block", "parentClass", "parentEl", "showSubmitButton", "init_delete", "__esmMin", "init_show_submit_buttons", "update_pozicia_exports", "__export", "updatePozicia", "parentName", "item", "i", "init_update_pozicia", "__esmMin", "html5sortable_es_exports", "__export", "sortable", "addData", "element", "key", "value", "removeData", "addEventListener", "eventName", "callback", "i", "store", "removeEventListener", "addAttribute", "attribute", "removeAttribute", "throttle", "fn", "threshold", "_this", "lastEventTimestamp", "args", "_i", "now", "findSortable", "event", "el", "findDragElement", "sortableElement", "options", "items", "filter", "itemlist", "ele", "sortableElements", "method", "sortableContainer", "opts", "serialize", "configKey", "defaultConfiguration", "reloadSortable", "listItems", "customPlaceholder", "tempContainer", "makePlaceholder", "enableSortable", "e", "target", "getEventTarget", "dragItem", "originItemsBeforeUpdate", "originIndex", "originElementIndex", "getIndex", "originContainer", "dragImage", "setDragImage", "draggingHeight", "getElementHeight", "draggingWidth", "getElementWidth", "dragging", "getDragging", "previousContainer", "destinationItemsBeforeUpdate", "item", "outTarget", "visiblePlaceholder", "stores", "data", "placeholder", "isInDom", "listsConnected", "originItems", "destinationContainer", "destinationItems", "destinationElementIndex", "destinationIndex", "debouncedDragOverEnter", "debounce", "pageX", "pageY", "thisHeight", "thisWidth", "placeholderIndex", "thisIndex", "deadZoneVertical", "deadZoneHorizontal", "offsetTop", "offset", "offsetLeft", "placeAfter", "elementMiddleVertical", "elementMiddleHorizontal", "insertAfter", "insertBefore", "placeholders", "onDragOverEnter", "Store", "insertNode", "getHandles", "defaultDragImage", "enableHoverClass", "removeItemEvents", "removeStoreData", "removeContainerEvents", "removeSortableData", "removeItemData", "destroySortable", "disableSortable", "init_html5sortable_es", "__esmMin", "nodes", "selector", "config", "mergedConfig", "rect", "func", "wait", "timeout", "elementList", "referenceNode", "newElement", "position", "customItemSerializer", "customContainerSerializer", "serializedItem", "serializedContainer", "serializedItems", "container", "placeholderClass", "_a", "style", "int", "sum", "draggedElement", "elementOffset", "customDragImage", "destination", "origin", "acceptFrom", "sel", "enable", "hoverClasses_1", "_b", "draggedItem", "ditem", "handles", "spanEl", "parent", "df_polozkas_exports", "__export", "dfPolozkasKeyupEvents", "e", "callCalcSumFunction", "d_vystavenia", "dajsObj", "dayjs", "digitsStr", "varSymbolEl", "readonly", "newDigit", "import_dayjs", "import_customParseFormat", "init_df_polozkas", "__esmMin", "init_utils", "customParseFormat", "isWindow", "thing", "Window", "realWindow", "win", "init", "window", "el", "document", "createTextNode", "ownerDocument", "wrap", "getWindow", "node", "defaultView", "object", "_typeof", "func", "is", "docFrag", "nodeType", "number", "bool", "string", "element", "_window", "test", "Element", "nodeName", "plainObject", "constructor", "toString", "array", "length", "splice", "beforeMove", "_ref", "interaction", "prepared", "name", "axis", "coords", "cur", "page", "y", "start", "client", "velocity", "x", "move", "_ref2", "iEvent", "opposite", "delta", "drag", "id", "install", "scope", "actions", "Interactable", "defaults", "prototype", "draggable", "map", "methodDict", "listeners", "arg", "interactable", "buttons", "dragOptions", "options", "enabled", "pointerIsDown", "pointerType", "mouseButtons", "action", "lockAxis", "startAxis", "this", "setPerAction", "setOnEvents", "getCursor", "filterEventType", "type", "search", "drag$1", "domObjects", "DocumentFragment", "blank", "SVGElement", "SVGSVGElement", "SVGElementInstance", "HTMLElement", "Event", "Touch", "PointerEvent", "MSPointerEvent", "domObjects$1", "browser", "navigator", "supportsTouch", "DocumentTouch", "supportsPointerEvent", "pointerEnabled", "isIOS", "platform", "isIOS7", "appVersion", "isIe9", "userAgent", "isOperaMobile", "appName", "prefixedMatchesSelector", "pEventTypes", "up", "down", "over", "out", "cancel", "wheelEvent", "browser$1", "nodeContains", "parent", "child", "contains", "parentNode", "closest", "selector", "matchesSelector", "host", "replace", "getParent", "getNodeParents", "limit", "parentParent", "parents", "unshift", "matchesUpTo", "getActualElement", "correspondingUseElement", "getElementClientRect", "clientRect", "getBoundingClientRect", "getClientRects", "left", "right", "top", "bottom", "width", "height", "getElementRect", "relevantWindow", "scroll", "scrollX", "documentElement", "scrollLeft", "scrollY", "scrollTop", "getPath", "path", "push", "trySelector", "value", "querySelector", "extend", "dest", "source", "prop", "getStringOptionResult", "target", "getRect", "resolveRectLike", "functionArgs", "returnValue", "apply", "rectToXY", "rect", "tlbrToXywh", "addEdges", "edges", "getOriginXY", "actionName", "actionOptions", "origin", "normalize", "filter", "arguments", "_typeOrPrefix", "result", "split", "forEach", "t", "_i2", "_listeners2", "l", "prefix", "p", "concat", "trim", "hypot", "Math", "sqrt", "VENDOR_PREFIXES", "pointerExtend", "__set", "_loop", "some", "indexOf", "Object", "defineProperty", "get", "set", "configurable", "copyCoords", "src", "timeStamp", "setZeroCoords", "targetObj", "isNativePointer", "pointer", "dom", "getXY", "xy", "getPageXY", "getPointerId", "pointerId", "identifier", "setCoords", "pointers", "pointerAverage", "getTouchPair", "event", "touches", "changedTouches", "average", "pageX", "pageY", "clientX", "clientY", "screenX", "screenY", "touchBBox", "minX", "min", "minY", "maxX", "max", "maxY", "touchDistance", "deltaSource", "sourceX", "sourceY", "dx", "dy", "touchAngle", "atan2", "PI", "getPointerType", "undefined", "getEventTargets", "composedPath", "domUtils", "currentTarget", "BaseEvent", "_classCallCheck", "immediatePropagationStopped", "propagationStopped", "_interaction", "_createClass", "key", "_proxy", "merge", "item", "from", "findIndex", "i", "find", "DropEvent", "_BaseEvent", "_inherits", "_super", "_createSuper", "dropState", "dragEvent", "_this", "call", "dropzone", "relatedTarget", "prev", "_this2", "rejected", "events", "enter", "stopImmediatePropagation", "activeDrops", "index", "arr", "deactivateEvent", "fire", "fireActivationEvents", "_i6", "_activeDrops$slice2", "slice", "_activeDrops$slice2$_", "getActiveDrops", "dragElement", "draggableElement", "drops", "_interactables$list2", "interactables", "list", "drop", "accept", "_i4", "_dropzone$getAllEleme2", "getAllElements", "dropzoneElement", "_i8", "activeDrop", "getDrop", "pointerEvent", "validDrops", "_i10", "_dropState$activeDrop2", "_dropState$activeDrop3", "isValid", "dropCheck", "dropIndex", "elements", "deepestNodeIndex", "higherNode", "lowerNode", "deepestNodeParents", "currentNode", "deepestNode", "currentNodeParent", "deepestNodeParent", "ancestryStart", "ownerSVGElement", "currentNodeParents", "commonIndex", "lastChild", "previousSibling", "parseInt", "getComputedStyle", "zIndex", "getDropEvents", "_pointerEvent", "dropEvents", "leave", "activate", "deactivate", "dragLeave", "prevDropzone", "dragEnter", "fireDropEvents", "onEventCreated", "_ref3", "dynamicDrop", "dropResult", "interact", "interactStatic", "usePlugin", "normalized", "normalizeListeners", "corrected", "keys", "reduce", "acc", "prevListeners", "off", "on", "ondrop", "ondropactivate", "ondropdeactivate", "ondragenter", "ondragleave", "ondropmove", "overlap", "checker", "dropElement", "dropped", "dropOverlap", "pointerUtils", "horizontal", "vertical", "dragRect", "cx", "cy", "newValue", "phaselessTypes", "dragenter", "dragleave", "dropactivate", "dropdeactivate", "dropmove", "_ref4", "_ref5", "_ref6", "_ref7", "drop$1", "updateGestureProps", "phase", "starting", "ending", "distance", "box", "scale", "ds", "angle", "da", "gesture", "startDistance", "startAngle", "prevEvent", "Infinity", "isNaN", "before", "gesturable", "gestureOptions", "gesture$1", "checkResizeEdge", "interactableElement", "margin", "abs", "edge", "updateEventAxes", "resizeAxes", "resizeEvent", "resize", "square", "axes", "request", "cursors", "topleft", "bottomright", "topright", "bottomleft", "defaultMargin", "resizable", "preserveAspectRatio", "_rects", "previous", "deltaRect", "invert", "invertible", "current", "_interaction$_rects", "startRect", "swap", "resizeOptions", "resizeEdges", "_latestPointer", "eventTarget", "NaN", "cursorKey", "_ref8", "resize$1", "lastTime", "raf", "callback", "token", "global", "requestAnimationFrame", "cancelAnimationFrame", "vendors", "vendor", "bind", "currTime", "Date", "now", "timeToCall", "setTimeout", "clearTimeout", "autoScroll", "container", "speed", "isScrolling", "prevTime", "stop", "getContainer", "dt", "s", "scrollBy", "prevScroll", "getScroll", "curScroll", "check", "_options$actionName$a", "onInteractionMove", "interacting", "simulation", "innerWidth", "innerHeight", "body", "autoScrollPlugin", "autoscroll", "perAction", "autoScroll$1", "warnOnce", "method", "message", "warned", "console", "warn", "copyAction", "styleCursor", "actionChecker", "InteractableMethods", "getAction", "button", "ignoreFrom", "_backCompatOption", "allowFrom", "validateAction", "testIgnoreAllow", "withinInteractionLimit", "validateMatches", "matches", "matchElements", "len", "match", "matchElement", "matchAction", "getActionInfo", "pushMatches", "forEachMatch", "actionInfo", "manualStart", "prepare", "setInteractionCursor", "maxActions", "maxPerElement", "autoStartMax", "autoStart", "maxInteractions", "activeInteractions", "interactableCount", "elementCount", "_scope$interactions$l2", "interactions", "otherAction", "setCursor", "cursor", "prevCursorElement", "cursorElement", "style", "cursorChecker", "_interacting", "base", "pointerWasMoved", "autoStart$2", "dragAxis", "absX", "absY", "targetOptions", "currentAxis", "getDraggable", "downPointer", "downEvent", "thisAxis", "getHoldDuration", "hold", "delay", "basePlugin", "autoStartHoldTimer", "duplicate", "hold$1", "preventDefault", "onInteractionEvent", "checkAndPreventDefault", "interactablePreventDefault", "setting", "supportsPassive", "doc", "docOptions", "getDocOptions", "passive", "docEvents", "listener", "eventType", "isNonNativeEvent", "substr", "phases", "clone", "Modification", "states", "startOffset", "startDelta", "endResult", "startEdges", "createResult", "pageCoords", "modifierList", "actionModifiers", "modifiers", "methods", "_methods", "m", "prepareStates", "fillArg", "preEnd", "startAll", "setAll", "_this$states2", "state", "skipModifiers", "unmodifiedRect", "unmodifiedEdges", "newResult", "_state$methods", "lastModifierCoords", "shouldDo", "rectUtils", "eventProps", "rectDelta", "prevCoords", "prevRect", "rectChanged", "changed", "curCoords", "startCoords", "curDelta", "_ref3$_i", "coordsSet", "modifiedCoords", "adjustment", "applyToInteraction", "doPreend", "endPosition", "beforeEnd", "modifierArg", "_this$states4", "_modifierList$index", "_ref4$interaction", "modification", "_modification$result", "_i12", "_ref6$_i", "requireEndOnly", "endOnly", "setStart", "other", "makeModifier", "module", "modifier", "_options", "enable", "disable", "_defaults", "addEventModifiers", "modifiersBase", "ret", "setAndApply", "restoreInteractionCoords", "InteractEvent", "ctrlKey", "shiftKey", "altKey", "metaKey", "x0", "y0", "t0", "duration", "clientX0", "clientY0", "swipe", "_assertThisInitialized", "downTime", "getSwipe", "velocityY", "velocityX", "defineProperties", "PointerInfo", "downTarget", "_ProxyValues", "_ProxyMethods", "idCounter", "Interaction", "scopeFire", "_scopeFire", "_ending", "_stopped", "doMove", "signalArg", "_id", "that", "_loop2", "_key", "pointerIndex", "updatePointer", "pointerInfo", "_doPhase", "duplicateMove", "pointerMoveTolerance", "getPointerIndex", "curEventTarget", "end", "removePointer", "endPhaseResult", "curPointer", "_now", "_updateLatestPointer", "_this$interactable", "_createPreparedEvent", "_fireEvent", "beforeAction", "applyPending", "offset", "pending", "addToCoords", "offsetBy", "total", "offset$1", "InertiaState", "active", "isModified", "smoothEnd", "allowResume", "modifierCount", "v0", "te", "targetOffset", "modifiedOffset", "currentOffset", "lambda_v0", "one_ve_v0", "timeout", "getOptions", "velocityClient", "pointerSpeed", "copyFrom", "minSpeed", "endSpeed", "startInertia", "startSmoothEnd", "startVelocity", "lambda", "resistance", "inertiaDur", "log", "onNextFrame", "inertiaTick", "smoothEndTick", "tickFn", "_this3", "startX", "startY", "cpX", "cpY", "endX", "endY", "position", "_this4", "newOffset", "progress", "exp", "_getQBezierValue", "_this5", "smoothEndDuration", "easeOutQuad", "inertia", "inertiastart", "resume", "p1", "p2", "p3", "iT", "b", "c", "d", "inertia$1", "fireUntilImmediateStopped", "Eventable", "types", "eventList", "_listeners$type2", "subListener", "_element", "FakeEvent", "originalEvent", "pExtend", "stopPropagation", "param", "capture", "optionsMatch", "a", "_scope$document", "targets", "delegatedEvents", "documents", "eventsMethods", "add", "remove", "addDelegate", "context", "optionalArg", "_i3", "delegateListener", "delegateUseCapture", "delegates", "delegate", "removeDelegate", "matchFound", "entry", "supportsOptions", "addEventListener", "removeEventListener", "targetIndex", "typeIsEmpty", "typeListeners", "hasOwnProperty", "fakeEvent", "_i5", "createElement", "finder", "methodOrder", "details", "_finder$methodOrder2", "simulationResume", "mouseOrPen", "firstNonActive", "_scope$interactions$l4", "hasPointerId", "_scope$interactions$l6", "hasPointer", "_scope$interactions$l8", "idle", "_scope$interactions$l10", "finder$1", "methodNames", "doOnInteractions", "_pointerUtils$getEven", "prevTouchTime", "_event$changedTouches2", "changedTouch", "searchDetails", "getInteraction", "invalidPointer", "_matches$_i", "new", "onDocSignal", "eventMethodName", "eventMethod", "eventOptions", "_i14", "_docEvents$_i", "releasePointersOnRemovedEls", "_interaction$pointers2", "pointerDown", "pointerMove", "pointerUp", "documentBlur", "_InteractionBase", "_class", "InteractionBase", "destroy", "interactions$1", "OnOffMethod", "defaultContext", "scopeEvents", "_actions", "_context", "_win", "_doc", "_scopeEvents", "onstart", "onmove", "onend", "oninertiastart", "_this$_actions$map$ac", "actionFilter", "_onOff", "Off", "On", "optionName_", "optionName", "optionValue", "updatePerActionListeners", "Array", "querySelectorAll", "targetNode", "testIgnore", "testAllow", "typeArg", "listenerArg", "_listeners$_type2", "actionName_", "methodName", "rectChecker", "delegated", "_delegated$i", "InteractableSet", "selectorMap", "addListeners", "interactablesOnTarget", "addDocument", "isSelector", "inContext", "_this$list2", "Scope", "floor", "random", "isInitialized", "listenerMaps", "getExisting", "globalEvents", "getPointerAverage", "getTouchBBox", "getTouchDistance", "getTouchAngle", "version", "process", "use", "plugin", "isSet", "_type2", "debug", "_this$scope$interacti2", "removeDocument", "_plugins", "onWindowUnload", "_InteractableBase", "_class2", "_get", "_getPrototypeOf", "InteractableBase", "_this$listenerMaps2", "pluginIsInstalled", "pluginIdRoot", "otherId", "getDocIndex", "docIndex", "interact$1", "_global", "globalThis", "fn", "grid", "coordFields", "xField", "yField", "gridFunc", "range", "_grid$limits", "limits", "_grid$offset", "_coordFields$_i", "gridx", "round", "gridy", "snappersPlugin", "snappers", "allSnappers", "createSnapGrid", "aspectRatio", "_state$options", "ratio", "_state$options2", "equalDelta", "linkedEdges", "xIsPrimaryAxis", "sign", "edgeSign", "subModification", "_objectSpread", "initialCoords", "aspectMethod", "setEqualDelta", "setRatio", "correctedRect", "newHeight", "newWidth", "aspectRatio$1", "noop", "rubberband", "getRestrictionRect", "restrict", "elementRect", "restriction", "widthDiff", "heightDiff", "restrict$1", "noInner", "noOuter", "fixRect", "restrictEdges", "inner", "outer", "restrictEdges$1", "_", "restrictRect$1", "noMin", "noMax", "restrictSize$1", "minSize", "maxSize", "snap", "snapOffset", "offsetWithOrigin", "optionsOrigin", "offsetRect", "relativePoints", "offsets", "relativePoint", "relativeX", "relativeY", "snapTarget", "inRange", "snap$1", "snapSize", "targetFields", "relative", "_state$targetFields2", "_state$targetFields2$", "snapSize$1", "all", "restrictRect", "restrictSize", "snapEdges", "spring", "avoid", "transform", "_all", "modifiers$1", "interval", "tapTime", "double", "prevTap", "originX", "originY", "pointerEvents", "clearHold", "timer", "minDuration", "_signalArg$targets2", "holdDuration", "eventable", "collectEventTargets", "tap", "doubletap", "_arg$targets", "props", "_subtractOrigin", "_addOrigin", "_interaction$pointers", "Nn", "Bn", "endHoldRepeat", "holdIntervalHandle", "clearInterval", "holdRepeat", "holdRepeatInterval", "holdrepeat", "enderTypes", "count", "holdRepeat$1", "__backCompatOption", "interactableTargets", "reflow", "Promise", "promises", "reflowPromise", "runningInteraction", "_reflowPromise", "resolve", "_reflowResolve", "xywh", "then", "reflow$1", "default", "exports", "delay_exports", "__export", "delay", "init_delay", "__esmMin", "timer", "callback", "ms", "form_serializer_exports", "__export", "serializeFormData", "data", "model", "name", "formData", "key", "parts", "modelName", "variableName", "index", "keyName", "init_form_serializer", "__esmMin", "require_quarterOfYear", "__commonJSMin", "exports", "module", "t", "n", "e", "i", "r", "s", "u", "o", "b", "a", "c", "d", "g", "e", "f", "h", "i", "j", "k", "l", "m", "module", "turbo_es2017_esm_exports", "__export", "FetchEnctype", "FetchMethod", "FetchRequest", "FetchResponse", "FrameElement", "FrameLoadingStyle", "FrameRenderer", "PageRenderer", "PageSnapshot", "StreamActions", "StreamElement", "StreamSourceElement", "cache", "clearCache", "config", "connectStreamSource", "disconnectStreamSource", "fetchWithTurboHeaders", "fetchEnctypeFromString", "fetchMethodFromString", "isSafe", "navigator$1", "registerAdapter", "renderStreamMessage", "session", "setConfirmMethod", "setFormMode", "setProgressBarDelay", "start", "visit", "prototype", "submitter", "validateSubmitter", "form", "raise", "errorConstructor", "message", "name", "submittersByForm", "findSubmitterFromClickTarget", "target", "element", "candidate", "clickCaptured", "event", "prototypeOfSubmitEvent", "FrameLoadingStyle", "_FrameElement", "value", "frameLoadingStyleFromString", "FrameElement", "__publicField", "style", "drive", "activateScriptElement", "createdScriptElement", "cspNonce", "getCspNonce", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "cancelable", "detail", "cancelEvent", "nextRepaint", "nextEventLoopTick", "nextAnimationFrame", "resolve", "nextMicrotask", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "uuid", "_", "i", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "action", "isAction", "getVisitAction", "getMetaElement", "getMetaContent", "nonce", "content", "setMetaContent", "findClosestRecursively", "selector", "elementIsFocusable", "inertDisabledOrHidden", "queryAutofocusableElement", "elementOrDocumentFragment", "around", "callback", "reader", "before", "after", "doesNotTargetIFrame", "findLinkFromClickTarget", "getLocationForLink", "link", "expandURL", "debounce", "fn", "delay", "timeoutId", "args", "Config", "#submitter", "config", "forms", "locatable", "getAnchor", "url", "anchorMatch", "getAction$1", "getExtension", "getLastPathComponent", "isPrefixedBy", "baseURL", "prefix", "getPrefix", "locationIsVisitable", "location", "rootLocation", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "addTrailingSlash", "FetchResponse", "response", "LimitedSet", "maxSize", "oldestValue", "recentRequests", "nativeFetch", "fetchWithTurboHeaders", "options", "modifiedHeaders", "requestUID", "fetchMethodFromString", "method", "FetchMethod", "fetchEnctypeFromString", "encoding", "FetchEnctype", "FetchRequest", "#resolveRequestPromise", "_value", "delegate", "requestBody", "enctype", "body", "buildResourceAndBody", "fetchBody", "fetchMethod", "fetchOptions", "#allowRequestToBeIntercepted", "error", "#willDelegateErrorHandling", "fetchResponse", "isSafe", "mimeType", "requestInterception", "resource", "searchParams", "entriesExcludingFiles", "mergeIntoURLSearchParams", "entries", "AppearanceObserver", "StreamMessage", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "PREFETCH_DELAY", "PrefetchCache", "#prefetchTimeout", "#prefetched", "request", "ttl", "cacheTtl", "prefetchCache", "FormSubmissionState", "FormSubmission", "formElement", "mustRedirect", "getMethod", "getAction", "getFormAction", "buildFormData", "getEnctype", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "formElementAction", "formAction", "Snapshot", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "View", "#resolveRenderPromise", "#resolveInterceptionPromise", "x", "y", "renderer", "isPreview", "shouldRender", "willRender", "shouldInvalidate", "renderInterception", "reason", "direction", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "Renderer", "#activeElement", "currentElement", "newElement", "currentSnapshot", "newSnapshot", "reject", "FrameRenderer", "destinationRange", "frameElement", "sourceRange", "renderElement", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "Idiomorph", "EMPTY_SET", "defaults", "noOp", "elt", "morph", "oldNode", "newContent", "parseContent", "normalizedContent", "normalizeContent", "ctx", "createMorphContext", "morphNormalizedContent", "normalizedNewContent", "oldHead", "newHead", "promises", "handleHeadElement", "morphChildren", "bestMatch", "findBestNodeMatch", "previousSibling", "nextSibling", "morphedNode", "morphOldNodeTo", "insertSiblings", "ignoreValueOfActiveElement", "possibleActiveElement", "isSoftMatch", "syncNodeFrom", "newParent", "oldParent", "nextNewChild", "insertionPoint", "newChild", "removeIdsFromConsideration", "isIdSetMatch", "idSetMatch", "findIdSetMatch", "removeNodesBetween", "softMatch", "findSoftMatch", "tempNode", "removeNode", "ignoreAttribute", "attr", "to", "updateType", "from", "fromAttributes", "toAttributes", "fromAttribute", "toAttribute", "syncInputValue", "syncBooleanAttribute", "ignoreUpdate", "fromValue", "toValue", "newHeadTag", "currentHead", "added", "removed", "preserved", "nodesToAppend", "headMergeStyle", "srcToNewHeadNodes", "newHeadChild", "currentHeadElt", "inNewContent", "isReAppended", "isPreserved", "newNode", "newElt", "promise", "_resolve", "removedElement", "mergeDefaults", "finalConfig", "createIdMap", "node1", "node2", "getIdIntersectionCount", "startInclusive", "endExclusive", "newChildPotentialIdCount", "potentialMatch", "otherMatchCount", "potentialSoftMatch", "siblingSoftMatchCount", "parser", "contentWithSvgsRemoved", "htmlElement", "dummyParent", "stack", "bestElement", "score", "newScore", "scoreElement", "isIdInConsideration", "idIsWithinNode", "targetNode", "idSet", "sourceSet", "matchCount", "populateIdMapForNode", "idMap", "nodeParent", "idElements", "current", "oldContent", "morphElements", "callbacks", "DefaultIdiomorphCallbacks", "#beforeNodeMorphed", "beforeNodeMorphed", "mutationType", "MorphingFrameRenderer", "_ProgressBar", "ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "tagName", "PageSnapshot", "documentElement", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "index", "source", "option", "clonedPasswordInput", "root", "ViewTransitioner", "#viewTransitionStarted", "#lastOperation", "useViewTransition", "render", "defaultOptions", "TimingMetric", "VisitState", "SystemStatusCode", "Direction", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "session", "visit", "_visit", "_formSubmission", "CacheObserver", "FrameRedirector", "_location", "#shouldRedirect", "frame", "#findFrameElement", "#shouldSubmit", "meta", "History", "state", "additionalData", "restorationData", "turbo", "restorationIndex", "LinkPrefetchObserver", "#prefetchedLink", "#enable", "#tryToPrefetchRequest", "#cancelRequestIfObsolete", "#tryToUsePrefetchedRequest", "#isPrefetchable", "fetchRequest", "#cacheTtl", "#cancelPrefetchRequest", "cached", "turboFrameTarget", "unfetchableLink", "linkToTheSamePage", "linkOptsOut", "nonSafeLink", "eventPrevented", "turboPrefetchParent", "turboMethod", "isUJS", "Navigator", "formSubmission", "visitOptions", "#getActionForFormSubmission", "currentAnchor", "isRestorationToTop", "oldURL", "newURL", "#getDefaultAction", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "withAutofocusFromFragment", "withPreservedFocus", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "generatedID", "turboStreams", "elementWithAutofocus", "firstAutofocusableElementInStreams", "willAutofocusId", "elementToAutofocus", "activeElementBeforeRender", "activeElementAfterRender", "restoreFocusTo", "elementToFocus", "nodeListOfStreamElements", "StreamObserver", "#started", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "replaceableElement", "parentNode", "PageRenderer", "#setLanguage", "lang", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "MorphingPageRenderer", "canRefreshFrame", "SnapshotCache", "size", "key", "PageView", "rendererClass", "cachedSnapshot", "Preloader", "snapshotCache", "#preloadAll", "Cache", "#setCacheControl", "Session", "#pageRefreshDebouncePeriod", "adapter", "requestId", "isUnsafe", "isStream", "frameTarget", "extendURLWithDeprecatedProperties", "defaultPrevented", "_snapshot", "_isPreview", "renderMethod", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "cache", "navigator$1", "start", "registerAdapter", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "clearCache", "setProgressBarDelay", "setConfirmMethod", "confirmMethod", "setFormMode", "mode", "Turbo", "TurboFrameMissingError", "FrameController", "_fetchResponse", "#currentFetchRequest", "#resolveVisitPromise", "#connected", "#hasBeenLoaded", "#ignoredAttributes", "#shouldMorphFrame", "#loadSourceURL", "#isIgnoringChangesTo", "refresh", "src", "#visit", "document", "#loadFrameResponse", "#handleUnvisitableFrameResponse", "#shouldInterceptNavigation", "#navigateFrame", "newFrame", "_renderMethod", "_newElement", "newFrameElement", "#willHandleFrameMissingFromResponse", "#handleFrameMissingFromResponse", "#withCurrentNavigationElement", "pageSnapshot", "#visitResponse", "#throwFrameMissingError", "wrapped", "getFrameElementById", "activateElement", "#formActionIsVisitable", "sourceURL", "#ignoringChangesToAttribute", "currentURL", "StreamActions", "e", "targetElement", "StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "#raise", "StreamSourceElement", "consumer", "getConsumer", "setConsumer", "createConsumer", "newConsumer", "subscribeTo", "channel", "mixin", "subscriptions", "walk", "obj", "acc", "key", "camel", "m", "x", "TurboCableStreamSourceElement", "connectStreamSource", "subscribeTo", "disconnectStreamSource", "data", "event", "channel", "signed_stream_name", "walk", "__publicField", "encodeMethodIntoRequestBody", "event", "form", "fetchOptions", "submitter", "body", "isBodyInit", "method", "determineFetchMethod", "formMethod", "determineFormMethod", "overrideMethod", "turbo_es2017_esm_exports", "encodeMethodIntoRequestBody", "import_notifications_channel", "init_consumer", "consumer_default", "data", "url", "params", "forcedReload", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filteres", "modifiers", "meta", "ctrl", "alt", "shift", "modifier", "standardFilter", "params", "pattern", "name", "match", "typecast", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "method", "actionDescriptorFilters", "passes", "filter", "target", "currentTarget", "actionEvent", "identifier", "controller", "ElementObserver", "delegate", "mutations", "callback", "mutation", "node", "attributeName", "nodes", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "camelizedName", "outletController", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeFromObject", "defaultValueType", "propertyPath", "parseValueTypeDefinition", "typeFromDefaultValue", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "application", "account_assignments_index_controller_default", "Controller", "init_utils", "init_show_submit_buttons", "agent_global_prompts_index_controller_default", "Controller", "popupHelpers", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "e", "selectEl", "href", "url", "init_utils", "init_show_submit_buttons", "agent_local_prompts_controller_default", "Controller", "popupHelpers", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "charCount", "init_utils", "ai_accounting_wrapper_controller_default", "Controller", "open", "init_utils", "init_show_toast_message", "FilePond", "sk_sk_default", "init_show_toast_message", "init_make_request", "init_tom_select", "initializeFilePond", "dragAndDrop", "url", "okruhId", "priznak", "sk_sk_default", "pond", "data", "json", "showToastMessage", "response", "formData", "error", "f", "make_request_default", "destroyFilePond", "label", "selectBoxes", "initializeTomSelect", "attachment_controller_default", "Controller", "visibleButtons", "hiddenButtons", "button", "id", "json", "getJSON", "html", "err", "showToastMessage", "attributes", "postJSON", "status", "message", "confirmMessage", "deleteJSON", "url", "jsonWithHTML", "attachmentsEl", "destroyFilePond", "initializeFilePond", "label", "bank_ucets_controller_default", "Controller", "e", "code", "__publicField", "init_utils", "bank_vypises_controller_default", "Controller", "popupHelpers", "init_window_manager", "init_update_additional_info", "init_show_toast_message", "init_make_request", "bank_vypises_index_controller_default", "Controller", "url", "filterId", "openURL", "e", "updateAdditionalInfo", "make_request_default", "response", "element", "err", "showToastMessage", "importDiv", "select", "datumOd", "value", "bankUcet", "parent", "unicreditType", "fioType", "defaultType", "selectedOption", "name", "__publicField", "canvas_controller_default", "Controller", "close_offcanvas_controller_default", "Controller", "canvas", "button", "init_utils", "import_dayjs", "import_customParseFormat", "danovy_pomer_selectbox_controller_default", "Controller", "reloadDanovyPomerOptions", "open", "dayjs", "customParseFormat", "init_add", "init_tom_select", "init_utils", "init_show_submit_buttons", "init_window_manager", "init_delete", "danovy_pomers_index_controller_default", "Controller", "popupHelpers", "onSyntUcetChange", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "openURL", "deleteResource", "init_window_manager", "init_utils", "init_tom_select", "df_polozkas_controller_default", "Controller", "eightyPercent", "openURL", "target", "predmet", "dphPerc", "danovyPomer", "e", "parent", "danovyPomerWrapperController", "getStimulusController", "copied", "select", "element", "htmlEl", "initializeTomSelect", "formatNumber", "parseNumber", "sumaSdphVal", "dphPercVal", "callCalcSumFunction", "parentEl", "newEl", "el", "controller", "event", "init_utils", "differences_controller_default", "Controller", "onSyntUcetChange", "init_utils", "init_add", "init_delete", "init_window_manager", "init_tom_select", "init_utils", "fillCiselnyRadOnEvidChange", "target", "presetValue", "ciselnyRadEl", "tomselectObj", "json", "getJSON", "concated", "allowClear", "textRegex", "cr", "err", "init_show_toast_message", "init_show_submit_buttons", "init_utils", "import_dayjs", "import_customParseFormat", "_getSampleNumbering", "getSampleNumbering_fn", "dodaci_lists_controller_default", "Controller", "__privateAdd", "popupHelpers", "open", "onPartnerChange", "onDodavatelChange", "dayjs", "customParseFormat", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "deleteResource", "openURL", "fillCiselnyRadOnEvidChange", "element", "json", "__privateMethod", "level1", "showSubmitButton", "showToastMessage", "target", "rate", "getJSON", "formatNumber", "err", "url", "postJSON", "init_update_additional_info", "init_utils", "dodaci_lists_index_controller_default", "Controller", "showRecord", "updateAdditionalInfo", "init_window_manager", "init_utils", "dodaci_lists_new_controller_default", "Controller", "copy", "openURL", "getStimulusController", "init_show_submit_buttons", "form_changes_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "init_utils", "init_show_toast_message", "init_utils", "dodaci_lists_show_controller_default", "form_changes_controller_default", "showRecord", "initializeFilePond", "destroyFilePond", "e", "target", "confirmMessage", "json", "deleteJSON", "status", "turboStream", "err", "showToastMessage", "init_utils", "init_add", "init_delete", "init_update_pozicia", "init_html5sortable_es", "init_show_submit_buttons", "init_df_polozkas", "init_window_manager", "lastItemOf", "arr", "pushUnique", "items", "item", "stringToArray", "str", "separator", "isInRange", "testVal", "min", "max", "minOK", "maxOK", "limitToRange", "val", "createTagRepeat", "tagName", "repeat", "attributes", "index", "html", "src", "attr", "next", "optimizeTemplateHTML", "stripTime", "timeValue", "today", "dateValue", "args", "newDate", "addDays", "date", "amount", "addWeeks", "addMonths", "monthsToSet", "expectedMonth", "time", "addYears", "dayDiff", "day", "from", "dayOfTheWeekOf", "baseDate", "dayOfWeek", "weekStart", "baseDay", "calcWeekNum", "dayOfTheWeek", "sameDayOfFirstWeek", "getIsoWeek", "thuOfTheWeek", "firstThu", "calcTraditionalWeekNumber", "startOfFirstWeek", "startOfTheWeek", "weekNum", "weekOneOfNextYear", "getWesternTradWeek", "getMidEasternWeek", "startOfYearPeriod", "years", "year", "regularizeDate", "timeSpan", "useLastDate", "reFormatTokens", "reNonDateParts", "knownFormats", "parseFns", "date", "year", "month", "locale", "newDate", "monthIndex", "monthName", "compareNames", "name", "normalizeMonth", "day", "formatFns", "padZero", "num", "length", "parseFormatString", "format", "separators", "parts", "partFormatters", "token", "partParserKeys", "keys", "key", "part", "dateStr", "dateParts", "dtParts", "index", "origDate", "today", "str", "fn", "lastItemOf", "parseDate", "stripTime", "formatDate", "dateObj", "range", "parseHTML", "html", "getParent", "el", "isActiveElement", "hideElement", "el", "showElement", "emptyChildNodes", "replaceChildNodes", "newChildNodes", "parseHTML", "node", "listenerRegistry", "addEventListener", "removeEventListener", "registerListeners", "keyObj", "listeners", "registered", "listener", "unregisterListeners", "getComposedPath", "node", "path", "parent", "findFromPath", "criteria", "currentTarget", "rest", "findElementInEventPath", "ev", "selector", "el", "base_locales_default", "defaultOptions_default", "defaultLang", "defaultFormat", "defaultWeekStart", "defaultOptions_default", "sanitizeDOW", "dow", "day", "pushUnique", "determineGetWeekMethod", "numberingMode", "weekStart", "getIsoWeek", "getWesternTradWeek", "getMidEasternWeek", "updateWeekStart", "newValue", "config", "weekNumbers", "validateDate", "value", "format", "locale", "origValue", "date", "parseDate", "validateViewId", "max", "viewId", "replaceOptions", "options", "from", "to", "convert", "processOptions", "datepicker", "inOpts", "locales", "rangeEnd", "datesDisabled", "language", "maxDate", "maxView", "minDate", "pickLevel", "startView", "val", "lang", "origLocale", "hasToDisplay", "hasToValue", "validFormatString", "reFormatTokens", "newPickLevel", "minDt", "maxDt", "defaultMinDt", "dateValue", "regularizeDate", "dtsDisabled", "timeValue", "disabled", "dates", "dt", "viewDate", "wkStart", "method", "getWeekNumber", "startOfWeek", "maxNumberOfDates", "newMaxView", "newStartView", "prevArrow", "parseHTML", "nextArrow", "orientation", "x", "y", "key", "defaultShortcutKeys", "createShortcutKeyConfig", "options", "keyDefs", "shortcut", "keyDef", "key", "normalizedDef", "getButtons", "buttonList", "classes", "pickerTemplate_default", "optimizeTemplateHTML", "daysTemplate_default", "optimizeTemplateHTML", "createTagRepeat", "weekNumbersTemplate_default", "optimizeTemplateHTML", "createTagRepeat", "View", "picker", "config", "parseHTML", "options", "switchLabel", "prevButtonDisabled", "nextButtonDisabled", "date", "classList", "pushUnique", "el", "timeValue", "result", "extraClasses", "replaceChildNodes", "content", "cellVal", "selected", "range", "outOfScope", "rangeStart", "rangeEnd", "cellIndex", "DaysView", "View", "picker", "options", "onConstruction", "inner", "parseHTML", "daysTemplate_default", "updateDOW", "locale", "weeksElem", "weekNumbersTemplate_default", "showElement", "hideElement", "el", "index", "dow", "viewDate", "viewYear", "viewMonth", "firstOfMonth", "dateValue", "start", "dayOfTheWeekOf", "dates", "rangepicker", "today", "formatDate", "weekStart", "startOfWeek", "dateOfWeekStart", "addWeeks", "current", "addDays", "dateObj", "day", "extraClasses", "range", "computeMonthRange", "range", "thisYear", "startY", "startM", "endY", "endM", "MonthsView", "View", "picker", "options", "onConstruction", "parseHTML", "createTagRepeat", "ix", "minDateObj", "maxDateObj", "dateValue", "viewDate", "dates", "rangepicker", "selected", "timeValue", "date", "year", "month", "pushUnique", "yrOutOfRange", "isMinYear", "isMaxYear", "el", "index", "regularizeDate", "toTitleCase", "word", "str", "ch", "ix", "YearsView", "View", "picker", "config", "options", "onConstruction", "parseHTML", "createTagRepeat", "startOfYearPeriod", "dateValue", "beforeShow", "viewDate", "first", "last", "dates", "rangepicker", "years", "timeValue", "pushUnique", "el", "index", "current", "date", "regularizeDate", "range", "triggerDatepickerEvent", "datepicker", "type", "options", "goToPrevOrNext", "direction", "config", "picker", "currentView", "viewDate", "newViewDate", "addMonths", "addYears", "limitToRange", "switchView", "viewId", "clearSelection", "goToOrSelectToday", "currentDate", "today", "unfocus", "onBlur", "element", "isActiveElement", "goToSelectedMonthOrYear", "datepicker", "selection", "picker", "viewDate", "viewId", "newDate", "addMonths", "addYears", "onClickViewSwitch", "switchView", "onClickPrevButton", "goToPrevOrNext", "onClickNextButton", "onClickView", "ev", "target", "findElementInEventPath", "id", "isMinView", "data", "onMousedownPicker", "orientClasses", "obj", "key", "toPx", "num", "processPickerOptions", "picker", "options", "showElement", "hideElement", "prevButton", "emptyChildNodes", "node", "nextButton", "minDate", "maxDate", "isInRange", "today", "computeResetViewDate", "datepicker", "dates", "config", "rangeSideIndex", "viewDate", "lastItemOf", "regularizeDate", "limitToRange", "setViewDate", "newDate", "id", "year", "first", "last", "viewYear", "getTextDirection", "el", "findScrollParents", "parent", "getParent", "Picker", "inputField", "template", "pickerTemplate_default", "element", "parseHTML", "header", "main", "footer", "title", "viewSwitch", "todayButton", "clearButton", "controls", "elementClass", "registerListeners", "onMousedownPicker", "onClickView", "onClickViewSwitch", "onClickPrevButton", "onClickNextButton", "goToOrSelectToday", "clearSelection", "DaysView", "MonthsView", "YearsView", "view", "inputDirection", "triggerDatepickerEvent", "classList", "style", "calendarWidth", "calendarHeight", "offsetParent", "inputLeft", "inputTop", "inputRight", "inputBottom", "inputWidth", "inputHeight", "orientX", "orientY", "left", "top", "offsetParentRect", "scrollParent", "scrollAreaLeft", "scrollAreaTop", "scrollAreaRight", "scrollAreaBottom", "scrollParentRect", "adjustment", "labelText", "disabled", "viewId", "currentView", "newViewDate", "quickRender", "oldView", "oldViewDate", "renderMethod", "findNextAvailableOne", "date", "addFn", "increase", "testFn", "min", "max", "isInRange", "newDate", "moveByArrowKey", "datepicker", "direction", "vertical", "picker", "currentView", "step", "viewDate", "addDays", "addMonths", "addYears", "onKeydown", "ev", "config", "editMode", "active", "key", "altKey", "shiftKey", "ctrlOrMetaKey", "cancelEvent", "unfocus", "shortcutKeys", "keyInfo", "shortcut", "item", "keyDef", "prop", "action", "goToPrevOrNext", "switchView", "clearSelection", "goToOrSelectToday", "handleArrowKeyPress", "onFocus", "onMousedown", "el", "isActiveElement", "onClickInput", "onPaste", "onClickOutside", "datepicker", "ev", "element", "picker", "isActiveElement", "pickerElem", "findElementInEventPath", "el", "unfocus", "stringifyDates", "dates", "config", "dt", "formatDate", "processInputDates", "datepicker", "inputDates", "clear", "origDates", "rangeSideIndex", "pickLevel", "maxNumberOfDates", "newDates", "date", "parseDate", "regularizeDate", "isInRange", "refreshUI", "mode", "quickRender", "viewDate", "picker", "inputField", "newView", "setDate", "options", "render", "autohide", "revert", "forceRefresh", "triggerDatepickerEvent", "getOutputConverter", "format", "Datepicker", "element", "rangepicker", "today", "processOptions", "defaultOptions_default", "index", "datepickers", "createShortcutKeyConfig", "initialDates", "stringToArray", "inputDateValues", "Picker", "keydownListener", "onKeydown", "registerListeners", "onFocus", "onMousedown", "onClickInput", "onPaste", "onClickOutside", "lang", "base_locales_default", "dateStr", "newOptions", "isActiveElement", "unregisterListeners", "callback", "args", "opts", "lastArg", "lastItemOf", "resetView", "active", "newViewDate", "target", "forceRender", "sk_default", "Datepicker", "sk_default", "initializeVanillajsDatepicker", "input", "init_tom_select", "_add", "add_fn", "_initSortable", "initSortable_fn", "_destroySortable", "destroySortable_fn", "_invoicedItemSortableCallback", "invoicedItemSortableCallback_fn", "_bAccountSortableCallback", "bAccountSortableCallback_fn", "_refreshLabel", "refreshLabel_fn", "dodavatels_controller_default", "Controller", "__privateAdd", "onSyntUcetChange", "__privateMethod", "dfPolozkasKeyupEvents", "fillCiselnyRadOnEvidChange", "openURL", "deleteResource", "parentName", "parent", "updatePozicia", "addFields", "copiedDiv", "_", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "container", "item", "callback", "sortable", "showSubmitButton", "btn", "el", "labelEl", "init_utils", "dodavatels_index_controller_default", "Controller", "simpleCardMethods", "init_show_submit_buttons", "dodavatels_show_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "init_utils", "init_window_manager", "init_show_toast_message", "init_make_request", "import_dayjs", "init_tom_select", "import_customParseFormat", "dosla_fakturas_controller_default", "Controller", "popupHelpers", "updateDanovyPomerSelectboxes", "onPartnerChange", "onDodavatelChange", "dayjs", "customParseFormat", "module", "sumaSDph", "utils", "zlavaPercVal", "parseNumber", "cenySuSDphBool", "cenaDokopyVal", "cenaDokopySCiastocnymi", "sumaPoloziek", "sumaZaloh", "sadzby", "sadzbyZalohy", "item", "dphPercVal", "cenaSpolu", "zlava", "dphPerc", "sumaPoCelkZlaveVal", "round", "sumaPoCelkZlave", "formatNumber", "cenaDokopySCiastocnymiVal", "sumaPoloziekVal", "sumaZalohVal", "cenaSpoluVal", "zlavaVal", "nodeList", "sums", "counter", "e", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "dphPercEl", "szcp", "select", "parent_name", "parent", "openURL", "cr", "target", "make_request_default", "response", "err", "showToastMessage", "dateVal", "rate", "oldCurrency", "newCurrency", "element", "fillCiselnyRadOnEvidChange", "evid", "cisRad", "pocetDniSplatnosti", "datumDodaniaTyp", "datumDodaniaHodnota", "forms", "d_dodania", "d_splatnosti", "dajsObj", "changeItemSzcp", "__publicField", "init_utils", "init_window_manager", "init_update_additional_info", "init_show_toast_message", "init_make_request", "dosla_fakturas_index_controller_default", "Controller", "url", "filterId", "openURL", "e", "updateAdditionalInfo", "make_request_default", "response", "element", "error", "showToastMessage", "__publicField", "init_window_manager", "dosla_fakturas_new_controller_default", "Controller", "e", "currentUrl", "copy", "openURL", "target", "varSymbolEl", "datumDodEl", "datumSplatEl", "displayedDfPolozkas", "sumaSDphEl", "name", "__publicField", "init_utils", "init_window_manager", "init_show_toast_message", "init_make_request", "import_dayjs", "dosla_fakturas_show_controller_default", "Controller", "__publicField", "showRecord", "updateZadanaUhradaLabels", "show_submit_buttons", "initializeFilePond", "destroyFilePond", "sumaVal", "el", "parseNumber", "parent", "make_request_default", "response", "err", "showToastMessage", "openURL", "select", "pokladna", "parentEl", "paymentEl", "sumaEl", "formatNumber", "dayjs", "init_utils", "init_add", "init_tom_select", "init_window_manager", "dosla_zalohova_fakturas_controller_default", "Controller", "popupHelpers", "updateDanovyPomerSelectboxes", "onDodavatelChange", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "szcp", "select", "url", "openURL", "init_show_toast_message", "init_make_request", "dosla_zalohova_fakturas_index_controller_default", "Controller", "module", "url", "filterId", "e", "make_request_default", "response", "element", "error", "showToastMessage", "__publicField", "init_window_manager", "dosla_zalohova_fakturas_new_controller_default", "Controller", "url", "openURL", "init_add", "init_delete", "init_window_manager", "init_tom_select", "_datumDdpEl", "_selectboxChanged", "selectboxChanged_fn", "_updateItemsCount", "updateItemsCount_fn", "_rokChanged", "rokChanged_fn", "_druhChanged", "druhChanged_fn", "dp_mvs_controller_default", "Controller", "__privateAdd", "__privateMethod", "deleteResource", "addFields", "copiedDiv", "_", "initializeTomSelect", "motoroveVozidloEl", "openURL", "countEl", "tomselect", "url", "value", "parent", "__privateGet", "init_show_submit_buttons", "init_utils", "download", "response", "filename", "blob", "newBlob", "blobUrl", "link", "init_window_manager", "init_show_toast_message", "dp_mvs_show_controller_default", "Controller", "__publicField", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "form", "submitter", "file", "formData", "el", "text", "postFormData", "download", "fnameWithTimestamp", "url", "e", "showToastMessage", "reasonEl", "parent", "urlObj", "openURL", "init_utils", "init_show_toast_message", "init_add", "init_delete", "import_interactjs", "init_window_manager", "statements_index_controller_default", "Controller", "context", "_type", "interact", "event", "x", "btn", "btnEl", "bsTarget", "accordionEl", "target", "accordionItemEl", "id", "e", "divEl", "href", "hospRokEl", "url", "openURL", "accordion", "accordionBtn", "dp_ppos_index_controller_default", "statements_index_controller_default", "context", "_", "method", "appendCanvas", "url", "expandedIds", "e", "key", "json", "getJSON", "table", "checkboxes", "err", "showToastMessage", "btn", "targetEl", "btnEl", "addFields", "deleteResource", "submitter", "data", "file", "response", "postFormData", "download", "reportFilename", "reportType", "fnameWithTimestamp", "reportTypeValue", "endpoint", "deleteJSON", "status", "message", "reasonEl", "parentEl", "init_utils", "init_window_manager", "init_update_additional_info", "init_show_toast_message", "init_make_request", "_icDphEl", "evidencia_dphs_index_controller_default", "Controller", "__privateAdd", "r32", "parseNumber", "r34", "diff", "formatNumber", "additionalDateDiv", "emailDiv", "mesiac", "stvrtrok", "updateAdditionalInfo", "target", "form", "r36", "r37", "r38", "make_request_default", "response", "e", "showToastMessage", "url", "tab", "urlObj", "openURL", "submitter", "type", "file", "__privateGet", "message", "text", "download", "fnameWithTimestamp", "div", "parent", "value", "err", "__publicField", "init_window_manager", "fakt_polozkies_controller_default", "Controller", "openURL", "init_utils", "init_delay", "init_show_toast_message", "init_window_manager", "fakt_sklad_polozkies_controller_default", "Controller", "showSkladovaKarta", "target", "pocetDesMiestVal", "withVat", "withoutVat", "formatNumber", "popover", "activeInput", "basicOption", "selectedOption", "selectedPrepocet", "finalPrice", "parseNumber", "event", "zalohovaSkladovaKarta", "delay", "element", "select", "parentEntryEl", "aktualneMnozstvo", "jednotky", "jednotkyKoef", "option", "key", "index", "newOption", "zakladnaOption", "predajnaCena", "dphPerc", "nakupnaCena", "cenaJednotkova", "dphPercVal", "cena", "openURL", "getStimulusController", "item", "showToastMessage", "value", "init_utils", "filters_controller_default", "Controller", "popupHelpers", "filters_new_controller_default", "Controller", "init_show_submit_buttons", "init_show_toast_message", "init_make_request", "filters_show_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "e", "make_request_default", "response", "err", "showToastMessage", "init_show_submit_buttons", "firma_public_invoicing_controller_default", "Controller", "tempSelect", "select", "showSubmitButton", "init_utils", "init_show_toast_message", "_setFirmaInfo", "setFirmaInfo_fn", "firma_publics_new_controller_default", "Controller", "__privateAdd", "form", "formData", "json", "postFormData", "status", "message", "showToastMessage", "err", "btnEl", "icoVal", "getJSON", "data", "__privateMethod", "key", "firmas_controller_default", "Controller", "isString", "str", "isObject", "obj", "_obj$constructor", "pick", "keys", "_", "k", "acc", "_ref", "v", "DIRECTION", "forceDirection", "direction", "escapeRegExp", "objectIncludes", "b", "a", "arrA", "arrB", "dateA", "dateB", "regexpA", "regexpB", "ActionDetails", "opts", "DIRECTION", "IMask", "el", "opts", "maskedClass", "mask", "IMask", "isString", "normalizeOpts", "opts", "instanceOpts", "isObject", "_mask", "pick", "_", "k", "createMask", "nOpts", "MaskedClass", "MaskElement", "start", "end", "IMask", "KEY_Z", "KEY_Y", "HTMLMaskElement", "MaskElement", "input", "_this$input$getRootNo", "_this$input$getRootNo2", "_this$input", "handlers", "IMask", "HTMLInputMaskElement", "HTMLMaskElement", "input", "start", "end", "value", "IMask", "HTMLContenteditableMaskElement", "HTMLMaskElement", "root", "selection", "anchorOffset", "focusOffset", "start", "end", "range", "value", "IMask", "InputHistory", "state", "steps", "InputMask", "el", "opts", "MaskElement", "HTMLContenteditableMaskElement", "HTMLInputMaskElement", "createMask", "InputHistory", "mask", "_this$masked", "IMask", "maskedClass", "masked", "str", "val", "ev", "e", "listeners", "l", "pos", "cursorPos", "newUnmaskedValue", "newValue", "newRawInputValue", "newDisplayValue", "isChanged", "restOpts", "updateMask", "updateOpts", "DIRECTION", "handler", "hIndex", "details", "ActionDetails", "oldRawValue", "offset", "removeDirection", "state", "ChangeDetails", "prep", "details", "IMask", "ContinuousTailDetails", "value", "from", "stop", "tail", "masked", "state", "beforePos", "shiftChar", "Masked", "opts", "state", "value", "flags", "cursorPos", "direction", "fromPos", "toPos", "ContinuousTailDetails", "tail", "isString", "ch", "ChangeDetails", "checkTail", "consistentState", "details", "noFixState", "fixDetails", "chDetails", "consistentTail", "appended", "beforeTailState", "i", "tailDetails", "str", "ci", "d", "fn", "rawInput", "ret", "start", "deleteCount", "inserted", "removeDirection", "DIRECTION", "tailPos", "eagerRemove", "oldRawValue", "forceDirection", "startChangePos", "valLength", "mask", "objectIncludes", "tval", "IMask", "ChunksTailDetails", "chunks", "from", "tailChunk", "isString", "ContinuousTailDetails", "lastChunk", "extendLast", "firstTailChunk", "masked", "IMask", "details", "ChangeDetails", "ci", "chunk", "lastBlockIter", "stop", "chunkBlock", "tailDetails", "remainChars", "c", "state", "props", "cstate", "beforePos", "chunkShiftPos", "shiftChar", "PatternCursor", "masked", "pos", "offset", "index", "s", "fn", "_this$block", "DIRECTION", "PatternFixedDefinition", "opts", "fromPos", "toPos", "ChangeDetails", "cursorPos", "direction", "DIRECTION", "minPos", "maxPos", "flags", "ch", "appendEager", "isResolved", "details", "ContinuousTailDetails", "tail", "isString", "str", "state", "PatternInputDefinition", "opts", "parent", "isOptional", "placeholderChar", "displayChar", "lazy", "eager", "maskOpts", "createMask", "fromPos", "toPos", "ChangeDetails", "ch", "flags", "state", "details", "str", "tail", "cursorPos", "direction", "DIRECTION", "minPos", "maxPos", "boundPos", "_flags$_beforeTailSta", "MaskedRegExp", "Masked", "opts", "mask", "value", "IMask", "MaskedPattern", "Masked", "opts", "PatternInputDefinition", "defs", "pattern", "unmaskingBlock", "optionalBlock", "i", "p", "bNames", "bName", "a", "b", "expose", "repeat", "bOpts", "normalizeOpts", "blockOpts", "maskedBlock", "IMask", "createMask", "char", "isInput", "def", "PatternFixedDefinition", "state", "_blocks", "maskedState", "bi", "str", "unmaskedValue", "tail", "value", "_this$_mapPosToBlock", "details", "ChangeDetails", "startBlockIndex", "d", "ch", "flags", "blockIter", "block", "_flags$_beforeTailSta", "blockDetails", "fromPos", "toPos", "chunkTail", "ChunksTailDetails", "bFromPos", "bToPos", "blockChunk", "input", "_", "blockIndex", "stopBefore", "si", "stop", "toBlockIndex", "startBlockIter", "endBlockIndex", "_blocks2", "pos", "accVal", "blockStartPos", "fn", "fromBlockIter", "toBlockIter", "isSameBlock", "fromBlockStartPos", "fromBlockEndPos", "removeDetails", "cursorPos", "direction", "DIRECTION", "cursor", "PatternCursor", "total", "name", "indices", "gi", "MaskedRange", "MaskedPattern", "opts", "to", "from", "maxLength", "autofix", "patternOpts", "fromStr", "toStr", "sameCharsCount", "str", "minstr", "maxstr", "placeholder", "num", "ch", "flags", "details", "ChangeDetails", "value", "padLength", "i", "IMask", "DefaultPattern", "MaskedDate", "MaskedPattern", "opts", "mask", "pattern", "patternOpts", "isString", "blocks", "patternBlocks", "flags", "date", "str", "value", "MaskedRange", "masked", "day", "month", "year", "IMask", "MaskedDynamic", "Masked", "opts", "m", "expose", "maskOpts", "normalizeOpts", "masked", "createMask", "ch", "flags", "details", "appended", "tail", "prevValueBeforeTail", "inputValue", "insertValue", "tailValue", "prevMask", "ChangeDetails", "prevMaskState", "_flags$_beforeTailSta", "_flags$_beforeTailSta2", "str", "s", "currentDetails", "_this$currentMask", "value", "unmaskedValue", "typedValue", "_this$currentMask2", "_this$currentMask3", "fromPos", "toPos", "_this$currentMask4", "state", "compiledMasks", "currentMaskRef", "currentMask", "maskedState", "mi", "cursorPos", "direction", "overwrite", "eager", "skipInvalid", "autofix", "mask", "oldMask", "restOpts", "objectIncludes", "_this$currentMask5", "inputs", "index", "isCurrent", "startInputPos", "DIRECTION", "i1", "i2", "IMask", "MaskedEnum", "MaskedPattern", "opts", "enum_", "eopts", "lengths", "e", "requiredLength", "optionalLength", "ch", "flags", "matchFrom", "DIRECTION", "matches", "b", "bi", "mch", "d", "ChangeDetails", "fromPos", "toPos", "ContinuousTailDetails", "pos", "details", "estr", "istr", "IMask", "MaskedFunction", "Masked", "opts", "IMask", "_MaskedNumber", "MaskedNumber", "Masked", "opts", "start", "mid", "end", "escapeRegExp", "value", "parts", "ch", "flags", "prepCh", "details", "to", "extendOnSeparators", "count", "pos", "slice", "fromPos", "toPos", "prevBeforeTailValue", "prevBeforeTailSeparatorsCount", "oldValue", "num", "accepted", "skip", "fixedNum", "appendDetails", "ChangeDetails", "beforeTailValue", "beforeTailSeparatorsCount", "searchFrom", "separatorPos", "from", "separatorAroundFromPos", "separatorAroundToPos", "valueBeforePos", "valueAfterPos", "cursorPos", "direction", "DIRECTION", "separatorAtLeftPos", "separatorAtLeftEndPos", "separatorAtRightPos", "number", "validnum", "formatted", "match", "sign", "zeros", "checkTail", "dropFractional", "unmaskedValue", "n", "IMask", "PIPE_TYPE", "createPipe", "arg", "from", "to", "masked", "createMask", "value", "m", "pipe", "mask", "IMask", "RepeatBlock", "MaskedPattern", "_ref", "_ref2", "opts", "_ref3", "_ref4", "_this$_blocks", "repeat", "blockOpts", "normalizeOpts", "block", "createMask", "bi", "ch", "flags", "details", "ChangeDetails", "_this$_mapPosToBlock$", "_this$_mapPosToBlock", "allocated", "_this$_blocks$bi", "_flags$_beforeTailSta", "blockDetails", "fromPos", "toPos", "_this$_mapPosToBlock2", "_this$_mapPosToBlock3", "firstBlockIndex", "lastBlockIndex", "removeCount", "blockIndex", "removeDetails", "state", "IMask", "IMask", "firmas_show_controller_default", "Controller", "IMask", "__publicField", "init_utils", "init_add", "init_tom_select", "fsp_container_controller_default", "Controller", "outlet", "_", "dph", "bezDph", "pocty", "controller", "index", "parseNumber", "round", "key", "suma", "vat", "formatNumber", "getStimulusController", "type", "el", "_this", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "dphPercEl", "i", "hk_filters_controller_default", "filters_controller_default", "hk_filters_new_controller_default", "filters_new_controller_default", "hk_filters_show_controller_default", "filters_show_controller_default", "init_show_toast_message", "init_utils", "hlavna_knihas_import_controller_default", "Controller", "response", "postJSON", "message", "showToastMessage", "err", "init_window_manager", "init_update_additional_info", "init_utils", "init_make_request", "hlavna_knihas_index_controller_default", "Controller", "showFilter", "e", "updateAdditionalInfo", "make_request_default", "response", "form", "openURL", "url", "tr", "td", "href", "__publicField", "home_index_controller_default", "Controller", "e", "btnEl", "init_utils", "init_window_manager", "init_show_toast_message", "init_make_request", "init_tom_select", "_icDphEl", "_removeErrors", "removeErrors_fn", "kontrolny_vykaz_dphs_index_controller_default", "Controller", "__privateAdd", "__publicField", "_", "method", "appendCanvas", "mesiac", "stvrtrok", "__privateMethod", "btn", "formData", "json", "postFormData", "e", "showToastMessage", "openURL", "url", "time", "regexp", "point", "parent", "datepicker", "initializeVanillajsDatepicker", "initializeTomSelect", "tbody", "submitter", "type", "file", "__privateGet", "message", "form", "make_request_default", "response", "text", "download", "fnameWithTimestamp", "offcanvas", "div", "turboStream", "el", "init_window_manager", "init_utils", "fillEvidOnOkruhChange", "target", "presetVal", "evidEl", "tomselectObj", "crSelect", "tomselectCr", "json", "getJSON", "text", "allowClear", "textRegex", "evidencia", "err", "init_utils", "init_show_toast_message", "init_make_request", "next_until_default", "elem", "selector", "filter", "siblings", "init_utils", "_clearBtn", "_submitBtn", "_setRangeValues", "setRangeValues_fn", "lists_controller_default", "Controller", "__privateAdd", "button", "fillCiselnyRadOnEvidChange", "orderChanged", "groupChanged", "e", "showToastMessage", "filterSet", "filterNotSet", "element", "select", "checkbox", "make_request_default", "item", "classToAdd", "err", "parent", "depth", "selectors", "i", "next_until_default", "tr", "ch", "form", "data", "json", "postFormData", "turboStream", "href", "message", "alertMessage", "btn", "postJSON", "submitBtn", "__privateGet", "getJSON", "type", "properties", "name", "value", "__privateMethod", "evidenciaId", "fillEvidOnOkruhChange", "ciselnyRadId", "hrefTarget", "tab", "row", "el", "openURL", "span", "toggleSpan", "next", "toggler", "range", "rangeEls", "formatNumber", "__publicField", "orderSet", "orderNotSet", "options", "s", "toggleLabels", "groupSet", "groupNotSet", "setElement", "notSetElement", "text", "option", "desiredEl", "init_utils", "init_show_toast_message", "init_html5sortable_es", "make_vykaz_polozkas_sortable_controller_default", "Controller", "_", "i", "item", "sortable", "selector", "json", "postJSON", "status", "message", "showToastMessage", "err", "structure", "row", "id", "uroven", "init_window_manager", "init_utils", "init_show_toast_message", "mass_changes_numbering_controller_default", "Controller", "openURL", "response", "postJSON", "err", "showToastMessage", "url", "init_utils", "init_show_toast_message", "init_tom_select", "mass_changes_type_controller_default", "Controller", "target", "url", "response", "getJSON", "name", "select", "typ", "option", "initializeTomSelect", "err", "showToastMessage", "messages_controller_default", "Controller", "_this", "offcanvas", "e", "el", "__publicField", "modal_controller_default", "Controller", "motorove_vozidlos_controller_default", "Controller", "e", "__publicField", "init_utils", "motorove_vozidlos_index_controller_default", "Controller", "simpleCardMethods", "init_show_submit_buttons", "motorove_vozidlos_show_controller_default", "Controller", "initializeFilePond", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "destroyFilePond", "init_utils", "init_window_manager", "init_show_submit_buttons", "init_show_toast_message", "init_utils", "init_delete", "init_add", "init_tom_select", "import_dayjs", "import_customParseFormat", "_getSampleNumbering", "getSampleNumbering_fn", "objednavkas_controller_default", "Controller", "__privateAdd", "popupHelpers", "open", "onPartnerChange", "onDodavatelChange", "dayjs", "customParseFormat", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "deleteResource", "openURL", "fillCiselnyRadOnEvidChange", "element", "json", "__privateMethod", "level1", "showSubmitButton", "showToastMessage", "target", "rate", "getJSON", "formatNumber", "err", "url", "postJSON", "init_update_additional_info", "setBackground", "e", "target", "tr", "td", "href", "removeBackground", "objednavkas_fakt_sklad_polozkies_index_controller_default", "Controller", "setBackground", "removeBackground", "updateAdditionalInfo", "init_update_additional_info", "init_utils", "init_show_toast_message", "objednavkas_index_controller_default", "Controller", "showRecord", "updateAdditionalInfo", "response", "getJSON", "element", "err", "showToastMessage", "init_window_manager", "init_utils", "objednavkas_new_controller_default", "Controller", "firstItem", "whenControllerReady", "copy", "openURL", "getStimulusController", "init_utils", "init_show_toast_message", "init_utils", "objednavkas_show_controller_default", "form_changes_controller_default", "showRecord", "initializeFilePond", "destroyFilePond", "e", "target", "confirmMessage", "json", "deleteJSON", "status", "turboStream", "err", "showToastMessage", "init_utils", "init_show_toast_message", "init_make_request", "odoslana_fakturas_assigned_advances_controller_default", "Controller", "module", "e", "parent", "button", "iSpinner", "make_request_default", "response", "showToastMessage", "err", "costInput", "costVal", "parseNumber", "init_utils", "init_show_toast_message", "init_make_request", "odoslana_fakturas_assigned_invoices_controller_default", "Controller", "module", "e", "button", "iSpinner", "make_request_default", "response", "showToastMessage", "err", "costInput", "costVal", "parseNumber", "init_utils", "init_window_manager", "init_show_toast_message", "init_make_request", "import_dayjs", "import_customParseFormat", "init_tom_select", "_setDatumDodania", "setDatumDodania_fn", "_updateCurrencyRate", "updateCurrencyRate_fn", "odoslana_fakturas_controller_default", "Controller", "__privateAdd", "popupHelpers", "onPartnerChange", "onDodavatelChange", "dayjs", "customParseFormat", "module", "e", "cenaBezDph", "parent_name", "parent", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "szcp", "select", "whenControllerReady", "url", "json", "postJSON", "message", "nums", "err", "showToastMessage", "partnerId", "openURL", "id", "make_request_default", "response", "pokladna", "error", "__privateMethod", "fillCiselnyRadOnEvidChange", "oldCurrency", "newCurrency", "element", "digits", "varSymbolVal", "dajsObj", "datumSplatnosti", "modalDom", "modal", "formatNumber", "event", "calcModal", "cenaSDphEl", "dphPercVal", "parseNumber", "dphEl", "cenaBezDphEl", "numberEl", "evidEl", "cisRadEl", "evidKod", "crKod", "number", "cena_dokopy", "item", "zlavaPercVal", "cenySuSDphBool", "cenaDokopyVal", "cenaDokopySCiastocnymiVal", "sumaPoloziekVal", "sumaZalohVal", "sadzby", "sadzbyZalohy", "polozka", "cenaSpoluVal", "zlava", "dphPerc", "sumaPoCelkovejZlaveVal", "round", "cenaSDphVal", "pocty", "index", "key", "target", "checkValue", "parentEl", "mnozstvoPocetInp", "cenaJednotkovaInp", "cenaBezDphInp", "changeItemSzcp", "datumDodaniaTyp", "datumDodaniaHodnota", "rate", "__publicField", "init_window_manager", "init_update_additional_info", "init_utils", "init_show_toast_message", "init_make_request", "odoslana_fakturas_index_controller_default", "Controller", "showFilter", "make_request_default", "response", "element", "error", "showToastMessage", "e", "openURL", "updateAdditionalInfo", "__publicField", "init_window_manager", "odoslana_fakturas_new_controller_default", "Controller", "firstItem", "url", "openURL", "init_utils", "init_show_toast_message", "init_make_request", "import_dayjs", "odoslana_fakturas_show_controller_default", "Controller", "showRecord", "module", "show_submit_buttons", "initializeFilePond", "destroyFilePond", "e", "suma", "el", "parseNumber", "make_request_default", "response", "err", "showToastMessage", "parentEl", "payment", "sumaInp", "formatNumber", "dayjs", "sum", "acc", "amount", "chbox", "init_delete", "init_add", "init_window_manager", "init_show_submit_buttons", "init_update_pozicia", "init_html5sortable_es", "init_show_submit_buttons", "init_utils", "stock_with_calc_pop_up_controller_default", "Controller", "popupHelpers", "e", "parentEl", "modalDom", "modal", "itemCenaBezDphId", "formatNumber", "calcModal", "dphPercVal", "parseNumber", "cenaSDphEl", "cenaBezDphEl", "dphEl", "target", "value", "id", "type", "showSubmitButton", "init_utils", "init_show_toast_message", "init_make_request", "import_dayjs", "import_customParseFormat", "init_tom_select", "_fakturovanePolozkyBezDph", "fakturovanePolozkyBezDph_fn", "_updateCurrencyRate", "updateCurrencyRate_fn", "_initSortable", "initSortable_fn", "odoslana_zalohova_fakturas_controller_default", "stock_with_calc_pop_up_controller_default", "__privateAdd", "dayjs", "customParseFormat", "popupHelpers", "updatePozicia", "onPartnerChange", "onDodavatelChange", "__privateMethod", "e", "showSubmitButton", "cenaBezDph", "sortable", "datumSplatnostiEl", "dajsObj", "submitBtn", "pocetDniSplEl", "datumVystaveniaEl", "fillCiselnyRadOnEvidChange", "oldCurrency", "newCurrency", "element", "url", "openURL", "href", "id", "evidenciaId", "numberEl", "evidEl", "cisRadEl", "deleteResource", "parentName", "parent", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "szcp", "select", "ciselnyRadVal", "datumDodaniaVal", "response", "make_request_default", "digits", "polozkaEl", "mnozstvoPocetEl", "cenaJednotkovaEl", "cenaBezDphEl", "formatNumber", "parseNumber", "target", "sums", "acc", "entry", "cenaBezDphVal", "dphPercInt", "accKey", "finalWithVAT", "vat", "stockItems", "cenySuSDphVal", "cur", "cenaSpoluVal", "zaloha", "finalCost", "curType", "discountedCost", "round", "finalInvoicedItemsCost", "changeItemSzcp", "sum", "dateVal", "cisMenaVal", "rate", "err", "showToastMessage", "container", "__publicField", "init_utils", "init_window_manager", "init_update_additional_info", "init_show_toast_message", "init_make_request", "odoslana_zalohova_fakturas_index_controller_default", "Controller", "appendCanvas", "url", "filterId", "openURL", "e", "updateAdditionalInfo", "make_request_default", "response", "showToastMessage", "error", "element", "postJSON", "__publicField", "init_window_manager", "odoslana_zalohova_fakturas_new_controller_default", "Controller", "firstItem", "url", "openURL", "init_window_manager", "init_show_submit_buttons", "init_utils", "init_show_toast_message", "init_make_request", "_appendCanvasCallback", "appendCanvasCallback_fn", "odoslana_zalohova_fakturas_show_controller_default", "Controller", "__privateAdd", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "showRecord", "appendCanvas", "__privateMethod", "initializeFilePond", "destroyFilePond", "make_request_default", "response", "err", "showToastMessage", "openURL", "sum", "acc", "entry", "parseNumber", "payment", "formatNumber", "chbox", "target", "canvas", "method", "init_add", "init_delete", "import_dayjs", "import_customParseFormat", "init_tom_select", "init_window_manager", "_calculateNextExecution", "calculateNextExecution_fn", "_add", "add_fn", "_refreshOfDavkaPartnerCount", "refreshOfDavkaPartnerCount_fn", "of_davkas_controller_default", "Controller", "__privateAdd", "dayjs", "customParseFormat", "__privateMethod", "deleteResource", "parentName", "parent", "labelEl", "labelNajblizsieSpustenieArr", "value", "el", "checked", "label", "partnerId", "openURL", "zaciatokVal", "dajsObj", "option", "count", "type", "newValue", "addFields", "copiedDiv", "_", "initializeTomSelect", "__publicField", "init_utils", "of_davkas_index_controller_default", "Controller", "simpleCardMethods", "init_show_submit_buttons", "of_davkas_show_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "e", "init_utils", "init_show_toast_message", "of_emails_show_controller_default", "Controller", "e", "form", "button", "json", "postFormData", "status", "turboStream", "err", "showToastMessage", "init_utils", "init_tom_select", "init_utils", "of_fakt_polozkies_controller_default", "fakt_polozkies_controller_default", "e", "target", "selectedOption", "dphPerc", "cenaJednotkova", "mnozstvoText", "cenaBezDph", "predmet", "formatNumber", "getStimulusController", "parent", "copied", "select", "element", "htmlEl", "initializeTomSelect", "parseNumber", "init_utils", "init_show_toast_message", "opf_emails_show_controller_default", "Controller", "e", "form", "button", "json", "postFormData", "status", "turboStream", "err", "showToastMessage", "init_utils", "init_tom_select", "opf_fakt_polozkies_controller_default", "fakt_polozkies_controller_default", "e", "target", "selectedOption", "predmet", "dphPerc", "mnozstvoText", "cenaJednotkova", "cenaBezDph", "formatNumber", "getStimulusController", "parent", "copied", "select", "element", "htmlEl", "initializeTomSelect", "init_show_toast_message", "init_make_request", "paginations_controller_default", "Controller", "entries", "observer", "entry", "url", "make_request_default", "response", "resolve", "err", "showToastMessage", "init_show_toast_message", "partners_controller_default", "Controller", "ico", "response", "company", "error", "target", "message", "showToastMessage", "_", "init_utils", "init_window_manager", "init_show_toast_message", "partners_index_controller_default", "Controller", "json", "getJSON", "count", "element", "e", "showToastMessage", "openURL", "__publicField", "init_utils", "init_show_toast_message", "partners_merge_partners_controller_default", "Controller", "e", "html", "o", "form", "formData", "json", "postFormData", "status", "turboStream", "showToastMessage", "partners_new_controller_default", "Controller", "init_utils", "init_show_toast_message", "partners_show_controller_default", "Controller", "e", "confirmMessage", "response", "deleteJSON", "err", "showToastMessage", "init_utils", "init_show_toast_message", "init_make_request", "import_dayjs", "import_customParseFormat", "init_tom_select", "_znamienkoEl", "_partnerEl", "_pokladnaEl", "_datumUhradyEl", "_cisloEl", "_getSampleNumbering", "getSampleNumbering_fn", "_setPkart", "setPkart_fn", "_setCentVyr", "setCentVyr_fn", "_disableZnamienkoEl", "disableZnamienkoEl_fn", "_updateBtnData", "updateBtnData_fn", "pokladnicny_doklads_controller_default", "Controller", "__privateAdd", "popupHelpers", "updateDanovyPomerSelectboxes", "dayjs", "customParseFormat", "module", "eightyPercCallback", "parentEl", "_", "showRecord", "e", "eightyPercent", "json", "__privateMethod", "number", "__privateGet", "showToastMessage", "url", "id", "data", "partner_id", "invoiced", "parent", "suma_b", "make_request_default", "response", "formatNumber", "sumaBEl", "price", "acc", "item", "sum", "tr", "parseNumber", "acc2", "value", "difference", "parent_name", "visibleItems", "input", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "sumaSdphEl", "currentSum", "el", "sumDiff", "sums", "stockItemsWithoutVat", "stockItemsWithVat", "kurz", "name", "elem", "selectedItem", "element", "kurzDivEl", "danovyPomerWrapperEl", "danovyPomerEl", "selectedOption", "predmet", "dphPerc", "accounts", "danovyPomer", "dphPercEl", "sumaBezDphEl", "dphPercVal", "dphEl", "sumaBezDph", "sumaSDphEl", "datumUhradyVal", "znamienkoVal", "postJSON", "getJSON", "pkartEl", "option", "err", "pdTypEl", "centVyrOpt", "opt", "html", "__publicField", "init_window_manager", "init_show_toast_message", "init_make_request", "init_update_additional_info", "pokladnicny_doklads_index_controller_default", "Controller", "url", "filterId", "openURL", "e", "target", "updateAdditionalInfo", "make_request_default", "response", "element", "err", "showToastMessage", "__publicField", "init_delay", "init_utils", "init_show_toast_message", "pokladnicny_doklads_new_controller_default", "Controller", "e", "commitButton", "delay", "date", "json", "jsonFromEu", "postJSON", "status", "path", "turboStream", "err", "showToastMessage", "sumaEl", "sumaSDphEl", "init_window_manager", "init_utils", "init_show_toast_message", "init_make_request", "pokladnicny_doklads_show_controller_default", "Controller", "show_submit_buttons", "newButton", "showRecord", "e", "sumaVal", "parseNumber", "make_request_default", "response", "err", "showToastMessage", "openURL", "pop_up_controller_default", "Controller", "e", "init_utils", "init_add", "init_tom_select", "init_delete", "import_dayjs", "init_show_toast_message", "init_show_submit_buttons", "init_window_manager", "init_number", "init_delay", "_getSampleNumbering", "getSampleNumbering_fn", "predajkas_controller_default", "Controller", "__privateAdd", "popupHelpers", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "deleteResource", "dayjs", "changeEvent", "target", "json", "__privateMethod", "number", "kurz", "formatNumber", "name", "elem", "showSubmitButton", "selectedItem", "element", "kurzDivEl", "e", "showToastMessage", "url", "id", "openURL", "totalValue", "parseNumber", "delay", "abs", "price", "input", "event", "formEl", "datumUhradyVal", "postJSON", "predajkas_new_controller_default", "Controller", "url", "newurl", "init_utils", "init_show_toast_message", "predajkas_show_controller_default", "form_changes_controller_default", "showRecord", "e", "target", "confirmMessage", "json", "deleteJSON", "status", "turboStream", "err", "showToastMessage", "prev_prikazs_controller_default", "Controller", "buttonToDelete", "btn", "exportButton", "init_utils", "prev_prikazs_index_controller_default", "Controller", "init_utils", "init_show_toast_message", "prijemka_vydajka_polozkas_controller_default", "Controller", "showSkladovaKarta", "formatNumber", "nakupnaCena", "jednotky", "jednotkyKoef", "option", "key", "index", "newOption", "zakladnaOption", "target", "basicOption", "selectedOption", "selectedPrepocet", "finalPrice", "parseNumber", "getStimulusController", "item", "showToastMessage", "init_utils", "init_add", "init_tom_select", "init_delete", "init_window_manager", "init_show_toast_message", "init_show_submit_buttons", "_getSampleNumbering", "getSampleNumbering_fn", "prijemka_vydajkas_controller_default", "Controller", "__privateAdd", "popupHelpers", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "deleteResource", "parent_name", "parent", "getStimulusController", "openURL", "json", "__privateMethod", "level1", "showSubmitButton", "showToastMessage", "key", "select", "url", "postJSON", "init_update_additional_info", "prijemka_vydajkas_fakt_sklad_polozkies_index_controller_default", "Controller", "setBackground", "removeBackground", "updateAdditionalInfo", "init_update_additional_info", "init_window_manager", "prijemka_vydajkas_index_controller_default", "Controller", "updateAdditionalInfo", "button", "href", "openURL", "prijemka_vydajkas_new_controller_default", "Controller", "init_utils", "init_show_toast_message", "prijemka_vydajkas_show_controller_default", "form_changes_controller_default", "showRecord", "e", "target", "confirmMessage", "json", "deleteJSON", "status", "turboStream", "err", "showToastMessage", "init_utils", "init_show_toast_message", "print_settings_controller_default", "Controller", "data", "el", "json", "postJSON", "message", "showToastMessage", "err", "init_utils", "pvp_container_controller_default", "Controller", "outlet", "_", "result", "acc", "parseNumber", "formatNumber", "i", "recaptcha_controller_default", "Controller", "e", "widget", "index", "script", "__publicField", "controller", "stimulusController", "import_dayjs", "import_quarterOfYear", "record_counting_controller_default", "Controller", "dayjs", "dayjsQuarter", "currentQ", "init_utils", "init_show_toast_message", "remote_document_controller_default", "Controller", "resource", "url", "response", "getJSON", "err", "showToastMessage", "init_window_manager", "init_utils", "init_show_toast_message", "init_update_additional_info", "saldokontos_index_controller_default", "Controller", "e", "fillEvidOnOkruhChange", "fillCiselnyRadOnEvidChange", "updateAdditionalInfo", "name", "url", "response", "getJSON", "openURL", "err", "showToastMessage", "json", "status", "message", "__publicField", "init_utils", "init_add", "init_delete", "init_tom_select", "sk_kategs_index_controller_default", "form_changes_controller_default", "popupHelpers", "e", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "deleteResource", "init_delay", "init_show_toast_message", "init_utils", "init_tom_select", "sk_quick_search_controller_default", "Controller", "enlarge", "cardBodyEl", "target", "activeRow", "delay", "response", "getJSON", "err", "showToastMessage", "tr", "url", "lastRow", "faktSkladPolozkiesController", "initializeTomSelect", "items", "select", "option", "newOption", "init_window_manager", "init_utils", "init_add", "init_delete", "init_tom_select", "init_show_toast_message", "init_show_submit_buttons", "skladova_kartas_controller_default", "Controller", "popupHelpers", "open", "onSyntUcetChange", "fillCiselnyRadOnEvidChange", "addFields", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "deleteResource", "parent_name", "parent", "openURL", "json", "level1", "showSubmitButton", "showToastMessage", "label", "input", "target", "url", "postJSON", "positive", "negative", "init_update_additional_info", "init_window_manager", "init_utils", "skladova_kartas_index_controller_default", "Controller", "showFilter", "updateAdditionalInfo", "button", "href", "openURL", "item", "skladova_kartas_show_controller_default", "form_changes_controller_default", "initializeFilePond", "destroyFilePond", "init_utils", "init_window_manager", "sklads_controller_default", "Controller", "popupHelpers", "onSyntUcetChange", "openURL", "init_utils", "sklads_index_controller_default", "Controller", "simpleCardMethods", "init_show_submit_buttons", "sklads_show_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "init_utils", "stock_pop_up_controller_default", "Controller", "popupHelpers", "init_utils", "init_show_toast_message", "switch_active_company_controller_default", "Controller", "err", "showToastMessage", "response", "postJSON", "status", "notice", "errors", "getJSON", "tax_liability_controller_default", "Controller", "i", "elem", "toasts_controller_default", "Controller", "element", "toast", "init_tom_select", "import_tom_select_complete_min", "tom_select_controller_default", "Controller", "initializeTomSelect", "input", "tomSelect", "TomSelect", "data", "escape", "e", "option", "select", "init_window_manager", "init_utils", "init_show_toast_message", "init_make_request", "uctovny_denniks_index_controller_default", "Controller", "module", "openURL", "e", "fillEvidOnOkruhChange", "fillCiselnyRadOnEvidChange", "make_request_default", "err", "showToastMessage", "url", "filterId", "json", "getJSON", "count", "element", "__publicField", "init_utils", "uctovny_doklads_change_accounts_window_controller_default", "Controller", "onSyntUcetChange", "uctovny_doklads_change_flags_window_controller_default", "Controller", "utils", "init_utils", "init_show_toast_message", "init_window_manager", "uctovny_doklads_change_numbering_controller_default", "Controller", "target", "element", "fillEvidOnOkruhChange", "fillCiselnyRadOnEvidChange", "response", "postJSON", "err", "showToastMessage", "_", "openURL", "choosen", "el", "select", "arr", "option", "formData", "json", "postFormData", "status", "errors", "url", "init_utils", "uctovny_doklads_change_szcp_window_controller_default", "Controller", "onSyntUcetChange", "init_utils", "init_show_toast_message", "init_make_request", "import_dayjs", "import_customParseFormat", "init_tom_select", "_updateCurrencyRate", "updateCurrencyRate_fn", "uctovny_doklads_controller_default", "Controller", "__privateAdd", "popupHelpers", "dayjs", "customParseFormat", "module", "e", "showRecord", "id", "url", "partnerId", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "name", "parent_name", "parent", "sumaCmEl", "mdCmVal", "parseNumber", "formatNumber", "event", "arr", "udPredkontaciaEl", "sumaEl", "filterDOM", "uhradenyDokladId", "make_request_default", "result", "showToastMessage", "error", "parentEl", "md_synt_id", "dal_synt_id", "md_analyt_id", "dal_analyt_id", "mdSyntUcetOption", "mdAnalytUcetOption", "dalSyntUcetOption", "dalAnalytUcetOption", "mdSyntUcetEl", "dalSyntUcetEl", "mdAnalytUcetEl", "dalAnalytUcetEl", "mdAnalytucetOptions", "dalAnalytUcetOptions", "option", "response", "target", "dal_su", "dal_au", "suma", "md_su", "md_au", "err", "source", "sourceId", "sourceIndex", "nodes", "last", "now", "pattern", "select", "element", "json", "icon", "predk", "button", "fillCiselnyRadOnEvidChange", "fillEvidOnOkruhChange", "onSyntUcetChange", "tomselectEl", "label", "rate", "rateEl", "dateVal", "d_dodania", "d_splatnosti", "d_duup", "d_dud", "date", "__privateMethod", "tomSelectEl", "acc", "udp", "sumaCm", "editForm", "data", "list", "tr", "el", "show", "sums", "differenceEl", "differenceCmEl", "string", "changeItemSzcp", "getJSON", "__publicField", "init_window_manager", "init_update_additional_info", "init_utils", "init_show_toast_message", "init_make_request", "uctovny_doklads_index_controller_default", "Controller", "showFilter", "e", "openURL", "make_request_default", "response", "element", "error", "showToastMessage", "fillEvidOnOkruhChange", "fillCiselnyRadOnEvidChange", "updateAdditionalInfo", "__publicField", "init_utils", "init_show_toast_message", "init_make_request", "uctovny_doklads_show_controller_default", "Controller", "module", "show_submit_buttons", "initializeFilePond", "destroyFilePond", "e", "p", "make_request_default", "response", "err", "showToastMessage", "parent", "suma", "parseNumber", "init_window_manager", "ud_mass_changes_anchor_handler_controller_default", "Controller", "methods", "window", "openURL", "target", "str", "n", "unasigned_controller_default", "Controller", "event", "init_show_toast_message", "init_make_request", "up_emails_controller_default", "Controller", "e", "target", "id", "url", "submitter", "form", "json", "make_request_default", "err", "showToastMessage", "init_window_manager", "init_utils", "upomienkas_controller_default", "Controller", "onPartnerChange", "onDodavatelChange", "openURL", "init_utils", "init_window_manager", "init_update_additional_info", "init_show_toast_message", "upomienkas_index_controller_default", "Controller", "e", "updateAdditionalInfo", "openURL", "json", "getJSON", "count", "element", "err", "showToastMessage", "deleteJSON", "turboStream", "message", "postJSON", "status", "__publicField", "init_window_manager", "upomienkas_show_controller_default", "Controller", "openURL", "users_controller_default", "Controller", "init_utils", "init_show_toast_message", "_appendCanvasCallback", "appendCanvasCallback_fn", "users_index_controller_default", "Controller", "__privateAdd", "appendCanvas", "__privateMethod", "form", "formData", "json", "postFormData", "status", "turboStream", "flagEl", "err", "showToastMessage", "canvas", "message", "html", "btnEl", "id", "confirmMsg", "deleteJSON", "method", "className", "init_show_submit_buttons", "users_show_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "vanillajs_datepicker_controller_default", "Controller", "__publicField", "datepicker", "initializeVanillajsDatepicker", "init_add", "init_delete", "init_utils", "vykaz_polozkas_controller_default", "Controller", "popupHelpers", "onSyntUcetChange", "e", "typ", "element", "btnEl", "addFields", "deleteResource", "init_utils", "init_show_toast_message", "vykaz_polozkas_show_controller_default", "form_changes_controller_default", "e", "btn", "message", "id", "response", "deleteJSON", "status", "showToastMessage", "err", "target", "vykaz_statement_export_controller_default", "Controller", "vykazEl", "selectedOption", "tuj", "init_show_toast_message", "init_utils", "init_window_manager", "import_dayjs", "import_customParseFormat", "vykazs_index_controller_default", "statements_index_controller_default", "context", "dayjs", "customParseFormat", "appendCanvas", "_", "name", "select", "value", "custom", "zostava", "btn", "form", "formData", "url", "expandedIds", "e", "json", "postFormData", "turboStream", "err", "showToastMessage", "submitter", "btnEl", "file", "lang", "type", "response", "download", "element", "target", "func", "inputEl", "dayjsObj", "anchor", "all", "openURL", "hide", "lastRowDiv", "showCustom", "elem", "only", "init_add", "init_delete", "init_tom_select", "init_utils", "vykazs_list_controller_default", "form_changes_controller_default", "popupHelpers", "e", "btnEl", "addFields", "div", "initializeTomSelect", "target", "deleteResource", "init_window_manager", "init_show_toast_message", "init_make_request", "zap_emails_controller_default", "Controller", "e", "target", "id", "url", "openURL", "submitter", "form", "json", "make_request_default", "err", "showToastMessage", "init_delete", "init_window_manager", "init_form_serializer", "init_show_submit_buttons", "init_utils", "init_make_request", "zapocets_controller_default", "Controller", "popupHelpers", "onPartnerChange", "onDodavatelChange", "e", "numberEl", "evidEl", "cisRadEl", "element", "fillCiselnyRadOnEvidChange", "parentEl", "formatNumber", "parseNumber", "url", "openURL", "id", "partnerId", "deleteResource", "actionAttr", "data", "part", "make_request_default", "serializeFormData", "json", "showSubmitButton", "sums", "acc", "row", "className", "init_window_manager", "init_show_toast_message", "init_make_request", "zapocets_index_controller_default", "Controller", "e", "make_request_default", "response", "showToastMessage", "error", "openURL", "element", "__publicField", "init_window_manager", "zapocets_new_controller_default", "Controller", "e", "partnerId", "url", "openURL", "zapocets_refresher_controller_default", "Controller", "part", "suma", "zapocetsController", "partnerSelectEl", "partnerInputEl", "init_window_manager", "init_show_submit_buttons", "init_show_toast_message", "init_make_request", "zapocets_show_controller_default", "Controller", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "e", "make_request_default", "response", "err", "showToastMessage", "data", "part", "json", "openURL", "init_window_manager", "init_show_toast_message", "init_make_request", "zav_emails_controller_default", "Controller", "e", "target", "id", "url", "openURL", "submitter", "form", "json", "make_request_default", "err", "showToastMessage", "zav_filters_controller_default", "filters_controller_default", "zav_filters_new_controller_default", "filters_new_controller_default", "zav_filters_show_controller_default", "filters_show_controller_default", "zav_prijatie_fakturs_index_controller_default", "Controller", "module", "e", "div", "fillCiselnyRadOnEvidChange", "url", "partnerId", "init_show_toast_message", "init_make_request", "init_tom_select", "init_utils", "zavazoks_controller_default", "Controller", "popupHelpers", "onPartnerChange", "module", "e", "parent_name", "parent", "copiedDiv", "lastElBeforeInsert", "initializeTomSelect", "input", "initializeVanillajsDatepicker", "url", "partnerId", "_", "make_request_default", "accounts", "select", "value", "account", "error", "showToastMessage", "init_utils", "init_window_manager", "init_update_additional_info", "fileSaver", "init_show_toast_message", "init_make_request", "zavazoks_index_controller_default", "Controller", "showFilter", "make_request_default", "response", "element", "error", "showToastMessage", "openURL", "e", "updateAdditionalInfo", "rows", "formatNumber", "sum", "b", "parseNumber", "json", "getJSON", "turboStream", "opts", "url", "form", "id", "turboResponse", "blob", "sumaB", "__publicField", "init_window_manager", "zavazoks_new_controller_default", "Controller", "e", "partner_id", "url", "openURL", "init_utils", "init_show_toast_message", "init_window_manager", "zavazoks_parse_commands_window_controller_default", "Controller", "initializeFilePond", "destroyFilePond", "e", "form", "formData", "message", "json", "postFormData", "status", "turboStream", "err", "showToastMessage", "data", "entry", "name", "value", "uploadForm", "partnerEl", "confirmAccountMessage", "accountEl", "accountsArr", "getJSON", "account", "postJSON", "openURL", "init_window_manager", "init_show_submit_buttons", "init_utils", "init_show_toast_message", "init_make_request", "import_dayjs", "zavazoks_show_controller_default", "Controller", "initializeFilePond", "registerChangeToShowSubmitButton", "registerKeyupToShowSubmitButton", "showRecord", "destroyFilePond", "e", "make_request_default", "response", "err", "showToastMessage", "parentEl", "paymentEl", "sumaEl", "formatNumber", "parseNumber", "dayjs", "sumVal", "el", "acc", "amount", "payments", "chboxEl", "target", "url", "openURL", "application", "account_assignments_index_controller_default", "agent_global_prompts_index_controller_default", "agent_local_prompts_controller_default", "ai_accounting_wrapper_controller_default", "attachment_controller_default", "bank_ucets_controller_default", "bank_vypises_controller_default", "bank_vypises_index_controller_default", "canvas_controller_default", "close_offcanvas_controller_default", "danovy_pomer_selectbox_controller_default", "danovy_pomers_index_controller_default", "df_polozkas_controller_default", "differences_controller_default", "dodaci_lists_controller_default", "dodaci_lists_index_controller_default", "dodaci_lists_new_controller_default", "dodaci_lists_show_controller_default", "dodavatels_controller_default", "dodavatels_index_controller_default", "dodavatels_show_controller_default", "dosla_fakturas_controller_default", "dosla_fakturas_index_controller_default", "dosla_fakturas_new_controller_default", "dosla_fakturas_show_controller_default", "dosla_zalohova_fakturas_controller_default", "dosla_zalohova_fakturas_index_controller_default", "dosla_zalohova_fakturas_new_controller_default", "dp_mvs_controller_default", "dp_mvs_show_controller_default", "dp_ppos_index_controller_default", "evidencia_dphs_index_controller_default", "fakt_polozkies_controller_default", "fakt_sklad_polozkies_controller_default", "filters_controller_default", "filters_new_controller_default", "filters_show_controller_default", "firma_public_invoicing_controller_default", "firma_publics_new_controller_default", "firmas_controller_default", "firmas_show_controller_default", "form_changes_controller_default", "fsp_container_controller_default", "hk_filters_controller_default", "hk_filters_new_controller_default", "hk_filters_show_controller_default", "hlavna_knihas_import_controller_default", "hlavna_knihas_index_controller_default", "home_index_controller_default", "kontrolny_vykaz_dphs_index_controller_default", "lists_controller_default", "make_vykaz_polozkas_sortable_controller_default", "mass_changes_numbering_controller_default", "mass_changes_type_controller_default", "messages_controller_default", "modal_controller_default", "motorove_vozidlos_controller_default", "motorove_vozidlos_index_controller_default", "motorove_vozidlos_show_controller_default", "objednavkas_controller_default", "objednavkas_fakt_sklad_polozkies_index_controller_default", "objednavkas_index_controller_default", "objednavkas_new_controller_default", "objednavkas_show_controller_default", "odoslana_fakturas_assigned_advances_controller_default", "odoslana_fakturas_assigned_invoices_controller_default", "odoslana_fakturas_controller_default", "odoslana_fakturas_index_controller_default", "odoslana_fakturas_new_controller_default", "odoslana_fakturas_show_controller_default", "odoslana_zalohova_fakturas_controller_default", "odoslana_zalohova_fakturas_index_controller_default", "odoslana_zalohova_fakturas_new_controller_default", "odoslana_zalohova_fakturas_show_controller_default", "of_davkas_controller_default", "of_davkas_index_controller_default", "of_davkas_show_controller_default", "of_emails_show_controller_default", "of_fakt_polozkies_controller_default", "opf_emails_show_controller_default", "opf_fakt_polozkies_controller_default", "paginations_controller_default", "partners_controller_default", "partners_index_controller_default", "partners_merge_partners_controller_default", "partners_new_controller_default", "partners_show_controller_default", "pokladnicny_doklads_controller_default", "pokladnicny_doklads_index_controller_default", "pokladnicny_doklads_new_controller_default", "pokladnicny_doklads_show_controller_default", "pop_up_controller_default", "predajkas_controller_default", "predajkas_new_controller_default", "predajkas_show_controller_default", "prev_prikazs_controller_default", "prev_prikazs_index_controller_default", "prijemka_vydajka_polozkas_controller_default", "prijemka_vydajkas_controller_default", "prijemka_vydajkas_fakt_sklad_polozkies_index_controller_default", "prijemka_vydajkas_index_controller_default", "prijemka_vydajkas_new_controller_default", "prijemka_vydajkas_show_controller_default", "print_settings_controller_default", "pvp_container_controller_default", "recaptcha_controller_default", "record_counting_controller_default", "remote_document_controller_default", "saldokontos_index_controller_default", "sk_kategs_index_controller_default", "sk_quick_search_controller_default", "skladova_kartas_controller_default", "skladova_kartas_index_controller_default", "skladova_kartas_show_controller_default", "sklads_controller_default", "sklads_index_controller_default", "sklads_show_controller_default", "statements_index_controller_default", "stock_pop_up_controller_default", "stock_with_calc_pop_up_controller_default", "switch_active_company_controller_default", "tax_liability_controller_default", "toasts_controller_default", "tom_select_controller_default", "uctovny_denniks_index_controller_default", "uctovny_doklads_change_accounts_window_controller_default", "uctovny_doklads_change_flags_window_controller_default", "uctovny_doklads_change_numbering_controller_default", "uctovny_doklads_change_szcp_window_controller_default", "uctovny_doklads_controller_default", "uctovny_doklads_index_controller_default", "uctovny_doklads_show_controller_default", "ud_mass_changes_anchor_handler_controller_default", "unasigned_controller_default", "up_emails_controller_default", "upomienkas_controller_default", "upomienkas_index_controller_default", "upomienkas_show_controller_default", "users_controller_default", "users_index_controller_default", "users_show_controller_default", "vanillajs_datepicker_controller_default", "vykaz_polozkas_controller_default", "vykaz_polozkas_show_controller_default", "vykaz_statement_export_controller_default", "vykazs_index_controller_default", "vykazs_list_controller_default", "zap_emails_controller_default", "zapocets_controller_default", "zapocets_index_controller_default", "zapocets_new_controller_default", "zapocets_refresher_controller_default", "zapocets_show_controller_default", "zav_emails_controller_default", "zav_filters_controller_default", "zav_filters_new_controller_default", "zav_filters_show_controller_default", "zav_prijatie_fakturs_index_controller_default", "zavazoks_controller_default", "zavazoks_index_controller_default", "zavazoks_new_controller_default", "zavazoks_parse_commands_window_controller_default", "zavazoks_show_controller_default", "sparkMd5", "module", "exports", "factory", "undefined$1", "hex_chr", "md5cycle", "x", "k", "a", "b", "c", "d", "md5blk", "s", "md5blks", "i", "md5blk_array", "md51", "n", "state", "length", "tail", "tmp", "lo", "hi", "md51_array", "rhex", "j", "hex", "clamp", "val", "from", "to", "begin", "end", "num", "target", "targetArray", "sourceArray", "toUtf8", "str", "utf8Str2ArrayBuffer", "returnUInt8Array", "buff", "arr", "arrayBuffer2Utf8Str", "concatenateArrayBuffers", "first", "second", "result", "hexToBinaryString", "bytes", "SparkMD5", "contents", "raw", "ret", "content", "hash", "fileSlice", "FileChecksum", "file", "callback", "event", "binaryDigest", "base64digest", "start", "getMetaValue", "name", "element", "findElement", "findElements", "root", "selector", "elements", "toArray", "dispatchEvent", "type", "eventInit", "disabled", "bubbles", "cancelable", "detail", "value", "BlobRecord", "checksum", "url", "csrfToken", "responseType", "response", "direct_upload", "key", "BlobUpload", "blob", "headers", "status", "id", "DirectUpload", "delegate", "error", "notify", "upload", "object", "methodName", "messages", "DirectUploadController", "input", "hiddenInput", "attributes", "progress", "xhr", "inputSelector", "DirectUploadsController", "form", "controllers", "startNextController", "controller", "processingAttribute", "submitButtonsByForm", "started", "didClick", "didSubmitForm", "didSubmitRemoteElement", "handleFormSubmissionEvent", "inputs", "disable", "enable", "submitForm", "button", "autostart", "init_window_manager", "init_delay", "keyupEvents", "e", "delay", "keypressEvents", "debouncedCompleteDate", "clickEvents", "openURL", "newlyAdded", "group", "from", "to", "target", "icons", "span", "setDefaultWindowWidth", "changeEvents", "changeDateEvents", "dateInputTimers", "dateInputProcessing", "completeDate", "today", "yyyy", "length", "values", "day", "month", "year", "mm", "existingTimer", "timer", "submitEvents", "visibilityChangeEvents", "url", "newurl"]
}
