{"version":3,"sources":["jsdelivr-header.js","/npm/@aurodesignsystem-dev/auro-formkit@0.0.0-pr624.55/components/input/dist/registered.js"],"names":[],"mappings":"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","file":"/npm/@aurodesignsystem-dev/auro-formkit@0.0.0-pr624.55/components/input/dist/registered.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/@aurodesignsystem-dev/auro-formkit@0.0.0-pr624.55/components/input/dist/registered.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { css, LitElement, html } from 'lit';\nimport { unsafeStatic, literal, html as html$1 } from 'lit/static-html.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nvar shapeSizeCss = css`.wrapper{overflow:hidden}.shape-classic-xl,.shape-classic-lg,.shape-classic-md,.shape-classic-sm,.shape-classic-xs{min-height:58px;max-height:58px;border-style:solid;border-width:1px;border-radius:var(--ds-border-radius, 0.375rem)}.shape-classic-xl.simple,.shape-classic-lg.simple,.shape-classic-md.simple,.shape-classic-sm.simple,.shape-classic-xs.simple{border-width:0px;min-height:60px;max-height:60px;background-color:unset;box-shadow:none}.shape-classic-xl.thin,.shape-classic-lg.thin,.shape-classic-md.thin,.shape-classic-sm.thin,.shape-classic-xs.thin{border-width:1px;min-height:58px;max-height:58px;background-color:unset}.shape-classic-xl.parentBorder,.shape-classic-lg.parentBorder,.shape-classic-md.parentBorder,.shape-classic-sm.parentBorder,.shape-classic-xs.parentBorder{border:0;box-shadow:unset;min-height:56px;max-height:56px}.shape-snowflake-xl,.shape-snowflake-lg,.shape-snowflake-md,.shape-snowflake-sm,.shape-snowflake-xs{min-height:56px;max-height:56px;border-style:solid;border-width:2px;border-color:transparent;border-radius:30px}.shape-snowflake-xl.simple,.shape-snowflake-lg.simple,.shape-snowflake-md.simple,.shape-snowflake-sm.simple,.shape-snowflake-xs.simple{border-width:0px;min-height:60px;max-height:60px;background-color:unset;box-shadow:none}.shape-snowflake-xl.thin,.shape-snowflake-lg.thin,.shape-snowflake-md.thin,.shape-snowflake-sm.thin,.shape-snowflake-xs.thin{border-width:1px;min-height:58px;max-height:58px;background-color:unset}.shape-snowflake-xl.parentBorder,.shape-snowflake-lg.parentBorder,.shape-snowflake-md.parentBorder,.shape-snowflake-sm.parentBorder,.shape-snowflake-xs.parentBorder{border:0;box-shadow:unset;min-height:56px;max-height:56px}.shape-box-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-box-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-box-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-rounded-lg{min-height:56px;max-height:56px;border-style:solid;border-width:2px;border-color:transparent;border-radius:6px}.shape-rounded-lg.simple{border-width:0px;min-height:56px;max-height:56px;background-color:unset;box-shadow:none}.shape-rounded-lg.thin{border-width:1px;min-height:54px;max-height:54px;background-color:unset}.shape-rounded-lg.parentBorder{border:0;box-shadow:unset;min-height:52px;max-height:52px}.shape-pill-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px}.shape-pill-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-left-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px 0 0 36px}.shape-pill-left-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-left-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-left-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-right-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:0 36px 36px 0}.shape-pill-right-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-right-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-right-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px}.shape-pill-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-pill-left-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px 0 0 36px}.shape-pill-left-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-left-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-left-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-pill-right-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:0 36px 36px 0}.shape-pill-right-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-right-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-right-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}`;\n\nvar styleCss$4 = css`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block}.wrapper{cursor:text}.helpTextClasses{cursor:default}input{overflow:clip !important;width:100%;padding:0;border:0;background:unset;outline:none;overflow-clip-margin:0 !important;text-overflow:ellipsis}.displayValue{display:none}.displayValue.hasContent:is(.withValue):not(.hasFocus){display:flex;align-items:center}.accents:not(.util_displayHidden){display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px}`;\n\nvar styleDefaultCss = css`.layoutDefault .typeIcon,:host(:not([layout])) .typeIcon{display:flex;flex-direction:row;align-items:center}.layoutDefault .typeIcon [auro-icon],:host(:not([layout])) .typeIcon [auro-icon]{--ds-auro-icon-size: var(--ds-size-300, 1.5rem);height:var(--ds-size-300, 1.5rem);margin-right:var(--ds-size-100, 0.5rem)}.layoutDefault .notificationIcons,:host(:not([layout])) .notificationIcons{display:flex;flex-direction:row;padding-right:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .typeIcon,:host(:not([layout])[bordered]) .typeIcon{padding-left:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .notificationIcons,:host(:not([layout])[bordered]) .notificationIcons{align-items:center}:host([class=layoutDefault][bordered]) .notification:not(:first-of-type),:host(:not([layout])[bordered]) .notification:not(:first-of-type){margin-left:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .alertNotification,:host(:not([layout])[bordered]) .alertNotification{width:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-25, 0.125rem));height:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-25, 0.125rem))}:host([class=layoutDefault][bordered]) .passwordBtn,:host(:not([layout])[bordered]) .passwordBtn{width:calc(var(--ds-size-300, 1.5rem));height:calc(var(--ds-size-300, 1.5rem))}:host([class=layoutDefault][bordered]) .notificationBtn,:host(:not([layout])[bordered]) .notificationBtn{display:block;width:var(--ds-size-300, 1.5rem);height:var(--ds-size-300, 1.5rem);padding:0;border:0;background:unset;cursor:pointer}:host([class=layoutDefault][bordered]) .notificationBtn [auro-icon],:host(:not([layout])[bordered]) .notificationBtn [auro-icon]{display:block;height:var(--ds-size-300, 1.5rem);--ds-auro-icon-size: var(--ds-size-300, 1.5rem)}:host([class=layoutDefault][bordered]) .notificationBtn [auro-icon][hidden],:host(:not([layout])[bordered]) .notificationBtn [auro-icon][hidden]{display:none}:host([class=layoutDefault]:not([bordered])) .typeIcon,:host([class=layoutDefault]:not([bordered])) .notificationIcons,:host(:not([layout]):not([bordered])) .typeIcon,:host(:not([layout]):not([bordered])) .notificationIcons{align-items:flex-end;padding-bottom:var(--ds-size-50, 0.25rem)}:host([class=layoutDefault]:not([bordered])) .clearBtn,:host(:not([layout]):not([bordered])) .clearBtn{transition:all .3s cubic-bezier(0.215, 0.61, 0.355, 1);overflow:hidden;width:0;opacity:0}.layoutDefault .wrapper:hover .clearBtn,.layoutDefault .wrapper:focus-within .clearBtn,:host(:not([layout])) .wrapper:hover .clearBtn,:host(:not([layout])) .wrapper:focus-within .clearBtn{width:calc(var(--ds-size-200, 1rem) + var(--ds-size-25, 0.125rem));height:calc(var(--ds-size-200, 1rem) + var(--ds-size-25, 0.125rem));opacity:1}:host([class=layoutDefault]:focus-within[type=password]) .notificationIcons[hasValue] .alertNotification,:host(:not([layout]):focus-within[type=password]) .notificationIcons[hasValue] .alertNotification{overflow:hidden;width:0;height:0;padding:0;margin:0;visibility:hidden}.layoutDefault input,:host(:not([layout])) input{border:unset}.layoutDefault .wrapper,:host(:not([layout])) .wrapper{position:relative;overflow:hidden;border-style:solid}:host([class=layoutDefault]:not([bordered],[borderless])) .wrapper,:host(:not([layout]):not([bordered],[borderless])) .wrapper{border-width:1px 0}:host([class=layoutDefault][bordered]) .wrapper,:host(:not([layout])[bordered]) .wrapper{border-width:1px;border-radius:var(--ds-border-radius, 0.375rem)}:host([class=layoutDefault]:not([borderless])) .wrapper:focus-within:before,:host(:not([layout]):not([borderless])) .wrapper:focus-within:before{position:absolute;display:block;border-bottom-width:1px;border-bottom-style:solid;content:\"\";inset:0;pointer-events:none}:host([class=layoutDefault][validity]:not([validity=valid])) .wrapper:before,:host(:not([layout])[validity]:not([validity=valid])) .wrapper:before{border-bottom:0}:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.layoutDefault :host,:host(:not([layout])) :host{position:relative;display:block}.layoutDefault .wrapper,:host(:not([layout])) .wrapper{display:flex;flex-direction:row}.layoutDefault .main,:host(:not([layout])) .main{display:flex;flex-direction:row;position:relative;flex:1}`;\n\nvar colorBaseCss = css`.wrapper{border-color:var(--ds-auro-input-border-color);background-color:var(--ds-auro-input-background-color);color:var(--ds-auro-input-text-color)}.wrapper label{color:var(--ds-auro-input-label-text-color)}.wrapper input{caret-color:var(--ds-auro-input-caret-color);color:var(--ds-auro-input-text-color)}.wrapper input::placeholder{color:var(--ds-auro-input-placeholder-text-color)}.wrapper input:focus::placeholder{color:var(--ds-auro-input-placeholder-text-color)}.wrapper .displayValue{background-color:var(--ds-auro-input-background-color)}:host(:not([ondark])) .wrapper:focus-within{--ds-auro-input-border-color: var(--ds-basic-color-border-brand, #00274a)}:host([ondark]) .wrapper:focus-within{--ds-auro-input-border-color: var(--ds-basic-color-border-inverse, #ffffff)}:host(:is([validity]:not([validity=valid]))) .wrapper{--ds-auro-input-border-color: var(--ds-basic-color-status-error, #e31f26)}:host([ondark]:is([validity]:not([validity=valid]))) .wrapper{--ds-auro-input-border-color: var(--ds-basic-color-status-error-subtle, #fbc6c6)}:host(:not([ondark])[disabled]){--ds-auro-input-border-color: var(--ds-basic-color-border-subtle, #dddddd);--ds-auro-input-label-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0);--ds-auro-input-placeholder-text-color: var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host([ondark][disabled]){--ds-auro-input-border-color: var(--ds-advanced-color-button-primary-border-inverse-disabled, rgba(255, 255, 255, 0.75));--ds-auro-input-label-text-color: var(--ds-basic-color-texticon-inverse-disabled, #7e8894);--ds-auro-input-placeholder-text-color: var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}`;\n\nvar tokensCss$4 = css`:host(:not([ondark])){--ds-auro-input-border-color: var(--ds-basic-color-border-bold, #585e67);--ds-auro-input-background-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-input-container-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-input-caret-color: var(--ds-advanced-color-state-focused, #01426a);--ds-auro-input-label-text-color: var(--ds-basic-color-texticon-muted, #676767);--ds-auro-input-placeholder-text-color: var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-input-text-color: var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-input-error-icon-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-input-outline-color: transparent}:host([ondark]){--ds-auro-input-border-color: var(--ds-basic-color-border-inverse, #ffffff);--ds-auro-input-background-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-input-container-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-input-caret-color: var(--ds-advanced-color-state-focused-inverse, #ffffff);--ds-auro-input-label-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-input-placeholder-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-input-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-input-error-icon-color: var(--ds-basic-color-status-error-subtle, #fbc6c6);--ds-auro-input-outline-color: transparent}`;\n\nvar classicStyleCss = css`.layout-classic{display:flex;flex-direction:row;box-shadow:inset 0 0 0 1px var(--ds-auro-input-outline-color)}.layout-classic .mainContent{position:relative;display:flex;flex:1;flex-direction:column;justify-content:center;cursor:text}.layout-classic .mainContent label{cursor:text;font-size:var(--ds-text-body-size-xs);line-height:20px;transition:all .3s cubic-bezier(0.215, 0.61, 0.355, 1)}.layout-classic .mainContent input{height:auto;font-size:var(--ds-basic-text-body-default-font-size, 16px);line-height:var(--ds-basic-text-body-default-line-height, 24px);transition:all .3s cubic-bezier(0.215, 0.61, 0.355, 1)}.layout-classic .mainContent:has(input.util_displayHiddenVisually) label{padding-top:0;font-size:var(--ds-text-body-size-default, 1rem);justify-self:flex-start;line-height:var(--ds-text-body-size-default)}.layout-classic .mainContent:has(input.util_displayHiddenVisually) input{height:0;padding-bottom:0;line-height:0}.layout-classic .accents .typeIcon>*{margin-left:var(--ds-size-50, 0.25rem)}.layout-classic .accents.left{padding-right:var(--ds-size-50, 0.25rem)}.layout-classic .accents.right{padding-left:var(--ds-size-50, 0.25rem)}.layout-classic .accents.right .notification{margin-right:var(--ds-size-50, 0.25rem)}.layout-classic.withValue{justify-content:flex-start}.layout-classic:focus-within{justify-content:flex-start}.layout-classic:focus-within .alertNotification{display:none}`;\n\nvar classicColorCss = css`.layout-classic label{color:var(--ds-auro-input-label-text-color)}.layout-classic:focus-within{--ds-auro-input-outline-color: var(--ds-auro-input-border-color)}:host(:not([ondark])) .layout-classic:focus-within{--ds-auro-input-border-color: var(--ds-basic-color-border-brand, #00274a);--ds-auro-input-outline-color: var(--ds-basic-color-border-brand, #00274a)}:host([ondark]) .layout-classic:focus-within{--ds-auro-input-border-color: var(--ds-basic-color-border-inverse, #ffffff);--ds-auro-input-outline-color: var(--ds-basic-color-border-inverse, #ffffff)}:host([layout*=classic]:not([ondark]):is([validity]:not([validity=valid]))){--ds-auro-input-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-input-outline-color: var(--ds-basic-color-status-error, #e31f26)}:host([layout*=classic]:not([ondark]):is([validity]:not([validity=valid]))) .layout-classic:focus-within{--ds-auro-input-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-input-outline-color: var(--ds-basic-color-status-error, #e31f26)}:host([layout*=classic][ondark]:is([validity]:not([validity=valid]))){--ds-auro-input-border-color: var(--ds-basic-color-status-error-subtle, #fbc6c6);--ds-auro-input-outline-color: var(--ds-basic-color-status-error-subtle, #fbc6c6)}:host([layout*=classic][ondark]:is([validity]:not([validity=valid]))) .layout-classic:focus-within{--ds-auro-input-border-color: var(--ds-basic-color-status-error-subtle, #fbc6c6);--ds-auro-input-outline-color: var(--ds-basic-color-status-error-subtle, #fbc6c6)}`;\n\nvar emphasizedStyleCss = css`:host([layout*=emphasized][shape*=pill]:not([layout*=right])) .leftIndent{margin-left:var(--ds-size-150, 0.75rem);width:calc(100% - var(--ds-size-150, 0.75rem))}:host([layout*=emphasized][shape*=pill]:not([layout*=left])) .rightIndent{margin-right:var(--ds-size-150, 0.75rem);width:calc(100% - var(--ds-size-150, 0.75rem))}:host([layout*=emphasized][shape*=pill]:not([layout*=left]):not([layout*=right])) .rightIndent{margin-right:var(--ds-size-150, 0.75rem);width:calc(100% - var(--ds-size-300, 1.5rem))}.layout-emphasized,.layout-emphasized-left,.layout-emphasized-right{display:flex;flex-direction:row;align-items:center;justify-content:center}.layout-emphasized label,.layout-emphasized-left label,.layout-emphasized-right label{text-transform:uppercase;font-size:32px;line-height:38px}.layout-emphasized input,.layout-emphasized-left input,.layout-emphasized-right input{text-align:center;font-size:14px;line-height:20px}.layout-emphasized .mainContent,.layout-emphasized-left .mainContent,.layout-emphasized-right .mainContent{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1}.layout-emphasized .displayValue,.layout-emphasized-left .displayValue,.layout-emphasized-right .displayValue{position:absolute;top:0;right:0;bottom:0;left:0;display:none}.layout-emphasized .displayValue.hasContent:is(.withValue):not(.hasFocus),.layout-emphasized-left .displayValue.hasContent:is(.withValue):not(.hasFocus),.layout-emphasized-right .displayValue.hasContent:is(.withValue):not(.hasFocus){display:block}.layout-emphasized .displayValueWrapper,.layout-emphasized-left .displayValueWrapper,.layout-emphasized-right .displayValueWrapper{transform:translateY(-50%)}.layout-emphasized.withValue,.layout-emphasized-left.withValue,.layout-emphasized-right.withValue{justify-content:flex-start}.layout-emphasized.withValue label,.layout-emphasized-left.withValue label,.layout-emphasized-right.withValue label{display:block;text-transform:unset;font-size:10px;line-height:14px;width:100%;text-align:left}.layout-emphasized.withValue input,.layout-emphasized-left.withValue input,.layout-emphasized-right.withValue input{text-transform:uppercase;font-size:32px;line-height:38px;text-align:left;width:100%}.layout-emphasized:not(:focus-within):not(:is([validity]:not([validity=valid]))),.layout-emphasized-left:not(:focus-within):not(:is([validity]:not([validity=valid]))),.layout-emphasized-right:not(:focus-within):not(:is([validity]:not([validity=valid]))){--ds-auro-input-border-color: transparent}.layout-emphasized:focus-within,.layout-emphasized-left:focus-within,.layout-emphasized-right:focus-within{justify-content:flex-start}.layout-emphasized:focus-within label,.layout-emphasized-left:focus-within label,.layout-emphasized-right:focus-within label{display:block;text-transform:unset;font-size:10px;line-height:14px;width:100%;text-align:left}.layout-emphasized:focus-within input,.layout-emphasized-left:focus-within input,.layout-emphasized-right:focus-within input{text-transform:uppercase;font-size:32px;line-height:38px;text-align:left;width:100%}.layout-emphasized:focus-within .alertNotification,.layout-emphasized-left:focus-within .alertNotification,.layout-emphasized-right:focus-within .alertNotification{display:none}.layout-emphasized .accents.left,.layout-emphasized-left .accents.left,.layout-emphasized-right .accents.left{padding-left:var(--ds-size-150, 0.75rem)}.layout-emphasized .accents.right,.layout-emphasized-left .accents.right,.layout-emphasized-right .accents.right{padding-right:var(--ds-size-150, 0.75rem)}.layout-emphasized-left .alertNotification{margin-right:var(--ds-size-50, 0.25rem)}.layout-emphasized-left .clear{margin-left:var(--ds-size-50, 0.25rem)}.layout-emphasized-right .alertNotification{margin-left:var(--ds-size-50, 0.25rem)}.layout-emphasized-right .clear{margin-right:var(--ds-size-50, 0.25rem)}`;\n\nvar emphasizedColorCss = css`.layout-emphasized:focus-within,.layout-emphasized.withValue,.layout-emphasized-left:focus-within,.layout-emphasized-left.withValue,.layout-emphasized-right:focus-within,.layout-emphasized-right.withValue{--ds-auro-input-label-text-color: var(--ds-basic-color-texticon-inverse-muted, #ccd2db)}.layout-emphasized:focus-within,.layout-emphasized-left:focus-within,.layout-emphasized-right:focus-within{--auro-input-border-color: var(--ds-auro-input-border-color)}`;\n\nvar snowflakeStyleCss = css`:root{--ds-advanced-color-button-flat-text: #676767;--ds-advanced-color-button-flat-text-disabled: #d0d0d0;--ds-advanced-color-button-flat-text-hover: #525252;--ds-advanced-color-button-flat-text-inverse: #ffffff;--ds-advanced-color-button-flat-text-inverse-disabled: #7e8894;--ds-advanced-color-button-flat-text-inverse-hover: #adadad;--ds-advanced-color-button-ghost-background-hover: rgba(0, 0, 0, 0.05);--ds-advanced-color-button-ghost-background-inverse-hover: rgba(255, 255, 255, 0.05);--ds-advanced-color-button-ghost-text: #01426a;--ds-advanced-color-button-ghost-text-disabled: #d0d0d0;--ds-advanced-color-button-ghost-text-inverse: #ffffff;--ds-advanced-color-button-ghost-text-inverse-disabled: #7e8894;--ds-advanced-color-button-primary-background: #01426a;--ds-advanced-color-button-primary-background-disabled: #acc9e2;--ds-advanced-color-button-primary-background-hover: #00274a;--ds-advanced-color-button-primary-background-inactive: #cfe0ef;--ds-advanced-color-button-primary-background-inactive-hover: #89b2d4;--ds-advanced-color-button-primary-background-inverse: #ffffff;--ds-advanced-color-button-primary-background-inverse-disabled: rgba(255, 255, 255, 0.75);--ds-advanced-color-button-primary-background-inverse-hover: #ebf3f9;--ds-advanced-color-button-primary-border: #01426a;--ds-advanced-color-button-primary-border-disabled: #acc9e2;--ds-advanced-color-button-primary-border-hover: #00274a;--ds-advanced-color-button-primary-border-inverse: #ffffff;--ds-advanced-color-button-primary-border-inverse-disabled: rgba(255, 255, 255, 0.75);--ds-advanced-color-button-primary-border-inverse-hover: #ebf3f9;--ds-advanced-color-button-primary-text: #ffffff;--ds-advanced-color-button-primary-text-disabled: #ffffff;--ds-advanced-color-button-primary-text-inverse: #01426a;--ds-advanced-color-button-secondary-background: #ffffff;--ds-advanced-color-button-secondary-background-disabled: #f7f7f7;--ds-advanced-color-button-secondary-background-hover: #f2f2f2;--ds-advanced-color-button-secondary-background-inverse-hover: rgba(255, 255, 255, 0.1);--ds-advanced-color-button-secondary-border: #01426a;--ds-advanced-color-button-secondary-border-hover: #00274a;--ds-advanced-color-button-secondary-border-disabled: #cfe0ef;--ds-advanced-color-button-secondary-border-inverse: #ffffff;--ds-advanced-color-button-secondary-border-inverse-disabled: #dddddd;--ds-advanced-color-button-secondary-text: #01426a;--ds-advanced-color-button-secondary-text-hover: #00274a;--ds-advanced-color-button-secondary-text-inverse: #ffffff;--ds-advanced-color-button-tertiary-background: rgba(0, 0, 0, 0.05);--ds-advanced-color-button-tertiary-background-hover: rgba(0, 0, 0, 0.1);--ds-advanced-color-button-tertiary-background-inverse: rgba(255, 255, 255, 0.05);--ds-advanced-color-button-tertiary-background-inverse-hover: rgba(255, 255, 255, 0.1);--ds-advanced-color-button-tertiary-text: #01426a;--ds-advanced-color-button-tertiary-text-hover: #00274a;--ds-advanced-color-button-tertiary-text-inverse: #ffffff;--ds-advanced-color-accents-accent1: #b2d583;--ds-advanced-color-accents-accent1-bold: #92c450;--ds-advanced-color-accents-accent1-muted: #deedca;--ds-advanced-color-accents-accent2: #fad362;--ds-advanced-color-accents-accent2-bold: #f2ba14;--ds-advanced-color-accents-accent2-muted: #fde398;--ds-advanced-color-accents-accent3: #63beff;--ds-advanced-color-accents-accent3-bold: #0074ca;--ds-advanced-color-accents-accent3-muted: #aedeff;--ds-advanced-color-accents-accent4: #feb17a;--ds-advanced-color-accents-accent4-bold: #fb7f24;--ds-advanced-color-accents-accent4-muted: #ffe2cf;--ds-advanced-color-accents-transparency: rgba(0, 0, 0, 0.1);--ds-advanced-color-accents-transparency-inverse: rgba(255, 255, 255, 0.2);--ds-advanced-color-avatar-gradient-bottom: #cfe0ef;--ds-advanced-color-avatar-gradient-top: #6899c6;--ds-advanced-color-boolean-disabled-inverse: #7e8894;--ds-advanced-color-boolean-error: #e31f26;--ds-advanced-color-boolean-error-hover: #b1161c;--ds-advanced-color-boolean-error-inverse: #f9a4a8;--ds-advanced-color-boolean-error-inverse-hover: #f15f65;--ds-advanced-color-boolean-indicator: #ffffff;--ds-advanced-color-boolean-indicator-inverse: #00274a;--ds-advanced-color-boolean-isfalse: #ffffff;--ds-advanced-color-boolean-isfalse-border: #585e67;--ds-advanced-color-boolean-isfalse-border-inverse: #ffffff;--ds-advanced-color-boolean-isfalse-hover: #f2f2f2;--ds-advanced-color-boolean-isfalse-inverse: rgba(255, 255, 255, 0.15);--ds-advanced-color-boolean-isfalse-inverse-hover: rgba(255, 255, 255, 0.2);--ds-advanced-color-boolean-istrue: #01426a;--ds-advanced-color-boolean-istrue-hover: #00274a;--ds-advanced-color-boolean-istrue-inverse: #ffffff;--ds-advanced-color-boolean-istrue-inverse-hover: rgba(255, 255, 255, 0.7);--ds-advanced-color-flightline-indicator: #00274a;--ds-advanced-color-flightline-line: #00274a;--ds-advanced-color-hyperlink-text: #2875b5;--ds-advanced-color-hyperlink-text-hover: #01426a;--ds-advanced-color-hyperlink-text-inverse: #ffffff;--ds-advanced-color-hyperlink-text-inverse-hover: #ebf3f9;--ds-advanced-color-shared-background: #ffffff;--ds-advanced-color-shared-background-inverse: rgba(255, 255, 255, 0.15);--ds-advanced-color-shared-background-inverse-disabled: rgba(255, 255, 255, 0.1);--ds-advanced-color-shared-background-inverse-hover: rgba(255, 255, 255, 0.2);--ds-advanced-color-shared-background-muted: #f7f7f7;--ds-advanced-color-shared-background-strong: #7e7e7e;--ds-advanced-color-shared-scrim: rgba(0, 0, 0, 0.5);--ds-advanced-color-shared-text-accent: #2875b5;--ds-advanced-color-skeleton-background: #f7f8fa;--ds-advanced-color-skeleton-wave: #e4e8ec;--ds-advanced-color-state-background-disabled: #dddddd;--ds-advanced-color-state-background-hover: #f2f2f2;--ds-advanced-color-state-background-inverse-disabled: #7e8894;--ds-advanced-color-state-error-inverse: #f9a4a8;--ds-advanced-color-state-focused: #01426a;--ds-advanced-color-state-focused-inverse: #ffffff;--ds-advanced-color-state-selected: #01426a;--ds-advanced-color-state-selected-hover: #00274a;--ds-basic-color-border-bold: #585e67;--ds-basic-color-border-brand: #00274a;--ds-basic-color-border-default: #959595;--ds-basic-color-border-divider: rgba(0, 0, 0, 0.15);--ds-basic-color-border-divider-inverse: rgba(255, 255, 255, 0.4);--ds-basic-color-border-inverse: #ffffff;--ds-basic-color-border-subtle: #dddddd;--ds-basic-color-brand-primary: #01426a;--ds-basic-color-brand-primary-bold: #00274a;--ds-basic-color-brand-primary-muted: #ebf3f9;--ds-basic-color-brand-primary-subtle: #2875b5;--ds-basic-color-brand-secondary: #5de3f7;--ds-basic-color-brand-secondary-bold: #18c3dd;--ds-basic-color-brand-secondary-muted: #ebfafd;--ds-basic-color-brand-secondary-subtle: #b4eff9;--ds-basic-color-brand-tertiary: #a3cd6a;--ds-basic-color-brand-tertiary-bold: #7daf3b;--ds-basic-color-brand-tertiary-muted: #eaf3dd;--ds-basic-color-brand-tertiary-subtle: #c9e1a7;--ds-basic-color-fare-basiceconomy: #97eaf8;--ds-basic-color-fare-business: #01426a;--ds-basic-color-fare-economy: #0074ca;--ds-basic-color-fare-first: #00274a;--ds-basic-color-fare-premiumeconomy: #005154;--ds-basic-color-page-background-default: #ebfafd;--ds-basic-color-page-background-utility: #ffffff;--ds-basic-color-status-default: #afb9c6;--ds-basic-color-status-error: #e31f26;--ds-basic-color-status-error-subtle: #fbc6c6;--ds-basic-color-status-info: #01426a;--ds-basic-color-status-info-subtle: #ebf3f9;--ds-basic-color-status-success: #447a1f;--ds-basic-color-status-success-subtle: #d6eac7;--ds-basic-color-status-warning: #fac200;--ds-basic-color-status-warning-subtle: #fff0b2;--ds-basic-color-surface-accent1: #5de3f7;--ds-basic-color-surface-accent1-muted: #ebfafd;--ds-basic-color-surface-accent1-subtle: #b4eff9;--ds-basic-color-surface-accent2: #a3cd6a;--ds-basic-color-surface-accent2-muted: #eaf3dd;--ds-basic-color-surface-default: #ffffff;--ds-basic-color-surface-inverse: #00274a;--ds-basic-color-surface-inverse-subtle: #2875b5;--ds-basic-color-surface-neutral-medium: #c5c5c5;--ds-basic-color-surface-neutral-subtle: #f7f7f7;--ds-basic-color-texticon-accent1: #265688;--ds-basic-color-texticon-default: #2a2a2a;--ds-basic-color-texticon-disabled: #d0d0d0;--ds-basic-color-texticon-inverse: #ffffff;--ds-basic-color-texticon-inverse-disabled: #7e8894;--ds-basic-color-texticon-inverse-muted: #ccd2db;--ds-basic-color-texticon-muted: #676767;--ds-basic-color-tier-program-loungetier-lounge: #01426a;--ds-basic-color-tier-program-loungetier-loungeplus: #53b390;--ds-basic-color-tier-program-loyaltytier-bronze: #d99f6d;--ds-basic-color-tier-program-loyaltytier-bronze-muted: #eed4be;--ds-basic-color-tier-program-loyaltytier-cobalt: #030772;--ds-basic-color-tier-program-loyaltytier-cobalt-muted: #a9b6d6;--ds-basic-color-tier-program-loyaltytier-copper: #cb7457;--ds-basic-color-tier-program-loyaltytier-copper-muted: #e7bfb1;--ds-basic-color-tier-program-loyaltytier-gold: #fbdc7a;--ds-basic-color-tier-program-loyaltytier-gold-muted: #fdefc4;--ds-basic-color-tier-program-loyaltytier-nickel: #abaab1;--ds-basic-color-tier-program-loyaltytier-nickel-muted: #e5e4e7;--ds-basic-color-tier-program-loyaltytier-platinum: #bcb8a4;--ds-basic-color-tier-program-loyaltytier-platinum-muted: #dad8cd;--ds-basic-color-tier-program-loyaltytier-silver: #e4e9ec;--ds-basic-color-tier-program-loyaltytier-silver-muted: #f9fafb;--ds-basic-color-tier-program-loyaltytier-titanium: #282828;--ds-basic-color-tier-program-loyaltytier-titanium-muted: #545454;--ds-basic-color-tier-program-oneworld-emerald: #139142;--ds-basic-color-tier-program-oneworld-ruby: #a41d4a;--ds-basic-color-tier-program-oneworld-sapphire: #015daa;--ds-basic-type-brand-family-primary: \"AS Circular\";--ds-basic-type-brand-family-secondary: \"Good OT\";--ds-basic-type-brand-line-height-primary: 1.3;--ds-basic-type-brand-line-height-secondary: 1;--ds-basic-type-brand-letter-spacing-primary: 0;--ds-basic-type-brand-letter-spacing-secondary: 0.05em;--ds-basic-type-brand-letter-spacing-tertiary: 0.10em;--ds-basic-type-family-accent: \"Good OT\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;--ds-basic-type-family-body: \"AS Circular\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;--ds-basic-type-family-display: \"AS Circular\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;--ds-basic-type-family-heading: \"AS Circular\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;--ds-basic-type-letter-spacing-accent: 0.05em;--ds-basic-type-letter-spacing-accent2: 0.10em;--ds-basic-type-letter-spacing-body: 0;--ds-basic-type-letter-spacing-display: 0;--ds-basic-type-letter-spacing-heading: 0;--ds-basic-type-line-height-accent: 1.3;--ds-basic-type-line-height-accent2: 1;--ds-basic-type-line-height-body: 1.63;--ds-basic-type-line-height-body2: 1.5;--ds-basic-type-line-height-body3: 1.25;--ds-basic-type-line-height-body4: 1;--ds-basic-type-line-height-body5: 0.88;--ds-basic-type-line-height-display: 1.3;--ds-basic-type-line-height-heading: 1.3;--ds-basic-type-weight-accent: 450;--ds-basic-type-weight-accent2: 500;--ds-basic-type-weight-body: 450;--ds-basic-type-weight-display: 300;--ds-basic-type-weight-heading: 300;--ds-basic-type-weight-heading2: 450}:host([layout*=snowflake]) .leftIndent{margin-left:var(--ds-size-150, 0.75rem);width:calc(100% - var(--ds-size-300, 1.5rem))}:host([layout*=snowflake]) .rightIndent{margin-right:var(--ds-size-150, 0.75rem);width:calc(100% - var(--ds-size-300, 1.5rem))}.layout-snowflake{display:flex;flex-direction:row;align-items:center;justify-content:center}.layout-snowflake label{font-size:var(--ds-text-body-size-xs);line-height:20px}.layout-snowflake input{text-align:center;font-size:18px;line-height:26px}.layout-snowflake .mainContent{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;flex:1}.layout-snowflake .displayValue{position:absolute;top:0;right:0;bottom:0;left:0;display:none}.layout-snowflake .displayValue.hasContent:is(.withValue):not(.hasFocus){display:block}.layout-snowflake .displayValueWrapper{transform:translateY(-50%)}.layout-snowflake.withValue{justify-content:flex-start}.layout-snowflake:not(:focus-within):not(:is([validity]:not([validity=valid]))){--ds-auro-input-border-color: transparent}.layout-snowflake:focus-within{justify-content:flex-start}.layout-snowflake:focus-within .alertNotification{display:none}.layout-snowflake .accents{width:var(--ds-size-150, 0.75rem)}.layout-snowflake .accents.left{padding-left:var(--ds-size-150, 0.75rem)}.layout-snowflake .accents.right{padding-right:var(--ds-size-150, 0.75rem)}:host([layout*=snowflake]) .helpTextWrapper{text-align:center}`;\n\nconst watchedItems = new Set();\n\n\n/**\n * Function for setting the value of the lang attribute.\n * @private\n * @param {object} item - Individual DOM node from set of watchedItems.\n * @param {string} lang - Current language set for the document.\n */\nfunction setLang(item, lang) {\n\n  /**\n   * It is desired that if the lang is `en` to maintain `undefined` as not to\n   * add the `lang` attribute to the individual element.\n   */\n  item.lang = lang === 'en' ? undefined : lang;\n}\n\n/**\n * Change handler for MutationObserver() callback.\n * @private\n * @param {MutationRecord[]} mutationList - Observed list of mutations.\n */\nfunction handleChange(mutationList) {\n  const [mutation] = mutationList;\n  const lang = mutation.target.getAttribute('lang');\n  watchedItems.forEach((item) => {\n    setLang(item, lang);\n  });\n}\n\nif (typeof window !== \"undefined\") {\n  if (window.MutationObserver) {\n    const observer = new MutationObserver(handleChange);\n    observer.observe(document.documentElement, { attributes: true,\n      attributeFilter: ['lang'] });\n  }\n}\n\nconst stringsES = {\n  'optional': 'opcional',\n  'validCard': 'Por favor, introduzca un número de tarjeta de crédito válido.',\n  'email': 'Introduzca una dirección de correo electrónico válida (nombre@dominio.com).',\n  'password': `Las contraseñas válidas deben constar de al menos 8 caracteres, incluyendo al menos una letra mayúscula, una letra minúscula y un número.`,\n  'credit-card': 'Por favor, introduzca un número de tarjeta de crédito válido.',\n  'tel': 'Por favor, introduzca un número de teléfono válido.',\n  'dateYYYY': 'Ingrese una fecha completa en el formato AAAA',\n  'dateYYYYMM': 'Ingrese una fecha completa en el formato AAAA/MM',\n  'dateYYYYMMDD': 'Ingrese una fecha completa en el formato AAAA/MM/DD',\n  'dateYYYYDDMM': 'Ingrese una fecha completa en el formato AAAA/DD/MM',\n  'dateMMYYYY': 'Ingrese una fecha completa en el formato MM/AAAA',\n  'dateMMYY': 'Ingrese una fecha completa en el formato MM/AA',\n  'dateMMDDYYYY': 'Ingrese una fecha completa en el formato MM/DD/AAAA',\n  'dateDDMMYYYY': 'Ingrese una fecha completa en el formato DD/MM/AAAA',\n  'dateDDMM': 'Ingrese una fecha completa en el formato DD/MM',\n  'dateMMDD': 'Ingrese una fecha completa en el formato MM/DD',\n  'dateYYMM': 'Ingrese una fecha completa en el formato AA/MM',\n  'dateYY': 'Ingrese una fecha completa en el formato AA',\n  'dateMM': 'Ingrese una fecha completa en el formato MM',\n  'dateDD': 'Ingrese una fecha completa en el formato DD',\n  'clearInput': 'Borrar campo de entrada',\n  'showPassword': 'Mostrar contraseña',\n  'hidePassword': 'Ocultar contraseña'\n};\n\nconst stringsEN = {\n  'optional': 'optional',\n  'validCard': 'Please enter a valid credit card number.',\n  'email': 'Please enter a valid email address (name@domain.com).',\n  'password': 'Valid passwords must consist of at least 8 characters, including at least one uppercase letter, one lowercase letter, and one number.',\n  'credit-card': 'Please enter a valid credit card number.',\n  'tel': 'Please enter a valid phone number.',\n  'dateYYYY': 'Please enter a complete date in the format YYYY',\n  'dateYYYYMM': 'Please enter a complete date in the format YYYY/MM',\n  'dateYYYYMMDD': 'Please enter a complete date in the format YYYY/MM/DD',\n  'dateYYYYDDMM': 'Please enter a complete date in the format YYYY/DD/MM',\n  'dateMMYYYY': 'Please enter a complete date in the format MM/YYYY',\n  'dateMMYY': 'Please enter a complete date in the format MM/YY',\n  'dateMMDDYYYY': 'Please enter a complete date in the format MM/DD/YYYY',\n  'dateDDMMYYYY': 'Please enter a complete date in the format DD/MM/YYYY',\n  'dateDDMM': 'Please enter a complete date in the format DD/MM',\n  'dateMMDD': 'Please enter a complete date in the format MM/DD',\n  'dateYYMM': 'Please enter a complete date in the format YY/MM',\n  'dateYY': 'Please enter a complete date in the format YY',\n  'dateMM': 'Please enter a complete date in the format MM',\n  'dateDD': 'Please enter a complete date in the format DD',\n  'clearInput': 'Clear input field',\n  'showPassword': 'Show password',\n  'hidePassword': 'Hide password'\n};\n\n/**\n * Function to support the selected of a string in the set lang.\n * @param {string} lang - Requested lang for content return.\n * @param {string} requestedString - String requested in context.\n * @private\n * @returns {string} Value of string request.\n */\nfunction i18n(lang, requestedString) {\n  if (lang === 'es') {\n    return stringsES[requestedString];\n  }\n\n  return stringsEN[requestedString];\n}\n\n/**\n * @private\n * @param {object} element - Pass in the scope of the element in use.\n */\nfunction notifyOnLangChange(element) {\n  if (!element.lang) {\n    setLang(element, document.documentElement.lang);\n  }\n  watchedItems.add(element);\n}\n\n/**\n * @private\n * @param {object} element - Pass in the scope of the element in use.\n */\nfunction stopNotifyingOnLangChange(element) {\n  watchedItems.delete(element);\n}\n\n/** Checks if value is string */\nfunction isString(str) {\n  return typeof str === 'string' || str instanceof String;\n}\n\n/** Checks if value is object */\nfunction isObject(obj) {\n  var _obj$constructor;\n  return typeof obj === 'object' && obj != null && (obj == null || (_obj$constructor = obj.constructor) == null ? void 0 : _obj$constructor.name) === 'Object';\n}\nfunction pick(obj, keys) {\n  if (Array.isArray(keys)) return pick(obj, (_, k) => keys.includes(k));\n  return Object.entries(obj).reduce((acc, _ref) => {\n    let [k, v] = _ref;\n    if (keys(v, k)) acc[k] = v;\n    return acc;\n  }, {});\n}\n\n/** Direction */\nconst DIRECTION = {\n  NONE: 'NONE',\n  LEFT: 'LEFT',\n  FORCE_LEFT: 'FORCE_LEFT',\n  RIGHT: 'RIGHT',\n  FORCE_RIGHT: 'FORCE_RIGHT'\n};\n\n/** Direction */\n\nfunction forceDirection(direction) {\n  switch (direction) {\n    case DIRECTION.LEFT:\n      return DIRECTION.FORCE_LEFT;\n    case DIRECTION.RIGHT:\n      return DIRECTION.FORCE_RIGHT;\n    default:\n      return direction;\n  }\n}\n\n/** Escapes regular expression control chars */\nfunction escapeRegExp(str) {\n  return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n}\n\n// cloned from https://github.com/epoberezkin/fast-deep-equal with small changes\nfunction objectIncludes(b, a) {\n  if (a === b) return true;\n  const arrA = Array.isArray(a),\n    arrB = Array.isArray(b);\n  let i;\n  if (arrA && arrB) {\n    if (a.length != b.length) return false;\n    for (i = 0; i < a.length; i++) if (!objectIncludes(a[i], b[i])) return false;\n    return true;\n  }\n  if (arrA != arrB) return false;\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    const dateA = a instanceof Date,\n      dateB = b instanceof Date;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n    if (dateA != dateB) return false;\n    const regexpA = a instanceof RegExp,\n      regexpB = b instanceof RegExp;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n    if (regexpA != regexpB) return false;\n    const keys = Object.keys(a);\n    // if (keys.length !== Object.keys(b).length) return false;\n\n    for (i = 0; i < keys.length; i++) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    for (i = 0; i < keys.length; i++) if (!objectIncludes(b[keys[i]], a[keys[i]])) return false;\n    return true;\n  } else if (a && b && typeof a === 'function' && typeof b === 'function') {\n    return a.toString() === b.toString();\n  }\n  return false;\n}\n\n/** Provides details of changing input */\nclass ActionDetails {\n  /** Current input value */\n\n  /** Current cursor position */\n\n  /** Old input value */\n\n  /** Old selection */\n\n  constructor(opts) {\n    Object.assign(this, opts);\n\n    // double check if left part was changed (autofilling, other non-standard input triggers)\n    while (this.value.slice(0, this.startChangePos) !== this.oldValue.slice(0, this.startChangePos)) {\n      --this.oldSelection.start;\n    }\n    if (this.insertedCount) {\n      // double check right part\n      while (this.value.slice(this.cursorPos) !== this.oldValue.slice(this.oldSelection.end)) {\n        if (this.value.length - this.cursorPos < this.oldValue.length - this.oldSelection.end) ++this.oldSelection.end;else ++this.cursorPos;\n      }\n    }\n  }\n\n  /** Start changing position */\n  get startChangePos() {\n    return Math.min(this.cursorPos, this.oldSelection.start);\n  }\n\n  /** Inserted symbols count */\n  get insertedCount() {\n    return this.cursorPos - this.startChangePos;\n  }\n\n  /** Inserted symbols */\n  get inserted() {\n    return this.value.substr(this.startChangePos, this.insertedCount);\n  }\n\n  /** Removed symbols count */\n  get removedCount() {\n    // Math.max for opposite operation\n    return Math.max(this.oldSelection.end - this.startChangePos ||\n    // for Delete\n    this.oldValue.length - this.value.length, 0);\n  }\n\n  /** Removed symbols */\n  get removed() {\n    return this.oldValue.substr(this.startChangePos, this.removedCount);\n  }\n\n  /** Unchanged head symbols */\n  get head() {\n    return this.value.substring(0, this.startChangePos);\n  }\n\n  /** Unchanged tail symbols */\n  get tail() {\n    return this.value.substring(this.startChangePos + this.insertedCount);\n  }\n\n  /** Remove direction */\n  get removeDirection() {\n    if (!this.removedCount || this.insertedCount) return DIRECTION.NONE;\n\n    // align right if delete at right\n    return (this.oldSelection.end === this.cursorPos || this.oldSelection.start === this.cursorPos) &&\n    // if not range removed (event with backspace)\n    this.oldSelection.end === this.oldSelection.start ? DIRECTION.RIGHT : DIRECTION.LEFT;\n  }\n}\n\n/** Applies mask on element */\nfunction IMask(el, opts) {\n  // currently available only for input-like elements\n  return new IMask.InputMask(el, opts);\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n// export function maskedClass(mask: string): typeof MaskedPattern;\n// export function maskedClass(mask: DateConstructor): typeof MaskedDate;\n// export function maskedClass(mask: NumberConstructor): typeof MaskedNumber;\n// export function maskedClass(mask: Array<any> | ArrayConstructor): typeof MaskedDynamic;\n// export function maskedClass(mask: MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass(mask: Masked): typeof Masked;\n// export function maskedClass(mask: typeof Masked): typeof Masked;\n// export function maskedClass(mask: typeof MaskedDate): typeof MaskedDate;\n// export function maskedClass(mask: typeof MaskedNumber): typeof MaskedNumber;\n// export function maskedClass(mask: typeof MaskedEnum): typeof MaskedEnum;\n// export function maskedClass(mask: typeof MaskedRange): typeof MaskedRange;\n// export function maskedClass(mask: typeof MaskedRegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: typeof MaskedFunction): typeof MaskedFunction;\n// export function maskedClass(mask: typeof MaskedPattern): typeof MaskedPattern;\n// export function maskedClass(mask: typeof MaskedDynamic): typeof MaskedDynamic;\n// export function maskedClass<Mask extends typeof Masked> (mask: Mask): Mask;\n// export function maskedClass(mask: RegExp): typeof MaskedRegExp;\n// export function maskedClass(mask: (value: string, ...args: any[]) => boolean): typeof MaskedFunction;\n\n/** Get Masked class by mask type */\nfunction maskedClass(mask) /* TODO */{\n  if (mask == null) throw new Error('mask property should be defined');\n  if (mask instanceof RegExp) return IMask.MaskedRegExp;\n  if (isString(mask)) return IMask.MaskedPattern;\n  if (mask === Date) return IMask.MaskedDate;\n  if (mask === Number) return IMask.MaskedNumber;\n  if (Array.isArray(mask) || mask === Array) return IMask.MaskedDynamic;\n  if (IMask.Masked && mask.prototype instanceof IMask.Masked) return mask;\n  if (IMask.Masked && mask instanceof IMask.Masked) return mask.constructor;\n  if (mask instanceof Function) return IMask.MaskedFunction;\n  console.warn('Mask not found for mask', mask); // eslint-disable-line no-console\n  return IMask.Masked;\n}\nfunction normalizeOpts(opts) {\n  if (!opts) throw new Error('Options in not defined');\n  if (IMask.Masked) {\n    if (opts.prototype instanceof IMask.Masked) return {\n      mask: opts\n    };\n\n    /*\n      handle cases like:\n      1) opts = Masked\n      2) opts = { mask: Masked, ...instanceOpts }\n    */\n    const {\n      mask = undefined,\n      ...instanceOpts\n    } = opts instanceof IMask.Masked ? {\n      mask: opts\n    } : isObject(opts) && opts.mask instanceof IMask.Masked ? opts : {};\n    if (mask) {\n      const _mask = mask.mask;\n      return {\n        ...pick(mask, (_, k) => !k.startsWith('_')),\n        mask: mask.constructor,\n        _mask,\n        ...instanceOpts\n      };\n    }\n  }\n  if (!isObject(opts)) return {\n    mask: opts\n  };\n  return {\n    ...opts\n  };\n}\n\n// TODO can't use overloads here because of https://github.com/microsoft/TypeScript/issues/50754\n\n// From masked\n// export default function createMask<Opts extends Masked, ReturnMasked=Opts> (opts: Opts): ReturnMasked;\n// // From masked class\n// export default function createMask<Opts extends MaskedOptions<typeof Masked>, ReturnMasked extends Masked=InstanceType<Opts['mask']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDate>, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedNumber>, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedEnum>, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRange>, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedRegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedFunction>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedPattern>, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<typeof MaskedDynamic>, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// // From mask opts\n// export default function createMask<Opts extends MaskedOptions<Masked>, ReturnMasked=Opts extends MaskedOptions<infer M> ? M : never> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedNumberOptions, ReturnMasked extends MaskedNumber=MaskedNumber<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDateFactoryOptions, ReturnMasked extends MaskedDate=MaskedDate<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedEnumOptions, ReturnMasked extends MaskedEnum=MaskedEnum<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedRangeOptions, ReturnMasked extends MaskedRange=MaskedRange<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedPatternOptions, ReturnMasked extends MaskedPattern=MaskedPattern<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedDynamicOptions, ReturnMasked extends MaskedDynamic=MaskedDynamic<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<RegExp>, ReturnMasked extends MaskedRegExp=MaskedRegExp<Opts['parent']>> (opts: Opts): ReturnMasked;\n// export default function createMask<Opts extends MaskedOptions<Function>, ReturnMasked extends MaskedFunction=MaskedFunction<Opts['parent']>> (opts: Opts): ReturnMasked;\n\n/** Creates new {@link Masked} depending on mask type */\nfunction createMask(opts) {\n  if (IMask.Masked && opts instanceof IMask.Masked) return opts;\n  const nOpts = normalizeOpts(opts);\n  const MaskedClass = maskedClass(nOpts.mask);\n  if (!MaskedClass) throw new Error(\"Masked class is not found for provided mask \" + nOpts.mask + \", appropriate module needs to be imported manually before creating mask.\");\n  if (nOpts.mask === MaskedClass) delete nOpts.mask;\n  if (nOpts._mask) {\n    nOpts.mask = nOpts._mask;\n    delete nOpts._mask;\n  }\n  return new MaskedClass(nOpts);\n}\nIMask.createMask = createMask;\n\n/**  Generic element API to use with mask */\nclass MaskElement {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** Safely returns selection start */\n  get selectionStart() {\n    let start;\n    try {\n      start = this._unsafeSelectionStart;\n    } catch {}\n    return start != null ? start : this.value.length;\n  }\n\n  /** Safely returns selection end */\n  get selectionEnd() {\n    let end;\n    try {\n      end = this._unsafeSelectionEnd;\n    } catch {}\n    return end != null ? end : this.value.length;\n  }\n\n  /** Safely sets element selection */\n  select(start, end) {\n    if (start == null || end == null || start === this.selectionStart && end === this.selectionEnd) return;\n    try {\n      this._unsafeSelect(start, end);\n    } catch {}\n  }\n\n  /** */\n  get isActive() {\n    return false;\n  }\n  /** */\n\n  /** */\n\n  /** */\n}\nIMask.MaskElement = MaskElement;\n\nconst KEY_Z = 90;\nconst KEY_Y = 89;\n\n/** Bridge between HTMLElement and {@link Masked} */\nclass HTMLMaskElement extends MaskElement {\n  /** HTMLElement to use mask on */\n\n  constructor(input) {\n    super();\n    this.input = input;\n    this._onKeydown = this._onKeydown.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onBeforeinput = this._onBeforeinput.bind(this);\n    this._onCompositionEnd = this._onCompositionEnd.bind(this);\n  }\n  get rootElement() {\n    var _this$input$getRootNo, _this$input$getRootNo2, _this$input;\n    return (_this$input$getRootNo = (_this$input$getRootNo2 = (_this$input = this.input).getRootNode) == null ? void 0 : _this$input$getRootNo2.call(_this$input)) != null ? _this$input$getRootNo : document;\n  }\n\n  /** Is element in focus */\n  get isActive() {\n    return this.input === this.rootElement.activeElement;\n  }\n\n  /** Binds HTMLElement events to mask internal events */\n  bindEvents(handlers) {\n    this.input.addEventListener('keydown', this._onKeydown);\n    this.input.addEventListener('input', this._onInput);\n    this.input.addEventListener('beforeinput', this._onBeforeinput);\n    this.input.addEventListener('compositionend', this._onCompositionEnd);\n    this.input.addEventListener('drop', handlers.drop);\n    this.input.addEventListener('click', handlers.click);\n    this.input.addEventListener('focus', handlers.focus);\n    this.input.addEventListener('blur', handlers.commit);\n    this._handlers = handlers;\n  }\n  _onKeydown(e) {\n    if (this._handlers.redo && (e.keyCode === KEY_Z && e.shiftKey && (e.metaKey || e.ctrlKey) || e.keyCode === KEY_Y && e.ctrlKey)) {\n      e.preventDefault();\n      return this._handlers.redo(e);\n    }\n    if (this._handlers.undo && e.keyCode === KEY_Z && (e.metaKey || e.ctrlKey)) {\n      e.preventDefault();\n      return this._handlers.undo(e);\n    }\n    if (!e.isComposing) this._handlers.selectionChange(e);\n  }\n  _onBeforeinput(e) {\n    if (e.inputType === 'historyUndo' && this._handlers.undo) {\n      e.preventDefault();\n      return this._handlers.undo(e);\n    }\n    if (e.inputType === 'historyRedo' && this._handlers.redo) {\n      e.preventDefault();\n      return this._handlers.redo(e);\n    }\n  }\n  _onCompositionEnd(e) {\n    this._handlers.input(e);\n  }\n  _onInput(e) {\n    if (!e.isComposing) this._handlers.input(e);\n  }\n\n  /** Unbinds HTMLElement events to mask internal events */\n  unbindEvents() {\n    this.input.removeEventListener('keydown', this._onKeydown);\n    this.input.removeEventListener('input', this._onInput);\n    this.input.removeEventListener('beforeinput', this._onBeforeinput);\n    this.input.removeEventListener('compositionend', this._onCompositionEnd);\n    this.input.removeEventListener('drop', this._handlers.drop);\n    this.input.removeEventListener('click', this._handlers.click);\n    this.input.removeEventListener('focus', this._handlers.focus);\n    this.input.removeEventListener('blur', this._handlers.commit);\n    this._handlers = {};\n  }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\n/** Bridge between InputElement and {@link Masked} */\nclass HTMLInputMaskElement extends HTMLMaskElement {\n  /** InputElement to use mask on */\n\n  constructor(input) {\n    super(input);\n    this.input = input;\n  }\n\n  /** Returns InputElement selection start */\n  get _unsafeSelectionStart() {\n    return this.input.selectionStart != null ? this.input.selectionStart : this.value.length;\n  }\n\n  /** Returns InputElement selection end */\n  get _unsafeSelectionEnd() {\n    return this.input.selectionEnd;\n  }\n\n  /** Sets InputElement selection */\n  _unsafeSelect(start, end) {\n    this.input.setSelectionRange(start, end);\n  }\n  get value() {\n    return this.input.value;\n  }\n  set value(value) {\n    this.input.value = value;\n  }\n}\nIMask.HTMLMaskElement = HTMLMaskElement;\n\nclass HTMLContenteditableMaskElement extends HTMLMaskElement {\n  /** Returns HTMLElement selection start */\n  get _unsafeSelectionStart() {\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    const anchorOffset = selection && selection.anchorOffset;\n    const focusOffset = selection && selection.focusOffset;\n    if (focusOffset == null || anchorOffset == null || anchorOffset < focusOffset) {\n      return anchorOffset;\n    }\n    return focusOffset;\n  }\n\n  /** Returns HTMLElement selection end */\n  get _unsafeSelectionEnd() {\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    const anchorOffset = selection && selection.anchorOffset;\n    const focusOffset = selection && selection.focusOffset;\n    if (focusOffset == null || anchorOffset == null || anchorOffset > focusOffset) {\n      return anchorOffset;\n    }\n    return focusOffset;\n  }\n\n  /** Sets HTMLElement selection */\n  _unsafeSelect(start, end) {\n    if (!this.rootElement.createRange) return;\n    const range = this.rootElement.createRange();\n    range.setStart(this.input.firstChild || this.input, start);\n    range.setEnd(this.input.lastChild || this.input, end);\n    const root = this.rootElement;\n    const selection = root.getSelection && root.getSelection();\n    if (selection) {\n      selection.removeAllRanges();\n      selection.addRange(range);\n    }\n  }\n\n  /** HTMLElement value */\n  get value() {\n    return this.input.textContent || '';\n  }\n  set value(value) {\n    this.input.textContent = value;\n  }\n}\nIMask.HTMLContenteditableMaskElement = HTMLContenteditableMaskElement;\n\nclass InputHistory {\n  constructor() {\n    this.states = [];\n    this.currentIndex = 0;\n  }\n  get currentState() {\n    return this.states[this.currentIndex];\n  }\n  get isEmpty() {\n    return this.states.length === 0;\n  }\n  push(state) {\n    // if current index points before the last element then remove the future\n    if (this.currentIndex < this.states.length - 1) this.states.length = this.currentIndex + 1;\n    this.states.push(state);\n    if (this.states.length > InputHistory.MAX_LENGTH) this.states.shift();\n    this.currentIndex = this.states.length - 1;\n  }\n  go(steps) {\n    this.currentIndex = Math.min(Math.max(this.currentIndex + steps, 0), this.states.length - 1);\n    return this.currentState;\n  }\n  undo() {\n    return this.go(-1);\n  }\n  redo() {\n    return this.go(1);\n  }\n  clear() {\n    this.states.length = 0;\n    this.currentIndex = 0;\n  }\n}\nInputHistory.MAX_LENGTH = 100;\n\n/** Listens to element events and controls changes between element and {@link Masked} */\nclass InputMask {\n  /**\n    View element\n  */\n\n  /** Internal {@link Masked} model */\n\n  constructor(el, opts) {\n    this.el = el instanceof MaskElement ? el : el.isContentEditable && el.tagName !== 'INPUT' && el.tagName !== 'TEXTAREA' ? new HTMLContenteditableMaskElement(el) : new HTMLInputMaskElement(el);\n    this.masked = createMask(opts);\n    this._listeners = {};\n    this._value = '';\n    this._unmaskedValue = '';\n    this._rawInputValue = '';\n    this.history = new InputHistory();\n    this._saveSelection = this._saveSelection.bind(this);\n    this._onInput = this._onInput.bind(this);\n    this._onChange = this._onChange.bind(this);\n    this._onDrop = this._onDrop.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onClick = this._onClick.bind(this);\n    this._onUndo = this._onUndo.bind(this);\n    this._onRedo = this._onRedo.bind(this);\n    this.alignCursor = this.alignCursor.bind(this);\n    this.alignCursorFriendly = this.alignCursorFriendly.bind(this);\n    this._bindEvents();\n\n    // refresh\n    this.updateValue();\n    this._onChange();\n  }\n  maskEquals(mask) {\n    var _this$masked;\n    return mask == null || ((_this$masked = this.masked) == null ? void 0 : _this$masked.maskEquals(mask));\n  }\n\n  /** Masked */\n  get mask() {\n    return this.masked.mask;\n  }\n  set mask(mask) {\n    if (this.maskEquals(mask)) return;\n    if (!(mask instanceof IMask.Masked) && this.masked.constructor === maskedClass(mask)) {\n      // TODO \"any\" no idea\n      this.masked.updateOptions({\n        mask\n      });\n      return;\n    }\n    const masked = mask instanceof IMask.Masked ? mask : createMask({\n      mask\n    });\n    masked.unmaskedValue = this.masked.unmaskedValue;\n    this.masked = masked;\n  }\n\n  /** Raw value */\n  get value() {\n    return this._value;\n  }\n  set value(str) {\n    if (this.value === str) return;\n    this.masked.value = str;\n    this.updateControl('auto');\n  }\n\n  /** Unmasked value */\n  get unmaskedValue() {\n    return this._unmaskedValue;\n  }\n  set unmaskedValue(str) {\n    if (this.unmaskedValue === str) return;\n    this.masked.unmaskedValue = str;\n    this.updateControl('auto');\n  }\n\n  /** Raw input value */\n  get rawInputValue() {\n    return this._rawInputValue;\n  }\n  set rawInputValue(str) {\n    if (this.rawInputValue === str) return;\n    this.masked.rawInputValue = str;\n    this.updateControl();\n    this.alignCursor();\n  }\n\n  /** Typed unmasked value */\n  get typedValue() {\n    return this.masked.typedValue;\n  }\n  set typedValue(val) {\n    if (this.masked.typedValueEquals(val)) return;\n    this.masked.typedValue = val;\n    this.updateControl('auto');\n  }\n\n  /** Display value */\n  get displayValue() {\n    return this.masked.displayValue;\n  }\n\n  /** Starts listening to element events */\n  _bindEvents() {\n    this.el.bindEvents({\n      selectionChange: this._saveSelection,\n      input: this._onInput,\n      drop: this._onDrop,\n      click: this._onClick,\n      focus: this._onFocus,\n      commit: this._onChange,\n      undo: this._onUndo,\n      redo: this._onRedo\n    });\n  }\n\n  /** Stops listening to element events */\n  _unbindEvents() {\n    if (this.el) this.el.unbindEvents();\n  }\n\n  /** Fires custom event */\n  _fireEvent(ev, e) {\n    const listeners = this._listeners[ev];\n    if (!listeners) return;\n    listeners.forEach(l => l(e));\n  }\n\n  /** Current selection start */\n  get selectionStart() {\n    return this._cursorChanging ? this._changingCursorPos : this.el.selectionStart;\n  }\n\n  /** Current cursor position */\n  get cursorPos() {\n    return this._cursorChanging ? this._changingCursorPos : this.el.selectionEnd;\n  }\n  set cursorPos(pos) {\n    if (!this.el || !this.el.isActive) return;\n    this.el.select(pos, pos);\n    this._saveSelection();\n  }\n\n  /** Stores current selection */\n  _saveSelection( /* ev */\n  ) {\n    if (this.displayValue !== this.el.value) {\n      console.warn('Element value was changed outside of mask. Syncronize mask using `mask.updateValue()` to work properly.'); // eslint-disable-line no-console\n    }\n    this._selection = {\n      start: this.selectionStart,\n      end: this.cursorPos\n    };\n  }\n\n  /** Syncronizes model value from view */\n  updateValue() {\n    this.masked.value = this.el.value;\n    this._value = this.masked.value;\n    this._unmaskedValue = this.masked.unmaskedValue;\n    this._rawInputValue = this.masked.rawInputValue;\n  }\n\n  /** Syncronizes view from model value, fires change events */\n  updateControl(cursorPos) {\n    const newUnmaskedValue = this.masked.unmaskedValue;\n    const newValue = this.masked.value;\n    const newRawInputValue = this.masked.rawInputValue;\n    const newDisplayValue = this.displayValue;\n    const isChanged = this.unmaskedValue !== newUnmaskedValue || this.value !== newValue || this._rawInputValue !== newRawInputValue;\n    this._unmaskedValue = newUnmaskedValue;\n    this._value = newValue;\n    this._rawInputValue = newRawInputValue;\n    if (this.el.value !== newDisplayValue) this.el.value = newDisplayValue;\n    if (cursorPos === 'auto') this.alignCursor();else if (cursorPos != null) this.cursorPos = cursorPos;\n    if (isChanged) this._fireChangeEvents();\n    if (!this._historyChanging && (isChanged || this.history.isEmpty)) this.history.push({\n      unmaskedValue: newUnmaskedValue,\n      selection: {\n        start: this.selectionStart,\n        end: this.cursorPos\n      }\n    });\n  }\n\n  /** Updates options with deep equal check, recreates {@link Masked} model if mask type changes */\n  updateOptions(opts) {\n    const {\n      mask,\n      ...restOpts\n    } = opts; // TODO types, yes, mask is optional\n\n    const updateMask = !this.maskEquals(mask);\n    const updateOpts = this.masked.optionsIsChanged(restOpts);\n    if (updateMask) this.mask = mask;\n    if (updateOpts) this.masked.updateOptions(restOpts); // TODO\n\n    if (updateMask || updateOpts) this.updateControl();\n  }\n\n  /** Updates cursor */\n  updateCursor(cursorPos) {\n    if (cursorPos == null) return;\n    this.cursorPos = cursorPos;\n\n    // also queue change cursor for mobile browsers\n    this._delayUpdateCursor(cursorPos);\n  }\n\n  /** Delays cursor update to support mobile browsers */\n  _delayUpdateCursor(cursorPos) {\n    this._abortUpdateCursor();\n    this._changingCursorPos = cursorPos;\n    this._cursorChanging = setTimeout(() => {\n      if (!this.el) return; // if was destroyed\n      this.cursorPos = this._changingCursorPos;\n      this._abortUpdateCursor();\n    }, 10);\n  }\n\n  /** Fires custom events */\n  _fireChangeEvents() {\n    this._fireEvent('accept', this._inputEvent);\n    if (this.masked.isComplete) this._fireEvent('complete', this._inputEvent);\n  }\n\n  /** Aborts delayed cursor update */\n  _abortUpdateCursor() {\n    if (this._cursorChanging) {\n      clearTimeout(this._cursorChanging);\n      delete this._cursorChanging;\n    }\n  }\n\n  /** Aligns cursor to nearest available position */\n  alignCursor() {\n    this.cursorPos = this.masked.nearestInputPos(this.masked.nearestInputPos(this.cursorPos, DIRECTION.LEFT));\n  }\n\n  /** Aligns cursor only if selection is empty */\n  alignCursorFriendly() {\n    if (this.selectionStart !== this.cursorPos) return; // skip if range is selected\n    this.alignCursor();\n  }\n\n  /** Adds listener on custom event */\n  on(ev, handler) {\n    if (!this._listeners[ev]) this._listeners[ev] = [];\n    this._listeners[ev].push(handler);\n    return this;\n  }\n\n  /** Removes custom event listener */\n  off(ev, handler) {\n    if (!this._listeners[ev]) return this;\n    if (!handler) {\n      delete this._listeners[ev];\n      return this;\n    }\n    const hIndex = this._listeners[ev].indexOf(handler);\n    if (hIndex >= 0) this._listeners[ev].splice(hIndex, 1);\n    return this;\n  }\n\n  /** Handles view input event */\n  _onInput(e) {\n    this._inputEvent = e;\n    this._abortUpdateCursor();\n    const details = new ActionDetails({\n      // new state\n      value: this.el.value,\n      cursorPos: this.cursorPos,\n      // old state\n      oldValue: this.displayValue,\n      oldSelection: this._selection\n    });\n    const oldRawValue = this.masked.rawInputValue;\n    const offset = this.masked.splice(details.startChangePos, details.removed.length, details.inserted, details.removeDirection, {\n      input: true,\n      raw: true\n    }).offset;\n\n    // force align in remove direction only if no input chars were removed\n    // otherwise we still need to align with NONE (to get out from fixed symbols for instance)\n    const removeDirection = oldRawValue === this.masked.rawInputValue ? details.removeDirection : DIRECTION.NONE;\n    let cursorPos = this.masked.nearestInputPos(details.startChangePos + offset, removeDirection);\n    if (removeDirection !== DIRECTION.NONE) cursorPos = this.masked.nearestInputPos(cursorPos, DIRECTION.NONE);\n    this.updateControl(cursorPos);\n    delete this._inputEvent;\n  }\n\n  /** Handles view change event and commits model value */\n  _onChange() {\n    if (this.displayValue !== this.el.value) this.updateValue();\n    this.masked.doCommit();\n    this.updateControl();\n    this._saveSelection();\n  }\n\n  /** Handles view drop event, prevents by default */\n  _onDrop(ev) {\n    ev.preventDefault();\n    ev.stopPropagation();\n  }\n\n  /** Restore last selection on focus */\n  _onFocus(ev) {\n    this.alignCursorFriendly();\n  }\n\n  /** Restore last selection on focus */\n  _onClick(ev) {\n    this.alignCursorFriendly();\n  }\n  _onUndo() {\n    this._applyHistoryState(this.history.undo());\n  }\n  _onRedo() {\n    this._applyHistoryState(this.history.redo());\n  }\n  _applyHistoryState(state) {\n    if (!state) return;\n    this._historyChanging = true;\n    this.unmaskedValue = state.unmaskedValue;\n    this.el.select(state.selection.start, state.selection.end);\n    this._saveSelection();\n    this._historyChanging = false;\n  }\n\n  /** Unbind view events and removes element reference */\n  destroy() {\n    this._unbindEvents();\n    this._listeners.length = 0;\n    delete this.el;\n  }\n}\nIMask.InputMask = InputMask;\n\n/** Provides details of changing model value */\nclass ChangeDetails {\n  /** Inserted symbols */\n\n  /** Additional offset if any changes occurred before tail */\n\n  /** Raw inserted is used by dynamic mask */\n\n  /** Can skip chars */\n\n  static normalize(prep) {\n    return Array.isArray(prep) ? prep : [prep, new ChangeDetails()];\n  }\n  constructor(details) {\n    Object.assign(this, {\n      inserted: '',\n      rawInserted: '',\n      tailShift: 0,\n      skip: false\n    }, details);\n  }\n\n  /** Aggregate changes */\n  aggregate(details) {\n    this.inserted += details.inserted;\n    this.rawInserted += details.rawInserted;\n    this.tailShift += details.tailShift;\n    this.skip = this.skip || details.skip;\n    return this;\n  }\n\n  /** Total offset considering all changes */\n  get offset() {\n    return this.tailShift + this.inserted.length;\n  }\n  get consumed() {\n    return Boolean(this.rawInserted) || this.skip;\n  }\n  equals(details) {\n    return this.inserted === details.inserted && this.tailShift === details.tailShift && this.rawInserted === details.rawInserted && this.skip === details.skip;\n  }\n}\nIMask.ChangeDetails = ChangeDetails;\n\n/** Provides details of continuous extracted tail */\nclass ContinuousTailDetails {\n  /** Tail value as string */\n\n  /** Tail start position */\n\n  /** Start position */\n\n  constructor(value, from, stop) {\n    if (value === void 0) {\n      value = '';\n    }\n    if (from === void 0) {\n      from = 0;\n    }\n    this.value = value;\n    this.from = from;\n    this.stop = stop;\n  }\n  toString() {\n    return this.value;\n  }\n  extend(tail) {\n    this.value += String(tail);\n  }\n  appendTo(masked) {\n    return masked.append(this.toString(), {\n      tail: true\n    }).aggregate(masked._appendPlaceholder());\n  }\n  get state() {\n    return {\n      value: this.value,\n      from: this.from,\n      stop: this.stop\n    };\n  }\n  set state(state) {\n    Object.assign(this, state);\n  }\n  unshift(beforePos) {\n    if (!this.value.length || beforePos != null && this.from >= beforePos) return '';\n    const shiftChar = this.value[0];\n    this.value = this.value.slice(1);\n    return shiftChar;\n  }\n  shift() {\n    if (!this.value.length) return '';\n    const shiftChar = this.value[this.value.length - 1];\n    this.value = this.value.slice(0, -1);\n    return shiftChar;\n  }\n}\n\n/** Append flags */\n\n/** Extract flags */\n\n// see https://github.com/microsoft/TypeScript/issues/6223\n\n/** Provides common masking stuff */\nclass Masked {\n  /** */\n\n  /** */\n\n  /** Transforms value before mask processing */\n\n  /** Transforms each char before mask processing */\n\n  /** Validates if value is acceptable */\n\n  /** Does additional processing at the end of editing */\n\n  /** Format typed value to string */\n\n  /** Parse string to get typed value */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    this._value = '';\n    this._update({\n      ...Masked.DEFAULTS,\n      ...opts\n    });\n    this._initialized = true;\n  }\n\n  /** Sets and applies new options */\n  updateOptions(opts) {\n    if (!this.optionsIsChanged(opts)) return;\n    this.withValueRefresh(this._update.bind(this, opts));\n  }\n\n  /** Sets new options */\n  _update(opts) {\n    Object.assign(this, opts);\n  }\n\n  /** Mask state */\n  get state() {\n    return {\n      _value: this.value,\n      _rawInputValue: this.rawInputValue\n    };\n  }\n  set state(state) {\n    this._value = state._value;\n  }\n\n  /** Resets value */\n  reset() {\n    this._value = '';\n  }\n  get value() {\n    return this._value;\n  }\n  set value(value) {\n    this.resolve(value, {\n      input: true\n    });\n  }\n\n  /** Resolve new value */\n  resolve(value, flags) {\n    if (flags === void 0) {\n      flags = {\n        input: true\n      };\n    }\n    this.reset();\n    this.append(value, flags, '');\n    this.doCommit();\n  }\n  get unmaskedValue() {\n    return this.value;\n  }\n  set unmaskedValue(value) {\n    this.resolve(value, {});\n  }\n  get typedValue() {\n    return this.parse ? this.parse(this.value, this) : this.unmaskedValue;\n  }\n  set typedValue(value) {\n    if (this.format) {\n      this.value = this.format(value, this);\n    } else {\n      this.unmaskedValue = String(value);\n    }\n  }\n\n  /** Value that includes raw user input */\n  get rawInputValue() {\n    return this.extractInput(0, this.displayValue.length, {\n      raw: true\n    });\n  }\n  set rawInputValue(value) {\n    this.resolve(value, {\n      raw: true\n    });\n  }\n  get displayValue() {\n    return this.value;\n  }\n  get isComplete() {\n    return true;\n  }\n  get isFilled() {\n    return this.isComplete;\n  }\n\n  /** Finds nearest input position in direction */\n  nearestInputPos(cursorPos, direction) {\n    return cursorPos;\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    return Math.min(this.displayValue.length, toPos - fromPos);\n  }\n\n  /** Extracts value in range considering flags */\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    return this.displayValue.slice(fromPos, toPos);\n  }\n\n  /** Extracts tail in range */\n  extractTail(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    return new ContinuousTailDetails(this.extractInput(fromPos, toPos), fromPos);\n  }\n\n  /** Appends tail */\n  appendTail(tail) {\n    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n    return tail.appendTo(this);\n  }\n\n  /** Appends char */\n  _appendCharRaw(ch, flags) {\n    if (!ch) return new ChangeDetails();\n    this._value += ch;\n    return new ChangeDetails({\n      inserted: ch,\n      rawInserted: ch\n    });\n  }\n\n  /** Appends char */\n  _appendChar(ch, flags, checkTail) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const consistentState = this.state;\n    let details;\n    [ch, details] = this.doPrepareChar(ch, flags);\n    if (ch) {\n      details = details.aggregate(this._appendCharRaw(ch, flags));\n\n      // TODO handle `skip`?\n\n      // try `autofix` lookahead\n      if (!details.rawInserted && this.autofix === 'pad') {\n        const noFixState = this.state;\n        this.state = consistentState;\n        let fixDetails = this.pad(flags);\n        const chDetails = this._appendCharRaw(ch, flags);\n        fixDetails = fixDetails.aggregate(chDetails);\n\n        // if fix was applied or\n        // if details are equal use skip restoring state optimization\n        if (chDetails.rawInserted || fixDetails.equals(details)) {\n          details = fixDetails;\n        } else {\n          this.state = noFixState;\n        }\n      }\n    }\n    if (details.inserted) {\n      let consistentTail;\n      let appended = this.doValidate(flags) !== false;\n      if (appended && checkTail != null) {\n        // validation ok, check tail\n        const beforeTailState = this.state;\n        if (this.overwrite === true) {\n          consistentTail = checkTail.state;\n          for (let i = 0; i < details.rawInserted.length; ++i) {\n            checkTail.unshift(this.displayValue.length - details.tailShift);\n          }\n        }\n        let tailDetails = this.appendTail(checkTail);\n        appended = tailDetails.rawInserted.length === checkTail.toString().length;\n\n        // not ok, try shift\n        if (!(appended && tailDetails.inserted) && this.overwrite === 'shift') {\n          this.state = beforeTailState;\n          consistentTail = checkTail.state;\n          for (let i = 0; i < details.rawInserted.length; ++i) {\n            checkTail.shift();\n          }\n          tailDetails = this.appendTail(checkTail);\n          appended = tailDetails.rawInserted.length === checkTail.toString().length;\n        }\n\n        // if ok, rollback state after tail\n        if (appended && tailDetails.inserted) this.state = beforeTailState;\n      }\n\n      // revert all if something went wrong\n      if (!appended) {\n        details = new ChangeDetails();\n        this.state = consistentState;\n        if (checkTail && consistentTail) checkTail.state = consistentTail;\n      }\n    }\n    return details;\n  }\n\n  /** Appends optional placeholder at the end */\n  _appendPlaceholder() {\n    return new ChangeDetails();\n  }\n\n  /** Appends optional eager placeholder at the end */\n  _appendEager() {\n    return new ChangeDetails();\n  }\n\n  /** Appends symbols considering flags */\n  append(str, flags, tail) {\n    if (!isString(str)) throw new Error('value should be string');\n    const checkTail = isString(tail) ? new ContinuousTailDetails(String(tail)) : tail;\n    if (flags != null && flags.tail) flags._beforeTailState = this.state;\n    let details;\n    [str, details] = this.doPrepare(str, flags);\n    for (let ci = 0; ci < str.length; ++ci) {\n      const d = this._appendChar(str[ci], flags, checkTail);\n      if (!d.rawInserted && !this.doSkipInvalid(str[ci], flags, checkTail)) break;\n      details.aggregate(d);\n    }\n    if ((this.eager === true || this.eager === 'append') && flags != null && flags.input && str) {\n      details.aggregate(this._appendEager());\n    }\n\n    // append tail but aggregate only tailShift\n    if (checkTail != null) {\n      details.tailShift += this.appendTail(checkTail).tailShift;\n      // TODO it's a good idea to clear state after appending ends\n      // but it causes bugs when one append calls another (when dynamic dispatch set rawInputValue)\n      // this._resetBeforeTailState();\n    }\n    return details;\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    this._value = this.displayValue.slice(0, fromPos) + this.displayValue.slice(toPos);\n    return new ChangeDetails();\n  }\n\n  /** Calls function and reapplies current value */\n  withValueRefresh(fn) {\n    if (this._refreshing || !this._initialized) return fn();\n    this._refreshing = true;\n    const rawInput = this.rawInputValue;\n    const value = this.value;\n    const ret = fn();\n    this.rawInputValue = rawInput;\n    // append lost trailing chars at the end\n    if (this.value && this.value !== value && value.indexOf(this.value) === 0) {\n      this.append(value.slice(this.displayValue.length), {}, '');\n      this.doCommit();\n    }\n    delete this._refreshing;\n    return ret;\n  }\n  runIsolated(fn) {\n    if (this._isolated || !this._initialized) return fn(this);\n    this._isolated = true;\n    const state = this.state;\n    const ret = fn(this);\n    this.state = state;\n    delete this._isolated;\n    return ret;\n  }\n  doSkipInvalid(ch, flags, checkTail) {\n    return Boolean(this.skipInvalid);\n  }\n\n  /** Prepares string before mask processing */\n  doPrepare(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    return ChangeDetails.normalize(this.prepare ? this.prepare(str, this, flags) : str);\n  }\n\n  /** Prepares each char before mask processing */\n  doPrepareChar(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    return ChangeDetails.normalize(this.prepareChar ? this.prepareChar(str, this, flags) : str);\n  }\n\n  /** Validates if value is acceptable */\n  doValidate(flags) {\n    return (!this.validate || this.validate(this.value, this, flags)) && (!this.parent || this.parent.doValidate(flags));\n  }\n\n  /** Does additional processing at the end of editing */\n  doCommit() {\n    if (this.commit) this.commit(this.value, this);\n  }\n  splice(start, deleteCount, inserted, removeDirection, flags) {\n    if (inserted === void 0) {\n      inserted = '';\n    }\n    if (removeDirection === void 0) {\n      removeDirection = DIRECTION.NONE;\n    }\n    if (flags === void 0) {\n      flags = {\n        input: true\n      };\n    }\n    const tailPos = start + deleteCount;\n    const tail = this.extractTail(tailPos);\n    const eagerRemove = this.eager === true || this.eager === 'remove';\n    let oldRawValue;\n    if (eagerRemove) {\n      removeDirection = forceDirection(removeDirection);\n      oldRawValue = this.extractInput(0, tailPos, {\n        raw: true\n      });\n    }\n    let startChangePos = start;\n    const details = new ChangeDetails();\n\n    // if it is just deletion without insertion\n    if (removeDirection !== DIRECTION.NONE) {\n      startChangePos = this.nearestInputPos(start, deleteCount > 1 && start !== 0 && !eagerRemove ? DIRECTION.NONE : removeDirection);\n\n      // adjust tailShift if start was aligned\n      details.tailShift = startChangePos - start;\n    }\n    details.aggregate(this.remove(startChangePos));\n    if (eagerRemove && removeDirection !== DIRECTION.NONE && oldRawValue === this.rawInputValue) {\n      if (removeDirection === DIRECTION.FORCE_LEFT) {\n        let valLength;\n        while (oldRawValue === this.rawInputValue && (valLength = this.displayValue.length)) {\n          details.aggregate(new ChangeDetails({\n            tailShift: -1\n          })).aggregate(this.remove(valLength - 1));\n        }\n      } else if (removeDirection === DIRECTION.FORCE_RIGHT) {\n        tail.unshift();\n      }\n    }\n    return details.aggregate(this.append(inserted, flags, tail));\n  }\n  maskEquals(mask) {\n    return this.mask === mask;\n  }\n  optionsIsChanged(opts) {\n    return !objectIncludes(this, opts);\n  }\n  typedValueEquals(value) {\n    const tval = this.typedValue;\n    return value === tval || Masked.EMPTY_VALUES.includes(value) && Masked.EMPTY_VALUES.includes(tval) || (this.format ? this.format(value, this) === this.format(this.typedValue, this) : false);\n  }\n  pad(flags) {\n    return new ChangeDetails();\n  }\n}\nMasked.DEFAULTS = {\n  skipInvalid: true\n};\nMasked.EMPTY_VALUES = [undefined, null, ''];\nIMask.Masked = Masked;\n\nclass ChunksTailDetails {\n  /** */\n\n  constructor(chunks, from) {\n    if (chunks === void 0) {\n      chunks = [];\n    }\n    if (from === void 0) {\n      from = 0;\n    }\n    this.chunks = chunks;\n    this.from = from;\n  }\n  toString() {\n    return this.chunks.map(String).join('');\n  }\n  extend(tailChunk) {\n    if (!String(tailChunk)) return;\n    tailChunk = isString(tailChunk) ? new ContinuousTailDetails(String(tailChunk)) : tailChunk;\n    const lastChunk = this.chunks[this.chunks.length - 1];\n    const extendLast = lastChunk && (\n    // if stops are same or tail has no stop\n    lastChunk.stop === tailChunk.stop || tailChunk.stop == null) &&\n    // if tail chunk goes just after last chunk\n    tailChunk.from === lastChunk.from + lastChunk.toString().length;\n    if (tailChunk instanceof ContinuousTailDetails) {\n      // check the ability to extend previous chunk\n      if (extendLast) {\n        // extend previous chunk\n        lastChunk.extend(tailChunk.toString());\n      } else {\n        // append new chunk\n        this.chunks.push(tailChunk);\n      }\n    } else if (tailChunk instanceof ChunksTailDetails) {\n      if (tailChunk.stop == null) {\n        // unwrap floating chunks to parent, keeping `from` pos\n        let firstTailChunk;\n        while (tailChunk.chunks.length && tailChunk.chunks[0].stop == null) {\n          firstTailChunk = tailChunk.chunks.shift(); // not possible to be `undefined` because length was checked above\n          firstTailChunk.from += tailChunk.from;\n          this.extend(firstTailChunk);\n        }\n      }\n\n      // if tail chunk still has value\n      if (tailChunk.toString()) {\n        // if chunks contains stops, then popup stop to container\n        tailChunk.stop = tailChunk.blockIndex;\n        this.chunks.push(tailChunk);\n      }\n    }\n  }\n  appendTo(masked) {\n    if (!(masked instanceof IMask.MaskedPattern)) {\n      const tail = new ContinuousTailDetails(this.toString());\n      return tail.appendTo(masked);\n    }\n    const details = new ChangeDetails();\n    for (let ci = 0; ci < this.chunks.length; ++ci) {\n      const chunk = this.chunks[ci];\n      const lastBlockIter = masked._mapPosToBlock(masked.displayValue.length);\n      const stop = chunk.stop;\n      let chunkBlock;\n      if (stop != null && (\n      // if block not found or stop is behind lastBlock\n      !lastBlockIter || lastBlockIter.index <= stop)) {\n        if (chunk instanceof ChunksTailDetails ||\n        // for continuous block also check if stop is exist\n        masked._stops.indexOf(stop) >= 0) {\n          details.aggregate(masked._appendPlaceholder(stop));\n        }\n        chunkBlock = chunk instanceof ChunksTailDetails && masked._blocks[stop];\n      }\n      if (chunkBlock) {\n        const tailDetails = chunkBlock.appendTail(chunk);\n        details.aggregate(tailDetails);\n\n        // get not inserted chars\n        const remainChars = chunk.toString().slice(tailDetails.rawInserted.length);\n        if (remainChars) details.aggregate(masked.append(remainChars, {\n          tail: true\n        }));\n      } else {\n        details.aggregate(masked.append(chunk.toString(), {\n          tail: true\n        }));\n      }\n    }\n    return details;\n  }\n  get state() {\n    return {\n      chunks: this.chunks.map(c => c.state),\n      from: this.from,\n      stop: this.stop,\n      blockIndex: this.blockIndex\n    };\n  }\n  set state(state) {\n    const {\n      chunks,\n      ...props\n    } = state;\n    Object.assign(this, props);\n    this.chunks = chunks.map(cstate => {\n      const chunk = \"chunks\" in cstate ? new ChunksTailDetails() : new ContinuousTailDetails();\n      chunk.state = cstate;\n      return chunk;\n    });\n  }\n  unshift(beforePos) {\n    if (!this.chunks.length || beforePos != null && this.from >= beforePos) return '';\n    const chunkShiftPos = beforePos != null ? beforePos - this.from : beforePos;\n    let ci = 0;\n    while (ci < this.chunks.length) {\n      const chunk = this.chunks[ci];\n      const shiftChar = chunk.unshift(chunkShiftPos);\n      if (chunk.toString()) {\n        // chunk still contains value\n        // but not shifted - means no more available chars to shift\n        if (!shiftChar) break;\n        ++ci;\n      } else {\n        // clean if chunk has no value\n        this.chunks.splice(ci, 1);\n      }\n      if (shiftChar) return shiftChar;\n    }\n    return '';\n  }\n  shift() {\n    if (!this.chunks.length) return '';\n    let ci = this.chunks.length - 1;\n    while (0 <= ci) {\n      const chunk = this.chunks[ci];\n      const shiftChar = chunk.shift();\n      if (chunk.toString()) {\n        // chunk still contains value\n        // but not shifted - means no more available chars to shift\n        if (!shiftChar) break;\n        --ci;\n      } else {\n        // clean if chunk has no value\n        this.chunks.splice(ci, 1);\n      }\n      if (shiftChar) return shiftChar;\n    }\n    return '';\n  }\n}\n\nclass PatternCursor {\n  constructor(masked, pos) {\n    this.masked = masked;\n    this._log = [];\n    const {\n      offset,\n      index\n    } = masked._mapPosToBlock(pos) || (pos < 0 ?\n    // first\n    {\n      index: 0,\n      offset: 0\n    } :\n    // last\n    {\n      index: this.masked._blocks.length,\n      offset: 0\n    });\n    this.offset = offset;\n    this.index = index;\n    this.ok = false;\n  }\n  get block() {\n    return this.masked._blocks[this.index];\n  }\n  get pos() {\n    return this.masked._blockStartPos(this.index) + this.offset;\n  }\n  get state() {\n    return {\n      index: this.index,\n      offset: this.offset,\n      ok: this.ok\n    };\n  }\n  set state(s) {\n    Object.assign(this, s);\n  }\n  pushState() {\n    this._log.push(this.state);\n  }\n  popState() {\n    const s = this._log.pop();\n    if (s) this.state = s;\n    return s;\n  }\n  bindBlock() {\n    if (this.block) return;\n    if (this.index < 0) {\n      this.index = 0;\n      this.offset = 0;\n    }\n    if (this.index >= this.masked._blocks.length) {\n      this.index = this.masked._blocks.length - 1;\n      this.offset = this.block.displayValue.length; // TODO this is stupid type error, `block` depends on index that was changed above\n    }\n  }\n  _pushLeft(fn) {\n    this.pushState();\n    for (this.bindBlock(); 0 <= this.index; --this.index, this.offset = ((_this$block = this.block) == null ? void 0 : _this$block.displayValue.length) || 0) {\n      var _this$block;\n      if (fn()) return this.ok = true;\n    }\n    return this.ok = false;\n  }\n  _pushRight(fn) {\n    this.pushState();\n    for (this.bindBlock(); this.index < this.masked._blocks.length; ++this.index, this.offset = 0) {\n      if (fn()) return this.ok = true;\n    }\n    return this.ok = false;\n  }\n  pushLeftBeforeFilled() {\n    return this._pushLeft(() => {\n      if (this.block.isFixed || !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_LEFT);\n      if (this.offset !== 0) return true;\n    });\n  }\n  pushLeftBeforeInput() {\n    // cases:\n    // filled input: 00|\n    // optional empty input: 00[]|\n    // nested block: XX<[]>|\n    return this._pushLeft(() => {\n      if (this.block.isFixed) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n      return true;\n    });\n  }\n  pushLeftBeforeRequired() {\n    return this._pushLeft(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.LEFT);\n      return true;\n    });\n  }\n  pushRightBeforeFilled() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || !this.block.value) return;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.FORCE_RIGHT);\n      if (this.offset !== this.block.value.length) return true;\n    });\n  }\n  pushRightBeforeInput() {\n    return this._pushRight(() => {\n      if (this.block.isFixed) return;\n\n      // const o = this.offset;\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      // HACK cases like (STILL DOES NOT WORK FOR NESTED)\n      // aa|X\n      // aa<X|[]>X_    - this will not work\n      // if (o && o === this.offset && this.block instanceof PatternInputDefinition) continue;\n      return true;\n    });\n  }\n  pushRightBeforeRequired() {\n    return this._pushRight(() => {\n      if (this.block.isFixed || this.block.isOptional && !this.block.value) return;\n\n      // TODO check |[*]XX_\n      this.offset = this.block.nearestInputPos(this.offset, DIRECTION.NONE);\n      return true;\n    });\n  }\n}\n\nclass PatternFixedDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    Object.assign(this, opts);\n    this._value = '';\n    this.isFixed = true;\n  }\n  get value() {\n    return this._value;\n  }\n  get unmaskedValue() {\n    return this.isUnmasking ? this.value : '';\n  }\n  get rawInputValue() {\n    return this._isRawInput ? this.value : '';\n  }\n  get displayValue() {\n    return this.value;\n  }\n  reset() {\n    this._isRawInput = false;\n    this._value = '';\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    this._value = this._value.slice(0, fromPos) + this._value.slice(toPos);\n    if (!this._value) this._isRawInput = false;\n    return new ChangeDetails();\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    const minPos = 0;\n    const maxPos = this._value.length;\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return minPos;\n      case DIRECTION.NONE:\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n      default:\n        return maxPos;\n    }\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    return this._isRawInput ? toPos - fromPos : 0;\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this._value.length;\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    return flags.raw && this._isRawInput && this._value.slice(fromPos, toPos) || '';\n  }\n  get isComplete() {\n    return true;\n  }\n  get isFilled() {\n    return Boolean(this._value);\n  }\n  _appendChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (this.isFilled) return new ChangeDetails();\n    const appendEager = this.eager === true || this.eager === 'append';\n    const appended = this.char === ch;\n    const isResolved = appended && (this.isUnmasking || flags.input || flags.raw) && (!flags.raw || !appendEager) && !flags.tail;\n    const details = new ChangeDetails({\n      inserted: this.char,\n      rawInserted: isResolved ? this.char : ''\n    });\n    this._value = this.char;\n    this._isRawInput = isResolved && (flags.raw || flags.input);\n    return details;\n  }\n  _appendEager() {\n    return this._appendChar(this.char, {\n      tail: true\n    });\n  }\n  _appendPlaceholder() {\n    const details = new ChangeDetails();\n    if (this.isFilled) return details;\n    this._value = details.inserted = this.char;\n    return details;\n  }\n  extractTail() {\n    return new ContinuousTailDetails('');\n  }\n  appendTail(tail) {\n    if (isString(tail)) tail = new ContinuousTailDetails(String(tail));\n    return tail.appendTo(this);\n  }\n  append(str, flags, tail) {\n    const details = this._appendChar(str[0], flags);\n    if (tail != null) {\n      details.tailShift += this.appendTail(tail).tailShift;\n    }\n    return details;\n  }\n  doCommit() {}\n  get state() {\n    return {\n      _value: this._value,\n      _rawInputValue: this.rawInputValue\n    };\n  }\n  set state(state) {\n    this._value = state._value;\n    this._isRawInput = Boolean(state._rawInputValue);\n  }\n  pad(flags) {\n    return this._appendPlaceholder();\n  }\n}\n\nclass PatternInputDefinition {\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    const {\n      parent,\n      isOptional,\n      placeholderChar,\n      displayChar,\n      lazy,\n      eager,\n      ...maskOpts\n    } = opts;\n    this.masked = createMask(maskOpts);\n    Object.assign(this, {\n      parent,\n      isOptional,\n      placeholderChar,\n      displayChar,\n      lazy,\n      eager\n    });\n  }\n  reset() {\n    this.isFilled = false;\n    this.masked.reset();\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.value.length;\n    }\n    if (fromPos === 0 && toPos >= 1) {\n      this.isFilled = false;\n      return this.masked.remove(fromPos, toPos);\n    }\n    return new ChangeDetails();\n  }\n  get value() {\n    return this.masked.value || (this.isFilled && !this.isOptional ? this.placeholderChar : '');\n  }\n  get unmaskedValue() {\n    return this.masked.unmaskedValue;\n  }\n  get rawInputValue() {\n    return this.masked.rawInputValue;\n  }\n  get displayValue() {\n    return this.masked.value && this.displayChar || this.value;\n  }\n  get isComplete() {\n    return Boolean(this.masked.value) || this.isOptional;\n  }\n  _appendChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (this.isFilled) return new ChangeDetails();\n    const state = this.masked.state;\n    // simulate input\n    let details = this.masked._appendChar(ch, this.currentMaskFlags(flags));\n    if (details.inserted && this.doValidate(flags) === false) {\n      details = new ChangeDetails();\n      this.masked.state = state;\n    }\n    if (!details.inserted && !this.isOptional && !this.lazy && !flags.input) {\n      details.inserted = this.placeholderChar;\n    }\n    details.skip = !details.inserted && !this.isOptional;\n    this.isFilled = Boolean(details.inserted);\n    return details;\n  }\n  append(str, flags, tail) {\n    // TODO probably should be done via _appendChar\n    return this.masked.append(str, this.currentMaskFlags(flags), tail);\n  }\n  _appendPlaceholder() {\n    if (this.isFilled || this.isOptional) return new ChangeDetails();\n    this.isFilled = true;\n    return new ChangeDetails({\n      inserted: this.placeholderChar\n    });\n  }\n  _appendEager() {\n    return new ChangeDetails();\n  }\n  extractTail(fromPos, toPos) {\n    return this.masked.extractTail(fromPos, toPos);\n  }\n  appendTail(tail) {\n    return this.masked.appendTail(tail);\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.value.length;\n    }\n    return this.masked.extractInput(fromPos, toPos, flags);\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    const minPos = 0;\n    const maxPos = this.value.length;\n    const boundPos = Math.min(Math.max(cursorPos, minPos), maxPos);\n    switch (direction) {\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        return this.isComplete ? boundPos : minPos;\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n        return this.isComplete ? boundPos : maxPos;\n      case DIRECTION.NONE:\n      default:\n        return boundPos;\n    }\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.value.length;\n    }\n    return this.value.slice(fromPos, toPos).length;\n  }\n  doValidate(flags) {\n    return this.masked.doValidate(this.currentMaskFlags(flags)) && (!this.parent || this.parent.doValidate(this.currentMaskFlags(flags)));\n  }\n  doCommit() {\n    this.masked.doCommit();\n  }\n  get state() {\n    return {\n      _value: this.value,\n      _rawInputValue: this.rawInputValue,\n      masked: this.masked.state,\n      isFilled: this.isFilled\n    };\n  }\n  set state(state) {\n    this.masked.state = state.masked;\n    this.isFilled = state.isFilled;\n  }\n  currentMaskFlags(flags) {\n    var _flags$_beforeTailSta;\n    return {\n      ...flags,\n      _beforeTailState: (flags == null || (_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.masked) || (flags == null ? void 0 : flags._beforeTailState)\n    };\n  }\n  pad(flags) {\n    return new ChangeDetails();\n  }\n}\nPatternInputDefinition.DEFAULT_DEFINITIONS = {\n  '0': /\\d/,\n  'a': /[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]/,\n  // http://stackoverflow.com/a/22075070\n  '*': /./\n};\n\n/** Masking by RegExp */\nclass MaskedRegExp extends Masked {\n  /** */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const mask = opts.mask;\n    if (mask) opts.validate = value => value.search(mask) >= 0;\n    super._update(opts);\n  }\n}\nIMask.MaskedRegExp = MaskedRegExp;\n\n/** Pattern mask */\nclass MaskedPattern extends Masked {\n  /** */\n\n  /** */\n\n  /** Single char for empty input */\n\n  /** Single char for filled input */\n\n  /** Show placeholder only when needed */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  constructor(opts) {\n    super({\n      ...MaskedPattern.DEFAULTS,\n      ...opts,\n      definitions: Object.assign({}, PatternInputDefinition.DEFAULT_DEFINITIONS, opts == null ? void 0 : opts.definitions)\n    });\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    opts.definitions = Object.assign({}, this.definitions, opts.definitions);\n    super._update(opts);\n    this._rebuildMask();\n  }\n  _rebuildMask() {\n    const defs = this.definitions;\n    this._blocks = [];\n    this.exposeBlock = undefined;\n    this._stops = [];\n    this._maskedBlocks = {};\n    const pattern = this.mask;\n    if (!pattern || !defs) return;\n    let unmaskingBlock = false;\n    let optionalBlock = false;\n    for (let i = 0; i < pattern.length; ++i) {\n      if (this.blocks) {\n        const p = pattern.slice(i);\n        const bNames = Object.keys(this.blocks).filter(bName => p.indexOf(bName) === 0);\n        // order by key length\n        bNames.sort((a, b) => b.length - a.length);\n        // use block name with max length\n        const bName = bNames[0];\n        if (bName) {\n          const {\n            expose,\n            repeat,\n            ...bOpts\n          } = normalizeOpts(this.blocks[bName]); // TODO type Opts<Arg & Extra>\n          const blockOpts = {\n            lazy: this.lazy,\n            eager: this.eager,\n            placeholderChar: this.placeholderChar,\n            displayChar: this.displayChar,\n            overwrite: this.overwrite,\n            autofix: this.autofix,\n            ...bOpts,\n            repeat,\n            parent: this\n          };\n          const maskedBlock = repeat != null ? new IMask.RepeatBlock(blockOpts /* TODO */) : createMask(blockOpts);\n          if (maskedBlock) {\n            this._blocks.push(maskedBlock);\n            if (expose) this.exposeBlock = maskedBlock;\n\n            // store block index\n            if (!this._maskedBlocks[bName]) this._maskedBlocks[bName] = [];\n            this._maskedBlocks[bName].push(this._blocks.length - 1);\n          }\n          i += bName.length - 1;\n          continue;\n        }\n      }\n      let char = pattern[i];\n      let isInput = (char in defs);\n      if (char === MaskedPattern.STOP_CHAR) {\n        this._stops.push(this._blocks.length);\n        continue;\n      }\n      if (char === '{' || char === '}') {\n        unmaskingBlock = !unmaskingBlock;\n        continue;\n      }\n      if (char === '[' || char === ']') {\n        optionalBlock = !optionalBlock;\n        continue;\n      }\n      if (char === MaskedPattern.ESCAPE_CHAR) {\n        ++i;\n        char = pattern[i];\n        if (!char) break;\n        isInput = false;\n      }\n      const def = isInput ? new PatternInputDefinition({\n        isOptional: optionalBlock,\n        lazy: this.lazy,\n        eager: this.eager,\n        placeholderChar: this.placeholderChar,\n        displayChar: this.displayChar,\n        ...normalizeOpts(defs[char]),\n        parent: this\n      }) : new PatternFixedDefinition({\n        char,\n        eager: this.eager,\n        isUnmasking: unmaskingBlock\n      });\n      this._blocks.push(def);\n    }\n  }\n  get state() {\n    return {\n      ...super.state,\n      _blocks: this._blocks.map(b => b.state)\n    };\n  }\n  set state(state) {\n    if (!state) {\n      this.reset();\n      return;\n    }\n    const {\n      _blocks,\n      ...maskedState\n    } = state;\n    this._blocks.forEach((b, bi) => b.state = _blocks[bi]);\n    super.state = maskedState;\n  }\n  reset() {\n    super.reset();\n    this._blocks.forEach(b => b.reset());\n  }\n  get isComplete() {\n    return this.exposeBlock ? this.exposeBlock.isComplete : this._blocks.every(b => b.isComplete);\n  }\n  get isFilled() {\n    return this._blocks.every(b => b.isFilled);\n  }\n  get isFixed() {\n    return this._blocks.every(b => b.isFixed);\n  }\n  get isOptional() {\n    return this._blocks.every(b => b.isOptional);\n  }\n  doCommit() {\n    this._blocks.forEach(b => b.doCommit());\n    super.doCommit();\n  }\n  get unmaskedValue() {\n    return this.exposeBlock ? this.exposeBlock.unmaskedValue : this._blocks.reduce((str, b) => str += b.unmaskedValue, '');\n  }\n  set unmaskedValue(unmaskedValue) {\n    if (this.exposeBlock) {\n      const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n      this.exposeBlock.unmaskedValue = unmaskedValue;\n      this.appendTail(tail);\n      this.doCommit();\n    } else super.unmaskedValue = unmaskedValue;\n  }\n  get value() {\n    return this.exposeBlock ? this.exposeBlock.value :\n    // TODO return _value when not in change?\n    this._blocks.reduce((str, b) => str += b.value, '');\n  }\n  set value(value) {\n    if (this.exposeBlock) {\n      const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n      this.exposeBlock.value = value;\n      this.appendTail(tail);\n      this.doCommit();\n    } else super.value = value;\n  }\n  get typedValue() {\n    return this.exposeBlock ? this.exposeBlock.typedValue : super.typedValue;\n  }\n  set typedValue(value) {\n    if (this.exposeBlock) {\n      const tail = this.extractTail(this._blockStartPos(this._blocks.indexOf(this.exposeBlock)) + this.exposeBlock.displayValue.length);\n      this.exposeBlock.typedValue = value;\n      this.appendTail(tail);\n      this.doCommit();\n    } else super.typedValue = value;\n  }\n  get displayValue() {\n    return this._blocks.reduce((str, b) => str += b.displayValue, '');\n  }\n  appendTail(tail) {\n    return super.appendTail(tail).aggregate(this._appendPlaceholder());\n  }\n  _appendEager() {\n    var _this$_mapPosToBlock;\n    const details = new ChangeDetails();\n    let startBlockIndex = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index;\n    if (startBlockIndex == null) return details;\n\n    // TODO test if it works for nested pattern masks\n    if (this._blocks[startBlockIndex].isFilled) ++startBlockIndex;\n    for (let bi = startBlockIndex; bi < this._blocks.length; ++bi) {\n      const d = this._blocks[bi]._appendEager();\n      if (!d.inserted) break;\n      details.aggregate(d);\n    }\n    return details;\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const blockIter = this._mapPosToBlock(this.displayValue.length);\n    const details = new ChangeDetails();\n    if (!blockIter) return details;\n    for (let bi = blockIter.index, block; block = this._blocks[bi]; ++bi) {\n      var _flags$_beforeTailSta;\n      const blockDetails = block._appendChar(ch, {\n        ...flags,\n        _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n      });\n      details.aggregate(blockDetails);\n      if (blockDetails.consumed) break; // go next char\n    }\n    return details;\n  }\n  extractTail(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const chunkTail = new ChunksTailDetails();\n    if (fromPos === toPos) return chunkTail;\n    this._forEachBlocksInRange(fromPos, toPos, (b, bi, bFromPos, bToPos) => {\n      const blockChunk = b.extractTail(bFromPos, bToPos);\n      blockChunk.stop = this._findStopBefore(bi);\n      blockChunk.from = this._blockStartPos(bi);\n      if (blockChunk instanceof ChunksTailDetails) blockChunk.blockIndex = bi;\n      chunkTail.extend(blockChunk);\n    });\n    return chunkTail;\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (fromPos === toPos) return '';\n    let input = '';\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, fromPos, toPos) => {\n      input += b.extractInput(fromPos, toPos, flags);\n    });\n    return input;\n  }\n  _findStopBefore(blockIndex) {\n    let stopBefore;\n    for (let si = 0; si < this._stops.length; ++si) {\n      const stop = this._stops[si];\n      if (stop <= blockIndex) stopBefore = stop;else break;\n    }\n    return stopBefore;\n  }\n\n  /** Appends placeholder depending on laziness */\n  _appendPlaceholder(toBlockIndex) {\n    const details = new ChangeDetails();\n    if (this.lazy && toBlockIndex == null) return details;\n    const startBlockIter = this._mapPosToBlock(this.displayValue.length);\n    if (!startBlockIter) return details;\n    const startBlockIndex = startBlockIter.index;\n    const endBlockIndex = toBlockIndex != null ? toBlockIndex : this._blocks.length;\n    this._blocks.slice(startBlockIndex, endBlockIndex).forEach(b => {\n      if (!b.lazy || toBlockIndex != null) {\n        var _blocks2;\n        details.aggregate(b._appendPlaceholder((_blocks2 = b._blocks) == null ? void 0 : _blocks2.length));\n      }\n    });\n    return details;\n  }\n\n  /** Finds block in pos */\n  _mapPosToBlock(pos) {\n    let accVal = '';\n    for (let bi = 0; bi < this._blocks.length; ++bi) {\n      const block = this._blocks[bi];\n      const blockStartPos = accVal.length;\n      accVal += block.displayValue;\n      if (pos <= accVal.length) {\n        return {\n          index: bi,\n          offset: pos - blockStartPos\n        };\n      }\n    }\n  }\n  _blockStartPos(blockIndex) {\n    return this._blocks.slice(0, blockIndex).reduce((pos, b) => pos += b.displayValue.length, 0);\n  }\n  _forEachBlocksInRange(fromPos, toPos, fn) {\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const fromBlockIter = this._mapPosToBlock(fromPos);\n    if (fromBlockIter) {\n      const toBlockIter = this._mapPosToBlock(toPos);\n      // process first block\n      const isSameBlock = toBlockIter && fromBlockIter.index === toBlockIter.index;\n      const fromBlockStartPos = fromBlockIter.offset;\n      const fromBlockEndPos = toBlockIter && isSameBlock ? toBlockIter.offset : this._blocks[fromBlockIter.index].displayValue.length;\n      fn(this._blocks[fromBlockIter.index], fromBlockIter.index, fromBlockStartPos, fromBlockEndPos);\n      if (toBlockIter && !isSameBlock) {\n        // process intermediate blocks\n        for (let bi = fromBlockIter.index + 1; bi < toBlockIter.index; ++bi) {\n          fn(this._blocks[bi], bi, 0, this._blocks[bi].displayValue.length);\n        }\n\n        // process last block\n        fn(this._blocks[toBlockIter.index], toBlockIter.index, 0, toBlockIter.offset);\n      }\n    }\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const removeDetails = super.remove(fromPos, toPos);\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n      removeDetails.aggregate(b.remove(bFromPos, bToPos));\n    });\n    return removeDetails;\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (direction === void 0) {\n      direction = DIRECTION.NONE;\n    }\n    if (!this._blocks.length) return 0;\n    const cursor = new PatternCursor(this, cursorPos);\n    if (direction === DIRECTION.NONE) {\n      // -------------------------------------------------\n      // NONE should only go out from fixed to the right!\n      // -------------------------------------------------\n      if (cursor.pushRightBeforeInput()) return cursor.pos;\n      cursor.popState();\n      if (cursor.pushLeftBeforeInput()) return cursor.pos;\n      return this.displayValue.length;\n    }\n\n    // FORCE is only about a|* otherwise is 0\n    if (direction === DIRECTION.LEFT || direction === DIRECTION.FORCE_LEFT) {\n      // try to break fast when *|a\n      if (direction === DIRECTION.LEFT) {\n        cursor.pushRightBeforeFilled();\n        if (cursor.ok && cursor.pos === cursorPos) return cursorPos;\n        cursor.popState();\n      }\n\n      // forward flow\n      cursor.pushLeftBeforeInput();\n      cursor.pushLeftBeforeRequired();\n      cursor.pushLeftBeforeFilled();\n\n      // backward flow\n      if (direction === DIRECTION.LEFT) {\n        cursor.pushRightBeforeInput();\n        cursor.pushRightBeforeRequired();\n        if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n        cursor.popState();\n        if (cursor.ok && cursor.pos <= cursorPos) return cursor.pos;\n        cursor.popState();\n      }\n      if (cursor.ok) return cursor.pos;\n      if (direction === DIRECTION.FORCE_LEFT) return 0;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      return 0;\n    }\n    if (direction === DIRECTION.RIGHT || direction === DIRECTION.FORCE_RIGHT) {\n      // forward flow\n      cursor.pushRightBeforeInput();\n      cursor.pushRightBeforeRequired();\n      if (cursor.pushRightBeforeFilled()) return cursor.pos;\n      if (direction === DIRECTION.FORCE_RIGHT) return this.displayValue.length;\n\n      // backward flow\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      cursor.popState();\n      if (cursor.ok) return cursor.pos;\n      return this.nearestInputPos(cursorPos, DIRECTION.LEFT);\n    }\n    return cursorPos;\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    let total = 0;\n    this._forEachBlocksInRange(fromPos, toPos, (b, _, bFromPos, bToPos) => {\n      total += b.totalInputPositions(bFromPos, bToPos);\n    });\n    return total;\n  }\n\n  /** Get block by name */\n  maskedBlock(name) {\n    return this.maskedBlocks(name)[0];\n  }\n\n  /** Get all blocks by name */\n  maskedBlocks(name) {\n    const indices = this._maskedBlocks[name];\n    if (!indices) return [];\n    return indices.map(gi => this._blocks[gi]);\n  }\n  pad(flags) {\n    const details = new ChangeDetails();\n    this._forEachBlocksInRange(0, this.displayValue.length, b => details.aggregate(b.pad(flags)));\n    return details;\n  }\n}\nMaskedPattern.DEFAULTS = {\n  ...Masked.DEFAULTS,\n  lazy: true,\n  placeholderChar: '_'\n};\nMaskedPattern.STOP_CHAR = '`';\nMaskedPattern.ESCAPE_CHAR = '\\\\';\nMaskedPattern.InputDefinition = PatternInputDefinition;\nMaskedPattern.FixedDefinition = PatternFixedDefinition;\nIMask.MaskedPattern = MaskedPattern;\n\n/** Pattern which accepts ranges */\nclass MaskedRange extends MaskedPattern {\n  /**\n    Optionally sets max length of pattern.\n    Used when pattern length is longer then `to` param length. Pads zeros at start in this case.\n  */\n\n  /** Min bound */\n\n  /** Max bound */\n\n  get _matchFrom() {\n    return this.maxLength - String(this.from).length;\n  }\n  constructor(opts) {\n    super(opts); // mask will be created in _update\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const {\n      to = this.to || 0,\n      from = this.from || 0,\n      maxLength = this.maxLength || 0,\n      autofix = this.autofix,\n      ...patternOpts\n    } = opts;\n    this.to = to;\n    this.from = from;\n    this.maxLength = Math.max(String(to).length, maxLength);\n    this.autofix = autofix;\n    const fromStr = String(this.from).padStart(this.maxLength, '0');\n    const toStr = String(this.to).padStart(this.maxLength, '0');\n    let sameCharsCount = 0;\n    while (sameCharsCount < toStr.length && toStr[sameCharsCount] === fromStr[sameCharsCount]) ++sameCharsCount;\n    patternOpts.mask = toStr.slice(0, sameCharsCount).replace(/0/g, '\\\\0') + '0'.repeat(this.maxLength - sameCharsCount);\n    super._update(patternOpts);\n  }\n  get isComplete() {\n    return super.isComplete && Boolean(this.value);\n  }\n  boundaries(str) {\n    let minstr = '';\n    let maxstr = '';\n    const [, placeholder, num] = str.match(/^(\\D*)(\\d*)(\\D*)/) || [];\n    if (num) {\n      minstr = '0'.repeat(placeholder.length) + num;\n      maxstr = '9'.repeat(placeholder.length) + num;\n    }\n    minstr = minstr.padEnd(this.maxLength, '0');\n    maxstr = maxstr.padEnd(this.maxLength, '9');\n    return [minstr, maxstr];\n  }\n  doPrepareChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    let details;\n    [ch, details] = super.doPrepareChar(ch.replace(/\\D/g, ''), flags);\n    if (!ch) details.skip = !this.isComplete;\n    return [ch, details];\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (!this.autofix || this.value.length + 1 > this.maxLength) return super._appendCharRaw(ch, flags);\n    const fromStr = String(this.from).padStart(this.maxLength, '0');\n    const toStr = String(this.to).padStart(this.maxLength, '0');\n    const [minstr, maxstr] = this.boundaries(this.value + ch);\n    if (Number(maxstr) < this.from) return super._appendCharRaw(fromStr[this.value.length], flags);\n    if (Number(minstr) > this.to) {\n      if (!flags.tail && this.autofix === 'pad' && this.value.length + 1 < this.maxLength) {\n        return super._appendCharRaw(fromStr[this.value.length], flags).aggregate(this._appendCharRaw(ch, flags));\n      }\n      return super._appendCharRaw(toStr[this.value.length], flags);\n    }\n    return super._appendCharRaw(ch, flags);\n  }\n  doValidate(flags) {\n    const str = this.value;\n    const firstNonZero = str.search(/[^0]/);\n    if (firstNonZero === -1 && str.length <= this._matchFrom) return true;\n    const [minstr, maxstr] = this.boundaries(str);\n    return this.from <= Number(maxstr) && Number(minstr) <= this.to && super.doValidate(flags);\n  }\n  pad(flags) {\n    const details = new ChangeDetails();\n    if (this.value.length === this.maxLength) return details;\n    const value = this.value;\n    const padLength = this.maxLength - this.value.length;\n    if (padLength) {\n      this.reset();\n      for (let i = 0; i < padLength; ++i) {\n        details.aggregate(super._appendCharRaw('0', flags));\n      }\n\n      // append tail\n      value.split('').forEach(ch => this._appendCharRaw(ch));\n    }\n    return details;\n  }\n}\nIMask.MaskedRange = MaskedRange;\n\nconst DefaultPattern = 'd{.}`m{.}`Y';\n\n// Make format and parse required when pattern is provided\n\n/** Date mask */\nclass MaskedDate extends MaskedPattern {\n  static extractPatternOptions(opts) {\n    const {\n      mask,\n      pattern,\n      ...patternOpts\n    } = opts;\n    return {\n      ...patternOpts,\n      mask: isString(mask) ? mask : pattern\n    };\n  }\n\n  /** Pattern mask for date according to {@link MaskedDate#format} */\n\n  /** Start date */\n\n  /** End date */\n\n  /** Format typed value to string */\n\n  /** Parse string to get typed value */\n\n  constructor(opts) {\n    super(MaskedDate.extractPatternOptions({\n      ...MaskedDate.DEFAULTS,\n      ...opts\n    }));\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const {\n      mask,\n      pattern,\n      blocks,\n      ...patternOpts\n    } = {\n      ...MaskedDate.DEFAULTS,\n      ...opts\n    };\n    const patternBlocks = Object.assign({}, MaskedDate.GET_DEFAULT_BLOCKS());\n    // adjust year block\n    if (opts.min) patternBlocks.Y.from = opts.min.getFullYear();\n    if (opts.max) patternBlocks.Y.to = opts.max.getFullYear();\n    if (opts.min && opts.max && patternBlocks.Y.from === patternBlocks.Y.to) {\n      patternBlocks.m.from = opts.min.getMonth() + 1;\n      patternBlocks.m.to = opts.max.getMonth() + 1;\n      if (patternBlocks.m.from === patternBlocks.m.to) {\n        patternBlocks.d.from = opts.min.getDate();\n        patternBlocks.d.to = opts.max.getDate();\n      }\n    }\n    Object.assign(patternBlocks, this.blocks, blocks);\n    super._update({\n      ...patternOpts,\n      mask: isString(mask) ? mask : pattern,\n      blocks: patternBlocks\n    });\n  }\n  doValidate(flags) {\n    const date = this.date;\n    return super.doValidate(flags) && (!this.isComplete || this.isDateExist(this.value) && date != null && (this.min == null || this.min <= date) && (this.max == null || date <= this.max));\n  }\n\n  /** Checks if date is exists */\n  isDateExist(str) {\n    return this.format(this.parse(str, this), this).indexOf(str) >= 0;\n  }\n\n  /** Parsed Date */\n  get date() {\n    return this.typedValue;\n  }\n  set date(date) {\n    this.typedValue = date;\n  }\n  get typedValue() {\n    return this.isComplete ? super.typedValue : null;\n  }\n  set typedValue(value) {\n    super.typedValue = value;\n  }\n  maskEquals(mask) {\n    return mask === Date || super.maskEquals(mask);\n  }\n  optionsIsChanged(opts) {\n    return super.optionsIsChanged(MaskedDate.extractPatternOptions(opts));\n  }\n}\nMaskedDate.GET_DEFAULT_BLOCKS = () => ({\n  d: {\n    mask: MaskedRange,\n    from: 1,\n    to: 31,\n    maxLength: 2\n  },\n  m: {\n    mask: MaskedRange,\n    from: 1,\n    to: 12,\n    maxLength: 2\n  },\n  Y: {\n    mask: MaskedRange,\n    from: 1900,\n    to: 9999\n  }\n});\nMaskedDate.DEFAULTS = {\n  ...MaskedPattern.DEFAULTS,\n  mask: Date,\n  pattern: DefaultPattern,\n  format: (date, masked) => {\n    if (!date) return '';\n    const day = String(date.getDate()).padStart(2, '0');\n    const month = String(date.getMonth() + 1).padStart(2, '0');\n    const year = date.getFullYear();\n    return [day, month, year].join('.');\n  },\n  parse: (str, masked) => {\n    const [day, month, year] = str.split('.').map(Number);\n    return new Date(year, month - 1, day);\n  }\n};\nIMask.MaskedDate = MaskedDate;\n\n/** Dynamic mask for choosing appropriate mask in run-time */\nclass MaskedDynamic extends Masked {\n  constructor(opts) {\n    super({\n      ...MaskedDynamic.DEFAULTS,\n      ...opts\n    });\n    this.currentMask = undefined;\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    super._update(opts);\n    if ('mask' in opts) {\n      this.exposeMask = undefined;\n      // mask could be totally dynamic with only `dispatch` option\n      this.compiledMasks = Array.isArray(opts.mask) ? opts.mask.map(m => {\n        const {\n          expose,\n          ...maskOpts\n        } = normalizeOpts(m);\n        const masked = createMask({\n          overwrite: this._overwrite,\n          eager: this._eager,\n          skipInvalid: this._skipInvalid,\n          ...maskOpts\n        });\n        if (expose) this.exposeMask = masked;\n        return masked;\n      }) : [];\n\n      // this.currentMask = this.doDispatch(''); // probably not needed but lets see\n    }\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const details = this._applyDispatch(ch, flags);\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendChar(ch, this.currentMaskFlags(flags)));\n    }\n    return details;\n  }\n  _applyDispatch(appended, flags, tail) {\n    if (appended === void 0) {\n      appended = '';\n    }\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (tail === void 0) {\n      tail = '';\n    }\n    const prevValueBeforeTail = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._value : this.value;\n    const inputValue = this.rawInputValue;\n    const insertValue = flags.tail && flags._beforeTailState != null ? flags._beforeTailState._rawInputValue : inputValue;\n    const tailValue = inputValue.slice(insertValue.length);\n    const prevMask = this.currentMask;\n    const details = new ChangeDetails();\n    const prevMaskState = prevMask == null ? void 0 : prevMask.state;\n\n    // clone flags to prevent overwriting `_beforeTailState`\n    this.currentMask = this.doDispatch(appended, {\n      ...flags\n    }, tail);\n\n    // restore state after dispatch\n    if (this.currentMask) {\n      if (this.currentMask !== prevMask) {\n        // if mask changed reapply input\n        this.currentMask.reset();\n        if (insertValue) {\n          this.currentMask.append(insertValue, {\n            raw: true\n          });\n          details.tailShift = this.currentMask.value.length - prevValueBeforeTail.length;\n        }\n        if (tailValue) {\n          details.tailShift += this.currentMask.append(tailValue, {\n            raw: true,\n            tail: true\n          }).tailShift;\n        }\n      } else if (prevMaskState) {\n        // Dispatch can do something bad with state, so\n        // restore prev mask state\n        this.currentMask.state = prevMaskState;\n      }\n    }\n    return details;\n  }\n  _appendPlaceholder() {\n    const details = this._applyDispatch();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendPlaceholder());\n    }\n    return details;\n  }\n  _appendEager() {\n    const details = this._applyDispatch();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask._appendEager());\n    }\n    return details;\n  }\n  appendTail(tail) {\n    const details = new ChangeDetails();\n    if (tail) details.aggregate(this._applyDispatch('', {}, tail));\n    return details.aggregate(this.currentMask ? this.currentMask.appendTail(tail) : super.appendTail(tail));\n  }\n  currentMaskFlags(flags) {\n    var _flags$_beforeTailSta, _flags$_beforeTailSta2;\n    return {\n      ...flags,\n      _beforeTailState: ((_flags$_beforeTailSta = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta.currentMaskRef) === this.currentMask && ((_flags$_beforeTailSta2 = flags._beforeTailState) == null ? void 0 : _flags$_beforeTailSta2.currentMask) || flags._beforeTailState\n    };\n  }\n  doDispatch(appended, flags, tail) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    if (tail === void 0) {\n      tail = '';\n    }\n    return this.dispatch(appended, this, flags, tail);\n  }\n  doValidate(flags) {\n    return super.doValidate(flags) && (!this.currentMask || this.currentMask.doValidate(this.currentMaskFlags(flags)));\n  }\n  doPrepare(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    let [s, details] = super.doPrepare(str, flags);\n    if (this.currentMask) {\n      let currentDetails;\n      [s, currentDetails] = super.doPrepare(s, this.currentMaskFlags(flags));\n      details = details.aggregate(currentDetails);\n    }\n    return [s, details];\n  }\n  doPrepareChar(str, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    let [s, details] = super.doPrepareChar(str, flags);\n    if (this.currentMask) {\n      let currentDetails;\n      [s, currentDetails] = super.doPrepareChar(s, this.currentMaskFlags(flags));\n      details = details.aggregate(currentDetails);\n    }\n    return [s, details];\n  }\n  reset() {\n    var _this$currentMask;\n    (_this$currentMask = this.currentMask) == null || _this$currentMask.reset();\n    this.compiledMasks.forEach(m => m.reset());\n  }\n  get value() {\n    return this.exposeMask ? this.exposeMask.value : this.currentMask ? this.currentMask.value : '';\n  }\n  set value(value) {\n    if (this.exposeMask) {\n      this.exposeMask.value = value;\n      this.currentMask = this.exposeMask;\n      this._applyDispatch();\n    } else super.value = value;\n  }\n  get unmaskedValue() {\n    return this.exposeMask ? this.exposeMask.unmaskedValue : this.currentMask ? this.currentMask.unmaskedValue : '';\n  }\n  set unmaskedValue(unmaskedValue) {\n    if (this.exposeMask) {\n      this.exposeMask.unmaskedValue = unmaskedValue;\n      this.currentMask = this.exposeMask;\n      this._applyDispatch();\n    } else super.unmaskedValue = unmaskedValue;\n  }\n  get typedValue() {\n    return this.exposeMask ? this.exposeMask.typedValue : this.currentMask ? this.currentMask.typedValue : '';\n  }\n  set typedValue(typedValue) {\n    if (this.exposeMask) {\n      this.exposeMask.typedValue = typedValue;\n      this.currentMask = this.exposeMask;\n      this._applyDispatch();\n      return;\n    }\n    let unmaskedValue = String(typedValue);\n\n    // double check it\n    if (this.currentMask) {\n      this.currentMask.typedValue = typedValue;\n      unmaskedValue = this.currentMask.unmaskedValue;\n    }\n    this.unmaskedValue = unmaskedValue;\n  }\n  get displayValue() {\n    return this.currentMask ? this.currentMask.displayValue : '';\n  }\n  get isComplete() {\n    var _this$currentMask2;\n    return Boolean((_this$currentMask2 = this.currentMask) == null ? void 0 : _this$currentMask2.isComplete);\n  }\n  get isFilled() {\n    var _this$currentMask3;\n    return Boolean((_this$currentMask3 = this.currentMask) == null ? void 0 : _this$currentMask3.isFilled);\n  }\n  remove(fromPos, toPos) {\n    const details = new ChangeDetails();\n    if (this.currentMask) {\n      details.aggregate(this.currentMask.remove(fromPos, toPos))\n      // update with dispatch\n      .aggregate(this._applyDispatch());\n    }\n    return details;\n  }\n  get state() {\n    var _this$currentMask4;\n    return {\n      ...super.state,\n      _rawInputValue: this.rawInputValue,\n      compiledMasks: this.compiledMasks.map(m => m.state),\n      currentMaskRef: this.currentMask,\n      currentMask: (_this$currentMask4 = this.currentMask) == null ? void 0 : _this$currentMask4.state\n    };\n  }\n  set state(state) {\n    const {\n      compiledMasks,\n      currentMaskRef,\n      currentMask,\n      ...maskedState\n    } = state;\n    if (compiledMasks) this.compiledMasks.forEach((m, mi) => m.state = compiledMasks[mi]);\n    if (currentMaskRef != null) {\n      this.currentMask = currentMaskRef;\n      this.currentMask.state = currentMask;\n    }\n    super.state = maskedState;\n  }\n  extractInput(fromPos, toPos, flags) {\n    return this.currentMask ? this.currentMask.extractInput(fromPos, toPos, flags) : '';\n  }\n  extractTail(fromPos, toPos) {\n    return this.currentMask ? this.currentMask.extractTail(fromPos, toPos) : super.extractTail(fromPos, toPos);\n  }\n  doCommit() {\n    if (this.currentMask) this.currentMask.doCommit();\n    super.doCommit();\n  }\n  nearestInputPos(cursorPos, direction) {\n    return this.currentMask ? this.currentMask.nearestInputPos(cursorPos, direction) : super.nearestInputPos(cursorPos, direction);\n  }\n  get overwrite() {\n    return this.currentMask ? this.currentMask.overwrite : this._overwrite;\n  }\n  set overwrite(overwrite) {\n    this._overwrite = overwrite;\n  }\n  get eager() {\n    return this.currentMask ? this.currentMask.eager : this._eager;\n  }\n  set eager(eager) {\n    this._eager = eager;\n  }\n  get skipInvalid() {\n    return this.currentMask ? this.currentMask.skipInvalid : this._skipInvalid;\n  }\n  set skipInvalid(skipInvalid) {\n    this._skipInvalid = skipInvalid;\n  }\n  get autofix() {\n    return this.currentMask ? this.currentMask.autofix : this._autofix;\n  }\n  set autofix(autofix) {\n    this._autofix = autofix;\n  }\n  maskEquals(mask) {\n    return Array.isArray(mask) ? this.compiledMasks.every((m, mi) => {\n      if (!mask[mi]) return;\n      const {\n        mask: oldMask,\n        ...restOpts\n      } = mask[mi];\n      return objectIncludes(m, restOpts) && m.maskEquals(oldMask);\n    }) : super.maskEquals(mask);\n  }\n  typedValueEquals(value) {\n    var _this$currentMask5;\n    return Boolean((_this$currentMask5 = this.currentMask) == null ? void 0 : _this$currentMask5.typedValueEquals(value));\n  }\n}\n/** Currently chosen mask */\n/** Currently chosen mask */\n/** Compliled {@link Masked} options */\n/** Chooses {@link Masked} depending on input value */\nMaskedDynamic.DEFAULTS = {\n  ...Masked.DEFAULTS,\n  dispatch: (appended, masked, flags, tail) => {\n    if (!masked.compiledMasks.length) return;\n    const inputValue = masked.rawInputValue;\n\n    // simulate input\n    const inputs = masked.compiledMasks.map((m, index) => {\n      const isCurrent = masked.currentMask === m;\n      const startInputPos = isCurrent ? m.displayValue.length : m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT);\n      if (m.rawInputValue !== inputValue) {\n        m.reset();\n        m.append(inputValue, {\n          raw: true\n        });\n      } else if (!isCurrent) {\n        m.remove(startInputPos);\n      }\n      m.append(appended, masked.currentMaskFlags(flags));\n      m.appendTail(tail);\n      return {\n        index,\n        weight: m.rawInputValue.length,\n        totalInputPositions: m.totalInputPositions(0, Math.max(startInputPos, m.nearestInputPos(m.displayValue.length, DIRECTION.FORCE_LEFT)))\n      };\n    });\n\n    // pop masks with longer values first\n    inputs.sort((i1, i2) => i2.weight - i1.weight || i2.totalInputPositions - i1.totalInputPositions);\n    return masked.compiledMasks[inputs[0].index];\n  }\n};\nIMask.MaskedDynamic = MaskedDynamic;\n\n/** Pattern which validates enum values */\nclass MaskedEnum extends MaskedPattern {\n  constructor(opts) {\n    super({\n      ...MaskedEnum.DEFAULTS,\n      ...opts\n    }); // mask will be created in _update\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    const {\n      enum: enum_,\n      ...eopts\n    } = opts;\n    if (enum_) {\n      const lengths = enum_.map(e => e.length);\n      const requiredLength = Math.min(...lengths);\n      const optionalLength = Math.max(...lengths) - requiredLength;\n      eopts.mask = '*'.repeat(requiredLength);\n      if (optionalLength) eopts.mask += '[' + '*'.repeat(optionalLength) + ']';\n      this.enum = enum_;\n    }\n    super._update(eopts);\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const matchFrom = Math.min(this.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n    const matches = this.enum.filter(e => this.matchValue(e, this.unmaskedValue + ch, matchFrom));\n    if (matches.length) {\n      if (matches.length === 1) {\n        this._forEachBlocksInRange(0, this.value.length, (b, bi) => {\n          const mch = matches[0][bi];\n          if (bi >= this.value.length || mch === b.value) return;\n          b.reset();\n          b._appendChar(mch, flags);\n        });\n      }\n      const d = super._appendCharRaw(matches[0][this.value.length], flags);\n      if (matches.length === 1) {\n        matches[0].slice(this.unmaskedValue.length).split('').forEach(mch => d.aggregate(super._appendCharRaw(mch)));\n      }\n      return d;\n    }\n    return new ChangeDetails({\n      skip: !this.isComplete\n    });\n  }\n  extractTail(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    // just drop tail\n    return new ContinuousTailDetails('', fromPos);\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    if (fromPos === toPos) return new ChangeDetails();\n    const matchFrom = Math.min(super.nearestInputPos(0, DIRECTION.FORCE_RIGHT), this.value.length);\n    let pos;\n    for (pos = fromPos; pos >= 0; --pos) {\n      const matches = this.enum.filter(e => this.matchValue(e, this.value.slice(matchFrom, pos), matchFrom));\n      if (matches.length > 1) break;\n    }\n    const details = super.remove(pos, toPos);\n    details.tailShift += pos - fromPos;\n    return details;\n  }\n  get isComplete() {\n    return this.enum.indexOf(this.value) >= 0;\n  }\n}\n/** Match enum value */\nMaskedEnum.DEFAULTS = {\n  ...MaskedPattern.DEFAULTS,\n  matchValue: (estr, istr, matchFrom) => estr.indexOf(istr, matchFrom) === matchFrom\n};\nIMask.MaskedEnum = MaskedEnum;\n\n/** Masking by custom Function */\nclass MaskedFunction extends Masked {\n  /** */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    super._update({\n      ...opts,\n      validate: opts.mask\n    });\n  }\n}\nIMask.MaskedFunction = MaskedFunction;\n\nvar _MaskedNumber;\n/** Number mask */\nclass MaskedNumber extends Masked {\n  /** Single char */\n\n  /** Single char */\n\n  /** Array of single chars */\n\n  /** */\n\n  /** */\n\n  /** Digits after point */\n\n  /** Flag to remove leading and trailing zeros in the end of editing */\n\n  /** Flag to pad trailing zeros after point in the end of editing */\n\n  /** Enable characters overwriting */\n\n  /** */\n\n  /** */\n\n  /** */\n\n  /** Format typed value to string */\n\n  /** Parse string to get typed value */\n\n  constructor(opts) {\n    super({\n      ...MaskedNumber.DEFAULTS,\n      ...opts\n    });\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    super._update(opts);\n    this._updateRegExps();\n  }\n  _updateRegExps() {\n    const start = '^' + (this.allowNegative ? '[+|\\\\-]?' : '');\n    const mid = '\\\\d*';\n    const end = (this.scale ? \"(\" + escapeRegExp(this.radix) + \"\\\\d{0,\" + this.scale + \"})?\" : '') + '$';\n    this._numberRegExp = new RegExp(start + mid + end);\n    this._mapToRadixRegExp = new RegExp(\"[\" + this.mapToRadix.map(escapeRegExp).join('') + \"]\", 'g');\n    this._thousandsSeparatorRegExp = new RegExp(escapeRegExp(this.thousandsSeparator), 'g');\n  }\n  _removeThousandsSeparators(value) {\n    return value.replace(this._thousandsSeparatorRegExp, '');\n  }\n  _insertThousandsSeparators(value) {\n    // https://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript\n    const parts = value.split(this.radix);\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandsSeparator);\n    return parts.join(this.radix);\n  }\n  doPrepareChar(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const [prepCh, details] = super.doPrepareChar(this._removeThousandsSeparators(this.scale && this.mapToRadix.length && (\n    /*\n      radix should be mapped when\n      1) input is done from keyboard = flags.input && flags.raw\n      2) unmasked value is set = !flags.input && !flags.raw\n      and should not be mapped when\n      1) value is set = flags.input && !flags.raw\n      2) raw value is set = !flags.input && flags.raw\n    */\n    flags.input && flags.raw || !flags.input && !flags.raw) ? ch.replace(this._mapToRadixRegExp, this.radix) : ch), flags);\n    if (ch && !prepCh) details.skip = true;\n    if (prepCh && !this.allowPositive && !this.value && prepCh !== '-') details.aggregate(this._appendChar('-'));\n    return [prepCh, details];\n  }\n  _separatorsCount(to, extendOnSeparators) {\n    if (extendOnSeparators === void 0) {\n      extendOnSeparators = false;\n    }\n    let count = 0;\n    for (let pos = 0; pos < to; ++pos) {\n      if (this._value.indexOf(this.thousandsSeparator, pos) === pos) {\n        ++count;\n        if (extendOnSeparators) to += this.thousandsSeparator.length;\n      }\n    }\n    return count;\n  }\n  _separatorsCountFromSlice(slice) {\n    if (slice === void 0) {\n      slice = this._value;\n    }\n    return this._separatorsCount(this._removeThousandsSeparators(slice).length, true);\n  }\n  extractInput(fromPos, toPos, flags) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n    return this._removeThousandsSeparators(super.extractInput(fromPos, toPos, flags));\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const prevBeforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n    const prevBeforeTailSeparatorsCount = this._separatorsCountFromSlice(prevBeforeTailValue);\n    this._value = this._removeThousandsSeparators(this.value);\n    const oldValue = this._value;\n    this._value += ch;\n    const num = this.number;\n    let accepted = !isNaN(num);\n    let skip = false;\n    if (accepted) {\n      let fixedNum;\n      if (this.min != null && this.min < 0 && this.number < this.min) fixedNum = this.min;\n      if (this.max != null && this.max > 0 && this.number > this.max) fixedNum = this.max;\n      if (fixedNum != null) {\n        if (this.autofix) {\n          this._value = this.format(fixedNum, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n          skip || (skip = oldValue === this._value && !flags.tail); // if not changed on tail it's still ok to proceed\n        } else {\n          accepted = false;\n        }\n      }\n      accepted && (accepted = Boolean(this._value.match(this._numberRegExp)));\n    }\n    let appendDetails;\n    if (!accepted) {\n      this._value = oldValue;\n      appendDetails = new ChangeDetails();\n    } else {\n      appendDetails = new ChangeDetails({\n        inserted: this._value.slice(oldValue.length),\n        rawInserted: skip ? '' : ch,\n        skip\n      });\n    }\n    this._value = this._insertThousandsSeparators(this._value);\n    const beforeTailValue = flags.tail && flags._beforeTailState ? flags._beforeTailState._value : this._value;\n    const beforeTailSeparatorsCount = this._separatorsCountFromSlice(beforeTailValue);\n    appendDetails.tailShift += (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length;\n    return appendDetails;\n  }\n  _findSeparatorAround(pos) {\n    if (this.thousandsSeparator) {\n      const searchFrom = pos - this.thousandsSeparator.length + 1;\n      const separatorPos = this.value.indexOf(this.thousandsSeparator, searchFrom);\n      if (separatorPos <= pos) return separatorPos;\n    }\n    return -1;\n  }\n  _adjustRangeWithSeparators(from, to) {\n    const separatorAroundFromPos = this._findSeparatorAround(from);\n    if (separatorAroundFromPos >= 0) from = separatorAroundFromPos;\n    const separatorAroundToPos = this._findSeparatorAround(to);\n    if (separatorAroundToPos >= 0) to = separatorAroundToPos + this.thousandsSeparator.length;\n    return [from, to];\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    [fromPos, toPos] = this._adjustRangeWithSeparators(fromPos, toPos);\n    const valueBeforePos = this.value.slice(0, fromPos);\n    const valueAfterPos = this.value.slice(toPos);\n    const prevBeforeTailSeparatorsCount = this._separatorsCount(valueBeforePos.length);\n    this._value = this._insertThousandsSeparators(this._removeThousandsSeparators(valueBeforePos + valueAfterPos));\n    const beforeTailSeparatorsCount = this._separatorsCountFromSlice(valueBeforePos);\n    return new ChangeDetails({\n      tailShift: (beforeTailSeparatorsCount - prevBeforeTailSeparatorsCount) * this.thousandsSeparator.length\n    });\n  }\n  nearestInputPos(cursorPos, direction) {\n    if (!this.thousandsSeparator) return cursorPos;\n    switch (direction) {\n      case DIRECTION.NONE:\n      case DIRECTION.LEFT:\n      case DIRECTION.FORCE_LEFT:\n        {\n          const separatorAtLeftPos = this._findSeparatorAround(cursorPos - 1);\n          if (separatorAtLeftPos >= 0) {\n            const separatorAtLeftEndPos = separatorAtLeftPos + this.thousandsSeparator.length;\n            if (cursorPos < separatorAtLeftEndPos || this.value.length <= separatorAtLeftEndPos || direction === DIRECTION.FORCE_LEFT) {\n              return separatorAtLeftPos;\n            }\n          }\n          break;\n        }\n      case DIRECTION.RIGHT:\n      case DIRECTION.FORCE_RIGHT:\n        {\n          const separatorAtRightPos = this._findSeparatorAround(cursorPos);\n          if (separatorAtRightPos >= 0) {\n            return separatorAtRightPos + this.thousandsSeparator.length;\n          }\n        }\n    }\n    return cursorPos;\n  }\n  doCommit() {\n    if (this.value) {\n      const number = this.number;\n      let validnum = number;\n\n      // check bounds\n      if (this.min != null) validnum = Math.max(validnum, this.min);\n      if (this.max != null) validnum = Math.min(validnum, this.max);\n      if (validnum !== number) this.unmaskedValue = this.format(validnum, this);\n      let formatted = this.value;\n      if (this.normalizeZeros) formatted = this._normalizeZeros(formatted);\n      if (this.padFractionalZeros && this.scale > 0) formatted = this._padFractionalZeros(formatted);\n      this._value = formatted;\n    }\n    super.doCommit();\n  }\n  _normalizeZeros(value) {\n    const parts = this._removeThousandsSeparators(value).split(this.radix);\n\n    // remove leading zeros\n    parts[0] = parts[0].replace(/^(\\D*)(0*)(\\d*)/, (match, sign, zeros, num) => sign + num);\n    // add leading zero\n    if (value.length && !/\\d$/.test(parts[0])) parts[0] = parts[0] + '0';\n    if (parts.length > 1) {\n      parts[1] = parts[1].replace(/0*$/, ''); // remove trailing zeros\n      if (!parts[1].length) parts.length = 1; // remove fractional\n    }\n    return this._insertThousandsSeparators(parts.join(this.radix));\n  }\n  _padFractionalZeros(value) {\n    if (!value) return value;\n    const parts = value.split(this.radix);\n    if (parts.length < 2) parts.push('');\n    parts[1] = parts[1].padEnd(this.scale, '0');\n    return parts.join(this.radix);\n  }\n  doSkipInvalid(ch, flags, checkTail) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const dropFractional = this.scale === 0 && ch !== this.thousandsSeparator && (ch === this.radix || ch === MaskedNumber.UNMASKED_RADIX || this.mapToRadix.includes(ch));\n    return super.doSkipInvalid(ch, flags, checkTail) && !dropFractional;\n  }\n  get unmaskedValue() {\n    return this._removeThousandsSeparators(this._normalizeZeros(this.value)).replace(this.radix, MaskedNumber.UNMASKED_RADIX);\n  }\n  set unmaskedValue(unmaskedValue) {\n    super.unmaskedValue = unmaskedValue;\n  }\n  get typedValue() {\n    return this.parse(this.unmaskedValue, this);\n  }\n  set typedValue(n) {\n    this.rawInputValue = this.format(n, this).replace(MaskedNumber.UNMASKED_RADIX, this.radix);\n  }\n\n  /** Parsed Number */\n  get number() {\n    return this.typedValue;\n  }\n  set number(number) {\n    this.typedValue = number;\n  }\n  get allowNegative() {\n    return this.min != null && this.min < 0 || this.max != null && this.max < 0;\n  }\n  get allowPositive() {\n    return this.min != null && this.min > 0 || this.max != null && this.max > 0;\n  }\n  typedValueEquals(value) {\n    // handle  0 -> '' case (typed = 0 even if value = '')\n    // for details see https://github.com/uNmAnNeR/imaskjs/issues/134\n    return (super.typedValueEquals(value) || MaskedNumber.EMPTY_VALUES.includes(value) && MaskedNumber.EMPTY_VALUES.includes(this.typedValue)) && !(value === 0 && this.value === '');\n  }\n}\n_MaskedNumber = MaskedNumber;\nMaskedNumber.UNMASKED_RADIX = '.';\nMaskedNumber.EMPTY_VALUES = [...Masked.EMPTY_VALUES, 0];\nMaskedNumber.DEFAULTS = {\n  ...Masked.DEFAULTS,\n  mask: Number,\n  radix: ',',\n  thousandsSeparator: '',\n  mapToRadix: [_MaskedNumber.UNMASKED_RADIX],\n  min: Number.MIN_SAFE_INTEGER,\n  max: Number.MAX_SAFE_INTEGER,\n  scale: 2,\n  normalizeZeros: true,\n  padFractionalZeros: false,\n  parse: Number,\n  format: n => n.toLocaleString('en-US', {\n    useGrouping: false,\n    maximumFractionDigits: 20\n  })\n};\nIMask.MaskedNumber = MaskedNumber;\n\n/** Mask pipe source and destination types */\nconst PIPE_TYPE = {\n  MASKED: 'value',\n  UNMASKED: 'unmaskedValue',\n  TYPED: 'typedValue'\n};\n/** Creates new pipe function depending on mask type, source and destination options */\nfunction createPipe(arg, from, to) {\n  if (from === void 0) {\n    from = PIPE_TYPE.MASKED;\n  }\n  if (to === void 0) {\n    to = PIPE_TYPE.MASKED;\n  }\n  const masked = createMask(arg);\n  return value => masked.runIsolated(m => {\n    m[from] = value;\n    return m[to];\n  });\n}\n\n/** Pipes value through mask depending on mask type, source and destination options */\nfunction pipe(value, mask, from, to) {\n  return createPipe(mask, from, to)(value);\n}\nIMask.PIPE_TYPE = PIPE_TYPE;\nIMask.createPipe = createPipe;\nIMask.pipe = pipe;\n\n/** Pattern mask */\nclass RepeatBlock extends MaskedPattern {\n  get repeatFrom() {\n    var _ref;\n    return (_ref = Array.isArray(this.repeat) ? this.repeat[0] : this.repeat === Infinity ? 0 : this.repeat) != null ? _ref : 0;\n  }\n  get repeatTo() {\n    var _ref2;\n    return (_ref2 = Array.isArray(this.repeat) ? this.repeat[1] : this.repeat) != null ? _ref2 : Infinity;\n  }\n  constructor(opts) {\n    super(opts);\n  }\n  updateOptions(opts) {\n    super.updateOptions(opts);\n  }\n  _update(opts) {\n    var _ref3, _ref4, _this$_blocks;\n    const {\n      repeat,\n      ...blockOpts\n    } = normalizeOpts(opts); // TODO type\n    this._blockOpts = Object.assign({}, this._blockOpts, blockOpts);\n    const block = createMask(this._blockOpts);\n    this.repeat = (_ref3 = (_ref4 = repeat != null ? repeat : block.repeat) != null ? _ref4 : this.repeat) != null ? _ref3 : Infinity; // TODO type\n\n    super._update({\n      mask: 'm'.repeat(Math.max(this.repeatTo === Infinity && ((_this$_blocks = this._blocks) == null ? void 0 : _this$_blocks.length) || 0, this.repeatFrom)),\n      blocks: {\n        m: block\n      },\n      eager: block.eager,\n      overwrite: block.overwrite,\n      skipInvalid: block.skipInvalid,\n      lazy: block.lazy,\n      placeholderChar: block.placeholderChar,\n      displayChar: block.displayChar\n    });\n  }\n  _allocateBlock(bi) {\n    if (bi < this._blocks.length) return this._blocks[bi];\n    if (this.repeatTo === Infinity || this._blocks.length < this.repeatTo) {\n      this._blocks.push(createMask(this._blockOpts));\n      this.mask += 'm';\n      return this._blocks[this._blocks.length - 1];\n    }\n  }\n  _appendCharRaw(ch, flags) {\n    if (flags === void 0) {\n      flags = {};\n    }\n    const details = new ChangeDetails();\n    for (let bi = (_this$_mapPosToBlock$ = (_this$_mapPosToBlock = this._mapPosToBlock(this.displayValue.length)) == null ? void 0 : _this$_mapPosToBlock.index) != null ? _this$_mapPosToBlock$ : Math.max(this._blocks.length - 1, 0), block, allocated;\n    // try to get a block or\n    // try to allocate a new block if not allocated already\n    block = (_this$_blocks$bi = this._blocks[bi]) != null ? _this$_blocks$bi : allocated = !allocated && this._allocateBlock(bi); ++bi) {\n      var _this$_mapPosToBlock$, _this$_mapPosToBlock, _this$_blocks$bi, _flags$_beforeTailSta;\n      const blockDetails = block._appendChar(ch, {\n        ...flags,\n        _beforeTailState: (_flags$_beforeTailSta = flags._beforeTailState) == null || (_flags$_beforeTailSta = _flags$_beforeTailSta._blocks) == null ? void 0 : _flags$_beforeTailSta[bi]\n      });\n      if (blockDetails.skip && allocated) {\n        // remove the last allocated block and break\n        this._blocks.pop();\n        this.mask = this.mask.slice(1);\n        break;\n      }\n      details.aggregate(blockDetails);\n      if (blockDetails.consumed) break; // go next char\n    }\n    return details;\n  }\n  _trimEmptyTail(fromPos, toPos) {\n    var _this$_mapPosToBlock2, _this$_mapPosToBlock3;\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    const firstBlockIndex = Math.max(((_this$_mapPosToBlock2 = this._mapPosToBlock(fromPos)) == null ? void 0 : _this$_mapPosToBlock2.index) || 0, this.repeatFrom, 0);\n    let lastBlockIndex;\n    if (toPos != null) lastBlockIndex = (_this$_mapPosToBlock3 = this._mapPosToBlock(toPos)) == null ? void 0 : _this$_mapPosToBlock3.index;\n    if (lastBlockIndex == null) lastBlockIndex = this._blocks.length - 1;\n    let removeCount = 0;\n    for (let blockIndex = lastBlockIndex; firstBlockIndex <= blockIndex; --blockIndex, ++removeCount) {\n      if (this._blocks[blockIndex].unmaskedValue) break;\n    }\n    if (removeCount) {\n      this._blocks.splice(lastBlockIndex - removeCount + 1, removeCount);\n      this.mask = this.mask.slice(removeCount);\n    }\n  }\n  reset() {\n    super.reset();\n    this._trimEmptyTail();\n  }\n  remove(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos === void 0) {\n      toPos = this.displayValue.length;\n    }\n    const removeDetails = super.remove(fromPos, toPos);\n    this._trimEmptyTail(fromPos, toPos);\n    return removeDetails;\n  }\n  totalInputPositions(fromPos, toPos) {\n    if (fromPos === void 0) {\n      fromPos = 0;\n    }\n    if (toPos == null && this.repeatTo === Infinity) return Infinity;\n    return super.totalInputPositions(fromPos, toPos);\n  }\n  get state() {\n    return super.state;\n  }\n  set state(state) {\n    this._blocks.length = state._blocks.length;\n    this.mask = this.mask.slice(0, this._blocks.length);\n    super.state = state;\n  }\n}\nIMask.RepeatBlock = RepeatBlock;\n\ntry {\n  globalThis.IMask = IMask;\n} catch {}\n\n// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\nclass AuroInputUtilities {\n\n  /**\n   * Configures the mask to be used on the input element based on format and/or type.\n   * IMask tool documentation: https://imask.js.org/.\n   * @private\n   * @param {string} type - The input type.\n   * @param {string} format - The format of the mask to apply.\n   * @returns {void}\n   */\n  getMaskOptions(type, format) {\n    if (type) {\n      if (type === 'credit-card') {\n        return {\n          mask: format || '0000 0000 0000 0000',\n          placeholderChar: '',\n          lazy: true,\n          overwrite: false\n        };\n      }\n\n      if (type === 'tel') {\n        return {\n          mask: format || '+1 (000) 000-0000',\n          placeholderChar: '',\n          lazy: true,\n          overwrite: false\n        };\n      }\n\n      if (type === 'date') {\n        const dateFormat = format || 'mm/dd/yyyy';\n\n        if (dateFormat === 'dd' || dateFormat === 'yy' || dateFormat === 'yyyy') {\n          const maxValue = dateFormat === 'dd' ? 31 : (dateFormat === 'yy' ? 99 : 9999);\n          return {\n            mask: IMask.MaskedRange,\n            from: 1,\n            to: maxValue,\n            lazy: true,\n            placeholderChar: '',\n            format(value) {\n              return value.toString().padStart(dateFormat.length, '0');\n            },\n            parse(str) {\n              return parseInt(str) || null;\n            }\n          };\n        }\n\n        const blocks = {};\n\n        if (dateFormat.includes('yyyy')) {\n          blocks.yyyy = { mask: IMask.MaskedRange, from: 1900, to: 2100 };\n        }\n\n        if (dateFormat.includes('yy')) {\n          blocks.yy = { mask: IMask.MaskedRange, from: 0, to: 99 };\n        }\n\n        if (dateFormat.includes('mm')) {\n          blocks.mm = { mask: IMask.MaskedRange, from: 1, to: 12 };\n        }\n\n        if (dateFormat.includes('dd')) {\n          blocks.dd = { mask: IMask.MaskedRange, from: 1, to: 31 };\n        }\n\n        return {\n          mask: Date,\n          pattern: dateFormat,\n          blocks,\n          format(date) {\n            if (!date) {\n              return '';\n            }\n\n            const day = date.getDate()\n              .toString()\n              .padStart(2, '0');\n            const month = (date.getMonth() + 1)\n              .toString()\n              .padStart(2, '0');\n            const year = date\n              .getFullYear()\n              .toString();\n            const shortYear = year.slice(-2);\n\n            let formattedDate = this.mask;\n\n            if (formattedDate.includes('dd')) {\n              formattedDate = formattedDate.replace('dd', day);\n            }\n\n            if (formattedDate.includes('mm')) {\n              formattedDate = formattedDate.replace('mm', month);\n            }\n\n            if (formattedDate.includes('yyyy')) {\n              formattedDate = formattedDate.replace('yyyy', year);\n            }\n\n            if (formattedDate.includes('yy')) {\n              formattedDate = formattedDate.replace('yy', shortYear);\n            }\n\n            return formattedDate;\n          },\n          parse(str) {\n            if (!str) {\n              return null;\n            }\n\n            const parts = str.split('/');\n            const formatParts = this.mask.split('/');\n\n            let day = 1, month, year = new Date().getFullYear();\n\n            formatParts.forEach((part, index) => {\n              if (part === 'dd') {\n                day = parseInt(parts[index]) || 1;\n              }\n\n              if (part === 'mm') {\n                month = parseInt(parts[index]) - 1;\n              }\n\n              if (part === 'yyyy') {\n                year = parseInt(parts[index]);\n              }\n\n              if (part === 'yy') {\n                year = parseInt(parts[index]);\n                year = year <= 25 ? 2000 + year : 1900 + year;\n              }\n            });\n\n            if (isNaN(month) || isNaN(year)) {\n              return null;\n            }\n            return new Date(year, month, day);\n          },\n          lazy: true,\n          placeholderChar: ''\n        };\n      }\n    }\n\n    if (format) {\n      return {\n        mask: format,\n        placeholderChar: '',\n        lazy: true\n      };\n    }\n\n    return {};\n  }\n\n  /**\n   * @private\n   * @param {string} dateStr - Date string to format.\n   * @param {string} format - Date format to use.\n   * @returns {void}\n   */\n  toNorthAmericanFormat(dateStr, format) {\n    const parsedDate = this.parseDate(dateStr, format);\n\n    if (!parsedDate) {\n      return parsedDate;\n    }\n\n    const { month, day, year } = parsedDate;\n    const fullYear = (year && year.length === 2) ? `20${year}` : year;\n    const currentYear = new Date().getFullYear();\n\n    const dateParts = [];\n    if (month) {\n      dateParts.push(month);\n    }\n\n    if (day) {\n      dateParts.push(day);\n    }\n\n    if (year) {\n      dateParts.push(year);\n    }\n\n    const comparisonParts = [\n      month || '01',\n      day || '01',\n      fullYear || currentYear\n    ];\n\n    return {\n      formattedDate: dateParts.join('/'),\n      dateForComparison: comparisonParts.join('/')\n    };\n  }\n\n  /**\n   * @private\n   * @param {string} dateStr - Date string to parse.\n   * @param {string} format - Date format to parse.\n   * @returns {void}\n   */\n  parseDate(dateStr, format) {\n    const dateFormat = format || \"mm/dd/yyyy\";\n\n    // Define mappings for date components with named capture groups\n    const formatPatterns = {\n      'yyyy': '(?<year>\\\\d{4})',\n      'yy': '(?<year>\\\\d{2})',\n      'mm': '(?<month>\\\\d{2})',\n      'dd': '(?<day>\\\\d{2})'\n    };\n\n    // Escape slashes and replace format components with regex patterns\n    let regexPattern = dateFormat.replace(/(?:yyyy|yy|mm|dd)/gu, (match) => formatPatterns[match]);\n    regexPattern = `^${regexPattern}$`;\n\n    const regex = new RegExp(regexPattern, 'u');\n    const match = dateStr.match(regex);\n\n    if (match && match.groups) {\n      return {\n        year: match.groups.year,\n        month: match.groups.month,\n        day: match.groups.day\n      };\n    }\n\n    return undefined;\n  }\n}\n\nclass DateFormatter {\n\n  constructor() {\n\n    /**\n     * @description Parses a date string into its components.\n     * @param {string} dateStr - Date string to parse.\n     * @param {string} format - Date format to parse.\n     * @returns {Object<key[\"month\" | \"day\" | \"year\"]: number>|undefined}\n     */\n    this.parseDate = (dateStr, format = 'mm/dd/yyyy') => {\n\n      // Guard Clause: Date string is defined\n      if (!dateStr) {\n        return undefined;\n      }\n\n      // Assume the separator is a \"/\" a defined in our code base\n      const separator = '/';\n\n      // Get the parts of the date and format\n      const valueParts = dateStr.split(separator);\n      const formatParts = format.split(separator);\n\n      // Check if the value and format have the correct number of parts\n      if (valueParts.length !== formatParts.length) {\n        throw new Error('AuroDatepickerUtilities | parseDate: Date string and format length do not match');\n      }\n\n      // Holds the result to be returned\n      const result = formatParts.reduce((acc, part, index) => {\n        const value = valueParts[index];\n\n        if ((/m/iu).test(part)) {\n          acc.month = value;\n        } else if ((/d/iu).test(part)) {\n          acc.day = value;\n        } else if ((/y/iu).test(part)) {\n          acc.year = value;\n        }\n\n        return acc;\n      }, {});\n\n      // If we found all the parts, return the result\n      if (result.month && result.year) {\n        return result;\n      }\n\n      // Throw an error to let the dev know we were unable to parse the date string\n      throw new Error('AuroDatepickerUtilities | parseDate: Unable to parse date string');\n    };\n\n    /**\n     * Convert a date object to string format.\n     * @param {Object} date - Date to convert to string.\n     * @param {String} locale - Optional locale to use for the date string. Defaults to user's locale.\n     * @returns {String} Returns the date as a string.\n     */\n    this.getDateAsString = (date, locale = undefined) => date.toLocaleDateString(locale, {\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n    });\n\n    /**\n     * Converts a date string to a North American date format.\n     * @param {String} dateStr - Date to validate.\n     * @param {String} format - Date format to validate against.\n     * @returns {Boolean}\n     */\n    this.toNorthAmericanFormat = (dateStr, format) => {\n\n      if (format === 'mm/dd/yyyy') {\n        return dateStr;\n      }\n\n      const parsedDate = this.parseDate(dateStr, format);\n\n      if (!parsedDate) {\n        throw new Error('AuroDatepickerUtilities | toNorthAmericanFormat: Unable to parse date string');\n      }\n\n      const { month, day, year } = parsedDate;\n\n      const dateParts = [];\n      if (month) {\n        dateParts.push(month);\n      }\n\n      if (day) {\n        dateParts.push(day);\n      }\n\n      if (year) {\n        dateParts.push(year);\n      }\n\n      return dateParts.join('/');\n    };\n  }\n}\nconst dateFormatter = new DateFormatter();\n\n// filepath: dateConstraints.mjs\nconst DATE_UTIL_CONSTRAINTS = {\n  maxDay: 31,\n  maxMonth: 12,\n  maxYear: 2400,\n  minDay: 1,\n  minMonth: 1,\n  minYear: 1900,\n};\n\nclass AuroDateUtilitiesBase {\n\n  /**\n   * @description The maximum day value allowed by the various utilities in this class.\n   * @readonly\n   * @type {Number}\n   */\n  get maxDay() {\n    return DATE_UTIL_CONSTRAINTS.maxDay;\n  }\n\n  /**\n   * @description The maximum month value allowed by the various utilities in this class.\n   * @readonly\n   * @type {Number}\n   */\n  get maxMonth() {\n    return DATE_UTIL_CONSTRAINTS.maxMonth;\n  }\n\n  /**\n   * @description The maximum year value allowed by the various utilities in this class.\n   * @readonly\n   * @type {Number}\n   */\n  get maxYear() {\n    return DATE_UTIL_CONSTRAINTS.maxYear;\n  }\n\n  /**\n   * @description The minimum day value allowed by the various utilities in this class.\n   * @readonly\n   * @type {Number}\n   */\n  get minDay() {\n    return DATE_UTIL_CONSTRAINTS.minDay;\n  }\n\n  /**\n   * @description The minimum month value allowed by the various utilities in this class.\n   * @readonly\n   * @type {Number}\n   */\n  get minMonth() {\n    return DATE_UTIL_CONSTRAINTS.minMonth;\n  }\n\n  /**\n   * @description The minimum year value allowed by the various utilities in this class.\n   * @readonly\n   * @type {Number}\n   */\n  get minYear() {\n    return DATE_UTIL_CONSTRAINTS.minYear;\n  }\n}\n\n/* eslint-disable no-magic-numbers */\n\nclass AuroDateUtilities extends AuroDateUtilitiesBase {\n\n  /**\n   * Returns the current century.\n   * @returns {String} The current century.\n   */\n  getCentury () {\n    return String(new Date().getFullYear()).slice(0, 2);\n  }\n\n  /**\n   * Returns a four digit year.\n   * @param {String} year - The year to convert to four digits.\n   * @returns {String} The four digit year.\n   */\n  getFourDigitYear (year) {\n\n    const strYear = String(year).trim();\n    return strYear.length <= 2 ? this.getCentury() + strYear : strYear;\n  }\n\n  constructor() {\n\n    super();\n\n    /**\n     * Compares two dates to see if they match.\n     * @param {Object} date1 - First date to compare.\n     * @param {Object} date2 - Second date to compare.\n     * @returns {Boolean} Returns true if the dates match.\n     */\n    this.datesMatch = (date1, date2) => new Date(date1).getTime() === new Date(date2).getTime();\n\n    /**\n     * Returns true if value passed in is a valid date.\n     * @param {String} date - Date to validate.\n     * @param {String} format - Date format to validate against.\n     * @returns {Boolean}\n     */\n    this.validDateStr = (date, format) => {\n\n      // The length we expect the date string to be\n      const dateStrLength = format.length;\n\n      // Guard Clause: Date and format are defined\n      if (typeof date === \"undefined\" || typeof format === \"undefined\") {\n        throw new Error('AuroDatepickerUtilities | validateDateStr: Date and format are required');\n      }\n\n      // Guard Clause: Date should be of type string\n      if (typeof date !== \"string\") {\n        throw new Error('AuroDatepickerUtilities | validateDateStr: Date must be a string');\n      }\n\n      // Guard Clause: Format should be of type string\n      if (typeof format !== \"string\") {\n        throw new Error('AuroDatepickerUtilities | validateDateStr: Format must be a string');\n      }\n\n      // Guard Clause: Length is what we expect it to be\n      if (date.length !== dateStrLength) {\n        return false;\n      }\n      // Get a formatted date string and parse it\n      const dateParts = dateFormatter.parseDate(date, format);\n\n      // Guard Clause: Date parse succeeded\n      if (!dateParts) {\n        return false;\n      }\n\n      // Create the expected date string based on the date parts\n      const expectedDateStr = `${dateParts.month}/${dateParts.day || \"01\"}/${this.getFourDigitYear(dateParts.year)}`;\n\n      // Generate a date object that we will extract a string date from to compare to the passed in date string\n      const dateObj = new Date(this.getFourDigitYear(dateParts.year), dateParts.month - 1, dateParts.day || 1);\n\n      // Get the date string of the date object we created from the string date\n      const actualDateStr = dateFormatter.getDateAsString(dateObj, \"en-US\");\n\n      // Guard Clause: Generated date matches date string input\n      if (expectedDateStr !== actualDateStr) {\n        return false;\n      }\n\n      // If we passed all other checks, we can assume the date is valid\n      return true;\n    };\n\n    /**\n     * Determines if a string date value matches the format provided.\n     * @param {string} value = The date string value.\n     * @param { string} format = The date format to match against.\n     * @returns {boolean}\n     */\n    this.dateAndFormatMatch = (value, format) => {\n\n      // Ensure we have both values we need to do the comparison\n      if (!value || !format) {\n        throw new Error('AuroFormValidation | dateFormatMatch: value and format are required');\n      }\n\n      // If the lengths are different, they cannot match\n      if (value.length !== format.length) {\n        return false;\n      }\n\n      // Get the parts of the date\n      const dateParts = dateFormatter.parseDate(value, format);\n\n      // Validator for day\n      const dayValueIsValid = (day) => {\n\n        // Guard clause: if there is no day in the dateParts, we can ignore this check.\n        if (!dateParts.day) {\n          return true;\n        }\n\n        // Guard clause: ensure day exists.\n        if (!day) {\n          return false;\n        }\n\n        // Convert day to number\n        const numDay = Number.parseInt(day, 10);\n\n        // Guard clause: ensure day is a valid integer\n        if (Number.isNaN(numDay)) {\n          throw new Error('AuroDatepickerUtilities | dayValueIsValid: Unable to parse day value integer');\n        }\n\n        // Guard clause: ensure day is within the valid range\n        if (numDay < this.minDay || numDay > this.maxDay) {\n          return false;\n        }\n\n        // Default return\n        return true;\n      };\n\n      // Validator for month\n      const monthValueIsValid = (month) => {\n\n        // Guard clause: ensure month exists.\n        if (!month) {\n          return false;\n        }\n\n        // Convert month to number\n        const numMonth = Number.parseInt(month, 10);\n\n        // Guard clause: ensure month is a valid integer\n        if (Number.isNaN(numMonth)) {\n          throw new Error('AuroDatepickerUtilities | monthValueIsValid: Unable to parse month value integer');\n        }\n\n        // Guard clause: ensure month is within the valid range\n        if (numMonth < this.minMonth || numMonth > this.maxMonth) {\n          return false;\n        }\n\n        // Default return\n        return true;\n      };\n\n      // Validator for year\n      const yearIsValid = (_year) => {\n\n        // Guard clause: ensure year exists.\n        if (!_year) {\n          return false;\n        }\n\n        // Get the full year\n        const year = this.getFourDigitYear(_year);\n\n        // Convert year to number\n        const numYear = Number.parseInt(year, 10);\n\n        // Guard clause: ensure year is a valid integer\n        if (Number.isNaN(numYear)) {\n          throw new Error('AuroDatepickerUtilities | yearValueIsValid: Unable to parse year value integer');\n        }\n\n        // Guard clause: ensure year is within the valid range\n        if (numYear < this.minYear || numYear > this.maxYear) {\n          return false;\n        }\n\n        // Default return\n        return true;\n      };\n\n      // Self-contained checks for month, day, and year\n      const checks = [\n        monthValueIsValid(dateParts.month),\n        dayValueIsValid(dateParts.day),\n        yearIsValid(dateParts.year)\n      ];\n\n      // If any of the checks failed, the date format does not match and the result is invalid\n      const isValid = checks.every((check) => check === true);\n\n      //  If the check is invalid, return false\n      if (!isValid) {\n        return false;\n      }\n\n      // Default case\n      return true;\n    };\n  }\n}\n\n// Export a class instance\nconst dateUtilities = new AuroDateUtilities();\n\n// Export the class instance methods individually\nconst {\n  datesMatch,\n  validDateStr,\n  dateAndFormatMatch,\n  minDay,\n  minMonth,\n  minYear,\n  maxDay,\n  maxMonth,\n  maxYear\n} = dateUtilities;\n\nconst {\n  toNorthAmericanFormat,\n  parseDate,\n  getDateAsString\n} = dateFormatter;\n\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n// ---------------------------------------------------------------------\n\n/* eslint-disable line-comment-position, no-inline-comments, no-confusing-arrow, no-nested-ternary, implicit-arrow-linebreak */\n\nlet AuroLibraryRuntimeUtils$3 = class AuroLibraryRuntimeUtils {\n\n  /* eslint-disable jsdoc/require-param */\n\n  /**\n   * This will register a new custom element with the browser.\n   * @param {String} name - The name of the custom element.\n   * @param {Object} componentClass - The class to register as a custom element.\n   * @returns {void}\n   */\n  registerComponent(name, componentClass) {\n    if (!customElements.get(name)) {\n      customElements.define(name, class extends componentClass {});\n    }\n  }\n\n  /**\n   * Finds and returns the closest HTML Element based on a selector.\n   * @returns {void}\n   */\n  closestElement(\n    selector, // selector like in .closest()\n    base = this, // extra functionality to skip a parent\n    __Closest = (el, found = el && el.closest(selector)) =>\n      !el || el === document || el === window\n        ? null // standard .closest() returns null for non-found selectors also\n        : found\n          ? found // found a selector INside this element\n          : __Closest(el.getRootNode().host) // recursion!! break out to parent DOM\n  ) {\n    return __Closest(base);\n  }\n  /* eslint-enable jsdoc/require-param */\n\n  /**\n   * If the element passed is registered with a different tag name than what is passed in, the tag name is added as an attribute to the element.\n   * @param {Object} elem - The element to check.\n   * @param {String} tagName - The name of the Auro component to check for or add as an attribute.\n   * @returns {void}\n   */\n  handleComponentTagRename(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    if (elemTag !== tag) {\n      elem.setAttribute(tag, true);\n    }\n  }\n\n  /**\n   * Validates if an element is a specific Auro component.\n   * @param {Object} elem - The element to validate.\n   * @param {String} tagName - The name of the Auro component to check against.\n   * @returns {Boolean} - Returns true if the element is the specified Auro component.\n   */\n  elementMatch(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    return elemTag === tag || elem.hasAttribute(tag);\n  }\n};\n\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\nclass AuroFormValidation {\n\n  constructor() {\n    this.runtimeUtils = new AuroLibraryRuntimeUtils$3();\n  }\n\n  /**\n   * Resets the element to its initial state.\n   * @private\n   * @param {object} elem - HTML element to reset.\n   * @returns {void}\n   */\n  reset(elem) {\n    elem.validity = undefined;\n    elem.value = undefined;\n    elem.touched = false;\n\n    // Resets the second value of the datepicker in range state\n    if (elem.valueEnd) {\n      elem.valueEnd = undefined;\n    }\n\n    // Resets selected option of element\n    if (elem.optionSelected) {\n      elem.optionSelected = undefined;\n    }\n\n    // Runs validation to handle error attribute\n    this.validate(elem);\n  }\n\n  /**\n   * Validates the attributes of a given element based on predefined validation rules.\n   *\n   * @param {HTMLElement} elem - The element to be validated.\n   * @returns {void}\n   *\n   * @example\n   * // Assuming `inputElement` is a reference to an input element in the DOM\n   * validateElementAttributes(inputElement);\n   *\n   * The function checks the element's attributes against the validation rules defined for 'input' and 'counter' types.\n   * If a validation rule is violated, it sets the element's validity state and error message accordingly.\n   *\n   * Validation rules:\n   * - input:\n   *   - length:\n   *     - tooShort: Checks if the value length is less than the minimum length.\n   *     - tooLong: Checks if the value length exceeds the maximum length.\n   *   - pattern:\n   *     - patternMismatch: Checks if the value does not match the specified pattern.\n   * - counter:\n   *   - range:\n   *     - rangeOverflow: Checks if the value exceeds the maximum value.\n   *     - rangeUnderflow: Checks if the value is less than the minimum value.\n   */\n  validateElementAttributes(elem) {\n    const validationRules = {\n      input: {\n        length: [\n          {\n            check: (e) => e.value?.length > 0 && e.value?.length < e.minLength,\n            validity: 'tooShort',\n            message: e => e.getAttribute('setCustomValidityTooShort') || e.setCustomValidity || ''\n          },\n          {\n            check: (e) => e.value?.length > e.maxLength,\n            validity: 'tooLong',\n            message: e => e.getAttribute('setCustomValidityTooLong') || e.setCustomValidity || ''\n          }\n        ],\n        pattern: [\n          {\n            check: (e) => e.pattern && !new RegExp(`^${e.pattern}$`, 'u').test(e.value),\n            validity: 'patternMismatch',\n            message: e => e.getAttribute('setCustomValidityPatternMismatch') || e.setCustomValidity || ''\n          }\n        ]\n      },\n      counter: {\n        range: [\n          {\n            check: (e) => e.max !== undefined && Number(e.max) < Number(e.value),\n            validity: 'rangeOverflow',\n            message: e => e.getAttribute('setCustomValidityRangeOverflow') || ''\n          },\n          {\n            check: (e) => e.min !== undefined && Number(e.min) > Number(e.value),\n            validity: 'rangeUnderflow',\n            message: e => e.getAttribute('setCustomValidityRangeUnderflow') || ''\n          }\n        ]\n      }\n    };\n\n    let elementType;\n    if (this.runtimeUtils.elementMatch(elem, 'auro-input')) {\n      elementType = 'input';\n    } else if (this.runtimeUtils.elementMatch(elem, 'auro-counter') || this.runtimeUtils.elementMatch(elem, 'auro-counter-group')) {\n      elementType = 'counter';\n    }\n\n    if (elementType) {\n      const rules = validationRules[elementType];\n\n      if (rules) {\n        Object.values(rules).flat().forEach(rule => {\n          if (rule.check(elem)) {\n            elem.validity = rule.validity;\n            elem.errorMessage = rule.message(elem);\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * Determines the validity state of the element based on the type attribute.\n   * @private\n   * @param {object} elem - HTML element to validate.\n   * @returns {void}\n   */\n  validateType(elem) {\n    if (elem.hasAttribute('type')) {\n      if (elem.type === 'email') {\n        const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/; // eslint-disable-line require-unicode-regexp\n\n        if (!elem.value.match(emailRegex)) {\n          elem.validity = 'patternMismatch';\n          elem.errorMessage = elem.setCustomValidityForType || elem.setCustomValidity || '';\n          return;\n        }\n      } else if (elem.type === 'credit-card') {\n        if (elem.value.length > 0 && elem.value.length < elem.validationCCLength) {\n          elem.validity = 'tooShort';\n          elem.errorMessage = elem.setCustomValidityForType || elem.setCustomValidity || '';\n          return;\n        }\n      } else if (elem.type === 'number') {\n        if (elem.max !== undefined && Number(elem.max) < Number(elem.value)) {\n          elem.validity = 'rangeOverflow';\n          elem.errorMessage = elem.setCustomValidityRangeOverflow || elem.setCustomValidity || '';\n          return;\n        }\n\n        if (elem.min !== undefined && elem.value?.length > 0 && Number(elem.min) > Number(elem.value)) {\n          elem.validity = 'rangeUnderflow';\n          elem.errorMessage = elem.setCustomValidityRangeUnderflow || elem.setCustomValidity || '';\n          return;\n        }\n      } else if (elem.type === 'date' && elem.value?.length > 0) {\n\n        // Guard Clause: if the value is too short\n        if (elem.value?.length < elem.lengthForType) {\n          \n          elem.validity = 'tooShort';\n          elem.errorMessage = elem.setCustomValidityForType || elem.setCustomValidity || '';\n          return;\n        } \n        \n        // Guard Clause: If the value is too long for the type\n        if (elem.value?.length > elem.lengthForType) {\n\n          elem.validity = 'tooLong';\n          elem.errorMessage = elem.setCustomValidityForType || elem.setCustomValidity || '';\n          return;\n        }\n        \n        // Validate that the date passed was the correct format\n        if (!dateAndFormatMatch(elem.value, elem.format)) {\n          elem.validity = 'patternMismatch';\n          elem.errorMessage = elem.setCustomValidityForType || elem.setCustomValidity || 'Invalid Date Format Entered';\n          return;\n        }\n        \n        // Validate that the date passed was a valid date\n        if (!validDateStr(elem.value, elem.format)) {\n          elem.validity = 'invalidDate';\n          elem.errorMessage = elem.setCustomValidityInvalidDate || elem.setCustomValidity || 'Invalid Date Entered';\n          return;\n        }\n\n        // Perform the rest of the validation\n        const formattedValue = toNorthAmericanFormat(elem.value, elem.format);\n        const valueDate = new Date(formattedValue);\n\n        // // Validate max date\n        if (elem.max?.length === elem.lengthForType) {\n\n          const maxDate = new Date(toNorthAmericanFormat(elem.max, elem.format));\n\n          if (valueDate > maxDate) {\n            elem.validity = 'rangeOverflow';\n            elem.errorMessage = elem.setCustomValidityRangeOverflow || elem.setCustomValidity || '';\n            return;\n          }\n        }\n\n        // Validate min date\n        if (elem.min?.length === elem.lengthForType) {\n          const minDate = new Date(toNorthAmericanFormat(elem.min, elem.format));\n\n          if (valueDate < minDate) {\n            elem.validity = 'rangeUnderflow';\n            elem.errorMessage = elem.setCustomValidityRangeUnderflow || elem.setCustomValidity || '';\n            return;\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Determines the validity state of the element.\n   * @param {object} elem - HTML element to validate.\n   * @param {boolean} force - Boolean that forces validation to run.\n   * @returns {void}\n   */\n  validate(elem, force) {\n    this.getInputElements(elem);\n    this.getAuroInputs(elem);\n\n    // Validate only if noValidate is not true and the input does not have focus\n    let validationShouldRun =\n      force ||\n      (!elem.contains(document.activeElement) &&\n        (elem.touched ||\n          (!elem.touched && typeof elem.value !== \"undefined\"))) ||\n      elem.validateOnInput;\n\n    if (elem.hasAttribute('error')) {\n      elem.validity = 'customError';\n      elem.errorMessage = elem.setCustomValidityCustomError || elem.error || elem.setCustomValidity || '';\n      validationShouldRun = false;\n    } else if (validationShouldRun) {\n      elem.validity = 'valid';\n      elem.errorMessage = '';\n\n      /**\n       * Only validate once we interact with the datepicker\n       * elem.value === undefined is the initial state pre-interaction.\n       *\n       * The validityState definitions are located at https://developer.mozilla.org/en-US/docs/Web/API/ValidityState.\n       */\n\n      let hasValue = false;\n\n      // Check string for having a value\n      if (typeof elem.value === \"string\") {\n        hasValue = elem.value && elem.value.length > 0;\n      }\n\n      // Check array value types for having a value\n      if (Array.isArray(elem.value)) {\n        hasValue = Boolean(\n          elem.value.length > 0 &&\n          elem.value.some((value) => typeof value === \"string\" && value.length > 0)\n        );\n      }\n\n      // If there is a second input in the elem and that value is undefined or an empty string set hasValue to false;\n      if (this.auroInputElements?.length === 2) {\n        if (!this.auroInputElements[1].value || this.auroInputElements[1].length === 0) {\n          hasValue = false;\n        }\n      }\n\n      if (!hasValue && elem.required && elem.touched) {\n        elem.validity = 'valueMissing';\n        elem.errorMessage = elem.setCustomValidityValueMissing || elem.setCustomValidity || '';\n      } else if (hasValue && this.runtimeUtils.elementMatch(elem, 'auro-input')) {\n        this.validateType(elem);\n        this.validateElementAttributes(elem);\n      } else if (hasValue && (this.runtimeUtils.elementMatch(elem, 'auro-counter') || this.runtimeUtils.elementMatch(elem, 'auro-counter-group'))) {\n        this.validateElementAttributes(elem);\n      }\n    }\n\n    if (this.auroInputElements?.length > 0 && elem.validity !== \"valueMissing\") {\n      elem.validity = this.auroInputElements[0].validity;\n      elem.errorMessage = this.auroInputElements[0].errorMessage;\n\n      // combobox has 2 inputs but no need to check validity on the 2nd one which is in fullscreen bib. \n      // combobox's 2nd input will have noValidate set true.\n      if (elem.validity === 'valid' && this.auroInputElements.length > 1 && !this.auroInputElements[1].noValidate) {\n        elem.validity = this.auroInputElements[1].validity;\n        elem.errorMessage = this.auroInputElements[1].errorMessage;\n      }\n    }\n\n    if (validationShouldRun || elem.hasAttribute('error')) {\n      // Use the validity message override if it is declared\n      if (elem.validity && elem.validity !== 'valid' && elem.ValidityMessageOverride) {\n        elem.errorMessage = elem.ValidityMessageOverride;\n      }\n\n      this.getErrorMessage(elem);\n\n      elem.dispatchEvent(new CustomEvent('auroFormElement-validated', {\n        bubbles: true,\n        composed: true,\n        detail: {\n          validity: elem.validity,\n          message: elem.errorMessage\n        }\n      }));\n    }\n  }\n\n  /**\n   * Gets all the HTML5 `inputs` in the element shadow DOM.\n   * @private\n   * @param {object} elem - HTML element to validate.\n   * @returns {void}\n   */\n  getInputElements(elem) {\n    this.inputElements = elem.renderRoot.querySelectorAll('input');\n  }\n\n  /**\n   * Gets all the `auro-inputs` in the element shadow DOM.\n   * @private\n   * @param {object} elem - HTML element to validate.\n   * @returns {void}\n   */\n  getAuroInputs(elem) {\n    this.auroInputElements = elem.shadowRoot.querySelectorAll('auro-input, [auro-input]');\n  }\n\n  /**\n   * Return appropriate error message.\n   * @private\n   * @param {object} elem - HTML element to validate.\n   * @returns {void}\n   */\n  getErrorMessage(elem) {\n    if (elem.validity !== 'valid') {\n      if (elem.setCustomValidity) {\n        elem.errorMessage = elem.setCustomValidity;\n      } else if (this.runtimeUtils.elementMatch(elem, 'auro-input') && elem.errorMessage === '') {\n        const input = elem.renderRoot.querySelector('input');\n\n        if (input.validationMessage.length > 0) {\n          elem.errorMessage = input.validationMessage;\n        }\n      } else if (this.inputElements?.length > 0 && elem.errorMessage === '') {\n        const firstInput = this.inputElements[0];\n\n        if (firstInput.validationMessage.length > 0) {\n          elem.errorMessage = firstInput.validationMessage;\n        } else if (this.inputElements?.length === 2) {\n          const secondInput = this.inputElements[1];\n\n          if (secondInput.validationMessage.length > 0) {\n            elem.errorMessage = secondInput.validationMessage;\n          }\n        }\n      }\n    } else {\n      elem.errorMessage = '';\n    }\n  }\n}\n\nlet AuroElement$2 = class AuroElement extends LitElement {\n  static get properties() {\n    return {\n\n      /**\n       * Defines the language of an element.\n       * @default {'default'}\n       */\n      layout: {\n        type: String,\n        attribute: \"layout\",\n        reflect: true\n      },\n\n      shape: {\n        type: String,\n        attribute: \"shape\",\n        reflect: true\n      },\n\n      size: {\n        type: String,\n        attribute: \"size\",\n        reflect: true\n      },\n\n      onDark: {\n        type: Boolean,\n        attribute: \"ondark\",\n        reflect: true\n      }\n    };\n  }\n\n  resetShapeClasses() {\n    const wrapper = this.shadowRoot.querySelector('.wrapper');\n\n    if (wrapper) {\n      wrapper.classList.forEach((className) => {\n        if (className.startsWith('shape-')) {\n          wrapper.classList.remove(className);\n        }\n      });\n\n    }\n\n    if (this.shape && this.size) {\n      wrapper.classList.add(`shape-${this.shape.toLowerCase()}-${this.size.toLowerCase()}`);\n    } else {\n      wrapper.classList.add('shape-none');\n    }\n  }\n\n  resetLayoutClasses() {\n    if (this.layout) {\n      const wrapper = this.shadowRoot.querySelector('.wrapper');\n\n      if (wrapper) {\n        wrapper.classList.forEach((className) => {\n          if (className.startsWith('layout-')) {\n            wrapper.classList.remove(className);\n          }\n        });\n\n        wrapper.classList.add(`layout-${this.layout.toLowerCase()}`);\n      }\n    }\n  }\n\n  updateComponentArchitecture() {\n    this.resetLayoutClasses();\n    this.resetShapeClasses();\n  }\n\n  updated(changedProperties) {\n    if (changedProperties.has('layout') || changedProperties.has('shape') || changedProperties.has('size')) {\n      this.updateComponentArchitecture();\n    }\n  }\n\n  // Try to render the defined `this.layout` layout. If that fails, fall back to the default layout.\n  // This will catch if an invalid layout value is passed in and render the default layout if so.\n  render() {\n    try {\n      return this.renderLayout();\n    } catch (error) {\n      // failed to get the defined layout\n      console.error('Failed to get the defined layout - using the default layout', error); // eslint-disable-line no-console\n\n      // fallback to the default layout\n      return this.getLayout('default');\n    }\n  }\n};\n\n// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\n/**\n * Auro-input provides users a way to enter data into a text field.\n *\n * @prop {string} id - The id global attribute defines an identifier (ID) which must be unique in the whole document.\n * @attr id\n *\n * @slot helpText - Sets the help text displayed below the input.\n * @slot label - Sets the label text for the input.\n * @slot {HTMLSlotElement} optionalLabel - Allows overriding the optional display text \"(optional)\", which appears next to the label.\n * @slot displayValue - Allows custom HTML content to display in place of the value when the input is not focused.\n *\n * @csspart wrapper - Use for customizing the style of the root element\n * @csspart label - Use for customizing the style of the label element\n * @csspart helpText - Use for customizing the style of the helpText element\n * @csspart input - Use for customizing the style of the input element\n * @csspart accentIcon - Use for customizing the style of the accentIcon element (e.g. credit card icon, calendar icon)\n * @csspart iconContainer - Use for customizing the style of the iconContainer (e.g. X icon for clearing input value)\n * @csspart accent-left - Use for customizing the style of the left accent element (e.g. padding, margin)\n * @csspart accent-right - Use for customizing the style of the right accent element (e.g. padding, margin)\n * @event input - Event fires when the value of an `auro-input` has been changed.\n * @event auroFormElement-validated - Notifies that the `validity` and `errorMessage` value has changed.\n */\n\nclass BaseInput extends AuroElement$2 {\n\n  constructor() {\n    super();\n\n    this.activeLabel = false;\n    this.icon = false;\n    this.disabled = false;\n    this.max = undefined;\n    this.maxLength = undefined;\n    this.min = undefined;\n    this.minLength = undefined;\n    this.noValidate = false;\n    this.onDark = false;\n    this.required = false;\n    this.setCustomValidityForType = undefined;\n\n    this.layout = 'classic';\n    this.shape = 'classic';\n    this.size = 'lg';\n  }\n\n  /**\n   * Internal Defaults.\n   * @private\n   * @returns {void}\n   */\n  privateDefaults() {\n    this.touched = false;\n    this.util = new AuroInputUtilities();\n    this.validation = new AuroFormValidation();\n    this.inputIconName = undefined;\n    this.showPassword = false;\n    this.validationCCLength = undefined;\n    this.hasValue = false;\n    this.label = 'Input label is undefined';\n    this.placeholderStr = '';\n\n    this.allowedInputTypes = [\n      \"text\",\n      \"number\",\n      \"email\",\n      \"password\",\n      \"credit-card\",\n      \"tel\"\n    ];\n\n    /**\n     * Credit Card is not included as this caused cursor placement issues.\n     * The Safari issue.\n     */\n    this.setSelectionInputTypes = [\n      \"text\",\n      \"password\",\n      \"email\"\n    ];\n\n    this.dateFormatMap = {\n      'mm/dd/yyyy': 'dateMMDDYYYY',\n      'dd/mm/yyyy': 'dateDDMMYYYY',\n      'yyyy/mm/dd': 'dateYYYYMMDD',\n      'yyyy/dd/mm': 'dateYYYYDDMM',\n      'mm/yy': 'dateMMYY',\n      'yy/mm': 'dateYYMM',\n      'mm/yyyy': 'dateMMYYYY',\n      'yyyy/mm': 'dateYYYYMM',\n      'yy': 'dateYY',\n      'yyyy': 'dateYYYY',\n      'mm': 'dateMM',\n      'dd': 'dateDD',\n      'dd/mm': 'dateDDMM',\n      'mm/dd': 'dateMMDD'\n    };\n\n    const idLength = 36;\n    const idSubstrEnd = 8;\n    const idSubstrStart = 2;\n\n    this.uniqueId = Math.random()\n      .toString(idLength)\n      .substring(idSubstrStart, idSubstrEnd);\n  }\n\n  // function to define props used within the scope of this component\n  static get properties() {\n    return {\n      ...super.properties,\n\n      /**\n       * The value for the role attribute.\n       */\n      a11yRole: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * The value for the aria-expanded attribute.\n       */\n      a11yExpanded: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * The value for the aria-controls attribute.\n       */\n      a11yControls: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * If set, the label will remain fixed in the active position.\n       */\n      activeLabel: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * An enumerated attribute that controls whether and how text input is automatically capitalized as it is entered/edited by the user. [off/none, on/sentences, words, characters].\n       */\n      autocapitalize: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * An enumerated attribute that defines what the user agent can suggest for autofill. At this time, only `autocomplete=\"off\"` is supported.\n       */\n      autocomplete: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * When set to `off`, stops iOS from auto-correcting words when typed into a text box.\n       */\n      autocorrect: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * If set, disables the input.\n       */\n      disabled: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * When defined, sets persistent validity to `customError` and sets `setCustomValidity` = attribute value.\n       */\n      error: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Contains the help text message for the current validity error.\n       */\n      errorMessage: {\n        type: String\n      },\n\n      /**\n       * Specifies the input mask format.\n       */\n      format: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * If set, will render an icon inside the input to the left of the value. Support is limited to auro-input instances with credit card format.\n       */\n      icon: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /** Exposes inputmode attribute for input.  */\n      inputmode: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Defines the language of an element.\n       */\n      lang: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * The maximum value allowed. This only applies for inputs with a type of `number` and all date formats.\n       */\n      max: {\n        type: String\n      },\n\n      /**\n       * The maximum number of characters the user can enter into the text input. This must be an integer value `0` or higher.\n       */\n      maxLength: {\n        type: Number,\n        reflect: true\n      },\n\n      /**\n       * The minimum value allowed. This only applies for inputs with a type of `number` and all date formats.\n       */\n      min: {\n        type: String\n      },\n\n      /**\n       * The minimum number of characters the user can enter into the text input. This must be a non-negative integer value smaller than or equal to the value specified by `maxlength`.\n       */\n      minLength: {\n        type: Number,\n        reflect: true\n      },\n\n      /**\n       * Populates the `name` attribute on the input.\n       */\n      name: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Sets styles for nested operation - removes borders, hides help + error text, and\n       * hides accents.\n       */\n      nested: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * If set, disables auto-validation on blur.\n       */\n      noValidate: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Sets onDark styles on input.\n       */\n      onDark: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Specifies a regular expression the form control's value should match.\n       */\n      pattern: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Define custom placeholder text.\n       */\n      placeholder: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Makes the input read-only, but can be set programmatically.\n       */\n      readonly: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Populates the `required` attribute on the input. Used for client-side validation.\n       */\n      required: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * @ignore\n       */\n      showPassword: {\n        state: true\n      },\n\n      /**\n       * Sets a custom help text message to display for all validityStates.\n       */\n      setCustomValidity: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `badInput`.\n       */\n      setCustomValidityBadInput: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `customError`.\n       */\n      setCustomValidityCustomError: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display for the declared element `type` and type validity fails.\n       */\n      setCustomValidityForType: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `rangeOverflow`.\n       */\n      setCustomValidityRangeOverflow: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `rangeUnderflow`.\n       */\n      setCustomValidityRangeUnderflow: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `tooLong`.\n       */\n      setCustomValidityTooLong: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `tooShort`.\n       */\n      setCustomValidityTooShort: {\n        type: String\n      },\n\n      /**\n       * Custom help text message to display when validity = `valueMissing`.\n       */\n      setCustomValidityValueMissing: {\n        type: String\n      },\n\n      /**\n       * Simple makes the input render without a border.\n       */\n      simple: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Custom help text message for email type validity.\n       */\n      customValidityTypeEmail: {\n        type: String\n      },\n\n      /**\n       * An enumerated attribute defines whether the element may be checked for spelling errors. [true, false]. When set to `false` the attribute `autocorrect` is set to `off` and `autocapitalize` is set to `none`.\n       */\n      spellcheck: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Populates the `type` attribute on the input. Allowed values are `password`, `email`, `credit-card`, `date`, `tel` or `text`. If given value is not allowed or set, defaults to `text`.\n       */\n      type: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Populates the `value` attribute on the input. Can also be read to retrieve the current value of the input.\n       */\n      value: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Sets validation mode to re-eval with each input.\n       */\n      validateOnInput: {\n        type: Boolean\n      },\n\n      /**\n       * Specifies the `validityState` this element is in.\n       */\n      validity: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Indicates whether the input is in a dirty state (has been interacted with).\n       * @type {boolean}\n       * @default false\n       * @private\n       */\n      touched: {\n        type: Boolean,\n        reflect: true,\n        attribute: false\n      },\n\n      /**\n       * The id for input node.\n       * @private\n       */\n      inputId: {\n        type: String,\n        reflect: false,\n        attribute: false\n      }\n    };\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.privateDefaults();\n\n    notifyOnLangChange(this);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    stopNotifyingOnLangChange(this);\n  }\n\n  firstUpdated() {\n    // clicking anywhere in the main wrapper will focus the input. Clicking the helpText or label will not focus the input.\n    this.wrapperElement = this.shadowRoot.querySelector('.wrapper');\n    this.inputElement = this.renderRoot.querySelector('input');\n    this.labelElement = this.shadowRoot.querySelector('label');\n\n    if (this.wrapperElement) {\n      this.wrapperElement.addEventListener('click', this.handleClick);\n    }\n\n    // add attribute for query selectors when auro-input is registered under a custom name\n    if (this.tagName.toLowerCase() !== 'auro-input') {\n      this.setAttribute('auro-input', true);\n    }\n    this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();\n\n    if (this.format) {\n      this.format = this.format.toLowerCase();\n    }\n\n    // use validity message override if declared when initializing the component\n    if (this.hasAttribute('setCustomValidity')) {\n      this.ValidityMessageOverride = this.setCustomValidity;\n    }\n\n    this.getPlaceholder();\n    this.setCustomHelpTextMessage();\n    this.configureAutoFormatting();\n  }\n\n  /**\n   * @private\n   * @returns {void} Sets the default help text for the input.\n   */\n  setCustomHelpTextMessage() {\n    // if setCustomValidityForType is already set, don't override it\n    if (this.setCustomValidityForType) {\n      return;\n    }\n\n    const typeToI18n = [\n      'password',\n      'credit-card',\n      'email',\n      'tel'\n    ];\n\n    if (typeToI18n.includes(this.type)) {\n      this.setCustomValidityForType = i18n(this.lang, this.type);\n    } else if (!this.format && this.type === 'date') {\n      this.setCustomValidityForType = i18n(this.lang, 'dateMMDDYYYY');\n    } else if (this.dateFormatMap[this.format]) {\n      this.setCustomValidityForType = i18n(this.lang, this.dateFormatMap[this.format]);\n    }\n  }\n\n  /**\n   * LitElement lifecycle method. Called after the DOM has been updated.\n   * @param {Map<string, any>} changedProperties - Keys are the names of changed properties, values are the corresponding previous values.\n   * @returns {void}\n   */\n  updated(changedProperties) {\n    super.updated(changedProperties);\n\n    if (changedProperties.has('format')) {\n      this.configureAutoFormatting();\n    }\n\n    if (this.type === 'password') {\n      this.spellcheck = 'false';\n    }\n\n    if (this.spellcheck === 'false') {\n      this.autocorrect = 'off';\n      this.autocapitalize = 'none';\n    } else {\n      this.autocorrect = this.autocorrect ? this.autocorrect : undefined;\n      this.autocapitalize = undefined;\n    }\n\n    if (changedProperties.has('readonly')) {\n      if (this.readonly) {\n        this.inputElement.setAttribute('readonly', true);\n        this.inputElement.setAttribute('aria-readonly', true);\n      } else {\n        this.inputElement.removeAttribute('readonly');\n        this.inputElement.removeAttribute('aria-readonly');\n      }\n    }\n\n    if (changedProperties.has('type') || changedProperties.has('format')) {\n      this.configureDataForType();\n    }\n\n    if (changedProperties.has('value')) {\n      if (this.value && this.value.length > 0) {\n        this.hasValue = true;\n        this.requestUpdate();\n      } else {\n        this.hasValue = false;\n        this.requestUpdate();\n      }\n\n      if (this.value !== this.inputElement.value) {\n        if (this.value) {\n          this.inputElement.value = this.value;\n        } else {\n          this.inputElement.value = '';\n        }\n\n        if (!this.shadowRoot.contains(this.getActiveElement())) {\n          this.validation.validate(this);\n        }\n\n        this.notifyValueChanged();\n      }\n    }\n\n    if (changedProperties.has('error')) {\n      this.validate(true);\n    }\n\n    if (changedProperties.has('validity')) {\n      this.notifyValidityChange();\n    }\n  }\n\n  /**\n   * @private\n   * @returns {void} Notify validity state changed via event.\n   */\n  notifyValidityChange() {\n    this.dispatchEvent(new CustomEvent('auroInput-validityChange', {\n      bubbles: true,\n      cancelable: false,\n      composed: true,\n    }));\n  }\n\n  /**\n   * Sets up IMasks and logic based on auto-formatting requirements.\n   * @private\n   * @returns {void}\n   */\n  configureAutoFormatting() {\n    if (this.maskInstance) {\n      this.maskInstance.destroy();\n    }\n\n    const maskOptions = this.util.getMaskOptions(this.type, this.format);\n\n    if (this.inputElement && maskOptions.mask) {\n      this.maskInstance = IMask(this.inputElement, maskOptions);\n\n      this.maskInstance.on('accept', () => {\n        this.value = this.maskInstance.value;\n      });\n\n      this.maskInstance.on('complete', () => {\n        this.value = this.maskInstance.value;\n\n        // Format date to North American format\n        if (this.type === 'date' && this.value && this.value.length === this.lengthForType && this.util.toNorthAmericanFormat(this.value, this.format)) {\n          const formattedDates = this.util.toNorthAmericanFormat(this.value, this.format);\n\n          this.formattedDate = formattedDates.formattedDate;\n          this.comparisonDate = formattedDates.dateForComparison;\n        }\n      });\n    }\n  }\n\n  /**\n   * @private\n   * @returns {string}\n   */\n  definePattern() {\n    if (this.type === 'credit-card' && !this.noValidate && this.maxLength) {\n      return `.{${this.maxLength},${this.maxLength}}`;\n    }\n\n    return this.pattern;\n  }\n\n  /**\n   * Required to convert SVG icons from data to HTML string.\n   * @private\n   * @param {string} icon HTML string for requested icon.\n   * @returns {object} Appended HTML for SVG.\n   */\n  getIconAsHtml(icon) {\n    const dom = new DOMParser().parseFromString(icon.svg, 'text/html');\n\n    return dom.body.firstChild;\n  }\n\n  /**\n   * Sends event notifying that the input has changed it's value.\n   * @private\n   * @returns {void}\n   */\n  notifyValueChanged() {\n    let inputEvent = null;\n\n    inputEvent = new Event('input', {\n      bubbles: true,\n      composed: true,\n    });\n\n    // Dispatched event to alert outside shadow DOM context of event firing.\n    this.dispatchEvent(inputEvent);\n  }\n\n\n  /**\n   * Handles clicking on the auro-input anywhere outside of the HTML5 input and still moving focus in.\n   * @private\n   * @return {void}\n   */\n  handleClick() {\n    this.focus();\n  }\n\n  /**\n   * Function to set element focus.\n   * @return {void}\n   */\n  focus() {\n    this.inputElement.focus();\n  }\n\n  /**\n   * Handles event of clearing input content by clicking the X icon.\n   * @private\n   * @return {void}\n   */\n  handleClickClear() {\n    this.inputElement.value = \"\";\n    this.value = \"\";\n    this.labelElement.classList.remove('inputElement-label--sticky');\n    this.focus();\n    this.validation.validate(this);\n    this.notifyValueChanged();\n  }\n\n  /**\n   * @private\n   * @return {void}\n   */\n  handleInput() {\n    // Sets value property to value of element value (el.value).\n    this.value = this.inputElement.value;\n\n    // Validation on blur or input.\n    if (this.validateOnInput) {\n      this.validation.validate(this);\n    }\n\n    // Prevents cursor jumping in Safari.\n    const { selectionStart } = this.inputElement;\n\n    if (this.setSelectionInputTypes.includes(this.type)) {\n      this.updateComplete.then(() => {\n        try {\n          this.inputElement.setSelectionRange(selectionStart, selectionStart);\n        } catch (error) { // eslint-disable-line\n          // do nothing\n        }\n      });\n    }\n  }\n\n  /**\n   * Function to support @focusin event.\n   * @private\n   * @return {void}\n   */\n  handleFocusin() {\n    this.hasFocus = true;\n\n    this.getPlaceholder();\n\n    this.touched = true;\n  }\n\n  /**\n   * Function to support @focusout event.\n   * @private\n   * @return {void}\n   */\n  handleFocusout() {\n    this.hasFocus = false;\n    this.getPlaceholder();\n  }\n\n  /**\n   * Function to support @blur event.\n   * @private\n   * @return {void}\n   */\n  handleBlur() {\n    this.inputElement.scrollLeft = 100;\n\n    if (!this.noValidate) {\n      this.validation.validate(this);\n    }\n  }\n\n  /**\n   * Returns focused element, even if it's in the shadow DOM.\n   * @private\n   * @param {Object} root - Element to check for focus.\n   * @returns {Object}\n   */\n  getActiveElement(root = document) {\n    const activeEl = root.activeElement;\n\n    if (!activeEl) {\n      return null;\n    }\n\n    if (activeEl.shadowRoot) {\n      return this.getActiveElement(activeEl.shadowRoot);\n    }\n\n    return activeEl;\n  }\n\n  /**\n   * Validates value.\n   * @param {boolean} [force=false] - Whether to force validation.\n   */\n  validate(force = false) {\n    this.validation.validate(this, force);\n  }\n\n  /**\n   * Resets component to initial state.\n   * @returns {void}\n   */\n  reset() {\n    this.validation.reset(this);\n  }\n\n  /**\n   * Sets configuration data used elsewhere based on the `type` attribute.\n   * @private\n   * @returns {void}\n   */\n  configureDataForType() {\n    const defaultLengths = {\n      'credit-card': 19,\n      'tel': 17,\n      'date': 10\n    };\n\n    if (this.type in defaultLengths) {\n      this.lengthForType = this.format ? this.format.length : defaultLengths[this.type];\n      this.inputmode = this.inputmode || 'numeric';\n    } else if (this.type === 'number') {\n      this.inputmode = this.inputmode || 'numeric';\n    }\n\n    if (this.type === \"date\" && !this.format) {\n      this.format = 'mm/dd/yyyy';\n    }\n  }\n\n  /**\n   * Validates against list of supported this.allowedInputTypes; return type=text if invalid request.\n   * @private\n   * @param {string} type Value entered into component prop.\n   * @returns {string} Iterates over allowed types array.\n   */\n  getInputType(type) {\n    if (this.allowedInputTypes.includes(type)) {\n      return type;\n    }\n\n    return \"text\";\n  }\n\n  /**\n   * Determines default help text string.\n   * @private\n   * @returns {string} Evaluates pre-determined help text.\n   */\n  getHelpText() {\n    const typeHelpText = [\n      'password',\n      'email',\n      'credit-card',\n      'tel'\n    ];\n\n    if (typeHelpText.includes(this.type)) {\n      return i18n(this.lang, this.type);\n    }\n\n    if (this.type === 'date') {\n      return i18n(this.lang, this.dateFormatMap[this.format] || 'dateMMDDYYYY');\n    }\n\n    return '';\n  }\n\n  /**\n   * Function to support show-password feature.\n   * @private\n   * @returns {void}\n   */\n  handleClickShowPassword() {\n    this.showPassword = !this.showPassword;\n    this.focus();\n  }\n\n  /**\n   * Support placeholder text.\n   * @private\n   * @returns {void}\n   */\n  getPlaceholder() {\n    if (this.placeholder) {\n      this.placeholderStr = this.placeholder;\n    } else if (this.type === 'date') {\n      this.placeholderStr = this.format ? this.format.toUpperCase() : 'MM/DD/YYYY';\n    }\n\n    this.requestUpdate();\n\n    return this.placeholderStr;\n  }\n\n  /**\n   * Defines placement of input icon based on type, used with classMap.\n   * @private\n   * @returns {boolean}\n   */\n  defineInputIcon() {\n    if (this.icon && this.type === 'credit-card') {\n      return true;\n    } else if (this.type === 'date') {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Defines padding of input label based on type, used with classMap.\n   * @private\n   * @returns {boolean}\n   */\n  defineLabelPadding() {\n    if (this.icon && this.type === 'credit-card' && (this.value === \"\" || this.value === undefined)) {\n      return true;\n    } else if (this.type === 'date') {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Functions specific to Credit Card component support\n  // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n\n  /**\n   * Function to support credit-card feature type.\n   * @private\n   * @returns {void}\n   */\n  processCreditCard() {\n    const creditCard = this.matchInputValueToCreditCard();\n\n    this.format = creditCard.maskFormat;\n\n    this.maxLength = creditCard.formatLength;\n    this.minLength = creditCard.formatMinLength;\n\n    this.errorMessage = creditCard.errorMessage;\n\n    if (this.icon) {\n      this.inputIconName = creditCard.cardIcon;\n    }\n\n    if (this.inputElement) {\n      this.configureAutoFormatting();\n    }\n  }\n\n  /**\n   * Function to support credit-card feature type.\n   * @private\n   * @returns {object} JSON with data for credit card formatting.\n   */\n  matchInputValueToCreditCard() {\n    const CreditCardValidationMessage = `${i18n(this.lang, 'validCard')}`;\n\n    const creditCardTypes = [\n      {\n        name: 'Airlines',\n        regex: /^(?<num>1|2)\\d{0}/u,\n        formatMinLength: 17,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'credit-card',\n        maskFormat: \"0000 0000 0000 0000 000\"\n      },\n      {\n        name: 'Commercial',\n        regex: /^(?<num>2)\\d{0}/u,\n        formatMinLength: 8,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'credit-card',\n        maskFormat: \"0000 0000 000\"\n      },\n      {\n        name: 'Alaska Commercial',\n        regex: /^(?<num>27)\\d{0}/u,\n        formatMinLength: 8,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'cc-alaska',\n        maskFormat: \"0000 0000 000\"\n      },\n      {\n        name: 'American Express',\n        regex: /^(?<num>34|37)\\d{0}/u,\n        formatLength: 17,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'cc-amex',\n        maskFormat: \"0000 000000 00000\"\n      },\n      {\n        name: 'Diners club',\n        regex: /^(?<num>36|38)\\d{0}/u,\n        formatLength: 16,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'credit-card',\n        maskFormat: \"0000 000000 0000\"\n      },\n      {\n        name: 'Visa',\n        regex: /^(?<num>4)\\d{0}/u,\n        formatLength: 19,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'cc-visa',\n        maskFormat: \"0000 0000 0000 0000\"\n      },\n      {\n        name: 'Alaska Airlines Visa',\n        regex: /^(?<num>4147\\s34|4888\\s93|4800\\s11|4313\\s51|4313\\s07)\\d{0}/u,\n        formatLength: 19,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'cc-alaska',\n        maskFormat: \"0000 0000 0000 0000\"\n      },\n      {\n        name: 'Master Card',\n        regex: /^(?<num>5)\\d{0}/u,\n        formatLength: 19,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'cc-mastercard',\n        maskFormat: \"0000 0000 0000 0000\"\n      },\n      {\n        name: 'Discover Card',\n        regex: /^(?<num>6)\\d{0}/u,\n        formatLength: 19,\n        errorMessage: CreditCardValidationMessage,\n        cardIcon: 'cc-discover',\n        maskFormat: \"0000 0000 0000 0000\"\n      }\n    ];\n\n    let type = {\n      name: 'Default Card',\n      formatLength: 19,\n      errorMessage: CreditCardValidationMessage,\n      cardIcon: 'credit-card',\n      maskFormat: \"0000 0000 0000 0000\"\n    };\n\n    creditCardTypes.forEach((cardType) => {\n      if (cardType.regex.exec(this.value)) {\n        type = cardType;\n      }\n    });\n\n    this.validationCCLength = type.formatLength;\n\n    return type;\n  }\n}\n\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\nclass AuroDependencyVersioning {\n\n  /**\n   * Generates a unique string to be used for child auro element naming.\n   * @private\n   * @param {string} baseName - Defines the first part of the unique element name.\n   * @param {string} version - Version of the component that will be appended to the baseName.\n   * @returns {string} - Unique string to be used for naming.\n   */\n  generateElementName(baseName, version) {\n    let result = baseName;\n\n    result += '-';\n    result += version.replace(/[.]/g, '_');\n\n    return result;\n  }\n\n  /**\n   * Generates a unique string to be used for child auro element naming.\n   * @param {string} baseName - Defines the first part of the unique element name.\n   * @param {string} version - Version of the component that will be appended to the baseName.\n   * @returns {string} - Unique string to be used for naming.\n   */\n  generateTag(baseName, version, tagClass) {\n    const elementName = this.generateElementName(baseName, version);\n    const tag = literal`${unsafeStatic(elementName)}`;\n\n    if (!customElements.get(elementName)) {\n      customElements.define(elementName, class extends tagClass {});\n    }\n\n    return tag;\n  }\n}\n\n// Copyright (c) 2020 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\n/**\n * @attr {Boolean} hidden - If present, the component will be hidden both visually and from screen readers\n * @attr {Boolean} hiddenVisually - If present, the component will be hidden visually, but still read by screen readers\n * @attr {Boolean} hiddenAudible - If present, the component will be hidden from screen readers, but seen visually\n */\n\nlet AuroElement$1 = class AuroElement extends LitElement {\n\n  // function to define props used within the scope of this component\n  static get properties() {\n    return {\n      hidden:         { type: Boolean,\n                        reflect: true },\n      hiddenVisually: { type: Boolean,\n                        reflect: true },\n      hiddenAudible:  { type: Boolean,\n                        reflect: true },\n    };\n  }\n\n  /**\n   * @private Function that determines state of aria-hidden\n   */\n  hideAudible(value) {\n    if (value) {\n      return 'true'\n    }\n\n    return 'false'\n  }\n};\n\nvar error = {\"svg\":\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" aria-labelledby=\\\"error__desc\\\" class=\\\"ico_squareLarge\\\" data-deprecated=\\\"true\\\" role=\\\"img\\\" style=\\\"min-width:var(--auro-size-lg, var(--ds-size-300, 1.5rem));height:var(--auro-size-lg, var(--ds-size-300, 1.5rem));fill:currentColor\\\" viewBox=\\\"0 0 24 24\\\" part=\\\"svg\\\"><title/><desc id=\\\"error__desc\\\">Error alert indicator.</desc><path d=\\\"m13.047 5.599 6.786 11.586A1.207 1.207 0 0 1 18.786 19H5.214a1.207 1.207 0 0 1-1.047-1.815l6.786-11.586a1.214 1.214 0 0 1 2.094 0m-1.165.87a.23.23 0 0 0-.085.085L5.419 17.442a.232.232 0 0 0 .203.35h12.756a.234.234 0 0 0 .203-.35L12.203 6.554a.236.236 0 0 0-.321-.084M12 15.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5m-.024-6.22c.325 0 .589.261.589.583v4.434a.586.586 0 0 1-.589.583.586.586 0 0 1-.588-.583V9.863c0-.322.264-.583.588-.583\\\"/></svg>\"};\n\n/* eslint-disable no-underscore-dangle, jsdoc/no-undefined-types, jsdoc/require-param-description */\n\nconst _fetchMap = new Map();\n\n/**\n * A callback to parse Response body.\n *\n * @callback ResponseParser\n * @param {Fetch.Response} response\n * @returns {Promise}\n */\n\n/**\n * A minimal in-memory map to de-duplicate Fetch API media requests.\n *\n * @param {String} uri\n * @param {Object} [options={}]\n * @param {ResponseParser} [options.responseParser=(response) => response.text()]\n * @returns {Promise}\n */\nconst cacheFetch = (uri, options = {}) => {\n  const responseParser = options.responseParser || ((response) => response.text());\n  if (!_fetchMap.has(uri)) {\n    _fetchMap.set(uri, fetch(uri).then(responseParser));\n  }\n  return _fetchMap.get(uri);\n};\n\nvar styleCss$3 = css`:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.ico_squareLarge{fill:currentColor;height:var(--auro-size-lg, var(--ds-size-300, 1.5rem))}.ico_squareSmall{fill:currentColor;height:.6rem}.ico_squareMed{fill:currentColor;height:var(--auro-size-md, var(--ds-size-200, 1rem))}.ico_squareSml{fill:currentColor;height:var(--auro-size-sm, var(--ds-size-150, 0.75rem))}:host{color:currentColor;vertical-align:middle;line-height:1;display:inline-block}svg{min-width:var(--ds-auro-icon-size, 1.5rem) !important;width:var(--ds-auro-icon-size, 1.5rem) !important;height:var(--ds-auro-icon-size, 1.5rem) !important}.componentWrapper{display:flex}.svgWrapper{height:var(--ds-auro-icon-size);width:var(--ds-auro-icon-size)}.labelWrapper{margin-left:var(--ds-size-50, 0.25rem);line-height:1.8}`;\n\n// Copyright (c) 2020 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\n// See https://git.io/JJ6SJ for \"How to document your components using JSDoc\"\n/**\n * @slot - Hidden from visibility, used for a11y if icon description is needed\n */\n\n// build the component class\nclass BaseIcon extends AuroElement$1 {\n  constructor() {\n    super();\n    this.onDark = false;\n  }\n\n  // function to define props used within the scope of this component\n  static get properties() {\n    return {\n      ...super.properties,\n\n      /**\n       * Set value for on-dark version of auro-icon.\n       */\n      onDark: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * @private\n       */\n      svg: {\n        attribute: false,\n        reflect: true\n      }\n    };\n  }\n\n  static get styles() {\n    return css`\n      ${styleCss$3}\n    `;\n  }\n\n  /**\n   * Async function to fetch requested icon from npm CDN.\n   * @private\n   * @param {string} category - Icon category.\n   * @param {string} name - Icon name.\n   * @returns {SVGElement} DOM - Ready HTML to be appended.\n   */\n  async fetchIcon(category, name) {\n    let iconHTML = '';\n\n    if (category === 'logos') {\n      iconHTML = await cacheFetch(`${this.uri}/${category}/${name}.svg`);\n    } else {\n      iconHTML = await cacheFetch(`${this.uri}/icons/${category}/${name}.svg`);\n    }\n\n    const dom = new DOMParser().parseFromString(iconHTML, 'text/html');\n\n    return dom.body.querySelector('svg');\n  }\n\n  // lifecycle function\n  async firstUpdated() {\n    if (!this.customSvg) {\n      const svg = await this.fetchIcon(this.category, this.name);\n\n      if (svg) {\n        this.svg = svg;\n      } else if (!svg) {\n        const penDOM = new DOMParser().parseFromString(error.svg, 'text/html');\n\n        this.svg = penDOM.body.firstChild;\n      }\n    }\n  }\n}\n\nvar tokensCss$3 = css`:host{--ds-auro-icon-color:var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-alaska-color:#02426D;--ds-auro-icon-size:var(--ds-size-300, 1.5rem)}`;\n\nvar colorCss$3 = css`:host{color:var(--ds-auro-icon-color)}:host([customColor]){color:inherit}:host(:not([onDark])[variant=accent1]){--ds-auro-icon-color:var(--ds-basic-color-texticon-accent1, #265688)}:host(:not([onDark])[variant=disabled]){--ds-auro-icon-color:var(--ds-basic-color-texticon-disabled, #d0d0d0)}:host(:not([onDark])[variant=muted]){--ds-auro-icon-color:var(--ds-basic-color-texticon-muted, #676767)}:host(:not([onDark])[variant=statusDefault]){--ds-auro-icon-color:var(--ds-basic-color-status-default, #afb9c6)}:host(:not([onDark])[variant=statusInfo]){--ds-auro-icon-color:var(--ds-basic-color-status-info, #01426a)}:host(:not([onDark])[variant=statusSuccess]){--ds-auro-icon-color:var(--ds-basic-color-status-success, #447a1f)}:host(:not([onDark])[variant=statusWarning]){--ds-auro-icon-color:var(--ds-basic-color-status-warning, #fac200)}:host(:not([onDark])[variant=statusError]){--ds-auro-icon-color:var(--ds-basic-color-status-error, #e31f26)}:host(:not([onDark])[variant=statusInfoSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-info-subtle, #ebf3f9)}:host(:not([onDark])[variant=statusSuccessSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-success-subtle, #d6eac7)}:host(:not([onDark])[variant=statusWarningSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-warning-subtle, #fff0b2)}:host(:not([onDark])[variant=statusErrorSubtle]){--ds-auro-icon-color:var(--ds-basic-color-status-error-subtle, #fbc6c6)}:host(:not([onDark])[variant=fareBasicEconomy]){--ds-auro-icon-color:var(--ds-basic-color-fare-basiceconomy, #97eaf8)}:host(:not([onDark])[variant=fareBusiness]){--ds-auro-icon-color:var(--ds-basic-color-fare-business, #01426a)}:host(:not([onDark])[variant=fareEconomy]){--ds-auro-icon-color:var(--ds-basic-color-fare-economy, #0074ca)}:host(:not([onDark])[variant=fareFirst]){--ds-auro-icon-color:var(--ds-basic-color-fare-first, #00274a)}:host(:not([onDark])[variant=farePremiumEconomy]){--ds-auro-icon-color:var(--ds-basic-color-fare-premiumeconomy, #005154)}:host(:not([onDark])[variant=tierOneWorldEmerald]){--ds-auro-icon-color:var(--ds-basic-color-tier-program-oneworld-emerald, #139142)}:host(:not([onDark])[variant=tierOneWorldSapphire]){--ds-auro-icon-color:var(--ds-basic-color-tier-program-oneworld-sapphire, #015daa)}:host(:not([onDark])[variant=tierOneWorldRuby]){--ds-auro-icon-color:var(--ds-basic-color-tier-program-oneworld-ruby, #a41d4a)}:host([onDark]){--ds-auro-icon-color:var(--ds-basic-color-texticon-inverse, #ffffff)}:host([onDark][variant=disabled]){--ds-auro-icon-color:var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}:host([onDark][variant=muted]){--ds-auro-icon-color:var(--ds-basic-color-texticon-inverse-muted, #ccd2db)}:host([onDark][variant=statusError]){--ds-auro-icon-color:var(--ds-advanced-color-state-error-inverse, #f9a4a8)}`;\n\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n// ---------------------------------------------------------------------\n\n/* eslint-disable line-comment-position, no-inline-comments, no-confusing-arrow, no-nested-ternary, implicit-arrow-linebreak */\n\nlet AuroLibraryRuntimeUtils$2 = class AuroLibraryRuntimeUtils {\n\n  /* eslint-disable jsdoc/require-param */\n\n  /**\n   * This will register a new custom element with the browser.\n   * @param {String} name - The name of the custom element.\n   * @param {Object} componentClass - The class to register as a custom element.\n   * @returns {void}\n   */\n  registerComponent(name, componentClass) {\n    if (!customElements.get(name)) {\n      customElements.define(name, class extends componentClass {});\n    }\n  }\n\n  /**\n   * Finds and returns the closest HTML Element based on a selector.\n   * @returns {void}\n   */\n  closestElement(\n    selector, // selector like in .closest()\n    base = this, // extra functionality to skip a parent\n    __Closest = (el, found = el && el.closest(selector)) =>\n      !el || el === document || el === window\n        ? null // standard .closest() returns null for non-found selectors also\n        : found\n          ? found // found a selector INside this element\n          : __Closest(el.getRootNode().host) // recursion!! break out to parent DOM\n  ) {\n    return __Closest(base);\n  }\n  /* eslint-enable jsdoc/require-param */\n\n  /**\n   * If the element passed is registered with a different tag name than what is passed in, the tag name is added as an attribute to the element.\n   * @param {Object} elem - The element to check.\n   * @param {String} tagName - The name of the Auro component to check for or add as an attribute.\n   * @returns {void}\n   */\n  handleComponentTagRename(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    if (elemTag !== tag) {\n      elem.setAttribute(tag, true);\n    }\n  }\n\n  /**\n   * Validates if an element is a specific Auro component.\n   * @param {Object} elem - The element to validate.\n   * @param {String} tagName - The name of the Auro component to check against.\n   * @returns {Boolean} - Returns true if the element is the specified Auro component.\n   */\n  elementMatch(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    return elemTag === tag || elem.hasAttribute(tag);\n  }\n};\n\n// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\nclass AuroIcon extends BaseIcon {\n  constructor() {\n    super();\n\n    this.variant = undefined;\n    this.privateDefaults();\n  }\n\n  /**\n   * Internal Defaults.\n   * @private\n   * @returns {void}\n   */\n  privateDefaults() {\n    this.uri = 'https://cdn.jsdelivr.net/npm/@alaskaairux/icons@latest/dist';\n    this.runtimeUtils = new AuroLibraryRuntimeUtils$2();\n  }\n\n  // function to define props used within the scope of this component\n  static get properties() {\n    return {\n      ...super.properties,\n\n      /**\n       * Set aria-hidden value. Default is `true`. Option is `false`.\n       */\n      ariaHidden: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * The category of the icon you are looking for. See https://auro.alaskaair.com/icons/usage.\n       */\n      category: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Allows custom color to be set.\n       */\n      customColor: {\n        type: Boolean\n      },\n\n      /**\n       * When true, auro-icon will render a custom SVG inside the default slot.\n       */\n      customSvg: {\n        type: Boolean\n      },\n\n      /**\n       * Exposes content in slot as icon label.\n       */\n      label: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * The name of the icon you are looking for without the file extension. See https://auro.alaskaair.com/icons/usage.\n       */\n      name: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * The style of the icon. The accepted variants are `accent1`, `disabled`, `muted`, `statusDefault`, `statusInfo`, `statusSuccess`, `statusWarning`, `statusError`, `statusInfoSubtle`, `statusSuccessSubtle`, `statusWarningSubtle`, `statusErrorSubtle`, `fareBasicEconomy`, `fareBusiness`, `fareEconomy`, `fareFirst`, `farePremiumEconomy`, `tierOneWorldEmerald`, `tierOneWorldSapphire`, `tierOneWorldRuby`.\n       */\n      variant: {\n        type: String,\n        reflect: true\n      }\n    };\n  }\n\n  static get styles() {\n    return [\n      super.styles,\n      css`${tokensCss$3}`,\n      css`${styleCss$3}`,\n      css`${colorCss$3}`\n    ];\n  }\n\n  /**\n   * This will register this element with the browser.\n   * @param {string} [name=\"auro-icon\"] - The name of element that you want to register to.\n   *\n   * @example\n   * AuroIcon.register(\"custom-icon\") // this will register this element to <custom-icon/>\n   *\n   */\n  static register(name = \"auro-icon\") {\n    AuroLibraryRuntimeUtils$2.prototype.registerComponent(name, AuroIcon);\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    // Add the tag name as an attribute if it is different than the component name\n    this.runtimeUtils.handleComponentTagRename(this, 'auro-icon');\n  }\n\n  /**\n   * @private\n   * @returns {void} Exposes CSS parts for styling from parent components.\n   */\n  exposeCssParts() {\n    this.setAttribute('exportparts', 'svg:iconSvg');\n  }\n\n  async firstUpdated() {\n    await super.firstUpdated();\n\n    /**\n     * icons provide a description for screen readers. Icon only instances Auro-button\n     * depend on this description to provide context for the user using a screen reader.\n     * Removes the SVG description for screen reader if ariaHidden is set to true.\n     */\n    if (this.hasAttribute('ariaHidden') && this.svg) {\n      const svgDesc = this.svg.querySelector('desc');\n\n      if (svgDesc) {\n        svgDesc.remove();\n        this.svg.removeAttribute('aria-labelledby');\n      }\n    }\n  }\n\n  // function that renders the HTML and CSS into  the scope of the component\n  render() {\n    const labelClasses = {\n      'labelWrapper': true,\n      'util_displayHiddenVisually': !this.label\n    };\n\n    const svgClasses = {\n      'svgWrapper': true,\n    };\n\n    return html`\n      <div class=\"componentWrapper\">\n        <div\n          class=\"${classMap(svgClasses)}\"\n          title=\"${ifDefined(this.title || undefined)}\">\n          <span aria-hidden=\"${ifDefined(this.ariaHidden || true)}\" part=\"svg\">\n            ${this.customSvg ? html`\n                <slot name=\"svg\"></slot>\n              ` : html`\n                ${this.svg}\n              `\n            }\n          </span>\n        </div>\n\n        <div class=\"${classMap(labelClasses)}\">\n          <slot></slot>\n        </div>\n      </div>\n    `;\n  }\n}\n\nvar iconVersion = '8.0.4';\n\n/**\n * Private module-level WeakMap to hold MutationObservers for each host element.\n */\nconst _observers = new WeakMap();\n\n/**\n * Private module-level WeakMap to hold attribute matchers and targets for each host element.\n * Structure: { \n *   host: { \n *     matchers: Set<Function>, \n *     targets: Map<HTMLElement, Map<Function, {removeOriginal: boolean, currentAttributes: Map<string, string>}>> \n *   } \n * }\n */\nconst _transportConfig = new WeakMap();\n\n/**\n * Transfers all matching attributes from a host element to a target element and observes for future changes.\n * \n * @param {Object} params - The parameters for the function.\n * @param {HTMLElement} params.host - The host element from which attributes will be transported.\n * @param {HTMLElement} params.target - The target element to which attributes will be transported.\n * @param {boolean} [params.removeOriginal=true] - Whether to remove the attributes from the host element.\n * @param {boolean} [params.observe=true] - Whether to attach a MutationObserver to the host element.\n * @returns {Function} A function to detach the observer when no longer needed.\n * @throws {TypeError} If the host or target parameters are not instances of HTMLElement.\n */\nconst transportAttributes = ({ host, target, match, removeOriginal = true }) => {\n  // Guard Clause: Ensure host is valid HTMLElement instance\n  if (typeof host !== 'object' || !(host instanceof HTMLElement)) {\n    throw new TypeError('a11yUtilities.js | transportAttributes | The \"host\" parameter must be an instance of HTMLElement.');\n  }\n\n  // Guard Clause: Ensure target is valid HTMLElement instance\n  if (typeof target !== 'object' || !(target instanceof HTMLElement)) {\n    throw new TypeError('a11yUtilities.js | transportAttributes | The \"target\" parameter must be an instance of HTMLElement.');\n  }\n\n  // Guard Clause: Ensure match is a function\n  if (typeof match !== 'function') {\n    throw new TypeError('a11yUtilities.js | transportAttributes | The \"match\" parameter must be a function.');\n  }\n\n  // Guard Clause: Ensure removeOriginal is a boolean\n  if (typeof removeOriginal !== 'boolean') {\n    throw new TypeError('a11yUtilities.js | transportAttributes | The \"removeOriginal\" parameter must be a boolean.');\n  }\n  \n  // Register this transport and get cleanup function\n  return _registerTransport({\n    host,\n    target,\n    matcher: match,\n    removeOriginal\n  });\n};\n\n/**\n * Registers a matcher and target for a host element and attaches an observer if needed.\n * \n * @param {Object} params - The parameters object.\n * @param {HTMLElement} params.host - The host element to observe.\n * @param {HTMLElement} params.target - The target element to receive attributes.\n * @param {Function} params.matcher - Function that determines which attributes to transport.\n * @param {boolean} [params.removeOriginal=true] - Whether to remove original attributes.\n * @param {boolean} [params.observe=true] - Whether to observe for attribute changes.\n * @returns {Function} Function to detach the specific matcher and target pairing.\n * @private\n */\nconst _registerTransport = ({ host, target, matcher, removeOriginal = true }) => {\n  // Initialize config for this host if it doesn't exist\n  if (!_transportConfig.has(host)) {\n    _transportConfig.set(host, {\n      matchers: new Set(),\n      targets: new Map()\n    });\n  }\n\n  const config = _transportConfig.get(host);\n  \n  // Add the matcher to the set of matchers for this host\n  config.matchers.add(matcher);\n  \n  // Initialize target entry if it doesn't exist\n  if (!config.targets.has(target)) {\n    config.targets.set(target, new Map());\n  }\n  \n  // Store the matcher with its removeOriginal setting for this target\n  config.targets.get(target).set(matcher, { \n    removeOriginal,\n    currentAttributes: new Map()\n  });\n  \n  // Perform initial attribute transport\n  _transportAttributes({ host, target, matcher, removeOriginal });\n  \n  // Attach observer\n  _attachObserver(host);\n  \n  // Return cleanup function and utility functions\n  return {\n    cleanup: () => _cleanupTransport(host, target, matcher),\n    getObservedAttributes: () => _getObservedAttributes(host, target, matcher),\n    getObservedAttribute: (attr) => _getObservedAttribute(host, target, matcher, attr),\n  }\n};\n\n/**\n * Cleans up resources associated with a specific matcher and target for a host element.\n * \n * @param {HTMLElement} host - The host element\n * @param {HTMLElement} target - The target element\n * @param {Function} matcher - The matcher function\n * @private\n */\nconst _cleanupTransport = (host, target, matcher) => {\n  const config = _transportConfig.get(host);\n  if (!config) return;\n  \n  // Remove this matcher from this target\n  const targetMatchers = config.targets.get(target);\n  if (targetMatchers) {\n    targetMatchers.delete(matcher);\n    \n    // If this target has no more matchers, remove it\n    if (targetMatchers.size === 0) {\n      config.targets.delete(target);\n    }\n  }\n  \n  // Check if this matcher is still used by any target\n  let matcherStillUsed = false;\n  for (const matcherMap of config.targets.values()) {\n    if (matcherMap.has(matcher)) {\n      matcherStillUsed = true;\n      break;\n    }\n  }\n  \n  // If not used anymore, remove from matchers set\n  if (!matcherStillUsed) {\n    config.matchers.delete(matcher);\n  }\n  \n  // If no more targets or matchers, detach observer\n  if (config.targets.size === 0 || config.matchers.size === 0) {\n    _detachObserver(host);\n  }\n};\n\n/**\n * Generic function to transport attributes from a host element to a target element.\n * \n * @param {Object} params - The parameters object.\n * @param {HTMLElement} params.host - The host element from which to transport attributes.\n * @param {HTMLElement} params.target - The target element to which attributes will be transported.\n * @param {Function} params.matcher - Function that takes an attribute name and returns true if it should be transported.\n * @param {boolean} [params.removeOriginal=true] - Whether to remove original attributes from host.\n * @returns {void}\n * @private\n */\nconst _transportAttributes = ({ host, target, matcher, removeOriginal = true }) => {\n  // Get a list of all matching attributes on the host element and their values\n  const matchingAttributes = host.getAttributeNames()\n    .filter(attr => matcher(attr))\n    .reduce((acc, attr) => {\n      acc[attr] = host.getAttribute(attr);\n      return acc;\n    }, {});\n\n  // Move matching attributes to the target element, removing them from the host if removeOriginal is true\n  Object.entries(matchingAttributes).forEach(([key, value]) => {\n    _setObservedAttribute(host, target, matcher, key, value);\n    target.setAttribute(key, value);\n    if (removeOriginal) {\n      host.removeAttribute(key);\n    }\n  });\n};\n\n/**\n * Attaches a MutationObserver to the host element to monitor attribute changes.\n * \n * @param {HTMLElement} host - The element to observe for attribute changes.\n * @returns {MutationObserver} The observer instance.\n * @private\n */\nconst _attachObserver = (host) => {\n  // If an observer for this host already exists, return it\n  if (_observers.has(host)) {\n    return _observers.get(host);\n  }\n\n  // Create a new MutationObserver\n  const observer = new MutationObserver((mutations) => {\n    const config = _transportConfig.get(host);\n    if (!config) return;\n    \n    // For each mutation affecting attributes\n    mutations\n      .filter(mutation => mutation.type === 'attributes')\n      .forEach(mutation => {\n        const attributeName = mutation.attributeName;\n        \n        // Find matchers that care about this attribute\n        for (const matcher of config.matchers) {\n          if (matcher(attributeName)) {\n            // For each target that uses this matcher\n            for (const [target, matcherConfigs] of config.targets.entries()) {\n              if (matcherConfigs.has(matcher)) {\n                const { removeOriginal } = matcherConfigs.get(matcher);\n                _transportAttributes({\n                  host,\n                  target,\n                  matcher,\n                  removeOriginal\n                });\n              }\n            }\n          }\n        }\n      });\n  });\n\n  // Start observing attribute changes\n  observer.observe(host, { attributes: true });\n  \n  // Store the observer\n  _observers.set(host, observer);\n  \n  return observer;\n};\n\n/**\n * Detaches and cleans up the MutationObserver for a given host element.\n * \n * @param {HTMLElement} host - The element whose observer should be detached.\n * @private\n */\nconst _detachObserver = (host) => {\n  if (_observers.has(host)) {\n    const observer = _observers.get(host);\n    observer.disconnect();\n    _observers.delete(host);\n  }\n  \n  // Clean up the transport config as well\n  if (_transportConfig.has(host)) {\n    _transportConfig.delete(host);\n  }\n};\n\n/**\n * Gets the matcher configuration for a specific host, target, and matcher\n * @param {HTMLElement} host - The host element\n * @param {HTMLElement} target - The target element\n * @param {Function} matcher - The matcher function\n * @returns {Object|undefined} The matcher configuration if found\n * @private\n */\nconst _getMatcherConfig = (host, target, matcher) => {\n  const config = _transportConfig.get(host);\n  if (!config) return undefined;\n  \n  const targetMatchers = config.targets.get(target);\n  if (!targetMatchers) return undefined;\n  \n  return targetMatchers.get(matcher);\n};\n\n/**\n * Sets an observed attribute value\n * @param {HTMLElement} host - The host element\n * @param {HTMLElement} target - The target element\n * @param {Function} matcher - The matcher function\n * @param {string} key - The attribute name\n * @param {string} value - The attribute value\n * @private\n */\nconst _setObservedAttribute = (host, target, matcher, key, value) => {\n  const matcherConfig = _getMatcherConfig(host, target, matcher);\n  if (matcherConfig) {\n    matcherConfig.currentAttributes.set(key, value);\n  }\n};\n\nconst _getObservedAttribute = (host, target, matcher, attr) => {\n  const matcherConfig = _getMatcherConfig(host, target, matcher);\n  if (matcherConfig) return matcherConfig.currentAttributes.get(attr);\n  return undefined;\n};\n\nconst _getObservedAttributes = (host, target, matcher) => {\n  const matcherConfig = _getMatcherConfig(host, target, matcher);\n  if (matcherConfig) return Array.from(matcherConfig.currentAttributes.entries());\n  return [];\n};\n\nconst _matchers = {\n  'aria-': attr => attr.startsWith('aria-'),\n  'role': attr => attr.match(/^role$/)\n};\n\nconst transportAllA11yAttributes = ({ host, target, removeOriginal = true }) => {\n  return transportAttributes({\n    host,\n    target,\n    match: attr => {\n      for (const key in _matchers) {\n        if (_matchers[key](attr)) return true;\n      }\n      return false;\n    },\n    removeOriginal\n  });\n};\n\nclass AuroElement extends LitElement {\n\n  /**\n   * @type {Object} return object from transportAttributes via a11yUtilities\n   * @property {Function} cleanup - Function to clean up the attribute watcher.\n   * @property {Function} getCurrentAttributes - Function to get the current attributes being watched and their values.\n   * @property {Function} getObservedAttribute - Function to get the value of a specific observed attribute by name.\n   * @private\n   */\n  attributeWatcher;\n\n  static get properties() {\n    return {\n\n      /**\n       * Defines the layout of an element.\n       * @default {'default'}\n       */\n      layout: {\n        type: String,\n        attribute: \"layout\",\n        reflect: true\n      },\n      \n      /**\n       * Defines the shape of an element.\n       * @property {'default', 'rounded', 'pill', 'circle'}\n       * @default {'default'}\n       */\n      shape: {\n        type: String,\n        attribute: \"shape\",\n        reflect: true\n      },\n\n      /**\n       * Defines the size of an element.\n       * @property {'xs', 'sm', 'md', 'lg', 'xl'}\n       * @default {'md'}\n       */\n      size: {\n        type: String,\n        attribute: \"size\",\n        reflect: true\n      },\n\n      /** \n       * This Boolean attribute lets you specify that the element should be rendered in dark mode.\n       * @default {false}\n       */\n      onDark: {\n        type: Boolean,\n        attribute: \"ondark\",\n        reflect: true\n      },\n\n      /**\n       * A reference to the wrapper element in the shadow DOM.\n       * This is used to apply layout and shape classes dynamically.\n       * @type {HTMLElement|null}\n       * @default {null}\n       * @private\n       */\n      wrapper: {\n        attribute: false,\n        reflect: false\n      }\n    };\n  }\n\n  \n\n  resetShapeClasses() {\n    if (this.shape && this.size) {\n\n      if (this.wrapper) {\n        this.wrapper.classList.forEach((className) => {\n          if (className.startsWith('shape-')) {\n            this.wrapper.classList.remove(className);\n          }\n        });\n\n        this.wrapper.classList.add(`shape-${this.shape.toLowerCase()}-${this.size.toLowerCase()}`);\n      }\n    }\n  }\n\n  resetLayoutClasses() {\n    if (this.layout) {\n      if (this.wrapper) {\n        this.wrapper.classList.forEach((className) => {\n          if (className.startsWith('layout-')) {\n            this.wrapper.classList.remove(className);\n          }\n        });\n\n        this.wrapper.classList.add(`layout-${this.layout.toLowerCase()}`);\n      }\n    }\n  }\n\n  updateComponentArchitecture() {\n    this.resetLayoutClasses();\n    this.resetShapeClasses();\n  }\n\n  updated(changedProperties) {\n    if (changedProperties.has('layout') || changedProperties.has('shape') || changedProperties.has('size')) {\n      this.updateComponentArchitecture();\n    }\n  }\n\n  firstUpdated() {\n    super.firstUpdated();\n\n    // Set a reference to the wrapper element in the shadow DOM\n    this.wrapper = this.shadowRoot.querySelector('.wrapper');\n\n    // Initialize the transportation of ARIA attributes to the target element and get the disconnect function for cleanup\n    this.attributeWatcher = transportAllA11yAttributes({ host: this, target: this.shadowRoot.querySelector('.wrapper') });\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n\n    // Cleanup the ARIA observer if it exists\n    if (this.attributeWatcher) {\n      this.attributeWatcher.cleanup();\n      this.attributeWatcher = null;\n    }\n  }\n\n  // Try to render the defined `this.layout` layout. If that fails, fall back to the default layout.\n  // This will catch if an invalid layout value is passed in and render the default layout if so.\n  render() {\n    try {\n      return this.renderLayout();\n    } catch (error) {\n      // failed to get the defined layout\n      console.error('Failed to get the defined layout - using the default layout', error); // eslint-disable-line no-console\n\n      // fallback to the default layout\n      return this.getLayout('default');\n    }\n  }\n}\n\nvar styleCss$2 = css`:focus:not(:focus-visible){outline:3px solid transparent}.util_insetNone{padding:0}.util_insetXxxs{padding:.125rem}.util_insetXxxs--stretch{padding:.25rem .125rem}.util_insetXxxs--squish{padding:0 .125rem}.util_insetXxs{padding:.25rem}.util_insetXxs--stretch{padding:.375rem .25rem}.util_insetXxs--squish{padding:.125rem .25rem}.util_insetXs{padding:.5rem}.util_insetXs--stretch{padding:.75rem .5rem}.util_insetXs--squish{padding:.25rem .5rem}.util_insetSm{padding:.75rem}.util_insetSm--stretch{padding:1.125rem .75rem}.util_insetSm--squish{padding:.375rem .75rem}.util_insetMd{padding:1rem}.util_insetMd--stretch{padding:1.5rem 1rem}.util_insetMd--squish{padding:.5rem 1rem}.util_insetLg{padding:1.5rem}.util_insetLg--stretch{padding:2.25rem 1.5rem}.util_insetLg--squish{padding:.75rem 1.5rem}.util_insetXl{padding:2rem}.util_insetXl--stretch{padding:3rem 2rem}.util_insetXl--squish{padding:1rem 2rem}.util_insetXxl{padding:3rem}.util_insetXxl--stretch{padding:4.5rem 3rem}.util_insetXxl--squish{padding:1.5rem 3rem}.util_insetXxxl{padding:4rem}.util_insetXxxl--stretch{padding:6rem 4rem}.util_insetXxxl--squish{padding:2rem 4rem}:host([fluid]) .auro-button,:host([fluid=true]) .auro-button{min-width:auto;width:100%}:host([variant=flat]){display:inline-block}::slotted(svg){vertical-align:middle}slot{pointer-events:none}.auro-button{position:relative;padding:0 var(--ds-size-300, 1.5rem);cursor:pointer;border-width:1px;border-style:solid;border-radius:var(--ds-border-radius, 0.375rem);overflow:hidden;text-overflow:ellipsis;user-select:none;white-space:nowrap;min-height:var(--ds-size-600, 3rem);max-height:var(--ds-size-600, 3rem);display:inline-flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--ds-size-100, 0.5rem);margin:0;-webkit-touch-callout:none;-webkit-user-select:none;transition:padding 300ms ease-out}.auro-button:active{transform:scale(0.95)}.auro-button:focus-visible,.auro-button:focus{outline:none;outline-style:solid;outline-width:var(--ds-size-50, 0.25rem);outline-offset:calc(var(--ds-size-50, 0.25rem)*-1)}.auro-button:focus-visible:not([variant=secondary]):not([variant=tertiary]),.auro-button:focus:not([variant=secondary]):not([variant=tertiary]){outline-width:calc(var(--ds-size-50, 0.25rem) - 1px)}.auro-button.loading{cursor:not-allowed}.auro-button.loading *:not([auro-loader]){visibility:hidden}@media screen and (min-width: 576px){.auro-button{min-width:8.75rem;width:auto}}.auro-button:disabled{cursor:not-allowed;transform:unset}.auro-button[variant=secondary]:disabled{cursor:not-allowed;transform:unset}.auro-button[variant=tertiary]:disabled{cursor:not-allowed;transform:unset}.auro-button[variant=ghost]:disabled{cursor:not-allowed;transform:unset}.auro-button[onDark]:disabled{cursor:not-allowed;transform:unset}.auro-button[onDark][variant=secondary]:disabled{cursor:not-allowed;transform:unset}@media(hover: hover){.auro-button[onDark][variant=tertiary]:active,.auro-button[onDark][variant=tertiary]:hover{box-shadow:none}}.auro-button[onDark][variant=tertiary]:active{box-shadow:none}.auro-button[onDark][variant=tertiary]:disabled{cursor:not-allowed;transform:unset}.auro-button.icon-only ::slotted(:not(auro-icon):not([auro-icon])){display:none}.auro-button--slim{min-width:unset;min-height:calc(var(--ds-size-500, 2.5rem) - var(--ds-size-50, 0.25rem));max-height:calc(var(--ds-size-500, 2.5rem) - var(--ds-size-50, 0.25rem))}.auro-button--iconOnly{padding:0 var(--ds-size-100, 0.5rem);border-radius:100px;min-width:unset;height:var(--ds-size-600, 3rem);width:var(--ds-size-500, 2.5rem)}.auro-button--iconOnly ::slotted(auro-icon),.auro-button--iconOnly ::slotted([auro-icon]){--ds-auro-icon-size:var(--ds-size-300, 1.5rem)}.auro-button--iconOnly:not(.auro-button--rounded):focus-visible:not([variant=secondary]):not([variant=tertiary]):not([variant=flat]),.auro-button--iconOnly:not(.auro-button--rounded):focus:not([variant=secondary]):not([variant=tertiary]):not([variant=flat]){outline-width:1px;outline-offset:-2px}.auro-button--iconOnlySlim{padding:0 var(--ds-size-50, 0.25rem);height:calc(var(--ds-size-400, 2rem) + var(--ds-size-50, 0.25rem));width:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-50, 0.25rem))}.auro-button--iconOnlySlim ::slotted(auro-icon),.auro-button--iconOnlySlim ::slotted([auro-icon]){--ds-auro-icon-size:calc(var(--ds-size-200, 1rem) + var(--ds-size-50, 0.25rem))}.auro-button--rounded{border-radius:100px;box-shadow:var(--ds-elevation-300, 0px 0px 15px rgba(0, 0, 0, 0.2));height:var(--ds-size-500, 2.5rem);min-width:unset;transition:padding 300ms ease-out,outline 0ms,outline-offset 0ms}.auro-button--rounded ::slotted(auro-icon),.auro-button--rounded ::slotted([auro-icon]){--ds-auro-icon-size:var(--ds-size-300, 1.5rem)}.auro-button--rounded:focus-visible:not([variant=flat]):after,.auro-button--rounded:focus:not([variant=flat]):after{border-radius:100px}:host([size=xs]) .wrapper:focus-visible,:host([size=xs]) .wrapper:focus{outline-width:1px;outline-offset:-2px}:host([rounded]) .textSlot{transition:opacity 300ms ease-in;opacity:1}:host([rounded][iconOnly]) .textSlot{opacity:0}:host([rounded][iconOnly]) .textWrapper{display:none}:host([rounded][iconOnly]) .auro-button{min-width:unset;padding:unset;width:var(--ds-size-600, 3rem)}[auro-loader]{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);pointer-events:none}`;\n\nvar colorCss$2 = css`[auro-loader]{color:var(--ds-auro-button-loader-color)}.auro-button{-webkit-tap-highlight-color:var(--ds-auro-button-tap-color);color:var(--ds-auro-button-text-color);background-color:var(--ds-auro-button-container-color);background-image:linear-gradient(var(--ds-auro-button-container-image), var(--ds-auro-button-container-image));border-color:var(--ds-auro-button-border-color)}.auro-button:not([variant=secondary]):not([variant=tertiary]):focus-visible{outline-color:var(--ds-auro-button-border-inset-color)}.auro-button:not([ondark]):active:not(:disabled),.auro-button:not([ondark]):hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background-hover, #00274a);--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background-hover, #00274a);--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border-hover, #00274a)}.auro-button:not([ondark]):disabled{--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background-disabled, #acc9e2);--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background-disabled, #acc9e2);--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border-disabled, #acc9e2)}.auro-button:not([ondark])[variant=secondary]{--ds-auro-button-container-color:var(--ds-advanced-color-button-secondary-background, #ffffff);--ds-auro-button-container-image:var(--ds-advanced-color-button-secondary-background, #ffffff);--ds-auro-button-border-color:var(--ds-advanced-color-button-secondary-border, #01426a);--ds-auro-button-text-color:var(--ds-advanced-color-button-secondary-text, #01426a);--ds-auro-button-loader-color:var(--ds-advanced-color-button-secondary-text, #01426a)}.auro-button:not([ondark])[variant=secondary]:active:not(:disabled),.auro-button:not([ondark])[variant=secondary]:hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-secondary-background-hover, #f2f2f2);--ds-auro-button-container-image:var(--ds-advanced-color-button-secondary-background-hover, #f2f2f2);--ds-auro-button-border-color:var(--ds-advanced-color-button-secondary-border-hover, #00274a);--ds-auro-button-text-color:var(--ds-advanced-color-button-secondary-text-hover, #00274a)}.auro-button:not([ondark])[variant=secondary]:focus-visible{--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused, #01426a)}.auro-button:not([ondark])[variant=secondary]:disabled{--ds-auro-button-container-color:var(--ds-advanced-color-button-secondary-background-disabled, #f7f7f7);--ds-auro-button-container-image:var(--ds-advanced-color-button-secondary-background-disabled, #f7f7f7);--ds-auro-button-border-color:var(--ds-advanced-color-button-secondary-border-disabled, #cfe0ef);--ds-auro-button-text-color:var(--ds-basic-color-texticon-disabled, #d0d0d0)}.auro-button:not([ondark])[variant=tertiary]{--ds-auro-button-container-color:var(--ds-advanced-color-button-tertiary-background, rgba(0, 0, 0, 0.05));--ds-auro-button-container-image:var(--ds-advanced-color-button-tertiary-background, rgba(0, 0, 0, 0.05));--ds-auro-button-border-color:transparent;--ds-auro-button-text-color:var(--ds-advanced-color-button-tertiary-text, #01426a);--ds-auro-button-loader-color:var(--ds-advanced-color-button-tertiary-text, #01426a)}.auro-button:not([ondark])[variant=tertiary]:active:not(:disabled),.auro-button:not([ondark])[variant=tertiary]:hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-tertiary-background-hover, rgba(0, 0, 0, 0.1));--ds-auro-button-container-image:var(--ds-advanced-color-button-tertiary-background-hover, rgba(0, 0, 0, 0.1));--ds-auro-button-border-color:transparent}.auro-button:not([ondark])[variant=tertiary]:focus-visible{--ds-auro-button-border-color:var(--ds-advanced-color-state-focused, #01426a);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused, #01426a)}.auro-button:not([ondark])[variant=tertiary]:disabled{--ds-auro-button-border-color:transparent;--ds-auro-button-text-color:var(--ds-basic-color-texticon-disabled, #d0d0d0)}.auro-button:not([ondark])[variant=ghost]{--ds-auro-button-container-color:transparent;--ds-auro-button-container-image:transparent;--ds-auro-button-border-color:transparent;--ds-auro-button-text-color:var(--ds-advanced-color-button-ghost-text, #01426a);--ds-auro-button-loader-color:var(--ds-advanced-color-button-ghost-text, #01426a)}.auro-button:not([ondark])[variant=ghost]:active:not(:disabled),.auro-button:not([ondark])[variant=ghost]:hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-ghost-background-hover, rgba(0, 0, 0, 0.05));--ds-auro-button-container-image:var(--ds-advanced-color-button-ghost-background-hover, rgba(0, 0, 0, 0.05));--ds-auro-button-border-color:transparent}.auro-button:not([ondark])[variant=ghost]:focus-visible{--ds-auro-button-border-color:var(--ds-advanced-color-state-focused, #01426a);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused, #01426a)}.auro-button:not([ondark])[variant=ghost]:disabled{--ds-auro-button-border-color:transparent;--ds-auro-button-text-color:var(--ds-basic-color-texticon-disabled, #d0d0d0)}.auro-button:not([ondark])[variant=flat]{color:var(--ds-advanced-color-button-flat-text, #676767);background-color:transparent;background-image:none;border-color:transparent}.auro-button:not([ondark])[variant=flat]:active:not(:disabled),.auro-button:not([ondark])[variant=flat]:hover:not(:disabled){color:var(--ds-advanced-color-button-flat-text-hover, #525252);background-color:transparent;background-image:none;border-color:transparent}.auro-button:not([ondark])[variant=flat]:disabled{color:var(--ds-advanced-color-button-flat-text-disabled, #d0d0d0);background-color:transparent;background-image:none;border-color:transparent}.auro-button:not([ondark])[variant=flat]:focus-visible{--ds-auro-button-border-color:var(--ds-advanced-color-state-focused, #01426a);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused, #01426a)}.auro-button[ondark]{--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border-inverse, #ffffff);--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background-inverse, #ffffff);--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background-inverse, #ffffff);--ds-auro-button-text-color:var(--ds-advanced-color-button-primary-text-inverse, #01426a);--ds-auro-button-loader-color:var(--ds-advanced-color-button-primary-text-inverse, #01426a)}.auro-button[ondark]:active:not(:disabled),.auro-button[ondark]:hover:not(:disabled){--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border-inverse-hover, #ebf3f9);--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background-inverse-hover, #ebf3f9);--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background-inverse-hover, #ebf3f9)}.auro-button[ondark]:focus-visible{--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused, #01426a)}.auro-button[ondark]:disabled{--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border-inverse-disabled, rgba(255, 255, 255, 0.75));--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background-inverse-disabled, rgba(255, 255, 255, 0.75));--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background-inverse-disabled, rgba(255, 255, 255, 0.75));--ds-auro-button-text-color:var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}.auro-button[ondark][variant=secondary]{--ds-auro-button-container-color:transparent;--ds-auro-button-container-image:transparent;--ds-auro-button-border-color:var(--ds-advanced-color-button-secondary-border-inverse, #ffffff);--ds-auro-button-text-color:var(--ds-advanced-color-button-secondary-text-inverse, #ffffff);--ds-auro-button-loader-color:var(--ds-advanced-color-button-secondary-text-inverse, #ffffff)}.auro-button[ondark][variant=secondary]:active:not(:disabled),.auro-button[ondark][variant=secondary]:hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-secondary-background-inverse-hover, rgba(255, 255, 255, 0.1));--ds-auro-button-container-image:var(--ds-advanced-color-button-secondary-background-inverse-hover, rgba(255, 255, 255, 0.1))}.auro-button[ondark][variant=secondary]:focus-visible{--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused-inverse, #ffffff)}.auro-button[ondark][variant=secondary]:disabled{--ds-auro-button-text-color:var(--ds-basic-color-texticon-inverse-disabled, #7e8894);--ds-auro-button-border-color:var(--ds-advanced-color-button-secondary-border-inverse-disabled, #dddddd)}.auro-button[ondark][variant=tertiary]{--ds-auro-button-container-color:var(--ds-advanced-color-button-tertiary-background-inverse, rgba(255, 255, 255, 0.05));--ds-auro-button-container-image:var(--ds-advanced-color-button-tertiary-background-inverse, rgba(255, 255, 255, 0.05));--ds-auro-button-border-color:transparent;--ds-auro-button-text-color:var(--ds-advanced-color-button-tertiary-text-inverse, #ffffff);--ds-auro-button-loader-color:var(--ds-advanced-color-button-tertiary-text-inverse, #ffffff)}.auro-button[ondark][variant=tertiary]:active:not(:disabled),.auro-button[ondark][variant=tertiary]:hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-tertiary-background-inverse-hover, rgba(255, 255, 255, 0.1));--ds-auro-button-container-image:var(--ds-advanced-color-button-tertiary-background-inverse-hover, rgba(255, 255, 255, 0.1))}.auro-button[ondark][variant=tertiary]:focus-visible{--ds-auro-button-border-color:var(--ds-advanced-color-state-focused-inverse, #ffffff);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused-inverse, #ffffff)}.auro-button[ondark][variant=tertiary]:disabled{--ds-auro-button-text-color:var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}.auro-button[ondark][variant=ghost]{--ds-auro-button-container-color:transparent;--ds-auro-button-container-image:transparent;--ds-auro-button-border-color:transparent;--ds-auro-button-text-color:var(--ds-advanced-color-button-ghost-text-inverse, #ffffff);--ds-auro-button-loader-color:var(--ds-advanced-color-button-ghost-text-inverse, #ffffff)}.auro-button[ondark][variant=ghost]:active:not(:disabled),.auro-button[ondark][variant=ghost]:hover:not(:disabled){--ds-auro-button-container-color:var(--ds-advanced-color-button-ghost-background-inverse-hover, rgba(255, 255, 255, 0.05));--ds-auro-button-container-image:var(--ds-advanced-color-button-ghost-background-inverse-hover, rgba(255, 255, 255, 0.05))}.auro-button[ondark][variant=ghost]:focus-visible{--ds-auro-button-border-color:var(--ds-advanced-color-state-focused-inverse, #ffffff);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused-inverse, #ffffff)}.auro-button[ondark][variant=ghost]:disabled{--ds-auro-button-text-color:var(--ds-basic-color-texticon-inverse-disabled, #7e8894)}.auro-button[ondark][variant=flat]{color:var(--ds-advanced-color-button-flat-text-inverse, #ffffff);background-color:transparent;background-image:none;border-color:transparent}.auro-button[ondark][variant=flat]:active:not(:disabled),.auro-button[ondark][variant=flat]:hover:not(:disabled){color:var(--ds-advanced-color-button-flat-text-inverse-hover, #adadad);background-color:transparent;background-image:none;border-color:transparent}.auro-button[ondark][variant=flat]:disabled{color:var(--ds-advanced-color-button-flat-text-inverse-disabled, #7e8894);background-color:transparent;background-image:none;border-color:transparent}.auro-button[ondark][variant=flat]:focus-visible{--ds-auro-button-border-color:var(--ds-advanced-color-state-focused-inverse, #ffffff);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused-inverse, #ffffff)}`;\n\nvar tokensCss$2 = css`:host(:not([onDark])){--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border, #01426a);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused-inverse, #ffffff);--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background, #01426a);--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background, #01426a);--ds-auro-button-loader-color:var(--ds-advanced-color-button-primary-text, #ffffff);--ds-auro-button-text-color:var(--ds-advanced-color-button-primary-text, #ffffff);--ds-auro-button-tap-color:transparent}:host([onDark]){--ds-auro-button-border-color:var(--ds-advanced-color-button-primary-border-inverse, #ffffff);--ds-auro-button-border-inset-color:var(--ds-advanced-color-state-focused-inverse, #ffffff);--ds-auro-button-container-color:var(--ds-advanced-color-button-primary-background-inverse, #ffffff);--ds-auro-button-container-image:var(--ds-advanced-color-button-primary-background-inverse, #ffffff);--ds-auro-button-loader-color:var(--ds-advanced-color-button-primary-text-inverse, #01426a);--ds-auro-button-text-color:var(--ds-advanced-color-button-primary-text-inverse, #01426a);--ds-auro-button-tap-color:transparent}`;\n\nvar shapeSize = css`.shape-rounded-xl{min-height:68px;max-height:68px;border-style:solid;border-radius:6px;overflow:hidden;font-size:18px}.shape-rounded-lg{min-height:52px;max-height:52px;border-style:solid;border-radius:6px;overflow:hidden;font-size:18px}.shape-rounded-md{min-height:44px;max-height:44px;border-style:solid;border-radius:6px;overflow:hidden;font-size:16px}.shape-rounded-sm{min-height:32px;max-height:32px;border-style:solid;border-radius:6px;overflow:hidden;font-size:14px}.shape-rounded-xs{min-height:20px;max-height:20px;border-style:solid;border-radius:4px;overflow:hidden;font-size:12px;outline-offset:-2px;outline-width:1px}.shape-pill-xl{min-height:68px;max-height:68px;border-style:solid;border-radius:34px;overflow:hidden;font-size:18px}.shape-pill-left-xl{min-height:68px;max-height:68px;border-style:solid;border-radius:34px 0 0 34px;overflow:hidden}.shape-pill-right-xl{min-height:68px;max-height:68px;border-style:solid;border-radius:0 34px 34px 0;overflow:hidden}.shape-pill-lg{min-height:52px;max-height:52px;border-style:solid;border-radius:26px;overflow:hidden;font-size:18px}.shape-pill-left-lg{min-height:52px;max-height:52px;border-style:solid;border-radius:26px 0 0 26px;overflow:hidden}.shape-pill-right-lg{min-height:52px;max-height:52px;border-style:solid;border-radius:0 26px 26px 0;overflow:hidden}.shape-pill-md{min-height:44px;max-height:44px;border-style:solid;border-radius:22px;overflow:hidden}.shape-pill-left-md{min-height:44px;max-height:44px;border-style:solid;border-radius:22px 0 0 22px;overflow:hidden}.shape-pill-right-md{min-height:44px;max-height:44px;border-style:solid;border-radius:0 22px 22px 0;overflow:hidden;font-size:16px}.shape-pill-sm{min-height:32px;max-height:32px;border-style:solid;border-radius:16px;overflow:hidden;font-size:14px}.shape-pill-left-sm{min-height:32px;max-height:32px;border-style:solid;border-radius:16px 0 0 16px;overflow:hidden}.shape-pill-right-sm{min-height:32px;max-height:32px;border-style:solid;border-radius:0 16px 16px 0;overflow:hidden}.shape-pill-xs{min-height:20px;max-height:20px;border-style:solid;border-radius:10px;overflow:hidden;font-size:12px;outline-offset:-2px;outline-width:1px}.shape-pill-left-xs{min-height:20px;max-height:20px;border-style:solid;border-radius:10px 0 0 10px;overflow:hidden;outline-offset:-2px;outline-width:1px}.shape-pill-right-xs{min-height:20px;max-height:20px;border-style:solid;border-radius:0 10px 10px 0;overflow:hidden;outline-offset:-2px;outline-width:1px}.shape-circle-xl{min-height:68px;max-height:68px;min-width:68px;max-width:68px;border-style:solid;border-radius:34px;overflow:hidden;padding:0}.shape-circle-lg{min-height:52px;max-height:52px;min-width:52px;max-width:52px;border-style:solid;border-radius:26px;overflow:hidden;padding:0}.shape-circle-md{min-height:44px;max-height:44px;min-width:44px;max-width:44px;border-style:solid;border-radius:22px;overflow:hidden;padding:0}.shape-circle-sm{min-height:32px;max-height:32px;min-width:32px;max-width:32px;border-style:solid;border-radius:16px;overflow:hidden;padding:0}.shape-circle-xs{min-height:20px;max-height:20px;min-width:20px;max-width:20px;border-style:solid;border-radius:10px;overflow:hidden;padding:0;outline-offset:-2px;outline-width:1px}`;\n\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n// ---------------------------------------------------------------------\n\n/* eslint-disable line-comment-position, no-inline-comments, no-confusing-arrow, no-nested-ternary, implicit-arrow-linebreak */\n\nlet AuroLibraryRuntimeUtils$1 = class AuroLibraryRuntimeUtils {\n\n  /* eslint-disable jsdoc/require-param */\n\n  /**\n   * This will register a new custom element with the browser.\n   * @param {String} name - The name of the custom element.\n   * @param {Object} componentClass - The class to register as a custom element.\n   * @returns {void}\n   */\n  registerComponent(name, componentClass) {\n    if (!customElements.get(name)) {\n      customElements.define(name, class extends componentClass {});\n    }\n  }\n\n  /**\n   * Finds and returns the closest HTML Element based on a selector.\n   * @returns {void}\n   */\n  closestElement(\n    selector, // selector like in .closest()\n    base = this, // extra functionality to skip a parent\n    __Closest = (el, found = el && el.closest(selector)) =>\n      !el || el === document || el === window\n        ? null // standard .closest() returns null for non-found selectors also\n        : found\n          ? found // found a selector INside this element\n          : __Closest(el.getRootNode().host) // recursion!! break out to parent DOM\n  ) {\n    return __Closest(base);\n  }\n  /* eslint-enable jsdoc/require-param */\n\n  /**\n   * If the element passed is registered with a different tag name than what is passed in, the tag name is added as an attribute to the element.\n   * @param {Object} elem - The element to check.\n   * @param {String} tagName - The name of the Auro component to check for or add as an attribute.\n   * @returns {void}\n   */\n  handleComponentTagRename(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    if (elemTag !== tag) {\n      elem.setAttribute(tag, true);\n    }\n  }\n\n  /**\n   * Validates if an element is a specific Auro component.\n   * @param {Object} elem - The element to validate.\n   * @param {String} tagName - The name of the Auro component to check against.\n   * @returns {Boolean} - Returns true if the element is the specified Auro component.\n   */\n  elementMatch(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    return elemTag === tag || elem.hasAttribute(tag);\n  }\n};\n\nvar styleCss$1 = css`:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin:0.375rem;--margin-xs:0.2rem;--margin-sm:0.5rem;--margin-md:0.75rem;--margin-lg:1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin)*6);height:1.5rem}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(2.55rem + var(--margin-xs)*6);height:1.55rem}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm)*6);height:2.5rem}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md)*6);height:3.5rem}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg)*6);height:5.5rem}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-400ms}:host([pulse])>span:nth-child(2){animation-delay:-200ms}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,100%{opacity:.1;transform:scale(0.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}100%{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}100%{left:110%}}:host>.no-animation{display:none}@media(prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center;font-size:1rem}:host>span{opacity:1}:host>.loader{display:none}:host>.no-animation{display:block}}`;\n\nvar colorCss$1 = css`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]){--ds-auro-loader-color:var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]){--ds-auro-loader-color:var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color:transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color:currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color:currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}`;\n\nvar tokensCss$1 = css`:host{--ds-auro-loader-background-color:currentcolor;--ds-auro-loader-border-color:currentcolor;--ds-auro-loader-color:currentcolor}`;\n\n// Copyright (c) 2020 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\nclass AuroLoader extends LitElement {\n  constructor() {\n    super();\n\n    /**\n     * @private\n     */\n    this.keys = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n\n    /**\n     * @private\n     */\n    this.mdCount = 3;\n\n    /**\n     * @private\n     */\n    this.smCount = 2;\n\n    /**\n     * @private\n     */\n    this.runtimeUtils = new AuroLibraryRuntimeUtils$1();\n\n    this.orbit = false;\n    this.ringworm = false;\n    this.laser = false;\n    this.pulse = false;\n  }\n\n  // function to define props used within the scope of this component\n  static get properties() {\n    return {\n\n      /**\n       * Sets loader to laser type.\n       */\n      laser: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Sets loader to orbit type.\n       */\n      orbit: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Sets loader to pulse type.\n       */\n      pulse: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Sets loader to ringworm type.\n       */\n      ringworm: {\n        type: Boolean,\n        reflect: true\n      }\n    };\n  }\n\n  static get styles() {\n    return [\n      css`${styleCss$1}`,\n      css`${colorCss$1}`,\n      css`${tokensCss$1}`\n    ];\n  }\n\n  /**\n   * This will register this element with the browser.\n   * @param {string} [name=\"auro-loader\"] - The name of element that you want to register to.\n   *\n   * @example\n   * AuroLoader.register(\"custom-loader\") // this will register this element to <custom-loader/>\n   *\n   */\n  static register(name = \"auro-loader\") {\n    AuroLibraryRuntimeUtils$1.prototype.registerComponent(name, AuroLoader);\n  }\n\n  firstUpdated() {\n    // Add the tag name as an attribute if it is different than the component name\n    this.runtimeUtils.handleComponentTagRename(this, 'auro-loader');\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n  }\n\n  /**\n   * @private\n   * @returns {Array} Numbered array for template map.\n   */\n  defineTemplate() {\n    let nodes = Array.from(Array(this.mdCount).keys());\n\n    if (this.orbit || this.laser) {\n      nodes = Array.from(Array(this.smCount).keys());\n    } else if (this.ringworm) {\n      nodes = Array.from(Array(0).keys());\n    }\n\n    return nodes;\n  }\n\n  // When using auroElement, use the following attribute and function when hiding content from screen readers.\n  // aria-hidden=\"${this.hideAudible(this.hiddenAudible)}\"\n\n  // function that renders the HTML and CSS into  the scope of the component\n  render() {\n    return html`\n      ${this.defineTemplate().map((idx) => html`\n        <span part=\"element\" class=\"loader node-${idx}\"></span>\n      `)}\n\n      <div class=\"no-animation\">Loading...</div>\n\n      ${this.ringworm ? html`\n        <svg  part=\"element\" class=\"circular\" viewBox=\"25 25 50 50\">\n          <circle class=\"path\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\"/>\n        </svg>`\n        : ``\n      }\n    `;\n  }\n}\n\nvar loaderVersion = '5.0.0';\n\n/* eslint-disable max-lines, curly, jsdoc/no-undefined-types */\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\n/**\n * @slot - Default slot for the text of the button.\n * @csspart button - Apply CSS to HTML5 button.\n * @csspart loader - Apply CSS to auro-loader.\n * @csspart text - Apply CSS to text slot.\n * @csspart icon - Apply CSS to icon slot.\n */\n\n/* eslint-disable lit/no-invalid-html, lit/binding-positions */\n\nconst ICON_ONLY_SHAPES = ['circle'];\n\n/**\n * AuroButton is a custom element that provides a styled, accessible button with support for various states and form association.\n * It is designed to be flexible, supporting loading states, icon slots, and integration with HTML5 forms.\n * @property {'default', 'rounded', 'pill', 'circle'} shape - Defines the shape of the button.\n * @property {'xs', 'sm', 'md', 'lg', 'xl'} size - Defines the size of the button.\n * @property {'primary', 'secondary', 'tertiary', 'ghost', 'flat'} variant - Sets the button variant.\n * @property {'submit', 'reset', 'button'} type - The type of button. Matches HTML5 Button Spec.\n * @property {boolean} onDark - Indicates if the button is rendered in dark mode.\n */\nclass AuroButton extends AuroElement {\n\n  /**\n   * Enables form association for this element.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals\n   * @returns {boolean} - Returns true to enable form association.\n   */\n  static get formAssociated() {\n    return true;\n  }\n\n  constructor() {\n    super();\n    this.autofocus = false;\n    this.disabled = false;\n    this.loading = false;\n    this.size = \"md\";\n    this.shape = \"rounded\";\n    this.onDark = false;\n    this.fluid = false;\n    this.loadingText = this.loadingText || 'Loading...';\n\n    // Support for HTML5 forms\n    if (typeof this.attachInternals === 'function') {\n      this.internals = this.attachInternals();\n    } else {\n      this.internals = null;\n\n      // eslint-disable-next-line no-console\n      console.warn('This browser does not support form association features. Some form-related functionality may not work as expected. Consider using a polyfill or handling click events manually.');\n    }\n\n    /**\n     * Generate unique names for dependency components.\n     */\n    const versioning = new AuroDependencyVersioning();\n\n    /**\n     * @private\n     */\n    this.loaderTag = versioning.generateTag('auro-loader', loaderVersion, AuroLoader);\n\n    /**\n     *  @private\n     */\n    this.buttonHref = undefined;\n\n    /**\n     *  @private\n     */\n    this.buttonTarget = undefined;\n\n    /**\n     *  @private\n     */\n    this.buttonRel = undefined;\n  }\n\n  static get styles() {\n    return [\n      tokensCss$2,\n      styleCss$2,\n      colorCss$2,\n      shapeSize\n    ];\n  }\n\n  static get properties() {\n    return {\n\n      ...super.properties,\n\n      /**\n       * Override layout since it isn't used in this component.\n       * @private\n       */\n      layout: {\n        type: Boolean,\n        attribute: false,\n        reflect: false\n      },\n\n      /**\n       * This Boolean attribute lets you specify that the button should have input focus when the page loads, unless overridden by the user.\n       */\n      autofocus: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * If set to true, button will become disabled and not allow for interactions.\n       */\n      disabled: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Alters the shape of the button to be full width of its parent container.\n       */\n      fluid: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * If set to true button text will be replaced with `auro-loader` and become disabled.\n       */\n      loading: {\n        type: Boolean,\n        reflect: true\n      },\n\n      /**\n       * Sets custom loading text for the `aria-label` on a button in loading state. If not set, the default value of \"Loading...\" will be used.\n       */\n      loadingText: {\n        type: String\n      },\n\n      /**\n       * Populates `tabindex` to define the focusable sequence in keyboard navigation.\n       */\n      tIndex: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Populates `tabindex` to define the focusable sequence in keyboard navigation.\n       * Must be used with \".\" to ensure the host element does not retain a reference to the `tabindex` attribute.\n       * Example: `<auro-button .tabindex=\"${this.disabled ? '-1' : '0'}\"></auro-button>`\n       */\n      tabindex: {\n        type: String,\n        reflect: false\n      },\n\n      /**\n       * Sets title attribute. The information is most often shown as a tooltip text when the mouse moves over the element.\n       */\n      title: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * The type of the button. Possible values are: `submit`, `reset`, `button`.\n       */\n      type: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Defines the value associated with the button which is submitted with the form data.\n       */\n      value: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * Sets button variant option.\n       * @default primary\n       */\n      variant: {\n        type: String,\n        reflect: true\n      },\n\n      /**\n       * @private\n       */\n      buttonHref: {\n        type: String,\n      },\n\n      /**\n       * @private\n       */\n      buttonTarget: {\n        type: String,\n      },\n\n      /**\n       * @private\n       */\n      buttonRel: {\n        type: String,\n      },\n    };\n  }\n\n  /**\n   * This will register this element with the browser.\n   * @param {string} [name=\"auro-button\"] - The name of element that you want to register to.\n   *\n   * @example\n   * AuroButton.register(\"custom-button\") // this will register this element to <custom-button/>\n   *\n   */\n  static register(name = \"auro-button\") {\n    AuroLibraryRuntimeUtils$3.prototype.registerComponent(name, AuroButton);\n  }\n\n  /**\n   * Internal method to apply focus to the HTML5 button.\n   * @private\n   * @returns {void}\n   */\n  focus() {\n    this.renderRoot.querySelector('button').focus();\n  }\n\n  /**\n   * Submits the form that this button is associated with.\n   * @private\n   * @returns {void}\n   */\n  surfaceSubmitEvent() {\n    if (this.form) {\n      this.form.requestSubmit();\n    }\n  }\n\n  /**\n   * Returns the form element that this button is associated with.\n   * @private\n   * @returns {HTMLFormElement | null}\n   */\n  get form() {\n    return this.internals ? this.internals.form : null;\n  }\n\n  /**\n   * @private\n   * @returns {Boolean}\n   */\n  get hideText() {\n    return ICON_ONLY_SHAPES.includes(this.shape);\n  }\n\n  /**\n   * Returns the current value of the projected `aria-label` attribute or undefined if not set.\n   * @returns {string | undefined}\n   * @private\n   */\n  get currentAriaLabel() {\n    if (!this.attributeWatcher) return undefined;\n\n    const ariaLabel = this.attributeWatcher.getObservedAttribute(\"aria-label\");\n    return ariaLabel || undefined;\n  }\n\n  /**\n   * Returns the current value of the projected `aria-labelledby` attribute or undefined if not set.\n   * @returns {string | undefined}\n   * @private\n   */\n  get currentAriaLabelledBy() {\n    if (!this.attributeWatcher) return undefined;\n\n    const ariaLabelledBy = this.attributeWatcher.getObservedAttribute(\"aria-labelledby\");\n    return ariaLabelledBy || undefined;\n  }\n\n  /**\n   * Renders the default layout for the button.\n   * @returns {TemplateResult}\n   * @private\n   */\n  renderLayoutDefault() {\n    const classes = {\n      \"util_insetLg--squish\": true,\n      \"auro-button\": true,\n      \"icon-only\": this.hideText,\n      wrapper: true,\n      loading: this.loading,\n    };\n\n    const tag = this.buttonHref ? literal`a` : literal`button`;\n    const part = this.buttonHref ? 'link' : 'button';\n\n    return html$1`\n      <${tag}\n        part=\"${part}\"\n        aria-label=\"${ifDefined(this.loading ? this.loadingText : this.currentAriaLabel || undefined)}\"\n        aria-labelledby=\"${ifDefined(this.loading ? undefined : this.currentAriaLabelledBy || undefined)}\"\n        tabindex=\"${ifDefined(this.tIndex || this.tabindex)}\"\n        ?autofocus=\"${this.autofocus}\"\n        class=${classMap(classes)}\n        ?disabled=\"${this.disabled || this.loading}\"\n        ?onDark=\"${this.onDark}\"\n        title=\"${ifDefined(this.title ? this.title : undefined)}\"\n        name=\"${ifDefined(this.name ? this.name : undefined)}\"\n        type=\"${ifDefined(this.type ? this.type : undefined)}\"\n        variant=\"${ifDefined(this.variant ? this.variant : undefined)}\"\n        .value=\"${ifDefined(this.value ? this.value : undefined)}\"\n        @click=\"${this.type === 'submit' ? this.surfaceSubmitEvent : undefined}\"\n        href=\"${ifDefined(this.buttonHref || undefined)}\"\n        target=\"${ifDefined(this.buttonTarget || undefined)}\"\n        rel=\"${ifDefined(this.buttonRel || undefined)}\"\n      >\n        ${ifDefined(this.loading ? html$1`<${this.loaderTag} pulse part=\"loader\"></${this.loaderTag}>` : undefined)}\n\n        <span class=\"contentWrapper\">\n          <span class=\"textSlot\" part=\"text\">\n            <slot></slot>\n          </span>\n        </span>\n      </${tag}>\n    `;\n  }\n\n  /**\n   * Renders the layout of the button.\n   * @returns {TemplateResult}\n   * @private\n   */\n  renderLayout() {\n    return this.renderLayoutDefault();\n  }\n}\n\nvar buttonVersion = '11.0.0';\n\nvar colorCss = css`:host([error]){--ds-auro-helptext-color: var(--ds-basic-color-status-error, #e31f26)}:host([onDark]){--ds-auro-helptext-color: var(--ds-basic-color-texticon-inverse-muted, #ccd2db)}:host([onDark][error]){--ds-auro-helptext-color: var(--ds-basic-color-status-error-subtle, #fbc6c6)}.helptext-wrapper{color:var(--ds-auro-helptext-color)}`;\n\nvar styleCss = css`:host{position:relative;display:block}.helptext-wrapper{display:none;font-size:12px;font-weight:450;letter-spacing:0;line-height:16px}:host([large]) .helptext-wrapper{font-size:16px;font-weight:450;letter-spacing:0;line-height:24px}.helptext-wrapper[visible]{display:block}::slotted(*:not(:empty)){margin-top:var(--ds-size-50, 0.25rem);margin-bottom:0}::slotted(p){margin-block:0}`;\n\nvar tokensCss = css`:host{--ds-auro-helptext-color: var(--ds-basic-color-texticon-muted, #676767)}`;\n\n// Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n// ---------------------------------------------------------------------\n\n/* eslint-disable line-comment-position, no-inline-comments, no-confusing-arrow, no-nested-ternary, implicit-arrow-linebreak */\n\nclass AuroLibraryRuntimeUtils {\n\n  /* eslint-disable jsdoc/require-param */\n\n  /**\n   * This will register a new custom element with the browser.\n   * @param {String} name - The name of the custom element.\n   * @param {Object} componentClass - The class to register as a custom element.\n   * @returns {void}\n   */\n  registerComponent(name, componentClass) {\n    if (!customElements.get(name)) {\n      customElements.define(name, class extends componentClass {});\n    }\n  }\n\n  /**\n   * Finds and returns the closest HTML Element based on a selector.\n   * @returns {void}\n   */\n  closestElement(\n    selector, // selector like in .closest()\n    base = this, // extra functionality to skip a parent\n    __Closest = (el, found = el && el.closest(selector)) =>\n      !el || el === document || el === window\n        ? null // standard .closest() returns null for non-found selectors also\n        : found\n          ? found // found a selector INside this element\n          : __Closest(el.getRootNode().host) // recursion!! break out to parent DOM\n  ) {\n    return __Closest(base);\n  }\n  /* eslint-enable jsdoc/require-param */\n\n  /**\n   * If the element passed is registered with a different tag name than what is passed in, the tag name is added as an attribute to the element.\n   * @param {Object} elem - The element to check.\n   * @param {String} tagName - The name of the Auro component to check for or add as an attribute.\n   * @returns {void}\n   */\n  handleComponentTagRename(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    if (elemTag !== tag) {\n      elem.setAttribute(tag, true);\n    }\n  }\n\n  /**\n   * Validates if an element is a specific Auro component.\n   * @param {Object} elem - The element to validate.\n   * @param {String} tagName - The name of the Auro component to check against.\n   * @returns {Boolean} - Returns true if the element is the specified Auro component.\n   */\n  elementMatch(elem, tagName) {\n    const tag = tagName.toLowerCase();\n    const elemTag = elem.tagName.toLowerCase();\n\n    return elemTag === tag || elem.hasAttribute(tag);\n  }\n}\n\n// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\n/**\n * Displays help text or error messages within form elements - Internal Use Only.\n *\n * @attr { Boolean } large - If declared, make font-size to 1rem(16px).\n */\nclass AuroHelpText extends LitElement {\n\n  constructor() {\n    super();\n\n    this.error = false;\n    this.onDark = false;\n    this.hasTextContent = false;\n\n    AuroLibraryRuntimeUtils.prototype.handleComponentTagRename(this, 'auro-helptext');\n  }\n\n  static get styles() {\n    return [\n      colorCss,\n      styleCss,\n      tokensCss\n    ];\n  }\n\n  // function to define props used within the scope of this component\n  static get properties() {\n    return {\n\n      /**\n       * @private\n       */\n      slotNodes: {\n        type: Boolean,\n      },\n\n      /**\n       * @private\n       */\n      hasTextContent: {\n        type: Boolean,\n      },\n\n      /**\n       * If declared, make font color red.\n       */\n      error: {\n        type: Boolean,\n        reflect: true,\n      },\n\n      /**\n       * If declared, will apply onDark styles.\n       */\n      onDark: {\n        type: Boolean,\n        reflect: true\n      }\n    };\n  }\n\n  /**\n   * This will register this element with the browser.\n   * @param {string} [name=\"auro-helptext\"] - The name of element that you want to register to.\n   *\n   * @example\n   * AuroCheckbox.register(\"custom-helptext\") // this will register this element to <custom-helptext/>\n   *\n   */\n  static register(name = \"auro-helptext\") {\n    AuroLibraryRuntimeUtils.prototype.registerComponent(name, AuroHelpText);\n  }\n\n  updated() {\n    this.handleSlotChange();\n  }\n\n  handleSlotChange(event) {\n    if (event) {\n      this.slotNodes = event.target.assignedNodes();\n    }\n\n    this.hasTextContent = this.checkSlotsForContent(this.slotNodes);\n  }\n\n  /**\n   * Checks if any of the provided nodes or their nested slot nodes contain non-empty text content.\n   *\n   * @param {NodeList|Array} nodes - The list of nodes to check for content.\n   * @returns {boolean} - Returns true if any node or nested slot node contains non-empty text content, otherwise false.\n   * @private\n   */\n  checkSlotsForContent(nodes) {\n    if (!nodes) {\n      return false;\n    }\n\n    return nodes.some((node) => {\n      if (node.textContent.trim()) {\n        return true;\n      }\n\n      if (!node.querySelector) {\n        return false;\n      }\n\n      const nestedSlot = node.tagName === 'SLOT' ? node : node.querySelector('slot');\n      if (!nestedSlot) {\n        return false;\n      }\n\n      const nestedSlotNodes = nestedSlot.assignedNodes();\n      return this.checkSlotsForContent(nestedSlotNodes);\n    });\n  }\n\n  // function that renders the HTML and CSS into  the scope of the component\n  render() {\n    return html`\n      <div class=\"helptext-wrapper\" ?visible=\"${this.hasTextContent}\">\n          <slot @slotchange=${this.handleSlotChange}></slot>\n      </div>\n    `;\n  }\n}\n\nvar helpTextVersion = '1.0.0';\n\n// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license\n// See LICENSE in the project root for license information.\n\n\n// build the component class\nclass AuroInput extends BaseInput {\n\n  constructor() {\n    super();\n\n    /**\n     * Generate unique names for dependency components.\n     */\n    const versioning = new AuroDependencyVersioning();\n\n    /**\n     * @private\n     */\n    this.buttonTag = versioning.generateTag('auro-formkit-input-button', buttonVersion, AuroButton);\n\n    /**\n     * @private\n     */\n    this.hasDisplayValueContent = false;\n\n    /**\n     * @private\n     */\n    this.helpTextTag = versioning.generateTag('auro-formkit-input-helptext', helpTextVersion, AuroHelpText);\n\n    /**\n     * @private\n     */\n    this.iconTag = versioning.generateTag('auro-formkit-input-icon', iconVersion, AuroIcon);\n  }\n\n  static get styles() {\n    return [\n      css`${classicStyleCss}`,\n      css`${classicColorCss}`,\n      css`${shapeSizeCss}`,\n      css`${colorBaseCss}`,\n      css`${styleCss$4}`,\n      css`${styleDefaultCss}`,\n      css`${tokensCss$4}`,\n      css`${emphasizedStyleCss}`,\n      css`${emphasizedColorCss}`,\n      css`${snowflakeStyleCss}`\n    ];\n  }\n\n  /**\n   * Returns classmap configuration for html5 input labels in all layouts.\n   * @private\n   * @returns {void}\n   */\n  get commonLabelClasses() {\n    return {\n      'is-disabled': this.disabled,\n      'withValue': this.value && this.value.length > 0,\n      'util_displayHiddenVisually': this.hasDisplayValueContent && !this.hasFocus && this.value && this.value.length > 0\n    };\n  }\n\n  /**\n   * Returns classmap configuration for html5 inputs in all layouts.\n   * @private\n   * @returns {object} - Returns classmap.\n   */\n  get commonInputClasses() {\n    return {\n      'util_displayHiddenVisually': (this.hasDisplayValueContent && !this.hasFocus && this.value && this.value.length > 0) || ((!this.value || this.value.length === 0) && !this.hasFocus && (!this.placeholder || this.placeholder === '')),\n    };\n  }\n\n  /**\n   * Returns classmap configuration for html5 inputs in each layout.\n   * @private\n   * @returns {object} - Returns classmap.\n   */\n  get legacyInputClasses() {\n    return {\n      ...this.commonInputClasses\n    };\n  }\n\n  /**\n   * Returns classmap configuration for wrapper elements in each layout.\n   * @private\n   * @returns {object} - Returns classmap.\n   */\n  get commonWrapperClasses() {\n    return {\n      'wrapper': true,\n      'simple': this.simple,\n      'withValue': this.value && this.value.length > 0,\n      'hasFocus': this.hasFocus\n    };\n  }\n\n  /**\n   * Returns classmap configuration for accent elements in each layout.\n   * @private\n   * @returns {object} - Returns classmap.\n   */\n  get commonAccentClasses() {\n    return {\n      'util_displayHidden': false\n    };\n  }\n\n  /**\n   * Returns classmap configuration for helpText elements in each layout.\n   * @private\n   * @returns {object} - Returns classmap.\n   */\n  get helpTextClasses() {\n    return {\n      'helpTextWrapper': true,\n      'leftIndent': this.shape.toLowerCase().includes('pill') && !this.shape.toLowerCase().includes('right'),\n      'rightIndent': this.shape.toLowerCase().includes('pill') && !this.shape.toLowerCase().includes('left')\n    };\n  };\n\n  /**\n   * This will register this element with the browser.\n   * @param {string} [name=\"auro-input\"] - The name of element that you want to register to.\n   *\n   * @example\n   * AuroInput.register(\"custom-input\") // this will register this element to <custom-input/>\n   *\n   */\n  static register(name = \"auro-input\") {\n    AuroLibraryRuntimeUtils$3.prototype.registerComponent(name, AuroInput);\n  }\n\n  /**\n   * Function to determine if the input is meant to render an icon visualizing the input type.\n   * @private\n   * @returns {boolean} - Returns true if the input type is meant to render an icon.\n   */\n  hasTypeIcon() {\n    if (this.icon || this.type === 'date') {\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Function to determine if there is any displayValue content to render.\n   * @private\n   * @returns {void}\n   */\n  checkDisplayValueSlotChange() {\n    let nodes = this.shadowRoot.querySelector('slot[name=\"displayValue\"]').assignedNodes();\n\n    // Handle when DisplayValue is multi-level slot content (e.g. combobox passing displayValue to input)\n    if (nodes[0].tagName === 'SLOT') {\n      nodes = nodes[0].assignedNodes();\n    }\n\n    let hasContent = false;\n\n    if (nodes.length > 0) {\n      hasContent = true;\n    }\n\n    this.hasDisplayValueContent = hasContent;\n  }\n\n  /**\n   * Returns HTML for the validation error icon.\n   * @private\n   * @returns {html} - Returns HTML for the validation error icon.\n   */\n  renderValidationErrorIconHtml() {\n    return html$1`\n      ${this.validity && this.validity !== 'valid' ? html$1`\n        <div class=\"notification alertNotification\">\n          <${this.iconTag}\n            category=\"alert\"\n            name=\"error-stroke\"\n            variant=\"statusError\"\n            ?ondark=\"${this.onDark}\">\n          </${this.iconTag}>\n        </div>\n      ` : undefined}\n    `;\n  }\n\n  /**\n   * Returns HTML for the HTML5 input element.\n   * @private\n   * @param {boolean} [useLegacyHiddenState=false] - If true, the input will be visually hidden when not focused and has no value.\n   * @returns {html} - Returns HTML for the HTML5 input element.\n   */\n  renderHtmlInput(useLegacyHiddenState = false) {\n    const displayValueClasses = {\n      'displayValue': true,\n      'hasContent': this.hasDisplayValueContent,\n      'hasFocus': this.hasFocus,\n      'withValue': this.value && this.value.length > 0,\n    };\n\n    // Remove this when the classic layout is sunset.\n    const inputOverrideClasses = useLegacyHiddenState\n      ? this.legacyInputClasses\n      : this.commonInputClasses;\n\n    return html$1`\n      <label for=${this.inputId} class=\"${classMap(this.commonLabelClasses)}\" part=\"label\">\n        <slot name=\"label\">\n          ${this.label}\n        </slot>\n        ${this.required ? undefined : html$1`<slot name=\"optionalLabel\"> (optional)</slot>`}\n      </label>\n\n      <!-- Attributes are grouped into: basic attributes, event handlers, ARIA attributes, and input-specific attributes -->\n      <input\n        @blur=\"${this.handleBlur}\"\n        @focusin=\"${this.handleFocusin}\"\n        @focusout=\"${this.handleFocusout}\"\n        @input=\"${this.handleInput}\"\n        .placeholder=${this.placeholderStr}\n        .role=${this.a11yRole}\n        ?activeLabel=\"${this.activeLabel}\"\n        ?disabled=\"${this.disabled}\"\n        ?required=\"${this.required}\"\n        aria-controls=${ifDefined(this.a11yControls)}\n        aria-describedby=\"${this.uniqueId}\"\n        aria-expanded=${ifDefined(this.a11yExpanded)}\n        aria-invalid=\"${this.validity !== 'valid'}\"\n        autocomplete=\"${ifDefined(this.autocomplete ? this.autocomplete : undefined)}\"\n        autocapitalize=\"${ifDefined(this.autocapitalize ? this.autocapitalize : undefined)}\"\n        autocorrect=\"${ifDefined(this.autocorrect ? this.autocorrect : undefined)}\"\n        class=\"${classMap(inputOverrideClasses)}\"\n        id=\"${this.inputId}\"\n        inputmode=\"${ifDefined(this.inputmode ? this.inputmode : undefined)}\"\n        lang=\"${ifDefined(this.lang)}\"\n        maxlength=\"${ifDefined(this.maxLength ? this.maxLength : undefined)}\"\n        minlength=\"${ifDefined(this.minLength ? this.minLength : undefined)}\"\n        name=\"${ifDefined(this.name)}\"\n        part=\"input\"\n        pattern=\"${ifDefined(this.definePattern())}\"\n        spellcheck=\"${ifDefined(this.spellcheck ? this.spellcheck : undefined)}\"\n        type=\"${this.type === \"password\" && this.showPassword ? \"text\" : this.getInputType(this.type)}\"\n      />\n      <div class=\"${classMap(displayValueClasses)}\" aria-hidden=\"true\" part=\"displayValue\">\n        <div class=\"displayValueWrapper\">\n          <slot name=\"displayValue\" @slotchange=${this.checkDisplayValueSlotChange}></slot>\n        </div>\n      </div>\n    `;\n  }\n\n  /**\n   * Returns HTML for the clear action button.\n   * @private\n   * @returns {html} - Returns HTML for the clear action button.\n   */\n  renderHtmlActionClear() {\n    return html$1`\n      <div class=\"notification clear\">\n        <${this.buttonTag}\n          @click=\"${this.handleClickClear}\"\n          ?onDark=\"${this.onDark}\"\n          aria-label=\"${i18n(this.lang, 'clearInput')}\"\n          class=\"notificationBtn clearBtn\"\n          shape=\"circle\"\n          size=\"sm\"\n          variant=\"ghost\">\n          <${this.iconTag}\n            ?customColor=\"${this.onDark}\"\n            category=\"interface\"\n            name=\"x-lg\"\n            >\n          </${this.iconTag}>\n        </${this.buttonTag}>\n      </div>\n    `;\n  }\n\n  /**\n   * Returns HTML for the show password button.\n   * @private\n   * @returns {html} - Returns HTML for the show password button.\n   */\n  renderHtmlNotificationPassword() {\n    return html$1`\n      <div class=\"notification\">\n        <${this.buttonTag}\n          @click=\"${this.handleClickShowPassword}\"\n          ?onDark=\"${this.onDark}\"\n          class=\"notificationBtn passwordBtn\"\n          aria-label=\"${this.showPassword ? i18n(this.lang, \"hidePassword\") : i18n(this.lang, \"showPassword\")}\"\n          shape=\"circle\"\n          size=\"sm\"\n          variant=\"ghost\">\n          <${this.iconTag}\n            ?customColor=\"${this.onDark}\"\n            ?hidden=${!this.showPassword}\n            category=\"interface\"\n            name=\"hide-password-stroke\">\n          </${this.iconTag}>\n          <${this.iconTag}\n            ?customColor=\"${this.onDark}\"\n            ?hidden=${this.showPassword}\n            category=\"interface\"\n            name=\"view-password-stroke\">\n          </${this.iconTag}>\n        </${this.buttonTag}>\n      </div>\n    `;\n  }\n\n  /**\n   * Returns HTML for the input type icon.\n   * @private\n   * @returns {html} - Returns HTML for the input type icon.\n   */\n  renderHtmlTypeIcon() {\n    return html$1`\n      <div class=\"typeIcon\">\n        ${this.type === 'credit-card' ? this.processCreditCard() : undefined}\n\n        <!-- The repeat() method is used below in order to force auro-icon to re-render when the name value is updated.\n          This should be cleaned up when auro-icon issue #31 is resolved. -->\n        ${this.inputIconName\n        ? repeat([this.inputIconName], (val) => val, (name) => html$1`\n          <${this.iconTag}\n            ?onDark=\"${this.onDark}\"\n            category=\"payment\"\n            class=\"accentIcon\"\n            name=\"${name}\"\n            part=\"accentIcon\"\n            variant=\"${this.disabled ? 'disabled' : 'muted'}\">\n          </${this.iconTag}>\n        `) : undefined\n        }\n        ${this.type === 'date'\n        ? html$1`\n          <${this.iconTag}\n            ?onDark=\"${this.onDark}\"\n            category=\"interface\"\n            class=\"accentIcon\"\n            name=\"calendar\"\n            part=\"accentIcon\"\n            variant=\"${this.disabled ? 'disabled' : 'muted'}\">\n          </${this.iconTag}>`\n        : undefined\n        }\n      </div>\n    `;\n  }\n\n  /**\n   * Returns HTML for the help text and error message.\n   * @private\n   * @returns {html} - Returns HTML for the help text and error message.\n   */\n  renderHtmlHelpText() {\n    return html$1`\n      ${!this.validity || this.validity === undefined || this.validity === 'valid'\n        ? html$1`\n          <${this.helpTextTag} ?onDark=\"${this.onDark}\">\n            <p id=\"${this.uniqueId}\" part=\"helpText\">\n              <slot name=\"helpText\">${this.getHelpText()}</slot>\n            </p>\n          </${this.helpTextTag}>\n        `\n        : html$1`\n          <${this.helpTextTag} error ?onDark=\"${this.onDark}\">\n            <p id=\"${this.uniqueId}\" role=\"alert\" aria-live=\"assertive\" part=\"helpText\">\n              ${this.errorMessage}\n            </p>\n          </${this.helpTextTag}>\n        `\n      }\n    `;\n  }\n\n  /**\n   * Returns HTML for the classic layout.\n   * @private\n   * @returns {import(\"lit\").TemplateResult} - Returns HTML for the classic layout.\n   */\n  renderLayoutClassic() {\n    const classicClassMap = {\n      ...this.commonWrapperClasses,\n      'thin': !this.simple\n    };\n\n    return html$1`\n      <div\n        @click=\"${this.handleClick}\"\n        class=\"${classMap(classicClassMap)}\"\n        part=\"wrapper\">\n        <div part=\"accent-left\" class=\"accents left ${classMap(this.commonAccentClasses)}\">\n           ${this.renderHtmlTypeIcon()}\n        </div>\n        <div class=\"mainContent\">\n          ${this.renderHtmlInput(true)}\n        </div>\n        <div part=\"accent-right\" class=\"accents right ${classMap(this.commonAccentClasses)}\">\n          ${this.renderValidationErrorIconHtml()}\n          ${this.hasValue && this.type === 'password' ? this.renderHtmlNotificationPassword() : undefined}\n          ${this.hasValue ? html$1`\n            ${!this.disabled && !this.readonly ? html$1`\n              ${this.renderHtmlActionClear()}\n            ` : undefined}\n          ` : undefined}\n        </div>\n      </div>\n      <div class=\"helpTextWrapper leftIndent rightIndent\" part=\"inputHelpText\">\n        ${this.renderHtmlHelpText()}\n      </div>\n    `;\n  }\n\n  /**\n   * Returns HTML for the emphasized layout. Does not support type=\"*\".\n   * @private\n   * @returns {html} - Returns HTML for the emphasized layout.\n   */\n  renderLayoutEmphasized() {\n    return html$1`\n      <div\n        @click=\"${this.handleClick}\"\n        class=\"${classMap(this.commonWrapperClasses)}\"\n        part=\"wrapper\">\n        <div class=\"accents left ${this.commonAccentClasses}\">\n          ${this.layout.includes('left') ? html$1`\n            ${this.renderValidationErrorIconHtml()}\n          ` : undefined}\n        </div>\n        <div class=\"mainContent\">\n          ${this.renderHtmlInput()}\n        </div>\n        <div class=\"accents right ${this.commonAccentClasses}\">\n          ${this.layout.includes('right') || this.layout === \"emphasized\" ? html$1`\n            ${this.renderValidationErrorIconHtml()}\n          ` : undefined}\n          ${this.hasValue ? html$1`\n            ${!this.disabled && !this.readonly ? html$1`\n              ${this.renderHtmlActionClear()}\n            ` : undefined}\n          ` : undefined}\n        </div>\n      </div>\n      <div class=\"${classMap(this.helpTextClasses)}\" part=\"inputHelpText\">\n        ${this.renderHtmlHelpText()}\n      </div>\n    `;\n  }\n\n  /**\n   * Returns HTML for the emphasized layout. Does not support type=\"*\".\n   * @private\n   * @returns {html} - Returns HTML for the emphasized layout.\n   */\n  renderLayoutSnowflake() {\n    return html$1`\n      <div\n        @click=\"${this.handleClick}\"\n        class=\"${classMap(this.commonWrapperClasses)}\"\n        part=\"wrapper\">\n        <div class=\"accents left\">\n           ${this.renderHtmlTypeIcon()}\n        </div>\n        <div class=\"mainContent\">\n          ${this.renderHtmlInput()}\n        </div>\n        <div class=\"accents right\">\n          ${this.renderValidationErrorIconHtml()}\n          ${this.hasValue ? html$1`\n            ${!this.disabled && !this.readonly ? html$1`\n              ${this.renderHtmlActionClear()}\n            ` : undefined}\n          ` : undefined}\n        </div>\n      </div>\n      <div class=\"helpTextWrapper leftIndent rightIndent\" part=\"inputHelpText\">\n        ${this.renderHtmlHelpText()}\n      </div>\n    `;\n  }\n\n  /**\n   * Logic to determine the layout of the component.\n   * @private\n   * @param {string} [ForcedLayout] - Used to force a specific layout, pass in the layout name to use.\n   * @returns {void}\n   */\n  renderLayout(ForcedLayout) {\n    const layout = ForcedLayout || this.layout;\n\n    switch (layout) {\n      case 'emphasized':\n        return this.renderLayoutEmphasized();\n      case 'emphasized-left':\n        return this.renderLayoutEmphasized();\n      case 'emphasized-right':\n        return this.renderLayoutEmphasized();\n      case 'snowflake':\n        return this.renderLayoutSnowflake();\n      case 'snowflake-left':\n        return this.renderLayoutSnowflake();\n      case 'snowflake-right':\n        return this.renderLayoutSnowflake();\n      default:\n        return this.renderLayoutClassic();\n    }\n  }\n}\n\nAuroInput.register();\n"]}