{"version":3,"names":["createSchemes","newSchemes","AllColors.CHIP_SCHEMES","forEach","element","schemeName","backgroundColor","AllColors","toConstantCase","backgroundHoverColor","textColor","textHoverColor","iconBackgroundColor","iconBackgroundHoverColor","iconTextColor","iconTextHoverColor","scheme","CHIP_SCHEME_CONFIG","CHIP_SCHEME_MAP","Map","Object","entries","createChipMapDefinition","map","background","config","CHIP_SIZE_NORMAL","CHIP_LOCALIZATION","en","removeItem","de","sv","nl","it","hu","da","fr","es","pl","ro","hr","cs","sl","chipCss","EonUiChipStyle0","Checkbox","this","schemeConfig","schemeMap","localization","componentWillLoad","applyScheme","setCurrentLocalization","componentDidLoad","setCssVariables","setCurrentLocalizationDelegate","applySchemeDelegate","setCssVariablesDelegate","render","h","Host","key","type","class","pfx","size","onClick","chipClick","emit","label","currentLocalization","name","ICONSIZE_SMALL","DROPDOWN_SIZE_NORMAL","DROPDOWN_SORT_ASC","DROPDOWN_SORT_DESC","DROPDOWN_SORT_MANUAL","AllColors.DROPDOWN_SCHEMES","separatorColor","borderColor","borderHoverColor","borderActiveColor","textColorActive","labelColor","labelColorActive","errorMessageColor","trailingIconColor","disabledBackgroundColor","disabledBorderColor","disabledTrailingIconColor","disabledLabelColor","disabledOpacity","optionsBackgroundColor","AllColors.COLOR_BRIGHT","optionsBorderBottomColor","optionsBackgroundColorHover","AllColors.COLOR_TRANSPARENT","backgroundActive","multiselectDeleteBackgroundColor","multiselectDeleteFontColor","multiselectDeleteIconColor","multiselectDeleteIconHoverColor","chipScheme","DROPDOWN_SCHEME_CONFIG","DROPDOWN_SCHEME_MAP","createDropdownMapDefinition","DROPDOWN_LOCALIZATION","required","selected","dropdownCss","EonUiDropdownStyle0","Dropdown","selectLabels","userInputKeys","handleCustomValidation","errorMessage","handleCustomValidationDelegate","validateRequired","validateRequiredValueDelegate","validate","validateDelegate","setCustomRequiredMessage","onDocumentClick","event","multiselect","target","tagName","closeDropdownEvent","id","hostElement","uniqueId","options","Array","from","getNestedChildrenOf","createOptionsLabelSet","isTouchDevice","initTouchDropdown","passAttributesToOptions","isInfoIconAvailable","querySelector","infoIconComponent","initInfoIconEventListenerForCollapsing","detectSlotChanges","dropdownOptions","sorting","sortOrder","setTimeout","initDropDown","delegateInputInnerOffsetVariables","sortOptions","dropdownLoad","addEventListener","hideOptionList","option","setAttribute","setLabelBackgroundColor","DEFAULT_PAGE_BACKGROUND_COLOR","getColorOfNearestBackground","activeScheme","get","value","style","setProperty","onclick","document","selectOption","toggleOption","initMultiSelectSelectedOptionCollector","applyPreselection","tempSelectItems","tempSelectLabelItem","innerText","disabled","push","optionElement","selectItems","optionsObserver","MutationObserver","mutations","mutation","attributeName","multiselectSelectedOptions","updateMultiselectValue","observe","subtree","attributes","deselectAllMultiselectValues","order","multiselectValueArr","multiselectFormattedValueArr","length","isTouched","join","formattedValue","datePickerVisibilityEventHandler","collapsed","dropdownClosed","dropdownOpened","emitValueChangedEvent","valueChanged","updateValue","selectOptionByValue","selectMultiselectOptionsByValue","preselectedOptionValues","split","trim","newSelectedOption","filter","removeAttribute","selectedOption","focusOptionByValue","select","newFocusedOption","focusedOption","focusOption","showOptionList","toggleOptionList","nodeName","e","srcElement","hostElementIsPartOfParentShadowRoot","composedPath","includes","contains","handleKeyDown","focusedOptionIndex","KeyIds","SPACE","ENTER","preventDefault","stopPropagation","DOWN","indexOf","UP","TAB","ESCAPE","HOME","END","collectUserInputString","getIndexOfMatchingStringInSetOfStrings","handleMultiselectDeleteKeyDown","handleIconName","DROPDOWN_CHEVRON_ICON_NAME","DROPDOWN_CHEVRON_SMALL_ICON_NAME","labelOffset","navigationElementsContainer","offsetWidth","setCssVariable","toLowerCase","userInputTimeout","clearTimeout","string","setOfStrings","stringLength","index","findIndex","s","substring","onFocus","inputFocus","isFocus","onBlur","inputBlur","sortedOptions","String","deselectedOption","concat","sortedOption","slice","sort","a","b","deselectOption","handleDeselectionKeyDown","infoIconWrapper","active","labelOutside","htmlFor","innerHTML","outside","error","invalid","labelBefore","_a","role","tabIndex","onKeyDown","onChipClick","_b","ref","el","icon","maxHeight","height","_c","onChange","_d","message","info","infoMessage","showSelectedItems","AllColors.DROPDOWN_OPTION_SCHEMES","backgroundColorHover","backgroundColorActive","borderBottomColor","DROPDOWN_OPTION_SCHEME_CONFIG","DROPDOWN_OPTION_SCHEME_MAP","createDropdownOptionMapDefinition","dropdownOptionCss","EonUiDropdownOptionStyle0","DropdownOption","applyFocus","innerBackground","hasFocus","focus","syncSelectedPropAndCheckbox","checkbox","checked","onValueChanged","ICONSIZE_NORMAL","AllColors.INPUT_SCHEMES","outerBorderColor","INPUT_SCHEME_CONFIG","INPUT_SCHEME_MAP","createInputMapDefinition","INPUT_PASSWORD","INPUT_TEXT","INPUT_CURRENCIES","currencySymbol","currencyFormat","thousandSeparator","currencyRadix","NUMBER_REGEX1","RegExp","NUMBER_REGEX2","_typeof","obj","Symbol","iterator","constructor","prototype","_classCallCheck","instance","Constructor","TypeError","_defineProperties","props","i","descriptor","enumerable","configurable","writable","defineProperty","_createClass","protoProps","staticProps","_defineProperty","_inherits","subClass","superClass","create","_setPrototypeOf","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","p","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","call","_objectWithoutPropertiesLoose","source","excluded","sourceKeys","keys","_objectWithoutProperties","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_assertThisInitialized","self","ReferenceError","_possibleConstructorReturn","_createSuper","Derived","hasNativeReflectConstruct","_createSuperInternal","Super","result","NewTarget","arguments","apply","_superPropBase","object","property","hasOwnProperty","_get","receiver","base","desc","getOwnPropertyDescriptor","set","_set","isStrict","Error","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","isArray","_i","_arr","_n","_s","_e","next","done","err","minLen","_arrayLikeToArray","n","toString","test","len","arr2","isString","str","DIRECTION","NONE","LEFT","FORCE_LEFT","RIGHT","FORCE_RIGHT","forceDirection","direction","escapeRegExp","replace","objectIncludes","arrA","arrB","dateA","Date","dateB","getTime","regexpA","regexpB","ActionDetails","cursorPos","oldValue","oldSelection","startChangePos","start","Math","min","substr","insertedCount","max","end","removedCount","ChangeDetails","details","assign","inserted","rawInserted","skip","tailShift","aggregate","ContinuousTailDetails","undefined","stop","extend","tail","appendTo","masked","append","_appendPlaceholder","state","shiftBefore","pos","shiftChar","IMask","opts","InputMask","Masked","_value","_update","DEFAULTS","isInitialized","updateOptions","withValueRefresh","bind","reset","resolve","input","doCommit","doParse","doFormat","extractInput","raw","nearestInputPos","fromPos","toPos","extractTail","appendTail","_appendCharRaw","ch","_appendChar","flags","checkTail","consistentState","doPrepare","consistentTail","appended","doValidate","beforeTailState","overwrite","tailDetails","_beforeTailState","ci","remove","fn","_refreshing","rawInput","rawInputValue","ret","runIsolated","_isolated","prepare","parent","commit","format","parse","splice","deleteCount","removeDirection","tailPos","changeDetails","v","maskedClass","mask","MaskedRegExp","MaskedPattern","MaskedDate","Number","MaskedNumber","MaskedDynamic","Function","MaskedFunction","console","warn","createMask","MaskedClass","_excluded","DEFAULT_INPUT_DEFINITIONS","PatternInputDefinition","blockOpts","_isFilled","isOptional","placeholderChar","unmaskedValue","lazy","_this$masked","_this$masked2","_this$masked3","minPos","maxPos","boundPos","isComplete","_this$masked4","_this$parent","PatternFixedDefinition","isUnmasking","_isRawInput","char","isResolved","ChunksTailDetails","chunks","tailChunk","lastChunk","extendLast","firstTailChunk","shift","blockIndex","chunk","lastBlockIter","_mapPosToBlock","chunkBlock","_stops","_blocks","remainChars","c","cstate","chunkShiftPos","_Masked","_super","search","definitions","_rebuildMask","_this","defs","_maskedBlocks","pattern","unmaskingBlock","optionalBlock","blocks","_ret","bNames","bName","maskedBlock","_isInput","STOP_CHAR","ESCAPE_CHAR","def","maskedState","bi","every","reduce","blockIter","_block","blockDetails","_this2","chunkTail","_forEachBlocksInRange","bFromPos","bToPos","blockChunk","_findStopBefore","_blockStartPos","_","stopBefore","si","toBlockIndex","_this3","startBlockIter","startBlockIndex","endBlockIndex","args","bDetails","accVal","_block2","blockStartPos","offset","fromBlockIter","toBlockIter","isSameBlock","fromBlockStartPos","fromBlockEndPos","removeDetails","beginBlockData","beginBlockOffset","beginBlockIndex","beginBlock","beginBlockCursorPos","cursorAtRight","cursorAtLeft","searchBlockIndex","blockIndexAtLeft","blockAtLeft","blockInputPos","firstInputAtRight","blockAtRight","_blockInputPos","_bi","_block3","_blockInputPos2","firstFilledBlockIndexAtRight","_bi2","filledBlock","_blockInputPos3","firstFilledInputBlockIndex","firstEmptyInputBlockIndex","_bi3","_block4","_blockInputPos4","_bi4","_block5","_blockInputPos5","blockAlignedPos","isInput","_bi5","_block6","_blockInputPos6","firstInputBlockAlignedIndex","firstInputBlockAlignedPos","_bi6","_block7","_blockInputPos7","_bi7","_block8","_blockInputPos8","_bi8","_block9","_blockInputPos9","alignedPos","maskedBlocks","_this4","indices","gi","InputDefinition","FixedDefinition","block","MaskedRange","_MaskedPattern","maxLength","to","fromStr","padStart","toStr","sameCharsCount","repeat","boundaries","minstr","maxstr","_ref","match","_ref2","placeholder","num","padEnd","autofix","val","prepStr","nextVal","_this$boundaries","_this$boundaries2","_get2","firstNonZero","_matchFrom","_this$boundaries3","_this$boundaries4","_len","_key","GET_DEFAULT_BLOCKS","Y","getFullYear","m","getMonth","d","getDate","bk","date","isDateExist","typedValue","day","month","year","_str$split","_str$split2","MaskElement","_unsafeSelectionStart","_unsafeSelectionEnd","selectionStart","selectionEnd","_unsafeSelect","bindEvents","handlers","unbindEvents","HTMLMaskElement","_MaskElement","_handlers","getRootNode","rootElement","activeElement","setSelectionRange","_toggleEventHandler","EVENTS_MAP","handler","removeEventListener","selectionChange","drop","click","HTMLContenteditableMaskElement","_HTMLMaskElement","root","selection","getSelection","anchorOffset","createRange","range","setStart","firstChild","setEnd","lastChild","removeAllRanges","addRange","textContent","isContentEditable","_listeners","_unmaskedValue","_saveSelection","_onInput","_onChange","_onDrop","_onFocus","_onClick","alignCursor","alignCursorFriendly","_bindEvents","maskEquals","updateControl","_unbindEvents","_fireEvent","ev","listeners","l","_cursorChanging","_changingCursorPos","isActive","_selection","newUnmaskedValue","newValue","isChanged","_fireChangeEvents","restOpts","updateMask","updateOpts","updateCursor","_delayUpdateCursor","_abortUpdateCursor","_inputEvent","on","off","hIndex","oldRawValue","removed","destroy","MaskedEnum","enum","some","_updateRegExps","allowNegative","midInput","mid","scale","radix","_numberRegExpInput","_numberRegExp","_mapToRadixRegExp","mapToRadix","_thousandsSeparatorRegExp","thousandsSeparator","_removeThousandsSeparators","_insertThousandsSeparators","parts","_separatorsCount","extendOnSeparators","count","_separatorsCountFromSlice","_this$_adjustRangeWit","_adjustRangeWithSeparators","_this$_adjustRangeWit2","prevBeforeTailValue","prevBeforeTailSeparatorsCount","appendDetails","beforeTailValue","beforeTailSeparatorsCount","_findSeparatorAround","searchFrom","separatorPos","separatorAroundFromPos","separatorAroundToPos","_this$_adjustRangeWit3","_this$_adjustRangeWit4","valueBeforePos","valueAfterPos","separatorAtLeftPos","separatorAtLeftEndPos","separatorAtRightPos","regexp","valid","number","isNaN","validnum","formatted","normalizeZeros","_normalizeZeros","padFractionalZeros","_padFractionalZeros","sign","zeros","signed","currentMask","compiledMasks","_applyDispatch","prevValueBeforeTail","inputValue","insertValue","_rawInputValue","tailValue","prevMask","prevMaskState","doDispatch","dispatch","_this$currentMask","_this$currentMask2","currentMaskRef","mi","_this$currentMask3","_this$currentMask4","_get3","_len2","_key2","_this$currentMask5","_get4","_len3","_key3","inputs","weight","i1","i2","PIPE_TYPE","MASKED","UNMASKED","TYPED","createPipe","pipe","pipeArgs","globalThis","INPUT_LOCALIZATION","deepmerge","FORM_LOCALIZATION","dateFormat","localeDay","localeMonth","localeYear","locale","inputCss","EonUiInputStyle0","Input","valueChangedEventEmitted","setInternalType","setPlaceholder","setDateMask","setPatternMask","setNumberMask","handleInput","componentDidRender","focusInput","internalType","hasPlaceholder","dateMask","internalPatternMask","internalNumberMask","tempValueForBlurComparison","internalDateMask","isValid","encapsulated","valueChangedProgrammatically","sendAutocompleteRequest","isSmartDevice","getDeviceDateFormat","dummyDate","placeholderString","toLocaleDateString","handleAutocomplete","tempTerms","preloader","autocompleteTerms","autocompleteSeperator","results","term","removePreloader","dateFormatString","dd","MM","yyyy","isSupportedType","currency","maskOptions","currencyInfo","find","parseInt","toggleMaskedInputConfig","autocomplete","autocompleteStart","clearValue","_event","togglePasswordVisible","passwordVisible","currentTarget","getProps","focusStyle","onInput","readOnly","tabindex","readonly","ariaLabel","describedBy","autocompleteKeyword","onOptionClick","autocompleteSelected","elm","nextElm","nextElementSibling","prevElm","previousElementSibling","handleInputKeyDown","shadowRoot","closeAutocompleteDropdown","isFirefox","isSafari","handlePasteInput","pasteText","clipboardData","getData","isNum","handleValueChanged","textarea","rows","cols","title","dateMin","dateMax","inputmode","autocompleteVisible","labelVisuallyHidden","onPaste","visible","clearInputIcon","PRELOADER_CIRCLE_SIZE_SMALL","trailingIconName","iconClick","autocompletePopupHeight","item","success","messageIcon","successMessage"],"sources":["src/components/chip/constants/chip-constants.ts","src/components/chip/constants/chip-i18n.ts","src/components/chip/chip.scss?tag=eon-ui-chip&encapsulation=shadow","src/components/chip/chip.tsx","src/components/dropdown/constants/dropdown-constants.ts","src/components/dropdown/constants/dropdown-i18n.ts","src/components/dropdown/dropdown.scss?tag=eon-ui-dropdown&encapsulation=shadow","src/components/dropdown/dropdown.tsx","src/components/dropdown/dropdown-option/constants/dropdown-option-constants.ts","src/components/dropdown/dropdown-option/dropdown-option.scss?tag=eon-ui-dropdown-option&encapsulation=shadow","src/components/dropdown/dropdown-option/dropdown-option.tsx","src/components/input/constants/input-constants.ts","node_modules/imask/esm/_rollupPluginBabelHelpers-a0b34764.js","node_modules/imask/esm/core/utils.js","node_modules/imask/esm/core/action-details.js","node_modules/imask/esm/core/change-details.js","node_modules/imask/esm/core/continuous-tail-details.js","node_modules/imask/esm/core/holder.js","node_modules/imask/esm/masked/base.js","node_modules/imask/esm/masked/factory.js","node_modules/imask/esm/masked/pattern/input-definition.js","node_modules/imask/esm/masked/pattern/fixed-definition.js","node_modules/imask/esm/masked/pattern/chunk-tail-details.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/controls/mask-element.js","node_modules/imask/esm/controls/html-mask-element.js","node_modules/imask/esm/controls/html-contenteditable-mask-element.js","node_modules/imask/esm/controls/input.js","node_modules/imask/esm/masked/enum.js","node_modules/imask/esm/masked/number.js","node_modules/imask/esm/masked/function.js","node_modules/imask/esm/masked/dynamic.js","node_modules/imask/esm/masked/pipe.js","node_modules/imask/esm/index.js","src/components/input/constants/input-i18n.ts","src/components/input/input.scss?tag=eon-ui-input&encapsulation=shadow","src/components/input/input.tsx"],"sourcesContent":["import * as AllColors from \"../../../constants/colors\";\nimport { BackgroundColor } from \"../../background/constants/background-types\";\nimport { createChipMapDefinition } from \"../../../utils/scheme-helper\";\nimport { ChipSchemeConfiguration } from \"../../../constants/colors\";\nimport { ChipSchemeDefinition } from \"./chip-types\";\nimport { toConstantCase } from \"../../../utils/string-format\";\n\nfunction createSchemes() {\n let newSchemes: ChipSchemeConfiguration = {};\n\n AllColors.CHIP_SCHEMES.forEach((element) => {\n newSchemes[element.schemeName] = {\n backgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n backgroundHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n textColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n textHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n iconBackgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n iconBackgroundHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n iconTextColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n iconTextHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`]\n };\n if (element.scheme) {\n newSchemes[element.schemeName] = { ...newSchemes[element.schemeName], ...element.scheme };\n }\n });\n return newSchemes;\n}\n\nexport const CHIP_SCHEME_CONFIG: AllColors.ButtonSchemeConfiguration = createSchemes();\n\nexport const CHIP_SCHEME_MAP: Map = new Map(\n Object.entries(createChipMapDefinition()).map(([background, config]) => [\n background as BackgroundColor,\n CHIP_SCHEME_CONFIG[config as string]\n ])\n);\n\nexport const CHIP_SIZE_SMALL = \"small\";\nexport const CHIP_SIZE_NORMAL = \"normal\";\n\nexport const CHIP_SIZES = [CHIP_SIZE_SMALL, CHIP_SIZE_NORMAL] as const;\n","import { Localization } from \"../../../common/localizable-component\";\nimport { ChipLocalization } from \"./chip-types\";\n\nexport const CHIP_LOCALIZATION: Localization = {\n en: {\n removeItem: \"Remove item\"\n },\n de: {\n removeItem: \"Element entfernen\"\n },\n sv: {\n removeItem: \"Ta bort objekt\"\n },\n nl: {\n removeItem: \"Item verwijderen\"\n },\n it: {\n removeItem: \"Rimuovere l'articolo\"\n },\n hu: {\n removeItem: \"Tétel eltávolítása\"\n },\n da: {\n removeItem: \"Fjern element\"\n },\n fr: {\n removeItem: \"Supprimer l'objet\"\n },\n es: {\n removeItem: \"Eliminar elemento\"\n },\n pl: {\n removeItem: \"Usuń element\"\n },\n ro: {\n removeItem: \"Eliminați elementul\"\n },\n hr: {\n removeItem: \"Ukloni element\"\n },\n cs: {\n removeItem: \"Odstraňte prvek\"\n },\n sl: {\n removeItem: \"Odstráňte prvok\"\n }\n};\n","/**\n * THEME JSON CONFIG CSS VARS\n * The following default component scss variables can be overwritten via theme configuration per brand.\n * If you need to add new one, please make sure to set a default value.\n * JSON Definition for Component with name \"Example\": testCssVar: \"20px\"\n * Resulting CSS var: $example-test-css-var: 20px;\n */\n\n$chip-focus-color: transparent !default;\n\n/* END THEME JSON CONFIG CSS VARS ******************************************************* */\n\n:host {\n cursor: pointer;\n}\n\n:host [type=\"button\"] {\n @include button-reset-appearance;\n\n align-items: center;\n background-color: v(\"backgroundColor\");\n color: v(\"textColor\");\n border: 0;\n border-radius: 99px;\n cursor: pointer;\n display: flex;\n font-size: 14px;\n gap: 8px;\n line-height: 18px;\n margin-bottom: 8px;\n margin-right: 8px;\n padding: 2px 2px 2px 10px;\n transition: background-color 0.25s cubic-bezier(0.33, 0, 0.35, 1) 0s, color 0.25s cubic-bezier(0.33, 0, 0.35, 1) 0s;\n\n .#{$prefix}icon,\n eon-ui-icon {\n background-color: #e6e3e1;\n background-color: v(\"iconBackgroundColor\");\n border-radius: 99px;\n color: v(\"iconTextColor\");\n display: flex;\n height: 18px;\n justify-content: center;\n transition: background-color 0.25s cubic-bezier(0.33, 0, 0.35, 1) 0s, color 0.25s cubic-bezier(0.33, 0, 0.35, 1) 0s;\n width: 18px;\n }\n\n &:focus-visible,\n &:hover {\n background-color: v(\"backgroundHoverColor\");\n color: v(\"textHoverColor\");\n\n eon-ui-icon {\n background-color: v(\"iconBackgroundHoverColor\");\n color: v(\"iconTextHoverColor\");\n }\n }\n\n &:focus {\n outline: 2px solid $chip-focus-color;\n }\n\n &.#{$prefix}size-small {\n padding: 0px 1px 0px 8px;\n height: 20px;\n\n eon-ui-icon {\n padding: 0px;\n }\n }\n}\n","import { Component, Element, h, Host, Prop, State, Watch, Event, EventEmitter } from \"@stencil/core\";\nimport { applySchemeDelegate, ColorableComponent, setCssVariablesDelegate } from \"../../common/colorable-component\";\nimport { LocalizableComponent, Localization, setCurrentLocalizationDelegate } from \"../../common/localizable-component\";\nimport { ChipSchemeConfiguration } from \"../../constants/colors\";\nimport { ICONSIZE_SMALL } from \"../icon/constants/icon-constants\";\nimport { ChipLocalization, ChipSchemeDefinition, ChipSchemeName, ChipSize } from \"./constants/chip-types\";\nimport { CHIP_SCHEME_CONFIG, CHIP_SCHEME_MAP, CHIP_SIZE_NORMAL } from \"./constants/chip-constants\";\nimport { CHIP_LOCALIZATION } from \"./constants/chip-i18n\";\nimport pfx from \"../../utils/style-class-prefix-helper\";\n\n@Component({\n tag: \"eon-ui-chip\",\n styleUrl: \"chip.scss\",\n shadow: true\n})\nexport class Checkbox\n implements ColorableComponent>, LocalizableComponent {\n schemeConfig: ChipSchemeConfiguration = CHIP_SCHEME_CONFIG;\n schemeMap = CHIP_SCHEME_MAP;\n\n localization: Localization = CHIP_LOCALIZATION;\n currentLocalization: ChipLocalization;\n\n @State() activeScheme: ChipSchemeDefinition;\n\n /**\n * Raised when the button has been clicked.\n */\n @Event() chipClick: EventEmitter;\n\n @Element() hostElement: HTMLEonUiChipElement;\n\n /**\n * The name of the color scheme of the component.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n */\n @Prop({ reflect: true }) scheme: ChipSchemeName;\n\n /**\n * The label of the chip\n */\n @Prop() label: string;\n\n /**\n * Set the size of the chip\n */\n @Prop() size: ChipSize = CHIP_SIZE_NORMAL;\n\n componentWillLoad() {\n this.applyScheme();\n this.setCurrentLocalization();\n }\n\n componentDidLoad() {\n this.setCssVariables();\n }\n\n setCurrentLocalization() {\n setCurrentLocalizationDelegate(this);\n }\n\n @Watch(\"scheme\")\n applyScheme(): void {\n applySchemeDelegate(this);\n }\n\n @Watch(\"activeScheme\")\n setCssVariables(): void {\n setCssVariablesDelegate(this);\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n","import { DropdownSchemeDefinition } from \"./dropdown-types\";\nimport { BackgroundColor } from \"../../background/constants/background-types\";\n\nimport * as AllColors from \"../../../constants/colors\";\nimport { toConstantCase } from \"../../../utils/string-format\";\nimport { createDropdownMapDefinition } from \"../../../utils/scheme-helper\";\n\nexport const DROPDOWN_SIZE_SMALL = \"small\";\nexport const DROPDOWN_SIZE_NORMAL = \"normal\";\n\nexport const DROPDOWN_SIZES = [DROPDOWN_SIZE_SMALL, DROPDOWN_SIZE_NORMAL] as const;\n\nexport const DROPDOWN_SORT_ASC = \"asc\";\nexport const DROPDOWN_SORT_DESC = \"desc\";\nexport const DROPDOWN_SORT_MANUAL = \"manual\";\n\nexport const DROPDOWN_SORT_ORDER = [DROPDOWN_SORT_ASC, DROPDOWN_SORT_DESC, DROPDOWN_SORT_MANUAL] as const;\n\nfunction createSchemes() {\n let newSchemes: AllColors.DropdownSchemeConfiguration = {};\n\n AllColors.DROPDOWN_SCHEMES.forEach((element) => {\n newSchemes[element.schemeName] = {\n separatorColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_2`],\n borderColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_2`],\n borderHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_1`],\n borderActiveColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n textColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n textColorActive: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n labelColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n labelColorActive: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n errorMessageColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_2`],\n trailingIconColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_1`],\n disabledBackgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_20`],\n disabledBorderColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_80`],\n disabledTrailingIconColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_60`],\n disabledLabelColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n disabledOpacity: 0.6,\n optionsBackgroundColor: AllColors.COLOR_BRIGHT,\n optionsBorderBottomColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_2`],\n optionsBackgroundColorHover: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_1`],\n background: AllColors.COLOR_TRANSPARENT,\n backgroundActive: AllColors.COLOR_BRIGHT,\n multiselectDeleteBackgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_1`],\n multiselectDeleteFontColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n multiselectDeleteIconColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n multiselectDeleteIconHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_1`],\n chipScheme: \"\"\n };\n if (element.scheme) {\n newSchemes[element.schemeName] = { ...newSchemes[element.schemeName], ...element.scheme };\n }\n });\n return newSchemes;\n}\n\nexport const DROPDOWN_SCHEME_CONFIG: AllColors.DropdownSchemeConfiguration = createSchemes();\n\nexport const DROPDOWN_SCHEME_MAP: Map = new Map(\n Object.entries(createDropdownMapDefinition()).map(([background, config]) => [\n background as BackgroundColor,\n DROPDOWN_SCHEME_CONFIG[config as string]\n ])\n);\n","import { Localization } from \"../../../common/localizable-component\";\nimport { DropdownLocalization } from \"./dropdown-types\";\n\nexport const DROPDOWN_LOCALIZATION: Localization = {\n en: {\n required: \"This field is required.\",\n selected: \"selected\"\n },\n de: {\n required: \"Dieses Feld wird benötigt.\",\n selected: \"ausgewählt\"\n },\n sv: {\n required: \"Det här fältet är obligatoriskt.\",\n selected: \"utvalda\"\n },\n nl: {\n required: \"Dit veld is verplicht.\",\n selected: \"geselecteerde\"\n },\n it: {\n required: \"Questo campo è obbligatorio.\",\n selected: \"selezionato\"\n },\n hu: {\n required: \"Ez a mező kötelező.\",\n selected: \"kiválasztott\"\n },\n da: {\n required: \"Dette felt er obligatorisk.\",\n selected: \"udvalgt\"\n },\n fr: {\n required: \"Ce champ est obligatoire.\",\n selected: \"sélectionné\"\n },\n es: {\n required: \"Este campo es obligatorio.\",\n selected: \"seleccionado\"\n },\n pl: {\n required: \"To pole jest wymagane.\",\n selected: \"wybrane\"\n },\n ro: {\n required: \"Acest câmp este obligatoriu.\",\n selected: \"selectat\"\n },\n hr: {\n required: \"Ovo polje je obavezno.\",\n selected: \"odabran\"\n },\n cs: {\n required: \"Toto pole je povinné.\",\n selected: \"vybrané\"\n },\n sl: {\n required: \"To polje je obvezno.\",\n selected: \"izbrani\"\n }\n};\n","/**\n * THEME JSON CONFIG CSS VARS\n * The following default component scss variables can be overwritten via theme configuration per brand.\n * If you need to add new one, please make sure to set a default value.\n * JSON Definition for Component with name \"Example\": testCssVar: \"20px\"\n * Resulting CSS var: $example-test-css-var: 20px;\n */\n\n$dropdown-font-size: 18px !default;\n$dropdown-small-font-size: 16px !default;\n$dropdown-line-height: 24px !default;\n$dropdown-small-line-height: 24px !default;\n$dropdown-height: 48px !default;\n$dropdown-small-height: 36px !default;\n$dropdown-border-width: 2px !default;\n$dropdown-small-border-width: 2px !default;\n$dropdown-padding-top: 11px !default;\n$dropdown-small-padding-top: 5px !default;\n$dropdown-padding-bottom: 13px !default;\n$dropdown-small-padding-bottom: 7px !default;\n$dropdown-chip-padding-top: 13px !default;\n$dropdown-chip-small-padding-top: 11px !default;\n$dropdown-chip-padding-bottom: 11px !default;\n$dropdown-chip-small-padding-bottom: 5px !default;\n$dropdown-padding-left: 12px !default;\n$dropdown-small-padding-left: 12px !default;\n$dropdown-padding-right: 12px !default;\n$dropdown-small-padding-right: 8px !default;\n$dropdown-label-active-x-padding: 4px !default;\n$dropdown-small-label-active-x-padding: 4px !default;\n$dropdown-trailing-icon-padding-right: 0px !default;\n$dropdown-small-trailing-icon-padding-right: 0px !default;\n$dropdown-default-radius: 8px !default;\n$dropdown-small-default-radius: 6px !default;\n$dropdown-label-outside-font-size: 14px !default;\n$dropdown-label-outside-line-height: 18px !default;\n$dropdown-label-outside-offset-left: 0px !default;\n$dropdown-error-message-offset-left: 0px !default;\n$dropdown-optionlist-option-min-height: 44px !default;\n$dropdown-optionlist-radius: 0 0 $dropdown-default-radius $dropdown-default-radius !default;\n$dropdwon-small-optionlist-radius: 0 0 $dropdown-small-default-radius $dropdown-small-default-radius !default;\n$dropdown-list-shadow: rgb(0 0 0 / 20%) 0px 5px 5px -3px, rgb(0 0 0 / 14%) 0px 8px 10px 1px,\n rgb(0 0 0 / 12%) 0px 3px 14px 2px !default;\n\n/* END THEME JSON CONFIG CSS VARS ******************************************************* */\n\n$dropdown-label-active-padding: calc($dropdown-padding-left - $dropdown-label-active-x-padding);\n$dropdown-small-label-active-padding: calc($dropdown-small-padding-left - $dropdown-small-label-active-x-padding);\n\n@mixin labelOutside {\n position: relative;\n font-size: $dropdown-label-outside-font-size;\n line-height: $dropdown-label-outside-line-height;\n margin-bottom: calc($dropdown-border-width + 4px);\n color: v(labelColor);\n font-weight: normal;\n display: block;\n max-width: calc(100% - 8px);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: $dropdown-label-outside-offset-left;\n}\n\n@mixin labelOutsideSmallOverwrites {\n margin-bottom: calc($dropdown-small-border-width + 2px);\n}\n\n@mixin label {\n position: absolute;\n left: $dropdown-padding-left;\n top: 11px;\n font-size: $dropdown-font-size;\n color: v(labelColor);\n font-weight: normal;\n pointer-events: none;\n transition-property: left, top, font-size, padding;\n transition-timing-function: ease;\n transition-duration: 0.2s;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - var(--dropdownInnerOffset) - $dropdown-padding-left);\n}\n\n@mixin labelSmallOverwrites {\n top: 5px;\n left: $dropdown-small-padding-left;\n font-size: $dropdown-small-font-size;\n max-width: calc(100% - var(--dropdownInnerOffset) - $dropdown-small-padding-left);\n}\n\n@mixin labelActive {\n top: -10px;\n font-size: 14px;\n color: v(labelColorActive);\n padding: 0 $dropdown-label-active-x-padding 0 $dropdown-label-active-x-padding;\n left: $dropdown-label-active-padding;\n line-height: 18px;\n max-width: calc(100% - var(--dropdownInnerOffset) - $dropdown-padding-left);\n}\n\n@mixin labelActiveSmallOverwrites {\n padding: 0 $dropdown-small-label-active-x-padding 0 $dropdown-small-label-active-x-padding;\n left: $dropdown-small-label-active-padding;\n max-width: calc(100% - var(--dropdownInnerOffset) - $dropdown-small-padding-left);\n}\n\n:host {\n position: relative;\n width: 100%;\n font-family: $font-family-base;\n display: flex;\n flex-direction: column;\n\n * {\n box-sizing: border-box;\n }\n}\n\n:host(.#{$prefix}active) {\n ::slotted(eon-ui-info-icon) {\n --iconColor: v(textColorActive);\n --iconHoverColor: v(textColorActive);\n --iconFocusColor: v(textColorActive);\n }\n}\n\n.#{$prefix}error-message {\n display: flex;\n color: v(errorMessageColor);\n margin-left: $dropdown-error-message-offset-left;\n}\n\n.#{$prefix}info-message {\n color: v(labelColor);\n}\n\n.#{$prefix}dropdown-info-icon {\n z-index: 10;\n}\n\nlabel.#{$prefix}outside {\n @include labelOutside;\n\n &.#{$prefix}small {\n @include labelOutsideSmallOverwrites;\n }\n\n &.#{$prefix}error {\n color: v(errorMessageColor);\n }\n\n &.#{$prefix}disabled {\n color: v(disabledLabelColor);\n }\n}\n\n.#{$prefix}dropdown-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n line-height: $dropdown-line-height;\n width: var(--dropdown-width);\n\n .#{$prefix}navigation-elements {\n position: absolute;\n right: 0;\n top: 0;\n width: auto;\n height: 100%;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-right: $dropdown-padding-right;\n gap: 16px;\n\n > *:first-child {\n margin-left: $dropdown-padding-left;\n }\n\n &.#{$prefix}visible {\n pointer-events: none;\n\n .#{$prefix}interaction-icon {\n pointer-events: visible;\n }\n }\n }\n\n select {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n z-index: 10;\n font-size: $dropdown-font-size;\n\n &:focus {\n ~ .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 $dropdown-border-width v(borderActiveColor);\n }\n }\n }\n\n &.#{$prefix}touched {\n .#{$prefix}dropdown-button {\n ~ label {\n @include labelActive();\n }\n\n ~ .#{$prefix}label-placeholder {\n opacity: 1;\n }\n }\n }\n\n label {\n @include label();\n @include noneUserSelect();\n z-index: 1;\n }\n\n .#{$prefix}dropdown-button {\n position: relative;\n width: 100%;\n height: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: $dropdown-line-height;\n padding: $dropdown-padding-top $dropdown-padding-right $dropdown-padding-bottom $dropdown-padding-left;\n font-size: $dropdown-font-size;\n font-family: $font-family-base;\n display: block;\n border: none;\n box-shadow: inset 0 0 0 $dropdown-border-width v(borderColor);\n border-radius: $dropdown-default-radius;\n background: v(background);\n color: v(textColor);\n appearance: none;\n padding-right: var(--dropdownInnerOffset);\n outline: none;\n cursor: pointer;\n\n &:focus,\n &:focus-within {\n box-shadow: inset 0 0 0 $dropdown-border-width v(borderActiveColor) !important;\n background: v(backgroundActive);\n color: v(textColorActive);\n\n ~ .#{$prefix}navigation-elements {\n > :not(.#{$prefix}multiselect-indicator) {\n eon-ui-icon {\n fill: v(textColorActive);\n }\n }\n }\n }\n\n .#{$prefix}option-label-wrapper {\n position: relative;\n @include noneUserSelect();\n height: $dropdown-line-height;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n }\n }\n\n .#{$prefix}icon-background {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n padding-right: $dropdown-trailing-icon-padding-right;\n\n .#{$prefix}icon-button {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: unset;\n\n .#{$prefix}icon {\n position: relative;\n height: auto;\n transition: transform $transition-duration $transition-timing-function;\n }\n }\n }\n\n .#{$prefix}option-list {\n position: absolute;\n max-height: calc(100vh - 96px);\n width: 100%;\n margin: auto;\n background-color: v(optionsBackgroundColor);\n z-index: 96;\n top: $dropdown-height - $dropdown-border-width;\n overflow: auto;\n overflow-x: hidden;\n border-radius: $dropdown-optionlist-radius;\n visibility: hidden;\n opacity: 0;\n padding-top: 1px;\n border-left: $dropdown-border-width solid v(borderActiveColor);\n border-right: $dropdown-border-width solid v(borderActiveColor);\n border-bottom: $dropdown-border-width solid v(borderActiveColor);\n display: flex;\n flex-direction: column;\n }\n\n &.#{$prefix}small {\n label {\n @include labelSmallOverwrites();\n }\n\n .#{$prefix}navigation-elements {\n padding-right: $dropdown-small-padding-right;\n\n > *:first-child {\n margin-left: $dropdown-small-padding-left;\n }\n }\n\n .#{$prefix}option-list {\n top: $dropdown-small-height - $dropdown-small-border-width;\n }\n\n .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 $dropdown-small-border-width v(borderColor);\n border-radius: $dropdown-small-default-radius;\n padding: $dropdown-small-padding-top $dropdown-small-padding-right $dropdown-small-padding-bottom\n $dropdown-small-padding-left;\n line-height: $dropdown-small-line-height;\n font-size: $dropdown-small-font-size;\n padding-right: var(--dropdownInnerOffset);\n\n &:focus {\n box-shadow: inset 0 0 0 $dropdown-small-border-width v(borderActiveColor) !important;\n }\n\n .#{$prefix}option-label-wrapper {\n height: $dropdown-small-line-height;\n }\n }\n\n &.#{$prefix}popup-visible {\n .#{$prefix}dropdown-button {\n border-radius: $dropdown-small-default-radius $dropdown-small-default-radius 0 0;\n }\n }\n\n select {\n font-size: $dropdown-small-font-size;\n\n &:focus {\n ~ .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 $dropdown-small-border-width v(borderActiveColor) !important;\n }\n }\n }\n\n &.#{$prefix}touched {\n .#{$prefix}dropdown-button {\n ~ label {\n @include labelActiveSmallOverwrites();\n }\n }\n }\n }\n\n &:hover {\n .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 $dropdown-border-width v(borderHoverColor);\n }\n\n &.#{$prefix}small {\n .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 $dropdown-small-border-width v(borderHoverColor);\n }\n }\n }\n\n &.#{$prefix}popup-visible {\n .#{$prefix}option-list {\n visibility: visible;\n opacity: 1;\n }\n\n label {\n @include labelActive();\n }\n\n .#{$prefix}label-placeholder {\n opacity: 1;\n }\n\n &::after {\n content: \"\";\n position: absolute;\n left: 50%;\n bottom: 0;\n transform: translateX(-50%);\n width: calc(100% - #{$dropdown-padding-left} - #{$dropdown-padding-right});\n height: 1px;\n background-color: v(separatorColor);\n z-index: 96;\n }\n\n .#{$prefix}dropdown-button {\n border-radius: $dropdown-default-radius $dropdown-default-radius 0 0;\n box-shadow: inset 0 0 0 $dropdown-border-width v(borderActiveColor);\n background: v(backgroundActive);\n color: v(textColorActive);\n\n ~ .#{$prefix}navigation-elements {\n > :not(.#{$prefix}multiselect-indicator) {\n eon-ui-icon {\n fill: v(textColorActive);\n }\n }\n }\n }\n\n .#{$prefix}icon-background {\n .#{$prefix}icon-button {\n .#{$prefix}icon {\n transform: rotate(-180deg);\n }\n }\n }\n }\n\n &.#{$prefix}disabled {\n cursor: not-allowed;\n\n .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 2px v(disabledBorderColor) !important;\n background-color: v(disabledBackgroundColor) !important;\n opacity: v(disabledOpacity);\n cursor: inherit;\n }\n\n label {\n opacity: v(disabledOpacity) !important;\n }\n\n .#{$prefix}icon-background {\n cursor: inherit;\n }\n }\n\n &.#{$prefix}invalid {\n .#{$prefix}dropdown-button {\n box-shadow: inset 0 0 0 $dropdown-small-border-width v(errorMessageColor) !important;\n }\n\n label {\n color: v(errorMessageColor) !important;\n }\n\n .#{$prefix}option-list {\n border-color: v(errorMessageColor);\n }\n }\n}\n\n.#{$prefix}label-placeholder {\n @include labelActive();\n position: absolute;\n color: transparent;\n background: v(currentBackgroundColor);\n background: linear-gradient(\n 0deg,\n transparent 0%,\n transparent 0px,\n v(currentBackgroundColor) 0px,\n v(currentBackgroundColor) 10px,\n transparent 10px,\n transparent 100%\n );\n z-index: 0;\n transition: opacity 0.15s ease-out 0s;\n opacity: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-radius: 5px;\n transform: translateY(1px);\n max-width: calc(100% - var(--dropdownInnerOffset) - $dropdown-label-active-x-padding);\n}\n\n.#{$prefix}option-info-wrapper {\n position: relative;\n width: auto;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 0px 8px 0px 0px;\n gap: 16px;\n}\n\n.#{$prefix}multiselect-indicator {\n position: relative;\n width: auto;\n height: 24px;\n padding: 2px 2px 2px 10px;\n background-color: v(multiselectDeleteBackgroundColor);\n color: v(multiselectDeleteFontColor);\n border-radius: 16px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n font-size: 14px;\n line-height: 18px;\n font-family: $font-family-base;\n font-weight: 400;\n opacity: 0;\n visibility: hidden;\n\n &.#{$prefix}visible {\n opacity: 1;\n visibility: visible;\n }\n\n .#{$prefix}multiselect-delete {\n position: relative;\n width: 20px;\n height: 20px;\n border-radius: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition-property: background-color;\n transition-duration: 0.2s;\n transition-timing-function: ease-in-out;\n\n eon-ui-icon {\n fill: v(multiselectDeleteIconColor);\n color: v(multiselectDeleteIconColor);\n transition-property: fill, color;\n transition-duration: 0.2s;\n transition-timing-function: ease-in-out;\n }\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.85);\n\n eon-ui-icon {\n fill: v(multiselectDeleteIconHoverColor);\n color: v(multiselectDeleteIconHoverColor);\n }\n }\n }\n}\n\n.#{$prefix}selected-options {\n display: flex;\n margin-top: 16px;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: 8px;\n}\n\n:host([multiselect=\"true\"]) {\n .#{$prefix}dropdown-wrapper {\n &.#{$prefix}small {\n .#{$prefix}dropdown-button {\n padding-top: $dropdown-chip-small-padding-top;\n padding-bottom: $dropdown-chip-small-padding-bottom;\n }\n }\n\n .#{$prefix}dropdown-button {\n padding-top: $dropdown-chip-padding-top;\n padding-bottom: $dropdown-chip-padding-bottom;\n }\n\n .#{$prefix}option-label-wrapper {\n overflow: visible;\n }\n }\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Listen, Method, Prop, State, Watch } from \"@stencil/core\";\nimport {\n applySchemeDelegate,\n ColorableComponent,\n getColorOfNearestBackground,\n setCssVariablesDelegate\n} from \"../../common/colorable-component\";\nimport {\n DropdownLocalization,\n DropdownSchemeDefinition,\n DropdownSchemeName,\n DropdownSize,\n DropdownSortOrder\n} from \"./constants/dropdown-types\";\nimport {\n DROPDOWN_SCHEME_CONFIG,\n DROPDOWN_SCHEME_MAP,\n DROPDOWN_SIZE_NORMAL,\n DROPDOWN_SORT_ASC,\n DROPDOWN_SORT_DESC,\n DROPDOWN_SORT_MANUAL\n} from \"./constants/dropdown-constants\";\nimport {\n FormComponent,\n handleCustomValidationDelegate,\n validateDelegate,\n validateRequiredValueDelegate\n} from \"../../common/form-component\";\nimport { BackgroundColor } from \"../background/constants/background-types\";\nimport { KeyIds } from \"../../constants/keys\";\nimport { isTouchDevice } from \"../../utils/touch-helper\";\nimport { DEFAULT_PAGE_BACKGROUND_COLOR, DropdownSchemeConfiguration } from \"../../constants/colors\";\nimport { LocalizableComponent, Localization, setCurrentLocalizationDelegate } from \"../../common/localizable-component\";\nimport pfx from \"../../utils/style-class-prefix-helper\";\nimport { setCssVariable } from \"../../utils/css-variables\";\nimport { detectSlotChanges } from \"../../utils/slot-helper\";\nimport { getNestedChildrenOf } from \"../../utils/dom-helper\";\nimport { uniqueId } from \"../../utils/unique-id\";\nimport { DROPDOWN_CHEVRON_ICON_NAME, DROPDOWN_CHEVRON_SMALL_ICON_NAME } from \"../../constants/global-constants\";\nimport { DROPDOWN_LOCALIZATION } from \"./constants/dropdown-i18n\";\n// import { InitLogging } from \"../../decorators/init-logging\";\n\n/**\n * @slot info-icon - Holds a single eon-ui-info-icon element\n * @slot [unnamed] - Holds any number of eon-ui-dropdown-options\n */\n@Component({\n tag: \"eon-ui-dropdown\",\n styleUrl: \"dropdown.scss\",\n shadow: true\n})\nexport class Dropdown\n implements\n ColorableComponent>,\n LocalizableComponent,\n FormComponent {\n // @InitLogging() sentryTransaction;\n schemeConfig: DropdownSchemeConfiguration = DROPDOWN_SCHEME_CONFIG;\n schemeMap = DROPDOWN_SCHEME_MAP;\n\n localization: Localization = DROPDOWN_LOCALIZATION;\n currentLocalization: DropdownLocalization;\n\n /**\n * Array of the Select Options that will be rendered inside the Select Dropdown.\n */\n @State() options: HTMLEonUiDropdownOptionElement[] = [];\n\n selectLabels: string[] = [];\n select: HTMLSelectElement;\n userInputTimeout: any;\n userInputKeys: string = \"\";\n\n private id: string;\n\n @State() selectItems: any[] = [];\n @State() multiselectSelectedOptions: any[] = [];\n @State() isTouched: boolean;\n\n /**\n * The component's active scheme. If {@link scheme} is set, it will be set to the corresponding scheme.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n */\n @State() activeScheme: DropdownSchemeDefinition;\n\n @State() labelOffset: number = 0;\n @State() activeLabelOffset: number = 0;\n private infoIconComponent: HTMLEonUiInfoIconElement;\n private navigationElementsContainer: HTMLElement;\n\n /**\n * Whether or not an existing CustomValidator has and error.\n */\n @State() customValidatorHasError: boolean = false;\n\n /**\n * Holds the index of the current selected Option\n */\n @State() selectedOptionIndex: number = 0;\n\n /**\n * Whether or not the Dropdownlist is collapsed default is set to true.\n */\n @State() collapsed: boolean = true;\n\n /**\n * A State that contains the shown option label and its actual value.\n */\n @State() selectedOption: HTMLEonUiDropdownOptionElement;\n\n /**\n * A State that contains the current focused option.\n */\n @State() focusedOption: HTMLEonUiDropdownOptionElement;\n\n @State() isInfoIconAvailable: boolean;\n\n /**\n * Raised when the input is focused.\n */\n @State() isFocus: boolean;\n\n @Element() hostElement: HTMLEonUiDropdownElement;\n\n /**\n * **Internal use only!**\n *  
\n * Please don't change this.\n * @disableControlInStorybook true\n */\n @Prop({ reflect: true }) isFormComponent: boolean = true;\n\n /**\n * The name of the color scheme of the component.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n */\n @Prop() scheme: DropdownSchemeName;\n\n /**\n * Sets the label for the dropdown element.\n * @example \n */\n @Prop() label: string;\n\n /**\n * Defines whether the label should be placed above the component.\n */\n @Prop() labelOutside: boolean = false;\n\n /**\n * Defines whether the label should be placed before the component.\n */\n @Prop() labelBefore: boolean = false;\n\n /**\n * The name Attribute is a string that refers to the native name attribute of an HtmlInputElement.\n */\n @Prop() name: string;\n\n /**\n * Set to true if the input is required.\n */\n @Prop() required: boolean;\n\n /**\n * Set to true if the Input is in info state and the info message should be displayed.\n */\n @Prop() info: boolean = false;\n\n /**\n * Sets the text of the info message.\n */\n @Prop() infoMessage: string;\n\n /**\n * Whether or not the dropdown is disabled.\n */\n @Prop({ reflect: true, mutable: true }) disabled: boolean = false;\n\n /**\n * **Internal use only! Please don't use this property directly.**\n *  
\n * Whether or not the dropdown is invalid. If the dropdown is invalid, the error message is displayed.\n * Otherwise, the error message is hidden.\n */\n @Prop({ reflect: true, mutable: true }) invalid: boolean = false;\n\n /**\n * Reflects the native html value attribute.\n * @disableControlInStorybook true\n */\n @Prop({ reflect: true, mutable: true }) value: string;\n\n /**\n * Property to store the formatted value\n */\n @Prop({ reflect: true, mutable: true }) formattedValue: string = \"\";\n\n /**\n * **Deprecated! Use value attribute instead.**\n *  
\n * The initial selected value.\n */\n @Prop() selected: string;\n\n /**\n * **Internal use only! Please don't use this property directly.**\n *  
\n * The error message that is displayed if the dropdown is invalid. Is listed below the label and sublabel. Hidden (display: none) otherwise.\n * @example \n */\n @Prop({ mutable: true }) errorMessage: string;\n\n /**\n * An empty Placeholder for an optional custom Error Message for CustomValidation.\n * @example \n */\n @Prop({ mutable: true }) customErrorMessage: string;\n\n /**\n * A custom message to show when the required field has no value\n */\n @Prop() customRequiredMessage: string;\n\n /**\n * Defines the height of the drop down option list.\n * @example \"200px\", \"100px\", \"auto\".\n * If not set, height sticks to the max-height which is calc(100vh - 96px)\n */\n @Prop() height: string;\n\n /**\n * Set the size of the component\n */\n @Prop() size: DropdownSize = DROPDOWN_SIZE_NORMAL;\n\n /**\n * Multiselect dropdown functionality. If active, checkboxes are added to the options so that multiple options can be selected.\n */\n @Prop() multiselect: boolean = false;\n /**\n * Sort the option list and selected items in the Multiselect dropdown.\n */\n\n @Prop() sortOrder: DropdownSortOrder = DROPDOWN_SORT_MANUAL;\n\n /**\n * Specifies whether the items that have been selected should appear as chips beneath the dropdown. This property can be used for MultiSelect Dropdown.\n */\n @Prop() showSelectedItems: boolean = false;\n\n /**\n * Raised when the input has changed. Will emit the current value of the Input field.\n */\n @Event() valueChanged: EventEmitter;\n\n /**\n * Raised when the dropdown has been loaded.\n */\n @Event() dropdownLoad: EventEmitter;\n\n /**\n * Raised when the popup has been opened.\n */\n @Event() dropdownOpened: EventEmitter;\n\n /**\n * Raised when the popup has been closed.\n */\n @Event() dropdownClosed: EventEmitter;\n\n /**\n * Raised when the input is focused.\n */\n @Event() inputFocus: EventEmitter;\n\n /**\n * Raised when the input is losing focus.\n */\n @Event() inputBlur: EventEmitter;\n\n /**\n * Saves the given error message and assumes that the component is invalid if any error message is provided.\n * @param component The FormComponent that should handle the custom validation.\n * @param errorMessage An error message of a custom validator. If none is supplied, the custom validation is considered to be valid.\n */\n @Method()\n async handleCustomValidation(errorMessage: string) {\n await handleCustomValidationDelegate(this, errorMessage);\n }\n\n /**\n * Validates that the component has a value if the required attribute is set.\n */\n async validateRequired(): Promise {\n return await validateRequiredValueDelegate(this);\n }\n\n /**\n * Combines the result of the internal required validator and the custom validator.\n * Sets a default error message if required validation failed or takes the custom validation error message otherwise.\n */\n @Watch(\"required\")\n @Method()\n async validate(): Promise {\n return await validateDelegate(this);\n }\n\n /**\n * Update custom-required-message\n */\n @Watch(\"customRequiredMessage\")\n setCustomRequiredMessage() {\n this.validate();\n }\n\n @Listen(\"click\", { target: \"document\" })\n onDocumentClick(event) {\n if (this.multiselect && event.target.tagName === \"EON-UI-DROPDOWN-OPTION\") {\n } else {\n this.closeDropdownEvent(event);\n }\n }\n\n componentWillLoad() {\n this.id = this.hostElement.id || uniqueId();\n this.options = Array.from(\n getNestedChildrenOf(\n this.hostElement,\n \"eon-ui-dropdown-option\"\n ) as HTMLCollectionOf\n );\n this.createOptionsLabelSet();\n if (isTouchDevice()) this.initTouchDropdown();\n this.applyScheme();\n this.passAttributesToOptions();\n this.setCurrentLocalization();\n this.isInfoIconAvailable = !!this.hostElement.querySelector('[slot=\"info-icon\"]');\n this.infoIconComponent = this.hostElement.querySelector(\"eon-ui-info-icon\");\n !!this.infoIconComponent && this.initInfoIconEventListenerForCollapsing();\n }\n\n componentDidLoad() {\n detectSlotChanges(() => {\n const dropdownOptions = Array.from(\n getNestedChildrenOf(\n this.hostElement,\n \"eon-ui-dropdown-option\"\n ) as HTMLCollectionOf\n );\n this.options = this.sorting(dropdownOptions, this.sortOrder);\n this.createOptionsLabelSet();\n setTimeout(() => {\n this.initDropDown();\n if (isTouchDevice()) this.initTouchDropdown();\n }, 1000);\n }, this.hostElement);\n\n this.setCssVariables();\n this.initDropDown();\n this.delegateInputInnerOffsetVariables();\n this.sortOptions();\n this.dropdownLoad.emit();\n }\n\n initInfoIconEventListenerForCollapsing() {\n this.infoIconComponent.addEventListener(\"infoIconClick\", () => {\n this.hideOptionList();\n });\n }\n\n @Watch(\"size\")\n passAttributesToOptions() {\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n option.setAttribute(\"size\", this.size);\n });\n }\n\n setCurrentLocalization() {\n setCurrentLocalizationDelegate(this);\n }\n\n @Watch(\"scheme\")\n applyScheme() {\n applySchemeDelegate(this);\n this.setLabelBackgroundColor();\n\n //initial set background color to white\n let backgroundColor: BackgroundColor = DEFAULT_PAGE_BACKGROUND_COLOR;\n if (!this.scheme) {\n // Expensive! No need to call this if an explicit scheme is set.\n backgroundColor = getColorOfNearestBackground(this.hostElement);\n this.activeScheme = this.schemeMap.get(backgroundColor) || this.schemeMap.get(\"default\");\n } else {\n this.activeScheme = this.schemeConfig[this.scheme] || this.schemeMap.get(\"default\");\n }\n\n // set a CSS variable for each property in the active scheme\n // this only works for colors!\n for (let [key, value] of Object.entries(this.activeScheme)) {\n if (key === \"disabledOpacity\") this.hostElement.style.setProperty(`--${key}`, `${value}`);\n this.hostElement.style.setProperty(`--${key}`, `var(--${value})`);\n }\n }\n\n setLabelBackgroundColor() {\n const backgroundColor = getColorOfNearestBackground(this.hostElement);\n this.hostElement.style.setProperty(`--currentBackgroundColor`, `var(--${backgroundColor})`);\n }\n\n @Watch(\"activeScheme\")\n setCssVariables(): void {\n setCssVariablesDelegate(this);\n }\n\n private initDropDown() {\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n option.onclick = (event) => {\n if (event.target !== (document.querySelector(\"eon-ui-info-icon\") || document.querySelector(\"eon-ui-modal\"))) {\n if (!this.multiselect) {\n this.selectOption(event.target as HTMLEonUiDropdownOptionElement);\n } else {\n this.toggleOption(event.target as HTMLEonUiDropdownOptionElement);\n }\n }\n };\n });\n\n if (!this.multiselect) {\n if (this.selected && !this.value) this.value = this.selected; // Fallback for deprectated this.selected.\n } else {\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n option.multiselect = true;\n });\n this.initMultiSelectSelectedOptionCollector();\n }\n\n if (this.value) this.applyPreselection();\n }\n\n private initTouchDropdown() {\n let tempSelectItems: any[] = [];\n\n if (this.label) {\n let tempSelectLabelItem = {\n value: \"\",\n label: this.label,\n selected: !this.value ? true : false,\n innerText: this.label,\n disabled: true\n };\n\n tempSelectItems.push(tempSelectLabelItem);\n }\n\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n let optionElement = {\n value: option.value,\n label: option.label,\n selected: this.value && this.value === option.value ? true : false,\n innerText: option.label,\n disabled: option.disabled\n };\n\n tempSelectItems.push(optionElement);\n });\n\n this.selectItems = tempSelectItems;\n }\n\n private initMultiSelectSelectedOptionCollector() {\n const optionsObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n (mutation.target as HTMLElement).tagName === \"EON-UI-DROPDOWN-OPTION\" &&\n mutation.attributeName === \"selected\"\n ) {\n this.multiselectSelectedOptions = [];\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n if (option.selected) this.multiselectSelectedOptions.push(option);\n });\n this.updateMultiselectValue();\n }\n });\n });\n\n optionsObserver.observe(this.hostElement, {\n subtree: true,\n attributes: true //configure it to listen to attribute changes\n });\n }\n\n private deselectAllMultiselectValues() {\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n option.style.order = \"0\";\n option.selected = false;\n });\n this.sortOptions();\n }\n\n private updateMultiselectValue() {\n let multiselectValueArr = [];\n let multiselectFormattedValueArr = [];\n\n this.multiselectSelectedOptions.forEach((option: HTMLEonUiDropdownOptionElement) => {\n multiselectValueArr.push(option.value);\n multiselectFormattedValueArr.push(option.label);\n });\n\n multiselectValueArr.length > 0 ? (this.isTouched = true) : (this.isTouched = false);\n\n this.value = multiselectValueArr.join(\", \");\n this.formattedValue = multiselectFormattedValueArr.join(\"; \");\n\n this.validate();\n }\n\n @Watch(\"collapsed\")\n datePickerVisibilityEventHandler() {\n if (this.collapsed) {\n this.dropdownClosed.emit();\n } else {\n this.dropdownOpened.emit();\n }\n }\n\n @Watch(\"value\")\n emitValueChangedEvent() {\n this.valueChanged.emit(this.value);\n }\n\n @Watch(\"value\")\n updateValue() {\n if (!this.multiselect) {\n this.selectOptionByValue(this.value);\n }\n }\n\n private applyPreselection() {\n if (!this.multiselect) {\n this.selectOptionByValue(this.value);\n } else {\n this.selectMultiselectOptionsByValue(this.value);\n }\n }\n\n private selectMultiselectOptionsByValue(value: string) {\n let preselectedOptionValues = value.split(\",\");\n\n preselectedOptionValues.forEach((value) => {\n this.options.forEach((option) => {\n if (option.value === value.trim()) option.selected = true;\n });\n });\n\n this.validate();\n }\n\n private selectOptionByValue(value: string) {\n const newSelectedOption: HTMLEonUiDropdownOptionElement = this.options.filter(\n (option) => option.value === value\n )[0];\n if (newSelectedOption) {\n this.options.forEach((option) => {\n option.removeAttribute(\"selected\");\n });\n newSelectedOption.setAttribute(\"selected\", \"true\");\n this.selectedOption = newSelectedOption;\n this.focusOptionByValue(newSelectedOption.value);\n this.value = newSelectedOption.value;\n this.formattedValue = newSelectedOption.label;\n this.validate();\n }\n }\n\n private selectOption(option?: HTMLEonUiDropdownOptionElement) {\n if (option) {\n // custom select dropdown\n this.selectOptionByValue(option.value);\n } else {\n // native select on e.g. mobile devices\n this.selectOptionByValue(this.select.value);\n }\n this.collapsed = true;\n }\n\n private toggleOption(option?: HTMLEonUiDropdownOptionElement) {\n if (option.selected) {\n option.selected = false;\n } else {\n option.selected = true;\n }\n }\n\n private focusOptionByValue(value) {\n const newFocusedOption: HTMLEonUiDropdownOptionElement = this.options.filter((option) => option.value === value)[0];\n if (newFocusedOption) {\n this.options.forEach((option) => {\n option.removeAttribute(\"has-focus\");\n });\n newFocusedOption.setAttribute(\"has-focus\", \"true\");\n this.focusedOption = newFocusedOption;\n }\n }\n\n private focusOption(option: HTMLEonUiDropdownOptionElement) {\n this.focusOptionByValue(option.value);\n }\n\n private showOptionList() {\n if (this.disabled) {\n return;\n }\n\n this.collapsed = false;\n }\n\n private hideOptionList() {\n if (this.disabled) {\n return;\n }\n\n this.collapsed = true;\n }\n\n private toggleOptionList(event) {\n if (this.disabled) {\n return;\n }\n\n if (event.target.nodeName === \"EON-UI-INFO-ICON\") {\n return;\n }\n\n if (this.multiselect && event.target.nodeName === \"EON-UI-DROPDOWN-OPTION\") {\n return;\n }\n\n if (this.collapsed) this.sortOptions();\n\n this.collapsed = !this.collapsed;\n }\n\n private closeDropdownEvent(e) {\n const srcElement = e.srcElement as HTMLElement;\n let hostElementIsPartOfParentShadowRoot = e.composedPath().includes(this.hostElement);\n\n if (\n srcElement !== this.hostElement &&\n !hostElementIsPartOfParentShadowRoot &&\n !this.hostElement.contains(srcElement)\n ) {\n this.hideOptionList();\n }\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n let focusedOptionIndex: number;\n\n if (this.disabled) {\n return;\n }\n\n switch (e.key) {\n case KeyIds.SPACE:\n case KeyIds.ENTER:\n e.preventDefault();\n e.stopPropagation();\n if (this.collapsed) {\n if (this.selectedOption) {\n this.selectOption(this.selectedOption);\n }\n this.sortOptions();\n this.showOptionList();\n } else {\n if (!this.multiselect) {\n if (this.focusedOption) {\n this.selectOption(this.focusedOption);\n }\n this.collapsed = true;\n } else {\n if (this.focusedOption) {\n this.toggleOption(this.focusedOption);\n } else {\n this.collapsed = true;\n }\n }\n }\n break;\n\n case KeyIds.DOWN:\n e.preventDefault();\n if (this.collapsed) {\n if (this.selectedOption) {\n this.selectOption(this.selectedOption);\n } else {\n this.focusOption(this.options[0]);\n }\n this.showOptionList();\n } else {\n focusedOptionIndex = this.options.indexOf(this.focusedOption);\n if (focusedOptionIndex === -1 || focusedOptionIndex === this.options.length - 1) {\n this.focusOption(this.options[0]);\n } else if (focusedOptionIndex < this.options.length - 1) {\n this.focusOption(this.options[focusedOptionIndex + 1]);\n }\n }\n break;\n\n case KeyIds.UP:\n e.preventDefault();\n if (this.collapsed) {\n if (this.selectedOption) {\n this.selectOption(this.selectedOption);\n } else {\n this.focusOption(this.options[this.options.length - 1]);\n }\n this.showOptionList();\n } else {\n focusedOptionIndex = this.options.indexOf(this.focusedOption);\n if (focusedOptionIndex === -1 || focusedOptionIndex === 0) {\n this.focusOption(this.options[this.options.length - 1]);\n } else if (focusedOptionIndex > 0) {\n this.focusOption(this.options[focusedOptionIndex - 1]);\n }\n }\n break;\n\n case KeyIds.TAB:\n case KeyIds.ESCAPE:\n this.collapsed = true;\n break;\n\n case KeyIds.HOME:\n e.preventDefault();\n this.focusOption(this.options[0]);\n break;\n\n case KeyIds.END:\n e.preventDefault();\n this.focusOption(this.options[this.options.length - 1]);\n break;\n\n default:\n if (!this.collapsed) {\n this.collectUserInputString(e.key);\n focusedOptionIndex = this.getIndexOfMatchingStringInSetOfStrings(this.userInputKeys, this.selectLabels);\n if (focusedOptionIndex > -1) this.focusOption(this.options[focusedOptionIndex]);\n }\n break;\n }\n }\n\n private handleMultiselectDeleteKeyDown(e: KeyboardEvent) {\n switch (e.key) {\n case KeyIds.SPACE:\n e.preventDefault();\n this.deselectAllMultiselectValues();\n break;\n case KeyIds.ENTER:\n e.preventDefault();\n break;\n }\n }\n\n private handleIconName() {\n return this.size === DROPDOWN_SIZE_NORMAL ? DROPDOWN_CHEVRON_ICON_NAME : DROPDOWN_CHEVRON_SMALL_ICON_NAME;\n }\n\n private delegateInputInnerOffsetVariables() {\n const labelOffset = this.navigationElementsContainer.offsetWidth;\n setCssVariable(this.hostElement as HTMLElement, \"--dropdownInnerOffset\", `${labelOffset}px`);\n }\n\n @Watch(\"options\")\n private createOptionsLabelSet() {\n if (this.options) {\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n this.selectLabels.push(option.label ? option.label.toLowerCase() : \"\");\n });\n }\n }\n\n private collectUserInputString(key: string) {\n if (this.userInputTimeout) {\n this.userInputTimeout = clearTimeout(this.userInputTimeout);\n }\n this.userInputTimeout = setTimeout(() => {\n this.userInputKeys = \"\";\n }, 500);\n this.userInputKeys += key;\n }\n\n private getIndexOfMatchingStringInSetOfStrings(string: string, setOfStrings: string[]) {\n let stringLength = string.length;\n let index = setOfStrings.findIndex((s) => s.substring(0, stringLength).includes(string.toLowerCase()));\n return index;\n }\n\n private onFocus(event: FocusEvent) {\n this.inputFocus.emit(event);\n this.isFocus = true;\n }\n\n private onBlur(event: FocusEvent) {\n this.inputBlur.emit(event);\n this.isFocus = false;\n }\n\n @Watch(\"sortOrder\")\n private sortOptions() {\n let sortedOptions: HTMLEonUiDropdownOptionElement[] = this.sorting(this.options, this.sortOrder);\n sortedOptions.forEach((option: HTMLEonUiDropdownOptionElement, index) => (option.style.order = String(index)));\n if (this.multiselect) {\n let selectedOption = sortedOptions.filter((option) => option.selected);\n let deselectedOption = sortedOptions.filter((option) => !option.selected);\n\n if (selectedOption.length > 0) {\n sortedOptions = selectedOption.concat(deselectedOption);\n sortedOptions.forEach((sortedOption, index: number) => {\n this.options.forEach((option) => {\n if (sortedOption.value === option.value) option.style.order = String(index);\n });\n });\n }\n }\n this.options = sortedOptions;\n }\n\n private sorting(options: HTMLEonUiDropdownOptionElement[], order: string) {\n return order === DROPDOWN_SORT_ASC\n ? options.slice().sort((a, b) => (a.label > b.label ? 1 : -1))\n : order === DROPDOWN_SORT_DESC\n ? options.slice().sort((a, b) => (a.label > b.label ? -1 : 1))\n : options;\n }\n\n private deselectOption(value: string) {\n this.options.forEach((option: HTMLEonUiDropdownOptionElement) => {\n if (option.value === value) option.selected = false;\n });\n }\n\n private handleDeselectionKeyDown(e: KeyboardEvent, value: string) {\n switch (e.key) {\n case KeyIds.SPACE:\n e.preventDefault();\n this.deselectOption(value);\n break;\n case KeyIds.ENTER:\n e.preventDefault();\n break;\n }\n }\n\n render() {\n const infoIconWrapper = () => {\n return (\n
\n \n
\n );\n };\n\n return (\n \n {this.labelOutside && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n \n )}\n {this.labelBefore && (\n \n )}\n {\n // Renders the \"custom WebComponent approach\" only on non-touch devices.\n // To keep the native behavior on touch devices, a standard \n \n
{this.selectedOption?.label}
\n \n {\n //eslint-disable-next-line jsx-a11y/label-has-associated-control\n !this.labelOutside && \n }\n {!this.labelOutside &&
{this.label}
}\n (this.navigationElementsContainer = el as HTMLElement)}\n >\n {this.isInfoIconAvailable && infoIconWrapper()}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n
this.toggleOptionList(event)}>\n
\n \n
\n
\n \n {\n //eslint-disable-next-line jsx-a11y/label-has-associated-control\n !this.labelOutside && \n }\n {!this.labelOutside &&
{this.label}
}\n \n )\n }\n
\n {!this.disabled && this.invalid && (\n \n )}\n {this.info && (\n \n )}\n
\n\n {this.showSelectedItems && this.multiselect && this.multiselectSelectedOptions.length > 0 && (\n
\n {this.sorting(this.multiselectSelectedOptions, this.sortOrder).map((option) => (\n this.deselectOption(option.value)}\n onKeyDown={(e: KeyboardEvent) => this.handleDeselectionKeyDown(e, option.value)}\n size={this.size}\n >\n ))}\n
\n )}\n
\n );\n }\n}\n","import { DropdownOptionSchemeDefinition } from \"./dropdown-option-types\";\nimport { BackgroundColor } from \"../../../background/constants/background-types\";\nimport * as AllColors from \"../../../../constants/colors\";\nimport { toConstantCase } from \"../../../../utils/string-format\";\nimport { createDropdownOptionMapDefinition } from \"../../../../utils/scheme-helper\";\n\nfunction createSchemes() {\n let newSchemes: AllColors.DropdownOptionSchemeConfiguration = {};\n\n AllColors.DROPDOWN_OPTION_SCHEMES.forEach((element) => {\n newSchemes[element.schemeName] = {\n backgroundColor: AllColors[`COLOR_BRIGHT`],\n backgroundColorHover: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_1`],\n backgroundColorActive: AllColors[`COLOR_${toConstantCase(element.schemeName)}_25`],\n borderHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n borderBottomColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_1`]\n };\n if (element.scheme) {\n newSchemes[element.schemeName] = { ...newSchemes[element.schemeName], ...element.scheme };\n }\n });\n return newSchemes;\n}\n\nexport const DROPDOWN_OPTION_SCHEME_CONFIG: AllColors.DropdownSchemeConfiguration = createSchemes();\n\nexport const DROPDOWN_OPTION_SCHEME_MAP: Map = new Map(\n Object.entries(createDropdownOptionMapDefinition()).map(([background, config]) => [\n background as BackgroundColor,\n DROPDOWN_OPTION_SCHEME_CONFIG[config as string]\n ])\n);\n","$border: 1px solid;\n$box-shadow-hover: inset 0px 0px 0px 2px;\n$line-height: 24px;\n$option-min-height: 48px;\n$option-min-height-small: 40px;\n\n:host {\n display: block;\n width: 100%;\n\n * {\n box-sizing: border-box;\n }\n}\n\n.#{$prefix}dropdown-option {\n position: relative;\n width: 100%;\n min-height: $option-min-height;\n padding: 11px 12px 12px;\n padding-left: var(--textPaddingLeft, 12px);\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 8px;\n font-family: $font-family-base;\n line-height: $line-height;\n -webkit-appearance: none;\n box-shadow: inset 0 -1px 0 0 v(borderBottomColor);\n background-color: v(backgroundColor);\n outline: none;\n cursor: pointer;\n @include noneUserSelect();\n\n .#{$prefix}label {\n display: flex;\n align-items: center;\n }\n\n eon-ui-checkbox {\n align-self: flex-start;\n }\n\n eon-ui-icon {\n fill: v(borderActiveColor);\n margin-left: 8px;\n height: $line-height;\n }\n\n &:hover {\n border: none;\n background-color: v(backgroundColorHover);\n text-decoration: underline;\n }\n\n &.#{$prefix}focus {\n border: none;\n background-color: v(backgroundColorHover);\n }\n\n &.#{$prefix}selected {\n background-color: v(backgroundColorActive);\n box-shadow: unset;\n }\n\n &.#{$prefix}small {\n min-height: $option-min-height-small;\n padding: 7px 12px 9px 12px;\n padding-left: var(--textPaddingLeft, 12px);\n }\n\n &.#{$prefix}multiselect {\n &:hover {\n text-decoration: none;\n background-color: v(backgroundColorHover) !important;\n }\n\n &.#{$prefix}focus {\n text-decoration: none;\n background-color: v(backgroundColorHover) !important;\n }\n\n &.#{$prefix}selected {\n background-color: inherit;\n box-shadow: inset 0 -1px 0 0 v(borderBottomColor);\n }\n }\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from \"@stencil/core\";\nimport { applySchemeDelegate, ColorableComponent, setCssVariablesDelegate } from \"../../../common/colorable-component\";\nimport { DropdownOptionSchemeDefinition, DropdownOptionSchemeName } from \"./constants/dropdown-option-types\";\nimport { DROPDOWN_OPTION_SCHEME_CONFIG, DROPDOWN_OPTION_SCHEME_MAP } from \"./constants/dropdown-option-constants\";\nimport pfx from \"../../../utils/style-class-prefix-helper\";\nimport { DropdownOptionSchemeConfiguration } from \"../../../constants/colors\";\nimport { DROPDOWN_SIZE_NORMAL } from \"../constants/dropdown-constants\";\nimport { DropdownSize } from \"../constants/dropdown-types\";\nimport { ICONSIZE_NORMAL } from \"../../icon/constants/icon-constants\";\n// import { InitLogging } from \"../../../decorators/init-logging\";\n\n@Component({\n tag: \"eon-ui-dropdown-option\",\n styleUrl: \"dropdown-option.scss\",\n shadow: true\n})\nexport class DropdownOption\n implements ColorableComponent> {\n // @InitLogging() sentryTransaction;\n schemeConfig: DropdownOptionSchemeConfiguration = DROPDOWN_OPTION_SCHEME_CONFIG;\n schemeMap = DROPDOWN_OPTION_SCHEME_MAP;\n\n /**\n * The components active scheme. If {@link scheme} is set, it will be set to the corresponding scheme.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n */\n @State() activeScheme: DropdownOptionSchemeDefinition;\n\n @Element() hostElement: HTMLEonUiDropdownOptionElement;\n\n /**Refers the Option Element*/\n option: HTMLElement;\n\n /**\n * The name of the color scheme of the component.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n * Please do not use this Prop. It will be set internally by the E.ON UI Dropdown component.\n */\n @Prop({ reflect: true }) scheme: DropdownOptionSchemeName;\n\n /**\n * Reflects the native html value attribute. There is no Default Value.\n */\n @Prop({ reflect: true }) value: string;\n\n /**\n * If it's set, the label will appear on the right hand side of the Option value. The label is a string that gives a description on what the value of the option means.\n */\n @Prop({ reflect: true }) label: string;\n\n /**\n * If true this Option will be focused. Default is false.\n */\n @Prop() hasFocus: boolean = false;\n\n /**\n * Whether this is the currently selected Option. Default is false.\n */\n @Prop({ reflect: true }) selected: boolean = false;\n\n /**\n * Size of Dropdown element Normal and Small\n */\n @Prop() size: DropdownSize = DROPDOWN_SIZE_NORMAL;\n\n /**\n * Whether this option is disabled.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Multiselect dropdown functionality set by parent component. If active, checkboxes are added to the option so that multiple options can be selected.\n */\n @Prop() multiselect: boolean = false;\n\n /**\n * Represents the internal color of the component.\n * It will be read by colorable-component.ts getColorOfNearestBackground() function to realize\n * the detection of backgrounds inside of components, hidden by shadow dom.\n * @disableControlInStorybook true\n */\n @Prop({ reflect: true, mutable: true }) innerBackground: string;\n\n componentWillLoad() {\n this.applyScheme();\n }\n\n componentDidLoad() {\n this.setCssVariables();\n this.applyFocus();\n }\n\n @Watch(\"scheme\")\n applyScheme() {\n applySchemeDelegate(this);\n }\n\n @Watch(\"activeScheme\")\n setCssVariables(): void {\n setCssVariablesDelegate(this);\n this.innerBackground = this.activeScheme.backgroundColor;\n }\n\n @Watch(\"hasFocus\")\n applyFocus() {\n if (this.hasFocus) {\n this.option.focus();\n }\n }\n\n syncSelectedPropAndCheckbox(event) {\n let checkbox = event.target as HTMLEonUiCheckboxElement;\n\n // if checkbox value is not equal the components checked state, then sync\n if (this.selected !== checkbox.checked) this.selected = checkbox.checked;\n }\n\n render() {\n return (\n \n (this.option = el as HTMLElement)}\n class={pfx({\n \"dropdown-option\": true,\n selected: this.selected,\n focus: this.hasFocus,\n multiselect: this.multiselect,\n [this.size]: this.size\n })}\n >\n {this.multiselect ? (\n this.syncSelectedPropAndCheckbox(event)}\n checked={this.selected}\n >\n ) : (\n
{this.label}
\n )}\n {this.selected && !this.multiselect && (\n \n )}\n \n
\n );\n }\n}\n","import { InputSchemeDefinition } from \"./input-types\";\nimport { BackgroundColor } from \"../../background/constants/background-types\";\nimport * as AllColors from \"../../../constants/colors\";\nimport { toConstantCase } from \"../../../utils/string-format\";\nimport { createInputMapDefinition } from \"../../../utils/scheme-helper\";\n\nfunction createSchemes() {\n let newSchemes: AllColors.InputSchemeConfiguration = {};\n\n AllColors.INPUT_SCHEMES.forEach((element) => {\n newSchemes[element.schemeName] = {\n borderColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_2`],\n borderHoverColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_1`],\n borderActiveColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n textColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n textColorActive: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n labelColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n labelColorActive: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n errorMessageColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_2`],\n trailingIconColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_SHADE_1`],\n disabledBackgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_20`],\n disabledBorderColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_80`],\n disabledTrailingIconColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_60`],\n disabledLabelColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n disabledOpacity: 0.6,\n optionsBackgroundColor: AllColors.COLOR_BRIGHT,\n optionsBorderBottomColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_2`],\n optionsBackgroundColorHover: AllColors[`COLOR_${toConstantCase(element.schemeName)}_TINT_1`],\n background: AllColors.COLOR_TRANSPARENT,\n backgroundActive: AllColors.COLOR_BRIGHT,\n outerBorderColor: AllColors.COLOR_TRANSPARENT\n };\n if (element.scheme) {\n newSchemes[element.schemeName] = { ...newSchemes[element.schemeName], ...element.scheme };\n }\n });\n\n return newSchemes;\n}\n\nexport const INPUT_SCHEME_CONFIG: AllColors.InputSchemeConfiguration = createSchemes();\n\nexport const INPUT_SCHEME_MAP: Map = new Map(\n Object.entries(createInputMapDefinition()).map(([background, config]) => [\n background as BackgroundColor,\n INPUT_SCHEME_CONFIG[config as string]\n ])\n);\n\nexport const INPUT_EMAIL = \"email\";\nexport const INPUT_NUMBER = \"number\";\nexport const INPUT_PASSWORD = \"password\";\nexport const INPUT_TEL = \"tel\";\nexport const INPUT_TEXT = \"text\";\nexport const INPUT_SEARCH = \"search\";\nexport const INPUT_DATE = \"date\";\nexport const INPUT_HIDDEN = \"hidden\";\nexport const INPUT_TYPES = [\n INPUT_EMAIL,\n INPUT_NUMBER,\n INPUT_PASSWORD,\n INPUT_TEL,\n INPUT_TEXT,\n INPUT_SEARCH,\n INPUT_DATE,\n INPUT_HIDDEN\n] as const;\n\nexport const INPUT_CURRENCIES = [\n {\n name: \"EUR\",\n currencySymbol: \"€\",\n currencyFormat: \"num €\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n },\n {\n name: \"USD\",\n currencySymbol: \"$\",\n currencyFormat: \"$num\",\n thousandSeparator: \",\",\n currencyRadix: \".\"\n },\n {\n name: \"GBP\",\n currencySymbol: \"£\",\n currencyFormat: \"£num\",\n thousandSeparator: \",\",\n currencyRadix: \".\"\n },\n {\n name: \"SEK\",\n currencySymbol: \"kr\",\n currencyFormat: \"num kr\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n },\n {\n name: \"DKK\",\n currencySymbol: \"kr.\",\n currencyFormat: \"kr. num\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n },\n {\n name: \"CZK\",\n currencySymbol: \"Kč\",\n currencyFormat: \"num Kč\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n },\n {\n name: \"PLN\",\n currencySymbol: \"zł\",\n currencyFormat: \"num zł\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n },\n {\n name: \"HUF\",\n currencySymbol: \"Ft\",\n currencyFormat: \"num Ft\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n },\n {\n name: \"RON\",\n currencySymbol: \"Lei\",\n currencyFormat: \"num Lei\",\n thousandSeparator: \".\",\n currencyRadix: \",\"\n }\n];\n\nexport const CURRENCIES_NAMES = [\"EUR\", \"USD\", \"GBP\", \"SEK\", \"DKK\", \"CZK\", \"PLN\", \"HUF\", \"RON\"] as const;\n\nexport const NUMBER_REGEX1 = new RegExp(/(^\\d*\\.?\\d*)$|(Backspace|Tab|Delete|ArrowLeft|ArrowRight)/);\nexport const NUMBER_REGEX2 = new RegExp(/[^0-9]/g);\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\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 && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _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\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _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\nfunction _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\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _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 Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _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\nfunction _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\nfunction _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\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _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\nfunction _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\nfunction 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\nfunction _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\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_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\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nexport { _createClass as _, _classCallCheck as a, _objectWithoutProperties as b, _typeof as c, _inherits as d, _createSuper as e, _slicedToArray as f, _get as g, _getPrototypeOf as h, _set as i };\n","import { c as _typeof } from '../_rollupPluginBabelHelpers-a0b34764.js';\n\n/** Checks if value is string */\nfunction isString(str) {\n return typeof str === 'string' || str instanceof String;\n}\n/**\n Direction\n @prop {string} NONE\n @prop {string} LEFT\n @prop {string} FORCE_LEFT\n @prop {string} RIGHT\n @prop {string} FORCE_RIGHT\n*/\n\nvar 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 @enum {string}\n*/\n\n/** Returns next char index in direction */\nfunction indexInDirection(pos, direction) {\n if (direction === DIRECTION.LEFT) --pos;\n return pos;\n}\n/** Returns next char position in direction */\n\nfunction posInDirection(pos, direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return --pos;\n\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return ++pos;\n\n default:\n return pos;\n }\n}\n/** */\n\nfunction forceDirection(direction) {\n switch (direction) {\n case DIRECTION.LEFT:\n return DIRECTION.FORCE_LEFT;\n\n case DIRECTION.RIGHT:\n return DIRECTION.FORCE_RIGHT;\n\n default:\n return direction;\n }\n}\n/** Escapes regular expression control chars */\n\nfunction escapeRegExp(str) {\n return str.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n} // cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\n\nfunction objectIncludes(b, a) {\n if (a === b) return true;\n var arrA = Array.isArray(a),\n arrB = Array.isArray(b),\n i;\n\n if (arrA && arrB) {\n if (a.length != b.length) return false;\n\n for (i = 0; i < a.length; i++) {\n if (!objectIncludes(a[i], b[i])) return false;\n }\n\n return true;\n }\n\n if (arrA != arrB) return false;\n\n if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n var 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 var 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 var keys = Object.keys(a); // if (keys.length !== Object.keys(b).length) return false;\n\n for (i = 0; i < keys.length; i++) {\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n }\n\n for (i = 0; i < keys.length; i++) {\n if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n }\n\n return true;\n } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n return a.toString() === b.toString();\n }\n\n return false;\n}\n/** Selection range */\n\nexport { DIRECTION, escapeRegExp, forceDirection, indexInDirection, isString, objectIncludes, posInDirection };\n","import { _ as _createClass, a as _classCallCheck } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport { DIRECTION } from './utils.js';\n\n/** Provides details of changing input */\n\nvar ActionDetails = /*#__PURE__*/function () {\n /** Current input value */\n\n /** Current cursor position */\n\n /** Old input value */\n\n /** Old selection */\n function ActionDetails(value, cursorPos, oldValue, oldSelection) {\n _classCallCheck(this, ActionDetails);\n\n this.value = value;\n this.cursorPos = cursorPos;\n this.oldValue = oldValue;\n this.oldSelection = oldSelection; // double check if left part was changed (autofilling, other non-standard input triggers)\n\n while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n --this.oldSelection.start;\n }\n }\n /**\n Start changing position\n @readonly\n */\n\n\n _createClass(ActionDetails, [{\n key: \"startChangePos\",\n get: function get() {\n return Math.min(this.cursorPos, this.oldSelection.start);\n }\n /**\n Inserted symbols count\n @readonly\n */\n\n }, {\n key: \"insertedCount\",\n get: function get() {\n return this.cursorPos - this.startChangePos;\n }\n /**\n Inserted symbols\n @readonly\n */\n\n }, {\n key: \"inserted\",\n get: function get() {\n return this.value.substr(this.startChangePos, this.insertedCount);\n }\n /**\n Removed symbols count\n @readonly\n */\n\n }, {\n key: \"removedCount\",\n get: function get() {\n // Math.max for opposite operation\n return Math.max(this.oldSelection.end - this.startChangePos || // for Delete\n this.oldValue.length - this.value.length, 0);\n }\n /**\n Removed symbols\n @readonly\n */\n\n }, {\n key: \"removed\",\n get: function get() {\n return this.oldValue.substr(this.startChangePos, this.removedCount);\n }\n /**\n Unchanged head symbols\n @readonly\n */\n\n }, {\n key: \"head\",\n get: function get() {\n return this.value.substring(0, this.startChangePos);\n }\n /**\n Unchanged tail symbols\n @readonly\n */\n\n }, {\n key: \"tail\",\n get: function get() {\n return this.value.substring(this.startChangePos + this.insertedCount);\n }\n /**\n Remove direction\n @readonly\n */\n\n }, {\n key: \"removeDirection\",\n get: function get() {\n if (!this.removedCount || this.insertedCount) return DIRECTION.NONE; // align right if delete at right or if range removed (event with backspace)\n\n return this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos ? DIRECTION.RIGHT : DIRECTION.LEFT;\n }\n }]);\n\n return ActionDetails;\n}();\n\nexport { ActionDetails as default };\n","import { _ as _createClass, a as _classCallCheck } from '../_rollupPluginBabelHelpers-a0b34764.js';\n\n/**\n Provides details of changing model value\n @param {Object} [details]\n @param {string} [details.inserted] - Inserted symbols\n @param {boolean} [details.skip] - Can skip chars\n @param {number} [details.removeCount] - Removed symbols count\n @param {number} [details.tailShift] - Additional offset if any changes occurred before tail\n*/\nvar ChangeDetails = /*#__PURE__*/function () {\n /** Inserted symbols */\n\n /** Can skip chars */\n\n /** Additional offset if any changes occurred before tail */\n\n /** Raw inserted is used by dynamic mask */\n function ChangeDetails(details) {\n _classCallCheck(this, ChangeDetails);\n\n Object.assign(this, {\n inserted: '',\n rawInserted: '',\n skip: false,\n tailShift: 0\n }, details);\n }\n /**\n Aggregate changes\n @returns {ChangeDetails} `this`\n */\n\n\n _createClass(ChangeDetails, [{\n key: \"aggregate\",\n value: function aggregate(details) {\n this.rawInserted += details.rawInserted;\n this.skip = this.skip || details.skip;\n this.inserted += details.inserted;\n this.tailShift += details.tailShift;\n return this;\n }\n /** Total offset considering all changes */\n\n }, {\n key: \"offset\",\n get: function get() {\n return this.tailShift + this.inserted.length;\n }\n }]);\n\n return ChangeDetails;\n}();\n\nexport { ChangeDetails as default };\n","import { _ as _createClass, a as _classCallCheck } from '../_rollupPluginBabelHelpers-a0b34764.js';\n\n/** Provides details of continuous extracted tail */\nvar ContinuousTailDetails = /*#__PURE__*/function () {\n /** Tail value as string */\n\n /** Tail start position */\n\n /** Start position */\n function ContinuousTailDetails() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 ? arguments[2] : undefined;\n\n _classCallCheck(this, ContinuousTailDetails);\n\n this.value = value;\n this.from = from;\n this.stop = stop;\n }\n\n _createClass(ContinuousTailDetails, [{\n key: \"toString\",\n value: function toString() {\n return this.value;\n }\n }, {\n key: \"extend\",\n value: function extend(tail) {\n this.value += String(tail);\n }\n }, {\n key: \"appendTo\",\n value: function appendTo(masked) {\n return masked.append(this.toString(), {\n tail: true\n }).aggregate(masked._appendPlaceholder());\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n value: this.value,\n from: this.from,\n stop: this.stop\n };\n },\n set: function set(state) {\n Object.assign(this, state);\n }\n }, {\n key: \"shiftBefore\",\n value: function shiftBefore(pos) {\n if (this.from >= pos || !this.value.length) return '';\n var shiftChar = this.value[0];\n this.value = this.value.slice(1);\n return shiftChar;\n }\n }]);\n\n return ContinuousTailDetails;\n}();\n\nexport { ContinuousTailDetails as default };\n","/**\n * Applies mask on element.\n * @constructor\n * @param {HTMLInputElement|HTMLTextAreaElement|MaskElement} el - Element to apply mask\n * @param {Object} opts - Custom mask options\n * @return {InputMask}\n */\nfunction IMask(el) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n // currently available only for input-like elements\n return new IMask.InputMask(el, opts);\n}\n\nexport { IMask as default };\n","import { _ as _createClass, a as _classCallCheck } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport ChangeDetails from '../core/change-details.js';\nimport ContinuousTailDetails from '../core/continuous-tail-details.js';\nimport { isString } from '../core/utils.js';\nimport IMask from '../core/holder.js';\n\n/** Supported mask type */\n\n/** Provides common masking stuff */\nvar Masked = /*#__PURE__*/function () {\n // $Shape; TODO after fix https://github.com/facebook/flow/issues/4773\n\n /** @type {Mask} */\n\n /** */\n // $FlowFixMe no ideas\n\n /** Transforms value before mask processing */\n\n /** Validates if value is acceptable */\n\n /** Does additional processing in the end of editing */\n\n /** Format typed value to string */\n\n /** Parse strgin to get typed value */\n\n /** Enable characters overwriting */\n\n /** */\n function Masked(opts) {\n _classCallCheck(this, Masked);\n\n this._value = '';\n\n this._update(Object.assign({}, Masked.DEFAULTS, opts));\n\n this.isInitialized = true;\n }\n /** Sets and applies new options */\n\n\n _createClass(Masked, [{\n key: \"updateOptions\",\n value: function updateOptions(opts) {\n if (!Object.keys(opts).length) return;\n this.withValueRefresh(this._update.bind(this, opts));\n }\n /**\n Sets new options\n @protected\n */\n\n }, {\n key: \"_update\",\n value: function _update(opts) {\n Object.assign(this, opts);\n }\n /** Mask state */\n\n }, {\n key: \"state\",\n get: function get() {\n return {\n _value: this.value\n };\n },\n set: function set(state) {\n this._value = state._value;\n }\n /** Resets value */\n\n }, {\n key: \"reset\",\n value: function reset() {\n this._value = '';\n }\n /** */\n\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(value) {\n this.resolve(value);\n }\n /** Resolve new value */\n\n }, {\n key: \"resolve\",\n value: function resolve(value) {\n this.reset();\n this.append(value, {\n input: true\n }, '');\n this.doCommit();\n return this.value;\n }\n /** */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.value;\n },\n set: function set(value) {\n this.reset();\n this.append(value, {}, '');\n this.doCommit();\n }\n /** */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.doParse(this.value);\n },\n set: function set(value) {\n this.value = this.doFormat(value);\n }\n /** Value that includes raw user input */\n\n }, {\n key: \"rawInputValue\",\n get: function get() {\n return this.extractInput(0, this.value.length, {\n raw: true\n });\n },\n set: function set(value) {\n this.reset();\n this.append(value, {\n raw: true\n }, '');\n this.doCommit();\n }\n /** */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return true;\n }\n /** Finds nearest input position in direction */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos, direction) {\n return cursorPos;\n }\n /** Extracts value in range considering flags */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return this.value.slice(fromPos, toPos);\n }\n /** Extracts tail in range */\n\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n }\n /** Appends tail */\n // $FlowFixMe no ideas\n\n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n /** Appends char */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n if (!ch) return new ChangeDetails();\n this._value += ch;\n return new ChangeDetails({\n inserted: ch,\n rawInserted: ch\n });\n }\n /** Appends char */\n\n }, {\n key: \"_appendChar\",\n value: function _appendChar(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var checkTail = arguments.length > 2 ? arguments[2] : undefined;\n var consistentState = this.state;\n\n var details = this._appendCharRaw(this.doPrepare(ch, flags), flags);\n\n if (details.inserted) {\n var consistentTail;\n var appended = this.doValidate(flags) !== false;\n\n if (appended && checkTail != null) {\n // validation ok, check tail\n var beforeTailState = this.state;\n\n if (this.overwrite) {\n consistentTail = checkTail.state;\n checkTail.shiftBefore(this.value.length);\n }\n\n var tailDetails = this.appendTail(checkTail);\n appended = tailDetails.rawInserted === checkTail.toString(); // if ok, rollback state after tail\n\n if (appended && tailDetails.inserted) this.state = beforeTailState;\n } // revert all if something went wrong\n\n\n if (!appended) {\n details = new ChangeDetails();\n this.state = consistentState;\n if (checkTail && consistentTail) checkTail.state = consistentTail;\n }\n }\n\n return details;\n }\n /** Appends optional placeholder at end */\n\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n return new ChangeDetails();\n }\n /** Appends symbols considering flags */\n // $FlowFixMe no ideas\n\n }, {\n key: \"append\",\n value: function append(str, flags, tail) {\n if (!isString(str)) throw new Error('value should be string');\n var details = new ChangeDetails();\n var checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n if (flags && flags.tail) flags._beforeTailState = this.state;\n\n for (var ci = 0; ci < str.length; ++ci) {\n details.aggregate(this._appendChar(str[ci], flags, checkTail));\n } // append tail but aggregate only tailShift\n\n\n if (checkTail != null) {\n details.tailShift += this.appendTail(checkTail).tailShift; // TODO it's a good idea to clear state after appending ends\n // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n // this._resetBeforeTailState();\n }\n\n return details;\n }\n /** */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n this._value = this.value.slice(0, fromPos) + this.value.slice(toPos);\n return new ChangeDetails();\n }\n /** Calls function and reapplies current value */\n\n }, {\n key: \"withValueRefresh\",\n value: function withValueRefresh(fn) {\n if (this._refreshing || !this.isInitialized) return fn();\n this._refreshing = true;\n var rawInput = this.rawInputValue;\n var value = this.value;\n var ret = fn();\n this.rawInputValue = rawInput; // append lost trailing chars at end\n\n if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n this.append(value.slice(this.value.length), {}, '');\n }\n\n delete this._refreshing;\n return ret;\n }\n /** */\n\n }, {\n key: \"runIsolated\",\n value: function runIsolated(fn) {\n if (this._isolated || !this.isInitialized) return fn(this);\n this._isolated = true;\n var state = this.state;\n var ret = fn(this);\n this.state = state;\n delete this._isolated;\n return ret;\n }\n /**\n Prepares string before mask processing\n @protected\n */\n\n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.prepare ? this.prepare(str, this, flags) : str;\n }\n /**\n Validates if value is acceptable\n @protected\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n }\n /**\n Does additional processing in the end of editing\n @protected\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.commit) this.commit(this.value, this);\n }\n /** */\n\n }, {\n key: \"doFormat\",\n value: function doFormat(value) {\n return this.format ? this.format(value, this) : value;\n }\n /** */\n\n }, {\n key: \"doParse\",\n value: function doParse(str) {\n return this.parse ? this.parse(str, this) : str;\n }\n /** */\n\n }, {\n key: \"splice\",\n value: function splice(start, deleteCount, inserted, removeDirection) {\n var tailPos = start + deleteCount;\n var tail = this.extractTail(tailPos);\n var startChangePos = this.nearestInputPos(start, removeDirection);\n var changeDetails = new ChangeDetails({\n tailShift: startChangePos - start // adjust tailShift if start was aligned\n\n }).aggregate(this.remove(startChangePos)).aggregate(this.append(inserted, {\n input: true\n }, tail));\n return changeDetails;\n }\n }]);\n\n return Masked;\n}();\nMasked.DEFAULTS = {\n format: function format(v) {\n return v;\n },\n parse: function parse(v) {\n return v;\n }\n};\nIMask.Masked = Masked;\n\nexport { Masked as default };\n","import { isString } from '../core/utils.js';\nimport IMask from '../core/holder.js';\nimport '../_rollupPluginBabelHelpers-a0b34764.js';\n\n/** Get Masked class by mask type */\n\nfunction maskedClass(mask) {\n if (mask == null) {\n throw new Error('mask property should be defined');\n } // $FlowFixMe\n\n\n if (mask instanceof RegExp) return IMask.MaskedRegExp; // $FlowFixMe\n\n if (isString(mask)) return IMask.MaskedPattern; // $FlowFixMe\n\n if (mask instanceof Date || mask === Date) return IMask.MaskedDate; // $FlowFixMe\n\n if (mask instanceof Number || typeof mask === 'number' || mask === Number) return IMask.MaskedNumber; // $FlowFixMe\n\n if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic; // $FlowFixMe\n\n if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask; // $FlowFixMe\n\n if (mask instanceof Function) return IMask.MaskedFunction; // $FlowFixMe\n\n if (mask instanceof IMask.Masked) return mask.constructor;\n console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n // $FlowFixMe\n\n return IMask.Masked;\n}\n/** Creates new {@link Masked} depending on mask type */\n\nfunction createMask(opts) {\n // $FlowFixMe\n if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n opts = Object.assign({}, opts);\n var mask = opts.mask; // $FlowFixMe\n\n if (IMask.Masked && mask instanceof IMask.Masked) return mask;\n var MaskedClass = maskedClass(mask);\n if (!MaskedClass) throw new Error('Masked class is not found for provided mask, appropriate module needs to be import manually before creating mask.');\n return new MaskedClass(opts);\n}\nIMask.createMask = createMask;\n\nexport { createMask as default, maskedClass };\n","import { _ as _createClass, a as _classCallCheck, b as _objectWithoutProperties } from '../../_rollupPluginBabelHelpers-a0b34764.js';\nimport createMask from '../factory.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION } from '../../core/utils.js';\nimport '../../core/holder.js';\n\nvar _excluded = [\"mask\"];\nvar DEFAULT_INPUT_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/** */\n\nvar PatternInputDefinition = /*#__PURE__*/function () {\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n\n /** */\n function PatternInputDefinition(opts) {\n _classCallCheck(this, PatternInputDefinition);\n\n var mask = opts.mask,\n blockOpts = _objectWithoutProperties(opts, _excluded);\n\n this.masked = createMask({\n mask: mask\n });\n Object.assign(this, blockOpts);\n }\n\n _createClass(PatternInputDefinition, [{\n key: \"reset\",\n value: function reset() {\n this._isFilled = false;\n this.masked.reset();\n }\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n\n if (fromPos === 0 && toPos >= 1) {\n this._isFilled = false;\n return this.masked.remove(fromPos, toPos);\n }\n\n return new ChangeDetails();\n }\n }, {\n key: \"value\",\n get: function get() {\n return this.masked.value || (this._isFilled && !this.isOptional ? this.placeholderChar : '');\n }\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.masked.unmaskedValue;\n }\n }, {\n key: \"isComplete\",\n get: function get() {\n return Boolean(this.masked.value) || this.isOptional;\n }\n }, {\n key: \"_appendChar\",\n value: function _appendChar(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this._isFilled) return new ChangeDetails();\n var state = this.masked.state; // simulate input\n\n var details = this.masked._appendChar(str, flags);\n\n if (details.inserted && this.doValidate(flags) === false) {\n details.inserted = details.rawInserted = '';\n this.masked.state = state;\n }\n\n if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n details.inserted = this.placeholderChar;\n }\n\n details.skip = !details.inserted && !this.isOptional;\n this._isFilled = Boolean(details.inserted);\n return details;\n }\n }, {\n key: \"append\",\n value: function append() {\n var _this$masked;\n\n return (_this$masked = this.masked).append.apply(_this$masked, arguments);\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = new ChangeDetails();\n if (this._isFilled || this.isOptional) return details;\n this._isFilled = true;\n details.inserted = this.placeholderChar;\n return details;\n }\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this$masked2;\n\n return (_this$masked2 = this.masked).extractTail.apply(_this$masked2, arguments);\n }\n }, {\n key: \"appendTail\",\n value: function appendTail() {\n var _this$masked3;\n\n return (_this$masked3 = this.masked).appendTail.apply(_this$masked3, arguments);\n }\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 ? arguments[2] : undefined;\n return this.masked.extractInput(fromPos, toPos, flags);\n }\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n var minPos = 0;\n var maxPos = this.value.length;\n var boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return this.isComplete ? boundPos : minPos;\n\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n return this.isComplete ? boundPos : maxPos;\n\n case DIRECTION.NONE:\n default:\n return boundPos;\n }\n }\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _this$masked4, _this$parent;\n\n return (_this$masked4 = this.masked).doValidate.apply(_this$masked4, arguments) && (!this.parent || (_this$parent = this.parent).doValidate.apply(_this$parent, arguments));\n }\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n this.masked.doCommit();\n }\n }, {\n key: \"state\",\n get: function get() {\n return {\n masked: this.masked.state,\n _isFilled: this._isFilled\n };\n },\n set: function set(state) {\n this.masked.state = state.masked;\n this._isFilled = state._isFilled;\n }\n }]);\n\n return PatternInputDefinition;\n}();\n\nexport { DEFAULT_INPUT_DEFINITIONS, PatternInputDefinition as default };\n","import { _ as _createClass, a as _classCallCheck } from '../../_rollupPluginBabelHelpers-a0b34764.js';\nimport ChangeDetails from '../../core/change-details.js';\nimport { DIRECTION, isString } from '../../core/utils.js';\nimport ContinuousTailDetails from '../../core/continuous-tail-details.js';\n\nvar PatternFixedDefinition = /*#__PURE__*/function () {\n /** */\n\n /** */\n\n /** */\n\n /** */\n function PatternFixedDefinition(opts) {\n _classCallCheck(this, PatternFixedDefinition);\n\n Object.assign(this, opts);\n this._value = '';\n }\n\n _createClass(PatternFixedDefinition, [{\n key: \"value\",\n get: function get() {\n return this._value;\n }\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.isUnmasking ? this.value : '';\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._isRawInput = false;\n this._value = '';\n }\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\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 }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n var minPos = 0;\n var maxPos = this._value.length;\n\n switch (direction) {\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n return minPos;\n\n case DIRECTION.NONE:\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n default:\n return maxPos;\n }\n }\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._value.length;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n }\n }, {\n key: \"isComplete\",\n get: function get() {\n return true;\n }\n }, {\n key: \"_appendChar\",\n value: function _appendChar(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var details = new ChangeDetails();\n if (this._value) return details;\n var appended = this.char === str[0];\n var isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && !flags.tail;\n if (isResolved) details.rawInserted = this.char;\n this._value = details.inserted = this.char;\n this._isRawInput = isResolved && (flags.raw || flags.input);\n return details;\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = new ChangeDetails();\n if (this._value) return details;\n this._value = details.inserted = this.char;\n return details;\n }\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n return new ContinuousTailDetails('');\n } // $FlowFixMe no ideas\n\n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n return tail.appendTo(this);\n }\n }, {\n key: \"append\",\n value: function append(str, flags, tail) {\n var details = this._appendChar(str, flags);\n\n if (tail != null) {\n details.tailShift += this.appendTail(tail).tailShift;\n }\n\n return details;\n }\n }, {\n key: \"doCommit\",\n value: function doCommit() {}\n }, {\n key: \"state\",\n get: function get() {\n return {\n _value: this._value,\n _isRawInput: this._isRawInput\n };\n },\n set: function set(state) {\n Object.assign(this, state);\n }\n }]);\n\n return PatternFixedDefinition;\n}();\n\nexport { PatternFixedDefinition as default };\n","import { _ as _createClass, a as _classCallCheck, b as _objectWithoutProperties } from '../../_rollupPluginBabelHelpers-a0b34764.js';\nimport 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\nvar _excluded = [\"chunks\"];\n\nvar ChunksTailDetails = /*#__PURE__*/function () {\n /** */\n function ChunksTailDetails() {\n var chunks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n _classCallCheck(this, ChunksTailDetails);\n\n this.chunks = chunks;\n this.from = from;\n }\n\n _createClass(ChunksTailDetails, [{\n key: \"toString\",\n value: function toString() {\n return this.chunks.map(String).join('');\n } // $FlowFixMe no ideas\n\n }, {\n key: \"extend\",\n value: function extend(tailChunk) {\n if (!String(tailChunk)) return;\n if (isString(tailChunk)) tailChunk = new ContinuousTailDetails(String(tailChunk));\n var lastChunk = this.chunks[this.chunks.length - 1];\n var extendLast = lastChunk && (lastChunk.stop === tailChunk.stop || tailChunk.stop == null) && // if tail chunk goes just after last chunk\n tailChunk.from === lastChunk.from + lastChunk.toString().length;\n\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 var firstTailChunk;\n\n while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n firstTailChunk = tailChunk.chunks.shift();\n firstTailChunk.from += tailChunk.from;\n this.extend(firstTailChunk);\n }\n } // if tail chunk still has value\n\n\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 }, {\n key: \"appendTo\",\n value: function appendTo(masked) {\n // $FlowFixMe\n if (!(masked instanceof IMask.MaskedPattern)) {\n var tail = new ContinuousTailDetails(this.toString());\n return tail.appendTo(masked);\n }\n\n var details = new ChangeDetails();\n\n for (var ci = 0; ci < this.chunks.length && !details.skip; ++ci) {\n var chunk = this.chunks[ci];\n\n var lastBlockIter = masked._mapPosToBlock(masked.value.length);\n\n var stop = chunk.stop;\n var chunkBlock = void 0;\n\n if (stop != null && (!lastBlockIter || lastBlockIter.index <= stop)) {\n if (chunk instanceof ChunksTailDetails || // for continuous block also check if stop is exist\n masked._stops.indexOf(stop) >= 0) {\n details.aggregate(masked._appendPlaceholder(stop));\n }\n\n chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n }\n\n if (chunkBlock) {\n var tailDetails = chunkBlock.appendTail(chunk);\n tailDetails.skip = false; // always ignore skip, it will be set on last\n\n details.aggregate(tailDetails);\n masked._value += tailDetails.inserted; // get not inserted chars\n\n var 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 }, {\n key: \"state\",\n get: function get() {\n return {\n chunks: this.chunks.map(function (c) {\n return c.state;\n }),\n from: this.from,\n stop: this.stop,\n blockIndex: this.blockIndex\n };\n },\n set: function set(state) {\n var chunks = state.chunks,\n props = _objectWithoutProperties(state, _excluded);\n\n Object.assign(this, props);\n this.chunks = chunks.map(function (cstate) {\n var chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails(); // $FlowFixMe already checked above\n\n chunk.state = cstate;\n return chunk;\n });\n }\n }, {\n key: \"shiftBefore\",\n value: function shiftBefore(pos) {\n if (this.from >= pos || !this.chunks.length) return '';\n var chunkShiftPos = pos - this.from;\n var ci = 0;\n\n while (ci < this.chunks.length) {\n var chunk = this.chunks[ci];\n var shiftChar = chunk.shiftBefore(chunkShiftPos);\n\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\n if (shiftChar) return shiftChar;\n }\n\n return '';\n }\n }]);\n\n return ChunksTailDetails;\n}();\n\nexport { ChunksTailDetails as default };\n","import { d as _inherits, e as _createSuper, _ as _createClass, a as _classCallCheck, g as _get, h as _getPrototypeOf } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport 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 */\n\nvar MaskedRegExp = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedRegExp, _Masked);\n\n var _super = _createSuper(MaskedRegExp);\n\n function MaskedRegExp() {\n _classCallCheck(this, MaskedRegExp);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MaskedRegExp, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n if (opts.mask) opts.validate = function (value) {\n return value.search(opts.mask) >= 0;\n };\n\n _get(_getPrototypeOf(MaskedRegExp.prototype), \"_update\", this).call(this, opts);\n }\n }]);\n\n return MaskedRegExp;\n}(Masked);\nIMask.MaskedRegExp = MaskedRegExp;\n\nexport { MaskedRegExp as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, g as _get, h as _getPrototypeOf, b as _objectWithoutProperties, i as _set } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport { DIRECTION, forceDirection } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport PatternInputDefinition, { DEFAULT_INPUT_DEFINITIONS } from './pattern/input-definition.js';\nimport PatternFixedDefinition from './pattern/fixed-definition.js';\nimport ChunksTailDetails from './pattern/chunk-tail-details.js';\nimport createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport './regexp.js';\nimport '../core/continuous-tail-details.js';\n\nvar _excluded = [\"_blocks\"];\n\n/**\n Pattern mask\n @param {Object} opts\n @param {Object} opts.blocks\n @param {Object} opts.definitions\n @param {string} opts.placeholderChar\n @param {boolean} opts.lazy\n*/\nvar MaskedPattern = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedPattern, _Masked);\n\n var _super = _createSuper(MaskedPattern);\n\n /** */\n\n /** */\n\n /** Single char for empty input */\n\n /** Show placeholder only when needed */\n function MaskedPattern() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, MaskedPattern);\n\n // TODO type $Shape={} does not work\n opts.definitions = Object.assign({}, DEFAULT_INPUT_DEFINITIONS, opts.definitions);\n return _super.call(this, Object.assign({}, MaskedPattern.DEFAULTS, opts));\n }\n /**\n @override\n @param {Object} opts\n */\n\n\n _createClass(MaskedPattern, [{\n key: \"_update\",\n value: function _update() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n\n _get(_getPrototypeOf(MaskedPattern.prototype), \"_update\", this).call(this, opts);\n\n this._rebuildMask();\n }\n /** */\n\n }, {\n key: \"_rebuildMask\",\n value: function _rebuildMask() {\n var _this = this;\n\n var defs = this.definitions;\n this._blocks = [];\n this._stops = [];\n this._maskedBlocks = {};\n var pattern = this.mask;\n if (!pattern || !defs) return;\n var unmaskingBlock = false;\n var optionalBlock = false;\n\n for (var i = 0; i < pattern.length; ++i) {\n if (this.blocks) {\n var _ret = function () {\n var p = pattern.slice(i);\n var bNames = Object.keys(_this.blocks).filter(function (bName) {\n return p.indexOf(bName) === 0;\n }); // order by key length\n\n bNames.sort(function (a, b) {\n return b.length - a.length;\n }); // use block name with max length\n\n var bName = bNames[0];\n\n if (bName) {\n // $FlowFixMe no ideas\n var maskedBlock = createMask(Object.assign({\n parent: _this,\n lazy: _this.lazy,\n placeholderChar: _this.placeholderChar,\n overwrite: _this.overwrite\n }, _this.blocks[bName]));\n\n if (maskedBlock) {\n _this._blocks.push(maskedBlock); // store block index\n\n\n if (!_this._maskedBlocks[bName]) _this._maskedBlocks[bName] = [];\n\n _this._maskedBlocks[bName].push(_this._blocks.length - 1);\n }\n\n i += bName.length - 1;\n return \"continue\";\n }\n }();\n\n if (_ret === \"continue\") continue;\n }\n\n var char = pattern[i];\n\n var _isInput = (char in defs);\n\n if (char === MaskedPattern.STOP_CHAR) {\n this._stops.push(this._blocks.length);\n\n continue;\n }\n\n if (char === '{' || char === '}') {\n unmaskingBlock = !unmaskingBlock;\n continue;\n }\n\n if (char === '[' || char === ']') {\n optionalBlock = !optionalBlock;\n continue;\n }\n\n if (char === MaskedPattern.ESCAPE_CHAR) {\n ++i;\n char = pattern[i];\n if (!char) break;\n _isInput = false;\n }\n\n var def = _isInput ? new PatternInputDefinition({\n parent: this,\n lazy: this.lazy,\n placeholderChar: this.placeholderChar,\n mask: defs[char],\n isOptional: optionalBlock\n }) : new PatternFixedDefinition({\n char: char,\n isUnmasking: unmaskingBlock\n });\n\n this._blocks.push(def);\n }\n }\n /**\n @override\n */\n\n }, {\n key: \"state\",\n get: function get() {\n return Object.assign({}, _get(_getPrototypeOf(MaskedPattern.prototype), \"state\", this), {\n _blocks: this._blocks.map(function (b) {\n return b.state;\n })\n });\n },\n set: function set(state) {\n var _blocks = state._blocks,\n maskedState = _objectWithoutProperties(state, _excluded);\n\n this._blocks.forEach(function (b, bi) {\n return b.state = _blocks[bi];\n });\n\n _set(_getPrototypeOf(MaskedPattern.prototype), \"state\", maskedState, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"reset\",\n value: function reset() {\n _get(_getPrototypeOf(MaskedPattern.prototype), \"reset\", this).call(this);\n\n this._blocks.forEach(function (b) {\n return b.reset();\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return this._blocks.every(function (b) {\n return b.isComplete;\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n this._blocks.forEach(function (b) {\n return b.doCommit();\n });\n\n _get(_getPrototypeOf(MaskedPattern.prototype), \"doCommit\", this).call(this);\n }\n /**\n @override\n */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._blocks.reduce(function (str, b) {\n return str += b.unmaskedValue;\n }, '');\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedPattern.prototype), \"unmaskedValue\", unmaskedValue, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n // TODO return _value when not in change?\n return this._blocks.reduce(function (str, b) {\n return str += b.value;\n }, '');\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedPattern.prototype), \"value\", value, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"appendTail\",\n value: function appendTail(tail) {\n return _get(_getPrototypeOf(MaskedPattern.prototype), \"appendTail\", this).call(this, tail).aggregate(this._appendPlaceholder());\n }\n /**\n @override\n */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var blockIter = this._mapPosToBlock(this.value.length);\n\n var details = new ChangeDetails();\n if (!blockIter) return details;\n\n for (var bi = blockIter.index;; ++bi) {\n var _block = this._blocks[bi];\n if (!_block) break;\n\n var blockDetails = _block._appendChar(ch, flags);\n\n var skip = blockDetails.skip;\n details.aggregate(blockDetails);\n if (skip || blockDetails.rawInserted) break; // go next char\n }\n\n return details;\n }\n /**\n @override\n */\n\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this2 = this;\n\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var chunkTail = new ChunksTailDetails();\n if (fromPos === toPos) return chunkTail;\n\n this._forEachBlocksInRange(fromPos, toPos, function (b, bi, bFromPos, bToPos) {\n var blockChunk = b.extractTail(bFromPos, bToPos);\n blockChunk.stop = _this2._findStopBefore(bi);\n blockChunk.from = _this2._blockStartPos(bi);\n if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n chunkTail.extend(blockChunk);\n });\n\n return chunkTail;\n }\n /**\n @override\n */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (fromPos === toPos) return '';\n var input = '';\n\n this._forEachBlocksInRange(fromPos, toPos, function (b, _, fromPos, toPos) {\n input += b.extractInput(fromPos, toPos, flags);\n });\n\n return input;\n }\n }, {\n key: \"_findStopBefore\",\n value: function _findStopBefore(blockIndex) {\n var stopBefore;\n\n for (var si = 0; si < this._stops.length; ++si) {\n var stop = this._stops[si];\n if (stop <= blockIndex) stopBefore = stop;else break;\n }\n\n return stopBefore;\n }\n /** Appends placeholder depending on laziness */\n\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder(toBlockIndex) {\n var _this3 = this;\n\n var details = new ChangeDetails();\n if (this.lazy && toBlockIndex == null) return details;\n\n var startBlockIter = this._mapPosToBlock(this.value.length);\n\n if (!startBlockIter) return details;\n var startBlockIndex = startBlockIter.index;\n var endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n\n this._blocks.slice(startBlockIndex, endBlockIndex).forEach(function (b) {\n if (!b.lazy || toBlockIndex != null) {\n // $FlowFixMe `_blocks` may not be present\n var args = b._blocks != null ? [b._blocks.length] : [];\n\n var bDetails = b._appendPlaceholder.apply(b, args);\n\n _this3._value += bDetails.inserted;\n details.aggregate(bDetails);\n }\n });\n\n return details;\n }\n /** Finds block in pos */\n\n }, {\n key: \"_mapPosToBlock\",\n value: function _mapPosToBlock(pos) {\n var accVal = '';\n\n for (var bi = 0; bi < this._blocks.length; ++bi) {\n var _block2 = this._blocks[bi];\n var blockStartPos = accVal.length;\n accVal += _block2.value;\n\n if (pos <= accVal.length) {\n return {\n index: bi,\n offset: pos - blockStartPos\n };\n }\n }\n }\n /** */\n\n }, {\n key: \"_blockStartPos\",\n value: function _blockStartPos(blockIndex) {\n return this._blocks.slice(0, blockIndex).reduce(function (pos, b) {\n return pos += b.value.length;\n }, 0);\n }\n /** */\n\n }, {\n key: \"_forEachBlocksInRange\",\n value: function _forEachBlocksInRange(fromPos) {\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var fn = arguments.length > 2 ? arguments[2] : undefined;\n\n var fromBlockIter = this._mapPosToBlock(fromPos);\n\n if (fromBlockIter) {\n var toBlockIter = this._mapPosToBlock(toPos); // process first block\n\n\n var isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n var fromBlockStartPos = fromBlockIter.offset;\n var fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].value.length;\n fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n\n if (toBlockIter && !isSameBlock) {\n // process intermediate blocks\n for (var bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n fn(this._blocks[bi], bi, 0, this._blocks[bi].value.length);\n } // process last block\n\n\n fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n }\n }\n }\n /**\n @override\n */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n\n var removeDetails = _get(_getPrototypeOf(MaskedPattern.prototype), \"remove\", this).call(this, fromPos, toPos);\n\n this._forEachBlocksInRange(fromPos, toPos, function (b, _, bFromPos, bToPos) {\n removeDetails.aggregate(b.remove(bFromPos, bToPos));\n });\n\n return removeDetails;\n }\n /**\n @override\n */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos) {\n var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DIRECTION.NONE;\n // TODO refactor - extract alignblock\n var beginBlockData = this._mapPosToBlock(cursorPos) || {\n index: 0,\n offset: 0\n };\n var beginBlockOffset = beginBlockData.offset,\n beginBlockIndex = beginBlockData.index;\n var beginBlock = this._blocks[beginBlockIndex];\n if (!beginBlock) return cursorPos;\n var beginBlockCursorPos = beginBlockOffset; // if position inside block - try to adjust it\n\n if (beginBlockCursorPos !== 0 && beginBlockCursorPos < beginBlock.value.length) {\n beginBlockCursorPos = beginBlock.nearestInputPos(beginBlockOffset, forceDirection(direction));\n }\n\n var cursorAtRight = beginBlockCursorPos === beginBlock.value.length;\n var cursorAtLeft = beginBlockCursorPos === 0; // cursor is INSIDE first block (not at bounds)\n\n if (!cursorAtLeft && !cursorAtRight) return this._blockStartPos(beginBlockIndex) + beginBlockCursorPos;\n var searchBlockIndex = cursorAtRight ? beginBlockIndex + 1 : beginBlockIndex;\n\n if (direction === DIRECTION.NONE) {\n // NONE direction used to calculate start input position if no chars were removed\n // FOR NONE:\n // -\n // input|any\n // ->\n // any|input\n // <-\n // filled-input|any\n // check if first block at left is input\n if (searchBlockIndex > 0) {\n var blockIndexAtLeft = searchBlockIndex - 1;\n var blockAtLeft = this._blocks[blockIndexAtLeft];\n var blockInputPos = blockAtLeft.nearestInputPos(0, DIRECTION.NONE); // is input\n\n if (!blockAtLeft.value.length || blockInputPos !== blockAtLeft.value.length) {\n return this._blockStartPos(searchBlockIndex);\n }\n } // ->\n\n\n var firstInputAtRight = searchBlockIndex;\n\n for (var bi = firstInputAtRight; bi < this._blocks.length; ++bi) {\n var blockAtRight = this._blocks[bi];\n\n var _blockInputPos = blockAtRight.nearestInputPos(0, DIRECTION.NONE);\n\n if (!blockAtRight.value.length || _blockInputPos !== blockAtRight.value.length) {\n return this._blockStartPos(bi) + _blockInputPos;\n }\n } // <-\n // find first non-fixed symbol\n\n\n for (var _bi = searchBlockIndex - 1; _bi >= 0; --_bi) {\n var _block3 = this._blocks[_bi];\n\n var _blockInputPos2 = _block3.nearestInputPos(0, DIRECTION.NONE); // is input\n\n\n if (!_block3.value.length || _blockInputPos2 !== _block3.value.length) {\n return this._blockStartPos(_bi) + _block3.value.length;\n }\n }\n\n return cursorPos;\n }\n\n if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n // -\n // any|filled-input\n // <-\n // any|first not empty is not-len-aligned\n // not-0-aligned|any\n // ->\n // any|not-len-aligned or end\n // check if first block at right is filled input\n var firstFilledBlockIndexAtRight;\n\n for (var _bi2 = searchBlockIndex; _bi2 < this._blocks.length; ++_bi2) {\n if (this._blocks[_bi2].value) {\n firstFilledBlockIndexAtRight = _bi2;\n break;\n }\n }\n\n if (firstFilledBlockIndexAtRight != null) {\n var filledBlock = this._blocks[firstFilledBlockIndexAtRight];\n\n var _blockInputPos3 = filledBlock.nearestInputPos(0, DIRECTION.RIGHT);\n\n if (_blockInputPos3 === 0 && filledBlock.unmaskedValue.length) {\n // filled block is input\n return this._blockStartPos(firstFilledBlockIndexAtRight) + _blockInputPos3;\n }\n } // <-\n // find this vars\n\n\n var firstFilledInputBlockIndex = -1;\n var firstEmptyInputBlockIndex; // TODO consider nested empty inputs\n\n for (var _bi3 = searchBlockIndex - 1; _bi3 >= 0; --_bi3) {\n var _block4 = this._blocks[_bi3];\n\n var _blockInputPos4 = _block4.nearestInputPos(_block4.value.length, DIRECTION.FORCE_LEFT);\n\n if (!_block4.value || _blockInputPos4 !== 0) firstEmptyInputBlockIndex = _bi3;\n\n if (_blockInputPos4 !== 0) {\n if (_blockInputPos4 !== _block4.value.length) {\n // aligned inside block - return immediately\n return this._blockStartPos(_bi3) + _blockInputPos4;\n } else {\n // found filled\n firstFilledInputBlockIndex = _bi3;\n break;\n }\n }\n }\n\n if (direction === DIRECTION.LEFT) {\n // try find first empty input before start searching position only when not forced\n for (var _bi4 = firstFilledInputBlockIndex + 1; _bi4 <= Math.min(searchBlockIndex, this._blocks.length - 1); ++_bi4) {\n var _block5 = this._blocks[_bi4];\n\n var _blockInputPos5 = _block5.nearestInputPos(0, DIRECTION.NONE);\n\n var blockAlignedPos = this._blockStartPos(_bi4) + _blockInputPos5;\n\n if (blockAlignedPos > cursorPos) break; // if block is not lazy input\n\n if (_blockInputPos5 !== _block5.value.length) return blockAlignedPos;\n }\n } // process overflow\n\n\n if (firstFilledInputBlockIndex >= 0) {\n return this._blockStartPos(firstFilledInputBlockIndex) + this._blocks[firstFilledInputBlockIndex].value.length;\n } // for lazy if has aligned left inside fixed and has came to the start - use start position\n\n\n if (direction === DIRECTION.FORCE_LEFT || this.lazy && !this.extractInput() && !isInput(this._blocks[searchBlockIndex])) {\n return 0;\n }\n\n if (firstEmptyInputBlockIndex != null) {\n return this._blockStartPos(firstEmptyInputBlockIndex);\n } // find first input\n\n\n for (var _bi5 = searchBlockIndex; _bi5 < this._blocks.length; ++_bi5) {\n var _block6 = this._blocks[_bi5];\n\n var _blockInputPos6 = _block6.nearestInputPos(0, DIRECTION.NONE); // is input\n\n\n if (!_block6.value.length || _blockInputPos6 !== _block6.value.length) {\n return this._blockStartPos(_bi5) + _blockInputPos6;\n }\n }\n\n return 0;\n }\n\n if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n // ->\n // any|not-len-aligned and filled\n // any|not-len-aligned\n // <-\n // not-0-aligned or start|any\n var firstInputBlockAlignedIndex;\n var firstInputBlockAlignedPos;\n\n for (var _bi6 = searchBlockIndex; _bi6 < this._blocks.length; ++_bi6) {\n var _block7 = this._blocks[_bi6];\n\n var _blockInputPos7 = _block7.nearestInputPos(0, DIRECTION.NONE);\n\n if (_blockInputPos7 !== _block7.value.length) {\n firstInputBlockAlignedPos = this._blockStartPos(_bi6) + _blockInputPos7;\n firstInputBlockAlignedIndex = _bi6;\n break;\n }\n }\n\n if (firstInputBlockAlignedIndex != null && firstInputBlockAlignedPos != null) {\n for (var _bi7 = firstInputBlockAlignedIndex; _bi7 < this._blocks.length; ++_bi7) {\n var _block8 = this._blocks[_bi7];\n\n var _blockInputPos8 = _block8.nearestInputPos(0, DIRECTION.FORCE_RIGHT);\n\n if (_blockInputPos8 !== _block8.value.length) {\n return this._blockStartPos(_bi7) + _blockInputPos8;\n }\n }\n\n return direction === DIRECTION.FORCE_RIGHT ? this.value.length : firstInputBlockAlignedPos;\n }\n\n for (var _bi8 = Math.min(searchBlockIndex, this._blocks.length - 1); _bi8 >= 0; --_bi8) {\n var _block9 = this._blocks[_bi8];\n\n var _blockInputPos9 = _block9.nearestInputPos(_block9.value.length, DIRECTION.LEFT);\n\n if (_blockInputPos9 !== 0) {\n var alignedPos = this._blockStartPos(_bi8) + _blockInputPos9;\n\n if (alignedPos >= cursorPos) return alignedPos;\n break;\n }\n }\n }\n\n return cursorPos;\n }\n /** Get block by name */\n\n }, {\n key: \"maskedBlock\",\n value: function maskedBlock(name) {\n return this.maskedBlocks(name)[0];\n }\n /** Get all blocks by name */\n\n }, {\n key: \"maskedBlocks\",\n value: function maskedBlocks(name) {\n var _this4 = this;\n\n var indices = this._maskedBlocks[name];\n if (!indices) return [];\n return indices.map(function (gi) {\n return _this4._blocks[gi];\n });\n }\n }]);\n\n return MaskedPattern;\n}(Masked);\nMaskedPattern.DEFAULTS = {\n lazy: true,\n placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\n\nfunction isInput(block) {\n if (!block) return false;\n var value = block.value;\n return !value || block.nearestInputPos(0, DIRECTION.NONE) !== value.length;\n}\n\nIMask.MaskedPattern = MaskedPattern;\n\nexport { MaskedPattern as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, g as _get, h as _getPrototypeOf, f as _slicedToArray } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './regexp.js';\n\n/** Pattern which accepts ranges */\n\nvar MaskedRange = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedRange, _MaskedPattern);\n\n var _super = _createSuper(MaskedRange);\n\n function MaskedRange() {\n _classCallCheck(this, MaskedRange);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MaskedRange, [{\n key: \"_matchFrom\",\n get:\n /**\n Optionally sets max length of pattern.\n Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n */\n\n /** Min bound */\n\n /** Max bound */\n\n /** */\n function get() {\n return this.maxLength - String(this.from).length;\n }\n /**\n @override\n */\n\n }, {\n key: \"_update\",\n value: function _update(opts) {\n // TODO type\n opts = Object.assign({\n to: this.to || 0,\n from: this.from || 0\n }, opts);\n var maxLength = String(opts.to).length;\n if (opts.maxLength != null) maxLength = Math.max(maxLength, opts.maxLength);\n opts.maxLength = maxLength;\n var fromStr = String(opts.from).padStart(maxLength, '0');\n var toStr = String(opts.to).padStart(maxLength, '0');\n var sameCharsCount = 0;\n\n while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) {\n ++sameCharsCount;\n }\n\n opts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(maxLength - sameCharsCount);\n\n _get(_getPrototypeOf(MaskedRange.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return _get(_getPrototypeOf(MaskedRange.prototype), \"isComplete\", this) && Boolean(this.value);\n }\n }, {\n key: \"boundaries\",\n value: function boundaries(str) {\n var minstr = '';\n var maxstr = '';\n\n var _ref = str.match(/^(\\D*)(\\d*)(\\D*)/) || [],\n _ref2 = _slicedToArray(_ref, 3),\n placeholder = _ref2[1],\n num = _ref2[2];\n\n if (num) {\n minstr = '0'.repeat(placeholder.length) + num;\n maxstr = '9'.repeat(placeholder.length) + num;\n }\n\n minstr = minstr.padEnd(this.maxLength, '0');\n maxstr = maxstr.padEnd(this.maxLength, '9');\n return [minstr, maxstr];\n }\n /**\n @override\n */\n\n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n str = _get(_getPrototypeOf(MaskedRange.prototype), \"doPrepare\", this).call(this, str, flags).replace(/\\D/g, '');\n if (!this.autofix) return str;\n var fromStr = String(this.from).padStart(this.maxLength, '0');\n var toStr = String(this.to).padStart(this.maxLength, '0');\n var val = this.value;\n var prepStr = '';\n\n for (var ci = 0; ci < str.length; ++ci) {\n var nextVal = val + prepStr + str[ci];\n\n var _this$boundaries = this.boundaries(nextVal),\n _this$boundaries2 = _slicedToArray(_this$boundaries, 2),\n minstr = _this$boundaries2[0],\n maxstr = _this$boundaries2[1];\n\n if (Number(maxstr) < this.from) prepStr += fromStr[nextVal.length - 1];else if (Number(minstr) > this.to) prepStr += toStr[nextVal.length - 1];else prepStr += str[ci];\n }\n\n return prepStr;\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2;\n\n var str = this.value;\n var firstNonZero = str.search(/[^0]/);\n if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n\n var _this$boundaries3 = this.boundaries(str),\n _this$boundaries4 = _slicedToArray(_this$boundaries3, 2),\n minstr = _this$boundaries4[0],\n maxstr = _this$boundaries4[1];\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.from <= Number(maxstr) && Number(minstr) <= this.to && (_get2 = _get(_getPrototypeOf(MaskedRange.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args));\n }\n }]);\n\n return MaskedRange;\n}(MaskedPattern);\nIMask.MaskedRange = MaskedRange;\n\nexport { MaskedRange as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, f as _slicedToArray, g as _get, h as _getPrototypeOf, i as _set } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport MaskedPattern from './pattern.js';\nimport MaskedRange from './range.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './regexp.js';\n\n/** Date mask */\n\nvar MaskedDate = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedDate, _MaskedPattern);\n\n var _super = _createSuper(MaskedDate);\n\n /** Pattern mask for date according to {@link MaskedDate#format} */\n\n /** Start date */\n\n /** End date */\n\n /** */\n\n /**\n @param {Object} opts\n */\n function MaskedDate(opts) {\n _classCallCheck(this, MaskedDate);\n\n return _super.call(this, Object.assign({}, MaskedDate.DEFAULTS, opts));\n }\n /**\n @override\n */\n\n\n _createClass(MaskedDate, [{\n key: \"_update\",\n value: function _update(opts) {\n if (opts.mask === Date) delete opts.mask;\n if (opts.pattern) opts.mask = opts.pattern;\n var blocks = opts.blocks;\n opts.blocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS()); // adjust year block\n\n if (opts.min) opts.blocks.Y.from = opts.min.getFullYear();\n if (opts.max) opts.blocks.Y.to = opts.max.getFullYear();\n\n if (opts.min && opts.max && opts.blocks.Y.from === opts.blocks.Y.to) {\n opts.blocks.m.from = opts.min.getMonth() + 1;\n opts.blocks.m.to = opts.max.getMonth() + 1;\n\n if (opts.blocks.m.from === opts.blocks.m.to) {\n opts.blocks.d.from = opts.min.getDate();\n opts.blocks.d.to = opts.max.getDate();\n }\n }\n\n Object.assign(opts.blocks, blocks); // add autofix\n\n Object.keys(opts.blocks).forEach(function (bk) {\n var b = opts.blocks[bk];\n if (!('autofix' in b)) b.autofix = opts.autofix;\n });\n\n _get(_getPrototypeOf(MaskedDate.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2;\n\n var date = this.date;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_get2 = _get(_getPrototypeOf(MaskedDate.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args)) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n }\n /** Checks if date is exists */\n\n }, {\n key: \"isDateExist\",\n value: function isDateExist(str) {\n return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n }\n /** Parsed Date */\n\n }, {\n key: \"date\",\n get: function get() {\n return this.typedValue;\n },\n set: function set(date) {\n this.typedValue = date;\n }\n /**\n @override\n */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.isComplete ? _get(_getPrototypeOf(MaskedDate.prototype), \"typedValue\", this) : null;\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedDate.prototype), \"typedValue\", value, this, true);\n }\n }]);\n\n return MaskedDate;\n}(MaskedPattern);\nMaskedDate.DEFAULTS = {\n pattern: 'd{.}`m{.}`Y',\n format: function format(date) {\n var day = String(date.getDate()).padStart(2, '0');\n var month = String(date.getMonth() + 1).padStart(2, '0');\n var year = date.getFullYear();\n return [day, month, year].join('.');\n },\n parse: function parse(str) {\n var _str$split = str.split('.'),\n _str$split2 = _slicedToArray(_str$split, 3),\n day = _str$split2[0],\n month = _str$split2[1],\n year = _str$split2[2];\n\n return new Date(year, month - 1, day);\n }\n};\n\nMaskedDate.GET_DEFAULT_BLOCKS = function () {\n return {\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 };\n};\n\nIMask.MaskedDate = MaskedDate;\n\nexport { MaskedDate as default };\n","import { _ as _createClass, a as _classCallCheck } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport IMask from '../core/holder.js';\n\n/**\n Generic element API to use with mask\n @interface\n*/\nvar MaskElement = /*#__PURE__*/function () {\n function MaskElement() {\n _classCallCheck(this, MaskElement);\n }\n\n _createClass(MaskElement, [{\n key: \"selectionStart\",\n get:\n /** */\n\n /** */\n\n /** */\n\n /** Safely returns selection start */\n function get() {\n var start;\n\n try {\n start = this._unsafeSelectionStart;\n } catch (e) {}\n\n return start != null ? start : this.value.length;\n }\n /** Safely returns selection end */\n\n }, {\n key: \"selectionEnd\",\n get: function get() {\n var end;\n\n try {\n end = this._unsafeSelectionEnd;\n } catch (e) {}\n\n return end != null ? end : this.value.length;\n }\n /** Safely sets element selection */\n\n }, {\n key: \"select\",\n value: function select(start, end) {\n if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n\n try {\n this._unsafeSelect(start, end);\n } catch (e) {}\n }\n /** Should be overriden in subclasses */\n\n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {}\n /** Should be overriden in subclasses */\n\n }, {\n key: \"isActive\",\n get: function get() {\n return false;\n }\n /** Should be overriden in subclasses */\n\n }, {\n key: \"bindEvents\",\n value: function bindEvents(handlers) {}\n /** Should be overriden in subclasses */\n\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {}\n }]);\n\n return MaskElement;\n}();\nIMask.MaskElement = MaskElement;\n\nexport { MaskElement as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport MaskElement from './mask-element.js';\nimport IMask from '../core/holder.js';\n\n/** Bridge between HTMLElement and {@link Masked} */\n\nvar HTMLMaskElement = /*#__PURE__*/function (_MaskElement) {\n _inherits(HTMLMaskElement, _MaskElement);\n\n var _super = _createSuper(HTMLMaskElement);\n\n /** Mapping between HTMLElement events and mask internal events */\n\n /** HTMLElement to use mask on */\n\n /**\n @param {HTMLInputElement|HTMLTextAreaElement} input\n */\n function HTMLMaskElement(input) {\n var _this;\n\n _classCallCheck(this, HTMLMaskElement);\n\n _this = _super.call(this);\n _this.input = input;\n _this._handlers = {};\n return _this;\n }\n /** */\n // $FlowFixMe https://github.com/facebook/flow/issues/2839\n\n\n _createClass(HTMLMaskElement, [{\n key: \"rootElement\",\n get: function get() {\n return this.input.getRootNode ? this.input.getRootNode() : document;\n }\n /**\n Is element in focus\n @readonly\n */\n\n }, {\n key: \"isActive\",\n get: function get() {\n //$FlowFixMe\n return this.input === this.rootElement.activeElement;\n }\n /**\n Returns HTMLElement selection start\n @override\n */\n\n }, {\n key: \"_unsafeSelectionStart\",\n get: function get() {\n return this.input.selectionStart;\n }\n /**\n Returns HTMLElement selection end\n @override\n */\n\n }, {\n key: \"_unsafeSelectionEnd\",\n get: function get() {\n return this.input.selectionEnd;\n }\n /**\n Sets HTMLElement selection\n @override\n */\n\n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {\n this.input.setSelectionRange(start, end);\n }\n /**\n HTMLElement value\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n return this.input.value;\n },\n set: function set(value) {\n this.input.value = value;\n }\n /**\n Binds HTMLElement events to mask internal events\n @override\n */\n\n }, {\n key: \"bindEvents\",\n value: function bindEvents(handlers) {\n var _this2 = this;\n\n Object.keys(handlers).forEach(function (event) {\n return _this2._toggleEventHandler(HTMLMaskElement.EVENTS_MAP[event], handlers[event]);\n });\n }\n /**\n Unbinds HTMLElement events to mask internal events\n @override\n */\n\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var _this3 = this;\n\n Object.keys(this._handlers).forEach(function (event) {\n return _this3._toggleEventHandler(event);\n });\n }\n /** */\n\n }, {\n key: \"_toggleEventHandler\",\n value: function _toggleEventHandler(event, handler) {\n if (this._handlers[event]) {\n this.input.removeEventListener(event, this._handlers[event]);\n delete this._handlers[event];\n }\n\n if (handler) {\n this.input.addEventListener(event, handler);\n this._handlers[event] = handler;\n }\n }\n }]);\n\n return HTMLMaskElement;\n}(MaskElement);\nHTMLMaskElement.EVENTS_MAP = {\n selectionChange: 'keydown',\n input: 'input',\n drop: 'drop',\n click: 'click',\n focus: 'focus',\n commit: 'blur'\n};\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nexport { HTMLMaskElement as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport HTMLMaskElement from './html-mask-element.js';\nimport IMask from '../core/holder.js';\nimport './mask-element.js';\n\nvar HTMLContenteditableMaskElement = /*#__PURE__*/function (_HTMLMaskElement) {\n _inherits(HTMLContenteditableMaskElement, _HTMLMaskElement);\n\n var _super = _createSuper(HTMLContenteditableMaskElement);\n\n function HTMLContenteditableMaskElement() {\n _classCallCheck(this, HTMLContenteditableMaskElement);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(HTMLContenteditableMaskElement, [{\n key: \"_unsafeSelectionStart\",\n get:\n /**\n Returns HTMLElement selection start\n @override\n */\n function get() {\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n return selection && selection.anchorOffset;\n }\n /**\n Returns HTMLElement selection end\n @override\n */\n\n }, {\n key: \"_unsafeSelectionEnd\",\n get: function get() {\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n return selection && this._unsafeSelectionStart + String(selection).length;\n }\n /**\n Sets HTMLElement selection\n @override\n */\n\n }, {\n key: \"_unsafeSelect\",\n value: function _unsafeSelect(start, end) {\n if (!this.rootElement.createRange) return;\n var range = this.rootElement.createRange();\n range.setStart(this.input.firstChild || this.input, start);\n range.setEnd(this.input.lastChild || this.input, end);\n var root = this.rootElement;\n var selection = root.getSelection && root.getSelection();\n\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n }\n }\n /**\n HTMLElement value\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n // $FlowFixMe\n return this.input.textContent;\n },\n set: function set(value) {\n this.input.textContent = value;\n }\n }]);\n\n return HTMLContenteditableMaskElement;\n}(HTMLMaskElement);\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nexport { HTMLContenteditableMaskElement as default };\n","import { _ as _createClass, a as _classCallCheck, b as _objectWithoutProperties } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport { objectIncludes, DIRECTION } from '../core/utils.js';\nimport ActionDetails from '../core/action-details.js';\nimport MaskedDate from '../masked/date.js';\nimport createMask, { maskedClass } from '../masked/factory.js';\nimport MaskElement from './mask-element.js';\nimport HTMLMaskElement from './html-mask-element.js';\nimport HTMLContenteditableMaskElement from './html-contenteditable-mask-element.js';\nimport IMask from '../core/holder.js';\nimport '../masked/pattern.js';\nimport '../core/change-details.js';\nimport '../masked/base.js';\nimport '../core/continuous-tail-details.js';\nimport '../masked/pattern/input-definition.js';\nimport '../masked/pattern/fixed-definition.js';\nimport '../masked/pattern/chunk-tail-details.js';\nimport '../masked/regexp.js';\nimport '../masked/range.js';\n\nvar _excluded = [\"mask\"];\n/** Listens to element events and controls changes between element and {@link Masked} */\n\nvar InputMask = /*#__PURE__*/function () {\n /**\n View element\n @readonly\n */\n\n /**\n Internal {@link Masked} model\n @readonly\n */\n\n /**\n @param {MaskElement|HTMLInputElement|HTMLTextAreaElement} el\n @param {Object} opts\n */\n function InputMask(el, opts) {\n _classCallCheck(this, InputMask);\n\n this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLMaskElement(el);\n this.masked = createMask(opts);\n this._listeners = {};\n this._value = '';\n this._unmaskedValue = '';\n this._saveSelection = this._saveSelection.bind(this);\n this._onInput = this._onInput.bind(this);\n this._onChange = this._onChange.bind(this);\n this._onDrop = this._onDrop.bind(this);\n this._onFocus = this._onFocus.bind(this);\n this._onClick = this._onClick.bind(this);\n this.alignCursor = this.alignCursor.bind(this);\n this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n\n this._bindEvents(); // refresh\n\n\n this.updateValue();\n\n this._onChange();\n }\n /** Read or update mask */\n\n\n _createClass(InputMask, [{\n key: \"mask\",\n get: function get() {\n return this.masked.mask;\n },\n set: function set(mask) {\n if (this.maskEquals(mask)) return;\n\n if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n this.masked.updateOptions({\n mask: mask\n });\n return;\n }\n\n var masked = createMask({\n mask: mask\n });\n masked.unmaskedValue = this.masked.unmaskedValue;\n this.masked = masked;\n }\n /** Raw value */\n\n }, {\n key: \"maskEquals\",\n value: function maskEquals(mask) {\n return mask == null || mask === this.masked.mask || mask === Date && this.masked instanceof MaskedDate;\n }\n }, {\n key: \"value\",\n get: function get() {\n return this._value;\n },\n set: function set(str) {\n this.masked.value = str;\n this.updateControl();\n this.alignCursor();\n }\n /** Unmasked value */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._unmaskedValue;\n },\n set: function set(str) {\n this.masked.unmaskedValue = str;\n this.updateControl();\n this.alignCursor();\n }\n /** Typed unmasked value */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.masked.typedValue;\n },\n set: function set(val) {\n this.masked.typedValue = val;\n this.updateControl();\n this.alignCursor();\n }\n /**\n Starts listening to element events\n @protected\n */\n\n }, {\n key: \"_bindEvents\",\n value: function _bindEvents() {\n this.el.bindEvents({\n selectionChange: this._saveSelection,\n input: this._onInput,\n drop: this._onDrop,\n click: this._onClick,\n focus: this._onFocus,\n commit: this._onChange\n });\n }\n /**\n Stops listening to element events\n @protected\n */\n\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n if (this.el) this.el.unbindEvents();\n }\n /**\n Fires custom event\n @protected\n */\n\n }, {\n key: \"_fireEvent\",\n value: function _fireEvent(ev) {\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 var listeners = this._listeners[ev];\n if (!listeners) return;\n listeners.forEach(function (l) {\n return l.apply(void 0, args);\n });\n }\n /**\n Current selection start\n @readonly\n */\n\n }, {\n key: \"selectionStart\",\n get: function get() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n }\n /** Current cursor position */\n\n }, {\n key: \"cursorPos\",\n get: function get() {\n return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n },\n set: function set(pos) {\n if (!this.el || !this.el.isActive) return;\n this.el.select(pos, pos);\n\n this._saveSelection();\n }\n /**\n Stores current selection\n @protected\n */\n\n }, {\n key: \"_saveSelection\",\n value: function _saveSelection() {\n if (this.value !== this.el.value) {\n console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n }\n\n this._selection = {\n start: this.selectionStart,\n end: this.cursorPos\n };\n }\n /** Syncronizes model value from view */\n\n }, {\n key: \"updateValue\",\n value: function updateValue() {\n this.masked.value = this.el.value;\n this._value = this.masked.value;\n }\n /** Syncronizes view from model value, fires change events */\n\n }, {\n key: \"updateControl\",\n value: function updateControl() {\n var newUnmaskedValue = this.masked.unmaskedValue;\n var newValue = this.masked.value;\n var isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue;\n this._unmaskedValue = newUnmaskedValue;\n this._value = newValue;\n if (this.el.value !== newValue) this.el.value = newValue;\n if (isChanged) this._fireChangeEvents();\n }\n /** Updates options with deep equal check, recreates @{link Masked} model if mask type changes */\n\n }, {\n key: \"updateOptions\",\n value: function updateOptions(opts) {\n var mask = opts.mask,\n restOpts = _objectWithoutProperties(opts, _excluded);\n\n var updateMask = !this.maskEquals(mask);\n var updateOpts = !objectIncludes(this.masked, restOpts);\n if (updateMask) this.mask = mask;\n if (updateOpts) this.masked.updateOptions(restOpts);\n if (updateMask || updateOpts) this.updateControl();\n }\n /** Updates cursor */\n\n }, {\n key: \"updateCursor\",\n value: function updateCursor(cursorPos) {\n if (cursorPos == null) return;\n this.cursorPos = cursorPos; // also queue change cursor for mobile browsers\n\n this._delayUpdateCursor(cursorPos);\n }\n /**\n Delays cursor update to support mobile browsers\n @private\n */\n\n }, {\n key: \"_delayUpdateCursor\",\n value: function _delayUpdateCursor(cursorPos) {\n var _this = this;\n\n this._abortUpdateCursor();\n\n this._changingCursorPos = cursorPos;\n this._cursorChanging = setTimeout(function () {\n if (!_this.el) return; // if was destroyed\n\n _this.cursorPos = _this._changingCursorPos;\n\n _this._abortUpdateCursor();\n }, 10);\n }\n /**\n Fires custom events\n @protected\n */\n\n }, {\n key: \"_fireChangeEvents\",\n value: function _fireChangeEvents() {\n this._fireEvent('accept', this._inputEvent);\n\n if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n }\n /**\n Aborts delayed cursor update\n @private\n */\n\n }, {\n key: \"_abortUpdateCursor\",\n value: function _abortUpdateCursor() {\n if (this._cursorChanging) {\n clearTimeout(this._cursorChanging);\n delete this._cursorChanging;\n }\n }\n /** Aligns cursor to nearest available position */\n\n }, {\n key: \"alignCursor\",\n value: function alignCursor() {\n this.cursorPos = this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT);\n }\n /** Aligns cursor only if selection is empty */\n\n }, {\n key: \"alignCursorFriendly\",\n value: function alignCursorFriendly() {\n if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n\n this.alignCursor();\n }\n /** Adds listener on custom event */\n\n }, {\n key: \"on\",\n value: function on(ev, handler) {\n if (!this._listeners[ev]) this._listeners[ev] = [];\n\n this._listeners[ev].push(handler);\n\n return this;\n }\n /** Removes custom event listener */\n\n }, {\n key: \"off\",\n value: function off(ev, handler) {\n if (!this._listeners[ev]) return this;\n\n if (!handler) {\n delete this._listeners[ev];\n return this;\n }\n\n var hIndex = this._listeners[ev].indexOf(handler);\n\n if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n return this;\n }\n /** Handles view input event */\n\n }, {\n key: \"_onInput\",\n value: function _onInput(e) {\n this._inputEvent = e;\n\n this._abortUpdateCursor(); // fix strange IE behavior\n\n\n if (!this._selection) return this.updateValue();\n var details = new ActionDetails( // new state\n this.el.value, this.cursorPos, // old state\n this.value, this._selection);\n var oldRawValue = this.masked.rawInputValue;\n var offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection).offset; // 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\n var removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n var cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n this.updateControl();\n this.updateCursor(cursorPos);\n delete this._inputEvent;\n }\n /** Handles view change event and commits model value */\n\n }, {\n key: \"_onChange\",\n value: function _onChange() {\n if (this.value !== this.el.value) {\n this.updateValue();\n }\n\n this.masked.doCommit();\n this.updateControl();\n\n this._saveSelection();\n }\n /** Handles view drop event, prevents by default */\n\n }, {\n key: \"_onDrop\",\n value: function _onDrop(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n /** Restore last selection on focus */\n\n }, {\n key: \"_onFocus\",\n value: function _onFocus(ev) {\n this.alignCursorFriendly();\n }\n /** Restore last selection on focus */\n\n }, {\n key: \"_onClick\",\n value: function _onClick(ev) {\n this.alignCursorFriendly();\n }\n /** Unbind view events and removes element reference */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this._unbindEvents(); // $FlowFixMe why not do so?\n\n\n this._listeners.length = 0; // $FlowFixMe\n\n delete this.el;\n }\n }]);\n\n return InputMask;\n}();\nIMask.InputMask = InputMask;\n\nexport { InputMask as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, g as _get, h as _getPrototypeOf } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport MaskedPattern from './pattern.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../core/change-details.js';\nimport './base.js';\nimport '../core/continuous-tail-details.js';\nimport './pattern/input-definition.js';\nimport './factory.js';\nimport './pattern/fixed-definition.js';\nimport './pattern/chunk-tail-details.js';\nimport './regexp.js';\n\n/** Pattern which validates enum values */\n\nvar MaskedEnum = /*#__PURE__*/function (_MaskedPattern) {\n _inherits(MaskedEnum, _MaskedPattern);\n\n var _super = _createSuper(MaskedEnum);\n\n function MaskedEnum() {\n _classCallCheck(this, MaskedEnum);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MaskedEnum, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n // TODO type\n if (opts.enum) opts.mask = '*'.repeat(opts.enum[0].length);\n\n _get(_getPrototypeOf(MaskedEnum.prototype), \"_update\", this).call(this, opts);\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _this = this,\n _get2;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.enum.some(function (e) {\n return e.indexOf(_this.unmaskedValue) >= 0;\n }) && (_get2 = _get(_getPrototypeOf(MaskedEnum.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args));\n }\n }]);\n\n return MaskedEnum;\n}(MaskedPattern);\nIMask.MaskedEnum = MaskedEnum;\n\nexport { MaskedEnum as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, g as _get, h as _getPrototypeOf, f as _slicedToArray, i as _set } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport { escapeRegExp, DIRECTION } from '../core/utils.js';\nimport ChangeDetails from '../core/change-details.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/continuous-tail-details.js';\n\n/**\n Number mask\n @param {Object} opts\n @param {string} opts.radix - Single char\n @param {string} opts.thousandsSeparator - Single char\n @param {Array} opts.mapToRadix - Array of single chars\n @param {number} opts.min\n @param {number} opts.max\n @param {number} opts.scale - Digits after point\n @param {boolean} opts.signed - Allow negative\n @param {boolean} opts.normalizeZeros - Flag to remove leading and trailing zeros in the end of editing\n @param {boolean} opts.padFractionalZeros - Flag to pad trailing zeros after point in the end of editing\n*/\nvar MaskedNumber = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedNumber, _Masked);\n\n var _super = _createSuper(MaskedNumber);\n\n /** Single char */\n\n /** Single char */\n\n /** Array of single chars */\n\n /** */\n\n /** */\n\n /** Digits after point */\n\n /** */\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 function MaskedNumber(opts) {\n _classCallCheck(this, MaskedNumber);\n\n return _super.call(this, Object.assign({}, MaskedNumber.DEFAULTS, opts));\n }\n /**\n @override\n */\n\n\n _createClass(MaskedNumber, [{\n key: \"_update\",\n value: function _update(opts) {\n _get(_getPrototypeOf(MaskedNumber.prototype), \"_update\", this).call(this, opts);\n\n this._updateRegExps();\n }\n /** */\n\n }, {\n key: \"_updateRegExps\",\n value: function _updateRegExps() {\n // use different regexp to process user input (more strict, input suffix) and tail shifting\n var start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n var midInput = '(0|([1-9]+\\\\d*))?';\n var mid = '\\\\d*';\n var end = (this.scale ? '(' + escapeRegExp(this.radix) + '\\\\d{0,' + this.scale + '})?' : '') + '$';\n this._numberRegExpInput = new RegExp(start + midInput + end);\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 /** */\n\n }, {\n key: \"_removeThousandsSeparators\",\n value: function _removeThousandsSeparators(value) {\n return value.replace(this._thousandsSeparatorRegExp, '');\n }\n /** */\n\n }, {\n key: \"_insertThousandsSeparators\",\n value: function _insertThousandsSeparators(value) {\n // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n var 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 /**\n @override\n */\n\n }, {\n key: \"doPrepare\",\n value: function doPrepare(str) {\n var _get2;\n\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 return (_get2 = _get(_getPrototypeOf(MaskedNumber.prototype), \"doPrepare\", this)).call.apply(_get2, [this, this._removeThousandsSeparators(str.replace(this._mapToRadixRegExp, this.radix))].concat(args));\n }\n /** */\n\n }, {\n key: \"_separatorsCount\",\n value: function _separatorsCount(to) {\n var extendOnSeparators = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var count = 0;\n\n for (var 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\n return count;\n }\n /** */\n\n }, {\n key: \"_separatorsCountFromSlice\",\n value: function _separatorsCountFromSlice() {\n var slice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._value;\n return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n var flags = arguments.length > 2 ? arguments[2] : undefined;\n\n var _this$_adjustRangeWit = this._adjustRangeWithSeparators(fromPos, toPos);\n\n var _this$_adjustRangeWit2 = _slicedToArray(_this$_adjustRangeWit, 2);\n\n fromPos = _this$_adjustRangeWit2[0];\n toPos = _this$_adjustRangeWit2[1];\n return this._removeThousandsSeparators(_get(_getPrototypeOf(MaskedNumber.prototype), \"extractInput\", this).call(this, fromPos, toPos, flags));\n }\n /**\n @override\n */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.thousandsSeparator) return _get(_getPrototypeOf(MaskedNumber.prototype), \"_appendCharRaw\", this).call(this, ch, flags);\n var prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n\n var prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n\n this._value = this._removeThousandsSeparators(this.value);\n\n var appendDetails = _get(_getPrototypeOf(MaskedNumber.prototype), \"_appendCharRaw\", this).call(this, ch, flags);\n\n this._value = this._insertThousandsSeparators(this._value);\n var beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n\n var beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n\n appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n appendDetails.skip = !appendDetails.rawInserted && ch === this.thousandsSeparator;\n return appendDetails;\n }\n /** */\n\n }, {\n key: \"_findSeparatorAround\",\n value: function _findSeparatorAround(pos) {\n if (this.thousandsSeparator) {\n var searchFrom = pos - this.thousandsSeparator.length + 1;\n var separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n if (separatorPos <= pos) return separatorPos;\n }\n\n return -1;\n }\n }, {\n key: \"_adjustRangeWithSeparators\",\n value: function _adjustRangeWithSeparators(from, to) {\n var separatorAroundFromPos = this._findSeparatorAround(from);\n\n if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n\n var separatorAroundToPos = this._findSeparatorAround(to);\n\n if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n return [from, to];\n }\n /**\n @override\n */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var fromPos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var toPos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.value.length;\n\n var _this$_adjustRangeWit3 = this._adjustRangeWithSeparators(fromPos, toPos);\n\n var _this$_adjustRangeWit4 = _slicedToArray(_this$_adjustRangeWit3, 2);\n\n fromPos = _this$_adjustRangeWit4[0];\n toPos = _this$_adjustRangeWit4[1];\n var valueBeforePos = this.value.slice(0, fromPos);\n var valueAfterPos = this.value.slice(toPos);\n\n var prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n\n this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n\n var beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n\n return new ChangeDetails({\n tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos(cursorPos, direction) {\n if (!this.thousandsSeparator) return cursorPos;\n\n switch (direction) {\n case DIRECTION.NONE:\n case DIRECTION.LEFT:\n case DIRECTION.FORCE_LEFT:\n {\n var separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n\n if (separatorAtLeftPos >= 0) {\n var separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n\n if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n return separatorAtLeftPos;\n }\n }\n\n break;\n }\n\n case DIRECTION.RIGHT:\n case DIRECTION.FORCE_RIGHT:\n {\n var separatorAtRightPos = this._findSeparatorAround(cursorPos);\n\n if (separatorAtRightPos >= 0) {\n return separatorAtRightPos + this.thousandsSeparator.length;\n }\n }\n }\n\n return cursorPos;\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate(flags) {\n var regexp = flags.input ? this._numberRegExpInput : this._numberRegExp; // validate as string\n\n var valid = regexp.test(this._removeThousandsSeparators(this.value));\n\n if (valid) {\n // validate as number\n var number = this.number;\n valid = valid && !isNaN(number) && (this.min == null || this.min >= 0 || this.min <= this.number) && (this.max == null || this.max <= 0 || this.number <= this.max);\n }\n\n return valid && _get(_getPrototypeOf(MaskedNumber.prototype), \"doValidate\", this).call(this, flags);\n }\n /**\n @override\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.value) {\n var number = this.number;\n var validnum = number; // check bounds\n\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 = String(validnum);\n var formatted = this.value;\n if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n if (this.padFractionalZeros) formatted = this._padFractionalZeros(formatted);\n this._value = formatted;\n }\n\n _get(_getPrototypeOf(MaskedNumber.prototype), \"doCommit\", this).call(this);\n }\n /** */\n\n }, {\n key: \"_normalizeZeros\",\n value: function _normalizeZeros(value) {\n var parts = this._removeThousandsSeparators(value).split(this.radix); // remove leading zeros\n\n\n parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, function (match, sign, zeros, num) {\n return sign + num;\n }); // add leading zero\n\n if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n\n if (parts.length > 1) {\n parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n\n if (!parts[1].length) parts.length = 1; // remove fractional\n }\n\n return this._insertThousandsSeparators(parts.join(this.radix));\n }\n /** */\n\n }, {\n key: \"_padFractionalZeros\",\n value: function _padFractionalZeros(value) {\n if (!value) return value;\n var 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 /**\n @override\n */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, '.');\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedNumber.prototype), \"unmaskedValue\", unmaskedValue.replace('.', this.radix), this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return Number(this.unmaskedValue);\n },\n set: function set(n) {\n _set(_getPrototypeOf(MaskedNumber.prototype), \"unmaskedValue\", String(n), this, true);\n }\n /** Parsed Number */\n\n }, {\n key: \"number\",\n get: function get() {\n return this.typedValue;\n },\n set: function set(number) {\n this.typedValue = number;\n }\n /**\n Is negative allowed\n @readonly\n */\n\n }, {\n key: \"allowNegative\",\n get: function get() {\n return this.signed || this.min != null && this.min < 0 || this.max != null && this.max < 0;\n }\n }]);\n\n return MaskedNumber;\n}(Masked);\nMaskedNumber.DEFAULTS = {\n radix: ',',\n thousandsSeparator: '',\n mapToRadix: ['.'],\n scale: 2,\n signed: false,\n normalizeZeros: true,\n padFractionalZeros: false\n};\nIMask.MaskedNumber = MaskedNumber;\n\nexport { MaskedNumber as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, g as _get, h as _getPrototypeOf } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport 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 */\n\nvar MaskedFunction = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedFunction, _Masked);\n\n var _super = _createSuper(MaskedFunction);\n\n function MaskedFunction() {\n _classCallCheck(this, MaskedFunction);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(MaskedFunction, [{\n key: \"_update\",\n value:\n /**\n @override\n @param {Object} opts\n */\n function _update(opts) {\n if (opts.mask) opts.validate = opts.mask;\n\n _get(_getPrototypeOf(MaskedFunction.prototype), \"_update\", this).call(this, opts);\n }\n }]);\n\n return MaskedFunction;\n}(Masked);\nIMask.MaskedFunction = MaskedFunction;\n\nexport { MaskedFunction as default };\n","import { d as _inherits, e as _createSuper, a as _classCallCheck, _ as _createClass, g as _get, h as _getPrototypeOf, i as _set, b as _objectWithoutProperties } from '../_rollupPluginBabelHelpers-a0b34764.js';\nimport ChangeDetails from '../core/change-details.js';\nimport createMask from './factory.js';\nimport Masked from './base.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../core/continuous-tail-details.js';\n\nvar _excluded = [\"compiledMasks\", \"currentMaskRef\", \"currentMask\"];\n\n/** Dynamic mask for choosing apropriate mask in run-time */\nvar MaskedDynamic = /*#__PURE__*/function (_Masked) {\n _inherits(MaskedDynamic, _Masked);\n\n var _super = _createSuper(MaskedDynamic);\n\n /** Currently chosen mask */\n\n /** Compliled {@link Masked} options */\n\n /** Chooses {@link Masked} depending on input value */\n\n /**\n @param {Object} opts\n */\n function MaskedDynamic(opts) {\n var _this;\n\n _classCallCheck(this, MaskedDynamic);\n\n _this = _super.call(this, Object.assign({}, MaskedDynamic.DEFAULTS, opts));\n _this.currentMask = null;\n return _this;\n }\n /**\n @override\n */\n\n\n _createClass(MaskedDynamic, [{\n key: \"_update\",\n value: function _update(opts) {\n _get(_getPrototypeOf(MaskedDynamic.prototype), \"_update\", this).call(this, opts);\n\n if ('mask' in opts) {\n // mask could be totally dynamic with only `dispatch` option\n this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(function (m) {\n return createMask(m);\n }) : [];\n }\n }\n /**\n @override\n */\n\n }, {\n key: \"_appendCharRaw\",\n value: function _appendCharRaw(ch) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var details = this._applyDispatch(ch, flags);\n\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendChar(ch, flags));\n }\n\n return details;\n }\n }, {\n key: \"_applyDispatch\",\n value: function _applyDispatch() {\n var appended = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n var inputValue = this.rawInputValue;\n var insertValue = flags.tail && flags._beforeTailState != null ? // $FlowFixMe - tired to fight with type system\n flags._beforeTailState._rawInputValue : inputValue;\n var tailValue = inputValue.slice(insertValue.length);\n var prevMask = this.currentMask;\n var details = new ChangeDetails();\n var prevMaskState = prevMask && prevMask.state; // clone flags to prevent overwriting `_beforeTailState`\n\n this.currentMask = this.doDispatch(appended, Object.assign({}, flags)); // restore state after dispatch\n\n if (this.currentMask) {\n if (this.currentMask !== prevMask) {\n // if mask changed reapply input\n this.currentMask.reset();\n\n if (insertValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n var d = this.currentMask.append(insertValue, {\n raw: true\n });\n details.tailShift = d.inserted.length - prevValueBeforeTail.length;\n }\n\n if (tailValue) {\n // $FlowFixMe - it's ok, we don't change current mask above\n details.tailShift += this.currentMask.append(tailValue, {\n raw: true,\n tail: true\n }).tailShift;\n }\n } else {\n // Dispatch can do something bad with state, so\n // restore prev mask state\n this.currentMask.state = prevMaskState;\n }\n }\n\n return details;\n }\n }, {\n key: \"_appendPlaceholder\",\n value: function _appendPlaceholder() {\n var details = this._applyDispatch.apply(this, arguments);\n\n if (this.currentMask) {\n details.aggregate(this.currentMask._appendPlaceholder());\n }\n\n return details;\n }\n /**\n @override\n */\n\n }, {\n key: \"doDispatch\",\n value: function doDispatch(appended) {\n var flags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.dispatch(appended, this, flags);\n }\n /**\n @override\n */\n\n }, {\n key: \"doValidate\",\n value: function doValidate() {\n var _get2, _this$currentMask;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return (_get2 = _get(_getPrototypeOf(MaskedDynamic.prototype), \"doValidate\", this)).call.apply(_get2, [this].concat(args)) && (!this.currentMask || (_this$currentMask = this.currentMask).doValidate.apply(_this$currentMask, args));\n }\n /**\n @override\n */\n\n }, {\n key: \"reset\",\n value: function reset() {\n if (this.currentMask) this.currentMask.reset();\n this.compiledMasks.forEach(function (m) {\n return m.reset();\n });\n }\n /**\n @override\n */\n\n }, {\n key: \"value\",\n get: function get() {\n return this.currentMask ? this.currentMask.value : '';\n },\n set: function set(value) {\n _set(_getPrototypeOf(MaskedDynamic.prototype), \"value\", value, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"unmaskedValue\",\n get: function get() {\n return this.currentMask ? this.currentMask.unmaskedValue : '';\n },\n set: function set(unmaskedValue) {\n _set(_getPrototypeOf(MaskedDynamic.prototype), \"unmaskedValue\", unmaskedValue, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"typedValue\",\n get: function get() {\n return this.currentMask ? this.currentMask.typedValue : '';\n } // probably typedValue should not be used with dynamic\n ,\n set: function set(value) {\n var unmaskedValue = String(value); // double check it\n\n if (this.currentMask) {\n this.currentMask.typedValue = value;\n unmaskedValue = this.currentMask.unmaskedValue;\n }\n\n this.unmaskedValue = unmaskedValue;\n }\n /**\n @override\n */\n\n }, {\n key: \"isComplete\",\n get: function get() {\n return !!this.currentMask && this.currentMask.isComplete;\n }\n /**\n @override\n */\n\n }, {\n key: \"remove\",\n value: function remove() {\n var details = new ChangeDetails();\n\n if (this.currentMask) {\n var _this$currentMask2;\n\n details.aggregate((_this$currentMask2 = this.currentMask).remove.apply(_this$currentMask2, arguments)) // update with dispatch\n .aggregate(this._applyDispatch());\n }\n\n return details;\n }\n /**\n @override\n */\n\n }, {\n key: \"state\",\n get: function get() {\n return Object.assign({}, _get(_getPrototypeOf(MaskedDynamic.prototype), \"state\", this), {\n _rawInputValue: this.rawInputValue,\n compiledMasks: this.compiledMasks.map(function (m) {\n return m.state;\n }),\n currentMaskRef: this.currentMask,\n currentMask: this.currentMask && this.currentMask.state\n });\n },\n set: function set(state) {\n var compiledMasks = state.compiledMasks,\n currentMaskRef = state.currentMaskRef,\n currentMask = state.currentMask,\n maskedState = _objectWithoutProperties(state, _excluded);\n\n this.compiledMasks.forEach(function (m, mi) {\n return m.state = compiledMasks[mi];\n });\n\n if (currentMaskRef != null) {\n this.currentMask = currentMaskRef;\n this.currentMask.state = currentMask;\n }\n\n _set(_getPrototypeOf(MaskedDynamic.prototype), \"state\", maskedState, this, true);\n }\n /**\n @override\n */\n\n }, {\n key: \"extractInput\",\n value: function extractInput() {\n var _this$currentMask3;\n\n return this.currentMask ? (_this$currentMask3 = this.currentMask).extractInput.apply(_this$currentMask3, arguments) : '';\n }\n /**\n @override\n */\n\n }, {\n key: \"extractTail\",\n value: function extractTail() {\n var _this$currentMask4, _get3;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return this.currentMask ? (_this$currentMask4 = this.currentMask).extractTail.apply(_this$currentMask4, args) : (_get3 = _get(_getPrototypeOf(MaskedDynamic.prototype), \"extractTail\", this)).call.apply(_get3, [this].concat(args));\n }\n /**\n @override\n */\n\n }, {\n key: \"doCommit\",\n value: function doCommit() {\n if (this.currentMask) this.currentMask.doCommit();\n\n _get(_getPrototypeOf(MaskedDynamic.prototype), \"doCommit\", this).call(this);\n }\n /**\n @override\n */\n\n }, {\n key: \"nearestInputPos\",\n value: function nearestInputPos() {\n var _this$currentMask5, _get4;\n\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.currentMask ? (_this$currentMask5 = this.currentMask).nearestInputPos.apply(_this$currentMask5, args) : (_get4 = _get(_getPrototypeOf(MaskedDynamic.prototype), \"nearestInputPos\", this)).call.apply(_get4, [this].concat(args));\n }\n }, {\n key: \"overwrite\",\n get: function get() {\n return this.currentMask ? this.currentMask.overwrite : _get(_getPrototypeOf(MaskedDynamic.prototype), \"overwrite\", this);\n },\n set: function set(overwrite) {\n console.warn('\"overwrite\" option is not available in dynamic mask, use this option in siblings');\n }\n }]);\n\n return MaskedDynamic;\n}(Masked);\nMaskedDynamic.DEFAULTS = {\n dispatch: function dispatch(appended, masked, flags) {\n if (!masked.compiledMasks.length) return;\n var inputValue = masked.rawInputValue; // simulate input\n\n var inputs = masked.compiledMasks.map(function (m, index) {\n m.reset();\n m.append(inputValue, {\n raw: true\n });\n m.append(appended, flags);\n var weight = m.rawInputValue.length;\n return {\n weight: weight,\n index: index\n };\n }); // pop masks with longer values first\n\n inputs.sort(function (i1, i2) {\n return i2.weight - i1.weight;\n });\n return masked.compiledMasks[inputs[0].index];\n }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\nexport { MaskedDynamic as default };\n","import createMask from './factory.js';\nimport IMask from '../core/holder.js';\nimport '../core/utils.js';\nimport '../_rollupPluginBabelHelpers-a0b34764.js';\n\n/** Mask pipe source and destination types */\n\nvar 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 */\n\nfunction createPipe(mask) {\n var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : PIPE_TYPE.MASKED;\n var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : PIPE_TYPE.MASKED;\n var masked = createMask(mask);\n return function (value) {\n return masked.runIsolated(function (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 */\n\nfunction pipe(value) {\n for (var _len = arguments.length, pipeArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n pipeArgs[_key - 1] = arguments[_key];\n }\n\n return createPipe.apply(void 0, pipeArgs)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\nexport { PIPE_TYPE, createPipe, pipe };\n","export { default as InputMask } from './controls/input.js';\nimport IMask from './core/holder.js';\nexport { default } from './core/holder.js';\nexport { default as Masked } from './masked/base.js';\nexport { default as MaskedPattern } from './masked/pattern.js';\nexport { default as MaskedEnum } from './masked/enum.js';\nexport { default as MaskedRange } from './masked/range.js';\nexport { default as MaskedNumber } from './masked/number.js';\nexport { default as MaskedDate } from './masked/date.js';\nexport { default as MaskedRegExp } from './masked/regexp.js';\nexport { default as MaskedFunction } from './masked/function.js';\nexport { default as MaskedDynamic } from './masked/dynamic.js';\nexport { default as createMask } from './masked/factory.js';\nexport { default as MaskElement } from './controls/mask-element.js';\nexport { default as HTMLMaskElement } from './controls/html-mask-element.js';\nexport { default as HTMLContenteditableMaskElement } from './controls/html-contenteditable-mask-element.js';\nexport { PIPE_TYPE, createPipe, pipe } from './masked/pipe.js';\nimport './_rollupPluginBabelHelpers-a0b34764.js';\nimport './core/utils.js';\nimport './core/action-details.js';\nimport './core/change-details.js';\nimport './core/continuous-tail-details.js';\nimport './masked/pattern/input-definition.js';\nimport './masked/pattern/fixed-definition.js';\nimport './masked/pattern/chunk-tail-details.js';\n\ntry {\n globalThis.IMask = IMask;\n} catch (e) {}\n","import { Localization } from \"../../../common/localizable-component\";\nimport { InputLocalization } from \"./input-types\";\nimport { deepmerge } from \"../../../utils/deep-merge\";\nimport { FORM_LOCALIZATION } from \"../../form/constants/form-i18n\";\n\nexport const INPUT_LOCALIZATION: Localization = deepmerge(FORM_LOCALIZATION, {\n en: {\n dateFormat: \"MM.dd.yyyy\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"y\",\n locale: \"en-US\"\n },\n de: {\n dateFormat: \"dd.MM.yyyy\",\n localeDay: \"t\",\n localeMonth: \"m\",\n localeYear: \"j\",\n locale: \"de-DE\"\n },\n sv: {\n dateFormat: \"dd.MM.yyyy\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"y\",\n locale: \"sv-SE\"\n },\n nl: {\n dateFormat: \"dd.MM.yyyy\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"j\",\n locale: \"nl-NL\"\n },\n it: {\n dateFormat: \"gg.MM.aaaa\",\n localeDay: \"g\",\n localeMonth: \"m\",\n localeYear: \"a\",\n locale: \"it-IT\"\n },\n hu: {\n dateFormat: \"éééé.hh.nn.\",\n localeDay: \"n\",\n localeMonth: \"h\",\n localeYear: \"é\",\n locale: \"hu-HU\"\n },\n da: {\n dateFormat: \"dd.MM.yyyy\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"y\",\n locale: \"da-DK\"\n },\n fr: {\n dateFormat: \"MM.jj.aaaa\",\n localeDay: \"j\",\n localeMonth: \"m\",\n localeYear: \"a\",\n locale: \"fr-FR\"\n },\n es: {\n dateFormat: \"MM.dd.aaa\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"a\",\n locale: \"es-Es\"\n },\n pl: {\n dateFormat: \"MM.dd.rrrr\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"r\",\n locale: \"pl-PL\"\n },\n ro: {\n dateFormat: \"dd.MM.yyyy\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"y\",\n locale: \"ro-RO\"\n },\n hr: {\n dateFormat: \"MM.dd.gggg\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"g\",\n locale: \"hr-HR\"\n },\n cs: {\n dateFormat: \"dd.MM.rrrr\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"r\",\n locale: \"cs-CS\"\n },\n sl: {\n dateFormat: \"MM.dd.yyyy\",\n localeDay: \"d\",\n localeMonth: \"m\",\n localeYear: \"y\",\n locale: \"sl-SL\"\n }\n});\n","/**\n * THEME JSON CONFIG CSS VARS\n * The following default component scss variables can be overwritten via theme configuration per brand.\n * If you need to add new one, please make sure to set a default value.\n * JSON Definition for Component with name \"Example\": testCssVar: \"20px\"\n * Resulting CSS var: $example-test-css-var: 20px;\n */\n\n$input-font-size: 18px !default;\n$input-small-font-size: 16px !default;\n$input-line-height: 24px !default;\n$input-small-line-height: 24px !default;\n$input-height: 48px !default;\n$input-small-height: 36px !default;\n$input-border-width: 2px !default;\n$input-small-border-width: 2px !default;\n$input-focus-border-width: 2px !default;\n$input-padding-top: 11px !default;\n$input-small-padding-top: 5px !default;\n$input-padding-bottom: 13px !default;\n$input-small-padding-bottom: 7px !default;\n$input-padding-left: 12px !default;\n$input-small-padding-left: 12px !default;\n$input-padding-right: 12px !default;\n$input-small-padding-right: 8px !default;\n$input-label-active-x-padding: 4px !default;\n$input-small-label-active-x-padding: 4px !default;\n$input-trailing-icon-padding-right: 0px !default;\n$input-small-trailing-icon-padding-right: 0px !default;\n$input-default-radius: 8px !default;\n$input-small-default-radius: 6px !default;\n$input-textarea-padding: 10px $input-padding-right 10px $input-padding-left !default;\n$input-label-outside-font-size: 14px !default;\n$input-label-outside-line-height: 18px !default;\n$input-label-outside-offset-left: 0px !default;\n$input-error-message-offset-left: 0px !default;\n$input-autocomplete-option-min-height: 44px !default;\n$input-autocomplete-radius: 0 0 $input-default-radius $input-default-radius !default;\n$input-small-autocomplete-radius: 0 0 $input-small-default-radius $input-small-default-radius !default;\n$input-autocomplete-shadow: rgb(0 0 0 / 20%) 0px 5px 5px -3px, rgb(0 0 0 / 14%) 0px 8px 10px 1px,\n rgb(0 0 0 / 12%) 0px 3px 14px 2px !default;\n\n/* END THEME JSON CONFIG CSS VARS ******************************************************* */\n\n$input-label-active-padding: calc($input-padding-left - $input-label-active-x-padding);\n$input-small-label-active-padding: calc($input-small-padding-left - $input-small-label-active-x-padding);\n\n@mixin labelOutside {\n position: relative;\n font-size: $input-label-outside-font-size;\n line-height: $input-label-outside-line-height;\n margin-bottom: calc($input-border-width + 4px);\n color: v(labelColor);\n font-weight: normal;\n display: block;\n max-width: calc(100% - 8px);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n padding-left: $input-label-outside-offset-left;\n}\n\n@mixin labelOutsideSmallOverwrites {\n margin-bottom: calc($input-small-border-width + 2px);\n}\n\n@mixin label {\n position: absolute;\n left: $input-padding-left;\n top: 11px;\n font-size: $input-font-size;\n color: v(labelColor);\n font-weight: normal;\n pointer-events: none;\n transition-property: left, top, font-size, padding;\n transition-timing-function: ease;\n transition-duration: 0.2s;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - var(--inputInnerOffset) - $input-padding-left);\n}\n\n@mixin labelSmallOverwrites {\n top: 5px;\n left: $input-small-padding-left;\n font-size: $input-small-font-size;\n max-width: calc(100% - var(--inputInnerOffset) - $input-small-padding-left);\n}\n\n@mixin labelActive {\n top: -10px;\n font-size: 14px;\n color: v(labelColorActive);\n padding: 0 $input-label-active-x-padding 0 $input-label-active-x-padding;\n left: $input-label-active-padding;\n line-height: 18px;\n max-width: calc(100% - var(--inputInnerOffset) - $input-padding-left);\n}\n\n@mixin labelActiveSmallOverwrites {\n padding: 0 $input-small-label-active-x-padding 0 $input-small-label-active-x-padding;\n left: $input-small-label-active-padding;\n max-width: calc(100% - var(--inputInnerOffset) - $input-small-padding-left);\n}\n\n@mixin dateFormatPlaceholder {\n .#{$prefix}input-wrapper {\n .#{$prefix}eon-input {\n &[type=\"date\"]:before {\n content: attr(placeholder);\n }\n }\n }\n}\n\n:host {\n position: relative;\n width: 100%;\n font-family: $font-family-base;\n display: flex;\n flex-direction: column;\n\n * {\n box-sizing: border-box;\n }\n}\n\n:host(.#{$prefix}focus) {\n ::slotted(eon-ui-info-icon) {\n --iconColor: v(textColorActive);\n --iconHoverColor: v(textColorActive);\n --iconFocusColor: v(textColorActive);\n }\n}\n\n.#{$prefix}success-message {\n color: v(borderActiveColor);\n}\n\n.#{$prefix}error-message {\n color: v(errorMessageColor);\n margin-left: $input-error-message-offset-left;\n}\n\n.#{$prefix}info {\n color: v(labelColor);\n}\n\n:host([textarea]:not([textarea=\"false\"])) {\n display: block;\n\n .#{$prefix}input-wrapper {\n display: inline-flex;\n max-width: 100%;\n }\n}\n\n:host([textarea]:not([cols])),\n:host([textarea][cols=\"\"]) {\n .#{$prefix}input-wrapper {\n width: 100%;\n }\n}\n\n:host([type=\"hidden\"]) {\n display: none !important;\n}\n\n:host([type=\"date\"][value=\"\"]) {\n @include dateFormatPlaceholder;\n}\n\n:host([type=\"date\"]:not([value])) {\n @include dateFormatPlaceholder;\n}\n\n:host([type=\"date\"]) .#{$prefix}input-info-icon {\n @include for-size(phone) {\n z-index: 1;\n }\n}\n\nlabel.#{$prefix}outside {\n @include labelOutside;\n\n &.#{$prefix}small {\n @include labelOutsideSmallOverwrites;\n }\n\n &.#{$prefix}error {\n color: v(errorMessageColor);\n }\n\n &.#{$prefix}disabled {\n color: v(disabledLabelColor);\n }\n\n &.#{$prefix}sr-only {\n @include hideReadable;\n }\n}\n\n.#{$prefix}input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n line-height: $input-line-height;\n\n &.#{$prefix}input-textarea {\n max-height: none;\n height: auto;\n\n .#{$prefix}eon-input {\n white-space: normal;\n overflow: inherit;\n padding: $input-textarea-padding;\n }\n }\n\n .#{$prefix}navigation-elements {\n position: absolute;\n right: 0;\n top: 0;\n width: auto;\n height: 100%;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n padding-right: $input-padding-right;\n gap: 16px;\n\n > *:first-child {\n margin-left: $input-padding-left;\n }\n\n &.#{$prefix}visible {\n pointer-events: none;\n .#{$prefix}interaction-icon {\n pointer-events: visible;\n }\n }\n }\n\n .#{$prefix}eon-input {\n position: relative;\n width: 100%;\n height: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: $input-line-height;\n padding: $input-padding-top $input-padding-right $input-padding-bottom $input-padding-left;\n font-size: $input-font-size;\n font-family: $font-family-base;\n display: block;\n border: none;\n box-shadow: inset 0 0 0 $input-border-width v(borderColor);\n border-radius: $input-default-radius;\n background: v(background);\n color: v(textColor);\n appearance: none;\n padding-right: var(--inputInnerOffset);\n\n &::-webkit-date-and-time-value {\n text-align: left;\n }\n\n &::placeholder {\n color: v(textColor);\n opacity: 0.7;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n /* Removes x symbols on webkit browsers */\n &[type=\"search\"]::-webkit-search-decoration,\n &[type=\"search\"]::-webkit-search-cancel-button,\n &[type=\"search\"]::-webkit-search-results-button,\n &[type=\"search\"]::-webkit-search-results-decoration {\n appearance: none;\n }\n\n /* Removes x symbols in IE18 browsers */\n &::-ms-clear {\n display: none;\n }\n\n /* Removes x symbols in Edge browsers */\n &::-ms-reveal {\n display: none;\n }\n\n /* Removes number helper in Chrome, Safari, Edge, Opera */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n appearance: none;\n margin: 0;\n }\n\n /* Removes number helper in Firefox */\n &[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n &.#{$prefix}focus {\n box-shadow: inset 0 0 0 $input-focus-border-width v(borderActiveColor);\n background: v(backgroundActive);\n }\n\n &.#{$prefix}focus {\n ~ label {\n @include labelActive;\n }\n\n ~ .#{$prefix}label-placeholder {\n opacity: 1;\n }\n }\n\n &.#{$prefix}placeholder {\n ~ label {\n @include labelActive;\n }\n\n ~ .#{$prefix}label-placeholder {\n opacity: 1;\n }\n }\n\n &:hover {\n box-shadow: inset 0 0 0 $input-small-border-width v(borderHoverColor);\n }\n\n &:focus {\n outline: none;\n box-shadow: inset 0 0 0 $input-focus-border-width v(borderActiveColor),\n 0 0 0 $input-focus-border-width v(outerBorderColor);\n background: v(backgroundActive);\n color: v(textColorActive);\n\n &::placeholder {\n color: v(textColorActive);\n }\n\n ~ .#{$prefix}navigation-elements {\n eon-ui-icon {\n fill: v(textColorActive);\n }\n }\n }\n\n &:focus,\n &[type=\"date\"] {\n ~ label {\n @include labelActive;\n }\n\n ~ .#{$prefix}label-placeholder {\n opacity: 1;\n }\n }\n\n &:-webkit-autofill {\n ~ label {\n @include labelActive;\n }\n\n ~ .#{$prefix}label-placeholder {\n opacity: 1;\n }\n }\n\n /* &.#{$prefix}touched:focus {\n padding-right: calc(var(--clearOffset));\n } */\n\n &.#{$prefix}touched:focus ~ .#{$prefix}navigation-elements .#{$prefix}interaction-icon {\n opacity: 1;\n visibility: visible;\n transition: all 0.3s ease-in-out;\n cursor: pointer;\n pointer-events: visible;\n }\n\n &.#{$prefix}touched {\n ~ label {\n @include labelActive;\n }\n\n ~ .#{$prefix}label-placeholder {\n opacity: 1;\n }\n }\n\n &[readonly] {\n cursor: not-allowed;\n }\n\n &:disabled:not([readonly]) {\n box-shadow: inset 0 0 0 $input-border-width v(disabledBorderColor) !important;\n background-color: v(disabledBackgroundColor) !important;\n opacity: v(disabledOpacity);\n cursor: not-allowed;\n\n & ~ label {\n color: v(disabledLabelColor);\n }\n\n & ~ .#{$prefix}navigation-elements {\n .#{$prefix}icon-background {\n .#{$prefix}icon-button {\n cursor: not-allowed;\n\n .#{$prefix}icon {\n fill: v(disabledTrailingIconColor) !important;\n cursor: not-allowed;\n }\n }\n }\n }\n }\n\n &.#{$prefix}error {\n box-shadow: inset 0 0 0 $input-border-width v(errorMessageColor);\n\n &:focus {\n box-shadow: inset 0 0 0 $input-focus-border-width v(borderActiveColor),\n 0 0 0 $input-focus-border-width v(outerBorderColor);\n }\n\n & ~ label {\n color: v(errorMessageColor);\n }\n }\n\n &[type=\"date\"] {\n padding-bottom: calc($input-padding-bottom - 1px);\n padding-top: calc($input-padding-top - 1px);\n display: flex;\n\n &::-webkit-calendar-picker-indicator {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: auto;\n height: auto;\n color: transparent;\n background: transparent;\n padding: 0;\n margin: 0;\n z-index: 1;\n pointer-events: visible;\n }\n }\n }\n\n label {\n @include label;\n z-index: 1;\n }\n\n .#{$prefix}info-icon {\n fill: v(borderActiveColor);\n }\n\n .#{$prefix}interaction-icon {\n position: relative;\n flex-shrink: 0;\n fill: v(borderActiveColor);\n opacity: 0;\n visibility: hidden;\n transition: all 0.3s ease-in-out;\n z-index: 1;\n }\n\n .#{$prefix}icon-background {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n padding-right: $input-trailing-icon-padding-right;\n\n .#{$prefix}icon-button {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: unset;\n\n .#{$prefix}icon {\n position: relative;\n height: auto;\n fill: v(trailingIconColor);\n }\n }\n }\n\n .#{$prefix}icon-button {\n border: none;\n outline: none;\n cursor: pointer;\n padding: 0;\n }\n\n .#{$prefix}border {\n box-shadow: inset 0 0 0 $input-border-width v(borderColor);\n // border-radius: $input-default-radius;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n pointer-events: none;\n transition: all 0.3s ease;\n }\n\n &.#{$prefix}small {\n // max-height: $input-small-height;\n // height: $input-small-height;\n line-height: $input-small-line-height;\n\n .#{$prefix}border {\n box-shadow: inset 0 0 0 $input-small-border-width v(borderColor);\n }\n\n label {\n @include labelSmallOverwrites;\n }\n\n .#{$prefix}navigation-elements {\n padding-right: $input-small-padding-right;\n\n > *:first-child {\n margin-left: $input-small-padding-left;\n }\n }\n\n .#{$prefix}eon-input {\n box-shadow: inset 0 0 0 $input-small-border-width v(borderColor);\n border-radius: $input-small-default-radius;\n padding: $input-small-padding-top $input-small-padding-right $input-small-padding-bottom $input-small-padding-left;\n line-height: $input-small-line-height;\n font-size: $input-small-font-size;\n padding-right: var(--inputInnerOffset);\n\n &:hover {\n box-shadow: inset 0 0 0 $input-small-border-width v(borderHoverColor);\n }\n\n &.#{$prefix}focus {\n box-shadow: inset 0 0 0 $input-small-border-width v(borderActiveColor);\n }\n\n &:focus {\n box-shadow: inset 0 0 0 $input-small-border-width v(borderActiveColor);\n }\n\n &.#{$prefix}focus {\n ~ label,\n ~ .#{$prefix}label-placeholder {\n @include labelActiveSmallOverwrites;\n }\n }\n\n &.#{$prefix}placeholder {\n ~ label,\n ~ .#{$prefix}label-placeholder {\n @include labelActiveSmallOverwrites;\n }\n }\n\n &:focus ~ label,\n &:focus ~ .#{$prefix}label-placeholder,\n &[type=\"date\"] ~ label,\n &[type=\"date\"] ~ .#{$prefix}label-placeholder {\n @include labelActiveSmallOverwrites;\n }\n\n &:-webkit-autofill {\n ~ label,\n ~ .#{$prefix}label-placeholder {\n @include labelActiveSmallOverwrites;\n }\n }\n\n &.#{$prefix}touched {\n ~ label,\n ~ .#{$prefix}label-placeholder {\n @include labelActiveSmallOverwrites;\n }\n }\n\n .#{$prefix}label-placeholder {\n max-width: calc(100% - var(--inputInnerOffset) - $input-small-label-active-x-padding);\n }\n\n &.#{$prefix}error {\n box-shadow: inset 0 0 0 $input-small-border-width v(errorMessageColor);\n }\n\n &:disabled {\n box-shadow: inset 0 0 0 $input-small-border-width v(disabledBorderColor) !important;\n }\n\n &[type=\"date\"] {\n padding-bottom: calc($input-small-padding-bottom - 1px);\n padding-top: calc($input-small-padding-top - 1px);\n }\n\n &.#{$prefix}autocomplete-visible {\n border-radius: $input-small-default-radius $input-small-default-radius 0 0;\n box-shadow: inset 0 0 0 $input-small-border-width v(borderActiveColor);\n }\n }\n\n .#{$prefix}input-autocomplete-wrapper {\n top: $input-small-height - $input-small-border-width;\n border-radius: $input-small-autocomplete-radius;\n box-shadow: inset 0 0 0 $input-small-border-width v(borderColor);\n }\n\n .#{$prefix}icon-background {\n // min-height: $input-small-height;\n // height: $input-small-height;\n background: transparent;\n padding-right: $input-small-trailing-icon-padding-right;\n\n .#{$prefix}icon-button {\n height: 100%;\n }\n }\n }\n\n &.#{$prefix}has-popup {\n &.#{$prefix}popup-visible {\n .#{$prefix}input-autocomplete-wrapper {\n visibility: visible;\n opacity: 1;\n }\n\n .#{$prefix}eon-input {\n border-radius: $input-default-radius $input-default-radius 0 0;\n box-shadow: inset 0 0 0 $input-border-width v(borderActiveColor);\n }\n\n &::after {\n content: \"\";\n position: absolute;\n left: 50%;\n bottom: 0;\n transform: translateX(-50%);\n width: calc(100% - #{$input-padding-left} - #{$input-padding-right});\n height: 1px;\n background-color: v(borderColor);\n z-index: 100;\n }\n }\n }\n}\n\n.#{$prefix}input-autocomplete-wrapper {\n position: absolute;\n max-height: calc(100vh - 96px);\n width: 100%;\n margin: auto;\n background-color: v(optionsBackgroundColor);\n z-index: 100;\n top: $input-height - $input-border-width;\n overflow: auto;\n overflow-x: hidden;\n border-radius: $input-autocomplete-radius;\n visibility: hidden;\n opacity: 0;\n padding-top: 1px;\n border-left: $input-border-width solid v(borderActiveColor);\n border-right: $input-border-width solid v(borderActiveColor);\n border-bottom: $input-border-width solid v(borderActiveColor);\n}\n\n.#{$prefix}input-autocomplete-option {\n position: relative;\n width: 100%;\n min-height: $input-autocomplete-option-min-height;\n box-shadow: inset 0 -1px 0 0 v(optionsBorderBottomColor);\n -webkit-appearance: none;\n padding: 11px 13px 12px 13px;\n line-height: 24px;\n outline: none;\n cursor: pointer;\n @include noneUserSelect();\n\n &:hover {\n border: none;\n background-color: v(optionsBackgroundColorHover);\n text-decoration: underline;\n }\n\n &:focus {\n border: none;\n background-color: v(optionsBackgroundColorHover);\n text-decoration: underline;\n }\n}\n\n.#{$prefix}input-autocomplete-preloader-wrapper {\n width: 44px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: -8px;\n}\n\n.#{$prefix}input-info-icon {\n pointer-events: visible;\n}\n\n.#{$prefix}label-placeholder {\n @include labelActive();\n position: absolute;\n color: transparent;\n background: v(currentBackgroundColor);\n background: linear-gradient(\n 0deg,\n transparent 0%,\n transparent 0px,\n v(currentBackgroundColor) 0px,\n v(currentBackgroundColor) 10px\n );\n z-index: 0;\n transition: opacity 0.15s ease-out 0s;\n opacity: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-radius: 5px;\n transform: translateY(1px);\n max-width: calc(100% - var(--inputInnerOffset) - $input-label-active-x-padding);\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Listen, Method, Prop, State, Watch } from \"@stencil/core\";\nimport {\n applySchemeDelegate,\n ColorableComponent,\n getColorOfNearestBackground,\n setCssVariablesDelegate\n} from \"../../common/colorable-component\";\nimport { LocalizableComponent, Localization, setCurrentLocalizationDelegate } from \"../../common/localizable-component\";\nimport {\n InputCurrencies,\n InputLocalization,\n InputSchemeDefinition,\n InputSchemeName,\n InputType\n} from \"./constants/input-types\";\nimport {\n INPUT_CURRENCIES,\n INPUT_PASSWORD,\n INPUT_SCHEME_CONFIG,\n INPUT_SCHEME_MAP,\n INPUT_TEXT,\n NUMBER_REGEX1,\n NUMBER_REGEX2\n} from \"./constants/input-constants\";\nimport { InputSchemeConfiguration } from \"../../constants/colors\";\nimport {\n FormComponent,\n handleCustomValidationDelegate,\n validateDelegate,\n validateRequiredValueDelegate\n} from \"../../common/form-component\";\nimport { format, isValid, parse } from \"date-fns\";\nimport IMask from \"imask\"; //only import whats neccessary here\nimport Opts from \"imask\";\nimport { isTouchDevice } from \"../../utils/touch-helper\";\nimport pfx from \"../../utils/style-class-prefix-helper\";\nimport { INPUT_LOCALIZATION } from \"./constants/input-i18n\";\nimport { KeyIds } from \"../../constants/keys\";\nimport { PRELOADER_CIRCLE_SIZE_SMALL } from \"../preloader-circle/constants/preloader-circle-constants\";\nimport { isSafari, isSmartDevice } from \"../../utils/device-helper\";\nimport { setCssVariable } from \"../../utils/css-variables\";\nimport { isFirefox } from \"../../utils/device-helper\";\n// import { InitLogging } from \"../../decorators/init-logging\";\n\n/**\n * @slot info-icon - Holds a single eon-ui-info-icon element\n */\n@Component({\n tag: \"eon-ui-input\",\n styleUrl: \"input.scss\",\n shadow: true\n})\nexport class Input\n implements\n ColorableComponent>,\n LocalizableComponent,\n FormComponent {\n // @InitLogging() sentryTransaction;\n schemeConfig: InputSchemeConfiguration = INPUT_SCHEME_CONFIG;\n schemeMap = INPUT_SCHEME_MAP;\n\n localization: Localization = INPUT_LOCALIZATION;\n currentLocalization: InputLocalization;\n\n @Element() hostElement: HTMLEonUiInputElement;\n\n private input?: HTMLInputElement | HTMLTextAreaElement;\n private internalDateMask: IMask.InputMask;\n private internalPatternMask: IMask.InputMask;\n private internalNumberMask: IMask.InputMask;\n private valueChangedEventEmitted: boolean = false;\n private tempValueForBlurComparison: string;\n\n @State() activeScheme: InputSchemeDefinition;\n\n @State() labelOffset: number = 0;\n @State() inputOffset: number = 0;\n @State() activeLabelOffset: number = 0;\n @State() clearOffset: number = 0;\n /**\n fieldSpaceCalculation\n */\n @State() paddingLeft: number = 0;\n @State() infoIconMargin: number = 0;\n\n private navigationElementsContainer: HTMLElement;\n\n /**\n * Whether or not the Dropdownlist is collapsed default is set to true.\n */\n @State() collapsed: boolean = true;\n\n /**\n * Fires when the user selects an item in the autocomplete list\n */\n @Event() autocompleteSelected: EventEmitter;\n\n /**\n * Used for the password toggle, gets set while the component is loaded\n */\n @State() internalType: InputType;\n\n /**\n * Used to store the results of autocomplete request\n */\n @State() results: Array;\n\n /**\n * Whether or not an existing CustomValidator has and error.\n */\n @State() customValidatorHasError: boolean = false;\n\n @State() isFocus: boolean;\n\n @State() passwordVisible: boolean = false;\n\n @State() isInfoIconAvailable: boolean;\n\n @State() masked: boolean = false;\n\n /**\n * Raised when the input has changed. Will emit the current value of the Input field.\n */\n @Event({ composed: false }) valueChanged: EventEmitter;\n\n /**\n * Raised when the input has changed programmatically. Will emit the current value of the Input field.\n */\n @Event({ composed: false }) valueChangedProgrammatically: EventEmitter;\n\n /**\n * Raised when the input is focused.\n */\n @Event() inputFocus: EventEmitter;\n\n /**\n * Raised when the input is losing focus.\n */\n @Event() inputBlur: EventEmitter;\n\n /**Raised when the trailing icon is clicked. */\n @Event() iconClick: EventEmitter;\n\n /**\n * Show or hide preloader\n */\n @Prop({ mutable: true }) preloader: boolean = false;\n\n /**\n * Internal use only! Please don't change this.\n * @disableControlInStorybook true\n */\n @Prop({ reflect: true }) isFormComponent: boolean = true;\n\n /**\n * Define the size of the input element\n */\n @Prop() size: \"small\" | \"normal\" = \"normal\";\n\n /**\n * The name of the input must be unique per page.!\n *@example \n */\n @Prop() name: string = \"\";\n\n /**\n * The value of the input element.\n * @example \n */\n @Prop({ reflect: true, mutable: true }) value: string = \"\";\n\n /**\n * Displays the input as textarea.\n * @example \n */\n @Prop() textarea: boolean = false;\n\n /**\n * Set to true if the input is required.\n *\n * @example \n */\n @Prop() required: boolean;\n\n /**\n * Set to true if the input is disabled.\n *\n * @example \n */\n @Prop() disabled: boolean;\n\n /**\n * Sets the type of the input. See https://www.w3schools.com/html/html_form_input_types.asp for valid types.\n *\n * @example \n */\n @Prop({ reflect: true, mutable: true }) type: InputType = \"text\";\n\n /**\n * Sets the label for the input element.\n *\n * @example \n */\n @Prop() label: string;\n\n /**\n * Defines whether the label should be placed above the component.\n */\n @Prop() labelOutside: boolean = false;\n\n /**\n * Defines whether the label should be hidden visually, i.e. only used for screen readers\n */\n @Prop() labelVisuallyHidden: boolean = false;\n\n /**\n * **Internal use only! Please don't use this property directly.**\n *  
\n * Sets the text of the error message.\n * @example \n */\n @Prop({ mutable: true }) errorMessage: string;\n\n /**\n * An empty Placeholder for an optional custom Error Message for CustomValidation.\n * @example \n */\n @Prop({ mutable: true }) customErrorMessage: string;\n\n /**\n * A custom message to show when the required field has no value\n */\n @Prop({ mutable: true }) customRequiredMessage: string;\n\n /**\n * **Internal use only! Please don't use this property directly.**\n *  
\n * Set to true if the Input is in error state and the error message should be displayed.\n * @example \n */\n @Prop({ reflect: true, mutable: true }) invalid: boolean = false;\n\n /**\n * Sets the text of the success message.\n * @example \n */\n @Prop() successMessage: string;\n\n /**\n * Set to true if the Input is in success state and the success message should be displayed.\n * @example \n */\n @Prop() success: boolean = false;\n\n /**\n * Set to true if the Input is in info state and the info message should be displayed.\n * @example \n */\n @Prop() info: boolean = false;\n\n /**\n * Sets the text of the info message.\n * @example \n */\n @Prop() infoMessage: string;\n\n /**\n * The name of the color scheme of the component.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n */\n @Prop({ reflect: true }) scheme: InputSchemeName;\n\n /**\n * Name of the trailing icon to display.\n * @example \n */\n @Prop() trailingIconName: string;\n\n /**\n * Determine if the trailing icon to clear the input is shown.\n * @example \n */\n @Prop() clearInputIcon: boolean = false;\n\n /**\n * Provide an icon for the messages (info, error and success).\n * If no icon is set, the default icons are used.\n * @example \n */\n @Prop() messageIcon: string;\n\n /**\n * Determine if the input is in focus style\n * @example \n */\n @Prop() focusStyle: boolean = false;\n\n /**\n * Determine if the input is read only\n * @example \n */\n @Prop() readOnly: boolean = false;\n\n /**\n * Determine if the input is a masked input with \"date\" (dd.mm.yyyy)\n * @example \n * @disableControlInStorybook true\n */\n @Prop() dateMask: boolean = false;\n\n /**\n * The format of the date used for the masked input. Use this for different separators too.\"\n * dd = days\n * MM = months (case sensitive!!)\n * yyyy = years\n * @example \n * @default \"dd.MM.yyyy\"\n * @disableControlInStorybook true\n */\n @Prop() dateFormat;\n\n /**\n * The minimum date. provided in format \"dd.MM.yyyy\"\n * @disableControlInStorybook true\n */\n @Prop() dateMin: string;\n\n /**\n * The maximum date. provided in format \"dd.MM.yyyy\"\n * @disableControlInStorybook true\n */\n @Prop() dateMax: string;\n\n /**\n * Determine if weekends are allowed inside the date-mask\n * @disableControlInStorybook true\n */\n @Prop() dateMaskAllowWeekends: boolean = true;\n\n /**\n * Placeholder for the input\n * @example \n */\n @Prop() placeholder: string;\n\n /**\n * Rows: Gives flexibility to editor for setting number of rows in Textarea field\n */\n @Prop() rows: number;\n\n /**\n * Cols: Gives flexibility to editor for setting number of cols in Textarea field\n */\n @Prop() cols: number;\n\n /**\n * Autocomplete: Defines if the input should have autocomplete function\n */\n @Prop() autocomplete: boolean = false;\n\n /**\n * autocompleteKeyword aka autocomplete(native input field): provides automated assistance in filling out form field values\n * as well as guidance to the browser as to the type of information expected in the field.\n * Typically values come from past values entered by the user, but they may also come from pre-configured values which can be set in autofill feature provided by browser.\n * For instance, a browser might let the user save their name, address, phone number, and email addresses for autocomplete purposes\n * This Property gives liberty to input fields to participate in Form Autofill feature of broswer\n * Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n * @example \n */\n @Prop() autocompleteKeyword: string;\n\n /**\n * Autocomplete Terms: used to save the autocomplete API answer\n */\n @Prop() autocompleteTerms: string;\n\n /**\n * Autocomplete terms separator\n */\n @Prop() autocompleteSeperator: string = \",\";\n\n /**\n * Property to store the formatted value\n */\n @Prop({ reflect: true, mutable: true }) formattedValue: string = \"\";\n\n /**\n * Autocomplete Start: Defines after how many characters the loading indicator should be shown.\n * \"3\" would mean as soon as the 3rd character has been typed.\n */\n @Prop() autocompleteStart: number = 3;\n\n /**\n * Defines pattern mask for input.
\n * Supported input types - `number`, `text`, `tel`.\n *\n * Look here for more details.\n * @example \n */\n @Prop() pattern: string = \"\";\n\n /**\n * Specifies the minimum value.\n * When user enters value below `min`, value is being replaced with `min` value on blur event.\n * @example \n */\n @Prop() min: string;\n\n /**\n * Specifies the maximum value.\n * @example \n */\n @Prop() max: string;\n\n /**\n * Sets thousend separator for numeric values.\n * Works only with input `type=\"text\"`\n * @example \n */\n @Prop() thousandSeparator: string = \"\";\n\n /**\n * Sets fractional delimiter for numeric values.\n * Works only with input `type=\"text\"`\n * @example \n */\n @Prop() radix: string = \",\";\n\n /**\n * This can be activated if component is used internally in other form components like date picker.\n * It deactivates the build in validation of input component so that it is exclusively handled by parent component.\n * @disableControlInStorybook true\n */\n @Prop() encapsulated: boolean = false;\n\n /**\n * Currency symbol\n */\n @Prop() currency: InputCurrencies;\n\n /**\n * Digits after point, 0 for integers for masked values\n */\n @Prop() scale: string = \"2\";\n\n /**\n * Defines the height of the drop down option list.\n * @example \"200px\", \"100px\", \"auto\".\n * If not set, height sticks to the max-height which is calc(100vh - 96px)\n */\n @Prop() autocompletePopupHeight: string;\n\n /**\n * Specifies the label to use for accessibility.\n */\n @Prop({ mutable: true }) ariaLabel: string;\n\n /**\n * id of an element that describes the input element\n */\n @Prop() describedBy: string;\n\n componentWillLoad() {\n this.applyScheme();\n this.setCurrentLocalization();\n this.setInternalType();\n\n // If dateFormat is not set use the format coming from localization instead.\n if (!this.dateFormat && this.currentLocalization) this.dateFormat = this.currentLocalization.dateFormat;\n this.setPlaceholder();\n this.isInfoIconAvailable =\n !!this.hostElement.querySelector('[slot=\"info-icon\"]') || !!this.hostElement.querySelector(\"EON-UI-INFO-ICON\");\n }\n\n componentDidLoad() {\n this.setDateMask();\n this.setPatternMask();\n this.setNumberMask();\n this.validateRequired();\n this.setCssVariables();\n\n if (this.value) this.handleInput(); // set initial value on internal input\n this.delegateInputInnerOffsetVariables();\n }\n\n componentDidRender() {\n /**\n * This produces a Stencil warning regarding a possible render-loop.\n * This is intended here - we need a rerender after the inner div has been rendered to get its real height.\n * After that, the state will update and the item will rerender again but this time Stencil detects that the value didn't change anymore.\n * Therefore, this will NOT result in a render loop and the warning can be ignored safely.\n */\n this.delegateInputInnerOffsetVariables();\n }\n\n /**\n * Saves the given error message and assumes that the component is invalid if any error message is provided.\n * @param component The FormComponent that should handle the custom validation.\n * @param errorMessage An error message of a custom validator. If none is supplied, the custom validation is considered to be valid.\n */\n @Method()\n async handleCustomValidation(errorMessage: string) {\n await handleCustomValidationDelegate(this, errorMessage);\n }\n\n /**\n * Validates that the component has a value if the required attribute is set.\n */\n async validateRequired(): Promise {\n return await validateRequiredValueDelegate(this);\n }\n\n /**\n * Combines the result of the internal required validator and the custom validator.\n * Sets a default error message if required validation failed or takes the custom validation error message otherwise.\n */\n @Watch(\"required\")\n @Method()\n async validate(): Promise {\n return await validateDelegate(this);\n }\n\n /**\n * Focus the internal input.\n */\n @Method()\n async focusInput(): Promise {\n this.input.focus();\n }\n\n @Watch(\"type\")\n setInternalType() {\n // Sets the internal type to the type first time. This is only needed for hiding and showing password.\n // In this case it toggles between type password and text.\n this.internalType = this.type;\n this.setCssVariables();\n }\n\n setCurrentLocalization() {\n setCurrentLocalizationDelegate(this);\n }\n\n /**\n * Update custom-required-message\n */\n @Watch(\"customRequiredMessage\")\n setCustomRequiredMessage() {\n this.validate();\n }\n\n /**\n * Checks if the input has a placeholder or a mask to place the label correctly\n */\n @Watch(\"placeholder\")\n @Watch(\"dateMask\")\n hasPlaceholder(): boolean {\n if (this.placeholder || this.dateMask) {\n return true;\n }\n }\n\n /**\n * Cannot use delegate function here because we need the current background Color\n */\n @Watch(\"scheme\")\n applyScheme() {\n applySchemeDelegate(this);\n this.setLabelBackgroundColor();\n }\n\n setLabelBackgroundColor() {\n const backgroundColor = getColorOfNearestBackground(this.hostElement);\n this.hostElement.style.setProperty(`--currentBackgroundColor`, `var(--${backgroundColor})`);\n }\n\n @Watch(\"activeScheme\")\n setCssVariables(): void {\n setCssVariablesDelegate(this);\n }\n\n /**\n * Main value change handler for input.\n * Differes between internal value changes (due to user input) and this.value changes set via attribute.\n */\n @Watch(\"value\")\n handleInput(event?) {\n /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * value changed by user input\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n if (event && event.type === \"input\") {\n this.valueChangedEventEmitted = true;\n if (this.internalPatternMask) {\n this.value = this.internalPatternMask.unmaskedValue;\n } else if (this.internalNumberMask) {\n if (this.min) {\n // if min, value can only be set delayed on blur as it might be adjusted.\n // otherwise it would block the user from typing in 11 if min is 6.\n // the informatino whether the value had been updated is stored in tempValueForBlurComparison.\n this.tempValueForBlurComparison = this.internalNumberMask.unmaskedValue;\n } else {\n this.value = this.internalNumberMask.unmaskedValue;\n }\n } else if (this.internalDateMask) {\n if (this.internalDateMask.typedValue) {\n this.value = format(new Date(this.internalDateMask.typedValue), \"yyyy-MM-dd\");\n } else {\n this.value = \"\";\n this.formattedValue = \"\";\n }\n } else {\n this.value = (event.target as HTMLInputElement).value;\n }\n\n if (this.internalNumberMask && this.min) {\n this.valueChanged.emit(this.internalNumberMask.unmaskedValue);\n } else {\n this.valueChanged.emit(this.value);\n }\n\n this.valueChangedEventEmitted = false;\n return;\n }\n\n /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * value changed by attribute change\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n if (this.internalPatternMask) {\n this.internalPatternMask.value = this.value;\n this.input.value = this.internalPatternMask.masked.value;\n this.formattedValue = this.internalPatternMask.masked.value;\n } else if (this.internalNumberMask) {\n this.internalNumberMask.value = this.value;\n this.input.value = this.internalNumberMask.masked.value;\n this.formattedValue = this.internalNumberMask.masked.value as string;\n } else if (this.internalDateMask) {\n if (isValid(new Date(this.value))) {\n this.internalDateMask.typedValue = new Date(this.value);\n this.formattedValue = this.internalDateMask.masked.value;\n }\n } else {\n this.input.value = this.value;\n this.formattedValue = this.value;\n }\n\n !this.encapsulated && this.validate();\n\n if (!this.valueChangedEventEmitted) this.valueChangedProgrammatically.emit(this.value);\n this.valueChangedEventEmitted = false;\n\n this.sendAutocompleteRequest();\n }\n\n setPlaceholder() {\n // only done for iOS Devices as in those cases placeholder is missing\n if (this.type === \"date\" && !this.placeholder && isSmartDevice()) {\n this.placeholder = this.getDeviceDateFormat();\n }\n }\n\n /**\n * For native date pickers a date format is chosen based on the device language.\n * This function returns the date format which is taken by the browser and translates it in the current language.\n */\n getDeviceDateFormat() {\n let dummyDate = new Date(2020, 11, 31);\n let placeholderString = dummyDate.toLocaleDateString();\n\n placeholderString = placeholderString.replace(\n \"31\",\n `${this.currentLocalization.localeDay}${this.currentLocalization.localeDay}`\n );\n placeholderString = placeholderString.replace(\n \"12\",\n `${this.currentLocalization.localeMonth}${this.currentLocalization.localeMonth}`\n );\n placeholderString = placeholderString.replace(\n \"2020\",\n `${this.currentLocalization.localeYear}${this.currentLocalization.localeYear}${this.currentLocalization.localeYear}${this.currentLocalization.localeYear}`\n );\n\n return placeholderString;\n }\n\n /**\n * Show or hide the autocomplete dropdown field depending on terms coming from the API\n */\n @Watch(\"autocompleteTerms\")\n handleAutocomplete() {\n let tempTerms;\n this.preloader = false;\n this.collapsed = false;\n\n if (this.autocompleteTerms.length > 0) {\n tempTerms = this.autocompleteTerms.split(this.autocompleteSeperator);\n this.results = tempTerms.map((term: string) => term.trim());\n } else {\n this.results = [];\n }\n }\n\n /**\n * Remove preloader if there is no response from server\n */\n @Watch(\"invalid\")\n removePreloader() {\n if (this.invalid) this.preloader = false;\n }\n\n @Watch(\"dateFormat\")\n setDateMask(dateFormatString?: string) {\n if (this.internalDateMask) {\n // Reset mask on date format change\n this.input.value = \"\";\n this.internalDateMask.destroy();\n }\n if (!dateFormatString) {\n dateFormatString = this.dateFormat;\n }\n\n if (this.dateMask) {\n this.masked = true;\n\n //set the input to a date masked input\n this.internalDateMask = IMask(this.input, {\n mask: Date,\n lazy: false,\n overwrite: true,\n pattern: dateFormatString,\n blocks: {\n dd: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 31,\n maxLength: 2,\n placeholderChar: this.currentLocalization.localeDay\n },\n MM: {\n mask: IMask.MaskedRange,\n from: 1,\n to: 12,\n maxLength: 2,\n placeholderChar: this.currentLocalization.localeMonth\n },\n yyyy: {\n mask: IMask.MaskedRange,\n from: 1900,\n to: 9999,\n maxLength: 4,\n placeholderChar: this.currentLocalization.localeYear\n }\n },\n format: (date) => {\n if (date) {\n return format(date, dateFormatString);\n }\n },\n parse: (str) => {\n if (str) {\n const date = parse(str, dateFormatString, new Date());\n return date;\n }\n }\n });\n }\n }\n\n @Watch(\"pattern\")\n setPatternMask() {\n const isSupportedType = this.type === \"number\" || this.type === \"text\" || this.type === \"tel\";\n\n if (this.internalPatternMask) {\n this.internalPatternMask = null;\n }\n\n if (isSupportedType && this.pattern) {\n this.masked = true;\n\n this.internalPatternMask = IMask(this.input, {\n mask: this.pattern\n });\n }\n }\n\n @Watch(\"min\")\n @Watch(\"max\")\n @Watch(\"thousandSeparator\")\n @Watch(\"scale\")\n @Watch(\"radix\")\n setNumberMask() {\n if (this.min || this.max || this.thousandSeparator || this.currency) {\n this.masked = true;\n let maskOptions = {};\n\n if (this.currency) {\n const currencyInfo = INPUT_CURRENCIES.find((obj) => {\n return obj.name === this.currency;\n });\n\n this.placeholder = currencyInfo.currencySymbol;\n\n maskOptions = {\n mask: [\n { mask: \"\" },\n {\n mask: currencyInfo.currencyFormat,\n lazy: false,\n blocks: {\n num: {\n mask: Number,\n scale: this.scale,\n normalizeZeros: false,\n thousandsSeparator: currencyInfo.thousandSeparator,\n radix: currencyInfo.currencyRadix,\n mapToRadix: [\".\", \",\"]\n }\n }\n }\n ]\n };\n } else {\n maskOptions = {\n mask: Number,\n thousandsSeparator: this.thousandSeparator || \"\",\n min: parseInt(this.min) || null,\n max: parseInt(this.max) || null,\n mapToRadix: parseInt(this.scale) ? [\".\", \",\"] : [],\n radix: parseInt(this.scale) ? this.radix : \"null\",\n scale: this.scale\n };\n }\n\n if (this.internalNumberMask) {\n // @ts-ignore\n this.internalNumberMask.updateOptions(maskOptions);\n } else {\n // @ts-ignore\n this.internalNumberMask = IMask(this.input, maskOptions);\n }\n }\n }\n\n @Watch(\"masked\")\n toggleMaskedInputConfig() {\n if (this.masked) {\n this.type = \"text\";\n }\n }\n\n sendAutocompleteRequest() {\n if (this.autocomplete && this.value.length >= this.autocompleteStart) {\n this.preloader = true;\n }\n\n // here should be a request to API to update terms property\n }\n\n /**\n * Clears the value of the input\n * @param _event the event of the input\n */\n private clearValue(_event) {\n this.value = \"\";\n this.formattedValue = \"\";\n\n if (this.internalDateMask) {\n this.internalDateMask.value = \"\";\n }\n }\n\n /**\n * toggles the value of the input field between 'password' and 'text'\n * @param _event the event of the click\n */\n private togglePasswordVisible(_event) {\n this.internalType = this.passwordVisible ? INPUT_PASSWORD : INPUT_TEXT;\n this.passwordVisible = !this.passwordVisible;\n this.input.focus();\n }\n\n private onFocus(event: FocusEvent) {\n this.collapsed = this.autocomplete && this.value.length < this.autocompleteStart;\n this.inputFocus.emit(event);\n this.isFocus = true;\n (event.currentTarget as HTMLElement).focus();\n }\n\n private onBlur(event: FocusEvent) {\n this.inputBlur.emit(event);\n this.isFocus = false;\n\n // if min, value can only be set delayed on blur as it might be adjusted\n if (this.min) {\n this.value = this.internalNumberMask.unmaskedValue;\n if (this.tempValueForBlurComparison && this.tempValueForBlurComparison !== this.value) {\n this.valueChangedProgrammatically.emit(this.internalNumberMask.unmaskedValue);\n }\n }\n }\n\n /**\n * Get attributes for textarea and input so we do not need to declare them twice\n */\n private getProps() {\n const props = {\n class: `\n ${pfx(\"eon-input\")}\n ${this.value && pfx(\"touched\")}\n ${this.invalid && pfx(\"error\")}\n ${this.focusStyle && pfx(\"focus\")}\n ${this.hasPlaceholder() && pfx(\"placeholder\")}\n `,\n onInput: (event: InputEvent) => this.handleInput(event),\n required: this.required,\n disabled: this.disabled || this.readOnly,\n tabindex: 0,\n id: this.name,\n readonly: this.readOnly,\n ariaLabel: this.ariaLabel,\n \"aria-describedby\": this.describedBy,\n autocomplete: this.autocompleteKeyword // browser autocomplete feature\n };\n\n return props;\n }\n\n /**\n * Set the input value on click on autocomplete results\n */\n private onOptionClick(value) {\n this.value = value;\n this.preloader = false;\n this.autocompleteSelected.emit(value);\n this.results = [];\n }\n\n private handleKeyDown(e: KeyboardEvent, value) {\n if (this.disabled) {\n return;\n }\n\n const elm = e.currentTarget as HTMLElement;\n\n switch (e.key) {\n case KeyIds.SPACE:\n case KeyIds.ENTER:\n e.preventDefault();\n\n this.value = value;\n this.results = [];\n this.preloader = false;\n this.input.focus();\n this.autocompleteSelected.emit(value);\n\n break;\n\n case KeyIds.DOWN:\n e.preventDefault();\n e.stopPropagation();\n\n const nextElm = elm.nextElementSibling as HTMLElement;\n\n if (nextElm) {\n nextElm.focus();\n }\n\n break;\n\n case KeyIds.UP:\n e.preventDefault();\n\n const prevElm = elm.previousElementSibling as HTMLElement;\n\n if (prevElm) {\n prevElm.focus();\n }\n\n break;\n }\n }\n\n private handleInputKeyDown(e: KeyboardEvent) {\n if (this.disabled) {\n return;\n }\n if (this.autocomplete) {\n switch (e.key) {\n case KeyIds.DOWN:\n e.preventDefault();\n let option = this.hostElement?.shadowRoot?.querySelector(\".eonui-input-autocomplete-option\") as HTMLElement;\n option?.focus();\n\n break;\n\n case KeyIds.ESCAPE:\n e.preventDefault();\n this.closeAutocompleteDropdown(e);\n\n break;\n }\n }\n // for firefox and Safari:: this logic is implemented to handle the numberic characters\n // firefox ticket : https://bugzil.la/1398528\n if (isFirefox() || isSafari()) {\n if (this.type === \"number\") {\n if (!e.key.match(NUMBER_REGEX1)) {\n e.preventDefault();\n }\n }\n }\n }\n\n private handlePasteInput(e: ClipboardEvent) {\n if (isFirefox() || isSafari()) {\n const pasteText = e.clipboardData.getData(\"text\");\n const isNum = !pasteText.match(NUMBER_REGEX2);\n if (this.type === \"number\" && !isNum) {\n e.preventDefault();\n }\n }\n }\n\n private closeAutocompleteDropdown(e) {\n const srcElement = e.srcElement as HTMLElement;\n if (srcElement?.tagName != \"EON-UI-INPUT\" && !this.hostElement.contains(srcElement)) {\n this.collapsed = true;\n }\n }\n\n @Listen(\"valueChanged\")\n @Listen(\"valueChangedProgrammatically\")\n handleValueChanged() {\n this.collapsed = this.value?.length < this.autocompleteStart;\n }\n\n @Listen(\"click\", { target: \"document\" })\n onDocumentClick(event) {\n this.closeAutocompleteDropdown(event);\n }\n\n private delegateInputInnerOffsetVariables() {\n const labelOffset = this.navigationElementsContainer.offsetWidth;\n setCssVariable(this.hostElement as HTMLElement, \"--inputInnerOffset\", `${labelOffset}px`);\n }\n\n render() {\n let input;\n if (this.textarea) {\n input = (\n (this.input = el as HTMLTextAreaElement)}\n onFocus={(e) => this.onFocus(e)}\n onBlur={(e) => this.onBlur(e)}\n placeholder={this.placeholder}\n rows={this.rows}\n cols={this.cols}\n value={this.value}\n {...this.getProps()}\n >\n );\n } else {\n input = (\n (this.input = el as HTMLInputElement)}\n onFocus={(e) => this.onFocus(e)}\n onBlur={(e) => this.onBlur(e)}\n placeholder={this.placeholder}\n title={this.internalType == \"password\" ? \"\" : this.formattedValue}\n min={this.dateMin && this.dateMin}\n max={this.dateMax && this.dateMax}\n inputmode={this.type === \"number\" ? \"numeric\" : null}\n {...this.getProps()}\n >\n );\n }\n\n const autocompleteVisible =\n this.autocomplete &&\n !this.textarea &&\n this.results &&\n this.results.length !== 0 &&\n this.value.length >= this.autocompleteStart;\n\n return (\n \n {(this.labelOutside || this.labelVisuallyHidden) && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n \n )}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n this.handleInputKeyDown(event)}\n onPaste={(event: ClipboardEvent) => this.handlePasteInput(event)}\n >\n {input}\n {!this.labelOutside && !this.labelVisuallyHidden && (\n // eslint-disable-next-line jsx-a11y/label-has-associated-control\n \n )}\n {!this.labelOutside && !this.labelVisuallyHidden &&
{this.label}
}\n (this.navigationElementsContainer = el as HTMLElement)}\n >\n {this.clearInputIcon && !this.disabled && (\n (this.clearIconBox = el as HTMLElement)} */\n name=\"close\"\n onClick={(e) => this.clearValue(e)}\n >\n )}\n {this.type === INPUT_PASSWORD && (\n this.togglePasswordVisible(e)}\n >\n )}\n {this.preloader && !this.textarea && (\n (this.autoIconBox = el as HTMLElement)} */\n >\n \n \n )}\n {!this.textarea && this.isInfoIconAvailable && (\n \n \n \n \n )}\n {this.trailingIconName && !this.textarea && (\n
(this.trailIconBox = el as HTMLElement)} */>\n this.iconClick.emit(e)}\n disabled={this.disabled}\n tabindex=\"-1\"\n >\n \n \n
\n )}\n \n {autocompleteVisible && (\n
\n {this.results.map((item, i) => (\n this.onOptionClick(item)}\n onKeyDown={(event: KeyboardEvent) => this.handleKeyDown(event, item)}\n innerHTML={item.split(this.value).join(`${this.value}`)}\n >
\n ))}\n \n )}\n \n\n {this.success && (\n \n )}\n {this.invalid && (\n \n )}\n {this.info && (\n \n )}\n
\n );\n }\n}\n"],"mappings":"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"}