q2-tecton-elements 1.60.0 → 1.60.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle-report.json +911 -870
- package/dist/cjs/click-elsewhere.cjs.entry.js +1 -1
- package/dist/cjs/{index-JnAD7tEB.js → index-BYXz4owL.js} +5 -2
- package/dist/cjs/index-BYXz4owL.js.map +1 -0
- package/dist/cjs/{index-B6mUspT0.js → index-BuXzB2ML.js} +3 -3
- package/dist/cjs/{index-B6mUspT0.js.map → index-BuXzB2ML.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/q2-action-group_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
- package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
- package/dist/cjs/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-badge_7.cjs.entry.js +171 -27
- package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +2 -2
- package/dist/cjs/q2-card.cjs.entry.js +2 -2
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
- package/dist/cjs/q2-carousel.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-donut.cjs.entry.js +2 -2
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-checkbox.cjs.entry.js +3 -3
- package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/q2-context.cjs.entry.js +2 -2
- package/dist/cjs/q2-currency.cjs.entry.js +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
- package/dist/cjs/q2-detail.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown.cjs.entry.js +2 -2
- package/dist/cjs/q2-editable-field.cjs.entry.js +2 -2
- package/dist/cjs/q2-example.cjs.entry.js +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js +2 -2
- package/dist/cjs/q2-form.cjs.entry.js +1 -1
- package/dist/cjs/q2-formatted-text.cjs.entry.js +1 -1
- package/dist/cjs/q2-grid-area.cjs.entry.js +1 -1
- package/dist/cjs/q2-grid.cjs.entry.js +1 -1
- package/dist/cjs/q2-item.cjs.entry.js +2 -2
- package/dist/cjs/q2-legend.cjs.entry.js +1 -1
- package/dist/cjs/q2-link_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-loading-element.cjs.entry.js +2 -2
- package/dist/cjs/q2-loc.cjs.entry.js +2 -2
- package/dist/cjs/q2-message.cjs.entry.js +2 -2
- package/dist/cjs/q2-modal.cjs.entry.js +2 -2
- package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
- package/dist/cjs/q2-optgroup.cjs.entry.js +2 -2
- package/dist/cjs/q2-option-list_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-option.cjs.entry.js +2 -2
- package/dist/cjs/q2-pagination.cjs.entry.js +2 -2
- package/dist/cjs/q2-pill.cjs.entry.js +2 -2
- package/dist/cjs/q2-radio-group.cjs.entry.js +2 -2
- package/dist/cjs/q2-radio.cjs.entry.js +2 -2
- package/dist/cjs/q2-relative-time.cjs.entry.js +2 -2
- package/dist/cjs/q2-section.cjs.entry.js +2 -2
- package/dist/cjs/q2-select.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
- package/dist/cjs/q2-tag.cjs.entry.js +2 -2
- package/dist/cjs/q2-tecton-elements.cjs.js +2 -2
- package/dist/cjs/q2-textarea.cjs.entry.js +2 -2
- package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/{shapes-CmBHp0YP.js → shapes-AGx9jMFH.js} +3 -3
- package/dist/cjs/{shapes-CmBHp0YP.js.map → shapes-AGx9jMFH.js.map} +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +1 -1
- package/dist/collection/components/q2-checkbox/q2-checkbox.css +1 -0
- package/dist/collection/components/q2-data-table/q2-data-table.js +7 -7
- package/dist/collection/components/q2-file-picker/q2-file-picker.js +3 -3
- package/dist/collection/components/q2-grid/q2-grid.js +30 -30
- package/dist/collection/components/q2-grid-area/q2-grid-area.js +42 -42
- package/dist/collection/components/q2-icon/q2-icon.js +5 -20
- package/dist/collection/components/q2-icon/q2-icon.js.map +1 -1
- package/dist/collection/components/q2-input/q2-input.js +1 -1
- package/dist/collection/components/q2-loading/q2-loading.css +8 -0
- package/dist/collection/components/q2-loading/q2-loading.js +168 -5
- package/dist/collection/components/q2-loading/q2-loading.js.map +1 -1
- package/dist/collection/components/q2-option-list/q2-option-list.js +4 -4
- package/dist/collection/components/q2-stepper-pane/q2-stepper-pane.js +2 -2
- package/dist/collection/utils/sprites.js +16 -0
- package/dist/collection/utils/sprites.js.map +1 -0
- package/dist/components/q2-checkbox2.js +1 -1
- package/dist/components/q2-checkbox2.js.map +1 -1
- package/dist/components/q2-icon2.js +5 -20
- package/dist/components/q2-icon2.js.map +1 -1
- package/dist/components/q2-loading2.js +154 -5
- package/dist/components/q2-loading2.js.map +1 -1
- package/dist/components/sprites.js +20 -0
- package/dist/components/sprites.js.map +1 -0
- package/dist/esm/click-elsewhere.entry.js +1 -1
- package/dist/esm/{index-COzomxjJ.js → index-CGkHOjh1.js} +5 -2
- package/dist/esm/index-CGkHOjh1.js.map +1 -0
- package/dist/esm/{index-CkXFIBxL.js → index-xCuy-dFb.js} +3 -3
- package/dist/{q2-tecton-elements/index-CkXFIBxL.js.map → esm/index-xCuy-dFb.js.map} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/q2-action-group_2.entry.js +2 -2
- package/dist/esm/q2-action-sheet.entry.js +2 -2
- package/dist/esm/q2-avatar.entry.js +1 -1
- package/dist/esm/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.js.map +1 -1
- package/dist/esm/q2-badge_7.entry.js +171 -27
- package/dist/esm/q2-badge_7.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +2 -2
- package/dist/esm/q2-card.entry.js +2 -2
- package/dist/esm/q2-carousel-pane.entry.js +2 -2
- package/dist/esm/q2-carousel.entry.js +2 -2
- package/dist/esm/q2-chart-area.entry.js +2 -2
- package/dist/esm/q2-chart-bar.entry.js +2 -2
- package/dist/esm/q2-chart-donut.entry.js +2 -2
- package/dist/esm/q2-checkbox-group.entry.js +2 -2
- package/dist/esm/q2-checkbox.entry.js +3 -3
- package/dist/esm/q2-checkbox.entry.js.map +1 -1
- package/dist/esm/q2-context.entry.js +2 -2
- package/dist/esm/q2-currency.entry.js +1 -1
- package/dist/esm/q2-data-table.entry.js +2 -2
- package/dist/esm/q2-detail.entry.js +2 -2
- package/dist/esm/q2-dropdown-item.entry.js +2 -2
- package/dist/esm/q2-dropdown.entry.js +2 -2
- package/dist/esm/q2-editable-field.entry.js +2 -2
- package/dist/esm/q2-example.entry.js +1 -1
- package/dist/esm/q2-file-picker.entry.js +2 -2
- package/dist/esm/q2-form.entry.js +1 -1
- package/dist/esm/q2-formatted-text.entry.js +1 -1
- package/dist/esm/q2-grid-area.entry.js +1 -1
- package/dist/esm/q2-grid.entry.js +1 -1
- package/dist/esm/q2-item.entry.js +2 -2
- package/dist/esm/q2-legend.entry.js +1 -1
- package/dist/esm/q2-link_2.entry.js +2 -2
- package/dist/esm/q2-loading-element.entry.js +2 -2
- package/dist/esm/q2-loc.entry.js +2 -2
- package/dist/esm/q2-message.entry.js +2 -2
- package/dist/esm/q2-modal.entry.js +2 -2
- package/dist/esm/q2-month-picker.entry.js +2 -2
- package/dist/esm/q2-optgroup.entry.js +2 -2
- package/dist/esm/q2-option-list_2.entry.js +2 -2
- package/dist/esm/q2-option.entry.js +2 -2
- package/dist/esm/q2-pagination.entry.js +2 -2
- package/dist/esm/q2-pill.entry.js +2 -2
- package/dist/esm/q2-radio-group.entry.js +2 -2
- package/dist/esm/q2-radio.entry.js +2 -2
- package/dist/esm/q2-relative-time.entry.js +2 -2
- package/dist/esm/q2-section.entry.js +2 -2
- package/dist/esm/q2-select.entry.js +2 -2
- package/dist/esm/q2-stepper-pane.entry.js +2 -2
- package/dist/esm/q2-stepper-vertical.entry.js +2 -2
- package/dist/esm/q2-stepper.entry.js +2 -2
- package/dist/esm/q2-tag.entry.js +2 -2
- package/dist/esm/q2-tecton-elements.js +3 -3
- package/dist/esm/q2-textarea.entry.js +2 -2
- package/dist/esm/q2-tooltip.entry.js +2 -2
- package/dist/esm/{shapes-ElQYMSyu.js → shapes-B6iI6sMH.js} +3 -3
- package/dist/esm/{shapes-ElQYMSyu.js.map → shapes-B6iI6sMH.js.map} +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +1 -1
- package/dist/q2-tecton-elements/click-elsewhere.entry.js +1 -1
- package/dist/q2-tecton-elements/{index-COzomxjJ.js → index-CGkHOjh1.js} +5 -2
- package/dist/q2-tecton-elements/index-CGkHOjh1.js.map +1 -0
- package/dist/q2-tecton-elements/{index-CkXFIBxL.js → index-xCuy-dFb.js} +3 -3
- package/dist/{esm/index-CkXFIBxL.js.map → q2-tecton-elements/index-xCuy-dFb.js.map} +1 -1
- package/dist/q2-tecton-elements/q2-action-group_2.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-action-sheet.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-avatar.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-badge.q2-btn.q2-icon.q2-input.q2-loading.q2-tab-container.q2-tab-pane.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +259 -121
- package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-calendar.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-card.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-carousel-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-carousel.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-chart-area.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-chart-bar.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-chart-donut.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-checkbox-group.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-checkbox.entry.esm.js.map +1 -1
- package/dist/q2-tecton-elements/q2-checkbox.entry.js +3 -3
- package/dist/q2-tecton-elements/q2-checkbox.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-context.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-currency.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-data-table.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-detail.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-dropdown-item.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-dropdown.entry.js +9 -9
- package/dist/q2-tecton-elements/q2-editable-field.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-example.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-form.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-formatted-text.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-grid-area.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-grid.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-item.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-legend.entry.js +1 -1
- package/dist/q2-tecton-elements/q2-link_2.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-loading-element.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-loc.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-message.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-modal.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-month-picker.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-optgroup.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-option-list_2.entry.js +16 -16
- package/dist/q2-tecton-elements/q2-option.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-pagination.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-pill.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-radio-group.entry.js +12 -12
- package/dist/q2-tecton-elements/q2-radio.entry.js +5 -5
- package/dist/q2-tecton-elements/q2-relative-time.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-section.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-select.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-stepper-pane.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-stepper-vertical.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-stepper.entry.js +8 -8
- package/dist/q2-tecton-elements/q2-tag.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +3 -3
- package/dist/q2-tecton-elements/q2-textarea.entry.js +2 -2
- package/dist/q2-tecton-elements/q2-tooltip.entry.js +2 -2
- package/dist/q2-tecton-elements/{shapes-ElQYMSyu.js → shapes-B6iI6sMH.js} +3 -3
- package/dist/q2-tecton-elements/{shapes-ElQYMSyu.js.map → shapes-B6iI6sMH.js.map} +1 -1
- package/dist/q2-tecton-elements/tecton-tab-pane.entry.js +4 -4
- package/dist/types/components/q2-icon/q2-icon.d.ts +0 -5
- package/dist/types/components/q2-loading/q2-loading.d.ts +16 -2
- package/dist/types/components.d.ts +2 -2
- package/dist/types/utils/sprites.d.ts +5 -0
- package/package.json +3 -3
- package/dist/cjs/index-JnAD7tEB.js.map +0 -1
- package/dist/esm/index-COzomxjJ.js.map +0 -1
- package/dist/q2-tecton-elements/index-COzomxjJ.js.map +0 -1
- /package/dist/types/{home/gitlab-runner/builds → builds}/q2e/development/tecton/tecton/packages/q2-tecton-elements/.stencil/jest.setup.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["q2BadgeCss","Q2Badge","getTextContent","this","hasSlot","hostElement","textContent","trim","shadowRoot","badgeClasses","badgeClass","badgeText","push","size","join","maxLength","computedMaxLength","value","numValue","Math","abs","Number","loc","isNaN","substring","maxNumber","maxNumValue","pow","toLocaleString","min","innerHTML","renderEmptyBadge","h","class","renderStandardBadge","render","q2BtnCss","Q2Btn","constructor","hostRef","type","handleButtonSize","handleDeprecationWarning","handleIcons","icon","Array","from","querySelectorAll","reduce","acc","element","remove","hasIcon","hasLoc","querySelector","hasText","hasIconLeft","firstElementChild","hasIconRight","lastElementChild","hasIconOnly","iconPosition","handleSlotChange","componentWillLoad","handleAriaLabel","handleColor","componentDidLoad","overrideFocus","disconnectedCallback","primaryBtn","primaryBtnWrapper","handleClick","event","loading","disabled","stopImmediatePropagation","focus","delegateFocus","isEventFromElement","ariaLabelObserver","sizeObserver","buttonAttributes","ariaExpanded","getAriaValueFromProp","ariaHasPopup","ariaLabel","label","hideLabel","undefined","ariaSelected","ariaPressed","description","tabindex","tabIndex","buttonClasses","classes","intent","block","color","active","coinLabelClasses","renderButton","badge","renderLoadingSpinner","isLoadingSpinnerInline","Fragment","ref","el","role","_role","hidden","modifiers","renderDefaultLabel","renderDefaultCoinSlot","renderCoinLabel","id","name","onSlotchange","q2IconCss","Q2Icon","spritePrefix","handleIcon","componentDidRender","iconClone","_b","_a","spriteGroup","appendedClone","_c","appendChild","_d","spriteUse","setAttribute","isCustom","setCustomSVGAttrs","fetchSprite","iconCloneViewBox","getAttribute","spriteElement","spriteId","document","spriteEventName","spriteFileName","iconMap","checkForSprite","spriteContainer","getOrCreateSpriteContainer","hasAttribute","cloneSpriteNode","addEventListener","once","createElement","spriteNode","cloneNode","spriteExists","spritePath","getAssetPath","response","fetch","data","text","wrappingDiv","svg","tagName","replaceWith","parentNode","replaceChild","dispatchEvent","CustomEvent","bubbles","spriteContainerId","style","display","body","innerSVG","title","labelId","createGuid","viewBox","xmlns","formatNumber","val","options","prefix","suffix","decimals","decimalSeparator","thousandsSeparator","allowDecimal","allowNegative","explicit","isNegative","parsedValue","replace","toFixed","integerString","decimalString","splitValue","negativeSymbol","formattedValue","fullyFormattedValue","formattingCharacterCount","length","maxlength","MAX_SAFE_INTEGER","toString","unformattedValue","splitIndex","padStart","formatValue","mask","generateMask","minFormattedLength","getMinimumFormattedLength","optionalValidatingChars","isOptionalValidatingChar","character","includes","knownValidatingChars","isKnownValidatingChar","getStaticFormattingChars","knownChars","formattingChars","RegExp","split","Set","isStaticFormattingChar","has","getValidatedChar","char","matcher","toUpperCase","maskArray","currentValueIndex","getNextNonFormattingCharIndex","validChar","currencyFormats","AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EEK","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SKK","SLL","SOS","SRD","STN","SVC","SYP","SZL","THB","TJS","TMM","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VEF","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWD","formatCurrency","currencyCode","processedCurrencyCode","currencyFormat","Object","assign","phoneNumberFormats","AF","AL","DZ","AD","AO","AI","AG","AR","AM","AQ","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BR","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CO","KM","CD","CG","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","TL","EC","EG","SV","GQ","EE","ET","FK","FO","FJ","FI","FR","GF","PF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GN","GW","GY","HK","HN","HT","HU","IS","IN","ID","IR","IQ","IE","IL","IT","JM","JP","JO","KZ","KE","KI","KR","KW","KG","LA","LV","LB","LS","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MU","MX","MD","MC","MN","MS","MA","MZ","MM","NA","NP","NL","AN","NC","NZ","NI","NE","NG","MP","NO","OM","PK","PW","PA","PG","PE","PH","PL","PT","PR","QA","RE","RO","RU","RW","SH","KN","LC","VC","ST","SA","SN","SC","SL","SG","SK","SI","SB","ZA","ES","LK","SD","SR","SZ","SE","CH","SY","TJ","TZ","TH","TG","TT","TN","TR","TM","TC","UG","UA","AE","GB","UY","UZ","VE","VN","VG","VI","YE","ZM","ZW","AC","ME","PS","RS","TW","CW","US","formatPhoneNumber","isoCode","formatSSN","formatTIN","formatAlphanumeric","formatAlpha","modifier","getNumberFormat","formatOptions","numberFormat","formatParts","match","formatNumeric","formatPercentage","postalCodeFormats","AS","CX","CC","GG","GS","IM","JE","XK","LR","YT","FM","NF","PY","PM","PN","WS","SM","SO","SJ","YU","WF","formatPostalCode","dateFormats","formatDate","format","formattedValueObject","detectedType","formatCreditCard","detectCreditCardTypeFromValue","creditCardFormatters","leftIcon","unknownFormatter","unknownFn","valueObject","leftIconMuted","amexFormatter","amexFn","discoverFormatter","discoverFn","masterCardFormatter","masterCardFn","visaFormatter","visaFn","dinersClubInternationalFormatter","dinersClub","discover","amex","masterCard","visa","unknown","firstInt","parseInt","charAt","secondInt","firstfour","substr","thirdInt","firstthree","firstsix","q2InputCss","inputTypeMap","tel","number","password","search","url","email","currency","phone","ssn","alphanumeric","alpha","numeric","percentage","postal","date","Q2Input","guid","isClickEvent","isMobile","scheduledAfterRender","checkSlotCount","isSmall","_preventEntry","showVisibilityToggle","handleCurrencyKeydown","key","inputElement","inputField","textSelectedForDeletion","selectionStart","selectionEnd","handleValueAndCursor","cursorPosition","calculateCursorPositionOnInput","input","emit","clear","setCursorPosition","initMutationObserver","window","observer","MutationObserver","onMutationObserved","observe","childList","mutationObserver","onClearInput","eventDetail","change","onInputBlur","hasFocus","setMessageHeight","valueOnFocus","onInputClick","shouldCursorStayAtEnd","placeCursorAtEnd","onInputFocus","shouldCursorStartAtEnd","calculateCursorPositionOnFocus","onInputInput","stopPropagation","handleCurrencyDeletion","newFormattedValue","getFormattedValue","target","handleDataInput","validateInput","onInputKeydown","keysThatMoveCursor","preventDefault","onInputMousedown","onInputPaste","clipboardData","getData","onRefocusInput","showMessages","onToggleVisibility","FocusEvent","textHidden","validity","inputRef","valid","invalid","manageClearableResizeObserver","disconnect","stringValue","defineProperty","get","clearable","pseudo","autofocus","forEach","fn","onHostElementChange","onchange","detail","onHostElementFocus","checkValidity","clearValue","setValue","InputEvent","isSmallThreshold","resizeObserver","ResizeObserver","entry","contentRect","width","unobserve","errorsObserver","formatModifierObserver","formatAndUpdateValueFromProp","formattedValueObjectObserver","formatted","hintsObserver","typeObserver","valueObserver","ariaAttributes","ariaActivedescendant","ariaControls","ariaHaspopup","ariaOwns","canSetSelection","computedType","clearClasses","computedAutocomplete","autocomplete","computedClassForIconLeft","className","computedIconLeft","iconLeft","hasCustomDisplaySlot","hasSlotContent","hasError","isArray","errors","hasInputLeftSlot","hasInputRightSlot","inputDescribedBy","inputId","inputMode","inputModeMap","tin","isMaskedType","maskedTypes","messages","hints","showIconSeparator","hideMessages","notCoercable","prototype","call","String","visibilityToggleAriaLabel","visibilityToggleText","wrapperClasses","classNames","iconRight","valueLength","startingPosition","previousValueLength","hasSelection","getSelection","formattedLength","currentValueLength","defaultPosition","valueChangedFromProperty","formattingFunctions","formatModifier","inputType","cursorMap","valueBeforeCursor","isPrevCharAlphaNum","test","leftIndex","rightIndex","afterCursorOffset","newCursorOffset","valueAfterCursor","isNextCharAlphaNum","newValue","charactersAfterCursor","newCursorPosition","max","setSelectionRange","nextPaint","cursorData","difference","newPosition","renderCountDOM","showCount","renderInputContainerDOM","onClick","renderPseudoInputDOM","renderStandardInputDOM","onKeyDown","e","badgeValue","theme","badgeTheme","showPlaceholder","placeholder","onFocus","onBlur","inputClasses","step","current","optional","autocapitalize","autocorrect","readonly","onMouseDown","onInput","onPaste","inputmode","pattern","Host","renderLabel","renderMessages","q2LoadingCss","Q2Loading","dontUpdateScreenReaderLabel","liveRegionChangeIndicatorToggle","hideFromScreenReaders","renderHalfCircleSpinner","screenReaderElement","renderSkeletonLoader","shape","skeletonShape","renderSpinner","cleanupLiveRegionDelay","setupLiveRegionDelay","componentDidUpdate","updateScreenReaderLabel","countsArray","counts","map","localizedLabel","modifiersSet","skeletonShapes","clearTimeout","ariaLiveTimer","root","rootMargin","threshold","IntersectionObserver","entries","isIntersecting","setTimeout","renderLoader","loaderMap","default","spinner","skeleton","q2TabContainerCss","Q2TabContainer","hasValidTab","lastScrolled","Date","getTime","hasLeft","hasRight","scrollEnabled","showScrollLeft","showScrollRight","noPrint","checkScrollState","listElement","scrollLeft","scrollWidth","clientWidth","ceil","moveToAdjacentTab","direction","index","tabs","indexOf","newIndex","moveToTab","shouldFocus","focusedValue","focusedTab","preventScroll","left","offsetLeft","scrollTo","behavior","onScrollBtnClick","halfWidth","floor","scrollAmount","scrollBy","onSlotChange","onTabClick","targetValue","closest","dataset","isAlreadySelected","onTabKeyDown","setTabs","tabPanes","badgeCount","badgeDescription","badgeStatus","updateTabPaneProps","tab","selected","selectedTabValue","updateTabs","validTabPreUpdate","some","determineTabMove","attributes","settled","onBadge","defaultChangeHandler","findIndex","onResize","selectTab","paneButton","click","nameObserver","resizeIframe","tabList","filter","pane","TectonElements","renderTab","isSelected","renderTabWithBadge","status","onScroll","q2TabPaneCss","Q2TabPane","badgeObserver"],"sources":["src/components/q2-badge/q2-badge.scss?tag=q2-badge&encapsulation=shadow","src/components/q2-badge/q2-badge.tsx","src/components/q2-btn/q2-btn.scss?tag=q2-btn&encapsulation=shadow","src/components/q2-btn/q2-btn.tsx","src/components/q2-icon/q2-icon.scss?tag=q2-icon&encapsulation=shadow","src/components/q2-icon/q2-icon.tsx","src/components/q2-input/formatting/number.ts","src/components/q2-input/formatting/generic.ts","src/components/q2-input/formatting/currency.ts","src/components/q2-input/formatting/phone.ts","src/components/q2-input/formatting/ssn.ts","src/components/q2-input/formatting/tin.ts","src/components/q2-input/formatting/alphanumeric.ts","src/components/q2-input/formatting/alpha.ts","src/components/q2-input/formatting/numeric.ts","src/components/q2-input/formatting/postal.ts","src/components/q2-input/formatting/date.ts","src/components/q2-input/formatting/credit-card.ts","src/components/q2-input/q2-input.scss?tag=q2-input&encapsulation=shadow","src/components/q2-input/q2-input.tsx","src/components/q2-loading/q2-loading.scss?tag=q2-loading&encapsulation=shadow","src/components/q2-loading/q2-loading.tsx","src/components/q2-tab-container/q2-tab-container.scss?tag=q2-tab-container&encapsulation=shadow","src/components/q2-tab-container/q2-tab-container.tsx","src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n line-height: 0;\n\n --comp-badge-font-size: var(--app-font-size-small, 12px);\n --comp-badge-large-font-size: var(--app-font-size-medium, 14px);\n --comp-badge-background: #{var-list(--tct-badge-background, --t-a11y-gray-color-AAA, #6c6c6c)};\n --comp-badge-color: #{var-list(--tct-badge-color, --t-base, #ffffff)};\n\n &:host([status='info']) {\n --comp-badge-background: #{var-list(--tct-badge-info-background, --const-stoplight-info, #0079c1)};\n --comp-badge-color: #{var-list(--tct-badge-info-color, --const-stoplight-info-text, #ffffff)};\n }\n\n &:host([status='alert']) {\n --comp-badge-background: #{var-list(--tct-badge-alert-background, --const-stoplight-alert, #d20a0a)};\n --comp-badge-color: #{var-list(--tct-badge-alert-color, --const-stoplight-alert-text, #ffffff)};\n }\n\n &:host([status='warning']) {\n --comp-badge-background: #{var-list(--tct-badge-warning-background, --const-stoplight-warning, #c35500)};\n --comp-badge-color: #{var-list(--tct-badge-warning-color, --const-stoplight-warning-text, #ffffff)};\n }\n\n &:host([status='success']) {\n --comp-badge-background: #{var-list(--tct-badge-success-background, --const-stoplight-success, #0e8a00)};\n --comp-badge-color: #{var-list(--tct-badge-success-color, --const-stoplight-success-text, #ffffff)};\n }\n\n &:host([theme='primary']) {\n --comp-badge-background: #{var-list(--tct-badge-primary-background, --t-primary, #6a4a9e)};\n --comp-badge-color: #{var-list(--tct-badge-primary-color, --t-primary-text, #ffffff)};\n }\n\n &:host([theme='secondary']) {\n --comp-badge-background: #{var-list(--tct-badge-secondary-background, --t-secondary, #b3c2cc)};\n --comp-badge-color: #{var-list(--tct-badge-secondary-color, --t-secondary-text, #141414)};\n }\n\n &:host([theme='tertiary']) {\n --comp-badge-background: #{var-list(--tct-badge-tertiary-background, --t-tertiary, #e8f5fc)};\n --comp-badge-color: #{var-list(--tct-badge-tertiary-color, --t-tertiary-text, #141414)};\n }\n}\n\n.badge-container {\n white-space: nowrap;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--tct-badge-height, 16px);\n min-width: var(--tct-badge-min-width, 16px);\n text-align: center;\n padding: var(--tct-badge-padding, unquote('0 5px'));\n color: var(--comp-badge-color);\n background: var(--comp-badge-background);\n border-radius: var-list(var-prefixer(badge-border-radius), 8px);\n border: var(--tct-badge-border);\n backdrop-filter: var(--tct-badge-backdrop-filter);\n .badge-text {\n font-size: var(--comp-badge-font-size);\n line-height: var-list(--tct-badge-line-height, 14px);\n\n ::slotted(p) {\n margin: 0 !important;\n font-size: var(--comp-badge-font-size) !important;\n }\n }\n}\n\n.badge-container.size-large {\n height: var-list(--tct-badge-large-height, 22px);\n min-width: var-list(--tct-badge-large-min-width, 22px);\n border-radius: var-list(--tct-badge-large-border-radius, 11px);\n padding: var-list(--tct-badge-large-padding, unquote('0 6px'));\n\n .badge-text {\n font-size: var(--comp-badge-large-font-size);\n line-height: var-list(--tct-badge-large-line-height, 20px);\n\n ::slotted(p) {\n margin: 0 !important;\n font-size: var(--comp-badge-large-font-size) !important;\n }\n }\n}\n\n.empty-variant {\n min-width: unset;\n width: 16px;\n height: 16px;\n padding: 0;\n\n &.size-large {\n min-width: unset;\n width: 22px;\n height: 22px;\n padding: 0;\n }\n}\n","import { Component, Prop, h, ComponentInterface, Element, Method } from '@stencil/core';\nimport { loc } from 'src/utils';\n\n@Component({ tag: 'q2-badge', shadow: true, styleUrl: 'q2-badge.scss' })\nexport class Q2Badge implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** The number of characters to show. A maximum limit of 18 characters is acceptable. */\n @Prop({ reflect: true })\n maxLength: number | undefined;\n\n /** The size of the badge. */\n @Prop({ reflect: true })\n size: 'default' | 'large' | undefined;\n\n /** The stoplight color of the element when `theme` is not present. */\n @Prop({ reflect: true })\n status: 'info' | 'alert' | 'warning' | 'success' | undefined;\n\n /**\n * The color of the badge when in the active state.\n * The `theme` has higher priority than `status`.\n */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary' | undefined;\n\n /**\n * What to display in the badge. Negative numbers will be shown as positive.\n * @info\n * `q2-badge` also has limited support for slotted HTML elements.\n * @localizable\n */\n @Prop({ reflect: true })\n value: number | string;\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Returns the text content of the badge. This accounts for the text in slotted elements or the Shadow DOM.\n * @testonly\n */\n @Method()\n async getTextContent(): Promise<string> {\n if (this.hasSlot) {\n return this.hostElement.textContent.trim();\n } else {\n return this.hostElement.shadowRoot.textContent.trim();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get badgeClasses(): string {\n const badgeClass = ['badge-container'];\n if (!this.badgeText && !this.hasSlot) badgeClass.push('empty-variant');\n if (this.size === 'large') badgeClass.push('size-large');\n return badgeClass.join(' ');\n }\n\n get badgeText(): string {\n const { maxLength, computedMaxLength } = this;\n let value = this.value;\n let numValue = Math.abs(Number(value));\n if (!value) return '';\n\n if (typeof value === 'string') {\n value = loc(value);\n numValue = Math.abs(Number(value));\n }\n\n if (typeof value === 'string' && isNaN(numValue)) {\n return value.substring(0, computedMaxLength);\n }\n\n const maxNumber = maxLength ? computedMaxLength : 2;\n const maxNumValue = Math.pow(10, maxNumber) - 1;\n if (numValue > maxNumValue) {\n return maxNumValue.toLocaleString() + '+';\n } else {\n return numValue.toLocaleString();\n }\n }\n\n get computedMaxLength(): number {\n return Math.min(18, this.maxLength || 18);\n }\n\n get hasSlot(): boolean {\n return !!this.hostElement.innerHTML.trim();\n }\n\n // #endregion\n // #region Render Methods\n\n renderEmptyBadge() {\n return <div class={this.badgeClasses}></div>;\n }\n\n renderStandardBadge() {\n return (\n <div class={this.badgeClasses}>\n <small class=\"badge-text\">{this.hasSlot ? <slot></slot> : this.badgeText}</small>\n </div>\n );\n }\n\n render() {\n return !this.badgeText && !this.hasSlot ? this.renderEmptyBadge() : this.renderStandardBadge();\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './q2-btn-mixins';\n\nq2-loading {\n --tct-loading-primary-color: currentcolor;\n --tct-loading-secondary-color: currentcolor;\n --tct-loading-spinner-size: 24px;\n}\n\n.slot-container {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var-list(--app-scale-1x, 5px);\n pointer-events: none;\n\n :host([loading]) .icon-right & {\n flex-direction: row-reverse;\n }\n}\n\n:host([loading]) ::slotted(q2-icon) {\n display: none;\n}\n:host([loading]:not([loading='false'])) button {\n pointer-events: none;\n}\n\n:host([block]) button,\n:host([block]) button.icon-only {\n display: block;\n width: 100%;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host([block]) {\n display: block;\n width: 100%;\n}\n\n::slotted(q2-icon) {\n pointer-events: none;\n margin-block: -100px;\n}\n\n:host {\n --comp-font-weight: 600;\n --comp-border-radius: #{var-list(--tct-btn-border-radius, --app-border-radius-1, 4px)};\n --comp-btn-tween: #{var-list(var-prefixer(btn-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'))};\n --comp-btn-fallback-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n --comp-background-alternative: #ebf8ff;\n\n .btn-height-wrapper {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--app-scale-1x, 5px);\n &:active {\n box-shadow: none;\n }\n }\n}\n\nbutton {\n margin: var-list(--tct-scale-0, --app-scale-0x, 0);\n padding: var-list(--tct-scale-0, --app-scale-0x, 0);\n display: inline-block;\n width: 100%;\n hyphens: auto;\n border: var(--tct-btn-border);\n background: transparent;\n box-shadow: none;\n border-radius: 0;\n font-weight: 400;\n color: inherit;\n cursor: pointer;\n transition: var(--comp-btn-tween);\n transition-property: background, color, box-shadow, fill, border-color, border-width;\n outline: 0;\n\n &:disabled {\n opacity: var-list(var-prefixer(btn-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n cursor: not-allowed;\n }\n\n &.has-color,\n &.has-intent {\n font-size: var-list(var-prefixer(btn-font-size), inherit);\n border-radius: var-list(--tct-btn-border-radius, --comp-border-radius);\n text-transform: var(--tct-btn-text-transform);\n letter-spacing: var(--tct-btn-letter-spacing, inherit);\n }\n\n &.has-color:not(.has-size),\n &.has-intent:not(.has-size) {\n padding: var-list(var-prefixer(btn-padding), --tct-scale-2, --app-scale-2x, 10px);\n }\n\n &:not(.has-size) {\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size, 18px);\n }\n }\n }\n\n // #region Size\n\n :host([size='1']) & {\n padding: var-list(--tct-scale-1, --app-scale-1x, 5px);\n }\n :host([size='2']) & {\n padding: var-list(--tct-scale-2, --app-scale-2x, 10px);\n }\n :host([size='3']) & {\n padding: var-list(--tct-scale-3, --app-scale-3x, 15px);\n }\n :host([size='4x']) & {\n padding: var-list(--tct-scale-4x, --app-scale-4x, 20px);\n }\n :host([size='4']) & {\n padding: var-list(--tct-scale-6x, --app-scale-6x, 30px);\n }\n\n :host([size='small']) & {\n padding: var-list(var-prefixer(btn-padding-size-small), '4px 16px');\n font-size: var-list(var-prefixer(btn-font-size-small), 14px);\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size-small, 16px);\n }\n }\n }\n\n :host([size='medium']) & {\n padding: var-list(var-prefixer(btn-padding-size-medium), '12px 24px');\n font-size: var-list(var-prefixer(btn-font-size-medium), 16px);\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size-medium, unset);\n }\n }\n }\n\n :host([size='large']) & {\n padding: var-list(var-prefixer(btn-padding-size-large), '16px 32px');\n font-size: var-list(var-prefixer(btn-font-size-large), 20px);\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size-large, unset);\n }\n }\n }\n\n // #endregion\n // #region Intent\n\n :host([color='primary']) &,\n :host([intent='workflow-primary']) & {\n backdrop-filter: var(--tct-btn-primary-backdrop-filter);\n --comp-background: #{var-list(\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-hover-background: #{var-list(--tct-btn-primary-hover-background, --tct-btn-primary-hover-bg)};\n --comp-font-color: #{var-list(--tct-btn-primary-font-color, --app-white, #ffffff)};\n --comp-box-shadow: #{var-list(--tct-btn-primary-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-primary-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // different background for active\n --comp-active-background: var(--tct-btn-primary-active-background, #0063a0);\n @include btn-ring(primary, hover, --comp-background, --comp-font-color, null);\n @include btn-ring(primary, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(primary, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(primary, focus-visible, --const-focus-color, --comp-font-color, null);\n @include btn-intent(primary);\n @include btn-icon-color(primary, --comp-font-color);\n }\n\n :host([color='secondary']) &,\n :host([intent='workflow-secondary']) & {\n backdrop-filter: var(--tct-btn-secondary-backdrop-filter);\n --comp-background: #{var-list(\n --tct-btn-secondary-background,\n --tct-btn-secondary-bg,\n --t-button-default-bg,\n #cccccc\n )};\n --comp-hover-background: #{var-list(\n --tct-btn-secondary-hover-background,\n --tct-btn-secondary-hover-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-hover-font-color: var(--app-white, #ffffff);\n --comp-box-shadow: #{var-list(--tct-btn-secondary-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-secondary-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n @include btn-ring(secondary, hover, --comp-hover-background, --app-white, null);\n @include btn-ring(secondary, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(secondary, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(secondary, focus-visible, --const-focus-color, --app-white, null);\n @include btn-intent(secondary);\n @include btn-icon-color(secondary, --comp-font-color);\n }\n\n :host([intent='workflow-destroy']) & {\n backdrop-filter: var(--tct-btn-destroy-backdrop-filter);\n --comp-background: #{var-list(--tct-btn-destroy-background, --const-stoplight-alert, #d20a0a)};\n --comp-font-color: #{var-list(--tct-btn-destroy-font-color, --app-white)};\n --comp-box-shadow: #{var-list(--tct-btn-destroy-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-destroy-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n @include btn-ring(destroy, hover, --comp-background, --comp-font-color, null);\n @include btn-ring(destroy, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(destroy, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(destroy, focus-visible, --const-focus-color, --comp-font-color, null);\n @include btn-intent(destroy);\n @include btn-icon-color(destroy, --comp-font-color);\n }\n\n :host([intent='workflow-escape']) & {\n backdrop-filter: var(--tct-btn-escape-backdrop-filter);\n --comp-background: #{var-list(--tct-btn-escape-background, --app-white, #ffffff)};\n --comp-font-color: #{var-list(\n --tct-btn-escape-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: #{var-list(--tct-btn-escape-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-hover-box-shadow: #{var-list(--tct-btn-escape-hover-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-escape-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // different background for hover/active/focus\n --comp-hover-background: #{var-list(--tct-btn-escape-hover-background, --comp-background-alternative)};\n --comp-active-background: #{var-list(--tct-btn-escape-active-background, --comp-background-alternative)};\n --comp-focus-background: #{var-list(--tct-btn-escape-focus-background, --comp-background-alternative)};\n @include btn-ring(escape, hover, --comp-font-color, --comp-background, null);\n @include btn-ring(escape, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(escape, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(escape, focus-visible, --const-focus-color, --comp-background, null);\n @include btn-intent(escape);\n @include btn-icon-color(escape, --comp-font-color);\n }\n\n :host([intent='neutral']) & {\n backdrop-filter: var(--tct-btn-neutral-backdrop-filter);\n --comp-background: #{var-list(--tct-btn-neutral-background, --app-white, #ffffff)};\n --comp-font-color: #{var-list(\n --tct-btn-neutral-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: #{var-list(--tct-btn-neutral-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-neutral-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // use outline instead border: because on/off border makes the button shaking on hover/focus/active\n --comp-border-width: 1px;\n --comp-border-style: solid;\n --comp-border-color: var(--comp-font-color);\n @include btn-ring(neutral, hover, --comp-font-color, --app-white, null);\n @include btn-ring(neutral, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral, focus-visible, --const-focus-color, --comp-background, null);\n @include btn-intent(neutral);\n @include btn-icon-color(neutral, --comp-font-color);\n }\n\n :host([intent='neutral-text']) & {\n backdrop-filter: var(--tct-btn-neutral-text-backdrop-filter);\n --comp-background: #{var-list(\n --tct-btn-neutral-text-background,\n --tct-btn-neutral-text-bg,\n --app-white,\n #ffffff\n )};\n --comp-font-color: #{var-list(\n --tct-btn-neutral-text-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: var(--tct-btn-neutral-text-box-shadow);\n --comp-hover-text-decoration: underline;\n // different background for focus\n --comp-focus-background: #{var-list(--tct-btn-neutral-text-focus-background, --comp-background-alternative)};\n @include btn-ring(neutral-text, hover, --comp-font-color, --comp-background, null);\n @include btn-ring(neutral-text, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral-text, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral-text, focus-visible, --const-focus-color, --app-white, null);\n @include btn-intent(neutral-text);\n @include btn-icon-color(neutral-text, --comp-font-color);\n }\n\n // #endregion\n // #region Icon Only\n\n &.icon-only {\n width: var-list(var-prefixer(btn-icon-width), 44px);\n height: var-list(var-prefixer(btn-icon-height), 44px);\n border-radius: var-list(var-prefixer(btn-icon-border-radius), --tct-btn-border-radius, 0);\n padding: var(--tct-btn-icon-padding, 0px);\n\n ::slotted(q2-icon) {\n --tct-icon-size: unset;\n }\n\n &.has-size {\n padding: var(--tct-btn-icon-padding, 0px);\n }\n\n &.has-intent {\n padding: var(--tct-btn-icon-padding, 10px);\n border-radius: var-list(--tct-btn-icon-border-radius, --comp-border-radius);\n }\n }\n\n &:not(.has-color):not(.has-intent),\n &.icon-only {\n &:hover,\n &:focus {\n background: var-list(\n --tct-btn-icon-hover-background,\n var-prefixer(btn-icon-hover-bg),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n }\n }\n\n &:not(.has-intent).is-active.icon-only {\n background-color: var-list(\n --tct-btn-icon-active-background,\n var-prefixer(btn-icon-active-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n }\n\n &:not(.has-intent).icon-only:hover *,\n &:not(.has-intent).icon-only:focus *,\n &:not(.has-intent).is-active.icon-only * {\n color: var-list(var-prefixer(btn-icon-hover-color), var-prefixer(link-hover-color), #080808);\n }\n\n // #endregion\n // #region Plain\n\n &:not(.has-intent):not(.icon-only) {\n height: var-list(--tct-btn-height, auto);\n padding-inline: var-list(--tct-btn-padding-inline, 0);\n font-weight: var-list(--tct-btn-font-weight);\n border-radius: var-list(--tct-btn-border-radius, 0);\n\n &:hover,\n &:focus {\n background: var(--tct-btn-hover-background);\n }\n }\n\n // #endregion\n // #region Badges (Deprecated)\n\n :host([badge]) & {\n padding: var-list(var-prefixer(btn-badge-padding), unquote('2px 5px'));\n font-size: var-list(var-prefixer(btn-badge-font-size), var-prefixer(btn-font-size), inherit);\n border-radius: var-list(\n var-prefixer(btn-badge-border-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n );\n background-color: var-list(--tct-btn-badge-background, var-prefixer(btn-badge-bg), transparent);\n color: var-list(var-prefixer(btn-badge-font-color), inherit);\n\n ::slotted(q2-icon) {\n --tct-icon-size: 1em;\n }\n }\n\n :host([badge]:hover) &:enabled {\n background-color: var-list(\n --tct-btn-badge-hover-background,\n var-prefixer(btn-badge-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(btn-badge-hover-font-color),\n var-prefixer(gray-5),\n --tct-gray-d2,\n --app-gray-d2,\n #404040\n );\n }\n\n :host(.selected[badge]) &,\n :host([active][badge]) & {\n background-color: var-list(\n --tct-btn-badge-active-background,\n var-prefixer(btn-badge-active-bg),\n --comp-btn-primary-background\n );\n color: var-list(var-prefixer(btn-badge-active-font-color), --comp-btn-primary-font-color);\n }\n\n // #endregion\n // #region Intent Coin\n\n &.intent-coin {\n --tct-avatar-background: #{var-list(--tct-btn-coin-background, --t-primary-l5, #b4a0d3)};\n --tct-avatar-height: #{var-list(--tct-btn-coin-height, 44px)};\n --tct-avatar-width: #{var-list(--tct-btn-coin-width, 44px)};\n --tct-avatar-fallback-background: #{var-list(--tct-btn-coin-background, --t-primary-l5, #b4a0d3)};\n --tct-icon-stroke-primary: #{var-list(--tct-btn-coin-icon-stroke-primary, --t-text, #4d4d4d)};\n --tct-avatar-text-color: #{var-list(--tct-btn-coin-avatar-text-color, --t-text, #4d4d4d)};\n --tct-icon-stroke-width: #{var-list(--tct-btn-coin-icon-stroke-width, 1px)};\n --tct-btn-padding: 0;\n --tct-btn-border-radius: 50%;\n --tct-avatar-border: #{var-list(--tct-btn-coin-border, 0)};\n width: auto;\n backdrop-filter: var(--tct-btn-coin-backdrop-filter);\n box-shadow: var(--tct-btn-coin-box-shadow);\n }\n\n &.intent-coin:hover:not([disabled]) {\n --const-double-focus-ring: 0 0 0 2px #ffffff,\n 0 0 0 4px #{var-list(--tct-btn-coin-focus-ring, --t-primary, #6a4a9e)};\n --tct-avatar-background: #{var-list(--tct-btn-coin-background, --t-primary-l3, #957ac1)};\n --tct-avatar-fallback-background: #{var-list(--tct-btn-coin-background, --t-primary-l3, #957ac1)};\n --tct-icon-stroke-primary: #{var-list(--tct-btn-coin-icon-stroke-primary, --t-base, #ffffff)};\n --tct-avatar-text-color: #{var-list(--tct-btn-coin-avatar-text-color, --t-base, #ffffff)};\n box-shadow: var-list(--tct-btn-coin-hover-box-shadow, --tct-btn-coin-box-shadow, --const-double-focus-ring);\n }\n\n &.intent-coin:focus:not([disabled]) {\n --const-double-focus-ring: 0;\n box-shadow: var-list(--tct-btn-coin-focus-box-shadow, --tct-btn-coin-box-shadow, 0);\n }\n\n &.intent-coin:focus-visible:not([disabled]) {\n --const-double-focus-ring: 0 0 0 2px #ffffff,\n 0 0 0 4px #{var-list(--tct-btn-coin-focus-ring, --t-primary, #6a4a9e)};\n box-shadow: var-list(\n --tct-btn-coin-focus-visible-box-shadow,\n --tct-btn-coin-focus-box-shadow,\n --tct-btn-coin-box-shadow,\n --const-double-focus-ring\n );\n }\n\n &.intent-coin:active:not([disabled]) {\n box-shadow: none;\n }\n}\n\n.coin-label {\n color: var-list(--tct-btn-coin-label-color, --t-text, #4d4d4d);\n font-size: var-list(--tct-btn-coin-label-font-size, --app-font-size, 14px);\n max-width: 100px;\n text-align: center;\n @include line-clamp(2);\n}\n\n.coin-label.disabled {\n color: var-list(--tct-btn-coin-label-disabled-color, --t-textA, #767676);\n max-width: 100px;\n}\n\n.coin-wrapper {\n --tct-avatar-display: block;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var-list(--app-scale-1x, 5px);\n flex-direction: column;\n width: var(--tct-btn-coin-container-width, 95px);\n\n // only q2-avatar and coin-label slots are allowed for coin buttons\n ::slotted(:not(q2-avatar, [slot='coin-label'])) {\n display: none;\n }\n\n .coin-label {\n color: var-list(--tct-btn-coin-label-color, --t-text, #4d4d4d);\n font-size: var-list(--tct-btn-coin-label-font-size, --app-font-size, 14px);\n margin-top: var-list(--tct-btn-coin-gap, --app-scale-2x, 10px);\n max-width: 100px;\n text-align: center;\n\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .coin-label.disabled {\n color: var-list(--tct-btn-coin-label-disabled-color, --t-textA, #767676);\n max-width: 100px;\n }\n}\n// #endregion\n","import { Component, State, Prop, h, ComponentInterface, Watch, Listen, Element, Fragment } from '@stencil/core';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n handleColor,\n isEventFromElement,\n loc,\n overrideFocus,\n handleDeprecationWarning,\n} from 'src/utils';\n\n/** @slot coin-label - An optional slot to display a custom coin button label. */\n@Component({ tag: 'q2-btn', shadow: true, styleUrl: 'q2-btn.scss' })\nexport class Q2Btn implements ComponentInterface {\n // #region Own Properties\n\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n iconPosition: 'left' | 'right' | 'only';\n\n // #endregion\n // #region Public Property API\n\n /**\n * @private\n * Role attribute for better semantic accessibility support\n */\n @Prop({ reflect: true })\n _role: string;\n\n /**\n * Displays the component in an active state.\n *\n * @info\n * Only intended for use with the `badge` property.\n * @deprecated\n */\n @Prop({ reflect: true })\n active: boolean;\n\n @Prop()\n ariaControls: string;\n\n @Prop()\n ariaExpanded: string;\n\n @Prop()\n ariaHasPopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaPressed: string;\n\n @Prop()\n ariaSelected: string;\n\n /**\n * Displays the component in a smaller, badge style.\n * @deprecated\n */\n @Prop({ reflect: true })\n badge: boolean;\n\n /** The component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n color: string; // deprecated but need it to use utils/handleColor\n\n @Prop()\n description: string;\n\n /** Marks the component as disabled and displays a `not-allowed` cursor on hover. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n fab: boolean;\n\n /**\n * Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Indicates the role of the component in the workflow, which will apply appropriate styling to the component.\n */\n @Prop({ reflect: true, mutable: true })\n intent:\n | 'coin'\n | 'neutral-text'\n | 'neutral'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary';\n\n /**\n * Defines the text content of the button if it is not provided in the `<slot>` of the element.\n * Also used for the `aria-label` of the `<button>` element when only displaying an icon.\n *\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** Displays the button with a loading spinner to indicate something is happening in the background and the user should not click again. */\n @Prop({ reflect: true })\n loading: boolean;\n\n /**\n * Defines the size of q2-btn, it renders as default size if not provided.\n */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n @Prop()\n tabIndex: number;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true })\n type: string = 'button';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcons();\n handleAriaLabel(this);\n handleColor(this);\n }\n\n componentDidLoad(): void {\n this.handleButtonSize();\n overrideFocus(this.hostElement);\n }\n\n disconnectedCallback(): void {\n this.primaryBtn = null;\n this.primaryBtnWrapper = null;\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click', { capture: true })\n handleClick(event: Event) {\n if (this.loading || this.disabled) {\n event.stopImmediatePropagation();\n }\n this.primaryBtn.focus();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('size')\n sizeObserver() {\n this.handleButtonSize();\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonAttributes() {\n return {\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHasPopup: getAriaValueFromProp(this.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaLabel: this.label && this.hideLabel ? loc(this.label) : undefined,\n ariaSelected: getAriaValueFromProp(this.ariaSelected, ['true', 'false']),\n ariaPressed: getAriaValueFromProp(this.ariaPressed, ['true', 'false']),\n description: this.description !== undefined ? this.description : undefined,\n disabled: this.disabled || false,\n type: this.type,\n tabindex: this.tabIndex || undefined,\n };\n }\n\n get buttonClasses() {\n const classes = [];\n if (this.iconPosition) classes.push(`icon-${this.iconPosition}`);\n if (this.intent === 'coin') classes.push('intent-coin');\n if (!!this.block) classes.push('is-block');\n if (!!this.color) classes.push('has-color');\n if (!!this.intent) classes.push(`has-intent`);\n if (!!this.size) classes.push('has-size');\n if (!!this.active) classes.push('is-active');\n\n return classes.join(' ');\n }\n\n get coinLabelClasses() {\n const classes = ['coin-label'];\n if (this.disabled) {\n classes.push('disabled');\n }\n\n return classes.join(' ');\n }\n\n handleButtonSize = () => {\n if (Number(this.size) <= 4) {\n handleDeprecationWarning(this, 'size', 'prop');\n }\n };\n\n handleIcons = () => {\n // Only allow one icon in the button\n const icon = Array.from(this.hostElement.querySelectorAll(':scope > q2-icon')).reduce((acc, element) => {\n if (acc) element.remove();\n else acc = element;\n return acc;\n }, null);\n\n const hasIcon = !!icon;\n const hasLoc = !!this.hostElement.querySelector('q2-loc');\n const hasText = !!this.hostElement.textContent.trim();\n const hasIconLeft = (hasLoc || hasText) && hasIcon && this.hostElement.firstElementChild === icon;\n const hasIconRight = (hasLoc || hasText) && hasIcon && this.hostElement.lastElementChild === icon;\n const hasIconOnly = !hasIconLeft && !hasIconRight && hasIcon;\n\n let iconPosition;\n if (hasIconOnly) iconPosition = 'only';\n else if (hasIconLeft) iconPosition = 'left';\n else if (hasIconRight) iconPosition = 'right';\n this.iconPosition = iconPosition;\n };\n\n handleSlotChange = () => {\n this.handleIcons();\n };\n\n // #endregion\n // #region Render Methods\n\n renderButton() {\n const { ariaExpanded, ariaHasPopup, ariaSelected, ariaPressed, description, disabled, type, tabindex } =\n this.buttonAttributes;\n const { iconPosition, loading, badge, label, hideLabel } = this;\n const renderLoadingSpinner = iconPosition || loading;\n const isLoadingSpinnerInline = !iconPosition || badge;\n return (\n <Fragment>\n <button\n ref={el => (this.primaryBtn = el ?? this.primaryBtn)}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={hideLabel && loc(label)}\n aria-selected={ariaSelected}\n aria-pressed={ariaPressed}\n disabled={disabled}\n type={type}\n tabindex={tabindex}\n test-id=\"q2BtnInnerButton\"\n class={this.buttonClasses}\n aria-describedby={!!description ? 'hidden-description' : undefined}\n aria-labelledby={this.intent === 'coin' && !hideLabel ? 'coin-label' : undefined}\n role={this._role || undefined}\n >\n <div class=\"slot-container\">\n {renderLoadingSpinner && (\n <q2-loading\n hidden={!loading}\n modifiers={isLoadingSpinnerInline ? 'inline' : undefined}\n />\n )}\n {this.renderDefaultLabel()}\n {this.renderDefaultCoinSlot()}\n </div>\n </button>\n {this.renderCoinLabel()}\n {!!description && (\n <div\n id=\"hidden-description\"\n aria-hidden=\"true\"\n class=\"sr\"\n >\n {description}\n </div>\n )}\n </Fragment>\n );\n }\n\n renderCoinLabel() {\n if (this.intent !== 'coin' || this.hideLabel) return;\n return (\n <div\n id=\"coin-label\"\n class={this.coinLabelClasses}\n >\n {this.label ? (\n loc(this.label)\n ) : (\n <slot\n name=\"coin-label\"\n onSlotchange={this.handleSlotChange}\n />\n )}\n </div>\n );\n }\n\n renderDefaultCoinSlot() {\n if (this.intent !== 'coin') return;\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n renderDefaultLabel() {\n if (this.intent === 'coin') return;\n if (!this.hideLabel && this.label) return loc(this.label);\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n render() {\n return (this.size === 'small' && this.iconPosition !== 'only') || this.intent === 'coin' ? (\n // wrap only for small sized and coin intent\n <div\n class={this.size === 'small' ? 'btn-height-wrapper' : 'coin-wrapper'}\n ref={el => (this.primaryBtnWrapper = el ?? this.primaryBtnWrapper)}\n tabIndex={this.size === 'small' ? -1 : undefined}\n >\n {this.renderButton()}\n </div>\n ) : (\n this.renderButton()\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n height: var(--tct-icon-size, 24px);\n width: var(--tct-icon-size, 24px);\n position: relative;\n fill: none;\n}\n\n:host([inline]) {\n height: 1em;\n width: 1em;\n}\n\nsvg {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n stroke-width: var-list(--tct-icon-stroke-width, --t-icon-stroke-width, --tct-icon-group-stroke-width, 2);\n stroke-linecap: var-list(--tct-icon-cap, --t-icon-cap, round);\n stroke-linejoin: var-list(--tct-icon-cap, --t-icon-cap, round);\n transition: var(--tct-icon-transition, none);\n\n &.brand {\n stroke-width: var-list(--tct-icon-group-brand-stroke-width, 1);\n }\n\n &.browsersos {\n stroke-width: var-list(--tct-icon-group-browsersos-stroke-width, 1);\n }\n}\n\n.stroke-primary {\n stroke: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n.stroke-secondary {\n stroke: var-list(--tct-icon-stroke-secondary, --t-icon-stroke-secondary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-secondary-transition, none);\n}\n\n.fill-primary {\n fill: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n.fill-secondary {\n fill: var-list(--tct-icon-stroke-secondary, --t-icon-stroke-secondary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-secondary-transition, none);\n}\n\n.filled {\n fill: var-list(--tct-icon-fill, --comp-icon-fill, --t-icon-fill, none);\n transition: var(--tct-icon-fill-transition, none);\n}\n\n.brand-filled {\n fill: var-list(--tct-brand-icon-fill, --tct-icon-fill, currentColor);\n transition: var(--tct-icon-fill-transition, none);\n}\n\n.uniform {\n fill: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n:host([type='info']),\n:host([type='info-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-info, --const-stoplight-info, #0079c1)};\n}\n\n:host([type='success']),\n:host([type='success-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-success, --const-stoplight-success, #0e8a00)};\n}\n\n:host([type='warning']),\n:host([type='warning-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-warning, --const-stoplight-warning, #c35500)};\n}\n\n:host([type='error']),\n:host([type='error-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-alert, --const-stoplight-alert, #d20a0a)};\n}\n","import { Component, ComponentInterface, Prop, h, Element, Watch, getAssetPath, State } from '@stencil/core';\nimport { createGuid } from 'src/utils';\nimport iconMap from './assets/icon-map.json';\n\n@Component({ tag: 'q2-icon', shadow: true, styleUrl: 'q2-icon.scss', assetsDirs: ['assets'] })\nexport class Q2Icon implements ComponentInterface {\n // #region Own Properties\n\n spriteGroup: SVGElement;\n spritePrefix: string = 'tecton-sprite-';\n spriteUse: SVGElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n iconClone: SVGSymbolElement;\n\n // #endregion\n // #region Public Property API\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /** The text that is presented by screen-readers when they encounter the icon. */\n @Prop({ reflect: true })\n label: string;\n\n /** The name of the icon to be displayed. */\n @Prop({ reflect: true })\n type: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcon();\n }\n\n componentDidRender(): void {\n if (!this.iconClone) return;\n this.spriteGroup?.firstElementChild?.remove();\n const appendedClone = this.spriteGroup?.appendChild(this.iconClone);\n\n // We have to set the `href` attribute after the symbol is appended to the DOM to avoid a bug in Safari\n this.spriteUse?.setAttribute('href', `#${appendedClone.id}`);\n }\n\n disconnectedCallback(): void {\n this.spriteGroup = null;\n this.spriteUse = null;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('type')\n handleIcon() {\n if (this.isCustom) {\n this.setCustomSVGAttrs();\n } else if (this.type) {\n this.fetchSprite();\n } else {\n this.iconClone = null;\n this.spriteGroup?.firstElementChild?.remove();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get iconCloneViewBox() {\n return this.iconClone?.getAttribute('viewBox') ?? '0 0 24 24';\n }\n\n get isCustom() {\n return this.type === 'custom';\n }\n\n get spriteElement() {\n const { spriteId } = this;\n if (!spriteId) return;\n return document.querySelector<HTMLElement>(`#${spriteId}`);\n }\n\n get spriteEventName() {\n const { spriteFileName } = this;\n if (!spriteFileName) return;\n return `tct-loaded-${spriteFileName}`;\n }\n\n get spriteFileName() {\n if (this.isCustom) return;\n return iconMap[this.type];\n }\n\n get spriteId() {\n const { spriteFileName } = this;\n if (!spriteFileName) return;\n return `${this.spritePrefix}${spriteFileName}`;\n }\n\n checkForSprite() {\n const { spriteId, spriteEventName } = this;\n const spriteContainer = this.getOrCreateSpriteContainer();\n let spriteElement: HTMLElement = document.querySelector(`#${spriteId}`);\n\n // If the sprite element exists and has the `data-loaded` attribute, we know we have everything we need\n if (spriteElement?.hasAttribute('data-loaded') ?? false) {\n this.cloneSpriteNode();\n return true;\n }\n\n // If the sprite element exists but does not have the `data-loaded` attribute, we know it's being loaded\n // We'll listen for the event that will be dispatched when the sprite is loaded\n spriteContainer.addEventListener(\n spriteEventName,\n () => {\n this.cloneSpriteNode();\n },\n { once: true }\n );\n\n // If the sprite element exists, we know it's being loaded and will be handled by the event listener\n if (spriteElement) return true;\n\n // If sprite element does not exist, create a placeholder\n // This will let other icons know the sprite is being loaded\n spriteElement = document.createElement('div');\n spriteElement.id = spriteId;\n spriteContainer.appendChild(spriteElement);\n return false;\n }\n\n cloneSpriteNode() {\n const spriteContainer = this.getOrCreateSpriteContainer();\n const spriteNode = spriteContainer.querySelector<HTMLElement>(`#tct-${this.type}`);\n this.iconClone = spriteNode ? (spriteNode.cloneNode(true) as SVGSymbolElement) : undefined;\n }\n\n async fetchSprite() {\n const { spriteFileName, spriteId, spriteEventName } = this;\n\n const spriteExists = this.checkForSprite();\n if (spriteExists) return;\n\n if (!spriteFileName) return;\n const spritePath = getAssetPath(`assets/${spriteFileName}.symbol.svg`);\n const response = await fetch(spritePath);\n const data = await response.text();\n const wrappingDiv = document.createElement('div');\n wrappingDiv.innerHTML = data;\n const svg = wrappingDiv.querySelector('svg');\n\n svg.id = spriteId;\n svg.setAttribute('data-loaded', '');\n\n let { spriteElement } = this;\n if (spriteElement?.tagName === 'SVG') return;\n\n if (typeof spriteElement.replaceWith === 'function') {\n spriteElement.replaceWith(svg);\n } else {\n spriteElement.parentNode.replaceChild(svg, spriteElement);\n }\n\n spriteElement = document.querySelector(`#${spriteId}`);\n spriteElement.dispatchEvent(new CustomEvent(spriteEventName, { bubbles: true }));\n }\n\n /**\n * Checks for the sprite container element in the global DOM\n * If it does not exist, it creates and appends it to the body\n */\n getOrCreateSpriteContainer() {\n const spriteContainerId = 'tecton-sprites';\n let spriteContainer: HTMLDivElement = document.querySelector(`#${spriteContainerId}`);\n\n if (spriteContainer) return spriteContainer;\n spriteContainer = document.createElement('div');\n spriteContainer.id = spriteContainerId;\n spriteContainer.style.display = 'none';\n document.body.appendChild(spriteContainer);\n return spriteContainer;\n }\n\n setCustomSVGAttrs() {\n const innerSVG = this.hostElement.querySelector('svg');\n\n if (!innerSVG) return;\n\n innerSVG.setAttribute('role', 'img');\n innerSVG.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n const { label } = this;\n if (label) {\n const title = document.createElement('title');\n const labelId = `label-${createGuid()}`;\n title.id = labelId;\n title.textContent = label;\n innerSVG.appendChild(title);\n innerSVG.setAttribute('aria-labelledby', labelId);\n } else {\n innerSVG.setAttribute('aria-hidden', 'true');\n }\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { label, type } = this;\n return this.isCustom ? (\n <slot />\n ) : (\n <svg\n aria-hidden={!!label ? undefined : 'true'}\n role={!!label ? 'img' : undefined}\n aria-labelledby={!!label ? 'label' : undefined}\n viewBox={this.iconCloneViewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n class={this.spriteFileName}\n >\n {!!label && <title id=\"label\">{label}</title>}\n {!!type && <use ref={el => (this.spriteUse = el)} />}\n <g ref={el => (this.spriteGroup = el)}></g>\n </svg>\n );\n }\n\n // #endregion\n}\n","import { IFormatterValueObject, INumberInputFormatOptions } from '../q2-input-types';\n\nexport default function formatNumber(\n val: string = '',\n options: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n },\n explicit: boolean = false\n): IFormatterValueObject {\n const isNegative = val[0] === '-';\n\n let value = val;\n\n const allowDecimal = !!options.allowDecimal && !!options.decimals;\n\n if (explicit) {\n const parsedValue = value.replace(/[^\\d.]/g, '');\n value = (parsedValue && Number(parsedValue).toFixed(allowDecimal ? options.decimals : 0)) || '';\n }\n\n value = value.replace(/[^\\d]/g, '');\n\n let { integerString, decimalString } = splitValue(value, allowDecimal, options.decimals);\n\n // define decimalString\n let decimalSeparator = options.decimalSeparator;\n if (!allowDecimal) {\n decimalSeparator = '';\n decimalString = '';\n }\n\n // define negative\n const negativeSymbol = options.allowNegative && isNegative ? '-' : '';\n\n value = `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}`;\n\n // format integerString\n integerString = integerString.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousandsSeparator);\n\n const formattedValue: string =\n negativeSymbol || integerString ? `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}` : '';\n\n const fullyFormattedValue: string =\n negativeSymbol || integerString\n ? `${negativeSymbol}${options.prefix}${integerString}${decimalSeparator}${decimalString}${options.suffix}`\n : '';\n\n let formattingCharacterCount = formattedValue.length - value.length;\n\n if (decimalSeparator) {\n formattingCharacterCount = formattingCharacterCount + options.decimalSeparator.length;\n }\n\n const prefix = options.prefix || options.suffix;\n const maxlength = Number.MAX_SAFE_INTEGER.toString().length + formattingCharacterCount + decimalString.length;\n\n const unformattedValue = `${integerString.replace(/[^0-9]/g, '')}${decimalString}`.replace(/^0+/, '');\n\n return {\n value,\n formattedValue,\n fullyFormattedValue,\n prefix,\n suffix: '',\n formattingCharacterCount,\n maxlength,\n unformattedValue,\n };\n}\n\nfunction splitValue(\n value: string,\n allowDecimal: boolean = false,\n decimals: number\n): { integerString: string; decimalString: string } {\n if (!allowDecimal) {\n return {\n integerString: value,\n decimalString: '',\n };\n }\n\n const splitIndex = value.length - decimals;\n\n let integerString = value.substring(0, splitIndex).padStart(1, '0');\n if (integerString.length > 1 && integerString[0] === '0') {\n integerString = integerString.substring(1);\n }\n\n const decimalString = value.substring(splitIndex).padStart(decimals, '0');\n\n return {\n integerString,\n decimalString,\n };\n}\n","import { IFormatterValueObject } from '../q2-input-types';\n\nexport default function formatValue(\n value: string = '',\n mask: string = '',\n options?: {\n prefix?: string;\n suffix?: string;\n }\n): IFormatterValueObject {\n const prefix = (options && options.prefix) || '';\n const suffix = (options && options.suffix) || '';\n\n if (!value || !mask) {\n const fullyFormattedValue = `${prefix}${value}${suffix}`;\n return {\n value,\n formattedValue: value,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n const { unformattedValue, formattedValue, formattingCharacterCount } = generateMask(value, mask);\n\n const fullyFormattedValue = `${prefix}${formattedValue}${suffix}`;\n const maxlength = mask.length;\n const minFormattedLength = getMinimumFormattedLength(mask, prefix, suffix);\n\n return {\n value: unformattedValue,\n formattedValue,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount,\n maxlength,\n minFormattedLength,\n unformattedValue,\n };\n}\n\nconst optionalValidatingChars = ['?'];\nfunction isOptionalValidatingChar(character: string): boolean {\n return optionalValidatingChars.includes(character);\n}\n\nconst knownValidatingChars = ['#', '@', '*', ...optionalValidatingChars];\nfunction isKnownValidatingChar(character: string): boolean {\n return knownValidatingChars.includes(character);\n}\n\nfunction getStaticFormattingChars(mask: string): Set<string> {\n const knownChars = knownValidatingChars.join('|');\n const formattingChars = mask.replace(new RegExp(`[${knownChars}]`, 'g'), '').split('');\n return new Set(formattingChars);\n}\n\nfunction isStaticFormattingChar(character: string, formattingChars: Set<string>): boolean {\n return formattingChars.has(character);\n}\n\nfunction getValidatedChar(char: string, matcher: string) {\n switch (matcher) {\n case '#':\n char = char.replace(/[^\\d]/g, '');\n break;\n case '@':\n char = char.toUpperCase().replace(/[^A-Z]+/g, ''); // allows only upper case\n break;\n case '*':\n char = char.toUpperCase().replace(/[^\\dA-Z]+/g, '');\n break;\n case '?':\n char = char.replace(/[^\\d]/g, '');\n break;\n default:\n return char;\n }\n return char;\n}\n\nfunction generateMask(value: string, mask: string) {\n const maskArray = mask.split('');\n const formattingChars = getStaticFormattingChars(mask);\n let currentValueIndex: number = 0;\n let formattingCharacterCount: number = 0;\n let unformattedValue: string = '';\n\n const formattedValue = maskArray.reduce((acc: string, character: string) => {\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n if (isOptionalValidatingChar(character) && isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n return acc;\n }\n\n if (isKnownValidatingChar(character)) {\n // Step value index if formatting character pushed out of place by user input\n currentValueIndex = getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n const validChar = getValidatedChar(value[currentValueIndex], character);\n acc += validChar;\n unformattedValue += validChar;\n currentValueIndex++;\n } else {\n // Static formatting characters added directly to formatted string\n acc += character;\n formattingCharacterCount++;\n\n if (character === value[currentValueIndex]) {\n // Continue to walk value if next value at this index matches formatting character\n currentValueIndex++;\n }\n }\n\n return acc;\n }, '');\n\n return {\n unformattedValue,\n formattedValue,\n formattingCharacterCount,\n };\n}\n\nfunction getNextNonFormattingCharIndex(value: string, currentValueIndex: number, formattingChars: Set<string>): number {\n if (isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n currentValueIndex++;\n return getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n }\n\n return currentValueIndex;\n}\n\nfunction getMinimumFormattedLength(mask: string, prefix: string, suffix: string): number {\n return (\n mask.replace(new RegExp(`[${optionalValidatingChars.join('|')}]`, 'g'), '').length +\n prefix.length +\n suffix.length\n );\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { IFormatterValueObject, INumberInputFormatOptions } from '../q2-input-types';\n\n// decimal data source: http://www.iso.org/iso/home/standards/currency_codes.htm 09/Nov/2016\nexport const currencyFormats = {\n AED: {\n prefix: '',\n suffix: 'د.إ',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.إ'\n AFN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ALL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n AMD: {\n prefix: 'դր.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'դր.9,999.99'\n ANG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AOA: {\n prefix: 'Kz',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kz9,999.99'\n ARS: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AUD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AWG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AZN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BAM: {\n prefix: 'КМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'КМ9,999.99'\n BBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BDT: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BGN: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BHD: {\n prefix: '',\n suffix: 'ب.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ب.د'\n BIF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n BMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BND: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BOB: {\n prefix: 'Bs.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs.9,999.99'\n BRL: {\n prefix: 'R$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R$9,999.99'\n BSD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BTN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BWP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n BYN: {\n prefix: 'Br',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Br9,999'\n BZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CDF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CHF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CLF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 4,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9.999.9999'\n CLP: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CNY: {\n prefix: '¥',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999.99'\n COP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CRC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n CUC: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CUP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CVE: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CZK: {\n prefix: 'Kč',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kč9,999.99'\n DJF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n DKK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n DOP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n DZD: {\n prefix: '',\n suffix: 'د.ج',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ج'\n EEK: {\n prefix: 'KR',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'KR9,999.99'\n EGP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n ERN: {\n prefix: 'Nfk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Nfk9,999.99'\n ETB: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n EUR: {\n prefix: '€',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '€9,999.99'\n FJD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n FKP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GBP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GEL: {\n prefix: 'ლ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ლ9,999.99'\n GHS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n GIP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GMD: {\n prefix: 'D',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'D9,999.99'\n GNF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n GTQ: {\n prefix: 'Q',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Q9,999.99'\n GYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n HKD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.9'\n HNL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n HRK: {\n prefix: 'kn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kn9,999.99'\n HTG: {\n prefix: 'G',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'G9,999.99'\n HUF: {\n prefix: 'Ft',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ft9,999.99'\n IDR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n ILS: {\n prefix: '₪',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₪9,999.99'\n INR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n IQD: {\n prefix: '',\n suffix: 'ع.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ع.د'\n IRR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ISK: {\n prefix: 'kr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999'\n JMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n JOD: {\n prefix: '',\n suffix: 'د.ا',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ا'\n JPY: {\n prefix: '¥',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999'\n KES: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n KGS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KHR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KMF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n KPW: {\n prefix: '₩',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KRW: {\n prefix: '₩',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KWD: {\n prefix: 'د.ك',\n suffix: '',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ك'\n KYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n KZT: {\n prefix: '〒',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '〒9,999.99'\n LAK: {\n prefix: '₭',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₭9,999.99'\n LBP: {\n prefix: '',\n suffix: 'ل.ل',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ل.ل9,999.99'\n LKR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n LRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n LSL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n LTL: {\n prefix: 'Lt',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Lt9,999.99'\n LVL: {\n prefix: 'Ls',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ls9,999.99'\n LYD: {\n prefix: '',\n suffix: 'ل.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ل.د'\n MAD: {\n prefix: '',\n suffix: 'د.م.',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.م.'\n MDL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n MGA: {\n prefix: '¤',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.9'\n MKD: {\n prefix: 'ден',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ден9,999.99'\n MMK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n MNT: {\n prefix: '₮',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₮9,999.99'\n MOP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n MRU: {\n prefix: 'UM',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'UM9,999.9'\n MUR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n MVR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n MWK: {\n prefix: 'MK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MK9,999.99'\n MXN: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n MYR: {\n prefix: 'RM',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'RM9,999.99'\n MZN: {\n prefix: 'MTn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MTn9,999.99'\n NAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n NGN: {\n prefix: '₦',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₦9,999.99'\n NIO: {\n prefix: 'C$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'C$9,999.99'\n NOK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n NPR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n NZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n OMR: {\n prefix: '',\n suffix: 'ر.ع.',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ر.ع.'\n PAB: {\n prefix: 'B/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'B/.9,999.99'\n PEN: {\n prefix: 'S/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'S/.9,999.99'\n PGK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n PHP: {\n prefix: 'p',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'p9,999.99'\n PKR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n PLN: {\n prefix: 'zł',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'zł9,999.99'\n PYG: {\n prefix: '¤',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999'\n QAR: {\n prefix: '',\n suffix: 'ر.ق',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.ق'\n RON: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n RSD: {\n prefix: 'дин.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'дин.9,999.99'\n RUB: {\n prefix: 'руб.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'руб.9,999.99'\n RWF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n SAR: {\n prefix: '',\n suffix: 'ر.س',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.س'\n SBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SCR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n SDG: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SEK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n SGD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SHP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SKK: {\n prefix: 'Sk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sk9,999.99'\n SLL: {\n prefix: 'Le',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Le9,999.99'\n SOS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n SRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n STN: {\n prefix: 'Db',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Db9,999.99'\n SVC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n SYP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SZL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n THB: {\n prefix: '฿',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '฿9,999.99'\n TJS: {\n prefix: 'ЅМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ЅМ9,999.99'\n TMM: {\n prefix: 'm',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'm9,999.99'\n TND: {\n prefix: '',\n suffix: 'د.ت',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ت'\n TOP: {\n prefix: 'T$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T$9,999.99'\n TRY: {\n prefix: 'YTL',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'YTL9,999.99'\n TTD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TZS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n UAH: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n UGX: {\n prefix: 'Sh',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999'\n USD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n UYU: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n UZS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n VEF: {\n prefix: 'Bs F',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs F9,999.99'\n VND: {\n prefix: '₫',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₫9,999'\n VUV: {\n prefix: 'Vt',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Vt9,999'\n WST: {\n prefix: 'T',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T9,999.99'\n XAF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XCD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n XOF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XPF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n YER: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ZAR: {\n prefix: 'R',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R9,999.99'\n ZMW: {\n prefix: 'ZK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ZK9,999.99'\n ZWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n};\n\nexport default function formatCurrency(\n value: string,\n currencyCode: string = 'USD',\n explicit: boolean = false\n): IFormatterValueObject {\n let processedCurrencyCode = currencyCode || '';\n let allowDecimal = true;\n\n if (processedCurrencyCode.includes('-integer')) {\n processedCurrencyCode = processedCurrencyCode.split('-integer')[0];\n allowDecimal = false;\n }\n\n const currencyFormat = currencyFormats[processedCurrencyCode];\n\n if (!currencyFormat) {\n return formatValue(value);\n }\n\n const options: INumberInputFormatOptions = {\n ...currencyFormat,\n allowDecimal: allowDecimal && currencyFormat.decimals > 0,\n allowNegative: false,\n };\n\n return formatNumber(value, options, explicit);\n}\n","import { IFormatterValueObject } from '../q2-input-types';\nimport formatValue from './generic';\n\nexport const phoneNumberFormats = {\n AF: {\n mask: '(##) #######',\n prefix: '+93 ',\n },\n AL: {\n mask: '#######',\n prefix: '+355 ',\n },\n DZ: {\n mask: '(##) ###-###',\n prefix: '+213 ',\n },\n // AS\n AD: {\n mask: '(#) #####',\n prefix: '+376 ',\n },\n AO: {\n mask: '#########',\n prefix: '+244 ',\n },\n AI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AR: {\n mask: '##########',\n prefix: '+54 ',\n },\n AM: {\n mask: '########',\n prefix: '+375 ',\n },\n AQ: {\n mask: '##-####',\n prefix: '+672 ',\n },\n AW: {\n mask: '###-####',\n prefix: '+297 ',\n },\n AU: {\n mask: '(##) ####-####',\n prefix: '+61 ',\n },\n /* AT: {\n mask:'####?????????',\n prefix: ''\n }, */\n AT: {\n mask: '#############',\n prefix: '+43 ',\n },\n /* AZ: {\n mask:'########?',\n prefix: ''\n }, */\n AZ: {\n mask: '#########',\n prefix: '+994 ',\n },\n BS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BH: {\n mask: '####-####',\n prefix: '+973 ',\n },\n /* BD: {\n mask:'#######??',\n prefix: ''\n }, */\n BD: {\n mask: '#########',\n prefix: '+880 ',\n },\n BB: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BY: {\n mask: '#########',\n prefix: '+375 ',\n },\n BE: {\n mask: '########??',\n prefix: '+32 ',\n },\n BZ: {\n mask: '#######',\n prefix: '+501 ',\n },\n BJ: {\n mask: '(##) ###-###',\n prefix: '+229 ',\n },\n BM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BT: {\n mask: '(#) ###-###',\n prefix: '+975 ',\n },\n BO: {\n mask: '(#) ###-####',\n prefix: '+591 ',\n },\n BA: {\n mask: '(##) ##-##-##',\n prefix: '+387 ',\n },\n /* BW: {\n mask:'#######?',\n prefix: ''\n }, */\n BW: {\n mask: '########',\n prefix: '+267 ',\n },\n BR: {\n mask: '(##) ####-####',\n prefix: '+55 ',\n },\n BN: {\n mask: '###-####',\n prefix: '+673 ',\n },\n BG: {\n mask: '#######?',\n prefix: '+359 ',\n },\n BF: {\n mask: '##-##-##-##',\n prefix: '+226 ',\n },\n BI: {\n mask: '####-####',\n prefix: '+257 ',\n },\n KH: {\n mask: '(##) ######',\n prefix: '+855 ',\n },\n CM: {\n mask: '####-####',\n prefix: '+237 ',\n },\n CA: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CV: {\n mask: '###-####',\n prefix: '+238 ',\n },\n KY: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CF: {\n mask: '###-###',\n prefix: '+236 ',\n },\n TD: {\n mask: '###-##-##',\n prefix: '+235 ',\n },\n /* CL: {\n mask:'########?',\n prefix: ''\n }, */\n CL: {\n mask: '#########',\n prefix: '+56 ',\n },\n /* CN: {\n mask:'########???',\n prefix: ''\n }, */\n CN: {\n mask: '###########',\n prefix: '+86 ',\n },\n /* CO: {\n mask:'########??',\n prefix: ''\n }, */\n CO: {\n mask: '##########',\n prefix: '57 ',\n },\n KM: {\n mask: '###-####',\n prefix: '+269 ',\n },\n CD: {\n mask: '###-####',\n prefix: '+243 ',\n },\n CG: {\n mask: '###-####',\n prefix: '+242 ',\n },\n // CK\n CR: {\n mask: '####-####',\n prefix: '+506 ',\n },\n CI: {\n mask: '####-####',\n prefix: '+225 ',\n },\n HR: {\n mask: '########?',\n prefix: '+385 ',\n },\n /* CU: {\n mask:'#####?ID:?????',\n prefix: ''\n }, */\n CU: {\n mask: '###########',\n prefix: '+53 ',\n },\n CY: {\n mask: '####-####',\n prefix: '+357 ',\n },\n CZ: {\n mask: '#########',\n prefix: '+420 ',\n },\n DK: {\n mask: '####-####',\n prefix: '+45 ',\n },\n DJ: {\n mask: '##-##-##-##',\n prefix: '+253 ',\n },\n DM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n DO: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TL: {\n mask: '###-####',\n prefix: '+670 ',\n },\n EC: {\n mask: '(##) ###-####',\n prefix: '+593 ',\n },\n /* EG: {\n mask:'########??',\n prefix: ''\n }, */\n EG: {\n mask: '##########',\n prefix: '+20 ',\n },\n SV: {\n mask: '####-####',\n prefix: '+503 ',\n },\n GQ: {\n mask: '##-####',\n prefix: '+240 ',\n },\n // ER:\n EE: {\n mask: '#######?',\n prefix: '+372 ',\n },\n ET: {\n mask: '(##) ###-####',\n prefix: '+251 ',\n },\n FK: {\n mask: '#####',\n prefix: '+500 ',\n },\n FO: {\n mask: '######',\n prefix: '+298 ',\n },\n FJ: {\n mask: '###-####',\n prefix: '+679 ',\n },\n /* FI: {\n mask:'#####???????',\n prefix: ''\n }, */\n FI: {\n mask: '############',\n prefix: '+358 ',\n },\n FR: {\n mask: '#########',\n prefix: '+33 ',\n },\n /* GF: {\n mask:'#########?',\n prefix: ''\n }, */\n GF: {\n mask: '##########',\n prefix: '+594 ',\n },\n PF: {\n mask: '######',\n prefix: '+689 ',\n },\n GA: {\n mask: '######?',\n prefix: '+241 ',\n },\n GM: {\n mask: '###-####',\n prefix: '+220 ',\n },\n GE: {\n mask: '########?',\n prefix: '+995 ',\n },\n /* DE: {\n mask:'######?????',\n prefix: ''\n }, */\n DE: {\n mask: '###########',\n prefix: '+49 ',\n },\n /* GH: {\n mask:'########?',\n prefix: ''\n }, */\n GH: {\n mask: '#########',\n prefix: '+233 ',\n },\n GI: {\n mask: '####-####',\n prefix: '+350 ',\n },\n GR: {\n mask: '##########',\n prefix: '+30 ',\n },\n GL: {\n mask: '###-###',\n prefix: '+299 ',\n },\n GD: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GP: {\n mask: '##########',\n prefix: '+590 ',\n },\n GU: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GT: {\n mask: '####-####',\n prefix: '+502 ',\n },\n GN: {\n mask: '####-####',\n prefix: '+224 ',\n },\n GW: {\n mask: '###-####',\n prefix: '+245 ',\n },\n GY: {\n mask: '(###) ####',\n prefix: '+592 ',\n },\n HK: {\n mask: '####-####',\n prefix: '+852 ',\n },\n HN: {\n mask: '########',\n prefix: '+504 ',\n },\n HT: {\n mask: '####-####',\n prefix: '+509 ',\n },\n HU: {\n mask: '########??',\n prefix: '+36 ',\n },\n /* IS: {\n mask:'#######??',\n prefix: ''\n }, */\n IS: {\n mask: '#########',\n prefix: '+354 ',\n },\n IN: {\n mask: '##########',\n prefix: '+91 ',\n },\n /* ID: {\n mask:'#######???',\n prefix: ''\n }, */\n ID: {\n mask: '#######??????', // allows 7 ~ 13 digits\n prefix: '+62 ',\n },\n IR: {\n mask: '##########',\n prefix: '+98 ',\n },\n /* IQ: {\n mask:'########??',\n prefix: ''\n }, */\n IQ: {\n mask: '##########',\n prefix: '+964 ',\n },\n /* IE: {\n mask:'#######??',\n prefix: ''\n }, */\n IE: {\n mask: '#########',\n prefix: '+353 ',\n },\n /* IL: {\n mask:'########?',\n prefix: ''\n }, */\n IL: {\n mask: '#########',\n prefix: '+972 ',\n },\n /* IT: {\n mask:'######????',\n prefix: ''\n }, */\n IT: {\n mask: '##########',\n prefix: '+39 ',\n },\n JM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n JP: {\n mask: '#########??',\n prefix: '+81 ',\n },\n /* JO: {\n mask:'#######??',\n prefix: ''\n }, */\n JO: {\n mask: '#########',\n prefix: '+962 ',\n },\n KZ: {\n mask: '(###) ####-###',\n prefix: '+7 ',\n },\n /* KE: {\n mask:'######????',\n prefix: ''\n }, */\n KE: {\n mask: '##########',\n prefix: '+254 ',\n },\n KI: {\n mask: '##-###',\n prefix: '+686 ',\n },\n // kp\n /* KR: {\n mask:'####??????',\n prefix: ''\n }, */\n KR: {\n mask: '##########',\n prefix: '+82 ',\n },\n KW: {\n mask: '####-####',\n prefix: '+965 ',\n },\n KG: {\n mask: '#########',\n prefix: '+996 ',\n },\n LA: {\n mask: '########?',\n prefix: '+856 ',\n },\n LV: {\n mask: '####-####',\n prefix: '+371 ',\n },\n LB: {\n mask: '#######?',\n prefix: '+961 ',\n },\n LS: {\n mask: '##-###-###',\n prefix: '+266 ',\n },\n // LR\n /* LY: {\n mask:'########?',\n prefix: ''\n }, */\n LY: {\n mask: '########?',\n prefix: '+218 ',\n },\n LI: {\n mask: '###-####',\n prefix: '+423 ',\n },\n LT: {\n mask: '########',\n prefix: '+370 ',\n },\n /* LU: {\n mask:'#####??????',\n prefix: '+352 '\n }, */\n LU: {\n mask: '###########',\n prefix: '+352 ',\n },\n MO: {\n mask: '####-####',\n prefix: '+853 ',\n },\n MK: {\n mask: '########',\n prefix: '+389 ',\n },\n MG: {\n mask: '##-##-###-##',\n prefix: '+261 ',\n },\n /* MW: {\n mask:'#######??',\n prefix: '+265 '\n }, */\n MW: {\n mask: '#########',\n prefix: '+265 ',\n },\n /* MY: {\n mask:'#######???',\n prefix: '+60 '\n }, */\n MY: {\n mask: '##########',\n prefix: '+60 ',\n },\n MV: {\n mask: '###-####',\n prefix: '+960 ',\n },\n ML: {\n mask: '####-####',\n prefix: '+223 ',\n },\n MT: {\n mask: '##-##-##-##',\n prefix: '+356 ',\n },\n MH: {\n mask: '###-####',\n prefix: '+692 ',\n },\n MQ: {\n mask: '###-######',\n prefix: '+596 ',\n },\n // MR\n MU: {\n mask: '###-####',\n prefix: '+230 ',\n },\n // YT\n MX: {\n mask: '(###) ###-####',\n prefix: '+52 ',\n },\n // FM\n MD: {\n mask: '########',\n prefix: '+373 ',\n },\n MC: {\n mask: '####-####',\n prefix: '+377 ',\n },\n /* MN: {\n mask:'######?????',\n prefix: '+976 '\n }, */\n MN: {\n mask: '###########',\n prefix: '+976 ',\n },\n MS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n MA: {\n mask: '#########?', // allows 9 ~ 10 digits\n prefix: '+212 ',\n },\n /* MZ: {\n mask:'########?',\n prefix: '+258 '\n }, */\n MZ: {\n mask: '#########',\n prefix: '+258 ',\n },\n /* MM: {\n mask:'#######?',\n prefix: '+95 '\n }, */\n MM: {\n mask: '########',\n prefix: '+95 ',\n },\n /* NA: {\n mask:'######????',\n prefix: '+264 '\n }, */\n NA: {\n mask: '##########',\n prefix: '+264 ',\n },\n // NR\n /* NP: {\n mask:'########??',\n prefix: '+977 '\n }, */\n NP: {\n mask: '##########',\n prefix: '+977 ',\n },\n NL: {\n mask: '#########',\n prefix: '+31 ',\n },\n /* AN: {\n mask:'#######?',\n prefix: '+599 '\n }, */\n AN: {\n mask: '########',\n prefix: '+599 ',\n },\n NC: {\n mask: '###-###',\n prefix: '+687 ',\n },\n /* NZ: {\n mask:'########??',\n prefix: '+64 '\n }, */\n NZ: {\n mask: '##########',\n prefix: '+64 ',\n },\n NI: {\n mask: '####-####',\n prefix: '+505 ',\n },\n NE: {\n mask: '##-###-###',\n prefix: '+227 ',\n },\n /* NG: {\n mask:'########??',\n prefix: '+234 '\n }, */\n NG: {\n mask: '##########',\n prefix: '+234 ',\n },\n // NU\n MP: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n NO: {\n mask: '####-####',\n prefix: '+47 ',\n },\n OM: {\n mask: '####-####',\n prefix: '+968 ',\n },\n /* PK: {\n mask:'#########?',\n prefix: '+92 '\n }, */\n PK: {\n mask: '##########',\n prefix: '+92 ',\n },\n PW: {\n mask: '###-####',\n prefix: '+680 ',\n },\n /* PA: {\n mask:'#######?',\n prefix: '+507 '\n }, */\n PA: {\n mask: '########',\n prefix: '+507 ',\n },\n /* PG: {\n mask:'#######?',\n prefix: '+675 '\n }, */\n PG: {\n mask: '########',\n prefix: '+675 ',\n },\n // PY\n /* PE: {\n mask:'#######????',\n prefix: '+51 '\n }, */\n PE: {\n mask: '###########',\n prefix: '+51 ',\n },\n /* PH: {\n mask:'########??',\n prefix: '+63 '\n }, */\n PH: {\n mask: '##########',\n prefix: '+63 ',\n },\n PL: {\n mask: '#########',\n prefix: '+48 ',\n },\n PT: {\n mask: '#-####-####',\n prefix: '+351 ',\n },\n PR: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n QA: {\n mask: '###-####',\n prefix: '+974 ',\n },\n RE: {\n mask: '###-###-###',\n prefix: '+262 ',\n },\n RO: {\n mask: '#########',\n prefix: '+40 ',\n },\n RU: {\n mask: '##########',\n prefix: '+7 ',\n },\n RW: {\n mask: '###-###-###',\n prefix: '+250 ',\n },\n SH: {\n mask: '#-###',\n prefix: '+290 ',\n },\n // PM\n KN: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n LC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WS\n // SM\n ST: {\n mask: '##-####',\n prefix: '+239 ',\n },\n /* SA: {\n mask:'########?',\n prefix: '+966 '\n }, */\n SA: {\n mask: '#########',\n prefix: '+966 ',\n },\n SN: {\n mask: '##-###-####',\n prefix: '+221 ',\n },\n SC: {\n mask: '###-###',\n prefix: '+248 ',\n },\n SL: {\n mask: '(##) ###-###',\n prefix: '+232 ',\n },\n SG: {\n mask: '####-####',\n prefix: '+65 ',\n },\n SK: {\n mask: '#########',\n prefix: '+421 ',\n },\n SI: {\n mask: '########',\n prefix: '+386 ',\n },\n SB: {\n mask: '##-###',\n prefix: '+677 ',\n },\n // SO\n ZA: {\n mask: '(##) ###-####',\n prefix: '+27 ',\n },\n ES: {\n mask: '###-###-###',\n prefix: '+34 ',\n },\n LK: {\n mask: '(##) ###-####',\n prefix: '+94 ',\n },\n SD: {\n mask: '##-###-####',\n prefix: '+249 ',\n },\n SR: {\n mask: '######?',\n prefix: '+597 ',\n },\n SZ: {\n mask: '###-####',\n prefix: '+268 ',\n },\n /* SE: {\n mask:'######?????',\n prefix: '+46 '\n }, */\n SE: {\n mask: '###########',\n prefix: '+46 ',\n },\n CH: {\n mask: '(##) ###-####',\n prefix: '+41 ',\n },\n /* SY: {\n mask:'########?',\n prefix: '+963 '\n }, */\n SY: {\n mask: '#########',\n prefix: '+963 ',\n },\n TJ: {\n mask: '#########',\n prefix: '+992 ',\n },\n TZ: {\n mask: '#########',\n prefix: '+255 ',\n },\n /* TH: {\n mask:'########?',\n prefix: '+66 '\n }, */\n TH: {\n mask: '#########',\n prefix: '+66 ',\n },\n TG: {\n mask: '###-####',\n prefix: '+228 ',\n },\n // TK\n // TO\n TT: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TN: {\n mask: '##-###-###',\n prefix: '+216 ',\n },\n TR: {\n mask: '(###) ###-####',\n prefix: '+90 ',\n },\n TM: {\n mask: '########',\n prefix: '+993 ',\n },\n TC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // TV\n UG: {\n mask: '#########',\n prefix: '+256 ',\n },\n UA: {\n mask: '(##) ###-####',\n prefix: '+380 ',\n },\n /* AE: {\n mask:'########?',\n prefix: '+971 '\n }, */\n AE: {\n mask: '#########',\n prefix: '+971 ',\n },\n /* GB: {\n mask:'##########???',\n prefix: '+44 '\n }, */\n GB: {\n mask: '#########????',\n prefix: '+44 ',\n },\n UY: {\n mask: '########?',\n prefix: '+598 ',\n },\n UZ: {\n mask: '(##) ###-####',\n prefix: '+998 ',\n },\n // VU\n // VA\n VE: {\n mask: '(###) ###-####',\n prefix: '+58 ',\n },\n VN: {\n mask: '#######????',\n prefix: '+84 ',\n },\n VG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WF\n /* YE: {\n mask:'#######??',\n prefix: '+967 '\n }, */\n YE: {\n mask: '#########',\n prefix: '+967 ',\n },\n // YU\n ZM: {\n mask: '#########',\n prefix: '+260 ',\n },\n /* ZW: {\n mask:'####?????',\n prefix: '+263 '\n }, */\n ZW: {\n mask: '#########',\n prefix: '+263 ',\n },\n AC: {\n mask: '####',\n prefix: '+247 ',\n },\n ME: {\n mask: '(##) ###-###?',\n prefix: '+382 ',\n },\n /* PS: {\n mask:'########?',\n prefix: '+970 '\n }, */\n PS: {\n mask: '#########',\n prefix: '+970 ',\n },\n /* RS: {\n mask:'#######??',\n prefix: '+381 '\n }, */\n RS: {\n mask: '#########',\n prefix: '+381 ',\n },\n /* TW: {\n mask:'########?',\n prefix: '+886 '\n }, */\n TW: {\n mask: '#########',\n prefix: '+886 ',\n },\n CW: {\n mask: '#-###-####',\n prefix: '+599 ',\n },\n US: {\n mask: '(###) ###-####',\n prefix: '',\n },\n};\n\nexport default function formatPhoneNumber(value: string, isoCode: string = 'US'): IFormatterValueObject {\n const { mask, prefix } = phoneNumberFormats[isoCode] || phoneNumberFormats.US;\n\n const options = {\n prefix,\n };\n\n const val = value || '';\n // Brazil need edge case handle, mobile: (xx) xxxxx-xxxx, land phone: (xx) xxxx-xxxx\n if (isoCode === 'BR' && val.replace(/[^0-9]/g, '').length === 11) {\n return formatValue(val, '(##) #####-####', options);\n } else {\n return formatValue(val, mask, options);\n }\n}\n","import formatValue from './generic';\n\nexport default function formatSSN(value: string) {\n return formatValue(value, '###-##-####');\n}\n","import formatValue from './generic';\n\nexport default function formatTIN(value: string) {\n return formatValue(value, '##-#######');\n}\n","import formatValue from './generic';\n\nexport default function formatAlphanumeric(value: string) {\n const val = (value || '').replace(/[^\\da-zA-Z]/g, '');\n return formatValue(val);\n}\n","import formatValue from './generic';\n\nexport default function formatAlpha(value: string, modifier?: string) {\n let val = value || '';\n\n if (modifier === 'spaced') {\n val = val.replace(/[^a-zA-Z ]/g, '');\n } else {\n val = val.replace(/[^a-zA-Z]/g, '');\n }\n\n return formatValue(val);\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { INumberInputFormatOptions } from '../q2-input-types';\n\nfunction getNumberFormat(formatOptions: string): INumberInputFormatOptions | undefined {\n const numberFormat: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n };\n const formatParts = formatOptions.split('-');\n\n // handle deprecated formats\n if (formatParts[0] === 'delimited') {\n // `delimited` - to be replaced by `integer-delimited`\n numberFormat.thousandsSeparator = ',';\n } else if (formatParts[0].match(/^[0-9]+dec$/)) {\n // `Ndec` - to be replaced by `Ndecimal`\n numberFormat.decimals = Number(formatParts[0].replace('dec', ''));\n numberFormat.allowDecimal = true;\n numberFormat.thousandsSeparator = ',';\n } else {\n // determine number type\n if (formatParts[0].includes('decimal')) {\n numberFormat.decimals = Number(formatParts[0].replace('decimal', ''));\n numberFormat.allowDecimal = true;\n } else if (formatParts[0] !== 'integer') {\n // Ignore any formats that don't start with Ndecimal or integer\n return;\n }\n\n // determine if negative numbers are allowed\n if (formatParts.includes('positive')) {\n numberFormat.allowNegative = false;\n }\n\n // determine if number is delimited\n if (formatParts.includes('delimited')) {\n numberFormat.thousandsSeparator = ',';\n }\n }\n\n return numberFormat;\n}\n\nfunction formatNumeric(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val);\n }\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport function formatPercentage(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val, undefined, { suffix: '%' });\n }\n\n numberFormat.suffix = '%';\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport default formatNumeric;\n","import formatValue from './generic';\nimport formatAlphanumeric from './alphanumeric';\n\nexport const postalCodeFormats = {\n AF: '####',\n AL: '####',\n DZ: '#####',\n AC: 'ASCN 1ZZ',\n AD: 'AD###', // pre\n AR: '####',\n 'AR+': '@####@@@',\n AI: 'AI-2640',\n AM: '####',\n AS: '#####',\n 'AS+4': '#####-####',\n AU: '####',\n AT: '####',\n AZ: 'AZ ####', // pre\n BH: '###?',\n BD: '####',\n BB: 'BB#####', // pre\n BY: '######',\n BE: '####',\n BM: '@@ **',\n BT: '#####',\n BA: '######',\n BR: '#####',\n 'BR+3': '#####-###',\n VG: 'VG####', // pre\n BN: '@@####',\n BG: '####',\n KH: '#####',\n KY: 'KY#-####', // pre\n CA: '@#@ #@#',\n CL: '###-####',\n CN: '######',\n CX: '####',\n CC: '####',\n CO: '######',\n CR: '#####',\n 'CR+4': '#####-####',\n CV: '####',\n HR: '#####',\n CU: '#####',\n CY: '####',\n CZ: '### ##',\n DK: '####',\n DO: '#####',\n EC: '######',\n SV: '####',\n EG: '#####',\n EE: '#####',\n ET: '####',\n FK: 'FIQQ 1ZZ',\n FO: '###',\n FI: '#####',\n FR: '#####',\n GF: '973##', // pre?\n PF: '987##', // pre?\n GI: 'GX11 1AA',\n GE: '####',\n DE: '#####',\n GR: '### ##',\n GL: '####',\n GP: '971##', // pre?\n GU: '#####',\n 'GU+4': '#####-####',\n GT: '#####',\n GG: 'GY#? #@@',\n GN: '###',\n GS: 'SIQQ 1ZZ',\n GW: '####',\n HT: '####',\n HN: '@@####',\n 'HN-': '#####',\n HU: '####',\n IS: '###',\n IN: '### ###',\n ID: '#####',\n IE: '*** ****',\n IR: '##########',\n IQ: '#####',\n IM: 'IM#? #@@', // pre\n IL: '#######',\n IT: '#####',\n JM: '##',\n JP: '###-####',\n JE: 'JE#? #@@', // pre\n JO: '#####',\n KZ: '######',\n KE: '#####',\n KR: '#####',\n KN: 'KN####',\n XK: '#####',\n KW: '#####',\n KG: '######',\n LA: '#####',\n LV: 'LV-####', // pre\n LB: '####? ????', // also 00000\n LS: '###',\n LR: '####',\n LI: '####',\n LT: '#####', // pre-\n LU: '####',\n MK: '####',\n MG: '###',\n MY: '#####',\n MV: '#####',\n MT: '@@@ ####',\n MH: '#####',\n 'MH+4': '#####-####',\n MU: '#####',\n MQ: '972##', // pre?\n MW: '######',\n YT: '976##', // pre?\n MX: '#####',\n FM: '#####',\n 'FM+4': '#####-####',\n MD: '####', // pre\n MC: '980##', // pre?\n MN: '#####',\n ME: '#####',\n MA: '#####',\n MZ: '####',\n MM: '#####',\n NA: '#####',\n NP: '#####',\n NC: '988##', // pre?\n NZ: '####',\n NI: '#####',\n NE: '####',\n NG: '######',\n NF: '####',\n MP: '#####',\n NO: '####',\n OM: '###',\n PK: '#####',\n PW: '#####',\n 'PW+4': '#####-####',\n PS: '###',\n PA: '####',\n PG: '###',\n PY: '####',\n PE: '#####',\n 'PE+': '####', // pre\n PH: '####',\n PL: '##-###',\n PT: '####',\n 'PT+3': '####-###',\n PR: '#####',\n 'PR+4': '#####-####',\n RE: '974##', // pre?\n PM: '975##',\n PN: 'PCRN 1ZZ',\n RO: '######',\n RU: '######',\n LC: 'LC## ###', // pre\n VC: '####', // pre\n WS: '####', // pre\n SM: '4879#', // pre?\n SA: '#####',\n 'SA+4': '#####-####',\n SN: '#####',\n RS: '#####',\n SG: '######',\n SH: '@@@@ 1ZZ',\n SK: '### ##',\n SI: '####', // pre?\n SO: '@@ #####',\n ZA: '####',\n ES: '#####',\n LK: '#####',\n SD: '#####',\n SZ: '@###',\n SE: '### ##',\n CH: '####',\n SJ: '####',\n TW: '###',\n 'TW+2': '###-##?',\n TJ: '######',\n TZ: '#####',\n TH: '#####',\n TT: '######',\n TN: '####',\n TR: '#####',\n TM: '######',\n UA: '#####',\n UY: '#####',\n VI: '#####',\n 'VI+4': '#####-####',\n UZ: '######',\n VE: '####',\n 'VE-': '####-@',\n VN: '#####?',\n YU: '#####',\n WF: '986##', // pre?\n ZM: '#####',\n US: '#####',\n 'US+4': '#####-####',\n};\nexport default function formatPostalCode(value: string, modifier: string = 'US') {\n const mask = postalCodeFormats[modifier];\n\n if (!mask) {\n return formatAlphanumeric(value);\n }\n\n return formatValue(value, mask);\n}\n","import formatValue from './generic';\n\nexport const dateFormats = {\n 'MM/DD/YYYY': '##/##/####',\n 'M/D/YYYY': '#?/#?/####',\n 'MM/DD/YY': '##/##/##',\n 'M/D/YY': '#?/#?/##',\n 'MM/YY': '##/##',\n 'M/YY': '#?/##',\n 'DD/MM/YYYY': '##/##/####',\n 'D/M/YYYY': '#?/#?/####',\n 'DD/MM/YY': '##/##/##',\n 'D/M/YY': '#?/#?/##',\n 'MM-DD-YYYY': '##-##-####',\n 'M-D-YYYY': '#?-#?-####',\n 'MM-DD-YY': '##-##-##',\n 'M-D-YY': '#?-#?-##',\n 'MM-YY': '##-##',\n 'M-YY': '#?-##',\n 'DD-MM-YYYY': '##-##-####',\n 'D-M-YYYY': '#?-#?-####',\n 'DD-MM-YY': '##-##-##',\n 'D-M-YY': '#?-#?-##',\n};\n\nexport default function formatDate(value: string, format: string = 'MM/DD/YYYY') {\n const mask = dateFormats[format?.toUpperCase()] || dateFormats['MM/DD/YYYY'];\n\n const formattedValueObject = formatValue(value, mask);\n\n return {\n ...formattedValueObject,\n value: formattedValueObject.formattedValue,\n };\n}\n","import formatValue from './generic';\nimport { IFormatterValueObject } from '../q2-input-types';\n\ninterface FormattedCreditCardObject extends IFormatterValueObject {\n type: string;\n leftIcon: string;\n leftIconMuted: boolean;\n}\n\ntype Formatter = (value: string) => FormattedCreditCardObject;\n\nfunction format(value: string): FormattedCreditCardObject {\n // have a initial generic mask which then converts to specific mask\n const detectedType = formatCreditCard.detectCreditCardTypeFromValue(value);\n const formattedValueObject = creditCardFormatters[detectedType](value);\n\n if (value.length < 2 && detectedType === 'unknown') {\n formattedValueObject.leftIcon = 'card';\n }\n return formattedValueObject;\n}\n\nconst unknownFormatter: Formatter = function unknownFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'unknown',\n leftIcon: 'card-unknown',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst amexFormatter: Formatter = function amexFn(value) {\n const valueObject = formatValue(value, '#### ###### #####');\n\n return {\n ...valueObject,\n type: 'amex',\n leftIcon: 'card-amex-color',\n leftIconMuted: value.length < 15,\n };\n};\n\nconst discoverFormatter: Formatter = function discoverFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'discover',\n leftIcon: 'card-discover-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst masterCardFormatter: Formatter = function masterCardFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'masterCard',\n leftIcon: 'card-mastercard-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst visaFormatter: Formatter = function visaFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'visa',\n leftIcon: 'card-visa-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst dinersClubInternationalFormatter: Formatter = function dinersClub(value) {\n const valueObject = formatValue(value, '#### ###### ####');\n\n return {\n ...valueObject,\n type: 'dinersClub',\n leftIcon: 'card-dinersclub-color',\n leftIconMuted: value.length < 14,\n };\n};\n\nconst creditCardFormatters = {\n discover: discoverFormatter,\n amex: amexFormatter,\n masterCard: masterCardFormatter,\n visa: visaFormatter,\n dinersClub: dinersClubInternationalFormatter,\n unknown: unknownFormatter,\n};\n\n/* tslint:disable:cyclomatic-complexity */\nfunction detectCreditCardTypeFromValue(value: string): string {\n // use value and some algorithm from the internet to detect and return card type based on string\n // return string 'unknown' if algorithm cannot detect or returns a type that is not one of our 5 supported types\n const firstInt = parseInt(value.charAt(0));\n const secondInt = parseInt(value.charAt(1));\n\n switch (firstInt) {\n case 2:\n if (secondInt > 1 && secondInt < 8) {\n if (value.length >= 4) {\n const firstfour = parseInt(value.substr(0, 4));\n if (firstfour >= 2221 && firstfour < 2721) {\n return 'masterCard';\n }\n } else {\n return 'masterCard';\n }\n }\n break;\n case 3:\n if (secondInt === 4 || secondInt === 7) {\n return 'amex';\n }\n if (secondInt === 0) {\n if (value.length > 2) {\n const thirdInt = parseInt(value.charAt(2));\n if (thirdInt < 6 || thirdInt === 9) {\n return 'dinersClub';\n }\n } else {\n return 'dinersClub';\n }\n }\n if (secondInt === 6 || secondInt === 8 || secondInt === 9) {\n return 'dinersClub';\n }\n break;\n case 4:\n return 'visa';\n case 5:\n if (secondInt > 0 && secondInt < 6) {\n return 'masterCard';\n }\n break;\n case 6:\n if (secondInt === 0) {\n if (value.length > 3) {\n const firstfour = value.substr(0, 4);\n if (firstfour === '6011') {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 4) {\n if (value.length > 2) {\n const firstthree = parseInt(value.substr(0, 3));\n if (firstthree > 643) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 5) {\n return 'discover';\n }\n if (secondInt === 2) {\n if (value.length > 5) {\n const firstsix = parseInt(value.substr(0, 6));\n if (firstsix >= 622126 && firstsix <= 622925) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n break;\n default:\n return 'unknown';\n }\n return 'unknown';\n}\n/* tslint:enable:cyclomatic-complexity */\n\nconst formatCreditCard = {\n detectCreditCardTypeFromValue,\n format,\n amexFormatter,\n dinersClubInternationalFormatter,\n discoverFormatter,\n masterCardFormatter,\n visaFormatter,\n unknownFormatter,\n};\n\nexport default formatCreditCard;\n","@import '../../styles/host';\n@import '../../styles/functions';\n\n:host {\n --comp-default-input-margin: #{var-list(var-prefixer(input-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(input-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-input-margin, --comp-default-input-margin);\n font-size: var-list(var-prefixer(input-font-size), --app-font-size, inherit);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.field-container,\n.input-container {\n position: relative;\n}\n.field-container {\n --comp-input-tween: #{var-list(var-prefixer(input-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'))};\n\n &.is-small {\n .btn-clear {\n --tct-btn-icon-width: 20px;\n --tct-icon-size: 17px;\n }\n }\n}\n\n.input-label {\n --comp-label-padding: #{var-list(\n --tct-input-label-padding,\n unquote(\n '0 #{var-list(var-prefixer(input-label-padding-right), 0)} 0 #{var-list(var-prefixer(input-label-padding-left), 0)}'\n )\n )};\n display: block;\n padding: var(--comp-label-padding);\n color: var-list(var-prefixer(input-label-font-color), inherit);\n font-size: var-list(var-prefixer(input-label-font-size), inherit);\n font-weight: var-list(var-prefixer(input-label-font-weight), 600);\n text-transform: var-list(var-prefixer(input-label-text-transform), none);\n letter-spacing: var-list(var-prefixer(input-label-letter-spacing), inherit);\n transition: color var(--comp-input-tween);\n}\n\n.optional-tag {\n --comp-label-optional-margin: #{var-list(\n --tct-input-label-optional-margin,\n unquote(\n '0 0 0 #{var-list(var-prefixer(input-label-optional-margin-left), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n margin: var(--comp-label-optional-margin);\n color: var-list(\n var-prefixer(input-label-optional-font-color),\n --t-textA,\n --t-a11y-gray-color,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(input-label-optional-font-size), --app-font-size-small, 12px);\n font-weight: var-list(var-prefixer(input-label-optional-font-weight), 400);\n line-height: 1em;\n}\n\n.count-tag {\n color: var-list(--tct-input-count-font-color, --t-textA, --t-a11y-gray-color, rgba(77, 77, 77, 0.77));\n font-size: var-list(--tct-input-count-font-size, --app-font-size-small, 12px);\n font-weight: var-list(--tct-input-count-font-weight, 400);\n text-align: right;\n width: var(--tct-input-count-width, auto);\n}\n\n.label-wrapper {\n --comp-label-margin: #{var-list(\n --tct-input-label-margin,\n unquote(\n '#{var-list(var-prefixer(input-label-margin-top), 0)} 0 #{var-list(var-prefixer(input-label-margin-bottom), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n display: flex;\n gap: var-list(--tct-input-label-gap, --app-scale-2x, 10px);\n justify-content: space-between;\n align-items: end;\n margin: var(--comp-label-margin);\n line-height: var-list(var-prefixer(input-label-line-height), inherit);\n\n &:has(label.sr) {\n margin: 0;\n }\n}\n\n.input-container {\n --comp-input-background: #{var-list(--tct-input-background, var-prefixer(input-bg), --t-gray-14, #fcfcfd)};\n --comp-input-backdrop-filter: #{var-list(--tct-input-backdrop-filter, none)};\n --comp-input-horizontal-gap: #{var-list(var-prefixer(input-horizontal-gap), 0)};\n --comp-input-border-top-left-radius: #{var-list(\n var-prefixer(input-border-top-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-top-right-radius: #{var-list(\n var-prefixer(input-border-top-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-bottom-right-radius: #{var-list(\n var-prefixer(input-border-bottom-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-bottom-left-radius: #{var-list(\n var-prefixer(input-border-bottom-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-radius: var(--comp-input-border-top-left-radius) var(--comp-input-border-top-right-radius)\n var(--comp-input-border-bottom-right-radius) var(--comp-input-border-bottom-left-radius);\n --comp-input-border-width: var(--tct-input-border-top-width, 1px) var(--tct-input-border-right-width, 1px)\n var(--tct-input-border-bottom-width, 1px) var(--tct-input-border-left-width, 1px);\n --comp-input-border-color: #{var-list(var-prefixer(input-border-color), --t-a11y-gray-color-AA, #404040)};\n --comp-input-prefix-clearance: calc(3 * var(--tct-input-prefix-font-size, 14px) + var(--tct-scale-1, 5px));\n --comp-input-icon-clearance: 34px;\n --comp-input-min-height: #{var-list(var-prefixer(input-min-height), 44px)};\n --comp-input-max-height: #{var-list(var-prefixer(input-max-height))};\n\n --comp-input-hover-ring-color: #{var-list(var-prefixer(input-hover-ring-color))};\n --comp-input-hover-ring: #{0 0 0 2px var(--t-base), 0 0 0 4px var(--comp-input-hover-ring-color),\n var-list(var-prefixer(input-hover-box-shadow), unquote('0 0 transparent'))};\n\n background: var(--comp-input-background);\n backdrop-filter: var(--comp-input-backdrop-filter);\n display: flex;\n align-items: center;\n gap: var-list(--tct-input-container-gap, --app-scale-2x, 10px);\n padding-inline: var-list(--tct-input-container-padding-inline);\n border-width: var(--comp-input-border-width);\n border-style: solid;\n border-color: var(--comp-input-border-color);\n border-radius: var(--comp-input-border-radius);\n box-shadow: var-list(var-prefixer(input-box-shadow), none);\n transition:\n background var(--comp-input-tween),\n backdrop-filter var(--comp-input-tween),\n border-width var(--comp-input-tween),\n border-color var(--comp-input-tween),\n box-shadow var(--comp-input-tween);\n\n :host([disabled]:not([disabled='false'])) & {\n cursor: not-allowed;\n opacity: var-list(var-prefixer(input-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n backdrop-filter: var-list(--tct-input-disabled-backdrop-filter, --comp-input-backdrop-filter);\n }\n\n .has-error & {\n border-color: var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n backdrop-filter: var-list(--tct-input-error-backdrop-filter, --comp-input-backdrop-filter);\n background: var-list(--tct-input-error-background, --comp-input-background);\n box-shadow: var-list(--tct-input-error-box-shadow, --comp-input-hover-ring);\n }\n\n &:hover {\n border-color: var-list(--tct-input-hover-border-color, --comp-input-border-color);\n background: var-list(--tct-input-hover-background, --comp-input-background);\n backdrop-filter: var-list(--tct-input-hover-backdrop-filter, --comp-input-backdrop-filter);\n box-shadow: var-list(--tct-input-hover-box-shadow, --comp-input-hover-ring);\n\n .has-error & {\n border-color: var-list(\n --tct-input-error-hover-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n backdrop-filter: var-list(\n --tct-input-error-hover-backdrop-filter,\n --tct-input-error-backdrop-filter,\n --tct-input-hover-backdrop-filter,\n --comp-input-backdrop-filter\n );\n background: var-list(\n --tct-input-error-hover-background,\n --tct-input-error-background,\n --comp-input-background\n );\n box-shadow: var-list(\n --tct-input-error-hover-box-shadow,\n --tct-input-error-box-shadow,\n --comp-input-hover-ring\n );\n }\n }\n\n .has-focus & {\n border-color: var-list(var-prefixer(input-focus-border-color), --comp-input-border-color);\n background: var-list(--tct-input-focus-background, --comp-input-background);\n backdrop-filter: var-list(--tct-input-focus-backdrop-filter, --comp-input-backdrop-filter);\n box-shadow: var-list(--tct-input-focus-box-shadow, --const-double-focus-ring);\n }\n\n .has-focus.has-error &,\n .has-focus.has-error &:hover {\n border-color: var-list(\n --tct-input-error-focus-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n backdrop-filter: var-list(\n --tct-input-error-focus-backdrop-filter,\n --tct-input-error-backdrop-filter,\n --tct-input-focus-backdrop-filter,\n --comp-input-backdrop-filter\n );\n background: var-list(--tct-input-error-focus-background, --tct-input-error-background, --comp-input-background);\n box-shadow: var-list(\n --tct-input-error-focus-box-shadow,\n --tct-input-error-box-shadow,\n --const-double-focus-ring\n );\n }\n\n &:has(.input-field:is(:-webkit-autofill, :autofill)) {\n background: var(--tct-input-autofill-background, #faffbc);\n color: var-list(--tct-input-autofill-font-color, --t-text, inherit);\n .input-field {\n box-shadow: 0 0 0 1000px var(--tct-input-autofill-background, #faffbc) inset;\n color: var-list(--tct-input-autofill-font-color, --t-text, inherit);\n -webkit-text-fill-color: var-list(--tct-input-autofill-font-color, --t-text, inherit);\n }\n }\n}\n\n.input-field {\n flex: 1;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n box-sizing: border-box;\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n overflow-y: hidden;\n height: var-list(var-prefixer(input-height), 44px);\n width: 100%;\n padding: var(--tct-input-padding, 0);\n background: transparent;\n color: var-list(var-prefixer(input-font-color), --t-text, inherit);\n display: inline-block;\n text-align: var(--tct-input-align, 'start');\n font-weight: var-list(var-prefixer(input-font-weight), 400);\n letter-spacing: var-list(var-prefixer(input-letter-spacing), inherit);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n /* To remove up/down arrow in number field for webkit based browser */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* For Firefox */\n &[type='number'] {\n -moz-appearance: textfield;\n }\n\n &::-ms-reveal,\n &::-ms-clear {\n display: none;\n }\n\n &[type='search'] {\n &::-webkit-search-decoration,\n &::-webkit-search-cancel-button,\n &::-webkit-search-results-button,\n &::-webkit-search-results-decoration {\n display: none;\n }\n }\n\n &[disabled]:not([disabled='false']) {\n cursor: not-allowed;\n }\n\n .right-aligned & {\n text-align: right;\n }\n\n &:is(input) {\n flex: 1;\n }\n\n &:is(button) {\n display: inline-flex;\n align-items: center;\n\n .has-custom-display & {\n height: auto;\n padding: 0;\n }\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n }\n}\n\n.custom-display-container {\n max-width: 100%;\n\n .has-custom-display & {\n --comp-default-padding: var(--app-scale-2x, 10px) var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);\n padding: var-list(var-prefixer(input-padding), --comp-default-padding);\n width: 100%;\n }\n}\n\n.input-field::placeholder,\n.placeholder-text {\n color: var-list(var-prefixer(input-placeholder-font-color), --t-textA, --app-gray-d1, rgba(77, 77, 77, 0.77));\n}\n\n.pseudo-input-container {\n min-width: 0;\n flex: 1;\n}\n\n.input-icons-container-left,\n.input-icons-container-right {\n --tct-btn-icon-hover-background: var(--tct-input-btn-hover-background);\n --tct-btn-hover-background: var(--tct-input-btn-hover-background);\n\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--comp-input-horizontal-gap);\n\n > div:not(.vertical-separator) {\n min-width: var-list(--tct-input-icon-container-icon-min-width, 44px);\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(--tct-input-icon-container-font-size, inherit);\n }\n\n &:empty {\n display: var(--tct-input-icon-container-empty-display, block);\n }\n}\n\n.input-icons-container-left {\n padding-left: var(--comp-input-horizontal-gap);\n}\n\n.input-icons-container-right {\n padding-right: var(--comp-input-horizontal-gap);\n --comp-visibility-toggle-padding: 0px #{var-list(--app-scale-2x, 10px)};\n\n .btn-visibility-toggle {\n --tct-btn-height: var(--comp-input-min-height);\n --tct-btn-padding-inline: #{var-list(--tct-input-visibility-toggle-padding, --app-scale-2x, 10px)};\n --tct-btn-font-weight: #{var-list(--tct-input-visibility-toggle-font-weight, 400)};\n\n color: var-list(--tct-input-visibility-toggle-font-color, --t-primary, #0079c1);\n font-size: var-list(--tct-input-visibility-toggle-font-size, --app-font-size-small, 12px);\n }\n}\n\nq2-icon {\n margin-top: calc(#{var-list(var-prefixer(input-border-top-width), 1px)} / 2);\n margin-bottom: calc(#{var-list(var-prefixer(input-border-bottom-width), 1px)} / 2);\n pointer-events: none;\n color: var-list(var-prefixer(input-icon-stroke-primary), --t-a11y-gray-color, --t-textA, --app-gray, #747474);\n --tct-icon-stroke-primary: #{var-list(\n var-prefixer(input-icon-stroke-primary),\n --t-a11y-gray-color,\n --t-textA,\n --app-gray,\n #747474\n )};\n}\n\n.icon-left-muted {\n opacity: 0.5;\n}\n\n.input-prefix,\n.input-suffix {\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n height: var-list(var-prefixer(input-height), 44px);\n font-size: var-list(var-prefixer(input-prefix-font-size), inherit);\n font-weight: var-list(--tct-input-prefix-font-weight, 400);\n color: var-list(var-prefixer(input-prefix-font-color), inherit);\n background: var-list(\n --tct-input-prefix-background,\n var-prefixer(input-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n #f2f2f2\n );\n transition:\n color var(--comp-input-tween),\n background var(--comp-input-tween);\n}\n\n.input-prefix {\n border-top-left-radius: calc(\n var(--comp-input-border-top-left-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n border-bottom-left-radius: calc(\n var(--comp-input-border-bottom-left-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n pointer-events: none; /* used to allow iOS voiceover to display keyboard in input TCT-1194 */\n}\n\n.input-suffix {\n border-top-right-radius: calc(\n var(--comp-input-border-top-right-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n border-bottom-right-radius: calc(\n var(--comp-input-border-bottom-right-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n}\n\n.icon-error {\n color: var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a);\n --tct-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n}\n\n.messages-container {\n height: 0px;\n overflow: hidden;\n background: var-list(\n --tct-message-background,\n var-prefixer(message-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n box-shadow: var-list(\n var-prefixer(input-message-box-shadow),\n --tct-box-shadow-1,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n transition: height var-list(var-prefixer(input-messages-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n margin-top: var-list(--tct-input-messages-margin-top, 2px);\n z-index: var-list(--tct-input-messages-z-index, 5);\n position: absolute;\n width: 100%;\n color: var-list(var-prefixer(input-messages-font-color), inherit);\n\n // Sync up border radius with q2-message\n border-radius: var(--tct-message-border-radius, --app-border-radius-1, inherit);\n}\n\n.has-error label {\n color: var-list(var-prefixer(input-error-label-font-color), var-prefixer(input-label-font-color), inherit);\n}\n\n.has-error:not(.has-focus) .input-prefix,\n.has-error:not(.has-focus) .input-suffix {\n color: var-list(var-prefixer(input-error-prefix-font-color), inherit);\n background: var-list(\n --tct-input-error-prefix-background,\n var-prefixer(input-error-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n}\n\n.icon-left {\n width: 26px;\n height: 26px;\n}\n\n.vertical-separator {\n height: calc(var(--comp-input-min-height) - 2px);\n border-right-width: var(--tct-input-prefix-border-width, 1px);\n border-right-style: solid;\n border-right-color: var-list(\n var-prefixer(input-prefix-border-color),\n var-prefixer(input-border-color),\n --t-a11y-gray-color-AA,\n #404040\n );\n}\n","import {\n Component,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n h,\n Host,\n Watch,\n Listen,\n Fragment,\n Method,\n} from '@stencil/core';\nimport {\n createGuid,\n getAriaValueFromProp,\n renderLabel,\n loc,\n renderMessages,\n setMessageHeight,\n handleAriaLabel,\n overrideFocus,\n isEventFromElement,\n isMobile,\n hasSlotContent,\n nextPaint,\n} from 'src/utils';\nimport { IFormatterValueObject, ICursorData, IEventDetail } from './q2-input-types';\nimport formatCurrency from './formatting/currency';\nimport formatPhoneNumber from './formatting/phone';\nimport formatSSN from './formatting/ssn';\nimport formatTIN from './formatting/tin';\nimport formatAlphanumeric from './formatting/alphanumeric';\nimport formatAlpha from './formatting/alpha';\nimport formatNumeric, { formatPercentage } from './formatting/numeric';\nimport formatPostalCode from './formatting/postal';\nimport formatDate from './formatting/date';\nimport formatCreditCard from './formatting/credit-card';\nimport { Q2Icon } from '../q2-icon/q2-icon';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\nconst inputTypeMap = {\n text: 'text',\n tel: 'tel',\n number: 'number',\n password: 'text',\n search: 'search',\n url: 'url',\n email: 'email',\n currency: 'text',\n phone: 'tel',\n ssn: 'text',\n alphanumeric: 'text',\n alpha: 'text',\n numeric: 'text',\n percentage: 'text',\n postal: 'text',\n date: 'text',\n 'credit-card': 'text',\n};\n\nexport type InputType = keyof typeof inputTypeMap;\n\n/**\n * @slot label - An optional slot to display a custom label.\n * @slot input-left - An optional slot to add a [Button](https://tecton.q2developer.com/design-system/q2-btn) on the left-hand side of the input field.\n * @slot input-right - An optional slot to add a [Button](https://tecton.q2developer.com/design-system/q2-btn) on the right-hand side of the input field.\n * @slot custom-display - An optional slot to display custom content in the input field.\n */\n@Component({ tag: 'q2-input', shadow: true, styleUrl: 'q2-input.scss' })\nexport class Q2Input {\n // #region Own Properties\n\n guid = createGuid();\n inputRef: HTMLInputElement;\n isClickEvent: boolean = false;\n isMobile: boolean = isMobile();\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n textSelectedForDeletion: boolean;\n valueOnFocus: string;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n formattedValueObject: IFormatterValueObject;\n\n @State()\n hasFocus: boolean;\n\n @State()\n isSmall: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Sets readonly to true on the input without adding the \"read only\" label.\n *\n * Can be used to prevent user input while still presenting the necessary information for assistive technology.\n * @private\n */\n @Prop({ mutable: true })\n _preventEntry: boolean = undefined;\n\n /**\n * Allows for correct semantics of q2-input element when aria-expanded.\n * @private\n * Defaults to undefined\n * Will assign role to combobox when used inside q2-select and q2-calendar.\n */\n @Prop({ mutable: true })\n _role: 'combobox' | undefined = undefined;\n\n @Prop()\n ariaActivedescendant: string;\n\n @Prop()\n ariaControls: string;\n\n @Prop({ reflect: true })\n ariaExpanded: string;\n\n @Prop()\n ariaHaspopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaOwns: string;\n\n /**\n * The `autocapitalize` attribute is an enumerated attribute that controls whether and how text input is automatically capitalized as it is entered/edited by the user.\n *\n * [See MDN for a list of supported values](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autocapitalize#value).\n * @info\n * This attribute only affects the behavior of input mechanisms like virtual keyboards on mobile devices and voice input.\n */\n @Prop({ reflect: true })\n autocapitalize: string;\n\n /**\n * The HTML autocomplete attribute lets web developers specify what permission (if any) the user agent has to provide automated assistance in filling out form field values,\n * as well as guidance to the browser as to the type of information expected in the field.\n *\n * [See MDN for a list of supported values](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values).\n */\n @Prop({ reflect: true })\n autocomplete: string;\n\n /**\n * A string that indicates whether or not to activate automatic correction while the user is editing this field.\n * @warning\n * This is currently only supported in Safari.\n */\n @Prop({ reflect: true })\n autocorrect: 'on' | 'off';\n\n /**\n * Autofocus is enabled when the property is added to an element. To disable, remove attribute or set it to false.\n * If applied to multiple elements, the first one will receive focus.\n */\n @Prop({ reflect: true })\n autofocus: boolean;\n\n /** The color of the badge when in the active state. The property `badgeValue` must be provided. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /** Displays a `q2-badge` element on the right side of the input. */\n @Prop({ reflect: true })\n badgeValue: string;\n\n /** Renders an icon button when the field is non-empty. Pressing the button clears all input from the field. */\n @Prop({ reflect: true })\n clearable: boolean;\n\n /**\n * If provided a value, it sets the `aria-current` attribute on the inner input.\n * [See MDN for more information on aria-current](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current).\n */\n @Prop()\n current: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';\n\n /** Indicates the field cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused.\n * @localizable\n */\n @Prop()\n errors: string[];\n\n /**\n * Defines the field's expected input format, and automatically masks user input to conform.\n * Specific types support different modifier options. See the section on Format Modifiers for all available options.\n */\n @Prop({ reflect: true })\n formatModifier: string;\n\n /**\n * Hide's the field's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * When `true` and the input field has an active validation error, the field shows the error state without displaying associated error messages below the field (from the errors array).\n * Primarily used for dropdown selects and date pickers whose controls appear below the input field (where the error messages, if displayed, would also appear).\n */\n @Prop({ reflect: true })\n hideMessages: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused.\n * @info\n * The `errors` array takes precedence over the `hints` array. If an input field has both hints and errors, only the errors will display.\n * Once all errors are resolved, the hints display the next time the field is focused.\n * @localizable\n */\n @Prop()\n hints: string[];\n\n /** Shows a left-aligned [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) within the field. */\n @Prop({ reflect: true })\n iconLeft: Q2Icon['type'];\n\n /** Shows a right-aligned [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) within the field. */\n @Prop({ reflect: true })\n iconRight: Q2Icon['type'];\n\n /**\n * The label that appears above the field. This is announced by screen readers when the field is focused.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * When present, it does not allow a value greater than `max` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n max: number;\n\n /**\n * Defines the maximum allowed input length in characters. Formatting characters (e.g. `.`, `-`, etc) are included in the `maxlength` comparison.\n * Make sure you account for them when setting the `maxlength` value. Input types that use masks have their own inherent `maxlength`.\n */\n @Prop({ reflect: true, mutable: true })\n maxlength: number;\n\n /**\n * When present, it does not allow a value less than the `min` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n min: number;\n\n /** Appends \"(optional)\" to the field label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Applies the value as a RegEx pattern to assess the validity of the input field's value.\n * Check the ValidityState's `patternMismatch` property for the result.\n *\n * **Example:**\n * @snippet\n * <q2-input label=\"My input\" pattern=\"[a-zA-Z0-9]{3,5}\" id=\"myInput\"></q2-input>\n * // enter \"abcdefgh\" in the input field (too many characters)\n * const myInput = document.querySelector('#myInput');\n * console.log(myInput.validity.patternMismatch); // true\n */\n @Prop({ reflect: true, mutable: true })\n pattern: string;\n\n /**\n * Text that appears within the field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n * @info\n * Primarily used for rare cases in which a visible form label is not expected (e.g., search fields).\n * @localizable\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /** Component will display as a clickable `<button>` styled to be identical to the default `<input>` field. */\n @Prop({ reflect: true })\n pseudo: boolean;\n\n /**\n * Appends \"(read only)\" to the field label, and field becomes unusable, but remains focusable.\n * Takes priority over `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /**\n * Indicates the element's intended purpose to assistive technology.\n * @deprecated\n */\n @Prop()\n role: string;\n\n /**\n * Shows a character counter above the input field to track the number of characters currently in the field.\n * If `maxlength` is set, `showCount` displays the number of characters in relation the `maxlength` value.\n */\n @Prop({ reflect: true })\n showCount: boolean;\n\n /**\n * Displays a toggle button at the end of the input field which shows or hides the actual value.\n * @info\n * Only applicable when `type` is `text`, `password`, or `ssn`.\n */\n @Prop({ reflect: true })\n showVisibilityToggle: boolean = false;\n\n /**\n * When present, it jumps the value in increments of `step` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n step: number;\n\n /**\n * Controls visibility of the value when the type is `text`, `password`, or `ssn`.\n * When the input type is `password`, it will default to `true`, hiding the text.\n */\n @Prop({ reflect: true, mutable: true })\n textHidden: boolean;\n\n /** Specifies the field's expected [input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types), and provides the optimal keyboard on mobile devices. */\n @Prop({ reflect: true })\n type: InputType = 'text';\n\n /**\n * Returns a read-only `ValidityState` object representing the validity states of the element.\n * [See MDN for more information on ValidityState](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState).\n */\n @Prop({ reflect: true, mutable: true })\n validity: ValidityState;\n\n /**\n * The value of the input field.\n * @info\n * The visible value of formatted input fields may not match the element's `value` property.\n * When setting an input's value programmatically (e.g. pre-populating a form), ensure that the supplied value is in a format that can be handled by its consuming logic.\n * `q2-input` does not change its own `value` outside of its default change event handler.\n *\n * In `q2-input` where `type=\"currency\"`\n * - element.value = 1234.56\n * - visible value: $1,234.56\n *\n */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the field loses focus after the value has been changed.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<IEventDetail>;\n\n /**\n * Emitted when the field value is cleared.\n *\n * Requires the `clearable` prop to be set to `true`.\n */\n @Event()\n clear: EventEmitter<undefined>;\n\n /**\n * Emitted when the field value is formatted.\n */\n @Event()\n formatted: EventEmitter<IFormatterValueObject>;\n\n /**\n * Emitted when the field value is updated.\n * @legacyEvent\n */\n @Event()\n input: EventEmitter<IEventDetail>;\n\n /**\n * Emitted when the validation is updated.\n * @legacyEvent\n */\n @Event()\n invalid: EventEmitter<IEventDetail>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.manageClearableResizeObserver();\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n Object.defineProperty(this.hostElement, 'formattedValue', {\n get: () => this.formattedValueObject?.formattedValue ?? '',\n });\n\n handleAriaLabel(this);\n if (this.textHidden === undefined) {\n this.textHidden = this.type === 'password';\n }\n\n this.manageClearableResizeObserver(this.clearable);\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n\n if (!this.pseudo) this.inputField.value = this.formattedValueObject.formattedValue;\n if (!!this.autofocus) this.inputField.focus();\n\n this.initMutationObserver();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent | Event) {\n if (!(event instanceof CustomEvent)) {\n event.stopPropagation();\n return;\n }\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onHostElementFocus(event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.inputField.focus();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates firing checkValidity on `<input>`, emits `invalid` event if validation failed.\n */\n @Method()\n async checkValidity() {\n this.inputRef.checkValidity();\n return this.validateInput();\n }\n\n /**\n * Emulates clicking the clear button when the input is clearable.\n *\n * @warning\n * Only applicable when the input is clearable.\n *\n * @testOnly\n */\n @Method()\n async clearValue() {\n if (!this.clearable) return;\n this.onClearInput();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * This method leaves the focus on the `<input>` and as a result does not trigger the `change` event. If you want\n * to trigger the` change` event, move the focus to another element after calling this method.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n const { inputField } = this;\n inputField.focus();\n inputField.dispatchEvent(new FocusEvent('focus'));\n inputField.value = value;\n inputField.dispatchEvent(new InputEvent('input'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('clearable')\n manageClearableResizeObserver(clearable?: boolean) {\n if ('ResizeObserver' in window === false) return;\n const isSmallThreshold = 190;\n if (clearable) {\n if (this.resizeObserver) return;\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(([entry]) => {\n this.isSmall = isSmallThreshold > entry.contentRect.width;\n });\n this.resizeObserver.observe(this.hostElement);\n } else {\n this.isSmall = false;\n this.resizeObserver?.unobserve(this.hostElement);\n this.resizeObserver = null;\n }\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('formatModifier')\n formatModifierObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formattedValueObject')\n formattedValueObjectObserver() {\n this.formatted.emit(this.formattedValueObject);\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('type')\n typeObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('value')\n valueObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n // #endregion\n // #region Local Methods\n\n get ariaAttributes() {\n return {\n ariaActivedescendant: getAriaValueFromProp(this.ariaActivedescendant),\n ariaControls: getAriaValueFromProp(this.ariaControls),\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHaspopup: getAriaValueFromProp(this.ariaHaspopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaOwns: getAriaValueFromProp(this.ariaOwns),\n };\n }\n\n get canSetSelection(): boolean {\n // email and number type don't support setSelectionRange\n return !['email', 'number'].includes(this.computedType);\n }\n\n get clearClasses(): string[] {\n const classes = ['btn-clear'];\n if (!this.clearable || !(this.inputField?.value || this.value)) {\n classes.push('hidden');\n }\n return classes;\n }\n\n get computedAutocomplete(): string {\n // force off for currency type\n if (this.type === 'currency') return 'transaction-amount';\n return this.autocomplete || 'off';\n }\n\n get computedClassForIconLeft(): string | undefined {\n let className = 'icon-left';\n if (this.formattedValueObject.leftIconMuted) {\n className += ' icon-left-muted';\n }\n return className;\n }\n\n get computedIconLeft(): string | undefined {\n if (this.formattedValueObject.prefix) {\n return;\n }\n\n if (this.type === 'search') {\n return 'search';\n }\n\n if (this.formattedValueObject.leftIcon) {\n return this.formattedValueObject.leftIcon;\n }\n\n return this.iconLeft;\n }\n\n get computedType(): string {\n if (['password', 'text', 'ssn'].includes(this.type) && this.textHidden) {\n return 'password';\n } else {\n return (this.type && inputTypeMap[this.type]) || 'text';\n }\n }\n\n get hasCustomDisplaySlot(): boolean {\n return hasSlotContent(this.hostElement, 'custom-display');\n }\n\n get hasError(): boolean {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get hasInputLeftSlot(): boolean {\n return hasSlotContent(this.hostElement, 'input-left');\n }\n\n get hasInputRightSlot(): boolean {\n return hasSlotContent(this.hostElement, 'input-right');\n }\n\n get inputDescribedBy(): string | undefined {\n return this.showMessages ? `${this.inputId}-description` : undefined;\n }\n\n get inputField(): HTMLInputElement {\n return this.hostElement.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n }\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get inputMode() {\n const inputModeMap = {\n currency: 'numeric',\n ssn: 'numeric',\n tin: 'numeric',\n numeric: 'decimal',\n percentage: 'decimal',\n date: 'numeric',\n 'credit-card': 'numeric',\n };\n\n return (this.type && inputModeMap[this.type]) || undefined;\n }\n\n get isMaskedType(): boolean {\n const maskedTypes: string[] = [\n 'currency',\n 'phone',\n 'ssn',\n 'tin',\n 'alphanumeric',\n 'alpha',\n 'numeric',\n 'percentage',\n 'postal',\n 'date',\n 'credit-card',\n ];\n\n return maskedTypes.includes(this.type);\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get shouldCursorStartAtEnd(): boolean {\n return this.type === 'currency';\n }\n\n get shouldCursorStayAtEnd(): boolean {\n return this.isMobile && this.type === 'currency';\n }\n\n get showIconSeparator(): boolean {\n return this.type === 'credit-card' || !!this.formattedValueObject.prefix;\n }\n\n get showMessages(): boolean {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n get stringValue(): string {\n const notCoercable = Object.prototype.toString.call(this.value) === '[object Object]';\n return notCoercable ? '' : (this.value && String(this.value)) || '';\n }\n\n get visibilityToggleAriaLabel(): string {\n return `tecton.element.input.toggleAriaLabel.${this.textHidden ? 'show' : 'hide'}`;\n }\n\n get visibilityToggleText(): string {\n return loc(`tecton.element.input.toggle.${this.textHidden ? 'show' : 'hide'}`);\n }\n\n get wrapperClasses() {\n const classNames = ['field-container'];\n if (this.hasError) classNames.push('has-error');\n if (!!this.value) classNames.push('has-value');\n if (this.clearable && !!this.value) classNames.push('has-clear');\n if (this.hasFocus) classNames.push('has-focus');\n if (this.isSmall) classNames.push('is-small');\n if (this.formattedValueObject.prefix) classNames.push('has-prefix');\n if (this.computedIconLeft) classNames.push('has-icon-left');\n if (this.showIconSeparator) classNames.push('has-icon-separator');\n if (this.formattedValueObject.suffix) classNames.push('has-suffix');\n if (!this.formattedValueObject.suffix && this.iconRight) classNames.push('has-icon-right');\n if (this.type === 'currency') classNames.push('right-aligned');\n else classNames.push('left-aligned');\n if (this.hasCustomDisplaySlot) classNames.push('has-custom-display');\n\n return classNames.join(' ');\n }\n\n calculateCursorPositionOnFocus(): ICursorData {\n const { inputField } = this;\n const valueLength = inputField?.value?.length ?? 0;\n const startingPosition = inputField?.selectionStart ?? valueLength;\n\n return {\n startingPosition,\n valueLength,\n previousValueLength: valueLength,\n hasSelection: window.getSelection().toString().length > 0,\n };\n }\n\n calculateCursorPositionOnInput(): ICursorData {\n const input = this.inputField;\n const formattedLength = this.formattedValueObject.formattedValue.length;\n const currentValueLength = input.value.length;\n const defaultPosition = this.type === 'currency' ? formattedLength : 0;\n return {\n startingPosition: (input && input.selectionStart) || defaultPosition,\n valueLength: formattedLength,\n previousValueLength: input && currentValueLength,\n hasSelection: false,\n };\n }\n\n formatAndUpdateValueFromProp() {\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n if (!this.pseudo) {\n const setValue = () => {\n this.inputField.value = this.formattedValueObject.formattedValue;\n };\n\n this.inputField ? setValue() : this.scheduledAfterRender.push(() => setValue());\n }\n }\n\n getFormattedValue(value: string, valueChangedFromProperty: boolean): IFormatterValueObject {\n const formattingFunctions = {\n currency: formatCurrency,\n phone: formatPhoneNumber,\n ssn: formatSSN,\n tin: formatTIN,\n alphanumeric: formatAlphanumeric,\n alpha: formatAlpha,\n numeric: formatNumeric,\n percentage: formatPercentage,\n postal: formatPostalCode,\n date: formatDate,\n 'credit-card': formatCreditCard.format,\n };\n\n if (formattingFunctions[this.type]) {\n return formattingFunctions[this.type](value, this.formatModifier, valueChangedFromProperty);\n }\n\n return {\n value,\n formattedValue: value,\n fullyFormattedValue: value,\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n handleCurrencyDeletion(event: InputEvent) {\n // Don't do anything if text was selected for deletion\n if (this.textSelectedForDeletion) {\n this.textSelectedForDeletion = false;\n return;\n }\n // We only care about \"Backspace\" and \"Delete\" events\n if (!['deleteContentBackward', 'deleteContentForward'].includes(event.inputType)) return;\n\n const input = event.target as HTMLInputElement;\n const cursorPosition = input.selectionStart;\n const { formattedValue } = this.formattedValueObject;\n\n if (cursorPosition === null) return;\n\n let cursorMap;\n switch (event.inputType) {\n case 'deleteContentBackward':\n const valueBeforeCursor = formattedValue.substring(0, cursorPosition + 1);\n const isPrevCharAlphaNum = /[a-zA-Z0-9]$/.test(valueBeforeCursor);\n cursorMap = {\n leftIndex: isPrevCharAlphaNum ? cursorPosition : cursorPosition - 1,\n rightIndex: isPrevCharAlphaNum ? cursorPosition + 1 : cursorPosition,\n afterCursorOffset: 0,\n newCursorOffset: 1,\n };\n break;\n case 'deleteContentForward':\n const valueAfterCursor = formattedValue.substring(cursorPosition);\n const isNextCharAlphaNum = /^[a-zA-Z0-9]/.test(valueAfterCursor);\n cursorMap = {\n leftIndex: isNextCharAlphaNum ? cursorPosition : cursorPosition + 1,\n rightIndex: isNextCharAlphaNum ? cursorPosition + 1 : cursorPosition + 2,\n afterCursorOffset: 1,\n newCursorOffset: 0,\n };\n break;\n default:\n return;\n }\n\n // Ensure the cursor doesn't move with a newly formatted value\n const newValue = [\n formattedValue.substring(0, cursorMap.leftIndex),\n formattedValue.substring(cursorMap.rightIndex),\n ].join('');\n const charactersAfterCursor = formattedValue.length - cursorPosition - cursorMap.afterCursorOffset;\n const newFormattedValue = this.getFormattedValue(newValue, false).formattedValue;\n const newCursorPosition = Math.max(\n newFormattedValue.length - charactersAfterCursor + cursorMap.newCursorOffset,\n 0\n );\n\n input.value = newFormattedValue;\n input.setSelectionRange(newCursorPosition, newCursorPosition);\n\n // This handles a runtime issue when a character is deleted from the beginning of the input\n if (newCursorPosition === 0) {\n nextPaint(() => input.setSelectionRange(newCursorPosition, newCursorPosition));\n }\n }\n\n /**\n * Sets textSelectedForDeletion to true if the user has selected text for deletion\n * This is used to prevent other logic from running when text is deleted\n */\n handleCurrencyKeydown = (event: KeyboardEvent) => {\n if (!['Backspace', 'Delete'].includes(event.key)) return;\n const inputElement = this.inputField;\n this.textSelectedForDeletion = inputElement.selectionStart !== inputElement.selectionEnd;\n };\n\n handleDataInput(newFormattedValue: IFormatterValueObject) {\n if (\n this.maxlength === undefined ||\n newFormattedValue.unformattedValue.length <= this.maxlength ||\n newFormattedValue.unformattedValue.length <= this.formattedValueObject.unformattedValue.length\n ) {\n this.formattedValueObject = newFormattedValue;\n } else if (this.maxlength) {\n newFormattedValue = this.getFormattedValue(\n newFormattedValue.unformattedValue.substring(0, this.maxlength),\n false\n );\n this.formattedValueObject = newFormattedValue;\n }\n this.handleValueAndCursor();\n }\n\n handleValueAndCursor = () => {\n // ORDER IMPORTANT: calculate cursor position -> set value -> set cursor position\n const cursorPosition = this.calculateCursorPositionOnInput();\n // when type=number: returns only valid decimal on input event, should not update itself (e.g. typing \"1.\" )\n if (this.type !== 'number') this.inputField.value = this.formattedValueObject.formattedValue;\n this.input.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n if (!this.formattedValueObject.value) {\n this.clear.emit();\n }\n this.setCursorPosition(cursorPosition);\n };\n\n initMutationObserver = () => {\n if (!('MutationObserver' in window)) return;\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n };\n\n onClearInput = () => {\n const eventDetail = {\n value: '',\n formattedValue: '',\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n };\n this.input.emit(eventDetail);\n this.change.emit(eventDetail);\n this.clear.emit();\n this.inputField.focus();\n };\n\n onInputBlur = () => {\n this.hasFocus = false;\n setMessageHeight(this);\n if (this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputClick = () => {\n if (this.shouldCursorStayAtEnd) this.placeCursorAtEnd();\n };\n\n onInputFocus = () => {\n if (this.inputField.tagName === 'INPUT') {\n this.scheduledAfterRender.push(() => {\n if (this.isClickEvent && this.shouldCursorStartAtEnd) {\n this.placeCursorAtEnd();\n } else {\n this.setCursorPosition(this.calculateCursorPositionOnFocus());\n }\n this.isClickEvent = false;\n });\n }\n this.hasFocus = true;\n setMessageHeight(this);\n this.valueOnFocus = this.value;\n };\n\n onInputInput = (event: InputEvent) => {\n event.stopPropagation();\n if (this.type === 'currency') this.handleCurrencyDeletion(event);\n const newFormattedValue = this.getFormattedValue((event.target as HTMLInputElement).value, false);\n this.handleDataInput(newFormattedValue);\n this.validateInput();\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const keysThatMoveCursor = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n const { key } = event;\n\n if (this.type === 'currency') this.handleCurrencyKeydown(event);\n if (this.shouldCursorStayAtEnd && keysThatMoveCursor.includes(key)) event.preventDefault();\n if (key === 'Enter' && this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputMousedown = () => {\n this.isClickEvent = true;\n };\n\n onInputPaste = (event: ClipboardEvent) => {\n if (this.type === 'currency') {\n const clipboardData = event.clipboardData.getData('text');\n const newFormattedValue = this.getFormattedValue(clipboardData, true);\n event.preventDefault();\n this.handleDataInput(newFormattedValue);\n }\n };\n\n onMutationObserved = () => {\n // Updating checkSlotCount to force re-render when slot content changes\n this.checkSlotCount = this.checkSlotCount + 1;\n };\n\n onRefocusInput = () => {\n if (this.showMessages) {\n this.inputField.focus();\n setMessageHeight(this);\n }\n };\n\n onToggleVisibility = () => {\n this.hostElement.dispatchEvent(new FocusEvent('focus'));\n this.textHidden = !this.textHidden;\n };\n\n placeCursorAtEnd() {\n const { inputField } = this;\n inputField.selectionStart = inputField.selectionEnd = inputField.value.length;\n }\n\n setCursorPosition(cursorData: ICursorData) {\n if (this.canSetSelection && !cursorData.hasSelection) {\n const input = this.inputField;\n const { valueLength, previousValueLength, startingPosition } = cursorData;\n\n if (this.type === 'currency') {\n if (previousValueLength - valueLength === 1) {\n input.setSelectionRange(startingPosition - 1, startingPosition - 1);\n } else {\n const difference = previousValueLength - valueLength;\n input.setSelectionRange(startingPosition - difference, startingPosition - difference);\n }\n }\n\n if (this.type !== 'currency') {\n const difference = valueLength - previousValueLength;\n // Never allow the cursor to move in reverse\n const newPosition = startingPosition + (difference > 0 ? difference : 0);\n input.setSelectionRange(newPosition, newPosition);\n }\n }\n }\n\n validateInput = () => {\n this.validity = this.inputRef?.validity;\n if (this.validity?.valid === false) {\n this.invalid.emit();\n }\n return !!this.validity?.valid;\n };\n\n // #endregion\n // #region Render Methods\n\n renderCountDOM() {\n if (!this.showCount) return;\n const { maxlength, formattedValueObject } = this;\n\n return (\n <div class=\"count-tag\">\n {formattedValueObject.unformattedValue.length}\n {maxlength && `/${maxlength}`}\n </div>\n );\n }\n\n renderInputContainerDOM() {\n const { hasInputLeftSlot, hasInputRightSlot } = this;\n return (\n <div\n class=\"input-container\"\n tabindex={-1}\n test-id=\"inputContainer\"\n >\n <div class=\"input-icons-container-left\">\n {this.formattedValueObject.prefix && (\n <div class=\"input-prefix\">{this.formattedValueObject.prefix}</div>\n )}\n {this.computedIconLeft && (\n <div>\n <q2-icon\n type={this.computedIconLeft}\n class={this.computedClassForIconLeft}\n />\n </div>\n )}\n {hasInputLeftSlot && <slot name=\"input-left\" />}\n {this.showIconSeparator && <div class=\"vertical-separator\" />}\n {this.hasError && this.type === 'currency' && (\n <div\n test-id=\"divIconError\"\n onClick={this.onRefocusInput}\n >\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n </div>\n {this.pseudo ? this.renderPseudoInputDOM() : this.renderStandardInputDOM()}\n <div class=\"input-icons-container-right\">\n <q2-btn\n class={this.clearClasses.join(' ')}\n label={loc('tecton.element.input.clear', [this.label])}\n hideLabel={true}\n test-id=\"clearButton\"\n onClick={this.onClearInput}\n onKeyDown={e => e.stopPropagation()}\n >\n <q2-icon\n type=\"close\"\n class=\"icon-clear\"\n />\n </q2-btn>\n {['password', 'text', 'ssn', 'tin'].includes(this.type) && this.showVisibilityToggle && (\n <q2-btn\n class=\"btn-visibility-toggle\"\n test-id=\"toggleVisibilityButton\"\n onClick={this.onToggleVisibility}\n label={loc(this.visibilityToggleAriaLabel, { label: this.label })}\n hide-label={true}\n >\n {this.visibilityToggleText}\n </q2-btn>\n )}\n {this.formattedValueObject.suffix && (\n <span class=\"input-suffix\">{this.formattedValueObject.suffix}</span>\n )}\n {this.badgeValue && (\n <q2-badge\n size=\"large\"\n theme={this.badgeTheme}\n >\n {this.badgeValue}\n </q2-badge>\n )}\n {this.hasError && this.type !== 'currency' && (\n <div\n test-id=\"divIconError\"\n onClick={this.onRefocusInput}\n >\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n {this.iconRight && !this.formattedValueObject.suffix && (\n <div>\n <q2-icon\n type={this.iconRight}\n class=\"icon-right\"\n />\n </div>\n )}\n {hasInputRightSlot && <slot name=\"input-right\" />}\n </div>\n </div>\n );\n }\n\n renderPseudoInputDOM() {\n const showPlaceholder = !this.value && !!this.placeholder;\n const { ariaOwns, ariaHaspopup, ariaExpanded, ariaActivedescendant } = this.ariaAttributes;\n\n return (\n <div class=\"pseudo-input-container\">\n <button\n class=\"input-field\"\n type=\"button\"\n id={this.inputId}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-owns={ariaOwns}\n aria-haspopup={ariaHaspopup}\n aria-expanded={ariaExpanded}\n aria-activedescendant={ariaActivedescendant}\n role={(this.role && `${this.role}`) || 'textbox'}\n disabled={!!this.disabled}\n test-id=\"q2InputInnerClearButton\"\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n >\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\">\n <span class={showPlaceholder ? 'placeholder-text' : ''}>\n {showPlaceholder ? loc(this.placeholder) : loc(this.value)}\n </span>\n </slot>\n </div>\n </button>\n </div>\n );\n }\n\n renderStandardInputDOM() {\n const { hasCustomDisplaySlot } = this;\n const inputClasses = ['input-field'];\n const { ariaOwns, ariaHaspopup, ariaActivedescendant } = this.ariaAttributes;\n if (hasCustomDisplaySlot) inputClasses.push('sr');\n return (\n <Fragment>\n {hasCustomDisplaySlot && (\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\"></slot>\n </div>\n )}\n <input\n ref={el => (this.inputRef = el)}\n class={inputClasses.join(' ')}\n id={this.inputId}\n type={this.computedType}\n size={this.formattedValueObject.prefix ? 10 : undefined}\n maxlength={['date', 'currency'].includes(this.type) ? undefined : this.maxlength || undefined}\n max={this.max}\n min={this.min}\n step={this.step}\n aria-current={this.current || undefined}\n aria-describedby={this.inputDescribedBy}\n aria-required={`${!this.optional}`}\n aria-invalid={`${this.hasError}`}\n aria-owns={ariaOwns}\n aria-haspopup={ariaHaspopup}\n aria-activedescendant={ariaActivedescendant}\n autocomplete={this.computedAutocomplete}\n autocapitalize={this.autocapitalize}\n autocorrect={this.autocorrect === 'on' ? 'on' : 'off'}\n autofocus={this.autofocus}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n test-id=\"inputField\"\n readonly={this.readonly || this._preventEntry}\n disabled={!!this.disabled}\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n onClick={this.onInputClick}\n onKeyDown={this.onInputKeydown}\n onMouseDown={this.onInputMousedown}\n onInput={this.onInputInput}\n onPaste={this.onInputPaste}\n inputmode={this.inputMode}\n pattern={this.pattern || undefined}\n />\n </Fragment>\n );\n }\n\n render() {\n const { ariaControls, ariaExpanded } = this.ariaAttributes;\n return (\n <Host\n role={this._role}\n aria-controls={ariaControls}\n aria-expanded={ariaExpanded}\n >\n <div class={this.wrapperClasses}>\n <div class=\"label-wrapper\">\n {renderLabel(this)}\n {this.renderCountDOM()}\n </div>\n {this.renderInputContainerDOM()}\n {renderMessages(this)}\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/utility.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n:host([inline]),\n:host([modifiers*='inline']) {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host(:not([inline]):not([modifiers*='inline'])) {\n font-size: var-list(var-prefixer(loading-spinner-size), --app-scale-12x, 60px);\n}\n\n.q2-loading-animation {\n height: 1em;\n width: 1em;\n}\n\n@import './spinners/half-circle-spinner.scss';\n@import './skeleton/skeleton.scss';\n","import { Component, Prop, h, ComponentInterface, Element } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Own Properties\n\n ariaLiveTimer;\n dontUpdateScreenReaderLabel = false;\n observer: IntersectionObserver;\n screenReaderElement: HTMLElement;\n liveRegionChangeIndicatorToggle = false;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n * 2. `counts=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns.\n */\n @Prop({ reflect: true })\n counts: string;\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /**\n * The label that is associated with the component. This is not displayed visually but is presented by screen readers.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Visual adjustments available to specific type and shape combinations, written as a hyphen (`-`) separated string.\n *\n * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.\n */\n @Prop({ reflect: true })\n modifiers: string;\n\n /** Hides the loading element from screen readers. */\n @Prop({ reflect: true })\n hideFromScreenReaders: boolean = false;\n\n /**\n * The specific visual presentation of a loading element `type`.\n * @snippet\n * // when type=\"spinner\"\n * type ShapeValues = \"half-circle\";\n * // when type=\"skeleton\"\n * type ShapeValues = \"circle | \"rectangle\" | \"text\" | \"table\" | \"field\" | \"form\" | \"detailed-item\" | \"label-value\";\n */\n @Prop({ reflect: true })\n shape: string;\n\n /** The type of loading element to display. */\n @Prop({ reflect: true })\n type: 'spinner' | 'skeleton';\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback(): void {\n this.cleanupLiveRegionDelay();\n }\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n componentDidLoad(): void {\n this.setupLiveRegionDelay();\n }\n\n componentDidUpdate(): void {\n this.updateScreenReaderLabel();\n }\n\n // #endregion\n // #region Local Methods\n\n get countsArray(): number[] {\n if (this.type !== 'skeleton' || !this.counts) {\n return undefined;\n }\n\n return this.counts.split('x').map(Number);\n }\n\n get localizedLabel() {\n return loc(this.label || this.ariaLabel || 'tecton.element.loading.ariaLabel');\n }\n\n get modifiersSet(): Set<string> {\n if (this.type !== 'skeleton' || !this.modifiers) {\n return undefined;\n }\n\n return new Set(this.modifiers.split('-'));\n }\n\n get skeletonShape() {\n return skeletonShapes[this.shape]?.(this.countsArray, this.modifiersSet) ?? '';\n }\n\n cleanupLiveRegionDelay() {\n if (this.hideFromScreenReaders) return;\n\n clearTimeout(this.ariaLiveTimer);\n this.observer.disconnect();\n this.observer = null;\n }\n\n setupLiveRegionDelay() {\n if (this.hideFromScreenReaders) return;\n\n // The screen reader element starts out empty and is then populated by the\n // label text after a delay to ensure that it is announced by screen\n // readers.\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [1],\n };\n this.observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n clearTimeout(this.ariaLiveTimer);\n this.ariaLiveTimer = setTimeout(() => {\n this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;\n this.liveRegionChangeIndicatorToggle = !this.liveRegionChangeIndicatorToggle;\n this.dontUpdateScreenReaderLabel = false;\n }, 2000);\n } else {\n clearTimeout(this.ariaLiveTimer);\n this.screenReaderElement.textContent = '';\n this.dontUpdateScreenReaderLabel = true;\n }\n });\n }, options);\n this.observer.observe(this.hostElement);\n }\n\n updateScreenReaderLabel() {\n if (this.dontUpdateScreenReaderLabel) return;\n this.screenReaderElement.textContent = this.localizedLabel;\n }\n\n // #endregion\n // #region Render Methods\n\n renderHalfCircleSpinner = () => {\n return (\n <div\n class=\"q2-loading-animation half-circle-spinner\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n <div class=\"circle circle-1\"></div>\n <div class=\"circle circle-2\"></div>\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n get renderLoader() {\n const loaderMap = {\n default: this.renderSpinner,\n spinner: this.renderSpinner,\n skeleton: this.renderSkeletonLoader,\n };\n\n return loaderMap[this.type] || loaderMap.default;\n }\n\n renderSkeletonLoader = () => {\n return (\n <div\n class=\"q2-loading-skeleton\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n {this.shape === 'custom' ? <slot /> : this.skeletonShape}\n <div class=\"q2-loading-skeleton-shimmer\"></div>\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n renderSpinner = () => {\n return this.renderHalfCircleSpinner();\n };\n\n render() {\n return this.renderLoader();\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n position: relative;\n}\n\nbutton {\n cursor: pointer;\n margin: 0;\n}\n\n.tab-container {\n position: relative;\n}\n\nul {\n --comp-container-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px)\n var-list(--tct-scale-1, --app-scale-1x, 5px) 0};\n padding: var-list(var-prefixer(tab-container-padding), --comp-container-padding);\n margin: var-list(var-prefixer(tab-container-margin), 0);\n display: flex;\n gap: var-list(var-prefixer(tab-gap), --tct-scale-1, --app-scale-1x, 5px);\n list-style: none;\n border-bottom-width: var-list(--tct-tab-container-border-width, 1px);\n border-bottom-style: var-list(--tct-tab-container-border-style, solid);\n border-bottom-color: var-list(\n var-prefixer(tab-container-border-color),\n --tct-gray-11,\n --t-gray-11,\n --tct-gray-l1,\n --app-gray-l1,\n #cccccc\n );\n overflow-x: auto;\n align-items: center;\n @include hidden-scrollbar();\n\n @media print {\n &.no-print {\n display: none;\n }\n }\n}\n\nli {\n flex: 0 0 auto;\n\n button {\n background: var-list(--tct-tab-inactive-background, var-prefixer(tab-inactive-bg-color), transparent);\n border-width: var-list(var-prefixer(tab-inactive-border-width), unquote('0 0 3px 0'));\n border-color: var-list(var-prefixer(tab-inactive-border-color), transparent);\n border-style: var-list(var-prefixer(tab-inactive-border-style), solid);\n border-radius: var-list(var-prefixer(tab-border-radius), 0);\n width: var-list(var-prefixer(tab-width), 100%);\n text-align: var-list(var-prefixer(tab-text-align), center);\n text-decoration: var-list(var-prefixer(tab-text-decoration), none);\n padding: var-list(var-prefixer(tab-padding), --tct-scale-2, --app-scale-2x, 10px);\n color: var-list(var-prefixer(tab-inactive-color), inherit);\n font-size: var-list(var-prefixer(tab-font-size), 17px);\n display: block;\n transition:\n background var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n border-color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs);\n\n :host([type='section']) & {\n --comp-tab-section-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: var-list(--tct-tab-section-font-size, inherit);\n padding: var-list(var-prefixer(tab-section-padding), --comp-tab-section-padding);\n }\n\n &:hover {\n color: var-list(var-prefixer(tab-hover-color), var-prefixer(tab-active-color), #2e2e2e);\n background: var-list(--tct-tab-hover-background, var-prefixer(tab-hover-bg-color), inherit);\n width: var-list(var-prefixer(tab-hover-width), 100%);\n }\n\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-active-color), #2e2e2e);\n border-color: var-list(var-prefixer(tab-active-border-color), currentcolor);\n border-style: var-list(var-prefixer(tab-active-border-style), solid);\n width: var-list(var-prefixer(tab-active-width), 100%);\n background: var-list(--tct-tab-active-background, var-prefixer(tab-active-bg-color), inherit);\n }\n\n :host([color='alt']) & {\n color: var-list(var-prefixer(tab-alt-inactive-color), inherit);\n\n &:hover,\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-alt-active-color), inherit);\n }\n }\n\n @media screen and (max-width: 767px) {\n --comp-tab-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: inherit;\n padding: var-list(var-prefixer(tab-padding), --comp-tab-padding);\n }\n }\n}\n\n.tab-content {\n --comp-tab-content-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px) 0};\n padding: var-list(\n --tct-tab-container-content-padding,\n var-prefixer(tab-content-padding),\n --comp-tab-content-padding\n );\n background: var-list(--tct-tab-container-content-backgrond, none);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n}\n\n.gradient-left,\n.gradient-right {\n z-index: 1;\n position: absolute;\n top: 0;\n height: 100%;\n width: 44px;\n}\n\n.gradient-left {\n background-image: linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n left: 0;\n}\n\n.gradient-right {\n background-image: linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n right: 0;\n}\n\n.btn-left,\n.btn-right {\n --tct-icon-size: 18px;\n --tct-btn-icon-hover-background: transparent;\n --tct-btn-icon-width: 22px;\n --tct-icon-stroke-primary: #{var-list(var-prefixer(stepper-scroll-arrow-color), --t-text, #4d4d4d)};\n\n position: absolute;\n top: calc(50% - 22px);\n z-index: 2;\n q2-icon {\n --tct-icon-stroke-width: 3;\n }\n}\n\n.btn-left {\n left: 0;\n}\n\n.btn-right {\n right: 0;\n}\n\n.tab-pane-badge {\n display: flex;\n justify-content: space-between;\n align-items: center;\n q2-badge {\n margin-left: 5px;\n margin-right: 5px;\n }\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Listen,\n Watch,\n h,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, loc, overrideFocus, isEventFromElement } from 'src/utils';\nimport { JSX } from '../../components';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\ntype TabPane = {\n label: string;\n value: string;\n badgeCount: number;\n badgeDescription: string;\n badgeTheme: Q2Badge['theme'];\n badgeStatus: Q2Badge['status'];\n};\n\n@Component({ tag: 'q2-tab-container', shadow: true, styleUrl: 'q2-tab-container.scss' })\nexport class Q2TabContainer implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n hasValidTab: boolean = false;\n lastScrolled: number = new Date(null).getTime();\n listElement: HTMLUListElement;\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hasLeft: boolean = false;\n\n @State()\n hasRight: boolean = false;\n\n @State()\n scrollEnabled: boolean = false;\n\n @State()\n showScrollLeft: boolean = false;\n\n @State()\n showScrollRight: boolean = false;\n\n @State()\n tabs: TabPane[];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls which variables are used to color the tab controls.\n *\n * - `undefined` (default)\n * - Uses `--t-tab-active` and `--t-tab-inactive`.\n * - `alt`\n * - Uses `--t-tab-alt-active` and `--t-tab-alt-inactive`.\n * - The default fallback for these variables is `inherit`.\n */\n @Prop({ reflect: true })\n color: 'alt' | undefined;\n\n /**\n * Used to establish a relationship between `q2-tab-container` and its associated tab panes.\n * @warning\n * The element can fail if this property is not set. Nested tab containers without the `name` property will not render correctly.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Controls visibility of tab list in a print view. Tab content will still be visible even if `noPrint` is true. */\n @Prop({ reflect: true })\n noPrint: boolean = false;\n\n /** Determines the font size of the tab controls. */\n @Prop({ reflect: true })\n type: 'main' | 'section';\n\n /** Corresponds to the value of the selected tab pane. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event()\n settled: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(() => this.updateTabs());\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n this.resizeObserver = new ResizeObserver(() => this.checkScrollState());\n this.updateTabs();\n }\n\n componentDidLoad() {\n this.resizeObserver?.observe(this.listElement);\n this.checkScrollState();\n overrideFocus(this.hostElement);\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.settled.emit();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('badge')\n onBadge() {\n this.setTabs();\n }\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const index = this.tabs.findIndex(el => el.value === this.selectedTabValue);\n this.moveToTab(index, true);\n }\n\n @Listen('resize', { target: 'window' })\n onResize() {\n this.checkScrollState();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to select a tab pane corresponding with the value.\n *\n * @testOnly\n */\n @Method()\n async selectTab(value: string) {\n const paneButton = this.hostElement.shadowRoot.querySelector(`[test-id=\"tabLink\"][data-value=\"${value}\"]`);\n (paneButton as HTMLButtonElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('name')\n nameObserver() {\n this.updateTabs();\n }\n\n @Watch('value')\n valueObserver() {\n this.updateTabs();\n this.scheduledAfterRender.push(this.resizeIframe);\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index > -1) {\n this.scheduledAfterRender.push(() => this.moveToTab(index, false));\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get selectedTabValue() {\n return this.value || '';\n }\n\n get tabList() {\n return this.hostElement.shadowRoot.querySelector('.tab-list');\n }\n\n get tabPanes() {\n const tabPanes = this.hostElement.querySelectorAll<HTMLQ2TabPaneElement | HTMLTectonTabPaneElement>(\n 'q2-tab-pane, tecton-tab-pane'\n );\n\n if (tabPanes.length === 0) {\n return [];\n }\n\n return Array.from(tabPanes).filter(pane => pane.name === this.name);\n }\n\n checkScrollState = () => {\n if (!this.listElement) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n this.scrollEnabled = scrollWidth > clientWidth;\n this.showScrollLeft = scrollLeft > 0;\n this.showScrollRight = scrollWidth > Math.ceil(scrollLeft) + clientWidth;\n };\n\n determineTabMove() {\n if (!this.tabs) return;\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index === -1) return;\n this.moveToTab(index, false);\n }\n\n moveToAdjacentTab = (value: string, direction: 'next' | 'prev' | 'first' | 'last') => {\n const index = this.tabs.map(({ value }) => value).indexOf(value);\n\n let newIndex;\n switch (direction) {\n case 'next':\n newIndex = Math.min(index + 1, this.tabs.length - 1);\n break;\n\n case 'prev':\n newIndex = Math.max(index - 1, 0);\n break;\n\n case 'first':\n newIndex = 0;\n break;\n\n case 'last':\n newIndex = this.tabs.length - 1;\n break;\n }\n\n if (index === newIndex) return;\n\n this.moveToTab(newIndex, true);\n };\n\n moveToTab = (index: number, shouldFocus: boolean = true) => {\n const focusedValue = this.tabs[index].value;\n const focusedTab = this.listElement.querySelector<HTMLButtonElement>(`[data-value=\"${focusedValue}\"]`);\n if (shouldFocus) {\n focusedTab.focus({ preventScroll: true });\n }\n\n const left = focusedTab.offsetLeft - this.listElement.clientWidth / 2;\n this.listElement.scrollTo({\n left,\n behavior: 'smooth',\n });\n };\n\n onScrollBtnClick = (direction?: 'left' | 'right') => {\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n const halfWidth = Math.floor(clientWidth / 2);\n let scrollAmount: number = 0;\n if (direction === 'left') {\n scrollAmount = -Math.min(halfWidth, Math.abs(scrollLeft));\n } else {\n scrollAmount = Math.min(halfWidth, Math.abs(scrollWidth - scrollLeft - clientWidth));\n }\n this.listElement.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n onSlotChange = () => {\n this.checkScrollState();\n };\n\n onTabClick = (event: MouseEvent) => {\n const targetValue = ((event.target as HTMLButtonElement).closest('button[role=\"tab\"]') as HTMLButtonElement)\n .dataset.value;\n const isAlreadySelected = this.value === targetValue;\n if (isAlreadySelected) return;\n\n this.change.emit({\n value: targetValue,\n });\n };\n\n onTabKeyDown = (event: KeyboardEvent) => {\n const value = (event.target as HTMLElement).dataset.value;\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'next');\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'prev');\n break;\n\n case 'Home':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'first');\n break;\n\n case 'End':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'last');\n break;\n\n case 'Space':\n case 'Enter':\n event.preventDefault();\n this.change.emit({ value });\n break;\n }\n };\n\n resizeIframe() {\n return window.TectonElements?.resizeIframe?.();\n }\n\n setTabs = () => {\n this.tabs = this.tabPanes.map(({ label, value, badgeCount, badgeDescription, badgeTheme, badgeStatus }) => ({\n label: (label && loc(label)) || '',\n value,\n badgeCount,\n badgeDescription,\n badgeTheme,\n badgeStatus,\n }));\n };\n\n updateTabPaneProps = () => {\n this.tabPanes.forEach((tab, index) => {\n tab.selected = tab.value === this.selectedTabValue;\n tab.guid = this.guid;\n tab.index = index;\n });\n };\n\n updateTabs = () => {\n const validTabPreUpdate = this.hasValidTab;\n this.updateTabPaneProps();\n this.setTabs();\n // Check if we now have a valid tab\n this.hasValidTab = this.tabs.some(tab => tab.value === this.value);\n // Only move if we didn't have a valid tab before but do now\n if (!validTabPreUpdate && this.hasValidTab) {\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n };\n\n // #endregion\n // #region Render Methods\n\n renderTab(tab: TabPane, index: number): JSX.IntrinsicElements {\n const { label, value } = tab;\n const isSelected = this.selectedTabValue === value;\n return (\n <li role=\"presentation\">\n <button\n id={`tab-${this.guid}-${index}`}\n data-value={value}\n test-id=\"tabLink\"\n tabIndex={isSelected ? 0 : -1}\n role=\"tab\"\n aria-selected={`${isSelected}`}\n onClick={this.onTabClick}\n onKeyDown={this.onTabKeyDown}\n >\n {tab.badgeCount === undefined ? label : this.renderTabWithBadge(tab, isSelected)}\n </button>\n </li>\n );\n }\n\n renderTabWithBadge(tab: TabPane, isSelected: boolean): JSX.IntrinsicElements {\n let theme;\n if (!tab.badgeStatus && isSelected) theme = tab.badgeTheme || 'primary';\n let description;\n if (tab.badgeDescription) description = loc(tab.badgeDescription);\n else if (tab.badgeStatus) description = loc(`tecton.element.tab.pane.${tab.badgeStatus}`, [tab.badgeCount]);\n else description = loc('tecton.element.tab.pane.new');\n\n return (\n <div\n class=\"tab-pane-badge\"\n aria-label={`${tab.label}, ${tab.badgeCount} ${description}`}\n >\n {tab.label}\n <q2-badge\n value={tab.badgeCount}\n theme={theme}\n status={tab.badgeStatus}\n />\n </div>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div class=\"tab-container\">\n {this.scrollEnabled && (\n <Fragment>\n <div\n class=\"gradient-left\"\n hidden={!this.showScrollLeft}\n ></div>\n <div\n class=\"gradient-right\"\n hidden={!this.showScrollRight}\n ></div>\n\n <q2-btn\n class=\"btn-left\"\n hidden={!this.showScrollLeft}\n onClick={() => this.onScrollBtnClick('left')}\n >\n <q2-icon\n type=\"chevron-left\"\n label=\"scroll left\"\n ></q2-icon>\n </q2-btn>\n\n <q2-btn\n class=\"btn-right\"\n hidden={!this.showScrollRight}\n onClick={() => this.onScrollBtnClick('right')}\n >\n <q2-icon\n type=\"chevron-right\"\n label=\"scroll right\"\n ></q2-icon>\n </q2-btn>\n </Fragment>\n )}\n\n <ul\n onScroll={this.checkScrollState}\n ref={el => (this.listElement = el)}\n class={this.noPrint ? 'no-print' : null}\n role=\"tablist\"\n >\n {this.tabs.map((tab, index) => this.renderTab(tab, index))}\n </ul>\n </div>\n <div class=\"tab-content\">\n <slot onSlotchange={() => this.onSlotChange()} />\n </div>\n </Fragment>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["q2BadgeCss","Q2Badge","getTextContent","this","hasSlot","hostElement","textContent","trim","shadowRoot","badgeClasses","badgeClass","badgeText","push","size","join","maxLength","computedMaxLength","value","numValue","Math","abs","Number","loc","isNaN","substring","maxNumber","maxNumValue","pow","toLocaleString","min","innerHTML","renderEmptyBadge","h","class","renderStandardBadge","render","q2BtnCss","Q2Btn","constructor","hostRef","type","handleButtonSize","handleDeprecationWarning","handleIcons","icon","Array","from","querySelectorAll","reduce","acc","element","remove","hasIcon","hasLoc","querySelector","hasText","hasIconLeft","firstElementChild","hasIconRight","lastElementChild","hasIconOnly","iconPosition","handleSlotChange","componentWillLoad","handleAriaLabel","handleColor","componentDidLoad","overrideFocus","disconnectedCallback","primaryBtn","primaryBtnWrapper","handleClick","event","loading","disabled","stopImmediatePropagation","focus","delegateFocus","isEventFromElement","ariaLabelObserver","sizeObserver","buttonAttributes","ariaExpanded","getAriaValueFromProp","ariaHasPopup","ariaLabel","label","hideLabel","undefined","ariaSelected","ariaPressed","description","tabindex","tabIndex","buttonClasses","classes","intent","block","color","active","coinLabelClasses","renderButton","badge","renderLoadingSpinner","isLoadingSpinnerInline","Fragment","ref","el","role","_role","hidden","modifiers","renderDefaultLabel","renderDefaultCoinSlot","renderCoinLabel","id","name","onSlotchange","getOrCreateSpriteContainer","spriteContainerId","spriteContainer","document","createElement","style","display","body","appendChild","q2IconCss","Q2Icon","spritePrefix","handleIcon","componentDidRender","iconClone","_b","_a","spriteGroup","appendedClone","_c","_d","spriteUse","setAttribute","isCustom","setCustomSVGAttrs","fetchSprite","iconCloneViewBox","getAttribute","spriteElement","spriteId","spriteEventName","spriteFileName","iconMap","checkForSprite","getElementById","hasAttribute","cloneSpriteNode","addEventListener","once","spriteNode","cloneNode","spriteExists","spritePath","getAssetPath","response","fetch","data","text","wrappingDiv","svg","tagName","replaceWith","parentNode","replaceChild","dispatchEvent","CustomEvent","bubbles","innerSVG","title","labelId","createGuid","viewBox","xmlns","formatNumber","val","options","prefix","suffix","decimals","decimalSeparator","thousandsSeparator","allowDecimal","allowNegative","explicit","isNegative","parsedValue","replace","toFixed","integerString","decimalString","splitValue","negativeSymbol","formattedValue","fullyFormattedValue","formattingCharacterCount","length","maxlength","MAX_SAFE_INTEGER","toString","unformattedValue","splitIndex","padStart","formatValue","mask","generateMask","minFormattedLength","getMinimumFormattedLength","optionalValidatingChars","isOptionalValidatingChar","character","includes","knownValidatingChars","isKnownValidatingChar","getStaticFormattingChars","knownChars","formattingChars","RegExp","split","Set","isStaticFormattingChar","has","getValidatedChar","char","matcher","toUpperCase","maskArray","currentValueIndex","getNextNonFormattingCharIndex","validChar","currencyFormats","AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EEK","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SKK","SLL","SOS","SRD","STN","SVC","SYP","SZL","THB","TJS","TMM","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VEF","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWD","formatCurrency","currencyCode","processedCurrencyCode","currencyFormat","Object","assign","phoneNumberFormats","AF","AL","DZ","AD","AO","AI","AG","AR","AM","AQ","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BR","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CO","KM","CD","CG","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","TL","EC","EG","SV","GQ","EE","ET","FK","FO","FJ","FI","FR","GF","PF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GN","GW","GY","HK","HN","HT","HU","IS","IN","ID","IR","IQ","IE","IL","IT","JM","JP","JO","KZ","KE","KI","KR","KW","KG","LA","LV","LB","LS","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MU","MX","MD","MC","MN","MS","MA","MZ","MM","NA","NP","NL","AN","NC","NZ","NI","NE","NG","MP","NO","OM","PK","PW","PA","PG","PE","PH","PL","PT","PR","QA","RE","RO","RU","RW","SH","KN","LC","VC","ST","SA","SN","SC","SL","SG","SK","SI","SB","ZA","ES","LK","SD","SR","SZ","SE","CH","SY","TJ","TZ","TH","TG","TT","TN","TR","TM","TC","UG","UA","AE","GB","UY","UZ","VE","VN","VG","VI","YE","ZM","ZW","AC","ME","PS","RS","TW","CW","US","formatPhoneNumber","isoCode","formatSSN","formatTIN","formatAlphanumeric","formatAlpha","modifier","getNumberFormat","formatOptions","numberFormat","formatParts","match","formatNumeric","formatPercentage","postalCodeFormats","AS","CX","CC","GG","GS","IM","JE","XK","LR","YT","FM","NF","PY","PM","PN","WS","SM","SO","SJ","YU","WF","formatPostalCode","dateFormats","formatDate","format","formattedValueObject","detectedType","formatCreditCard","detectCreditCardTypeFromValue","creditCardFormatters","leftIcon","unknownFormatter","unknownFn","valueObject","leftIconMuted","amexFormatter","amexFn","discoverFormatter","discoverFn","masterCardFormatter","masterCardFn","visaFormatter","visaFn","dinersClubInternationalFormatter","dinersClub","discover","amex","masterCard","visa","unknown","firstInt","parseInt","charAt","secondInt","firstfour","substr","thirdInt","firstthree","firstsix","q2InputCss","inputTypeMap","tel","number","password","search","url","email","currency","phone","ssn","alphanumeric","alpha","numeric","percentage","postal","date","Q2Input","guid","isClickEvent","isMobile","scheduledAfterRender","checkSlotCount","isSmall","_preventEntry","showVisibilityToggle","handleCurrencyKeydown","key","inputElement","inputField","textSelectedForDeletion","selectionStart","selectionEnd","handleValueAndCursor","cursorPosition","calculateCursorPositionOnInput","input","emit","clear","setCursorPosition","initMutationObserver","window","observer","MutationObserver","onMutationObserved","observe","childList","mutationObserver","onClearInput","eventDetail","change","onInputBlur","hasFocus","setMessageHeight","valueOnFocus","onInputClick","shouldCursorStayAtEnd","placeCursorAtEnd","onInputFocus","shouldCursorStartAtEnd","calculateCursorPositionOnFocus","onInputInput","stopPropagation","handleCurrencyDeletion","newFormattedValue","getFormattedValue","target","handleDataInput","validateInput","onInputKeydown","keysThatMoveCursor","preventDefault","onInputMousedown","onInputPaste","clipboardData","getData","onRefocusInput","showMessages","onToggleVisibility","FocusEvent","textHidden","validity","inputRef","valid","invalid","manageClearableResizeObserver","disconnect","stringValue","defineProperty","get","clearable","pseudo","autofocus","forEach","fn","onHostElementChange","onchange","detail","onHostElementFocus","checkValidity","clearValue","setValue","InputEvent","isSmallThreshold","resizeObserver","ResizeObserver","entry","contentRect","width","unobserve","errorsObserver","formatModifierObserver","formatAndUpdateValueFromProp","formattedValueObjectObserver","formatted","hintsObserver","typeObserver","valueObserver","ariaAttributes","ariaActivedescendant","ariaControls","ariaHaspopup","ariaOwns","canSetSelection","computedType","clearClasses","computedAutocomplete","autocomplete","computedClassForIconLeft","className","computedIconLeft","iconLeft","hasCustomDisplaySlot","hasSlotContent","hasError","isArray","errors","hasInputLeftSlot","hasInputRightSlot","inputDescribedBy","inputId","inputMode","inputModeMap","tin","isMaskedType","maskedTypes","messages","hints","showIconSeparator","hideMessages","notCoercable","prototype","call","String","visibilityToggleAriaLabel","visibilityToggleText","wrapperClasses","classNames","iconRight","valueLength","startingPosition","previousValueLength","hasSelection","getSelection","formattedLength","currentValueLength","defaultPosition","valueChangedFromProperty","formattingFunctions","formatModifier","inputType","cursorMap","valueBeforeCursor","isPrevCharAlphaNum","test","leftIndex","rightIndex","afterCursorOffset","newCursorOffset","valueAfterCursor","isNextCharAlphaNum","newValue","charactersAfterCursor","newCursorPosition","max","setSelectionRange","nextPaint","cursorData","difference","newPosition","renderCountDOM","showCount","renderInputContainerDOM","onClick","renderPseudoInputDOM","renderStandardInputDOM","onKeyDown","e","badgeValue","theme","badgeTheme","showPlaceholder","placeholder","onFocus","onBlur","inputClasses","step","current","optional","autocapitalize","autocorrect","readonly","onMouseDown","onInput","onPaste","inputmode","pattern","Host","renderLabel","renderMessages","q2LoadingCss","Q2Loading","dontUpdateScreenReaderLabel","liveRegionChangeIndicatorToggle","customLoaderClass","hasCustomLoader","hideFromScreenReaders","renderHalfCircleSpinner","screenReaderElement","renderCustomLoaderContainer","renderSkeletonLoader","shape","skeletonShape","renderSpinner","cleanupLiveRegionDelay","handleType","setupLiveRegionDelay","componentDidUpdate","updateScreenReaderLabel","loaderClone","customLoaderContainer","onUpdateLoaders","customLoaderURL","fetchLoader","isSkeletonType","customLoaderElement","loaderExists","checkForLoader","ok","Error","status","svgText","parser","DOMParser","svgDoc","parseFromString","dataset","loaded","classList","add","loaderEventName","error","TypeError","message","console","hostComputedStyles","getComputedStyle","loadingVariableURL","getPropertyValue","countsArray","counts","map","localizedLabel","modifiersSet","skeletonShapes","cloneLoaderNode","clearTimeout","ariaLiveTimer","root","rootMargin","threshold","IntersectionObserver","entries","isIntersecting","setTimeout","renderLoader","loaderMap","default","spinner","skeleton","custom","loaderMapKey","q2TabContainerCss","Q2TabContainer","hasValidTab","lastScrolled","Date","getTime","hasLeft","hasRight","scrollEnabled","showScrollLeft","showScrollRight","noPrint","checkScrollState","listElement","scrollLeft","scrollWidth","clientWidth","ceil","moveToAdjacentTab","direction","index","tabs","indexOf","newIndex","moveToTab","shouldFocus","focusedValue","focusedTab","preventScroll","left","offsetLeft","scrollTo","behavior","onScrollBtnClick","halfWidth","floor","scrollAmount","scrollBy","onSlotChange","onTabClick","targetValue","closest","isAlreadySelected","onTabKeyDown","setTabs","tabPanes","badgeCount","badgeDescription","badgeStatus","updateTabPaneProps","tab","selected","selectedTabValue","updateTabs","validTabPreUpdate","some","determineTabMove","attributes","settled","onBadge","defaultChangeHandler","findIndex","onResize","selectTab","paneButton","click","nameObserver","resizeIframe","tabList","filter","pane","TectonElements","renderTab","isSelected","renderTabWithBadge","onScroll","q2TabPaneCss","Q2TabPane","badgeObserver"],"sources":["src/components/q2-badge/q2-badge.scss?tag=q2-badge&encapsulation=shadow","src/components/q2-badge/q2-badge.tsx","src/components/q2-btn/q2-btn.scss?tag=q2-btn&encapsulation=shadow","src/components/q2-btn/q2-btn.tsx","src/utils/sprites.ts","src/components/q2-icon/q2-icon.scss?tag=q2-icon&encapsulation=shadow","src/components/q2-icon/q2-icon.tsx","src/components/q2-input/formatting/number.ts","src/components/q2-input/formatting/generic.ts","src/components/q2-input/formatting/currency.ts","src/components/q2-input/formatting/phone.ts","src/components/q2-input/formatting/ssn.ts","src/components/q2-input/formatting/tin.ts","src/components/q2-input/formatting/alphanumeric.ts","src/components/q2-input/formatting/alpha.ts","src/components/q2-input/formatting/numeric.ts","src/components/q2-input/formatting/postal.ts","src/components/q2-input/formatting/date.ts","src/components/q2-input/formatting/credit-card.ts","src/components/q2-input/q2-input.scss?tag=q2-input&encapsulation=shadow","src/components/q2-input/q2-input.tsx","src/components/q2-loading/q2-loading.scss?tag=q2-loading&encapsulation=shadow","src/components/q2-loading/q2-loading.tsx","src/components/q2-tab-container/q2-tab-container.scss?tag=q2-tab-container&encapsulation=shadow","src/components/q2-tab-container/q2-tab-container.tsx","src/components/q2-tab-pane/q2-tab-pane.scss?tag=q2-tab-pane&encapsulation=shadow","src/components/q2-tab-pane/q2-tab-pane.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n line-height: 0;\n\n --comp-badge-font-size: var(--app-font-size-small, 12px);\n --comp-badge-large-font-size: var(--app-font-size-medium, 14px);\n --comp-badge-background: #{var-list(--tct-badge-background, --t-a11y-gray-color-AAA, #6c6c6c)};\n --comp-badge-color: #{var-list(--tct-badge-color, --t-base, #ffffff)};\n\n &:host([status='info']) {\n --comp-badge-background: #{var-list(--tct-badge-info-background, --const-stoplight-info, #0079c1)};\n --comp-badge-color: #{var-list(--tct-badge-info-color, --const-stoplight-info-text, #ffffff)};\n }\n\n &:host([status='alert']) {\n --comp-badge-background: #{var-list(--tct-badge-alert-background, --const-stoplight-alert, #d20a0a)};\n --comp-badge-color: #{var-list(--tct-badge-alert-color, --const-stoplight-alert-text, #ffffff)};\n }\n\n &:host([status='warning']) {\n --comp-badge-background: #{var-list(--tct-badge-warning-background, --const-stoplight-warning, #c35500)};\n --comp-badge-color: #{var-list(--tct-badge-warning-color, --const-stoplight-warning-text, #ffffff)};\n }\n\n &:host([status='success']) {\n --comp-badge-background: #{var-list(--tct-badge-success-background, --const-stoplight-success, #0e8a00)};\n --comp-badge-color: #{var-list(--tct-badge-success-color, --const-stoplight-success-text, #ffffff)};\n }\n\n &:host([theme='primary']) {\n --comp-badge-background: #{var-list(--tct-badge-primary-background, --t-primary, #6a4a9e)};\n --comp-badge-color: #{var-list(--tct-badge-primary-color, --t-primary-text, #ffffff)};\n }\n\n &:host([theme='secondary']) {\n --comp-badge-background: #{var-list(--tct-badge-secondary-background, --t-secondary, #b3c2cc)};\n --comp-badge-color: #{var-list(--tct-badge-secondary-color, --t-secondary-text, #141414)};\n }\n\n &:host([theme='tertiary']) {\n --comp-badge-background: #{var-list(--tct-badge-tertiary-background, --t-tertiary, #e8f5fc)};\n --comp-badge-color: #{var-list(--tct-badge-tertiary-color, --t-tertiary-text, #141414)};\n }\n}\n\n.badge-container {\n white-space: nowrap;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: var(--tct-badge-height, 16px);\n min-width: var(--tct-badge-min-width, 16px);\n text-align: center;\n padding: var(--tct-badge-padding, unquote('0 5px'));\n color: var(--comp-badge-color);\n background: var(--comp-badge-background);\n border-radius: var-list(var-prefixer(badge-border-radius), 8px);\n border: var(--tct-badge-border);\n backdrop-filter: var(--tct-badge-backdrop-filter);\n .badge-text {\n font-size: var(--comp-badge-font-size);\n line-height: var-list(--tct-badge-line-height, 14px);\n\n ::slotted(p) {\n margin: 0 !important;\n font-size: var(--comp-badge-font-size) !important;\n }\n }\n}\n\n.badge-container.size-large {\n height: var-list(--tct-badge-large-height, 22px);\n min-width: var-list(--tct-badge-large-min-width, 22px);\n border-radius: var-list(--tct-badge-large-border-radius, 11px);\n padding: var-list(--tct-badge-large-padding, unquote('0 6px'));\n\n .badge-text {\n font-size: var(--comp-badge-large-font-size);\n line-height: var-list(--tct-badge-large-line-height, 20px);\n\n ::slotted(p) {\n margin: 0 !important;\n font-size: var(--comp-badge-large-font-size) !important;\n }\n }\n}\n\n.empty-variant {\n min-width: unset;\n width: 16px;\n height: 16px;\n padding: 0;\n\n &.size-large {\n min-width: unset;\n width: 22px;\n height: 22px;\n padding: 0;\n }\n}\n","import { Component, Prop, h, ComponentInterface, Element, Method } from '@stencil/core';\nimport { loc } from 'src/utils';\n\n@Component({ tag: 'q2-badge', shadow: true, styleUrl: 'q2-badge.scss' })\nexport class Q2Badge implements ComponentInterface {\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region Public Property API\n\n /** The number of characters to show. A maximum limit of 18 characters is acceptable. */\n @Prop({ reflect: true })\n maxLength: number | undefined;\n\n /** The size of the badge. */\n @Prop({ reflect: true })\n size: 'default' | 'large' | undefined;\n\n /** The stoplight color of the element when `theme` is not present. */\n @Prop({ reflect: true })\n status: 'info' | 'alert' | 'warning' | 'success' | undefined;\n\n /**\n * The color of the badge when in the active state.\n * The `theme` has higher priority than `status`.\n */\n @Prop({ reflect: true })\n theme: 'primary' | 'secondary' | 'tertiary' | undefined;\n\n /**\n * What to display in the badge. Negative numbers will be shown as positive.\n * @info\n * `q2-badge` also has limited support for slotted HTML elements.\n * @localizable\n */\n @Prop({ reflect: true })\n value: number | string;\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Returns the text content of the badge. This accounts for the text in slotted elements or the Shadow DOM.\n * @testonly\n */\n @Method()\n async getTextContent(): Promise<string> {\n if (this.hasSlot) {\n return this.hostElement.textContent.trim();\n } else {\n return this.hostElement.shadowRoot.textContent.trim();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get badgeClasses(): string {\n const badgeClass = ['badge-container'];\n if (!this.badgeText && !this.hasSlot) badgeClass.push('empty-variant');\n if (this.size === 'large') badgeClass.push('size-large');\n return badgeClass.join(' ');\n }\n\n get badgeText(): string {\n const { maxLength, computedMaxLength } = this;\n let value = this.value;\n let numValue = Math.abs(Number(value));\n if (!value) return '';\n\n if (typeof value === 'string') {\n value = loc(value);\n numValue = Math.abs(Number(value));\n }\n\n if (typeof value === 'string' && isNaN(numValue)) {\n return value.substring(0, computedMaxLength);\n }\n\n const maxNumber = maxLength ? computedMaxLength : 2;\n const maxNumValue = Math.pow(10, maxNumber) - 1;\n if (numValue > maxNumValue) {\n return maxNumValue.toLocaleString() + '+';\n } else {\n return numValue.toLocaleString();\n }\n }\n\n get computedMaxLength(): number {\n return Math.min(18, this.maxLength || 18);\n }\n\n get hasSlot(): boolean {\n return !!this.hostElement.innerHTML.trim();\n }\n\n // #endregion\n // #region Render Methods\n\n renderEmptyBadge() {\n return <div class={this.badgeClasses}></div>;\n }\n\n renderStandardBadge() {\n return (\n <div class={this.badgeClasses}>\n <small class=\"badge-text\">{this.hasSlot ? <slot></slot> : this.badgeText}</small>\n </div>\n );\n }\n\n render() {\n return !this.badgeText && !this.hasSlot ? this.renderEmptyBadge() : this.renderStandardBadge();\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n@import './q2-btn-mixins';\n\nq2-loading {\n --tct-loading-primary-color: currentcolor;\n --tct-loading-secondary-color: currentcolor;\n --tct-loading-spinner-size: 24px;\n}\n\n.slot-container {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var-list(--app-scale-1x, 5px);\n pointer-events: none;\n\n :host([loading]) .icon-right & {\n flex-direction: row-reverse;\n }\n}\n\n:host([loading]) ::slotted(q2-icon) {\n display: none;\n}\n:host([loading]:not([loading='false'])) button {\n pointer-events: none;\n}\n\n:host([block]) button,\n:host([block]) button.icon-only {\n display: block;\n width: 100%;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host([block]) {\n display: block;\n width: 100%;\n}\n\n::slotted(q2-icon) {\n pointer-events: none;\n margin-block: -100px;\n}\n\n:host {\n --comp-font-weight: 600;\n --comp-border-radius: #{var-list(--tct-btn-border-radius, --app-border-radius-1, 4px)};\n --comp-btn-tween: #{var-list(var-prefixer(btn-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'))};\n --comp-btn-fallback-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);\n --comp-background-alternative: #ebf8ff;\n\n .btn-height-wrapper {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--app-scale-1x, 5px);\n &:active {\n box-shadow: none;\n }\n }\n}\n\nbutton {\n margin: var-list(--tct-scale-0, --app-scale-0x, 0);\n padding: var-list(--tct-scale-0, --app-scale-0x, 0);\n display: inline-block;\n width: 100%;\n hyphens: auto;\n border: var(--tct-btn-border);\n background: transparent;\n box-shadow: none;\n border-radius: 0;\n font-weight: 400;\n color: inherit;\n cursor: pointer;\n transition: var(--comp-btn-tween);\n transition-property: background, color, box-shadow, fill, border-color, border-width;\n outline: 0;\n\n &:disabled {\n opacity: var-list(var-prefixer(btn-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n cursor: not-allowed;\n }\n\n &.has-color,\n &.has-intent {\n font-size: var-list(var-prefixer(btn-font-size), inherit);\n border-radius: var-list(--tct-btn-border-radius, --comp-border-radius);\n text-transform: var(--tct-btn-text-transform);\n letter-spacing: var(--tct-btn-letter-spacing, inherit);\n }\n\n &.has-color:not(.has-size),\n &.has-intent:not(.has-size) {\n padding: var-list(var-prefixer(btn-padding), --tct-scale-2, --app-scale-2x, 10px);\n }\n\n &:not(.has-size) {\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size, 18px);\n }\n }\n }\n\n // #region Size\n\n :host([size='1']) & {\n padding: var-list(--tct-scale-1, --app-scale-1x, 5px);\n }\n :host([size='2']) & {\n padding: var-list(--tct-scale-2, --app-scale-2x, 10px);\n }\n :host([size='3']) & {\n padding: var-list(--tct-scale-3, --app-scale-3x, 15px);\n }\n :host([size='4x']) & {\n padding: var-list(--tct-scale-4x, --app-scale-4x, 20px);\n }\n :host([size='4']) & {\n padding: var-list(--tct-scale-6x, --app-scale-6x, 30px);\n }\n\n :host([size='small']) & {\n padding: var-list(var-prefixer(btn-padding-size-small), '4px 16px');\n font-size: var-list(var-prefixer(btn-font-size-small), 14px);\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size-small, 16px);\n }\n }\n }\n\n :host([size='medium']) & {\n padding: var-list(var-prefixer(btn-padding-size-medium), '12px 24px');\n font-size: var-list(var-prefixer(btn-font-size-medium), 16px);\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size-medium, unset);\n }\n }\n }\n\n :host([size='large']) & {\n padding: var-list(var-prefixer(btn-padding-size-large), '16px 32px');\n font-size: var-list(var-prefixer(btn-font-size-large), 20px);\n &:not(.icon-only) {\n ::slotted(q2-icon) {\n --tct-icon-size: var(--tct-btn-icon-size-large, unset);\n }\n }\n }\n\n // #endregion\n // #region Intent\n\n :host([color='primary']) &,\n :host([intent='workflow-primary']) & {\n backdrop-filter: var(--tct-btn-primary-backdrop-filter);\n --comp-background: #{var-list(\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-hover-background: #{var-list(--tct-btn-primary-hover-background, --tct-btn-primary-hover-bg)};\n --comp-font-color: #{var-list(--tct-btn-primary-font-color, --app-white, #ffffff)};\n --comp-box-shadow: #{var-list(--tct-btn-primary-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-primary-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // different background for active\n --comp-active-background: var(--tct-btn-primary-active-background, #0063a0);\n @include btn-ring(primary, hover, --comp-background, --comp-font-color, null);\n @include btn-ring(primary, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(primary, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(primary, focus-visible, --const-focus-color, --comp-font-color, null);\n @include btn-intent(primary);\n @include btn-icon-color(primary, --comp-font-color);\n }\n\n :host([color='secondary']) &,\n :host([intent='workflow-secondary']) & {\n backdrop-filter: var(--tct-btn-secondary-backdrop-filter);\n --comp-background: #{var-list(\n --tct-btn-secondary-background,\n --tct-btn-secondary-bg,\n --t-button-default-bg,\n #cccccc\n )};\n --comp-hover-background: #{var-list(\n --tct-btn-secondary-hover-background,\n --tct-btn-secondary-hover-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-hover-font-color: var(--app-white, #ffffff);\n --comp-box-shadow: #{var-list(--tct-btn-secondary-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-secondary-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n @include btn-ring(secondary, hover, --comp-hover-background, --app-white, null);\n @include btn-ring(secondary, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(secondary, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(secondary, focus-visible, --const-focus-color, --app-white, null);\n @include btn-intent(secondary);\n @include btn-icon-color(secondary, --comp-font-color);\n }\n\n :host([intent='workflow-destroy']) & {\n backdrop-filter: var(--tct-btn-destroy-backdrop-filter);\n --comp-background: #{var-list(--tct-btn-destroy-background, --const-stoplight-alert, #d20a0a)};\n --comp-font-color: #{var-list(--tct-btn-destroy-font-color, --app-white)};\n --comp-box-shadow: #{var-list(--tct-btn-destroy-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-destroy-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n @include btn-ring(destroy, hover, --comp-background, --comp-font-color, null);\n @include btn-ring(destroy, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(destroy, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(destroy, focus-visible, --const-focus-color, --comp-font-color, null);\n @include btn-intent(destroy);\n @include btn-icon-color(destroy, --comp-font-color);\n }\n\n :host([intent='workflow-escape']) & {\n backdrop-filter: var(--tct-btn-escape-backdrop-filter);\n --comp-background: #{var-list(--tct-btn-escape-background, --app-white, #ffffff)};\n --comp-font-color: #{var-list(\n --tct-btn-escape-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: #{var-list(--tct-btn-escape-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-hover-box-shadow: #{var-list(--tct-btn-escape-hover-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-escape-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // different background for hover/active/focus\n --comp-hover-background: #{var-list(--tct-btn-escape-hover-background, --comp-background-alternative)};\n --comp-active-background: #{var-list(--tct-btn-escape-active-background, --comp-background-alternative)};\n --comp-focus-background: #{var-list(--tct-btn-escape-focus-background, --comp-background-alternative)};\n @include btn-ring(escape, hover, --comp-font-color, --comp-background, null);\n @include btn-ring(escape, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(escape, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(escape, focus-visible, --const-focus-color, --comp-background, null);\n @include btn-intent(escape);\n @include btn-icon-color(escape, --comp-font-color);\n }\n\n :host([intent='neutral']) & {\n backdrop-filter: var(--tct-btn-neutral-backdrop-filter);\n --comp-background: #{var-list(--tct-btn-neutral-background, --app-white, #ffffff)};\n --comp-font-color: #{var-list(\n --tct-btn-neutral-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: #{var-list(--tct-btn-neutral-box-shadow, --comp-btn-fallback-box-shadow)};\n --comp-focus-box-shadow: #{var-list(--tct-btn-neutral-focus-box-shadow, --comp-btn-fallback-box-shadow)};\n // use outline instead border: because on/off border makes the button shaking on hover/focus/active\n --comp-border-width: 1px;\n --comp-border-style: solid;\n --comp-border-color: var(--comp-font-color);\n @include btn-ring(neutral, hover, --comp-font-color, --app-white, null);\n @include btn-ring(neutral, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral, focus-visible, --const-focus-color, --comp-background, null);\n @include btn-intent(neutral);\n @include btn-icon-color(neutral, --comp-font-color);\n }\n\n :host([intent='neutral-text']) & {\n backdrop-filter: var(--tct-btn-neutral-text-backdrop-filter);\n --comp-background: #{var-list(\n --tct-btn-neutral-text-background,\n --tct-btn-neutral-text-bg,\n --app-white,\n #ffffff\n )};\n --comp-font-color: #{var-list(\n --tct-btn-neutral-text-font-color,\n --tct-btn-primary-background,\n --tct-btn-primary-bg,\n --t-a11y-active-gray-color-AA,\n #404040\n )};\n --comp-box-shadow: var(--tct-btn-neutral-text-box-shadow);\n --comp-hover-text-decoration: underline;\n // different background for focus\n --comp-focus-background: #{var-list(--tct-btn-neutral-text-focus-background, --comp-background-alternative)};\n @include btn-ring(neutral-text, hover, --comp-font-color, --comp-background, null);\n @include btn-ring(neutral-text, active, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral-text, disabled, transparent, transparent, --comp-box-shadow);\n @include btn-ring(neutral-text, focus-visible, --const-focus-color, --app-white, null);\n @include btn-intent(neutral-text);\n @include btn-icon-color(neutral-text, --comp-font-color);\n }\n\n // #endregion\n // #region Icon Only\n\n &.icon-only {\n width: var-list(var-prefixer(btn-icon-width), 44px);\n height: var-list(var-prefixer(btn-icon-height), 44px);\n border-radius: var-list(var-prefixer(btn-icon-border-radius), --tct-btn-border-radius, 0);\n padding: var(--tct-btn-icon-padding, 0px);\n\n ::slotted(q2-icon) {\n --tct-icon-size: unset;\n }\n\n &.has-size {\n padding: var(--tct-btn-icon-padding, 0px);\n }\n\n &.has-intent {\n padding: var(--tct-btn-icon-padding, 10px);\n border-radius: var-list(--tct-btn-icon-border-radius, --comp-border-radius);\n }\n }\n\n &:not(.has-color):not(.has-intent),\n &.icon-only {\n &:hover,\n &:focus {\n background: var-list(\n --tct-btn-icon-hover-background,\n var-prefixer(btn-icon-hover-bg),\n var-prefixer(gray-13),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n }\n }\n\n &:not(.has-intent).is-active.icon-only {\n background-color: var-list(\n --tct-btn-icon-active-background,\n var-prefixer(btn-icon-active-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n }\n\n &:not(.has-intent).icon-only:hover *,\n &:not(.has-intent).icon-only:focus *,\n &:not(.has-intent).is-active.icon-only * {\n color: var-list(var-prefixer(btn-icon-hover-color), var-prefixer(link-hover-color), #080808);\n }\n\n // #endregion\n // #region Plain\n\n &:not(.has-intent):not(.icon-only) {\n height: var-list(--tct-btn-height, auto);\n padding-inline: var-list(--tct-btn-padding-inline, 0);\n font-weight: var-list(--tct-btn-font-weight);\n border-radius: var-list(--tct-btn-border-radius, 0);\n\n &:hover,\n &:focus {\n background: var(--tct-btn-hover-background);\n }\n }\n\n // #endregion\n // #region Badges (Deprecated)\n\n :host([badge]) & {\n padding: var-list(var-prefixer(btn-badge-padding), unquote('2px 5px'));\n font-size: var-list(var-prefixer(btn-badge-font-size), var-prefixer(btn-font-size), inherit);\n border-radius: var-list(\n var-prefixer(btn-badge-border-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n );\n background-color: var-list(--tct-btn-badge-background, var-prefixer(btn-badge-bg), transparent);\n color: var-list(var-prefixer(btn-badge-font-color), inherit);\n\n ::slotted(q2-icon) {\n --tct-icon-size: 1em;\n }\n }\n\n :host([badge]:hover) &:enabled {\n background-color: var-list(\n --tct-btn-badge-hover-background,\n var-prefixer(btn-badge-hover-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n color: var-list(\n var-prefixer(btn-badge-hover-font-color),\n var-prefixer(gray-5),\n --tct-gray-d2,\n --app-gray-d2,\n #404040\n );\n }\n\n :host(.selected[badge]) &,\n :host([active][badge]) & {\n background-color: var-list(\n --tct-btn-badge-active-background,\n var-prefixer(btn-badge-active-bg),\n --comp-btn-primary-background\n );\n color: var-list(var-prefixer(btn-badge-active-font-color), --comp-btn-primary-font-color);\n }\n\n // #endregion\n // #region Intent Coin\n\n &.intent-coin {\n --tct-avatar-background: #{var-list(--tct-btn-coin-background, --t-primary-l5, #b4a0d3)};\n --tct-avatar-height: #{var-list(--tct-btn-coin-height, 44px)};\n --tct-avatar-width: #{var-list(--tct-btn-coin-width, 44px)};\n --tct-avatar-fallback-background: #{var-list(--tct-btn-coin-background, --t-primary-l5, #b4a0d3)};\n --tct-icon-stroke-primary: #{var-list(--tct-btn-coin-icon-stroke-primary, --t-text, #4d4d4d)};\n --tct-avatar-text-color: #{var-list(--tct-btn-coin-avatar-text-color, --t-text, #4d4d4d)};\n --tct-icon-stroke-width: #{var-list(--tct-btn-coin-icon-stroke-width, 1px)};\n --tct-btn-padding: 0;\n --tct-btn-border-radius: 50%;\n --tct-avatar-border: #{var-list(--tct-btn-coin-border, 0)};\n width: auto;\n backdrop-filter: var(--tct-btn-coin-backdrop-filter);\n box-shadow: var(--tct-btn-coin-box-shadow);\n }\n\n &.intent-coin:hover:not([disabled]) {\n --const-double-focus-ring: 0 0 0 2px #ffffff,\n 0 0 0 4px #{var-list(--tct-btn-coin-focus-ring, --t-primary, #6a4a9e)};\n --tct-avatar-background: #{var-list(--tct-btn-coin-background, --t-primary-l3, #957ac1)};\n --tct-avatar-fallback-background: #{var-list(--tct-btn-coin-background, --t-primary-l3, #957ac1)};\n --tct-icon-stroke-primary: #{var-list(--tct-btn-coin-icon-stroke-primary, --t-base, #ffffff)};\n --tct-avatar-text-color: #{var-list(--tct-btn-coin-avatar-text-color, --t-base, #ffffff)};\n box-shadow: var-list(--tct-btn-coin-hover-box-shadow, --tct-btn-coin-box-shadow, --const-double-focus-ring);\n }\n\n &.intent-coin:focus:not([disabled]) {\n --const-double-focus-ring: 0;\n box-shadow: var-list(--tct-btn-coin-focus-box-shadow, --tct-btn-coin-box-shadow, 0);\n }\n\n &.intent-coin:focus-visible:not([disabled]) {\n --const-double-focus-ring: 0 0 0 2px #ffffff,\n 0 0 0 4px #{var-list(--tct-btn-coin-focus-ring, --t-primary, #6a4a9e)};\n box-shadow: var-list(\n --tct-btn-coin-focus-visible-box-shadow,\n --tct-btn-coin-focus-box-shadow,\n --tct-btn-coin-box-shadow,\n --const-double-focus-ring\n );\n }\n\n &.intent-coin:active:not([disabled]) {\n box-shadow: none;\n }\n}\n\n.coin-label {\n color: var-list(--tct-btn-coin-label-color, --t-text, #4d4d4d);\n font-size: var-list(--tct-btn-coin-label-font-size, --app-font-size, 14px);\n max-width: 100px;\n text-align: center;\n @include line-clamp(2);\n}\n\n.coin-label.disabled {\n color: var-list(--tct-btn-coin-label-disabled-color, --t-textA, #767676);\n max-width: 100px;\n}\n\n.coin-wrapper {\n --tct-avatar-display: block;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var-list(--app-scale-1x, 5px);\n flex-direction: column;\n width: var(--tct-btn-coin-container-width, 95px);\n\n // only q2-avatar and coin-label slots are allowed for coin buttons\n ::slotted(:not(q2-avatar, [slot='coin-label'])) {\n display: none;\n }\n\n .coin-label {\n color: var-list(--tct-btn-coin-label-color, --t-text, #4d4d4d);\n font-size: var-list(--tct-btn-coin-label-font-size, --app-font-size, 14px);\n margin-top: var-list(--tct-btn-coin-gap, --app-scale-2x, 10px);\n max-width: 100px;\n text-align: center;\n\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .coin-label.disabled {\n color: var-list(--tct-btn-coin-label-disabled-color, --t-textA, #767676);\n max-width: 100px;\n }\n}\n// #endregion\n","import { Component, State, Prop, h, ComponentInterface, Watch, Listen, Element, Fragment } from '@stencil/core';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n handleColor,\n isEventFromElement,\n loc,\n overrideFocus,\n handleDeprecationWarning,\n} from 'src/utils';\n\n/** @slot coin-label - An optional slot to display a custom coin button label. */\n@Component({ tag: 'q2-btn', shadow: true, styleUrl: 'q2-btn.scss' })\nexport class Q2Btn implements ComponentInterface {\n // #region Own Properties\n\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n iconPosition: 'left' | 'right' | 'only';\n\n // #endregion\n // #region Public Property API\n\n /**\n * @private\n * Role attribute for better semantic accessibility support\n */\n @Prop({ reflect: true })\n _role: string;\n\n /**\n * Displays the component in an active state.\n *\n * @info\n * Only intended for use with the `badge` property.\n * @deprecated\n */\n @Prop({ reflect: true })\n active: boolean;\n\n @Prop()\n ariaControls: string;\n\n @Prop()\n ariaExpanded: string;\n\n @Prop()\n ariaHasPopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaPressed: string;\n\n @Prop()\n ariaSelected: string;\n\n /**\n * Displays the component in a smaller, badge style.\n * @deprecated\n */\n @Prop({ reflect: true })\n badge: boolean;\n\n /** The component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n color: string; // deprecated but need it to use utils/handleColor\n\n @Prop()\n description: string;\n\n /** Marks the component as disabled and displays a `not-allowed` cursor on hover. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n fab: boolean;\n\n /**\n * Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Indicates the role of the component in the workflow, which will apply appropriate styling to the component.\n */\n @Prop({ reflect: true, mutable: true })\n intent:\n | 'coin'\n | 'neutral-text'\n | 'neutral'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary';\n\n /**\n * Defines the text content of the button if it is not provided in the `<slot>` of the element.\n * Also used for the `aria-label` of the `<button>` element when only displaying an icon.\n *\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** Displays the button with a loading spinner to indicate something is happening in the background and the user should not click again. */\n @Prop({ reflect: true })\n loading: boolean;\n\n /**\n * Defines the size of q2-btn, it renders as default size if not provided.\n */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n @Prop()\n tabIndex: number;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true })\n type: string = 'button';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcons();\n handleAriaLabel(this);\n handleColor(this);\n }\n\n componentDidLoad(): void {\n this.handleButtonSize();\n overrideFocus(this.hostElement);\n }\n\n disconnectedCallback(): void {\n this.primaryBtn = null;\n this.primaryBtnWrapper = null;\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click', { capture: true })\n handleClick(event: Event) {\n if (this.loading || this.disabled) {\n event.stopImmediatePropagation();\n }\n this.primaryBtn.focus();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('size')\n sizeObserver() {\n this.handleButtonSize();\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonAttributes() {\n return {\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHasPopup: getAriaValueFromProp(this.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaLabel: this.label && this.hideLabel ? loc(this.label) : undefined,\n ariaSelected: getAriaValueFromProp(this.ariaSelected, ['true', 'false']),\n ariaPressed: getAriaValueFromProp(this.ariaPressed, ['true', 'false']),\n description: this.description !== undefined ? this.description : undefined,\n disabled: this.disabled || false,\n type: this.type,\n tabindex: this.tabIndex || undefined,\n };\n }\n\n get buttonClasses() {\n const classes = [];\n if (this.iconPosition) classes.push(`icon-${this.iconPosition}`);\n if (this.intent === 'coin') classes.push('intent-coin');\n if (!!this.block) classes.push('is-block');\n if (!!this.color) classes.push('has-color');\n if (!!this.intent) classes.push(`has-intent`);\n if (!!this.size) classes.push('has-size');\n if (!!this.active) classes.push('is-active');\n\n return classes.join(' ');\n }\n\n get coinLabelClasses() {\n const classes = ['coin-label'];\n if (this.disabled) {\n classes.push('disabled');\n }\n\n return classes.join(' ');\n }\n\n handleButtonSize = () => {\n if (Number(this.size) <= 4) {\n handleDeprecationWarning(this, 'size', 'prop');\n }\n };\n\n handleIcons = () => {\n // Only allow one icon in the button\n const icon = Array.from(this.hostElement.querySelectorAll(':scope > q2-icon')).reduce((acc, element) => {\n if (acc) element.remove();\n else acc = element;\n return acc;\n }, null);\n\n const hasIcon = !!icon;\n const hasLoc = !!this.hostElement.querySelector('q2-loc');\n const hasText = !!this.hostElement.textContent.trim();\n const hasIconLeft = (hasLoc || hasText) && hasIcon && this.hostElement.firstElementChild === icon;\n const hasIconRight = (hasLoc || hasText) && hasIcon && this.hostElement.lastElementChild === icon;\n const hasIconOnly = !hasIconLeft && !hasIconRight && hasIcon;\n\n let iconPosition;\n if (hasIconOnly) iconPosition = 'only';\n else if (hasIconLeft) iconPosition = 'left';\n else if (hasIconRight) iconPosition = 'right';\n this.iconPosition = iconPosition;\n };\n\n handleSlotChange = () => {\n this.handleIcons();\n };\n\n // #endregion\n // #region Render Methods\n\n renderButton() {\n const { ariaExpanded, ariaHasPopup, ariaSelected, ariaPressed, description, disabled, type, tabindex } =\n this.buttonAttributes;\n const { iconPosition, loading, badge, label, hideLabel } = this;\n const renderLoadingSpinner = iconPosition || loading;\n const isLoadingSpinnerInline = !iconPosition || badge;\n return (\n <Fragment>\n <button\n ref={el => (this.primaryBtn = el ?? this.primaryBtn)}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={hideLabel && loc(label)}\n aria-selected={ariaSelected}\n aria-pressed={ariaPressed}\n disabled={disabled}\n type={type}\n tabindex={tabindex}\n test-id=\"q2BtnInnerButton\"\n class={this.buttonClasses}\n aria-describedby={!!description ? 'hidden-description' : undefined}\n aria-labelledby={this.intent === 'coin' && !hideLabel ? 'coin-label' : undefined}\n role={this._role || undefined}\n >\n <div class=\"slot-container\">\n {renderLoadingSpinner && (\n <q2-loading\n hidden={!loading}\n modifiers={isLoadingSpinnerInline ? 'inline' : undefined}\n />\n )}\n {this.renderDefaultLabel()}\n {this.renderDefaultCoinSlot()}\n </div>\n </button>\n {this.renderCoinLabel()}\n {!!description && (\n <div\n id=\"hidden-description\"\n aria-hidden=\"true\"\n class=\"sr\"\n >\n {description}\n </div>\n )}\n </Fragment>\n );\n }\n\n renderCoinLabel() {\n if (this.intent !== 'coin' || this.hideLabel) return;\n return (\n <div\n id=\"coin-label\"\n class={this.coinLabelClasses}\n >\n {this.label ? (\n loc(this.label)\n ) : (\n <slot\n name=\"coin-label\"\n onSlotchange={this.handleSlotChange}\n />\n )}\n </div>\n );\n }\n\n renderDefaultCoinSlot() {\n if (this.intent !== 'coin') return;\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n renderDefaultLabel() {\n if (this.intent === 'coin') return;\n if (!this.hideLabel && this.label) return loc(this.label);\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n render() {\n return (this.size === 'small' && this.iconPosition !== 'only') || this.intent === 'coin' ? (\n // wrap only for small sized and coin intent\n <div\n class={this.size === 'small' ? 'btn-height-wrapper' : 'coin-wrapper'}\n ref={el => (this.primaryBtnWrapper = el ?? this.primaryBtnWrapper)}\n tabIndex={this.size === 'small' ? -1 : undefined}\n >\n {this.renderButton()}\n </div>\n ) : (\n this.renderButton()\n );\n }\n\n // #endregion\n}\n","/**\n * Checks for the sprite container element in the global DOM\n * If it does not exist, it creates and appends it to the body, and returns it\n */\nexport function getOrCreateSpriteContainer() {\n const spriteContainerId = 'tecton-sprites';\n let spriteContainer: HTMLDivElement = document.querySelector(`#${spriteContainerId}`);\n\n if (spriteContainer) return spriteContainer;\n spriteContainer = document.createElement('div');\n spriteContainer.id = spriteContainerId;\n spriteContainer.style.display = 'none';\n document.body.appendChild(spriteContainer);\n return spriteContainer;\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: inline-block;\n height: var(--tct-icon-size, 24px);\n width: var(--tct-icon-size, 24px);\n position: relative;\n fill: none;\n}\n\n:host([inline]) {\n height: 1em;\n width: 1em;\n}\n\nsvg {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n stroke-width: var-list(--tct-icon-stroke-width, --t-icon-stroke-width, --tct-icon-group-stroke-width, 2);\n stroke-linecap: var-list(--tct-icon-cap, --t-icon-cap, round);\n stroke-linejoin: var-list(--tct-icon-cap, --t-icon-cap, round);\n transition: var(--tct-icon-transition, none);\n\n &.brand {\n stroke-width: var-list(--tct-icon-group-brand-stroke-width, 1);\n }\n\n &.browsersos {\n stroke-width: var-list(--tct-icon-group-browsersos-stroke-width, 1);\n }\n}\n\n.stroke-primary {\n stroke: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n.stroke-secondary {\n stroke: var-list(--tct-icon-stroke-secondary, --t-icon-stroke-secondary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-secondary-transition, none);\n}\n\n.fill-primary {\n fill: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n.fill-secondary {\n fill: var-list(--tct-icon-stroke-secondary, --t-icon-stroke-secondary, --t-text, currentcolor);\n transition: var(--tct-icon-stroke-secondary-transition, none);\n}\n\n.filled {\n fill: var-list(--tct-icon-fill, --comp-icon-fill, --t-icon-fill, none);\n transition: var(--tct-icon-fill-transition, none);\n}\n\n.brand-filled {\n fill: var-list(--tct-brand-icon-fill, --tct-icon-fill, currentColor);\n transition: var(--tct-icon-fill-transition, none);\n}\n\n.uniform {\n fill: var-list(--tct-icon-stroke-primary, --t-icon-stroke-primary, currentcolor);\n transition: var(--tct-icon-stroke-primary-transition, none);\n}\n\n:host([type='info']),\n:host([type='info-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-info, --const-stoplight-info, #0079c1)};\n}\n\n:host([type='success']),\n:host([type='success-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-success, --const-stoplight-success, #0e8a00)};\n}\n\n:host([type='warning']),\n:host([type='warning-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-warning, --const-stoplight-warning, #c35500)};\n}\n\n:host([type='error']),\n:host([type='error-filled']) {\n --tct-icon-stroke-primary: transparent;\n --comp-status-color: #{var-list(--tct-stoplight-alert, --const-stoplight-alert, #d20a0a)};\n}\n","import { Component, ComponentInterface, Prop, h, Element, Watch, getAssetPath, State } from '@stencil/core';\nimport { createGuid } from 'src/utils';\nimport { getOrCreateSpriteContainer } from '@/utils/sprites';\nimport iconMap from './assets/icon-map.json';\n\n@Component({ tag: 'q2-icon', shadow: true, styleUrl: 'q2-icon.scss', assetsDirs: ['assets'] })\nexport class Q2Icon implements ComponentInterface {\n // #region Own Properties\n\n spriteGroup: SVGElement;\n spritePrefix: string = 'tecton-sprite-';\n spriteUse: SVGElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n iconClone: SVGSymbolElement;\n\n // #endregion\n // #region Public Property API\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /** The text that is presented by screen-readers when they encounter the icon. */\n @Prop({ reflect: true })\n label: string;\n\n /** The name of the icon to be displayed. */\n @Prop({ reflect: true })\n type: string;\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcon();\n }\n\n componentDidRender(): void {\n if (!this.iconClone) return;\n this.spriteGroup?.firstElementChild?.remove();\n const appendedClone = this.spriteGroup?.appendChild(this.iconClone);\n\n // We have to set the `href` attribute after the symbol is appended to the DOM to avoid a bug in Safari\n this.spriteUse?.setAttribute('href', `#${appendedClone.id}`);\n }\n\n disconnectedCallback(): void {\n this.spriteGroup = null;\n this.spriteUse = null;\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('type')\n handleIcon() {\n if (this.isCustom) {\n this.setCustomSVGAttrs();\n } else if (this.type) {\n this.fetchSprite();\n } else {\n this.iconClone = null;\n this.spriteGroup?.firstElementChild?.remove();\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get iconCloneViewBox() {\n return this.iconClone?.getAttribute('viewBox') ?? '0 0 24 24';\n }\n\n get isCustom() {\n return this.type === 'custom';\n }\n\n get spriteElement() {\n const { spriteId } = this;\n if (!spriteId) return;\n return document.querySelector<HTMLElement>(`#${spriteId}`);\n }\n\n get spriteEventName() {\n const { spriteFileName } = this;\n if (!spriteFileName) return;\n return `tct-loaded-${spriteFileName}`;\n }\n\n get spriteFileName() {\n if (this.isCustom) return;\n return iconMap[this.type];\n }\n\n get spriteId() {\n const { spriteFileName } = this;\n if (!spriteFileName) return;\n return `${this.spritePrefix}${spriteFileName}`;\n }\n\n checkForSprite() {\n const { spriteId, spriteEventName } = this;\n const spriteContainer = getOrCreateSpriteContainer();\n let spriteElement: HTMLElement = document.getElementById(spriteId);\n\n // If the sprite element exists and has the `data-loaded` attribute, we know we have everything we need\n if (spriteElement?.hasAttribute('data-loaded') ?? false) {\n this.cloneSpriteNode();\n return true;\n }\n\n // If the sprite element exists but does not have the `data-loaded` attribute, we know it's being loaded\n // We'll listen for the event that will be dispatched when the sprite is loaded\n spriteContainer.addEventListener(\n spriteEventName,\n () => {\n this.cloneSpriteNode();\n },\n { once: true }\n );\n\n // If the sprite element exists, we know it's being loaded and will be handled by the event listener\n if (spriteElement) return true;\n\n // If sprite element does not exist, create a placeholder\n // This will let other icons know the sprite is being loaded\n spriteElement = document.createElement('div');\n spriteElement.id = spriteId;\n spriteContainer.appendChild(spriteElement);\n return false;\n }\n\n cloneSpriteNode() {\n const spriteNode = document.getElementById(`tct-${this.type}`);\n this.iconClone = spriteNode ? (spriteNode.cloneNode(true) as SVGSymbolElement) : undefined;\n }\n\n async fetchSprite() {\n const { spriteFileName, spriteId, spriteEventName } = this;\n\n const spriteExists = this.checkForSprite();\n if (spriteExists) return;\n\n if (!spriteFileName) return;\n const spritePath = getAssetPath(`assets/${spriteFileName}.symbol.svg`);\n const response = await fetch(spritePath);\n const data = await response.text();\n const wrappingDiv = document.createElement('div');\n wrappingDiv.innerHTML = data;\n const svg = wrappingDiv.querySelector('svg');\n\n svg.id = spriteId;\n svg.setAttribute('data-loaded', '');\n\n let { spriteElement } = this;\n if (spriteElement?.tagName === 'SVG') return;\n\n if (typeof spriteElement.replaceWith === 'function') {\n spriteElement.replaceWith(svg);\n } else {\n spriteElement.parentNode.replaceChild(svg, spriteElement);\n }\n\n spriteElement = document.getElementById(spriteId);\n spriteElement.dispatchEvent(new CustomEvent(spriteEventName, { bubbles: true }));\n }\n\n setCustomSVGAttrs() {\n const innerSVG = this.hostElement.querySelector('svg');\n\n if (!innerSVG) return;\n\n innerSVG.setAttribute('role', 'img');\n innerSVG.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n const { label } = this;\n if (label) {\n const title = document.createElement('title');\n const labelId = `label-${createGuid()}`;\n title.id = labelId;\n title.textContent = label;\n innerSVG.appendChild(title);\n innerSVG.setAttribute('aria-labelledby', labelId);\n } else {\n innerSVG.setAttribute('aria-hidden', 'true');\n }\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n const { label, type } = this;\n return this.isCustom ? (\n <slot />\n ) : (\n <svg\n aria-hidden={!!label ? undefined : 'true'}\n role={!!label ? 'img' : undefined}\n aria-labelledby={!!label ? 'label' : undefined}\n viewBox={this.iconCloneViewBox}\n xmlns=\"http://www.w3.org/2000/svg\"\n class={this.spriteFileName}\n >\n {!!label && <title id=\"label\">{label}</title>}\n {!!type && <use ref={el => (this.spriteUse = el)} />}\n <g ref={el => (this.spriteGroup = el)}></g>\n </svg>\n );\n }\n\n // #endregion\n}\n","import { IFormatterValueObject, INumberInputFormatOptions } from '../q2-input-types';\n\nexport default function formatNumber(\n val: string = '',\n options: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n },\n explicit: boolean = false\n): IFormatterValueObject {\n const isNegative = val[0] === '-';\n\n let value = val;\n\n const allowDecimal = !!options.allowDecimal && !!options.decimals;\n\n if (explicit) {\n const parsedValue = value.replace(/[^\\d.]/g, '');\n value = (parsedValue && Number(parsedValue).toFixed(allowDecimal ? options.decimals : 0)) || '';\n }\n\n value = value.replace(/[^\\d]/g, '');\n\n let { integerString, decimalString } = splitValue(value, allowDecimal, options.decimals);\n\n // define decimalString\n let decimalSeparator = options.decimalSeparator;\n if (!allowDecimal) {\n decimalSeparator = '';\n decimalString = '';\n }\n\n // define negative\n const negativeSymbol = options.allowNegative && isNegative ? '-' : '';\n\n value = `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}`;\n\n // format integerString\n integerString = integerString.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousandsSeparator);\n\n const formattedValue: string =\n negativeSymbol || integerString ? `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}` : '';\n\n const fullyFormattedValue: string =\n negativeSymbol || integerString\n ? `${negativeSymbol}${options.prefix}${integerString}${decimalSeparator}${decimalString}${options.suffix}`\n : '';\n\n let formattingCharacterCount = formattedValue.length - value.length;\n\n if (decimalSeparator) {\n formattingCharacterCount = formattingCharacterCount + options.decimalSeparator.length;\n }\n\n const prefix = options.prefix || options.suffix;\n const maxlength = Number.MAX_SAFE_INTEGER.toString().length + formattingCharacterCount + decimalString.length;\n\n const unformattedValue = `${integerString.replace(/[^0-9]/g, '')}${decimalString}`.replace(/^0+/, '');\n\n return {\n value,\n formattedValue,\n fullyFormattedValue,\n prefix,\n suffix: '',\n formattingCharacterCount,\n maxlength,\n unformattedValue,\n };\n}\n\nfunction splitValue(\n value: string,\n allowDecimal: boolean = false,\n decimals: number\n): { integerString: string; decimalString: string } {\n if (!allowDecimal) {\n return {\n integerString: value,\n decimalString: '',\n };\n }\n\n const splitIndex = value.length - decimals;\n\n let integerString = value.substring(0, splitIndex).padStart(1, '0');\n if (integerString.length > 1 && integerString[0] === '0') {\n integerString = integerString.substring(1);\n }\n\n const decimalString = value.substring(splitIndex).padStart(decimals, '0');\n\n return {\n integerString,\n decimalString,\n };\n}\n","import { IFormatterValueObject } from '../q2-input-types';\n\nexport default function formatValue(\n value: string = '',\n mask: string = '',\n options?: {\n prefix?: string;\n suffix?: string;\n }\n): IFormatterValueObject {\n const prefix = (options && options.prefix) || '';\n const suffix = (options && options.suffix) || '';\n\n if (!value || !mask) {\n const fullyFormattedValue = `${prefix}${value}${suffix}`;\n return {\n value,\n formattedValue: value,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n const { unformattedValue, formattedValue, formattingCharacterCount } = generateMask(value, mask);\n\n const fullyFormattedValue = `${prefix}${formattedValue}${suffix}`;\n const maxlength = mask.length;\n const minFormattedLength = getMinimumFormattedLength(mask, prefix, suffix);\n\n return {\n value: unformattedValue,\n formattedValue,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount,\n maxlength,\n minFormattedLength,\n unformattedValue,\n };\n}\n\nconst optionalValidatingChars = ['?'];\nfunction isOptionalValidatingChar(character: string): boolean {\n return optionalValidatingChars.includes(character);\n}\n\nconst knownValidatingChars = ['#', '@', '*', ...optionalValidatingChars];\nfunction isKnownValidatingChar(character: string): boolean {\n return knownValidatingChars.includes(character);\n}\n\nfunction getStaticFormattingChars(mask: string): Set<string> {\n const knownChars = knownValidatingChars.join('|');\n const formattingChars = mask.replace(new RegExp(`[${knownChars}]`, 'g'), '').split('');\n return new Set(formattingChars);\n}\n\nfunction isStaticFormattingChar(character: string, formattingChars: Set<string>): boolean {\n return formattingChars.has(character);\n}\n\nfunction getValidatedChar(char: string, matcher: string) {\n switch (matcher) {\n case '#':\n char = char.replace(/[^\\d]/g, '');\n break;\n case '@':\n char = char.toUpperCase().replace(/[^A-Z]+/g, ''); // allows only upper case\n break;\n case '*':\n char = char.toUpperCase().replace(/[^\\dA-Z]+/g, '');\n break;\n case '?':\n char = char.replace(/[^\\d]/g, '');\n break;\n default:\n return char;\n }\n return char;\n}\n\nfunction generateMask(value: string, mask: string) {\n const maskArray = mask.split('');\n const formattingChars = getStaticFormattingChars(mask);\n let currentValueIndex: number = 0;\n let formattingCharacterCount: number = 0;\n let unformattedValue: string = '';\n\n const formattedValue = maskArray.reduce((acc: string, character: string) => {\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n if (isOptionalValidatingChar(character) && isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n return acc;\n }\n\n if (isKnownValidatingChar(character)) {\n // Step value index if formatting character pushed out of place by user input\n currentValueIndex = getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n const validChar = getValidatedChar(value[currentValueIndex], character);\n acc += validChar;\n unformattedValue += validChar;\n currentValueIndex++;\n } else {\n // Static formatting characters added directly to formatted string\n acc += character;\n formattingCharacterCount++;\n\n if (character === value[currentValueIndex]) {\n // Continue to walk value if next value at this index matches formatting character\n currentValueIndex++;\n }\n }\n\n return acc;\n }, '');\n\n return {\n unformattedValue,\n formattedValue,\n formattingCharacterCount,\n };\n}\n\nfunction getNextNonFormattingCharIndex(value: string, currentValueIndex: number, formattingChars: Set<string>): number {\n if (isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n currentValueIndex++;\n return getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n }\n\n return currentValueIndex;\n}\n\nfunction getMinimumFormattedLength(mask: string, prefix: string, suffix: string): number {\n return (\n mask.replace(new RegExp(`[${optionalValidatingChars.join('|')}]`, 'g'), '').length +\n prefix.length +\n suffix.length\n );\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { IFormatterValueObject, INumberInputFormatOptions } from '../q2-input-types';\n\n// decimal data source: http://www.iso.org/iso/home/standards/currency_codes.htm 09/Nov/2016\nexport const currencyFormats = {\n AED: {\n prefix: '',\n suffix: 'د.إ',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.إ'\n AFN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ALL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n AMD: {\n prefix: 'դր.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'դր.9,999.99'\n ANG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AOA: {\n prefix: 'Kz',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kz9,999.99'\n ARS: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AUD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AWG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AZN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BAM: {\n prefix: 'КМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'КМ9,999.99'\n BBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BDT: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BGN: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BHD: {\n prefix: '',\n suffix: 'ب.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ب.د'\n BIF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n BMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BND: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BOB: {\n prefix: 'Bs.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs.9,999.99'\n BRL: {\n prefix: 'R$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R$9,999.99'\n BSD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BTN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BWP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n BYN: {\n prefix: 'Br',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Br9,999'\n BZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CDF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CHF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CLF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 4,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9.999.9999'\n CLP: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CNY: {\n prefix: '¥',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999.99'\n COP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CRC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n CUC: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CUP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CVE: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CZK: {\n prefix: 'Kč',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kč9,999.99'\n DJF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n DKK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n DOP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n DZD: {\n prefix: '',\n suffix: 'د.ج',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ج'\n EEK: {\n prefix: 'KR',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'KR9,999.99'\n EGP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n ERN: {\n prefix: 'Nfk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Nfk9,999.99'\n ETB: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n EUR: {\n prefix: '€',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '€9,999.99'\n FJD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n FKP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GBP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GEL: {\n prefix: 'ლ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ლ9,999.99'\n GHS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n GIP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GMD: {\n prefix: 'D',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'D9,999.99'\n GNF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n GTQ: {\n prefix: 'Q',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Q9,999.99'\n GYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n HKD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.9'\n HNL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n HRK: {\n prefix: 'kn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kn9,999.99'\n HTG: {\n prefix: 'G',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'G9,999.99'\n HUF: {\n prefix: 'Ft',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ft9,999.99'\n IDR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n ILS: {\n prefix: '₪',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₪9,999.99'\n INR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n IQD: {\n prefix: '',\n suffix: 'ع.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ع.د'\n IRR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ISK: {\n prefix: 'kr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999'\n JMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n JOD: {\n prefix: '',\n suffix: 'د.ا',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ا'\n JPY: {\n prefix: '¥',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999'\n KES: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n KGS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KHR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KMF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n KPW: {\n prefix: '₩',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KRW: {\n prefix: '₩',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KWD: {\n prefix: 'د.ك',\n suffix: '',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ك'\n KYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n KZT: {\n prefix: '〒',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '〒9,999.99'\n LAK: {\n prefix: '₭',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₭9,999.99'\n LBP: {\n prefix: '',\n suffix: 'ل.ل',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ل.ل9,999.99'\n LKR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n LRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n LSL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n LTL: {\n prefix: 'Lt',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Lt9,999.99'\n LVL: {\n prefix: 'Ls',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ls9,999.99'\n LYD: {\n prefix: '',\n suffix: 'ل.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ل.د'\n MAD: {\n prefix: '',\n suffix: 'د.م.',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.م.'\n MDL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n MGA: {\n prefix: '¤',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.9'\n MKD: {\n prefix: 'ден',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ден9,999.99'\n MMK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n MNT: {\n prefix: '₮',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₮9,999.99'\n MOP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n MRU: {\n prefix: 'UM',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'UM9,999.9'\n MUR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n MVR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n MWK: {\n prefix: 'MK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MK9,999.99'\n MXN: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n MYR: {\n prefix: 'RM',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'RM9,999.99'\n MZN: {\n prefix: 'MTn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MTn9,999.99'\n NAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n NGN: {\n prefix: '₦',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₦9,999.99'\n NIO: {\n prefix: 'C$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'C$9,999.99'\n NOK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n NPR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n NZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n OMR: {\n prefix: '',\n suffix: 'ر.ع.',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ر.ع.'\n PAB: {\n prefix: 'B/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'B/.9,999.99'\n PEN: {\n prefix: 'S/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'S/.9,999.99'\n PGK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n PHP: {\n prefix: 'p',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'p9,999.99'\n PKR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n PLN: {\n prefix: 'zł',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'zł9,999.99'\n PYG: {\n prefix: '¤',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999'\n QAR: {\n prefix: '',\n suffix: 'ر.ق',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.ق'\n RON: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n RSD: {\n prefix: 'дин.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'дин.9,999.99'\n RUB: {\n prefix: 'руб.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'руб.9,999.99'\n RWF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n SAR: {\n prefix: '',\n suffix: 'ر.س',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.س'\n SBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SCR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n SDG: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SEK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n SGD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SHP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SKK: {\n prefix: 'Sk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sk9,999.99'\n SLL: {\n prefix: 'Le',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Le9,999.99'\n SOS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n SRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n STN: {\n prefix: 'Db',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Db9,999.99'\n SVC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n SYP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SZL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n THB: {\n prefix: '฿',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '฿9,999.99'\n TJS: {\n prefix: 'ЅМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ЅМ9,999.99'\n TMM: {\n prefix: 'm',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'm9,999.99'\n TND: {\n prefix: '',\n suffix: 'د.ت',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ت'\n TOP: {\n prefix: 'T$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T$9,999.99'\n TRY: {\n prefix: 'YTL',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'YTL9,999.99'\n TTD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TZS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n UAH: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n UGX: {\n prefix: 'Sh',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999'\n USD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n UYU: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n UZS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n VEF: {\n prefix: 'Bs F',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs F9,999.99'\n VND: {\n prefix: '₫',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₫9,999'\n VUV: {\n prefix: 'Vt',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Vt9,999'\n WST: {\n prefix: 'T',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T9,999.99'\n XAF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XCD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n XOF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XPF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n YER: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ZAR: {\n prefix: 'R',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R9,999.99'\n ZMW: {\n prefix: 'ZK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ZK9,999.99'\n ZWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n};\n\nexport default function formatCurrency(\n value: string,\n currencyCode: string = 'USD',\n explicit: boolean = false\n): IFormatterValueObject {\n let processedCurrencyCode = currencyCode || '';\n let allowDecimal = true;\n\n if (processedCurrencyCode.includes('-integer')) {\n processedCurrencyCode = processedCurrencyCode.split('-integer')[0];\n allowDecimal = false;\n }\n\n const currencyFormat = currencyFormats[processedCurrencyCode];\n\n if (!currencyFormat) {\n return formatValue(value);\n }\n\n const options: INumberInputFormatOptions = {\n ...currencyFormat,\n allowDecimal: allowDecimal && currencyFormat.decimals > 0,\n allowNegative: false,\n };\n\n return formatNumber(value, options, explicit);\n}\n","import { IFormatterValueObject } from '../q2-input-types';\nimport formatValue from './generic';\n\nexport const phoneNumberFormats = {\n AF: {\n mask: '(##) #######',\n prefix: '+93 ',\n },\n AL: {\n mask: '#######',\n prefix: '+355 ',\n },\n DZ: {\n mask: '(##) ###-###',\n prefix: '+213 ',\n },\n // AS\n AD: {\n mask: '(#) #####',\n prefix: '+376 ',\n },\n AO: {\n mask: '#########',\n prefix: '+244 ',\n },\n AI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AR: {\n mask: '##########',\n prefix: '+54 ',\n },\n AM: {\n mask: '########',\n prefix: '+375 ',\n },\n AQ: {\n mask: '##-####',\n prefix: '+672 ',\n },\n AW: {\n mask: '###-####',\n prefix: '+297 ',\n },\n AU: {\n mask: '(##) ####-####',\n prefix: '+61 ',\n },\n /* AT: {\n mask:'####?????????',\n prefix: ''\n }, */\n AT: {\n mask: '#############',\n prefix: '+43 ',\n },\n /* AZ: {\n mask:'########?',\n prefix: ''\n }, */\n AZ: {\n mask: '#########',\n prefix: '+994 ',\n },\n BS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BH: {\n mask: '####-####',\n prefix: '+973 ',\n },\n /* BD: {\n mask:'#######??',\n prefix: ''\n }, */\n BD: {\n mask: '#########',\n prefix: '+880 ',\n },\n BB: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BY: {\n mask: '#########',\n prefix: '+375 ',\n },\n BE: {\n mask: '########??',\n prefix: '+32 ',\n },\n BZ: {\n mask: '#######',\n prefix: '+501 ',\n },\n BJ: {\n mask: '(##) ###-###',\n prefix: '+229 ',\n },\n BM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BT: {\n mask: '(#) ###-###',\n prefix: '+975 ',\n },\n BO: {\n mask: '(#) ###-####',\n prefix: '+591 ',\n },\n BA: {\n mask: '(##) ##-##-##',\n prefix: '+387 ',\n },\n /* BW: {\n mask:'#######?',\n prefix: ''\n }, */\n BW: {\n mask: '########',\n prefix: '+267 ',\n },\n BR: {\n mask: '(##) ####-####',\n prefix: '+55 ',\n },\n BN: {\n mask: '###-####',\n prefix: '+673 ',\n },\n BG: {\n mask: '#######?',\n prefix: '+359 ',\n },\n BF: {\n mask: '##-##-##-##',\n prefix: '+226 ',\n },\n BI: {\n mask: '####-####',\n prefix: '+257 ',\n },\n KH: {\n mask: '(##) ######',\n prefix: '+855 ',\n },\n CM: {\n mask: '####-####',\n prefix: '+237 ',\n },\n CA: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CV: {\n mask: '###-####',\n prefix: '+238 ',\n },\n KY: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CF: {\n mask: '###-###',\n prefix: '+236 ',\n },\n TD: {\n mask: '###-##-##',\n prefix: '+235 ',\n },\n /* CL: {\n mask:'########?',\n prefix: ''\n }, */\n CL: {\n mask: '#########',\n prefix: '+56 ',\n },\n /* CN: {\n mask:'########???',\n prefix: ''\n }, */\n CN: {\n mask: '###########',\n prefix: '+86 ',\n },\n /* CO: {\n mask:'########??',\n prefix: ''\n }, */\n CO: {\n mask: '##########',\n prefix: '57 ',\n },\n KM: {\n mask: '###-####',\n prefix: '+269 ',\n },\n CD: {\n mask: '###-####',\n prefix: '+243 ',\n },\n CG: {\n mask: '###-####',\n prefix: '+242 ',\n },\n // CK\n CR: {\n mask: '####-####',\n prefix: '+506 ',\n },\n CI: {\n mask: '####-####',\n prefix: '+225 ',\n },\n HR: {\n mask: '########?',\n prefix: '+385 ',\n },\n /* CU: {\n mask:'#####?ID:?????',\n prefix: ''\n }, */\n CU: {\n mask: '###########',\n prefix: '+53 ',\n },\n CY: {\n mask: '####-####',\n prefix: '+357 ',\n },\n CZ: {\n mask: '#########',\n prefix: '+420 ',\n },\n DK: {\n mask: '####-####',\n prefix: '+45 ',\n },\n DJ: {\n mask: '##-##-##-##',\n prefix: '+253 ',\n },\n DM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n DO: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TL: {\n mask: '###-####',\n prefix: '+670 ',\n },\n EC: {\n mask: '(##) ###-####',\n prefix: '+593 ',\n },\n /* EG: {\n mask:'########??',\n prefix: ''\n }, */\n EG: {\n mask: '##########',\n prefix: '+20 ',\n },\n SV: {\n mask: '####-####',\n prefix: '+503 ',\n },\n GQ: {\n mask: '##-####',\n prefix: '+240 ',\n },\n // ER:\n EE: {\n mask: '#######?',\n prefix: '+372 ',\n },\n ET: {\n mask: '(##) ###-####',\n prefix: '+251 ',\n },\n FK: {\n mask: '#####',\n prefix: '+500 ',\n },\n FO: {\n mask: '######',\n prefix: '+298 ',\n },\n FJ: {\n mask: '###-####',\n prefix: '+679 ',\n },\n /* FI: {\n mask:'#####???????',\n prefix: ''\n }, */\n FI: {\n mask: '############',\n prefix: '+358 ',\n },\n FR: {\n mask: '#########',\n prefix: '+33 ',\n },\n /* GF: {\n mask:'#########?',\n prefix: ''\n }, */\n GF: {\n mask: '##########',\n prefix: '+594 ',\n },\n PF: {\n mask: '######',\n prefix: '+689 ',\n },\n GA: {\n mask: '######?',\n prefix: '+241 ',\n },\n GM: {\n mask: '###-####',\n prefix: '+220 ',\n },\n GE: {\n mask: '########?',\n prefix: '+995 ',\n },\n /* DE: {\n mask:'######?????',\n prefix: ''\n }, */\n DE: {\n mask: '###########',\n prefix: '+49 ',\n },\n /* GH: {\n mask:'########?',\n prefix: ''\n }, */\n GH: {\n mask: '#########',\n prefix: '+233 ',\n },\n GI: {\n mask: '####-####',\n prefix: '+350 ',\n },\n GR: {\n mask: '##########',\n prefix: '+30 ',\n },\n GL: {\n mask: '###-###',\n prefix: '+299 ',\n },\n GD: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GP: {\n mask: '##########',\n prefix: '+590 ',\n },\n GU: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GT: {\n mask: '####-####',\n prefix: '+502 ',\n },\n GN: {\n mask: '####-####',\n prefix: '+224 ',\n },\n GW: {\n mask: '###-####',\n prefix: '+245 ',\n },\n GY: {\n mask: '(###) ####',\n prefix: '+592 ',\n },\n HK: {\n mask: '####-####',\n prefix: '+852 ',\n },\n HN: {\n mask: '########',\n prefix: '+504 ',\n },\n HT: {\n mask: '####-####',\n prefix: '+509 ',\n },\n HU: {\n mask: '########??',\n prefix: '+36 ',\n },\n /* IS: {\n mask:'#######??',\n prefix: ''\n }, */\n IS: {\n mask: '#########',\n prefix: '+354 ',\n },\n IN: {\n mask: '##########',\n prefix: '+91 ',\n },\n /* ID: {\n mask:'#######???',\n prefix: ''\n }, */\n ID: {\n mask: '#######??????', // allows 7 ~ 13 digits\n prefix: '+62 ',\n },\n IR: {\n mask: '##########',\n prefix: '+98 ',\n },\n /* IQ: {\n mask:'########??',\n prefix: ''\n }, */\n IQ: {\n mask: '##########',\n prefix: '+964 ',\n },\n /* IE: {\n mask:'#######??',\n prefix: ''\n }, */\n IE: {\n mask: '#########',\n prefix: '+353 ',\n },\n /* IL: {\n mask:'########?',\n prefix: ''\n }, */\n IL: {\n mask: '#########',\n prefix: '+972 ',\n },\n /* IT: {\n mask:'######????',\n prefix: ''\n }, */\n IT: {\n mask: '##########',\n prefix: '+39 ',\n },\n JM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n JP: {\n mask: '#########??',\n prefix: '+81 ',\n },\n /* JO: {\n mask:'#######??',\n prefix: ''\n }, */\n JO: {\n mask: '#########',\n prefix: '+962 ',\n },\n KZ: {\n mask: '(###) ####-###',\n prefix: '+7 ',\n },\n /* KE: {\n mask:'######????',\n prefix: ''\n }, */\n KE: {\n mask: '##########',\n prefix: '+254 ',\n },\n KI: {\n mask: '##-###',\n prefix: '+686 ',\n },\n // kp\n /* KR: {\n mask:'####??????',\n prefix: ''\n }, */\n KR: {\n mask: '##########',\n prefix: '+82 ',\n },\n KW: {\n mask: '####-####',\n prefix: '+965 ',\n },\n KG: {\n mask: '#########',\n prefix: '+996 ',\n },\n LA: {\n mask: '########?',\n prefix: '+856 ',\n },\n LV: {\n mask: '####-####',\n prefix: '+371 ',\n },\n LB: {\n mask: '#######?',\n prefix: '+961 ',\n },\n LS: {\n mask: '##-###-###',\n prefix: '+266 ',\n },\n // LR\n /* LY: {\n mask:'########?',\n prefix: ''\n }, */\n LY: {\n mask: '########?',\n prefix: '+218 ',\n },\n LI: {\n mask: '###-####',\n prefix: '+423 ',\n },\n LT: {\n mask: '########',\n prefix: '+370 ',\n },\n /* LU: {\n mask:'#####??????',\n prefix: '+352 '\n }, */\n LU: {\n mask: '###########',\n prefix: '+352 ',\n },\n MO: {\n mask: '####-####',\n prefix: '+853 ',\n },\n MK: {\n mask: '########',\n prefix: '+389 ',\n },\n MG: {\n mask: '##-##-###-##',\n prefix: '+261 ',\n },\n /* MW: {\n mask:'#######??',\n prefix: '+265 '\n }, */\n MW: {\n mask: '#########',\n prefix: '+265 ',\n },\n /* MY: {\n mask:'#######???',\n prefix: '+60 '\n }, */\n MY: {\n mask: '##########',\n prefix: '+60 ',\n },\n MV: {\n mask: '###-####',\n prefix: '+960 ',\n },\n ML: {\n mask: '####-####',\n prefix: '+223 ',\n },\n MT: {\n mask: '##-##-##-##',\n prefix: '+356 ',\n },\n MH: {\n mask: '###-####',\n prefix: '+692 ',\n },\n MQ: {\n mask: '###-######',\n prefix: '+596 ',\n },\n // MR\n MU: {\n mask: '###-####',\n prefix: '+230 ',\n },\n // YT\n MX: {\n mask: '(###) ###-####',\n prefix: '+52 ',\n },\n // FM\n MD: {\n mask: '########',\n prefix: '+373 ',\n },\n MC: {\n mask: '####-####',\n prefix: '+377 ',\n },\n /* MN: {\n mask:'######?????',\n prefix: '+976 '\n }, */\n MN: {\n mask: '###########',\n prefix: '+976 ',\n },\n MS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n MA: {\n mask: '#########?', // allows 9 ~ 10 digits\n prefix: '+212 ',\n },\n /* MZ: {\n mask:'########?',\n prefix: '+258 '\n }, */\n MZ: {\n mask: '#########',\n prefix: '+258 ',\n },\n /* MM: {\n mask:'#######?',\n prefix: '+95 '\n }, */\n MM: {\n mask: '########',\n prefix: '+95 ',\n },\n /* NA: {\n mask:'######????',\n prefix: '+264 '\n }, */\n NA: {\n mask: '##########',\n prefix: '+264 ',\n },\n // NR\n /* NP: {\n mask:'########??',\n prefix: '+977 '\n }, */\n NP: {\n mask: '##########',\n prefix: '+977 ',\n },\n NL: {\n mask: '#########',\n prefix: '+31 ',\n },\n /* AN: {\n mask:'#######?',\n prefix: '+599 '\n }, */\n AN: {\n mask: '########',\n prefix: '+599 ',\n },\n NC: {\n mask: '###-###',\n prefix: '+687 ',\n },\n /* NZ: {\n mask:'########??',\n prefix: '+64 '\n }, */\n NZ: {\n mask: '##########',\n prefix: '+64 ',\n },\n NI: {\n mask: '####-####',\n prefix: '+505 ',\n },\n NE: {\n mask: '##-###-###',\n prefix: '+227 ',\n },\n /* NG: {\n mask:'########??',\n prefix: '+234 '\n }, */\n NG: {\n mask: '##########',\n prefix: '+234 ',\n },\n // NU\n MP: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n NO: {\n mask: '####-####',\n prefix: '+47 ',\n },\n OM: {\n mask: '####-####',\n prefix: '+968 ',\n },\n /* PK: {\n mask:'#########?',\n prefix: '+92 '\n }, */\n PK: {\n mask: '##########',\n prefix: '+92 ',\n },\n PW: {\n mask: '###-####',\n prefix: '+680 ',\n },\n /* PA: {\n mask:'#######?',\n prefix: '+507 '\n }, */\n PA: {\n mask: '########',\n prefix: '+507 ',\n },\n /* PG: {\n mask:'#######?',\n prefix: '+675 '\n }, */\n PG: {\n mask: '########',\n prefix: '+675 ',\n },\n // PY\n /* PE: {\n mask:'#######????',\n prefix: '+51 '\n }, */\n PE: {\n mask: '###########',\n prefix: '+51 ',\n },\n /* PH: {\n mask:'########??',\n prefix: '+63 '\n }, */\n PH: {\n mask: '##########',\n prefix: '+63 ',\n },\n PL: {\n mask: '#########',\n prefix: '+48 ',\n },\n PT: {\n mask: '#-####-####',\n prefix: '+351 ',\n },\n PR: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n QA: {\n mask: '###-####',\n prefix: '+974 ',\n },\n RE: {\n mask: '###-###-###',\n prefix: '+262 ',\n },\n RO: {\n mask: '#########',\n prefix: '+40 ',\n },\n RU: {\n mask: '##########',\n prefix: '+7 ',\n },\n RW: {\n mask: '###-###-###',\n prefix: '+250 ',\n },\n SH: {\n mask: '#-###',\n prefix: '+290 ',\n },\n // PM\n KN: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n LC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WS\n // SM\n ST: {\n mask: '##-####',\n prefix: '+239 ',\n },\n /* SA: {\n mask:'########?',\n prefix: '+966 '\n }, */\n SA: {\n mask: '#########',\n prefix: '+966 ',\n },\n SN: {\n mask: '##-###-####',\n prefix: '+221 ',\n },\n SC: {\n mask: '###-###',\n prefix: '+248 ',\n },\n SL: {\n mask: '(##) ###-###',\n prefix: '+232 ',\n },\n SG: {\n mask: '####-####',\n prefix: '+65 ',\n },\n SK: {\n mask: '#########',\n prefix: '+421 ',\n },\n SI: {\n mask: '########',\n prefix: '+386 ',\n },\n SB: {\n mask: '##-###',\n prefix: '+677 ',\n },\n // SO\n ZA: {\n mask: '(##) ###-####',\n prefix: '+27 ',\n },\n ES: {\n mask: '###-###-###',\n prefix: '+34 ',\n },\n LK: {\n mask: '(##) ###-####',\n prefix: '+94 ',\n },\n SD: {\n mask: '##-###-####',\n prefix: '+249 ',\n },\n SR: {\n mask: '######?',\n prefix: '+597 ',\n },\n SZ: {\n mask: '###-####',\n prefix: '+268 ',\n },\n /* SE: {\n mask:'######?????',\n prefix: '+46 '\n }, */\n SE: {\n mask: '###########',\n prefix: '+46 ',\n },\n CH: {\n mask: '(##) ###-####',\n prefix: '+41 ',\n },\n /* SY: {\n mask:'########?',\n prefix: '+963 '\n }, */\n SY: {\n mask: '#########',\n prefix: '+963 ',\n },\n TJ: {\n mask: '#########',\n prefix: '+992 ',\n },\n TZ: {\n mask: '#########',\n prefix: '+255 ',\n },\n /* TH: {\n mask:'########?',\n prefix: '+66 '\n }, */\n TH: {\n mask: '#########',\n prefix: '+66 ',\n },\n TG: {\n mask: '###-####',\n prefix: '+228 ',\n },\n // TK\n // TO\n TT: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TN: {\n mask: '##-###-###',\n prefix: '+216 ',\n },\n TR: {\n mask: '(###) ###-####',\n prefix: '+90 ',\n },\n TM: {\n mask: '########',\n prefix: '+993 ',\n },\n TC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // TV\n UG: {\n mask: '#########',\n prefix: '+256 ',\n },\n UA: {\n mask: '(##) ###-####',\n prefix: '+380 ',\n },\n /* AE: {\n mask:'########?',\n prefix: '+971 '\n }, */\n AE: {\n mask: '#########',\n prefix: '+971 ',\n },\n /* GB: {\n mask:'##########???',\n prefix: '+44 '\n }, */\n GB: {\n mask: '#########????',\n prefix: '+44 ',\n },\n UY: {\n mask: '########?',\n prefix: '+598 ',\n },\n UZ: {\n mask: '(##) ###-####',\n prefix: '+998 ',\n },\n // VU\n // VA\n VE: {\n mask: '(###) ###-####',\n prefix: '+58 ',\n },\n VN: {\n mask: '#######????',\n prefix: '+84 ',\n },\n VG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WF\n /* YE: {\n mask:'#######??',\n prefix: '+967 '\n }, */\n YE: {\n mask: '#########',\n prefix: '+967 ',\n },\n // YU\n ZM: {\n mask: '#########',\n prefix: '+260 ',\n },\n /* ZW: {\n mask:'####?????',\n prefix: '+263 '\n }, */\n ZW: {\n mask: '#########',\n prefix: '+263 ',\n },\n AC: {\n mask: '####',\n prefix: '+247 ',\n },\n ME: {\n mask: '(##) ###-###?',\n prefix: '+382 ',\n },\n /* PS: {\n mask:'########?',\n prefix: '+970 '\n }, */\n PS: {\n mask: '#########',\n prefix: '+970 ',\n },\n /* RS: {\n mask:'#######??',\n prefix: '+381 '\n }, */\n RS: {\n mask: '#########',\n prefix: '+381 ',\n },\n /* TW: {\n mask:'########?',\n prefix: '+886 '\n }, */\n TW: {\n mask: '#########',\n prefix: '+886 ',\n },\n CW: {\n mask: '#-###-####',\n prefix: '+599 ',\n },\n US: {\n mask: '(###) ###-####',\n prefix: '',\n },\n};\n\nexport default function formatPhoneNumber(value: string, isoCode: string = 'US'): IFormatterValueObject {\n const { mask, prefix } = phoneNumberFormats[isoCode] || phoneNumberFormats.US;\n\n const options = {\n prefix,\n };\n\n const val = value || '';\n // Brazil need edge case handle, mobile: (xx) xxxxx-xxxx, land phone: (xx) xxxx-xxxx\n if (isoCode === 'BR' && val.replace(/[^0-9]/g, '').length === 11) {\n return formatValue(val, '(##) #####-####', options);\n } else {\n return formatValue(val, mask, options);\n }\n}\n","import formatValue from './generic';\n\nexport default function formatSSN(value: string) {\n return formatValue(value, '###-##-####');\n}\n","import formatValue from './generic';\n\nexport default function formatTIN(value: string) {\n return formatValue(value, '##-#######');\n}\n","import formatValue from './generic';\n\nexport default function formatAlphanumeric(value: string) {\n const val = (value || '').replace(/[^\\da-zA-Z]/g, '');\n return formatValue(val);\n}\n","import formatValue from './generic';\n\nexport default function formatAlpha(value: string, modifier?: string) {\n let val = value || '';\n\n if (modifier === 'spaced') {\n val = val.replace(/[^a-zA-Z ]/g, '');\n } else {\n val = val.replace(/[^a-zA-Z]/g, '');\n }\n\n return formatValue(val);\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { INumberInputFormatOptions } from '../q2-input-types';\n\nfunction getNumberFormat(formatOptions: string): INumberInputFormatOptions | undefined {\n const numberFormat: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n };\n const formatParts = formatOptions.split('-');\n\n // handle deprecated formats\n if (formatParts[0] === 'delimited') {\n // `delimited` - to be replaced by `integer-delimited`\n numberFormat.thousandsSeparator = ',';\n } else if (formatParts[0].match(/^[0-9]+dec$/)) {\n // `Ndec` - to be replaced by `Ndecimal`\n numberFormat.decimals = Number(formatParts[0].replace('dec', ''));\n numberFormat.allowDecimal = true;\n numberFormat.thousandsSeparator = ',';\n } else {\n // determine number type\n if (formatParts[0].includes('decimal')) {\n numberFormat.decimals = Number(formatParts[0].replace('decimal', ''));\n numberFormat.allowDecimal = true;\n } else if (formatParts[0] !== 'integer') {\n // Ignore any formats that don't start with Ndecimal or integer\n return;\n }\n\n // determine if negative numbers are allowed\n if (formatParts.includes('positive')) {\n numberFormat.allowNegative = false;\n }\n\n // determine if number is delimited\n if (formatParts.includes('delimited')) {\n numberFormat.thousandsSeparator = ',';\n }\n }\n\n return numberFormat;\n}\n\nfunction formatNumeric(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val);\n }\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport function formatPercentage(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val, undefined, { suffix: '%' });\n }\n\n numberFormat.suffix = '%';\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport default formatNumeric;\n","import formatValue from './generic';\nimport formatAlphanumeric from './alphanumeric';\n\nexport const postalCodeFormats = {\n AF: '####',\n AL: '####',\n DZ: '#####',\n AC: 'ASCN 1ZZ',\n AD: 'AD###', // pre\n AR: '####',\n 'AR+': '@####@@@',\n AI: 'AI-2640',\n AM: '####',\n AS: '#####',\n 'AS+4': '#####-####',\n AU: '####',\n AT: '####',\n AZ: 'AZ ####', // pre\n BH: '###?',\n BD: '####',\n BB: 'BB#####', // pre\n BY: '######',\n BE: '####',\n BM: '@@ **',\n BT: '#####',\n BA: '######',\n BR: '#####',\n 'BR+3': '#####-###',\n VG: 'VG####', // pre\n BN: '@@####',\n BG: '####',\n KH: '#####',\n KY: 'KY#-####', // pre\n CA: '@#@ #@#',\n CL: '###-####',\n CN: '######',\n CX: '####',\n CC: '####',\n CO: '######',\n CR: '#####',\n 'CR+4': '#####-####',\n CV: '####',\n HR: '#####',\n CU: '#####',\n CY: '####',\n CZ: '### ##',\n DK: '####',\n DO: '#####',\n EC: '######',\n SV: '####',\n EG: '#####',\n EE: '#####',\n ET: '####',\n FK: 'FIQQ 1ZZ',\n FO: '###',\n FI: '#####',\n FR: '#####',\n GF: '973##', // pre?\n PF: '987##', // pre?\n GI: 'GX11 1AA',\n GE: '####',\n DE: '#####',\n GR: '### ##',\n GL: '####',\n GP: '971##', // pre?\n GU: '#####',\n 'GU+4': '#####-####',\n GT: '#####',\n GG: 'GY#? #@@',\n GN: '###',\n GS: 'SIQQ 1ZZ',\n GW: '####',\n HT: '####',\n HN: '@@####',\n 'HN-': '#####',\n HU: '####',\n IS: '###',\n IN: '### ###',\n ID: '#####',\n IE: '*** ****',\n IR: '##########',\n IQ: '#####',\n IM: 'IM#? #@@', // pre\n IL: '#######',\n IT: '#####',\n JM: '##',\n JP: '###-####',\n JE: 'JE#? #@@', // pre\n JO: '#####',\n KZ: '######',\n KE: '#####',\n KR: '#####',\n KN: 'KN####',\n XK: '#####',\n KW: '#####',\n KG: '######',\n LA: '#####',\n LV: 'LV-####', // pre\n LB: '####? ????', // also 00000\n LS: '###',\n LR: '####',\n LI: '####',\n LT: '#####', // pre-\n LU: '####',\n MK: '####',\n MG: '###',\n MY: '#####',\n MV: '#####',\n MT: '@@@ ####',\n MH: '#####',\n 'MH+4': '#####-####',\n MU: '#####',\n MQ: '972##', // pre?\n MW: '######',\n YT: '976##', // pre?\n MX: '#####',\n FM: '#####',\n 'FM+4': '#####-####',\n MD: '####', // pre\n MC: '980##', // pre?\n MN: '#####',\n ME: '#####',\n MA: '#####',\n MZ: '####',\n MM: '#####',\n NA: '#####',\n NP: '#####',\n NC: '988##', // pre?\n NZ: '####',\n NI: '#####',\n NE: '####',\n NG: '######',\n NF: '####',\n MP: '#####',\n NO: '####',\n OM: '###',\n PK: '#####',\n PW: '#####',\n 'PW+4': '#####-####',\n PS: '###',\n PA: '####',\n PG: '###',\n PY: '####',\n PE: '#####',\n 'PE+': '####', // pre\n PH: '####',\n PL: '##-###',\n PT: '####',\n 'PT+3': '####-###',\n PR: '#####',\n 'PR+4': '#####-####',\n RE: '974##', // pre?\n PM: '975##',\n PN: 'PCRN 1ZZ',\n RO: '######',\n RU: '######',\n LC: 'LC## ###', // pre\n VC: '####', // pre\n WS: '####', // pre\n SM: '4879#', // pre?\n SA: '#####',\n 'SA+4': '#####-####',\n SN: '#####',\n RS: '#####',\n SG: '######',\n SH: '@@@@ 1ZZ',\n SK: '### ##',\n SI: '####', // pre?\n SO: '@@ #####',\n ZA: '####',\n ES: '#####',\n LK: '#####',\n SD: '#####',\n SZ: '@###',\n SE: '### ##',\n CH: '####',\n SJ: '####',\n TW: '###',\n 'TW+2': '###-##?',\n TJ: '######',\n TZ: '#####',\n TH: '#####',\n TT: '######',\n TN: '####',\n TR: '#####',\n TM: '######',\n UA: '#####',\n UY: '#####',\n VI: '#####',\n 'VI+4': '#####-####',\n UZ: '######',\n VE: '####',\n 'VE-': '####-@',\n VN: '#####?',\n YU: '#####',\n WF: '986##', // pre?\n ZM: '#####',\n US: '#####',\n 'US+4': '#####-####',\n};\nexport default function formatPostalCode(value: string, modifier: string = 'US') {\n const mask = postalCodeFormats[modifier];\n\n if (!mask) {\n return formatAlphanumeric(value);\n }\n\n return formatValue(value, mask);\n}\n","import formatValue from './generic';\n\nexport const dateFormats = {\n 'MM/DD/YYYY': '##/##/####',\n 'M/D/YYYY': '#?/#?/####',\n 'MM/DD/YY': '##/##/##',\n 'M/D/YY': '#?/#?/##',\n 'MM/YY': '##/##',\n 'M/YY': '#?/##',\n 'DD/MM/YYYY': '##/##/####',\n 'D/M/YYYY': '#?/#?/####',\n 'DD/MM/YY': '##/##/##',\n 'D/M/YY': '#?/#?/##',\n 'MM-DD-YYYY': '##-##-####',\n 'M-D-YYYY': '#?-#?-####',\n 'MM-DD-YY': '##-##-##',\n 'M-D-YY': '#?-#?-##',\n 'MM-YY': '##-##',\n 'M-YY': '#?-##',\n 'DD-MM-YYYY': '##-##-####',\n 'D-M-YYYY': '#?-#?-####',\n 'DD-MM-YY': '##-##-##',\n 'D-M-YY': '#?-#?-##',\n};\n\nexport default function formatDate(value: string, format: string = 'MM/DD/YYYY') {\n const mask = dateFormats[format?.toUpperCase()] || dateFormats['MM/DD/YYYY'];\n\n const formattedValueObject = formatValue(value, mask);\n\n return {\n ...formattedValueObject,\n value: formattedValueObject.formattedValue,\n };\n}\n","import formatValue from './generic';\nimport { IFormatterValueObject } from '../q2-input-types';\n\ninterface FormattedCreditCardObject extends IFormatterValueObject {\n type: string;\n leftIcon: string;\n leftIconMuted: boolean;\n}\n\ntype Formatter = (value: string) => FormattedCreditCardObject;\n\nfunction format(value: string): FormattedCreditCardObject {\n // have a initial generic mask which then converts to specific mask\n const detectedType = formatCreditCard.detectCreditCardTypeFromValue(value);\n const formattedValueObject = creditCardFormatters[detectedType](value);\n\n if (value.length < 2 && detectedType === 'unknown') {\n formattedValueObject.leftIcon = 'card';\n }\n return formattedValueObject;\n}\n\nconst unknownFormatter: Formatter = function unknownFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'unknown',\n leftIcon: 'card-unknown',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst amexFormatter: Formatter = function amexFn(value) {\n const valueObject = formatValue(value, '#### ###### #####');\n\n return {\n ...valueObject,\n type: 'amex',\n leftIcon: 'card-amex-color',\n leftIconMuted: value.length < 15,\n };\n};\n\nconst discoverFormatter: Formatter = function discoverFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'discover',\n leftIcon: 'card-discover-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst masterCardFormatter: Formatter = function masterCardFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'masterCard',\n leftIcon: 'card-mastercard-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst visaFormatter: Formatter = function visaFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'visa',\n leftIcon: 'card-visa-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst dinersClubInternationalFormatter: Formatter = function dinersClub(value) {\n const valueObject = formatValue(value, '#### ###### ####');\n\n return {\n ...valueObject,\n type: 'dinersClub',\n leftIcon: 'card-dinersclub-color',\n leftIconMuted: value.length < 14,\n };\n};\n\nconst creditCardFormatters = {\n discover: discoverFormatter,\n amex: amexFormatter,\n masterCard: masterCardFormatter,\n visa: visaFormatter,\n dinersClub: dinersClubInternationalFormatter,\n unknown: unknownFormatter,\n};\n\n/* tslint:disable:cyclomatic-complexity */\nfunction detectCreditCardTypeFromValue(value: string): string {\n // use value and some algorithm from the internet to detect and return card type based on string\n // return string 'unknown' if algorithm cannot detect or returns a type that is not one of our 5 supported types\n const firstInt = parseInt(value.charAt(0));\n const secondInt = parseInt(value.charAt(1));\n\n switch (firstInt) {\n case 2:\n if (secondInt > 1 && secondInt < 8) {\n if (value.length >= 4) {\n const firstfour = parseInt(value.substr(0, 4));\n if (firstfour >= 2221 && firstfour < 2721) {\n return 'masterCard';\n }\n } else {\n return 'masterCard';\n }\n }\n break;\n case 3:\n if (secondInt === 4 || secondInt === 7) {\n return 'amex';\n }\n if (secondInt === 0) {\n if (value.length > 2) {\n const thirdInt = parseInt(value.charAt(2));\n if (thirdInt < 6 || thirdInt === 9) {\n return 'dinersClub';\n }\n } else {\n return 'dinersClub';\n }\n }\n if (secondInt === 6 || secondInt === 8 || secondInt === 9) {\n return 'dinersClub';\n }\n break;\n case 4:\n return 'visa';\n case 5:\n if (secondInt > 0 && secondInt < 6) {\n return 'masterCard';\n }\n break;\n case 6:\n if (secondInt === 0) {\n if (value.length > 3) {\n const firstfour = value.substr(0, 4);\n if (firstfour === '6011') {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 4) {\n if (value.length > 2) {\n const firstthree = parseInt(value.substr(0, 3));\n if (firstthree > 643) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 5) {\n return 'discover';\n }\n if (secondInt === 2) {\n if (value.length > 5) {\n const firstsix = parseInt(value.substr(0, 6));\n if (firstsix >= 622126 && firstsix <= 622925) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n break;\n default:\n return 'unknown';\n }\n return 'unknown';\n}\n/* tslint:enable:cyclomatic-complexity */\n\nconst formatCreditCard = {\n detectCreditCardTypeFromValue,\n format,\n amexFormatter,\n dinersClubInternationalFormatter,\n discoverFormatter,\n masterCardFormatter,\n visaFormatter,\n unknownFormatter,\n};\n\nexport default formatCreditCard;\n","@import '../../styles/host';\n@import '../../styles/functions';\n\n:host {\n --comp-default-input-margin: #{var-list(var-prefixer(input-margin-top), --app-scale-5x, 25px) 0\n var-list(var-prefixer(input-margin-bottom), --app-scale-5x, 25px)};\n display: block;\n margin: var-list(--tct-input-margin, --comp-default-input-margin);\n font-size: var-list(var-prefixer(input-font-size), --app-font-size, inherit);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.field-container,\n.input-container {\n position: relative;\n}\n.field-container {\n --comp-input-tween: #{var-list(var-prefixer(input-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'))};\n\n &.is-small {\n .btn-clear {\n --tct-btn-icon-width: 20px;\n --tct-icon-size: 17px;\n }\n }\n}\n\n.input-label {\n --comp-label-padding: #{var-list(\n --tct-input-label-padding,\n unquote(\n '0 #{var-list(var-prefixer(input-label-padding-right), 0)} 0 #{var-list(var-prefixer(input-label-padding-left), 0)}'\n )\n )};\n display: block;\n padding: var(--comp-label-padding);\n color: var-list(var-prefixer(input-label-font-color), inherit);\n font-size: var-list(var-prefixer(input-label-font-size), inherit);\n font-weight: var-list(var-prefixer(input-label-font-weight), 600);\n text-transform: var-list(var-prefixer(input-label-text-transform), none);\n letter-spacing: var-list(var-prefixer(input-label-letter-spacing), inherit);\n transition: color var(--comp-input-tween);\n}\n\n.optional-tag {\n --comp-label-optional-margin: #{var-list(\n --tct-input-label-optional-margin,\n unquote(\n '0 0 0 #{var-list(var-prefixer(input-label-optional-margin-left), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n margin: var(--comp-label-optional-margin);\n color: var-list(\n var-prefixer(input-label-optional-font-color),\n --t-textA,\n --t-a11y-gray-color,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(input-label-optional-font-size), --app-font-size-small, 12px);\n font-weight: var-list(var-prefixer(input-label-optional-font-weight), 400);\n line-height: 1em;\n}\n\n.count-tag {\n color: var-list(--tct-input-count-font-color, --t-textA, --t-a11y-gray-color, rgba(77, 77, 77, 0.77));\n font-size: var-list(--tct-input-count-font-size, --app-font-size-small, 12px);\n font-weight: var-list(--tct-input-count-font-weight, 400);\n text-align: right;\n width: var(--tct-input-count-width, auto);\n}\n\n.label-wrapper {\n --comp-label-margin: #{var-list(\n --tct-input-label-margin,\n unquote(\n '#{var-list(var-prefixer(input-label-margin-top), 0)} 0 #{var-list(var-prefixer(input-label-margin-bottom), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n display: flex;\n gap: var-list(--tct-input-label-gap, --app-scale-2x, 10px);\n justify-content: space-between;\n align-items: end;\n margin: var(--comp-label-margin);\n line-height: var-list(var-prefixer(input-label-line-height), inherit);\n\n &:has(label.sr) {\n margin: 0;\n }\n}\n\n.input-container {\n --comp-input-background: #{var-list(--tct-input-background, var-prefixer(input-bg), --t-gray-14, #fcfcfd)};\n --comp-input-backdrop-filter: #{var-list(--tct-input-backdrop-filter, none)};\n --comp-input-horizontal-gap: #{var-list(var-prefixer(input-horizontal-gap), 0)};\n --comp-input-border-top-left-radius: #{var-list(\n var-prefixer(input-border-top-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-top-right-radius: #{var-list(\n var-prefixer(input-border-top-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-bottom-right-radius: #{var-list(\n var-prefixer(input-border-bottom-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-bottom-left-radius: #{var-list(\n var-prefixer(input-border-bottom-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 4px\n )};\n --comp-input-border-radius: var(--comp-input-border-top-left-radius) var(--comp-input-border-top-right-radius)\n var(--comp-input-border-bottom-right-radius) var(--comp-input-border-bottom-left-radius);\n --comp-input-border-width: var(--tct-input-border-top-width, 1px) var(--tct-input-border-right-width, 1px)\n var(--tct-input-border-bottom-width, 1px) var(--tct-input-border-left-width, 1px);\n --comp-input-border-color: #{var-list(var-prefixer(input-border-color), --t-a11y-gray-color-AA, #404040)};\n --comp-input-prefix-clearance: calc(3 * var(--tct-input-prefix-font-size, 14px) + var(--tct-scale-1, 5px));\n --comp-input-icon-clearance: 34px;\n --comp-input-min-height: #{var-list(var-prefixer(input-min-height), 44px)};\n --comp-input-max-height: #{var-list(var-prefixer(input-max-height))};\n\n --comp-input-hover-ring-color: #{var-list(var-prefixer(input-hover-ring-color))};\n --comp-input-hover-ring: #{0 0 0 2px var(--t-base), 0 0 0 4px var(--comp-input-hover-ring-color),\n var-list(var-prefixer(input-hover-box-shadow), unquote('0 0 transparent'))};\n\n background: var(--comp-input-background);\n backdrop-filter: var(--comp-input-backdrop-filter);\n display: flex;\n align-items: center;\n gap: var-list(--tct-input-container-gap, --app-scale-2x, 10px);\n padding-inline: var-list(--tct-input-container-padding-inline);\n border-width: var(--comp-input-border-width);\n border-style: solid;\n border-color: var(--comp-input-border-color);\n border-radius: var(--comp-input-border-radius);\n box-shadow: var-list(var-prefixer(input-box-shadow), none);\n transition:\n background var(--comp-input-tween),\n backdrop-filter var(--comp-input-tween),\n border-width var(--comp-input-tween),\n border-color var(--comp-input-tween),\n box-shadow var(--comp-input-tween);\n\n :host([disabled]:not([disabled='false'])) & {\n cursor: not-allowed;\n opacity: var-list(var-prefixer(input-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n backdrop-filter: var-list(--tct-input-disabled-backdrop-filter, --comp-input-backdrop-filter);\n }\n\n .has-error & {\n border-color: var-list(--tct-input-error-border-color, --const-stoplight-alert, #d20a0a);\n backdrop-filter: var-list(--tct-input-error-backdrop-filter, --comp-input-backdrop-filter);\n background: var-list(--tct-input-error-background, --comp-input-background);\n box-shadow: var-list(--tct-input-error-box-shadow, --comp-input-hover-ring);\n }\n\n &:hover {\n border-color: var-list(--tct-input-hover-border-color, --comp-input-border-color);\n background: var-list(--tct-input-hover-background, --comp-input-background);\n backdrop-filter: var-list(--tct-input-hover-backdrop-filter, --comp-input-backdrop-filter);\n box-shadow: var-list(--tct-input-hover-box-shadow, --comp-input-hover-ring);\n\n .has-error & {\n border-color: var-list(\n --tct-input-error-hover-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n backdrop-filter: var-list(\n --tct-input-error-hover-backdrop-filter,\n --tct-input-error-backdrop-filter,\n --tct-input-hover-backdrop-filter,\n --comp-input-backdrop-filter\n );\n background: var-list(\n --tct-input-error-hover-background,\n --tct-input-error-background,\n --comp-input-background\n );\n box-shadow: var-list(\n --tct-input-error-hover-box-shadow,\n --tct-input-error-box-shadow,\n --comp-input-hover-ring\n );\n }\n }\n\n .has-focus & {\n border-color: var-list(var-prefixer(input-focus-border-color), --comp-input-border-color);\n background: var-list(--tct-input-focus-background, --comp-input-background);\n backdrop-filter: var-list(--tct-input-focus-backdrop-filter, --comp-input-backdrop-filter);\n box-shadow: var-list(--tct-input-focus-box-shadow, --const-double-focus-ring);\n }\n\n .has-focus.has-error &,\n .has-focus.has-error &:hover {\n border-color: var-list(\n --tct-input-error-focus-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #d20a0a\n );\n backdrop-filter: var-list(\n --tct-input-error-focus-backdrop-filter,\n --tct-input-error-backdrop-filter,\n --tct-input-focus-backdrop-filter,\n --comp-input-backdrop-filter\n );\n background: var-list(--tct-input-error-focus-background, --tct-input-error-background, --comp-input-background);\n box-shadow: var-list(\n --tct-input-error-focus-box-shadow,\n --tct-input-error-box-shadow,\n --const-double-focus-ring\n );\n }\n\n &:has(.input-field:is(:-webkit-autofill, :autofill)) {\n background: var(--tct-input-autofill-background, #faffbc);\n color: var-list(--tct-input-autofill-font-color, --t-text, inherit);\n .input-field {\n box-shadow: 0 0 0 1000px var(--tct-input-autofill-background, #faffbc) inset;\n color: var-list(--tct-input-autofill-font-color, --t-text, inherit);\n -webkit-text-fill-color: var-list(--tct-input-autofill-font-color, --t-text, inherit);\n }\n }\n}\n\n.input-field {\n flex: 1;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n box-sizing: border-box;\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n overflow-y: hidden;\n height: var-list(var-prefixer(input-height), 44px);\n width: 100%;\n padding: var(--tct-input-padding, 0);\n background: transparent;\n color: var-list(var-prefixer(input-font-color), --t-text, inherit);\n display: inline-block;\n text-align: var(--tct-input-align, 'start');\n font-weight: var-list(var-prefixer(input-font-weight), 400);\n letter-spacing: var-list(var-prefixer(input-letter-spacing), inherit);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n /* To remove up/down arrow in number field for webkit based browser */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* For Firefox */\n &[type='number'] {\n -moz-appearance: textfield;\n }\n\n &::-ms-reveal,\n &::-ms-clear {\n display: none;\n }\n\n &[type='search'] {\n &::-webkit-search-decoration,\n &::-webkit-search-cancel-button,\n &::-webkit-search-results-button,\n &::-webkit-search-results-decoration {\n display: none;\n }\n }\n\n &[disabled]:not([disabled='false']) {\n cursor: not-allowed;\n }\n\n .right-aligned & {\n text-align: right;\n }\n\n &:is(input) {\n flex: 1;\n }\n\n &:is(button) {\n display: inline-flex;\n align-items: center;\n\n .has-custom-display & {\n height: auto;\n padding: 0;\n }\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n }\n}\n\n.custom-display-container {\n max-width: 100%;\n\n .has-custom-display & {\n --comp-default-padding: var(--app-scale-2x, 10px) var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);\n padding: var-list(var-prefixer(input-padding), --comp-default-padding);\n width: 100%;\n }\n}\n\n.input-field::placeholder,\n.placeholder-text {\n color: var-list(var-prefixer(input-placeholder-font-color), --t-textA, --app-gray-d1, rgba(77, 77, 77, 0.77));\n}\n\n.pseudo-input-container {\n min-width: 0;\n flex: 1;\n}\n\n.input-icons-container-left,\n.input-icons-container-right {\n --tct-btn-icon-hover-background: var(--tct-input-btn-hover-background);\n --tct-btn-hover-background: var(--tct-input-btn-hover-background);\n\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--comp-input-horizontal-gap);\n\n > div:not(.vertical-separator) {\n min-width: var-list(--tct-input-icon-container-icon-min-width, 44px);\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(--tct-input-icon-container-font-size, inherit);\n }\n\n &:empty {\n display: var(--tct-input-icon-container-empty-display, block);\n }\n}\n\n.input-icons-container-left {\n padding-left: var(--comp-input-horizontal-gap);\n}\n\n.input-icons-container-right {\n padding-right: var(--comp-input-horizontal-gap);\n --comp-visibility-toggle-padding: 0px #{var-list(--app-scale-2x, 10px)};\n\n .btn-visibility-toggle {\n --tct-btn-height: var(--comp-input-min-height);\n --tct-btn-padding-inline: #{var-list(--tct-input-visibility-toggle-padding, --app-scale-2x, 10px)};\n --tct-btn-font-weight: #{var-list(--tct-input-visibility-toggle-font-weight, 400)};\n\n color: var-list(--tct-input-visibility-toggle-font-color, --t-primary, #0079c1);\n font-size: var-list(--tct-input-visibility-toggle-font-size, --app-font-size-small, 12px);\n }\n}\n\nq2-icon {\n margin-top: calc(#{var-list(var-prefixer(input-border-top-width), 1px)} / 2);\n margin-bottom: calc(#{var-list(var-prefixer(input-border-bottom-width), 1px)} / 2);\n pointer-events: none;\n color: var-list(var-prefixer(input-icon-stroke-primary), --t-a11y-gray-color, --t-textA, --app-gray, #747474);\n --tct-icon-stroke-primary: #{var-list(\n var-prefixer(input-icon-stroke-primary),\n --t-a11y-gray-color,\n --t-textA,\n --app-gray,\n #747474\n )};\n}\n\n.icon-left-muted {\n opacity: 0.5;\n}\n\n.input-prefix,\n.input-suffix {\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n height: var-list(var-prefixer(input-height), 44px);\n font-size: var-list(var-prefixer(input-prefix-font-size), inherit);\n font-weight: var-list(--tct-input-prefix-font-weight, 400);\n color: var-list(var-prefixer(input-prefix-font-color), inherit);\n background: var-list(\n --tct-input-prefix-background,\n var-prefixer(input-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n #f2f2f2\n );\n transition:\n color var(--comp-input-tween),\n background var(--comp-input-tween);\n}\n\n.input-prefix {\n border-top-left-radius: calc(\n var(--comp-input-border-top-left-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n border-bottom-left-radius: calc(\n var(--comp-input-border-bottom-left-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n pointer-events: none; /* used to allow iOS voiceover to display keyboard in input TCT-1194 */\n}\n\n.input-suffix {\n border-top-right-radius: calc(\n var(--comp-input-border-top-right-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n border-bottom-right-radius: calc(\n var(--comp-input-border-bottom-right-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n}\n\n.icon-error {\n color: var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a);\n --tct-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #d20a0a)};\n}\n\n.messages-container {\n height: 0px;\n overflow: hidden;\n background: var-list(\n --tct-message-background,\n var-prefixer(message-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n box-shadow: var-list(\n var-prefixer(input-message-box-shadow),\n --tct-box-shadow-1,\n --app-shadow-1,\n unquote('0px 0px 2px rgba(0, 0, 0, 0.12), 0px 2px 4px rgba(0, 0, 0, 0.14)')\n );\n transition: height var-list(var-prefixer(input-messages-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n margin-top: var-list(--tct-input-messages-margin-top, 2px);\n z-index: var-list(--tct-input-messages-z-index, 5);\n position: absolute;\n width: 100%;\n color: var-list(var-prefixer(input-messages-font-color), inherit);\n\n // Sync up border radius with q2-message\n border-radius: var(--tct-message-border-radius, --app-border-radius-1, inherit);\n}\n\n.has-error label {\n color: var-list(var-prefixer(input-error-label-font-color), var-prefixer(input-label-font-color), inherit);\n}\n\n.has-error:not(.has-focus) .input-prefix,\n.has-error:not(.has-focus) .input-suffix {\n color: var-list(var-prefixer(input-error-prefix-font-color), inherit);\n background: var-list(\n --tct-input-error-prefix-background,\n var-prefixer(input-error-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n}\n\n.icon-left {\n width: 26px;\n height: 26px;\n}\n\n.vertical-separator {\n height: calc(var(--comp-input-min-height) - 2px);\n border-right-width: var(--tct-input-prefix-border-width, 1px);\n border-right-style: solid;\n border-right-color: var-list(\n var-prefixer(input-prefix-border-color),\n var-prefixer(input-border-color),\n --t-a11y-gray-color-AA,\n #404040\n );\n}\n","import {\n Component,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n h,\n Host,\n Watch,\n Listen,\n Fragment,\n Method,\n} from '@stencil/core';\nimport {\n createGuid,\n getAriaValueFromProp,\n renderLabel,\n loc,\n renderMessages,\n setMessageHeight,\n handleAriaLabel,\n overrideFocus,\n isEventFromElement,\n isMobile,\n hasSlotContent,\n nextPaint,\n} from 'src/utils';\nimport { IFormatterValueObject, ICursorData, IEventDetail } from './q2-input-types';\nimport formatCurrency from './formatting/currency';\nimport formatPhoneNumber from './formatting/phone';\nimport formatSSN from './formatting/ssn';\nimport formatTIN from './formatting/tin';\nimport formatAlphanumeric from './formatting/alphanumeric';\nimport formatAlpha from './formatting/alpha';\nimport formatNumeric, { formatPercentage } from './formatting/numeric';\nimport formatPostalCode from './formatting/postal';\nimport formatDate from './formatting/date';\nimport formatCreditCard from './formatting/credit-card';\nimport { Q2Icon } from '../q2-icon/q2-icon';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\nconst inputTypeMap = {\n text: 'text',\n tel: 'tel',\n number: 'number',\n password: 'text',\n search: 'search',\n url: 'url',\n email: 'email',\n currency: 'text',\n phone: 'tel',\n ssn: 'text',\n alphanumeric: 'text',\n alpha: 'text',\n numeric: 'text',\n percentage: 'text',\n postal: 'text',\n date: 'text',\n 'credit-card': 'text',\n};\n\nexport type InputType = keyof typeof inputTypeMap;\n\n/**\n * @slot label - An optional slot to display a custom label.\n * @slot input-left - An optional slot to add a [Button](https://tecton.q2developer.com/design-system/q2-btn) on the left-hand side of the input field.\n * @slot input-right - An optional slot to add a [Button](https://tecton.q2developer.com/design-system/q2-btn) on the right-hand side of the input field.\n * @slot custom-display - An optional slot to display custom content in the input field.\n */\n@Component({ tag: 'q2-input', shadow: true, styleUrl: 'q2-input.scss' })\nexport class Q2Input {\n // #region Own Properties\n\n guid = createGuid();\n inputRef: HTMLInputElement;\n isClickEvent: boolean = false;\n isMobile: boolean = isMobile();\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n textSelectedForDeletion: boolean;\n valueOnFocus: string;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n checkSlotCount: number = 0;\n\n @State()\n formattedValueObject: IFormatterValueObject;\n\n @State()\n hasFocus: boolean;\n\n @State()\n isSmall: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /**\n * Sets readonly to true on the input without adding the \"read only\" label.\n *\n * Can be used to prevent user input while still presenting the necessary information for assistive technology.\n * @private\n */\n @Prop({ mutable: true })\n _preventEntry: boolean = undefined;\n\n /**\n * Allows for correct semantics of q2-input element when aria-expanded.\n * @private\n * Defaults to undefined\n * Will assign role to combobox when used inside q2-select and q2-calendar.\n */\n @Prop({ mutable: true })\n _role: 'combobox' | undefined = undefined;\n\n @Prop()\n ariaActivedescendant: string;\n\n @Prop()\n ariaControls: string;\n\n @Prop({ reflect: true })\n ariaExpanded: string;\n\n @Prop()\n ariaHaspopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaOwns: string;\n\n /**\n * The `autocapitalize` attribute is an enumerated attribute that controls whether and how text input is automatically capitalized as it is entered/edited by the user.\n *\n * [See MDN for a list of supported values](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autocapitalize#value).\n * @info\n * This attribute only affects the behavior of input mechanisms like virtual keyboards on mobile devices and voice input.\n */\n @Prop({ reflect: true })\n autocapitalize: string;\n\n /**\n * The HTML autocomplete attribute lets web developers specify what permission (if any) the user agent has to provide automated assistance in filling out form field values,\n * as well as guidance to the browser as to the type of information expected in the field.\n *\n * [See MDN for a list of supported values](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values).\n */\n @Prop({ reflect: true })\n autocomplete: string;\n\n /**\n * A string that indicates whether or not to activate automatic correction while the user is editing this field.\n * @warning\n * This is currently only supported in Safari.\n */\n @Prop({ reflect: true })\n autocorrect: 'on' | 'off';\n\n /**\n * Autofocus is enabled when the property is added to an element. To disable, remove attribute or set it to false.\n * If applied to multiple elements, the first one will receive focus.\n */\n @Prop({ reflect: true })\n autofocus: boolean;\n\n /** The color of the badge when in the active state. The property `badgeValue` must be provided. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /** Displays a `q2-badge` element on the right side of the input. */\n @Prop({ reflect: true })\n badgeValue: string;\n\n /** Renders an icon button when the field is non-empty. Pressing the button clears all input from the field. */\n @Prop({ reflect: true })\n clearable: boolean;\n\n /**\n * If provided a value, it sets the `aria-current` attribute on the inner input.\n * [See MDN for more information on aria-current](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current).\n */\n @Prop()\n current: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';\n\n /** Indicates the field cannot be focused or interacted with. */\n @Prop({ reflect: true })\n disabled: boolean = false;\n\n /**\n * Each item in the `errors` array will appear below the input field when the field is focused.\n * @localizable\n */\n @Prop()\n errors: string[];\n\n /**\n * Defines the field's expected input format, and automatically masks user input to conform.\n * Specific types support different modifier options. See the section on Format Modifiers for all available options.\n */\n @Prop({ reflect: true })\n formatModifier: string;\n\n /**\n * Hide's the field's `<label>` element from view.\n * @warning\n * Only use when a visible label is impractical.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * When `true` and the input field has an active validation error, the field shows the error state without displaying associated error messages below the field (from the errors array).\n * Primarily used for dropdown selects and date pickers whose controls appear below the input field (where the error messages, if displayed, would also appear).\n */\n @Prop({ reflect: true })\n hideMessages: boolean;\n\n /**\n * Each item in the `hints` array will appear below the input field when the field is focused.\n * @info\n * The `errors` array takes precedence over the `hints` array. If an input field has both hints and errors, only the errors will display.\n * Once all errors are resolved, the hints display the next time the field is focused.\n * @localizable\n */\n @Prop()\n hints: string[];\n\n /** Shows a left-aligned [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) within the field. */\n @Prop({ reflect: true })\n iconLeft: Q2Icon['type'];\n\n /** Shows a right-aligned [q2-icon](https://tecton.q2developer.com/design-system/q2-icon/) within the field. */\n @Prop({ reflect: true })\n iconRight: Q2Icon['type'];\n\n /**\n * The label that appears above the field. This is announced by screen readers when the field is focused.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * When present, it does not allow a value greater than `max` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n max: number;\n\n /**\n * Defines the maximum allowed input length in characters. Formatting characters (e.g. `.`, `-`, etc) are included in the `maxlength` comparison.\n * Make sure you account for them when setting the `maxlength` value. Input types that use masks have their own inherent `maxlength`.\n */\n @Prop({ reflect: true, mutable: true })\n maxlength: number;\n\n /**\n * When present, it does not allow a value less than the `min` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n min: number;\n\n /** Appends \"(optional)\" to the field label, and sets `aria-required` on the nested input tag to `false`. */\n @Prop({ reflect: true })\n optional: boolean;\n\n /**\n * Applies the value as a RegEx pattern to assess the validity of the input field's value.\n * Check the ValidityState's `patternMismatch` property for the result.\n *\n * **Example:**\n * @snippet\n * <q2-input label=\"My input\" pattern=\"[a-zA-Z0-9]{3,5}\" id=\"myInput\"></q2-input>\n * // enter \"abcdefgh\" in the input field (too many characters)\n * const myInput = document.querySelector('#myInput');\n * console.log(myInput.validity.patternMismatch); // true\n */\n @Prop({ reflect: true, mutable: true })\n pattern: string;\n\n /**\n * Text that appears within the field when it is blurred and empty.\n * Placeholder text disappears when the user focuses on the field and provides input.\n * @info\n * Primarily used for rare cases in which a visible form label is not expected (e.g., search fields).\n * @localizable\n */\n @Prop({ reflect: true })\n placeholder: string;\n\n /** Component will display as a clickable `<button>` styled to be identical to the default `<input>` field. */\n @Prop({ reflect: true })\n pseudo: boolean;\n\n /**\n * Appends \"(read only)\" to the field label, and field becomes unusable, but remains focusable.\n * Takes priority over `optional` if both are `true`.\n */\n @Prop({ reflect: true })\n readonly: boolean;\n\n /**\n * Indicates the element's intended purpose to assistive technology.\n * @deprecated\n */\n @Prop()\n role: string;\n\n /**\n * Shows a character counter above the input field to track the number of characters currently in the field.\n * If `maxlength` is set, `showCount` displays the number of characters in relation the `maxlength` value.\n */\n @Prop({ reflect: true })\n showCount: boolean;\n\n /**\n * Displays a toggle button at the end of the input field which shows or hides the actual value.\n * @info\n * Only applicable when `type` is `text`, `password`, or `ssn`.\n */\n @Prop({ reflect: true })\n showVisibilityToggle: boolean = false;\n\n /**\n * When present, it jumps the value in increments of `step` when the user uses the Up/Down arrow keys to change the value.\n * @info\n * Only applicable when `type=\"number\"`.\n */\n @Prop({ reflect: true })\n step: number;\n\n /**\n * Controls visibility of the value when the type is `text`, `password`, or `ssn`.\n * When the input type is `password`, it will default to `true`, hiding the text.\n */\n @Prop({ reflect: true, mutable: true })\n textHidden: boolean;\n\n /** Specifies the field's expected [input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types), and provides the optimal keyboard on mobile devices. */\n @Prop({ reflect: true })\n type: InputType = 'text';\n\n /**\n * Returns a read-only `ValidityState` object representing the validity states of the element.\n * [See MDN for more information on ValidityState](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState).\n */\n @Prop({ reflect: true, mutable: true })\n validity: ValidityState;\n\n /**\n * The value of the input field.\n * @info\n * The visible value of formatted input fields may not match the element's `value` property.\n * When setting an input's value programmatically (e.g. pre-populating a form), ensure that the supplied value is in a format that can be handled by its consuming logic.\n * `q2-input` does not change its own `value` outside of its default change event handler.\n *\n * In `q2-input` where `type=\"currency\"`\n * - element.value = 1234.56\n * - visible value: $1,234.56\n *\n */\n @Prop({ mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the field loses focus after the value has been changed.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<IEventDetail>;\n\n /**\n * Emitted when the field value is cleared.\n *\n * Requires the `clearable` prop to be set to `true`.\n */\n @Event()\n clear: EventEmitter<undefined>;\n\n /**\n * Emitted when the field value is formatted.\n */\n @Event()\n formatted: EventEmitter<IFormatterValueObject>;\n\n /**\n * Emitted when the field value is updated.\n * @legacyEvent\n */\n @Event()\n input: EventEmitter<IEventDetail>;\n\n /**\n * Emitted when the validation is updated.\n * @legacyEvent\n */\n @Event()\n invalid: EventEmitter<IEventDetail>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.manageClearableResizeObserver();\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n Object.defineProperty(this.hostElement, 'formattedValue', {\n get: () => this.formattedValueObject?.formattedValue ?? '',\n });\n\n handleAriaLabel(this);\n if (this.textHidden === undefined) {\n this.textHidden = this.type === 'password';\n }\n\n this.manageClearableResizeObserver(this.clearable);\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n\n if (!this.pseudo) this.inputField.value = this.formattedValueObject.formattedValue;\n if (!!this.autofocus) this.inputField.focus();\n\n this.initMutationObserver();\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('change')\n onHostElementChange(event: CustomEvent | Event) {\n if (!(event instanceof CustomEvent)) {\n event.stopPropagation();\n return;\n }\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onHostElementFocus(event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.inputField.focus();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * Emulates firing checkValidity on `<input>`, emits `invalid` event if validation failed.\n */\n @Method()\n async checkValidity() {\n this.inputRef.checkValidity();\n return this.validateInput();\n }\n\n /**\n * Emulates clicking the clear button when the input is clearable.\n *\n * @warning\n * Only applicable when the input is clearable.\n *\n * @testOnly\n */\n @Method()\n async clearValue() {\n if (!this.clearable) return;\n this.onClearInput();\n }\n\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * This method leaves the focus on the `<input>` and as a result does not trigger the `change` event. If you want\n * to trigger the` change` event, move the focus to another element after calling this method.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n const { inputField } = this;\n inputField.focus();\n inputField.dispatchEvent(new FocusEvent('focus'));\n inputField.value = value;\n inputField.dispatchEvent(new InputEvent('input'));\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('clearable')\n manageClearableResizeObserver(clearable?: boolean) {\n if ('ResizeObserver' in window === false) return;\n const isSmallThreshold = 190;\n if (clearable) {\n if (this.resizeObserver) return;\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver(([entry]) => {\n this.isSmall = isSmallThreshold > entry.contentRect.width;\n });\n this.resizeObserver.observe(this.hostElement);\n } else {\n this.isSmall = false;\n this.resizeObserver?.unobserve(this.hostElement);\n this.resizeObserver = null;\n }\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('formatModifier')\n formatModifierObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formattedValueObject')\n formattedValueObjectObserver() {\n this.formatted.emit(this.formattedValueObject);\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('type')\n typeObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('value')\n valueObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n // #endregion\n // #region Local Methods\n\n get ariaAttributes() {\n return {\n ariaActivedescendant: getAriaValueFromProp(this.ariaActivedescendant),\n ariaControls: getAriaValueFromProp(this.ariaControls),\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHaspopup: getAriaValueFromProp(this.ariaHaspopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaOwns: getAriaValueFromProp(this.ariaOwns),\n };\n }\n\n get canSetSelection(): boolean {\n // email and number type don't support setSelectionRange\n return !['email', 'number'].includes(this.computedType);\n }\n\n get clearClasses(): string[] {\n const classes = ['btn-clear'];\n if (!this.clearable || !(this.inputField?.value || this.value)) {\n classes.push('hidden');\n }\n return classes;\n }\n\n get computedAutocomplete(): string {\n // force off for currency type\n if (this.type === 'currency') return 'transaction-amount';\n return this.autocomplete || 'off';\n }\n\n get computedClassForIconLeft(): string | undefined {\n let className = 'icon-left';\n if (this.formattedValueObject.leftIconMuted) {\n className += ' icon-left-muted';\n }\n return className;\n }\n\n get computedIconLeft(): string | undefined {\n if (this.formattedValueObject.prefix) {\n return;\n }\n\n if (this.type === 'search') {\n return 'search';\n }\n\n if (this.formattedValueObject.leftIcon) {\n return this.formattedValueObject.leftIcon;\n }\n\n return this.iconLeft;\n }\n\n get computedType(): string {\n if (['password', 'text', 'ssn'].includes(this.type) && this.textHidden) {\n return 'password';\n } else {\n return (this.type && inputTypeMap[this.type]) || 'text';\n }\n }\n\n get hasCustomDisplaySlot(): boolean {\n return hasSlotContent(this.hostElement, 'custom-display');\n }\n\n get hasError(): boolean {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get hasInputLeftSlot(): boolean {\n return hasSlotContent(this.hostElement, 'input-left');\n }\n\n get hasInputRightSlot(): boolean {\n return hasSlotContent(this.hostElement, 'input-right');\n }\n\n get inputDescribedBy(): string | undefined {\n return this.showMessages ? `${this.inputId}-description` : undefined;\n }\n\n get inputField(): HTMLInputElement {\n return this.hostElement.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n }\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get inputMode() {\n const inputModeMap = {\n currency: 'numeric',\n ssn: 'numeric',\n tin: 'numeric',\n numeric: 'decimal',\n percentage: 'decimal',\n date: 'numeric',\n 'credit-card': 'numeric',\n };\n\n return (this.type && inputModeMap[this.type]) || undefined;\n }\n\n get isMaskedType(): boolean {\n const maskedTypes: string[] = [\n 'currency',\n 'phone',\n 'ssn',\n 'tin',\n 'alphanumeric',\n 'alpha',\n 'numeric',\n 'percentage',\n 'postal',\n 'date',\n 'credit-card',\n ];\n\n return maskedTypes.includes(this.type);\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get shouldCursorStartAtEnd(): boolean {\n return this.type === 'currency';\n }\n\n get shouldCursorStayAtEnd(): boolean {\n return this.isMobile && this.type === 'currency';\n }\n\n get showIconSeparator(): boolean {\n return this.type === 'credit-card' || !!this.formattedValueObject.prefix;\n }\n\n get showMessages(): boolean {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n get stringValue(): string {\n const notCoercable = Object.prototype.toString.call(this.value) === '[object Object]';\n return notCoercable ? '' : (this.value && String(this.value)) || '';\n }\n\n get visibilityToggleAriaLabel(): string {\n return `tecton.element.input.toggleAriaLabel.${this.textHidden ? 'show' : 'hide'}`;\n }\n\n get visibilityToggleText(): string {\n return loc(`tecton.element.input.toggle.${this.textHidden ? 'show' : 'hide'}`);\n }\n\n get wrapperClasses() {\n const classNames = ['field-container'];\n if (this.hasError) classNames.push('has-error');\n if (!!this.value) classNames.push('has-value');\n if (this.clearable && !!this.value) classNames.push('has-clear');\n if (this.hasFocus) classNames.push('has-focus');\n if (this.isSmall) classNames.push('is-small');\n if (this.formattedValueObject.prefix) classNames.push('has-prefix');\n if (this.computedIconLeft) classNames.push('has-icon-left');\n if (this.showIconSeparator) classNames.push('has-icon-separator');\n if (this.formattedValueObject.suffix) classNames.push('has-suffix');\n if (!this.formattedValueObject.suffix && this.iconRight) classNames.push('has-icon-right');\n if (this.type === 'currency') classNames.push('right-aligned');\n else classNames.push('left-aligned');\n if (this.hasCustomDisplaySlot) classNames.push('has-custom-display');\n\n return classNames.join(' ');\n }\n\n calculateCursorPositionOnFocus(): ICursorData {\n const { inputField } = this;\n const valueLength = inputField?.value?.length ?? 0;\n const startingPosition = inputField?.selectionStart ?? valueLength;\n\n return {\n startingPosition,\n valueLength,\n previousValueLength: valueLength,\n hasSelection: window.getSelection().toString().length > 0,\n };\n }\n\n calculateCursorPositionOnInput(): ICursorData {\n const input = this.inputField;\n const formattedLength = this.formattedValueObject.formattedValue.length;\n const currentValueLength = input.value.length;\n const defaultPosition = this.type === 'currency' ? formattedLength : 0;\n return {\n startingPosition: (input && input.selectionStart) || defaultPosition,\n valueLength: formattedLength,\n previousValueLength: input && currentValueLength,\n hasSelection: false,\n };\n }\n\n formatAndUpdateValueFromProp() {\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n if (!this.pseudo) {\n const setValue = () => {\n this.inputField.value = this.formattedValueObject.formattedValue;\n };\n\n this.inputField ? setValue() : this.scheduledAfterRender.push(() => setValue());\n }\n }\n\n getFormattedValue(value: string, valueChangedFromProperty: boolean): IFormatterValueObject {\n const formattingFunctions = {\n currency: formatCurrency,\n phone: formatPhoneNumber,\n ssn: formatSSN,\n tin: formatTIN,\n alphanumeric: formatAlphanumeric,\n alpha: formatAlpha,\n numeric: formatNumeric,\n percentage: formatPercentage,\n postal: formatPostalCode,\n date: formatDate,\n 'credit-card': formatCreditCard.format,\n };\n\n if (formattingFunctions[this.type]) {\n return formattingFunctions[this.type](value, this.formatModifier, valueChangedFromProperty);\n }\n\n return {\n value,\n formattedValue: value,\n fullyFormattedValue: value,\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n handleCurrencyDeletion(event: InputEvent) {\n // Don't do anything if text was selected for deletion\n if (this.textSelectedForDeletion) {\n this.textSelectedForDeletion = false;\n return;\n }\n // We only care about \"Backspace\" and \"Delete\" events\n if (!['deleteContentBackward', 'deleteContentForward'].includes(event.inputType)) return;\n\n const input = event.target as HTMLInputElement;\n const cursorPosition = input.selectionStart;\n const { formattedValue } = this.formattedValueObject;\n\n if (cursorPosition === null) return;\n\n let cursorMap;\n switch (event.inputType) {\n case 'deleteContentBackward':\n const valueBeforeCursor = formattedValue.substring(0, cursorPosition + 1);\n const isPrevCharAlphaNum = /[a-zA-Z0-9]$/.test(valueBeforeCursor);\n cursorMap = {\n leftIndex: isPrevCharAlphaNum ? cursorPosition : cursorPosition - 1,\n rightIndex: isPrevCharAlphaNum ? cursorPosition + 1 : cursorPosition,\n afterCursorOffset: 0,\n newCursorOffset: 1,\n };\n break;\n case 'deleteContentForward':\n const valueAfterCursor = formattedValue.substring(cursorPosition);\n const isNextCharAlphaNum = /^[a-zA-Z0-9]/.test(valueAfterCursor);\n cursorMap = {\n leftIndex: isNextCharAlphaNum ? cursorPosition : cursorPosition + 1,\n rightIndex: isNextCharAlphaNum ? cursorPosition + 1 : cursorPosition + 2,\n afterCursorOffset: 1,\n newCursorOffset: 0,\n };\n break;\n default:\n return;\n }\n\n // Ensure the cursor doesn't move with a newly formatted value\n const newValue = [\n formattedValue.substring(0, cursorMap.leftIndex),\n formattedValue.substring(cursorMap.rightIndex),\n ].join('');\n const charactersAfterCursor = formattedValue.length - cursorPosition - cursorMap.afterCursorOffset;\n const newFormattedValue = this.getFormattedValue(newValue, false).formattedValue;\n const newCursorPosition = Math.max(\n newFormattedValue.length - charactersAfterCursor + cursorMap.newCursorOffset,\n 0\n );\n\n input.value = newFormattedValue;\n input.setSelectionRange(newCursorPosition, newCursorPosition);\n\n // This handles a runtime issue when a character is deleted from the beginning of the input\n if (newCursorPosition === 0) {\n nextPaint(() => input.setSelectionRange(newCursorPosition, newCursorPosition));\n }\n }\n\n /**\n * Sets textSelectedForDeletion to true if the user has selected text for deletion\n * This is used to prevent other logic from running when text is deleted\n */\n handleCurrencyKeydown = (event: KeyboardEvent) => {\n if (!['Backspace', 'Delete'].includes(event.key)) return;\n const inputElement = this.inputField;\n this.textSelectedForDeletion = inputElement.selectionStart !== inputElement.selectionEnd;\n };\n\n handleDataInput(newFormattedValue: IFormatterValueObject) {\n if (\n this.maxlength === undefined ||\n newFormattedValue.unformattedValue.length <= this.maxlength ||\n newFormattedValue.unformattedValue.length <= this.formattedValueObject.unformattedValue.length\n ) {\n this.formattedValueObject = newFormattedValue;\n } else if (this.maxlength) {\n newFormattedValue = this.getFormattedValue(\n newFormattedValue.unformattedValue.substring(0, this.maxlength),\n false\n );\n this.formattedValueObject = newFormattedValue;\n }\n this.handleValueAndCursor();\n }\n\n handleValueAndCursor = () => {\n // ORDER IMPORTANT: calculate cursor position -> set value -> set cursor position\n const cursorPosition = this.calculateCursorPositionOnInput();\n // when type=number: returns only valid decimal on input event, should not update itself (e.g. typing \"1.\" )\n if (this.type !== 'number') this.inputField.value = this.formattedValueObject.formattedValue;\n this.input.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n if (!this.formattedValueObject.value) {\n this.clear.emit();\n }\n this.setCursorPosition(cursorPosition);\n };\n\n initMutationObserver = () => {\n if (!('MutationObserver' in window)) return;\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n };\n\n onClearInput = () => {\n const eventDetail = {\n value: '',\n formattedValue: '',\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n };\n this.input.emit(eventDetail);\n this.change.emit(eventDetail);\n this.clear.emit();\n this.inputField.focus();\n };\n\n onInputBlur = () => {\n this.hasFocus = false;\n setMessageHeight(this);\n if (this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputClick = () => {\n if (this.shouldCursorStayAtEnd) this.placeCursorAtEnd();\n };\n\n onInputFocus = () => {\n if (this.inputField.tagName === 'INPUT') {\n this.scheduledAfterRender.push(() => {\n if (this.isClickEvent && this.shouldCursorStartAtEnd) {\n this.placeCursorAtEnd();\n } else {\n this.setCursorPosition(this.calculateCursorPositionOnFocus());\n }\n this.isClickEvent = false;\n });\n }\n this.hasFocus = true;\n setMessageHeight(this);\n this.valueOnFocus = this.value;\n };\n\n onInputInput = (event: InputEvent) => {\n event.stopPropagation();\n if (this.type === 'currency') this.handleCurrencyDeletion(event);\n const newFormattedValue = this.getFormattedValue((event.target as HTMLInputElement).value, false);\n this.handleDataInput(newFormattedValue);\n this.validateInput();\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const keysThatMoveCursor = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n const { key } = event;\n\n if (this.type === 'currency') this.handleCurrencyKeydown(event);\n if (this.shouldCursorStayAtEnd && keysThatMoveCursor.includes(key)) event.preventDefault();\n if (key === 'Enter' && this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputMousedown = () => {\n this.isClickEvent = true;\n };\n\n onInputPaste = (event: ClipboardEvent) => {\n if (this.type === 'currency') {\n const clipboardData = event.clipboardData.getData('text');\n const newFormattedValue = this.getFormattedValue(clipboardData, true);\n event.preventDefault();\n this.handleDataInput(newFormattedValue);\n }\n };\n\n onMutationObserved = () => {\n // Updating checkSlotCount to force re-render when slot content changes\n this.checkSlotCount = this.checkSlotCount + 1;\n };\n\n onRefocusInput = () => {\n if (this.showMessages) {\n this.inputField.focus();\n setMessageHeight(this);\n }\n };\n\n onToggleVisibility = () => {\n this.hostElement.dispatchEvent(new FocusEvent('focus'));\n this.textHidden = !this.textHidden;\n };\n\n placeCursorAtEnd() {\n const { inputField } = this;\n inputField.selectionStart = inputField.selectionEnd = inputField.value.length;\n }\n\n setCursorPosition(cursorData: ICursorData) {\n if (this.canSetSelection && !cursorData.hasSelection) {\n const input = this.inputField;\n const { valueLength, previousValueLength, startingPosition } = cursorData;\n\n if (this.type === 'currency') {\n if (previousValueLength - valueLength === 1) {\n input.setSelectionRange(startingPosition - 1, startingPosition - 1);\n } else {\n const difference = previousValueLength - valueLength;\n input.setSelectionRange(startingPosition - difference, startingPosition - difference);\n }\n }\n\n if (this.type !== 'currency') {\n const difference = valueLength - previousValueLength;\n // Never allow the cursor to move in reverse\n const newPosition = startingPosition + (difference > 0 ? difference : 0);\n input.setSelectionRange(newPosition, newPosition);\n }\n }\n }\n\n validateInput = () => {\n this.validity = this.inputRef?.validity;\n if (this.validity?.valid === false) {\n this.invalid.emit();\n }\n return !!this.validity?.valid;\n };\n\n // #endregion\n // #region Render Methods\n\n renderCountDOM() {\n if (!this.showCount) return;\n const { maxlength, formattedValueObject } = this;\n\n return (\n <div class=\"count-tag\">\n {formattedValueObject.unformattedValue.length}\n {maxlength && `/${maxlength}`}\n </div>\n );\n }\n\n renderInputContainerDOM() {\n const { hasInputLeftSlot, hasInputRightSlot } = this;\n return (\n <div\n class=\"input-container\"\n tabindex={-1}\n test-id=\"inputContainer\"\n >\n <div class=\"input-icons-container-left\">\n {this.formattedValueObject.prefix && (\n <div class=\"input-prefix\">{this.formattedValueObject.prefix}</div>\n )}\n {this.computedIconLeft && (\n <div>\n <q2-icon\n type={this.computedIconLeft}\n class={this.computedClassForIconLeft}\n />\n </div>\n )}\n {hasInputLeftSlot && <slot name=\"input-left\" />}\n {this.showIconSeparator && <div class=\"vertical-separator\" />}\n {this.hasError && this.type === 'currency' && (\n <div\n test-id=\"divIconError\"\n onClick={this.onRefocusInput}\n >\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n </div>\n {this.pseudo ? this.renderPseudoInputDOM() : this.renderStandardInputDOM()}\n <div class=\"input-icons-container-right\">\n <q2-btn\n class={this.clearClasses.join(' ')}\n label={loc('tecton.element.input.clear', [this.label])}\n hideLabel={true}\n test-id=\"clearButton\"\n onClick={this.onClearInput}\n onKeyDown={e => e.stopPropagation()}\n >\n <q2-icon\n type=\"close\"\n class=\"icon-clear\"\n />\n </q2-btn>\n {['password', 'text', 'ssn', 'tin'].includes(this.type) && this.showVisibilityToggle && (\n <q2-btn\n class=\"btn-visibility-toggle\"\n test-id=\"toggleVisibilityButton\"\n onClick={this.onToggleVisibility}\n label={loc(this.visibilityToggleAriaLabel, { label: this.label })}\n hide-label={true}\n >\n {this.visibilityToggleText}\n </q2-btn>\n )}\n {this.formattedValueObject.suffix && (\n <span class=\"input-suffix\">{this.formattedValueObject.suffix}</span>\n )}\n {this.badgeValue && (\n <q2-badge\n size=\"large\"\n theme={this.badgeTheme}\n >\n {this.badgeValue}\n </q2-badge>\n )}\n {this.hasError && this.type !== 'currency' && (\n <div\n test-id=\"divIconError\"\n onClick={this.onRefocusInput}\n >\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n {this.iconRight && !this.formattedValueObject.suffix && (\n <div>\n <q2-icon\n type={this.iconRight}\n class=\"icon-right\"\n />\n </div>\n )}\n {hasInputRightSlot && <slot name=\"input-right\" />}\n </div>\n </div>\n );\n }\n\n renderPseudoInputDOM() {\n const showPlaceholder = !this.value && !!this.placeholder;\n const { ariaOwns, ariaHaspopup, ariaExpanded, ariaActivedescendant } = this.ariaAttributes;\n\n return (\n <div class=\"pseudo-input-container\">\n <button\n class=\"input-field\"\n type=\"button\"\n id={this.inputId}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-owns={ariaOwns}\n aria-haspopup={ariaHaspopup}\n aria-expanded={ariaExpanded}\n aria-activedescendant={ariaActivedescendant}\n role={(this.role && `${this.role}`) || 'textbox'}\n disabled={!!this.disabled}\n test-id=\"q2InputInnerClearButton\"\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n >\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\">\n <span class={showPlaceholder ? 'placeholder-text' : ''}>\n {showPlaceholder ? loc(this.placeholder) : loc(this.value)}\n </span>\n </slot>\n </div>\n </button>\n </div>\n );\n }\n\n renderStandardInputDOM() {\n const { hasCustomDisplaySlot } = this;\n const inputClasses = ['input-field'];\n const { ariaOwns, ariaHaspopup, ariaActivedescendant } = this.ariaAttributes;\n if (hasCustomDisplaySlot) inputClasses.push('sr');\n return (\n <Fragment>\n {hasCustomDisplaySlot && (\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\"></slot>\n </div>\n )}\n <input\n ref={el => (this.inputRef = el)}\n class={inputClasses.join(' ')}\n id={this.inputId}\n type={this.computedType}\n size={this.formattedValueObject.prefix ? 10 : undefined}\n maxlength={['date', 'currency'].includes(this.type) ? undefined : this.maxlength || undefined}\n max={this.max}\n min={this.min}\n step={this.step}\n aria-current={this.current || undefined}\n aria-describedby={this.inputDescribedBy}\n aria-required={`${!this.optional}`}\n aria-invalid={`${this.hasError}`}\n aria-owns={ariaOwns}\n aria-haspopup={ariaHaspopup}\n aria-activedescendant={ariaActivedescendant}\n autocomplete={this.computedAutocomplete}\n autocapitalize={this.autocapitalize}\n autocorrect={this.autocorrect === 'on' ? 'on' : 'off'}\n autofocus={this.autofocus}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n test-id=\"inputField\"\n readonly={this.readonly || this._preventEntry}\n disabled={!!this.disabled}\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n onClick={this.onInputClick}\n onKeyDown={this.onInputKeydown}\n onMouseDown={this.onInputMousedown}\n onInput={this.onInputInput}\n onPaste={this.onInputPaste}\n inputmode={this.inputMode}\n pattern={this.pattern || undefined}\n />\n </Fragment>\n );\n }\n\n render() {\n const { ariaControls, ariaExpanded } = this.ariaAttributes;\n return (\n <Host\n role={this._role}\n aria-controls={ariaControls}\n aria-expanded={ariaExpanded}\n >\n <div class={this.wrapperClasses}>\n <div class=\"label-wrapper\">\n {renderLabel(this)}\n {this.renderCountDOM()}\n </div>\n {this.renderInputContainerDOM()}\n {renderMessages(this)}\n </div>\n </Host>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/utility.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n}\n\n:host([inline]),\n:host([modifiers*='inline']) {\n display: inline-block;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n:host(:not([inline]):not([modifiers*='inline'])) {\n font-size: var-list(var-prefixer(loading-spinner-size), --app-scale-12x, 60px);\n}\n\n.q2-loading-animation {\n height: 1em;\n width: 1em;\n}\n\n#custom-loader-container {\n min-height: 1em;\n min-width: 1em;\n\n svg {\n display: block;\n }\n}\n\n@import './spinners/half-circle-spinner.scss';\n@import './skeleton/skeleton.scss';\n","import { Component, Prop, h, ComponentInterface, Listen, Element, Watch, State } from '@stencil/core';\nimport { handleAriaLabel, loc } from 'src/utils';\nimport skeletonShapes from './skeleton/shapes';\nimport { getOrCreateSpriteContainer } from '@/utils/sprites';\n\n@Component({ tag: 'q2-loading', shadow: true, styleUrl: 'q2-loading.scss' })\nexport class Q2Loading implements ComponentInterface {\n // #region Own Properties\n\n ariaLiveTimer;\n dontUpdateScreenReaderLabel = false;\n observer: IntersectionObserver;\n screenReaderElement: HTMLElement;\n liveRegionChangeIndicatorToggle = false;\n customLoaderClass = 'tct-loading-custom-loader';\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n loaderClone: SVGElement;\n\n @State()\n hasCustomLoader: boolean = false;\n\n // #endregion\n // #region Public Property API\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n /**\n * Numeric adjustments are available for specific `type` and `shape` combinations.\n * These may impact the number of items, columns, and/or rows that display.\n *\n * When `shape=\"text\"`, `shape=\"detailed-item\"`, or `shape=\"label-value\"`, the `counts` attribute determines the number of rows to display.\n *\n * When `shape=\"table\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\"` = Provides a skeleton table of `C` columns and `R` rows. The default value is `\"5x5\"\n * 2. `counts=\"N\"` - Provides a skeleton table of `N` columns and 5 rows.\n *\n * When `shape=\"form\"`, the `counts` attribute can be used in two ways:\n *\n * 1. `counts=\"CxR\" - Provides a skeleton form of `C` columns and `R` rows of fields. The default value is `\"1x1\"`.\n * 2. `counts=\"N\"` - Provides a skeleton form of `N` fields stacked in single columns.\n */\n @Prop({ reflect: true })\n counts: string;\n\n /** Styles the component to have a `height` and `width` of `1em`, making it easy to place alongside text. */\n @Prop({ reflect: true })\n inline: boolean;\n\n /**\n * The label that is associated with the component. This is not displayed visually but is presented by screen readers.\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /**\n * Visual adjustments available to specific type and shape combinations, written as a hyphen (`-`) separated string.\n *\n * Supported values depend on the type and shape selected, and are listed in detail in the shape sections above.\n */\n @Prop({ reflect: true })\n modifiers: string;\n\n /** Hides the loading element from screen readers. */\n @Prop({ reflect: true })\n hideFromScreenReaders: boolean = false;\n\n /**\n * The specific visual presentation of a loading element `type`.\n * @snippet\n * // when type=\"spinner\"\n * type ShapeValues = \"half-circle\";\n * // when type=\"skeleton\"\n * type ShapeValues = \"circle | \"rectangle\" | \"text\" | \"table\" | \"field\" | \"form\" | \"detailed-item\" | \"label-value\";\n */\n @Prop({ reflect: true })\n shape: string;\n\n /** The type of loading element to display. */\n @Prop({ reflect: true })\n type: 'brand' | 'spinner' | 'skeleton';\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback(): void {\n this.cleanupLiveRegionDelay();\n }\n\n componentWillLoad() {\n handleAriaLabel(this);\n this.handleType();\n }\n\n componentDidLoad(): void {\n this.setupLiveRegionDelay();\n }\n\n componentDidUpdate(): void {\n this.updateScreenReaderLabel();\n }\n\n componentDidRender(): void {\n if (!this.loaderClone) return;\n if (!this.hasCustomLoader) return;\n const customLoaderContainer = this.hostElement.shadowRoot.querySelector('#custom-loader-container');\n customLoaderContainer.querySelector(`svg.${this.customLoaderClass}`)?.remove();\n customLoaderContainer.appendChild(this.loaderClone);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('tctUpdateLoaders', { target: 'document' })\n onUpdateLoaders() {\n const { customLoaderURL } = this;\n this.hasCustomLoader = !!customLoaderURL;\n this.fetchLoader();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('type')\n handleType() {\n this.fetchLoader();\n }\n\n async fetchLoader() {\n const { isSkeletonType, customLoaderURL } = this;\n this.hasCustomLoader = false;\n if (isSkeletonType) {\n return;\n }\n\n if (!customLoaderURL) return;\n this.hasCustomLoader = true;\n\n let { customLoaderElement } = this;\n const loaderExists = this.checkForLoader();\n\n if (loaderExists) return;\n\n try {\n const response = await fetch(customLoaderURL);\n\n // Check for HTTP errors (including CORS issues that return error status)\n if (!response.ok) {\n throw new Error(\n `HTTP ${response.status}: Failed to fetch SVG. ` +\n `This may be due to incorrect URL, server error, or CORS restrictions.`\n );\n }\n\n const svgText = await response.text();\n const parser = new DOMParser();\n const svgDoc = parser.parseFromString(svgText, 'image/svg+xml');\n const svg = svgDoc.querySelector('svg');\n\n if (!svg) throw new Error('No SVG found in the loaded content');\n\n svg.dataset.loaded = '';\n svg.dataset.url = customLoaderURL;\n svg.classList.add(this.customLoaderClass);\n\n customLoaderElement = this.customLoaderElement;\n if (!customLoaderElement) return;\n if (typeof customLoaderElement.replaceWith === 'function') {\n customLoaderElement.replaceWith(svg);\n } else {\n customLoaderElement.parentNode.replaceChild(svg, customLoaderElement);\n }\n\n svg.dispatchEvent(new CustomEvent(this.loaderEventName, { bubbles: true }));\n } catch (error) {\n // Provide more specific error messaging for common issues\n if (error instanceof TypeError && error.message === 'Failed to fetch') {\n console.error(\n `Failed to load custom loader from ${customLoaderURL}. ` +\n `This is likely due to a CORS (Cross-Origin Resource Sharing) error. ` +\n `Ensure the server hosting the SVG includes proper CORS headers ` +\n `(Access-Control-Allow-Origin) or host the SVG on the same domain.`,\n error\n );\n } else {\n console.error(`Failed to load custom loader SVG from ${customLoaderURL}:`, error);\n }\n }\n }\n // #endregion\n // #region Local Methods\n\n get customLoaderURL() {\n const hostComputedStyles = window.getComputedStyle(this.hostElement);\n const loadingVariableURL = hostComputedStyles.getPropertyValue(\n `--tct-loading-custom-${this.type || 'spinner'}-url`\n );\n if (!loadingVariableURL) return;\n\n return loadingVariableURL.trim().replace(/^url\\(['\"]?|['\"]?\\)$/g, '');\n }\n\n get isSkeletonType() {\n return this.type === 'skeleton';\n }\n\n get loaderEventName() {\n const { type = 'spinner', isSkeletonType } = this;\n if (isSkeletonType) return;\n return `tct-loaded-${type}`;\n }\n\n get customLoaderElement() {\n const { customLoaderURL, customLoaderClass } = this;\n if (!customLoaderURL) return;\n return document.querySelector<HTMLElement>(`.${customLoaderClass}[data-url=\"${customLoaderURL}\"]`);\n }\n\n get countsArray(): number[] {\n if (this.type !== 'skeleton' || !this.counts) {\n return undefined;\n }\n\n return this.counts.split('x').map(Number);\n }\n\n get localizedLabel() {\n return loc(this.label || this.ariaLabel || 'tecton.element.loading.ariaLabel');\n }\n\n get modifiersSet(): Set<string> {\n if (this.type !== 'skeleton' || !this.modifiers) {\n return undefined;\n }\n\n return new Set(this.modifiers.split('-'));\n }\n\n get skeletonShape() {\n return skeletonShapes[this.shape]?.(this.countsArray, this.modifiersSet) ?? '';\n }\n\n checkForLoader() {\n const { loaderEventName, customLoaderClass } = this;\n const spriteContainer = getOrCreateSpriteContainer();\n let { customLoaderElement } = this;\n\n // If the loading element exists and has the `data-loaded` attribute, we know we have everything we need\n if (customLoaderElement?.hasAttribute('data-loaded')) {\n this.cloneLoaderNode();\n return true;\n }\n\n // If the loading element exists but does not have the `data-loaded` attribute, we know it's being loaded\n // We'll listen for the event that will be dispatched when the element is loaded\n spriteContainer.addEventListener(\n loaderEventName,\n () => {\n this.cloneLoaderNode();\n },\n { once: true }\n );\n\n // If the loading element exists, we know it's being loaded and will be handled by the event listener\n if (customLoaderElement) return true;\n\n // If loading element does not exist, create a placeholder\n // This will let other icons know the element is being loaded and prevent multiple fetches\n customLoaderElement = document.createElement('div');\n customLoaderElement.classList.add(customLoaderClass);\n customLoaderElement.dataset.url = this.customLoaderURL;\n spriteContainer.appendChild(customLoaderElement);\n return false;\n }\n\n cloneLoaderNode() {\n const { customLoaderElement } = this;\n this.loaderClone = customLoaderElement ? (customLoaderElement.cloneNode(true) as SVGElement) : undefined;\n }\n\n cleanupLiveRegionDelay() {\n if (this.hideFromScreenReaders) return;\n\n clearTimeout(this.ariaLiveTimer);\n this.observer.disconnect();\n this.observer = null;\n }\n\n setupLiveRegionDelay() {\n if (this.hideFromScreenReaders) return;\n\n // The screen reader element starts out empty and is then populated by the\n // label text after a delay to ensure that it is announced by screen\n // readers.\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: [1],\n };\n this.observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n clearTimeout(this.ariaLiveTimer);\n this.ariaLiveTimer = setTimeout(() => {\n if (this.screenReaderElement) {\n this.screenReaderElement.textContent = `${this.localizedLabel}${this.liveRegionChangeIndicatorToggle ? '.' : ''}`;\n }\n this.liveRegionChangeIndicatorToggle = !this.liveRegionChangeIndicatorToggle;\n this.dontUpdateScreenReaderLabel = false;\n }, 2000);\n } else {\n clearTimeout(this.ariaLiveTimer);\n if (this.screenReaderElement) {\n this.screenReaderElement.textContent = '';\n }\n this.dontUpdateScreenReaderLabel = true;\n }\n });\n }, options);\n this.observer.observe(this.hostElement);\n }\n\n updateScreenReaderLabel() {\n if (this.dontUpdateScreenReaderLabel) return;\n if (!this.screenReaderElement) return;\n this.screenReaderElement.textContent = this.localizedLabel;\n }\n\n // #endregion\n // #region Render Methods\n\n renderHalfCircleSpinner = () => {\n return (\n <div\n class=\"q2-loading-animation half-circle-spinner\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n <div class=\"circle circle-1\"></div>\n <div class=\"circle circle-2\"></div>\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n get renderLoader() {\n const loaderMap = {\n default: this.renderSpinner,\n spinner: this.renderSpinner,\n skeleton: this.renderSkeletonLoader,\n custom: this.renderCustomLoaderContainer,\n };\n const { type, hasCustomLoader } = this;\n const loaderMapKey = hasCustomLoader ? 'custom' : type;\n\n return loaderMap[loaderMapKey] || loaderMap.default;\n }\n\n renderCustomLoaderContainer = () => {\n return (\n <div\n id=\"custom-loader-container\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n renderSkeletonLoader = () => {\n return (\n <div\n class=\"q2-loading-skeleton\"\n aria-hidden={this.hideFromScreenReaders ? 'true' : undefined}\n aria-live={!this.hideFromScreenReaders ? 'polite' : undefined}\n role={!this.hideFromScreenReaders ? 'status' : undefined}\n >\n {this.shape === 'custom' ? <slot /> : this.skeletonShape}\n <div class=\"q2-loading-skeleton-shimmer\"></div>\n {!this.hideFromScreenReaders && (\n <div\n class=\"sr\"\n ref={el => (this.screenReaderElement = el)}\n ></div>\n )}\n </div>\n );\n };\n\n renderSpinner = () => {\n return this.renderHalfCircleSpinner();\n };\n\n render() {\n return this.renderLoader();\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n position: relative;\n}\n\nbutton {\n cursor: pointer;\n margin: 0;\n}\n\n.tab-container {\n position: relative;\n}\n\nul {\n --comp-container-padding: #{var-list(--tct-scale-1, --app-scale-1x, 5px)\n var-list(--tct-scale-1, --app-scale-1x, 5px) 0};\n padding: var-list(var-prefixer(tab-container-padding), --comp-container-padding);\n margin: var-list(var-prefixer(tab-container-margin), 0);\n display: flex;\n gap: var-list(var-prefixer(tab-gap), --tct-scale-1, --app-scale-1x, 5px);\n list-style: none;\n border-bottom-width: var-list(--tct-tab-container-border-width, 1px);\n border-bottom-style: var-list(--tct-tab-container-border-style, solid);\n border-bottom-color: var-list(\n var-prefixer(tab-container-border-color),\n --tct-gray-11,\n --t-gray-11,\n --tct-gray-l1,\n --app-gray-l1,\n #cccccc\n );\n overflow-x: auto;\n align-items: center;\n @include hidden-scrollbar();\n\n @media print {\n &.no-print {\n display: none;\n }\n }\n}\n\nli {\n flex: 0 0 auto;\n\n button {\n background: var-list(--tct-tab-inactive-background, var-prefixer(tab-inactive-bg-color), transparent);\n border-width: var-list(var-prefixer(tab-inactive-border-width), unquote('0 0 3px 0'));\n border-color: var-list(var-prefixer(tab-inactive-border-color), transparent);\n border-style: var-list(var-prefixer(tab-inactive-border-style), solid);\n border-radius: var-list(var-prefixer(tab-border-radius), 0);\n width: var-list(var-prefixer(tab-width), 100%);\n text-align: var-list(var-prefixer(tab-text-align), center);\n text-decoration: var-list(var-prefixer(tab-text-decoration), none);\n padding: var-list(var-prefixer(tab-padding), --tct-scale-2, --app-scale-2x, 10px);\n color: var-list(var-prefixer(tab-inactive-color), inherit);\n font-size: var-list(var-prefixer(tab-font-size), 17px);\n display: block;\n transition:\n background var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs),\n border-color var(--t-tween-ease-inout) var(--t-tween-time-in-xxs);\n\n :host([type='section']) & {\n --comp-tab-section-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: var-list(--tct-tab-section-font-size, inherit);\n padding: var-list(var-prefixer(tab-section-padding), --comp-tab-section-padding);\n }\n\n &:hover {\n color: var-list(var-prefixer(tab-hover-color), var-prefixer(tab-active-color), #2e2e2e);\n background: var-list(--tct-tab-hover-background, var-prefixer(tab-hover-bg-color), inherit);\n width: var-list(var-prefixer(tab-hover-width), 100%);\n }\n\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-active-color), #2e2e2e);\n border-color: var-list(var-prefixer(tab-active-border-color), currentcolor);\n border-style: var-list(var-prefixer(tab-active-border-style), solid);\n width: var-list(var-prefixer(tab-active-width), 100%);\n background: var-list(--tct-tab-active-background, var-prefixer(tab-active-bg-color), inherit);\n }\n\n :host([color='alt']) & {\n color: var-list(var-prefixer(tab-alt-inactive-color), inherit);\n\n &:hover,\n &[aria-selected='true'] {\n color: var-list(var-prefixer(tab-alt-active-color), inherit);\n }\n }\n\n @media screen and (max-width: 767px) {\n --comp-tab-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px)\n var-list(--tct-scale-1, --app-scale-1x, 5px)};\n font-size: inherit;\n padding: var-list(var-prefixer(tab-padding), --comp-tab-padding);\n }\n }\n}\n\n.tab-content {\n --comp-tab-content-padding: #{var-list(--tct-scale-2, --app-scale-2x, 10px) 0};\n padding: var-list(\n --tct-tab-container-content-padding,\n var-prefixer(tab-content-padding),\n --comp-tab-content-padding\n );\n background: var-list(--tct-tab-container-content-backgrond, none);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n}\n\n.gradient-left,\n.gradient-right {\n z-index: 1;\n position: absolute;\n top: 0;\n height: 100%;\n width: 44px;\n}\n\n.gradient-left {\n background-image: linear-gradient(to left, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n left: 0;\n}\n\n.gradient-right {\n background-image: linear-gradient(to right, var(--t-base-a0), var(--t-base-a2) 10%, var(--t-base) 100%);\n right: 0;\n}\n\n.btn-left,\n.btn-right {\n --tct-icon-size: 18px;\n --tct-btn-icon-hover-background: transparent;\n --tct-btn-icon-width: 22px;\n --tct-icon-stroke-primary: #{var-list(var-prefixer(stepper-scroll-arrow-color), --t-text, #4d4d4d)};\n\n position: absolute;\n top: calc(50% - 22px);\n z-index: 2;\n q2-icon {\n --tct-icon-stroke-width: 3;\n }\n}\n\n.btn-left {\n left: 0;\n}\n\n.btn-right {\n right: 0;\n}\n\n.tab-pane-badge {\n display: flex;\n justify-content: space-between;\n align-items: center;\n q2-badge {\n margin-left: 5px;\n margin-right: 5px;\n }\n}\n","import {\n Component,\n ComponentInterface,\n Prop,\n Element,\n Event,\n EventEmitter,\n State,\n Listen,\n Watch,\n h,\n Fragment,\n Method,\n} from '@stencil/core';\nimport { createGuid, loc, overrideFocus, isEventFromElement } from 'src/utils';\nimport { JSX } from '../../components';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\ntype TabPane = {\n label: string;\n value: string;\n badgeCount: number;\n badgeDescription: string;\n badgeTheme: Q2Badge['theme'];\n badgeStatus: Q2Badge['status'];\n};\n\n@Component({ tag: 'q2-tab-container', shadow: true, styleUrl: 'q2-tab-container.scss' })\nexport class Q2TabContainer implements ComponentInterface {\n // #region Own Properties\n\n guid: number = createGuid();\n hasValidTab: boolean = false;\n lastScrolled: number = new Date(null).getTime();\n listElement: HTMLUListElement;\n mutationObserver: MutationObserver;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n hasLeft: boolean = false;\n\n @State()\n hasRight: boolean = false;\n\n @State()\n scrollEnabled: boolean = false;\n\n @State()\n showScrollLeft: boolean = false;\n\n @State()\n showScrollRight: boolean = false;\n\n @State()\n tabs: TabPane[];\n\n // #endregion\n // #region Public Property API\n\n /**\n * Controls which variables are used to color the tab controls.\n *\n * - `undefined` (default)\n * - Uses `--t-tab-active` and `--t-tab-inactive`.\n * - `alt`\n * - Uses `--t-tab-alt-active` and `--t-tab-alt-inactive`.\n * - The default fallback for these variables is `inherit`.\n */\n @Prop({ reflect: true })\n color: 'alt' | undefined;\n\n /**\n * Used to establish a relationship between `q2-tab-container` and its associated tab panes.\n * @warning\n * The element can fail if this property is not set. Nested tab containers without the `name` property will not render correctly.\n */\n @Prop({ reflect: true })\n name: string;\n\n /** Controls visibility of tab list in a print view. Tab content will still be visible even if `noPrint` is true. */\n @Prop({ reflect: true })\n noPrint: boolean = false;\n\n /** Determines the font size of the tab controls. */\n @Prop({ reflect: true })\n type: 'main' | 'section';\n\n /** Corresponds to the value of the selected tab pane. */\n @Prop({ reflect: true, mutable: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the selected tab changes.\n * @legacyEvent\n */\n @Event()\n change: EventEmitter<{ value: string }>;\n\n /**\n * Emitted when the component has finished rendering.\n * @private\n */\n @Event()\n settled: EventEmitter<undefined>;\n\n // #endregion\n // #region Component Lifecycle Events\n\n disconnectedCallback() {\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n componentWillLoad() {\n const observer = new MutationObserver(() => this.updateTabs());\n observer.observe(this.hostElement, { childList: true, attributes: true });\n this.mutationObserver = observer;\n this.resizeObserver = new ResizeObserver(() => this.checkScrollState());\n this.updateTabs();\n }\n\n componentDidLoad() {\n this.resizeObserver?.observe(this.listElement);\n this.checkScrollState();\n overrideFocus(this.hostElement);\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.settled.emit();\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('badge')\n onBadge() {\n this.setTabs();\n }\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n @Listen('focus')\n onFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n const index = this.tabs.findIndex(el => el.value === this.selectedTabValue);\n this.moveToTab(index, true);\n }\n\n @Listen('resize', { target: 'window' })\n onResize() {\n this.checkScrollState();\n }\n\n // #endregion\n // #region Public Methods API\n\n /**\n * A method to select a tab pane corresponding with the value.\n *\n * @testOnly\n */\n @Method()\n async selectTab(value: string) {\n const paneButton = this.hostElement.shadowRoot.querySelector(`[test-id=\"tabLink\"][data-value=\"${value}\"]`);\n (paneButton as HTMLButtonElement)?.click();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('name')\n nameObserver() {\n this.updateTabs();\n }\n\n @Watch('value')\n valueObserver() {\n this.updateTabs();\n this.scheduledAfterRender.push(this.resizeIframe);\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index > -1) {\n this.scheduledAfterRender.push(() => this.moveToTab(index, false));\n }\n }\n\n // #endregion\n // #region Local Methods\n\n get selectedTabValue() {\n return this.value || '';\n }\n\n get tabList() {\n return this.hostElement.shadowRoot.querySelector('.tab-list');\n }\n\n get tabPanes() {\n const tabPanes = this.hostElement.querySelectorAll<HTMLQ2TabPaneElement | HTMLTectonTabPaneElement>(\n 'q2-tab-pane, tecton-tab-pane'\n );\n\n if (tabPanes.length === 0) {\n return [];\n }\n\n return Array.from(tabPanes).filter(pane => pane.name === this.name);\n }\n\n checkScrollState = () => {\n if (!this.listElement) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n this.scrollEnabled = scrollWidth > clientWidth;\n this.showScrollLeft = scrollLeft > 0;\n this.showScrollRight = scrollWidth > Math.ceil(scrollLeft) + clientWidth;\n };\n\n determineTabMove() {\n if (!this.tabs) return;\n const index = this.tabs.findIndex(el => el.value === this.value);\n if (index === -1) return;\n this.moveToTab(index, false);\n }\n\n moveToAdjacentTab = (value: string, direction: 'next' | 'prev' | 'first' | 'last') => {\n const index = this.tabs.map(({ value }) => value).indexOf(value);\n\n let newIndex;\n switch (direction) {\n case 'next':\n newIndex = Math.min(index + 1, this.tabs.length - 1);\n break;\n\n case 'prev':\n newIndex = Math.max(index - 1, 0);\n break;\n\n case 'first':\n newIndex = 0;\n break;\n\n case 'last':\n newIndex = this.tabs.length - 1;\n break;\n }\n\n if (index === newIndex) return;\n\n this.moveToTab(newIndex, true);\n };\n\n moveToTab = (index: number, shouldFocus: boolean = true) => {\n const focusedValue = this.tabs[index].value;\n const focusedTab = this.listElement.querySelector<HTMLButtonElement>(`[data-value=\"${focusedValue}\"]`);\n if (shouldFocus) {\n focusedTab.focus({ preventScroll: true });\n }\n\n const left = focusedTab.offsetLeft - this.listElement.clientWidth / 2;\n this.listElement.scrollTo({\n left,\n behavior: 'smooth',\n });\n };\n\n onScrollBtnClick = (direction?: 'left' | 'right') => {\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n const halfWidth = Math.floor(clientWidth / 2);\n let scrollAmount: number = 0;\n if (direction === 'left') {\n scrollAmount = -Math.min(halfWidth, Math.abs(scrollLeft));\n } else {\n scrollAmount = Math.min(halfWidth, Math.abs(scrollWidth - scrollLeft - clientWidth));\n }\n this.listElement.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n onSlotChange = () => {\n this.checkScrollState();\n };\n\n onTabClick = (event: MouseEvent) => {\n const targetValue = ((event.target as HTMLButtonElement).closest('button[role=\"tab\"]') as HTMLButtonElement)\n .dataset.value;\n const isAlreadySelected = this.value === targetValue;\n if (isAlreadySelected) return;\n\n this.change.emit({\n value: targetValue,\n });\n };\n\n onTabKeyDown = (event: KeyboardEvent) => {\n const value = (event.target as HTMLElement).dataset.value;\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'next');\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'prev');\n break;\n\n case 'Home':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'first');\n break;\n\n case 'End':\n event.preventDefault();\n this.moveToAdjacentTab(value, 'last');\n break;\n\n case 'Space':\n case 'Enter':\n event.preventDefault();\n this.change.emit({ value });\n break;\n }\n };\n\n resizeIframe() {\n return window.TectonElements?.resizeIframe?.();\n }\n\n setTabs = () => {\n this.tabs = this.tabPanes.map(({ label, value, badgeCount, badgeDescription, badgeTheme, badgeStatus }) => ({\n label: (label && loc(label)) || '',\n value,\n badgeCount,\n badgeDescription,\n badgeTheme,\n badgeStatus,\n }));\n };\n\n updateTabPaneProps = () => {\n this.tabPanes.forEach((tab, index) => {\n tab.selected = tab.value === this.selectedTabValue;\n tab.guid = this.guid;\n tab.index = index;\n });\n };\n\n updateTabs = () => {\n const validTabPreUpdate = this.hasValidTab;\n this.updateTabPaneProps();\n this.setTabs();\n // Check if we now have a valid tab\n this.hasValidTab = this.tabs.some(tab => tab.value === this.value);\n // Only move if we didn't have a valid tab before but do now\n if (!validTabPreUpdate && this.hasValidTab) {\n this.scheduledAfterRender.push(() => this.determineTabMove());\n }\n };\n\n // #endregion\n // #region Render Methods\n\n renderTab(tab: TabPane, index: number): JSX.IntrinsicElements {\n const { label, value } = tab;\n const isSelected = this.selectedTabValue === value;\n return (\n <li role=\"presentation\">\n <button\n id={`tab-${this.guid}-${index}`}\n data-value={value}\n test-id=\"tabLink\"\n tabIndex={isSelected ? 0 : -1}\n role=\"tab\"\n aria-selected={`${isSelected}`}\n onClick={this.onTabClick}\n onKeyDown={this.onTabKeyDown}\n >\n {tab.badgeCount === undefined ? label : this.renderTabWithBadge(tab, isSelected)}\n </button>\n </li>\n );\n }\n\n renderTabWithBadge(tab: TabPane, isSelected: boolean): JSX.IntrinsicElements {\n let theme;\n if (!tab.badgeStatus && isSelected) theme = tab.badgeTheme || 'primary';\n let description;\n if (tab.badgeDescription) description = loc(tab.badgeDescription);\n else if (tab.badgeStatus) description = loc(`tecton.element.tab.pane.${tab.badgeStatus}`, [tab.badgeCount]);\n else description = loc('tecton.element.tab.pane.new');\n\n return (\n <div\n class=\"tab-pane-badge\"\n aria-label={`${tab.label}, ${tab.badgeCount} ${description}`}\n >\n {tab.label}\n <q2-badge\n value={tab.badgeCount}\n theme={theme}\n status={tab.badgeStatus}\n />\n </div>\n );\n }\n\n render() {\n return (\n <Fragment>\n <div class=\"tab-container\">\n {this.scrollEnabled && (\n <Fragment>\n <div\n class=\"gradient-left\"\n hidden={!this.showScrollLeft}\n ></div>\n <div\n class=\"gradient-right\"\n hidden={!this.showScrollRight}\n ></div>\n\n <q2-btn\n class=\"btn-left\"\n hidden={!this.showScrollLeft}\n onClick={() => this.onScrollBtnClick('left')}\n >\n <q2-icon\n type=\"chevron-left\"\n label=\"scroll left\"\n ></q2-icon>\n </q2-btn>\n\n <q2-btn\n class=\"btn-right\"\n hidden={!this.showScrollRight}\n onClick={() => this.onScrollBtnClick('right')}\n >\n <q2-icon\n type=\"chevron-right\"\n label=\"scroll right\"\n ></q2-icon>\n </q2-btn>\n </Fragment>\n )}\n\n <ul\n onScroll={this.checkScrollState}\n ref={el => (this.listElement = el)}\n class={this.noPrint ? 'no-print' : null}\n role=\"tablist\"\n >\n {this.tabs.map((tab, index) => this.renderTab(tab, index))}\n </ul>\n </div>\n <div class=\"tab-content\">\n <slot onSlotchange={() => this.onSlotChange()} />\n </div>\n </Fragment>\n );\n }\n\n // #endregion\n}\n","@import '../../styles/host.scss';\n\n.tab-pane[aria-hidden='true'] {\n display: none;\n}\n\n.tab-pane:focus {\n outline: none;\n box-shadow: none;\n}\n\n","import { Component, ComponentInterface, Prop, Event, EventEmitter, Watch, h } from '@stencil/core';\nimport { Q2Badge } from '../q2-badge/q2-badge';\n\n@Component({ tag: 'q2-tab-pane', shadow: true, styleUrl: 'q2-tab-pane.scss' })\nexport class Q2TabPane implements ComponentInterface {\n // #region Public Property API\n\n /** Adds a `q2-badge` component with the number provided right next to the tab pane label. */\n @Prop({ reflect: true })\n badgeCount: number;\n\n /**\n * The text that will be pronounced alongside `badgeCount` when the screen reader presents the tab.\n * @localizable\n */\n @Prop({ reflect: true })\n badgeDescription: string;\n\n /** Allows you to specify the status of the tab, which is always visible. */\n @Prop({ reflect: true })\n badgeStatus: Q2Badge['status'];\n\n /** Allows you to specify the color of the badge when the tab is active. */\n @Prop({ reflect: true })\n badgeTheme: Q2Badge['theme'];\n\n /**\n * Used by q2-tab-container to apply a unique id to each tab pane\n * @private\n */\n @Prop()\n guid: number;\n\n /**\n * Used by q2-tab-container to indicate the pane's index\n * @private\n */\n @Prop()\n index: number;\n\n /**\n * Serves as the text that will be visible in the tab control provided by `q2-tab-container`.\n * @localizable\n */\n @Prop({ reflect: true })\n label: string;\n\n /**\n * Used by q2-tab-container to apply a name to all options in the group\n * @private\n */\n @Prop({ reflect: true })\n name: string;\n\n /**\n * Used by q2-tab-container to indicate the option is selected\n * @private\n */\n @Prop({ reflect: true })\n selected: boolean;\n\n /** Serves as the pane's value. Should correspond to the `q2-tab-container` value. */\n @Prop({ reflect: true })\n value: string;\n\n // #endregion\n // #region Events\n\n /**\n * Emitted when the badge count, description, theme, or status changes.\n * @private\n */\n @Event({ bubbles: true })\n badge: EventEmitter<boolean>;\n\n // #endregion\n // #region Watchers\n\n @Watch('badgeCount')\n @Watch('badgeDescription')\n @Watch('badgeTheme')\n @Watch('badgeStatus')\n badgeObserver() {\n this.badge.emit();\n }\n\n // #endregion\n // #region Render Methods\n\n render() {\n return (\n <div\n id={`tab-pane-${this.guid}-${this.index}`}\n class={`tab-pane${this.selected ? '' : ' hidden'}`}\n role=\"tabpanel\"\n tabindex=\"-1\"\n aria-hidden={`${!this.selected}`}\n aria-labelledby={`tab-${this.guid}-${this.index}`}\n >\n <slot />\n </div>\n );\n }\n\n // #endregion\n}\n"],"mappings":"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","ignoreList":[]}
|