{"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 v2.79.2 and Terser v5.39.0.\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"]}