@uniqode/card-templates 1.0.0

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/index.js ADDED
@@ -0,0 +1 @@
1
+ var n={59:function(n,e,t){function a(n){return!(!n||"string"!=typeof n)&&/^#([A-Fa-f0-9]{3}){1,2}$/.test(n)}function o(n,e=.2){return n&&"string"==typeof n?a(n=n.trim())?(3===(n=n.replace("#","")).length&&(n=n.split("").map(n=>n+n).join("")),`rgba(${parseInt(n.substring(0,2),16)}, ${parseInt(n.substring(2,4),16)}, ${parseInt(n.substring(4,6),16)}, ${e=Math.max(0,Math.min(1,e))})`):n:"rgba(0, 0, 0, 0)"}function i(n){return a(n)?(3===(n=n.replace("#","")).length&&(n=n.split("").map(n=>n+n).join("")),{r:parseInt(n.substring(0,2),16),g:parseInt(n.substring(2,4),16),b:parseInt(n.substring(4,6),16)}):{r:0,g:0,b:0}}function r(n){const{r:e,g:t,b:a}=i(n);return(.299*e+.587*t+.114*a)/255>.5?"#000000":"#ffffff"}function s(n,e){if(!a(n))return n;const{r:t,g:o,b:r}=i(n),s=n=>{const t=n+e;return Math.max(0,Math.min(255,t))};return`#${s(t).toString(16).padStart(2,"0")}${s(o).toString(16).padStart(2,"0")}${s(r).toString(16).padStart(2,"0")}`}t.r(e),t.d(e,{adjustBrightness:function(){return s},getContrastColor:function(){return r},hexToRGB:function(){return i},hexToRGBA:function(){return o},isHexColorCode:function(){return a}}),e.default={isHexColorCode:a,hexToRGBA:o,hexToRGB:i,getContrastColor:r,adjustBrightness:s}},310:function(n,e,t){t.d(e,{a:function(){return f}});var a=t(688),o=t(750),i=t(59);const r={CARD_READY:"card-ready",CARD_UPDATED:"card-updated",CONTACT_CLICK:"contact-click",SAVE_CONTACT:"save-contact",SOCIAL_CLICK:"social-click",SHARE:"share",LANGUAGE_CHANGE:"language-change",LEAD_FORM_OPEN:"lead-form-open",LEAD_FORM_CLOSE:"lead-form-close",LEAD_FORM_SUBMIT:"lead-form-submit",LEAD_FORM_SUCCESS:"lead-form-success",LEAD_FORM_ERROR:"lead-form-error",LEAD_COLLECT:"lead-collect",ADD_TO_CONTACT_CLICK:"add-to-contact-click",EXCHANGE_CONTACTS_CLICK:"exchange-contacts-click",CONNECT_CLICK:"connect-click",CREATE_NOW_CLICK:"create-now-click",FOOTER_CTA_CLICK:"footer-cta-click",FOOTER_LOGO_CLICK:"footer-logo-click",ANIMATION_STARTED:"animation-started",ANIMATION_ENDED:"animation-ended"},s={ab:"Abkhazian",aa:"Afar",af:"Afrikaans","af-NA":"Afrikaans (Namibia)","af-ZA":"Afrikaans (South Africa)",ak:"Akan","ak-GH":"Akan (Ghana)",sq:"Albanian","sq-AL":"Albanian (Albania)",am:"Amharic","am-ET":"Amharic (Ethiopia)",ar:"Arabic","ar-DZ":"Arabic (Algeria)","ar-BH":"Arabic (Bahrain)","ar-EG":"Arabic (Egypt)","ar-IQ":"Arabic (Iraq)","ar-JO":"Arabic (Jordan)","ar-KW":"Arabic (Kuwait)","ar-LB":"Arabic (Lebanon)","ar-LY":"Arabic (Libya)","ar-MA":"Arabic (Morocco)","ar-OM":"Arabic (Oman)","ar-QA":"Arabic (Qatar)","ar-SA":"Arabic (Saudi Arabia)","ar-SD":"Arabic (Sudan)","ar-SY":"Arabic (Syria)","ar-TN":"Arabic (Tunisia)","ar-AE":"Arabic (United Arab Emirates)","ar-YE":"Arabic (Yemen)",hy:"Armenian","hy-AM":"Armenian (Armenia)",as:"Assamese","as-IN":"Assamese (India)",asa:"Asu","asa-TZ":"Asu (Tanzania)",ay:"Aymara",az:"Azerbaijani","az-Cyrl":"Azerbaijani (Cyrillic)","az-Cyrl_AZ":"Azerbaijani (Cyrillic, Azerbaijan)","az-Latn":"Azerbaijani (Latin)","az-Latn_AZ":"Azerbaijani (Latin, Azerbaijan)",bm:"Bambara","bm-ML":"Bambara (Mali)",ba:"Bashkir",eu:"Basque","eu-ES":"Basque (Spain)",be:"Belarusian","be-BY":"Belarusian (Belarus)",bem:"Bemba","bem-ZM":"Bemba (Zambia)",bez:"Bena","bez-TZ":"Bena (Tanzania)",bn:"Bengali","bn-BD":"Bengali (Bangladesh)","bn-IN":"Bengali (India)",dz:"Bhutani",bh:"Bihari",bi:"Bislama",bs:"Bosnian","bs-BA":"Bosnian (Bosnia and Herzegovina)",br:"Breton",bg:"Bulgarian","bg-BG":"Bulgarian (Bulgaria)",my:"Burmese","my-MM":"Burmese (Myanmar [Burma])",be:"Byelorussian",km:"Cambodian","yue-Hant_HK":"Cantonese (Traditional, Hong Kong SAR China)",ca:"Catalan","ca-ES":"Catalan (Spain)",tzm:"Central Morocco Tamazight","tzm-Latn":"Central Morocco Tamazight (Latin)","tzm-Latn_MA":"Central Morocco Tamazight (Latin, Morocco)",chr:"Cherokee","chr-US":"Cherokee (United States)",cgg:"Chiga","cgg-UG":"Chiga (Uganda)",zh:"Chinese","zh-Hans":"Chinese (Simplified Han)","zh-Hans_CN":"Chinese (Simplified Han, China)","zh-Hans_HK":"Chinese (Simplified Han, Hong Kong SAR China)","zh-Hans_MO":"Chinese (Simplified Han, Macau SAR China)","zh-Hans_SG":"Chinese (Simplified Han, Singapore)","zh-Hant":"Chinese (Traditional Han)","zh-Hant_HK":"Chinese (Traditional Han, Hong Kong SAR China)","zh-Hant_MO":"Chinese (Traditional Han, Macau SAR China)","zh-Hant_TW":"Chinese (Traditional Han, Taiwan)",kw:"Cornish","kw-GB":"Cornish (United Kingdom)",co:"Corsican",hr:"Croatian","hr-HR":"Croatian (Croatia)",cs:"Czech","cs-CZ":"Czech (Czech Republic)",da:"Danish","da-DK":"Danish (Denmark)",nl:"Dutch","nl-BE":"Dutch (Belgium)","nl-NL":"Dutch (Netherlands)",ebu:"Embu","ebu-KE":"Embu (Kenya)",en:"English","en-AS":"English (American Samoa)","en-AU":"English (Australia)","en-BE":"English (Belgium)","en-BZ":"English (Belize)","en-BW":"English (Botswana)","en-CA":"English (Canada)","en-GU":"English (Guam)","en-HK":"English (Hong Kong SAR China)","en-IN":"English (India)","en-IE":"English (Ireland)","en-IL":"English (Israel)","en-JM":"English (Jamaica)","en-MY":"English (Malaysia)","en-MT":"English (Malta)","en-MH":"English (Marshall Islands)","en-MU":"English (Mauritius)","en-NA":"English (Namibia)","en-NZ":"English (New Zealand)","en-MP":"English (Northern Mariana Islands)","en-PK":"English (Pakistan)","en-PH":"English (Philippines)","en-SG":"English (Singapore)","en-ZA":"English (South Africa)","en-TT":"English (Trinidad and Tobago)","en-UM":"English (U.S. Minor Outlying Islands)","en-VI":"English (U.S. Virgin Islands)","en-GB":"English (United Kingdom)","en-US":"English (United States)","en-ZW":"English (Zimbabwe)",eo:"Esperanto",et:"Estonian","et-EE":"Estonian (Estonia)",ee:"Ewe","ee-GH":"Ewe (Ghana)","ee-TG":"Ewe (Togo)",fo:"Faeroese",fo:"Faroese","fo-FO":"Faroese (Faroe Islands)",fj:"Fiji",fil:"Filipino","fil-PH":"Filipino (Philippines)",fi:"Finnish","fi-FI":"Finnish (Finland)",fr:"French","fr-BE":"French (Belgium)","fr-BJ":"French (Benin)","fr-BF":"French (Burkina Faso)","fr-BI":"French (Burundi)","fr-CM":"French (Cameroon)","fr-CA":"French (Canada)","fr-CF":"French (Central African Republic)","fr-TD":"French (Chad)","fr-KM":"French (Comoros)","fr-CG":"French (Congo - Brazzaville)","fr-CD":"French (Congo - Kinshasa)","fr-CI":"French (Côte dIvoire)","fr-DJ":"French (Djibouti)","fr-GQ":"French (Equatorial Guinea)","fr-FR":"French (France)","fr-GA":"French (Gabon)","fr-GP":"French (Guadeloupe)","fr-GN":"French (Guinea)","fr-LU":"French (Luxembourg)","fr-MG":"French (Madagascar)","fr-ML":"French (Mali)","fr-MQ":"French (Martinique)","fr-MC":"French (Monaco)","fr-NE":"French (Niger)","fr-RW":"French (Rwanda)","fr-RE":"French (Réunion)","fr-BL":"French (Saint Barthélemy)","fr-MF":"French (Saint Martin)","fr-SN":"French (Senegal)","fr-CH":"French (Switzerland)","fr-TG":"French (Togo)",fy:"Frisian",ff:"Fulah","ff-SN":"Fulah (Senegal)",gl:"Galician","gl-ES":"Galician (Spain)",lg:"Ganda","lg-UG":"Ganda (Uganda)",ka:"Georgian","ka-GE":"Georgian (Georgia)",de:"German","de-AT":"German (Austria)","de-BE":"German (Belgium)","de-DE":"German (Germany)","de-LI":"German (Liechtenstein)","de-LU":"German (Luxembourg)","de-CH":"German (Switzerland)",el:"Greek","el-CY":"Greek (Cyprus)","el-GR":"Greek (Greece)",kl:"Greenlandic",gn:"Guarani",gu:"Gujarati","gu-IN":"Gujarati (India)",guz:"Gusii","guz-KE":"Gusii (Kenya)",ha:"Hausa","ha-Latn":"Hausa (Latin)","ha-Latn_GH":"Hausa (Latin, Ghana)","ha-Latn_NE":"Hausa (Latin, Niger)","ha-Latn_NG":"Hausa (Latin, Nigeria)",haw:"Hawaiian","haw-US":"Hawaiian (United States)",he:"Hebrew","he-IL":"Hebrew (Israel)",hi:"Hindi","hi-IN":"Hindi (India)",hu:"Hungarian","hu-HU":"Hungarian (Hungary)",is:"Icelandic","is-IS":"Icelandic (Iceland)",ig:"Igbo","ig-NG":"Igbo (Nigeria)",id:"Indonesian","id-ID":"Indonesian (Indonesia)",ia:"Interlingua",ie:"Interlingue",iu:"Inuktitut",ik:"Inupiak",ga:"Irish","ga-IE":"Irish (Ireland)",it:"Italian","it-IT":"Italian (Italy)","it-CH":"Italian (Switzerland)",ja:"Japanese","ja-JP":"Japanese (Japan)",jw:"Javanese",kea:"Kabuverdianu","kea-CV":"Kabuverdianu (Cape Verde)",kab:"Kabyle","kab-DZ":"Kabyle (Algeria)",kl:"Kalaallisut","kl-GL":"Kalaallisut (Greenland)",kln:"Kalenjin","kln-KE":"Kalenjin (Kenya)",kam:"Kamba","kam-KE":"Kamba (Kenya)",kn:"Kannada","kn-IN":"Kannada (India)",ks:"Kashmiri",kk:"Kazakh","kk-Cyrl":"Kazakh (Cyrillic)","kk-Cyrl_KZ":"Kazakh (Cyrillic, Kazakhstan)",km:"Khmer","km-KH":"Khmer (Cambodia)",ki:"Kikuyu","ki-KE":"Kikuyu (Kenya)",rw:"Kinyarwanda","rw-RW":"Kinyarwanda (Rwanda)",ky:"Kirghiz",rn:"Kirundi",kok:"Konkani","kok-IN":"Konkani (India)",ko:"Korean","ko-KR":"Korean (South Korea)",khq:"Koyra Chiini","khq-ML":"Koyra Chiini (Mali)",ses:"Koyraboro Senni","ses-ML":"Koyraboro Senni (Mali)",ku:"Kurdish",lag:"Langi","lag-TZ":"Langi (Tanzania)",lo:"Laothian",la:"Latin",lv:"Latvian","lv-LV":"Latvian (Latvia)",lv:"Lettish",ln:"Lingala",lt:"Lithuanian","lt-LT":"Lithuanian (Lithuania)",luo:"Luo","luo-KE":"Luo (Kenya)",luy:"Luyia","luy-KE":"Luyia (Kenya)",mk:"Macedonian","mk-MK":"Macedonian (Macedonia)",jmc:"Machame","jmc-TZ":"Machame (Tanzania)",kde:"Makonde","kde-TZ":"Makonde (Tanzania)",mg:"Malagasy","mg-MG":"Malagasy (Madagascar)",ms:"Malay","ms-BN":"Malay (Brunei)","ms-MY":"Malay (Malaysia)",ml:"Malayalam","ml-IN":"Malayalam (India)",mt:"Maltese","mt-MT":"Maltese (Malta)",gv:"Manx","gv-GB":"Manx (United Kingdom)",mi:"Maori",mr:"Marathi","mr-IN":"Marathi (India)",mas:"Masai","mas-KE":"Masai (Kenya)","mas-TZ":"Masai (Tanzania)",mer:"Meru","mer-KE":"Meru (Kenya)",mo:"Moldavian",mn:"Mongolian",mfe:"Morisyen","mfe-MU":"Morisyen (Mauritius)",naq:"Nama","naq-NA":"Nama (Namibia)",na:"Nauru",ne:"Nepali","ne-IN":"Nepali (India)","ne-NP":"Nepali (Nepal)",nd:"North Ndebele","nd-ZW":"North Ndebele (Zimbabwe)",no:"Norwegian",nb:"Norwegian Bokmål","nb-NO":"Norwegian Bokmål (Norway)",nn:"Norwegian Nynorsk","nn-NO":"Norwegian Nynorsk (Norway)",nyn:"Nyankole","nyn-UG":"Nyankole (Uganda)",oc:"Occitan",or:"Oriya","or-IN":"Oriya (India)",om:"Oromo","om-ET":"Oromo (Ethiopia)","om-KE":"Oromo (Kenya)",ps:"Pashto","ps-AF":"Pashto (Afghanistan)",fa:"Persian","fa-AF":"Persian (Afghanistan)","fa-IR":"Persian (Iran)",pl:"Polish","pl-PL":"Polish (Poland)",pt:"Portuguese","pt-BR":"Portuguese (Brazil)","pt-GW":"Portuguese (Guinea-Bissau)","pt-MZ":"Portuguese (Mozambique)","pt-PT":"Portuguese (Portugal)",pa:"Punjabi","pa-Arab":"Punjabi (Arabic)","pa-Arab_PK":"Punjabi (Arabic, Pakistan)","pa-Guru":"Punjabi (Gurmukhi)","pa-Guru_IN":"Punjabi (Gurmukhi, India)",ps:"Pushto",qu:"Quechua",rm:"Rhaeto",ro:"Romanian","ro-MD":"Romanian (Moldova)","ro-RO":"Romanian (Romania)",rm:"Romansh","rm-CH":"Romansh (Switzerland)",rof:"Rombo","rof-TZ":"Rombo (Tanzania)",ru:"Russian","ru-MD":"Russian (Moldova)","ru-RU":"Russian (Russia)","ru-UA":"Russian (Ukraine)",rwk:"Rwa","rwk-TZ":"Rwa (Tanzania)",saq:"Samburu","saq-KE":"Samburu (Kenya)",sm:"Samoan",sg:"Sango","sg-CF":"Sango (Central African Republic)",sg:"Sangro",sa:"Sanskrit",gd:"Scots",seh:"Sena","seh-MZ":"Sena (Mozambique)",sr:"Serbian","sr-Cyrl":"Serbian (Cyrillic)","sr-Cyrl_BA":"Serbian (Cyrillic, Bosnia and Herzegovina)","sr-Cyrl_ME":"Serbian (Cyrillic, Montenegro)","sr-Cyrl_RS":"Serbian (Cyrillic, Serbia)","sr-Latn":"Serbian (Latin)","sr-Latn_BA":"Serbian (Latin, Bosnia and Herzegovina)","sr-Latn_ME":"Serbian (Latin, Montenegro)","sr-Latn_RS":"Serbian (Latin, Serbia)",sh:"Serbo",st:"Sesotho",tn:"Setswana",sn:"Shona","sn-ZW":"Shona (Zimbabwe)",ii:"Sichuan Yi","ii-CN":"Sichuan Yi (China)",sd:"Sindhi",si:"Singhalese",si:"Sinhala","si-LK":"Sinhala (Sri Lanka)",ss:"Siswati",sk:"Slovak","sk-SK":"Slovak (Slovakia)",sl:"Slovenian","sl-SI":"Slovenian (Slovenia)",xog:"Soga","xog-UG":"Soga (Uganda)",so:"Somali","so-DJ":"Somali (Djibouti)","so-ET":"Somali (Ethiopia)","so-KE":"Somali (Kenya)","so-SO":"Somali (Somalia)",es:"Spanish","es-AR":"Spanish (Argentina)","es-BO":"Spanish (Bolivia)","es-CL":"Spanish (Chile)","es-CO":"Spanish (Colombia)","es-CR":"Spanish (Costa Rica)","es-DO":"Spanish (Dominican Republic)","es-EC":"Spanish (Ecuador)","es-SV":"Spanish (El Salvador)","es-GQ":"Spanish (Equatorial Guinea)","es-GT":"Spanish (Guatemala)","es-HN":"Spanish (Honduras)","es-419":"Spanish (Latin America)","es-MX":"Spanish (Mexico)","es-NI":"Spanish (Nicaragua)","es-PA":"Spanish (Panama)","es-PY":"Spanish (Paraguay)","es-PE":"Spanish (Peru)","es-PR":"Spanish (Puerto Rico)","es-ES":"Spanish (Spain)","es-US":"Spanish (United States)","es-UY":"Spanish (Uruguay)","es-VE":"Spanish (Venezuela)",su:"Sudanese",sw:"Swahili","sw-KE":"Swahili (Kenya)","sw-TZ":"Swahili (Tanzania)",sv:"Swedish","sv-FI":"Swedish (Finland)","sv-SE":"Swedish (Sweden)",gsw:"Swiss German","gsw-CH":"Swiss German (Switzerland)",shi:"Tachelhit","shi-Latn":"Tachelhit (Latin)","shi-Latn_MA":"Tachelhit (Latin, Morocco)","shi-Tfng":"Tachelhit (Tifinagh)","shi-Tfng_MA":"Tachelhit (Tifinagh, Morocco)",tl:"Tagalog",dav:"Taita","dav-KE":"Taita (Kenya)",tg:"Tajik",ta:"Tamil","ta-IN":"Tamil (India)","ta-LK":"Tamil (Sri Lanka)",tt:"Tatar",te:"Telugu","te-IN":"Telugu (India)",teo:"Teso","teo-KE":"Teso (Kenya)","teo-UG":"Teso (Uganda)",th:"Thai","th-TH":"Thai (Thailand)",bo:"Tibetan","bo-CN":"Tibetan (China)","bo-IN":"Tibetan (India)",ti:"Tigrinya","ti-ER":"Tigrinya (Eritrea)","ti-ET":"Tigrinya (Ethiopia)",to:"Tonga","to-TO":"Tonga (Tonga)",ts:"Tsonga",tr:"Turkish","tr-TR":"Turkish (Turkey)",tk:"Turkmen",tw:"Twi",ug:"Uigur",uk:"Ukrainian","uk-UA":"Ukrainian (Ukraine)",ur:"Urdu","ur-IN":"Urdu (India)","ur-PK":"Urdu (Pakistan)",uz:"Uzbek","uz-Arab":"Uzbek (Arabic)","uz-Arab_AF":"Uzbek (Arabic, Afghanistan)","uz-Cyrl":"Uzbek (Cyrillic)","uz-Cyrl_UZ":"Uzbek (Cyrillic, Uzbekistan)","uz-Latn":"Uzbek (Latin)","uz-Latn_UZ":"Uzbek (Latin, Uzbekistan)",vi:"Vietnamese","vi-VN":"Vietnamese (Vietnam)",vo:"Volapuk",vun:"Vunjo","vun-TZ":"Vunjo (Tanzania)",cy:"Welch",cy:"Welsh","cy-GB":"Welsh (United Kingdom)",wo:"Wolof",xh:"Xhosa",yi:"Yiddish",yo:"Yoruba","yo-NG":"Yoruba (Nigeria)",za:"Zhuang",zu:"Zulu","zu-ZA":"Zulu (South Africa)"},c={getLanguageDropdownTemplate:function(){return'\n <style>\n /* Language dropdown - positioned at top right inside card */\n .uqc-language-dropdown-container {\n position: absolute;\n top: 16px;\n right: 16px;\n z-index: 1000;\n background-color: rgba(0, 0, 0, 0.4);\n border: 0;\n border-radius: 4px;\n }\n\n .uqc-language-dropdown-container.hidden {\n display: none;\n }\n\n .uqc-language-select {\n background-color: transparent;\n color: #FFFFFF;\n font-family: \'Work Sans\', sans-serif;\n font-size: 14px;\n font-style: normal;\n font-weight: 500;\n line-height: normal;\n text-align: center;\n text-align-last: center;\n text-overflow: ellipsis;\n max-width: 20ch;\n border: 0;\n padding: 8px;\n padding-right: 32px;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n user-select: none;\n cursor: pointer;\n position: relative;\n z-index: 1;\n }\n\n .uqc-language-select:focus {\n outline: none;\n }\n\n .uqc-language-select:focus-visible {\n outline: none;\n }\n\n /* Dropdown arrow */\n .uqc-language-dropdown-container::after {\n content: \'\';\n position: absolute;\n right: 12px;\n top: 50%;\n transform: translateY(-50%);\n width: 0;\n height: 0;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 5px solid #FFFFFF;\n pointer-events: none;\n z-index: 0;\n }\n </style>\n\n <div class="uqc-language-dropdown-container hidden" id="uqc-language-dropdown">\n <select class="uqc-language-select" id="uqc-language-select">\n \x3c!-- Options will be populated dynamically --\x3e\n </select>\n </div>\n '},renderLanguageDropdown:function(){const{language_data:n,default_language:e}=this._cardData||{},{showLanguageDropdown:t}=this._config||{},a=this._shadowRoot.querySelector("#uqc-language-dropdown"),o=this._shadowRoot.querySelector("#uqc-language-select");if(!a||!o)return;const i=n&&Object.keys(n).length>0;if(!(t??i))return void a.classList.add("hidden");a.classList.remove("hidden");const r=this._currentLanguage||"",c=this.getAvailableLanguages();o.innerHTML="";const l=e||"en",d=document.createElement("option");d.value="",d.textContent=s[l]||l.toUpperCase(),d.selected=""===r,o.appendChild(d),c.forEach(n=>{const e=document.createElement("option");e.value=n.code,e.textContent=n.label,e.selected=r===n.code,o.appendChild(e)}),console.log("%c[LanguageDropdown] Dropdown rendered with languages:","color: #3b82f6",c),console.log("%c[LanguageDropdown] Current selection:","color: #3b82f6",r||"default")},getAvailableLanguages:function(){const{language_data:n}=this._cardData||{};return n?Object.keys(n).map(n=>({code:n,label:`${s[n]||n.toUpperCase()}`})):[]},getLanguageData:function(n){const e=this._originalCardData||this._cardData||{},{language_data:t,default_language:a,...o}=e;return n&&t&&t[n]?{...o,...t[n],language_data:t,default_language:a}:o},attachLanguageDropdownListeners:function(){const n=this._shadowRoot.querySelector("#uqc-language-select");n&&n.addEventListener("change",n=>{const e=n.target.value;console.log("%c[LanguageDropdown] Language changed to:","color: #3b82f6",e||"default"),this._currentLanguage=e;const t=this.getLanguageData(e);this._originalCardData||(this._originalCardData={...this._cardData}),this._cardData={...this._originalCardData,...t},this.render(),this.emitEvent(r.LANGUAGE_CHANGE,{language:e||this._cardData.default_language||"en",cardData:t})})}},l={getLeadFormTemplate:function(){this._config;const n=this._cardData||{},e=n.lead_attribute||{};return`\n <style>\n /* Lead Form Overlay */\n .uqc-lead-overlay {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 2147483003;\n display: none;\n }\n \n .uqc-lead-overlay.show {\n display: block;\n }\n \n /* Lead Form Drawer - Absolute positioned, overlays on card */\n /* Note: Width, left, right are controlled by CardLayout12.js */\n .uqc-lead-drawer {\n display: flex;\n flex-direction: column;\n gap: 0.4rem;\n padding: 24px;\n position: absolute;\n bottom: 0;\n z-index: 2147483004;\n background-color: white;\n transition: transform 0.3s ease-in-out;\n transform: translateY(100%);\n box-sizing: border-box;\n border-top-left-radius: 12px;\n border-top-right-radius: 12px;\n max-height: 85%;\n font-family: 'Work Sans', sans-serif;\n pointer-events: auto;\n }\n \n .uqc-lead-drawer.show {\n width: 100%;\n transform: translateY(0);\n transition: transform 0.3s ease-in-out;\n min-height: 100px;\n }\n \n /* Form Title */\n .uqc-owner-info {\n font-weight: 300;\n font-size: 20px;\n font-family: "Work Sans", sans-serif;\n line-height: 28px;\n color: #16212F;\n margin-bottom: 24px;\n display: flex;\n flex-wrap: wrap;\n white-space: nowrap;\n }\n \n .uqc-owner-name {\n font-style: italic;\n font-weight: 600;\n }\n \n /* Form Container */\n .uqc-form-container {\n max-height: 150px;\n overflow: scroll;\n margin-bottom: 16px;\n font-family: "Work Sans", sans-serif;\n padding-right: 8px;\n row-gap: 16px;\n display: grid;\n }\n \n /* Form Field Container */\n .uqc-lead-field-container {\n margin-bottom: 0;\n }\n \n .uqc-lead-field-container.uqc-hidden {\n display: none !important;\n }\n \n /* Name Grid (First + Last) */\n .uqc-name-grid {\n display: flex;\n flex-direction: row;\n }\n \n #uqc-lead-first-name {\n border-radius: 5px 0px 0px 5px;\n border-right-width: 0.5px !important;\n width: 50%;\n }\n \n #uqc-lead-last-name {\n border-radius: 0px 5px 5px 0px;\n border-left-width: 0.5px !important;\n width: 50%;\n }\n \n /* Form Input (Matching server exactly) */\n .uqc-lead-input {\n background: #FAFAFA;\n border: 1px solid #E4E5E7;\n border-radius: 4px;\n padding: 8px;\n gap: 8px;\n height: 24px;\n font-size: 16px;\n width: -webkit-fill-available;\n font-family: "Work Sans", sans-serif;\n box-sizing: border-box;\n }\n \n .uqc-lead-input:focus {\n outline: none !important;\n border: 1px solid #2595FF !important;\n }\n \n .uqc-lead-input.error {\n border-color: #FF445E;\n }\n \n /* Textarea */\n .uqc-lead-textarea {\n height: 80px;\n resize: none;\n font-size: 16px;\n }\n \n /* Error Message (Matching server exactly) */\n .uqc-lead-error-message {\n display: none;\n padding: 0;\n padding-top: 8px;\n margin: 0;\n color: #FF445E;\n font-size: 13px;\n }\n \n .uqc-lead-error-message.show {\n display: block;\n }\n \n /* Marketing Consent (Matching server exactly) */\n .uqc-disclaimer {\n width: 100%;\n font-weight: 400;\n font-family: "Open Sans", sans-serif;\n font-size: 12px;\n color: #979797;\n margin-top: 16px;\n display: flex;\n align-items: start;\n }\n \n .uqc-lead-consent-checkbox {\n margin-right: 10px;\n cursor: pointer;\n }\n \n .uqc-tos-text {\n color: #979797;\n font-size: 12px;\n font-style: normal;\n font-family: "Open Sans", sans-serif;\n font-weight: 400;\n line-height: normal;\n text-align: start;\n letter-spacing: -0.33px;\n }\n \n .uqc-tos-anchor-links {\n color: #979797;\n font-style: normal;\n font-weight: 400;\n line-height: normal;\n letter-spacing: -0.33px;\n text-decoration-line: underline;\n }\n \n /* Submit Button Container */\n #uqc-submit-container {\n margin-top: 16px;\n }\n \n /* Submit Button (Matching server exactly) */\n .uqc-lead-submit-btn {\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n height: 48px;\n padding: 0px;\n width: -webkit-fill-available;\n border: 0;\n cursor: pointer;\n background: #2595FF;\n min-height: 40px;\n font-family: 'Work Sans', sans-serif;\n font-size: 15px;\n font-weight: lighter;\n }\n \n .uqc-lead-submit-btn:hover {\n opacity: 0.95;\n }\n \n .uqc-lead-submit-btn:disabled {\n cursor: not-allowed;\n opacity: 0.7;\n }\n \n .uqc-lead-submit-btn .submitLead {\n color: #ffffff !important;\n }\n \n .uqc-connect-btn-cta {\n padding-left: 12px;\n color: #ffffff;\n }\n \n #uqc-lead-exchange-contact-icon {\n color: #ffffff;\n }\n \n /* Loading Spinner (Matching server exactly) */\n .uqc-lead-spinner {\n border: 3px solid #f3f3f3;\n border-radius: 50%;\n border-top: 3px solid #3498db;\n width: 14px;\n height: 14px;\n -webkit-animation: spin 2s linear infinite;\n animation: spin 2s linear infinite;\n display: none;\n }\n \n .uqc-lead-spinner.show {\n display: inline-block;\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n @-webkit-keyframes spin {\n 0% { -webkit-transform: rotate(0deg); }\n 100% { -webkit-transform: rotate(360deg); }\n }\n </style>\n\n \x3c!-- Lead Form Overlay --\x3e\n <div id="uqc-lead-overlay" class="uqc-lead-overlay"></div>\n\n \x3c!-- Lead Form Drawer --\x3e\n <div id="uqc-lead-drawer" class="uqc-lead-drawer">\n \x3c!-- Title --\x3e\n <div class="uqc-owner-info">\n Exchange contacts with&nbsp;<br />\n <span class="uqc-owner-name">${n.consent_placeholder||`${n.first_name||""} ${n.last_name||""}`.trim()||n.first_name||"card owner"}</span>\n </div>\n \n \x3c!-- Form --\x3e\n <form id="uqc-lead-form" onsubmit="return false">\n <div class="uqc-form-container">\n \x3c!-- Name Fields (Side by side) --\x3e\n <div class="uqc-lead-field-container">\n <div class="uqc-name-grid">\n <input \n type="text" \n id="uqc-lead-first-name" \n class="uqc-lead-input" \n placeholder="First name" \n required\n maxlength="128"\n />\n <input \n type="text" \n id="uqc-lead-last-name" \n class="uqc-lead-input" \n placeholder="Last name" \n required\n maxlength="128"\n />\n </div>\n <p class="uqc-lead-error-message" id="uqc-lead-first-name-error">Please enter full name</p>\n </div>\n\n \x3c!-- Email (Required) --\x3e\n <div class="uqc-lead-field-container">\n <input \n type="email" \n id="uqc-lead-email" \n class="uqc-lead-input" \n placeholder="Email" \n required\n maxlength="254"\n />\n <p class="uqc-lead-error-message" id="uqc-lead-email-error">Please enter a valid email address</p>\n </div>\n\n \x3c!-- Company (Conditional) --\x3e\n <div class="uqc-lead-field-container ${e.company?"":"hidden"}" id="uqc-lead-company-container">\n <input \n type="text" \n id="uqc-lead-company" \n class="uqc-lead-input" \n placeholder="Company" \n maxlength="128"\n />\n <p class="uqc-lead-error-message" id="uqc-lead-company-error"></p>\n </div>\n\n \x3c!-- Phone (Conditional) --\x3e\n <div class="uqc-lead-field-container ${e.phone?"":"hidden"}" id="uqc-lead-phone-container">\n <input \n type="tel" \n id="uqc-lead-phone" \n class="uqc-lead-input" \n placeholder="Phone number" \n maxlength="30"\n />\n <p class="uqc-lead-error-message" id="uqc-lead-phone-error">Please enter a valid phone number</p>\n </div>\n\n \x3c!-- Designation (Conditional) --\x3e\n <div class="uqc-lead-field-container ${e.designation?"":"hidden"}" id="uqc-lead-designation-container">\n <input \n type="text" \n id="uqc-lead-designation" \n class="uqc-lead-input" \n placeholder="Designation" \n maxlength="128"\n />\n <p class="uqc-lead-error-message" id="uqc-lead-designation-error"></p>\n </div>\n\n \x3c!-- Notes (Conditional) --\x3e\n <div class="uqc-lead-field-container ${e.notes?"":"hidden"}" id="uqc-lead-notes-container">\n <textarea \n id="uqc-lead-notes" \n class="uqc-lead-input uqc-lead-textarea" \n placeholder="Message"\n maxlength="500"\n ></textarea>\n </div>\n </div>\n \n \x3c!-- Marketing Consent --\x3e\n <div class="uqc-disclaimer">\n <input \n type="checkbox" \n id="uqc-lead-marketing-consent" \n class="uqc-lead-consent-checkbox"\n checked\n />\n <div class="uqc-tos-text" id="uqc-lead-consent-text"></div>\n </div>\n\n \x3c!-- Submit Button --\x3e\n <div id="uqc-submit-container">\n <button type="submit" class="uqc-lead-submit-btn" id="uqc-lead-submit-btn">\n <i id="uqc-lead-exchange-contact-icon" class="fas fa-exchange-alt"></i>\n <i id="uqc-lead-spinner" class="uqc-lead-spinner"></i>\n <span class="submitLead uqc-connect-btn-cta">Connect</span>\n </button>\n </div>\n </form>\n </div>\n `},generateTOSString:function(){const n=this._cardData||{};let e=`I agree to receive communications from ${n.consent_placeholder||`${n.first_name||""} ${n.last_name||""}`.trim()||n.first_name||"card owner"}.`;const t=n.lead_user_agreement_attribute?.user_agreement_urls||[];console.log("[LeadForm] generateTOSString - cardData.lead_user_agreement_attribute:",n.lead_user_agreement_attribute),console.log("[LeadForm] generateTOSString - links:",t);const a=[];t.length>0&&t[0].label&&t[0].url&&a.push(`<a class="uqc-tos-anchor-links" href="${t[0].url}" target="_blank">${t[0].label}</a>`),t.length>1&&t[1].label&&t[1].url&&a.push(`<a class="uqc-tos-anchor-links" href="${t[1].url}" target="_blank">${t[1].label}</a>`),t.length>2&&t[2].label&&t[2].url&&a.push(`<a class="uqc-tos-anchor-links" href="${t[2].url}" target="_blank">${t[2].label}</a>`),a.length>0&&(e+=" "+a.join(", ")+".");const o=this._shadowRoot.querySelector("#uqc-lead-consent-text");o&&(o.innerHTML=e)},openLeadForm:function(){const n=this._shadowRoot.querySelector("#uqc-lead-overlay"),e=this._shadowRoot.querySelector("#uqc-lead-drawer");n&&e&&(this.generateTOSString(),n.classList.add("show"),setTimeout(()=>{e.classList.add("show")},10),console.log("[LeadForm] Form opened"),this.emitEvent(r.LEAD_FORM_OPEN))},closeLeadForm:function(){const n=this._shadowRoot.querySelector("#uqc-lead-overlay"),e=this._shadowRoot.querySelector("#uqc-lead-drawer");if(n&&e){e.classList.remove("show"),setTimeout(()=>{n.classList.remove("show")},300);const t=this._shadowRoot.querySelector("#uqc-lead-form");t&&(t.reset(),this.clearFormErrors()),console.log("[LeadForm] Form closed"),this.emitEvent(r.LEAD_FORM_CLOSE)}},validateField:function(n,e){const t=e.trim();switch(n){case"uqc-lead-first-name":return t?t.length>128?{valid:!1,error:"First name too long"}:{valid:!0}:{valid:!1,error:"First name is required"};case"uqc-lead-last-name":return t?t.length>128?{valid:!1,error:"Last name too long"}:{valid:!0}:{valid:!1,error:"Last name is required"};case"uqc-lead-email":return t?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)?t.length>254?{valid:!1,error:"Email too long"}:{valid:!0}:{valid:!1,error:"Invalid email format"}:{valid:!1,error:"Email is required"};case"uqc-lead-phone":return t&&t.length>30?{valid:!1,error:"Phone number too long"}:{valid:!0};case"uqc-lead-company":return t.length>128?{valid:!1,error:"Company name too long"}:{valid:!0};case"uqc-lead-designation":return t.length>128?{valid:!1,error:"Designation too long"}:{valid:!0};default:return{valid:!0}}},showFieldError:function(n,e){const t=this._shadowRoot.querySelector(`#${n}`),a=this._shadowRoot.querySelector(`#${n}-error`);t&&t.classList.add("error"),a&&(a.textContent=e,a.classList.add("show"))},clearFieldError:function(n){const e=this._shadowRoot.querySelector(`#${n}`),t=this._shadowRoot.querySelector(`#${n}-error`);e&&e.classList.remove("error"),t&&t.classList.remove("show")},clearFormErrors:function(){const n=this._shadowRoot.querySelectorAll(".uqc-lead-error-message"),e=this._shadowRoot.querySelectorAll(".uqc-lead-input");n.forEach(n=>n.classList.remove("show")),e.forEach(n=>n.classList.remove("error"))},validateForm:function(){const n=this._shadowRoot.querySelector("#uqc-lead-form");if(!n)return{valid:!1,errors:["Form not found"]};const e=(this._cardData||{}).lead_attribute||{},t={first_name:n.querySelector("#uqc-lead-first-name")?.value||"",last_name:n.querySelector("#uqc-lead-last-name")?.value||"",email:n.querySelector("#uqc-lead-email")?.value||"",marketing_consent:n.querySelector("#uqc-lead-marketing-consent")?.checked||!1};if(e.phone){const e=n.querySelector("#uqc-lead-phone")?.value||"";e.trim()&&(t.phone_number=e)}if(e.company){const e=n.querySelector("#uqc-lead-company")?.value||"";e.trim()&&(t.company_name=e)}if(e.designation){const e=n.querySelector("#uqc-lead-designation")?.value||"";e.trim()&&(t.designation=e)}if(e.notes){const e=n.querySelector("#uqc-lead-notes")?.value||"";e.trim()&&(t.notes=e)}const a=[];let o=!0;const i=this.validateField("uqc-lead-first-name",t.first_name);i.valid||(this.showFieldError("uqc-lead-first-name",i.error),a.push(i.error),o=!1);const r=this.validateField("uqc-lead-last-name",t.last_name);r.valid||(this.showFieldError("uqc-lead-last-name",r.error),a.push(r.error),o=!1);const s=this.validateField("uqc-lead-email",t.email);if(s.valid||(this.showFieldError("uqc-lead-email",s.error),a.push(s.error),o=!1),t.phone_number){const n=this.validateField("uqc-lead-phone",t.phone_number);n.valid||(this.showFieldError("uqc-lead-phone",n.error),a.push(n.error),o=!1)}return{valid:o,data:t,errors:a}},setFormLoading:function(n){const e=this._shadowRoot.querySelector("#uqc-lead-submit-btn"),t=this._shadowRoot.querySelector("#uqc-lead-icon"),a=this._shadowRoot.querySelector("#uqc-lead-submit-text"),o=this._shadowRoot.querySelector("#uqc-lead-spinner");n?(e&&(e.disabled=!0),t&&(t.style.display="none"),a&&(a.style.display="none"),o&&o.classList.add("show")):(e&&(e.disabled=!1),t&&(t.style.display="inline"),a&&(a.style.display="inline"),o&&o.classList.remove("show"))},attachLeadFormListeners:function(){const n=this._shadowRoot.querySelector("#uqc-lead-close-btn");n&&n.addEventListener("click",()=>{this.closeLeadForm()});const e=this._shadowRoot.querySelector("#uqc-lead-overlay");e&&e.addEventListener("click",()=>{this.closeLeadForm()}),["uqc-lead-first-name","uqc-lead-last-name","uqc-lead-email","uqc-lead-phone"].forEach(n=>{const e=this._shadowRoot.querySelector(`#${n}`);e&&e.addEventListener("input",e=>{this.validateField(n,e.target.value).valid&&this.clearFieldError(n)})});const t=this._shadowRoot.querySelector("#uqc-lead-form");t&&t.addEventListener("submit",n=>{n.preventDefault(),console.log("[LeadForm] Form submitted"),this.clearFormErrors();const e=this.validateForm();e.valid?(console.log("[LeadForm] Validation passed, emitting event"),this.setFormLoading(!0),this.emitEvent(r.LEAD_FORM_SUBMIT,e.data)):console.log("[LeadForm] Validation failed:",e.errors)}),console.log("[LeadForm] Event listeners attached")},showLeadFormSuccess:function(){this.setFormLoading(!1),this.closeLeadForm()},showLeadFormError:function(n){this.setFormLoading(!1),alert(`Error: ${n||"Failed to submit form. Please try again."}`)}},d={getStickyButtonFooterTemplate:function(){const n=this._config||{},e=this._cardData||{},t=(e.lead_collection,n.showConnectButtons??!1),a=n.hideFooter??!1,o=e.branding_footer??!1,i=e.pwa_preview??!1,r=e.autodownload_url||"#",s=e.slug||"slug",c=e.static_assets_url||"";return`\n <style>\n /* Sticky Button Container - Fixed at bottom with primary color background */\n /* Background color is applied dynamically via updateStickyButtons() */\n .uqc-fixed-btn-container {\n position: absolute;\n display: ${i?"none":"flex"};\n flex-direction: column;\n bottom: 0;\n left: 0;\n right: 0;\n width: 100%;\n padding: 12px 16px 8px 16px; /* top right bottom left - button at very bottom */\n box-sizing: border-box;\n align-items: center;\n z-index: 1000;\n pointer-events: none;\n }\n \n .uqc-fixed-btn-container > * {\n pointer-events: auto;\n }\n\n .uqc-btn, .uqc-btn-exchange {\n background-color: var(--button-color, #203D99);\n color: var(--button-text-color, #EBEBEB);\n border-radius: 10px;\n box-shadow: 0px 4px 4px rgba(98, 62, 9, 0.16);\n height: 48px;\n width: 90%;\n cursor: pointer;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n font-size: var(--button-size, 18px);\n font-weight: var(--button-weight, 400);\n font-family: var(--font-family, 'Inter'), sans-serif;\n }\n\n .uqc-btn:hover, .uqc-btn-exchange:hover {\n opacity: 0.9;\n }\n\n .uqc-btn-connect-container {\n display: ${t?"flex":"none"};\n flex-direction: row;\n gap: 8px;\n width: 90%;\n }\n\n .uqc-btn-connect {\n flex: 1;\n width: auto;\n min-width: 0;\n padding: 12px 16px;\n }\n\n /* Footer - Single horizontal line */\n .uqc-footer-with-exchange {\n display: ${a||o?"none":"flex"};\n flex-direction: row;\n align-items: center;\n justify-content: center;\n width: 100%;\n flex-wrap: wrap;\n }\n\n .uqc-powered-by-text {\n font-family: 'Inter', sans-serif;\n font-size: 10px;\n font-weight: 300;\n line-height: 16px;\n color: rgba(22, 33, 47, 0.50);\n margin: 0;\n white-space: nowrap;\n }\n \n .uqc-brand-name {\n font-family: 'Inter', sans-serif;\n font-size: 10px;\n font-weight: 600;\n line-height: 16px;\n color: rgba(22, 33, 47, 0.50);\n margin: 0;\n white-space: nowrap;\n }\n \n .uqc-separator {\n font-family: 'Inter', sans-serif;\n font-size: 10px;\n font-weight: 300;\n line-height: 16px;\n color: rgba(22, 33, 47, 0.50);\n margin: 0 4px;\n }\n\n .uqc-footer-cta-link {\n font-family: 'Inter', sans-serif;\n font-size: 10px;\n font-weight: 500;\n line-height: 16px;\n color: rgba(22, 33, 47, 0.50);\n text-decoration: none;\n cursor: pointer;\n white-space: nowrap;\n }\n\n .uqc-footer-cta-link:hover {\n text-decoration: underline;\n }\n\n .uqc-hidden {\n display: none !important;\n }\n </style>\n\n \x3c!-- Sticky Button Container --\x3e\n \x3c!-- All buttons rendered initially, visibility controlled by updateStickyButtons() --\x3e\n <div class="uqc-fixed-btn-container">\n ${this.getAddToContactHTML(r)}\n ${this.getExchangeButtonsHTML(t,s)}\n ${this.getFooterHTML(a||o,s,c)}\n </div>\n `},getAddToContactHTML:function(n){return`\n <a \n class="uqc-btn" \n id="uqc-btn-add-to-contact"\n href="${n}"\n data-add-to-contact\n style="text-decoration: none;"\n >\n <i class="fas fa-user-plus" style="font-size: 20px;"></i>\n Add to Contacts\n </a>\n `},getExchangeButtonsHTML:function(n,e){return`\n <button \n class="uqc-btn-exchange" \n id="uqc-btn-exchange"\n data-exchange-contacts\n style="display: ${n?"none":"flex"};"\n >\n <i class="fas fa-exchange-alt" style="font-size: 20px;"></i>\n Exchange Contacts\n </button>\n \n <div class="uqc-btn-connect-container" id="uqc-btn-connect-container" style="display: ${n?"flex":"none"};">\n <button \n class="uqc-btn uqc-btn-connect" \n data-connect\n >\n <i class="fas fa-link" style="font-size: 20px;"></i>\n Connect\n </button>\n <button \n class="uqc-btn uqc-btn-connect" \n data-create-card\n data-card-slug="${e}"\n >\n <i class="fas fa-plus-circle" style="font-size: 20px;"></i>\n Create Now\n </button>\n </div>\n `},getFooterHTML:function(n,e,t){return n?"":`\n <div class="uqc-footer-with-exchange" id="uqc-footer-with-exchange">\n <span class="uqc-powered-by-text">Powered by</span>\n <span class="uqc-brand-name">Uniqode</span>\n <span class="uqc-separator">•</span>\n <a \n href="#" \n class="uqc-footer-cta-link" \n data-footer-cta\n data-card-slug="${e}"\n >\n Create your free card with Uniqode\n </a>\n </div>\n `},getButtonTextColor:function(n){const e=n.replace("#","");return(.299*parseInt(e.substr(0,2),16)+.587*parseInt(e.substr(2,2),16)+.114*parseInt(e.substr(4,2),16))/255>.5?"#000000":"#FFFFFF"},updateStickyButtons:function(){const n=this._cardData||{},e=this._config||{},t=n.lead_collection??!1,a=e.showConnectButtons??!1;console.log("[StickyButton] updateStickyButtons - lead_collection:",t,"showConnectButtons:",a);const o=this._shadowRoot.querySelector("#uqc-btn-add-to-contact"),i=this._shadowRoot.querySelector("#uqc-btn-exchange"),r=this._shadowRoot.querySelector("#uqc-btn-connect-container"),s=this._shadowRoot.querySelector(".uqc-fixed-btn-container")||this._shadowRoot.querySelector(".uqc-button-container");if(s){const e=n.customizations?.background_color;e?(s.style.backgroundColor=e,console.log("[StickyButton] Applied container background:",e)):console.warn("[StickyButton] No background_color found in customizations")}t?(o&&(o.style.display="none"),a?(i&&(i.style.display="none"),r&&(r.style.display="flex")):(i&&(i.style.display="flex"),r&&(r.style.display="none"))):(o&&(o.style.display="flex"),i&&(i.style.display="none"),r&&(r.style.display="none"))},attachStickyButtonFooterListeners:function(){const n=this._config||{},e=n.layoutConfig?.footerClicksDisabled||!1,t=this._shadowRoot.querySelector("[data-add-to-contact]");t&&t.addEventListener("click",n=>{if(e)return console.log("[StickyButton] Add to Contact click blocked (footerClicksDisabled)"),n.preventDefault(),void n.stopPropagation();const t=this._cardData?.autodownload_url;console.log("[StickyButton] Add to Contact clicked:",t),this.emitEvent(r.ADD_TO_CONTACT_CLICK,{url:t})});const a=this._shadowRoot.querySelector("[data-exchange-contacts]");a&&a.addEventListener("click",n=>{if(e)return console.log("[StickyButton] Exchange Contacts click blocked (footerClicksDisabled)"),n.preventDefault(),void n.stopPropagation();console.log("[StickyButton] Exchange Contacts clicked"),this.openLeadForm&&this.openLeadForm(),this.emitEvent(r.EXCHANGE_CONTACTS_CLICK)});const o=this._shadowRoot.querySelector("[data-connect]");o&&o.addEventListener("click",n=>{if(e)return console.log("[StickyButton] Connect click blocked (footerClicksDisabled)"),n.preventDefault(),void n.stopPropagation();console.log("[StickyButton] Connect clicked"),this.emitEvent(r.CONNECT_CLICK)});const i=this._shadowRoot.querySelector("[data-create-card]");i&&i.addEventListener("click",n=>{if(e)return console.log("[StickyButton] Create Now click blocked (footerClicksDisabled)"),n.preventDefault(),void n.stopPropagation();const t=n.target.getAttribute("data-card-slug")||this._cardData?.slug||"slug";console.log("[StickyButton] Create Now clicked:",t),this.emitEvent(r.CREATE_NOW_CLICK,{slug:t})});const s=this._shadowRoot.querySelector("[data-footer-cta]");s&&s.addEventListener("click",n=>{n.preventDefault();const e=n.target.getAttribute("data-card-slug")||this._cardData?.slug||"slug";console.log("[StickyButton] Footer CTA clicked:",e),this.emitEvent(r.FOOTER_CTA_CLICK,{slug:e})});const c=this._shadowRoot.querySelector("[data-footer-logo]");c&&c.addEventListener("click",()=>{console.log("[StickyButton] Footer logo clicked"),this.emitEvent(r.FOOTER_LOGO_CLICK)}),console.log("[StickyButton] Event listeners attached")},showConnectButtons:function(){this._config.showConnectButtons=!0,this._config.hideFooter=!0;const n=this._shadowRoot.getElementById("uqc-btn-exchange"),e=this._shadowRoot.getElementById("uqc-btn-connect-container"),t=this._shadowRoot.getElementById("uqc-footer-with-exchange");n&&(n.style.display="none"),e&&(e.style.display="flex"),t&&(t.style.display="none"),console.log("[StickyButton] State changed: showing Connect + Create Now buttons")},resetToExchangeButton:function(){this._config.showConnectButtons=!1,this._config.hideFooter=!1;const n=this._shadowRoot.getElementById("uqc-btn-exchange"),e=this._shadowRoot.getElementById("uqc-btn-connect-container"),t=this._shadowRoot.getElementById("uqc-footer-with-exchange");n&&(n.style.display="flex"),e&&(e.style.display="none"),t&&(t.style.display="flex"),console.log("[StickyButton] State reset: showing Exchange Contacts button")}},u={getAnimationFrameTemplate:function(){return'\n <style>\n /* Animation Container */\n .uqc-animation-container {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n width: 100%;\n min-height: 100vh;\n display: none;\n justify-content: center;\n align-items: center;\n background: white;\n z-index: 2147483005;\n }\n \n .uqc-animation-container.show {\n display: flex !important;\n }\n \n /* Lead Card (slides right) */\n .uqc-lead-card-slide {\n width: 100%;\n max-width: 500px;\n position: absolute;\n top: 0;\n animation: 3s uqc-slide-right;\n animation-timing-function: ease-in-out;\n border-radius: 16px;\n box-shadow: 8px 4px 48px 0px rgba(0, 0, 0, 0.12);\n overflow: hidden;\n }\n \n @keyframes uqc-slide-right {\n 0% {\n top: 0px;\n transform: rotate(-5deg);\n }\n 25% {\n top: 80px;\n transform: translateX(-50%) rotate(-5deg);\n }\n 80% {\n transform: translateX(50%) rotate(5deg);\n }\n 100% {\n transform: translateX(100%) rotate(5deg);\n top: 80px;\n }\n }\n \n /* Owner Card (slides left) - optional, can be added if needed */\n .uqc-owner-card-slide {\n width: 100%;\n max-width: 500px;\n position: absolute;\n top: 0;\n animation: 3s uqc-slide-left;\n animation-timing-function: ease-in-out;\n border-radius: 16px;\n box-shadow: 8px 4px 48px 0px rgba(0, 0, 0, 0.12);\n overflow: hidden;\n }\n \n @keyframes uqc-slide-left {\n 0% {\n top: 0px;\n transform: rotate(5deg);\n }\n 25% {\n top: 80px;\n transform: translateX(50%) rotate(5deg);\n }\n 80% {\n transform: translateX(-50%) rotate(-5deg);\n }\n 100% {\n transform: translateX(-100%) rotate(-5deg);\n top: 80px;\n }\n }\n \n /* Lead Card Content */\n .uqc-lead-card-content {\n background: #ffffff;\n box-shadow: 8px 4px 48px 0px rgba(0, 0, 0, 0.12);\n border-radius: 16px;\n overflow: hidden;\n }\n \n .uqc-lead-header {\n padding: 30px 24px;\n background-color: var(--button-color, #3370f9);\n text-align: center;\n }\n \n .uqc-lead-profile {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: -40px;\n margin-bottom: 16px;\n }\n \n .uqc-lead-avatar {\n width: 80px;\n height: 80px;\n border-radius: 50%;\n background-color: white;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 32px;\n font-weight: 600;\n color: var(--button-color, #3370f9);\n border: 4px solid white;\n box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);\n }\n \n .uqc-lead-info {\n padding: 0 24px 24px;\n text-align: center;\n }\n \n .uqc-lead-name {\n font-family: \'Open Sans\', sans-serif;\n font-weight: 600;\n font-size: 24px;\n color: #000000;\n margin-bottom: 8px;\n }\n \n .uqc-lead-company {\n font-family: \'Open Sans\', sans-serif;\n font-weight: 400;\n font-size: 18px;\n color: #666666;\n margin-bottom: 16px;\n }\n \n .uqc-lead-email {\n font-family: \'Open Sans\', sans-serif;\n font-weight: 400;\n font-size: 14px;\n color: #999999;\n }\n </style>\n\n \x3c!-- Animation Container --\x3e\n <div id="uqc-animation-container" class="uqc-animation-container">\n <div class="uqc-lead-card-slide">\n <div class="uqc-lead-card-content" id="uqc-lead-card-content">\n \x3c!-- Lead card content will be populated dynamically --\x3e\n </div>\n </div>\n </div>\n '},showCardExchangeAnimation:function(n,e=3e3){if(!n)return void console.error("[Animation] No lead data provided");const t=this._shadowRoot.querySelector("#uqc-animation-container"),a=this._shadowRoot.querySelector("#uqc-lead-card-content");if(!t||!a)return void console.error("[Animation] Animation elements not found");const o=this.generateLeadCardHTML(n);a.innerHTML=o,t.classList.add("show"),console.log("[Animation] Card exchange animation started"),this.emitEvent(r.ANIMATION_STARTED,{leadData:n}),setTimeout(()=>{this.hideCardExchangeAnimation()},e)},hideCardExchangeAnimation:function(){const n=this._shadowRoot.querySelector("#uqc-animation-container");n&&(n.classList.remove("show"),console.log("[Animation] Card exchange animation ended"),this.emitEvent(r.ANIMATION_ENDED))},generateLeadCardHTML:function(n){const e=n.first_name||"",t=n.last_name||"",a=`${e} ${t}`.trim(),o=n.email||"",i=n.company_name||n.designation||"";return`\n <div class="uqc-lead-header"></div>\n <div class="uqc-lead-profile">\n <div class="uqc-lead-avatar">${this.getInitialsFromName?this.getInitialsFromName(e,t):(e.charAt(0)+t.charAt(0)).toUpperCase()}</div>\n </div>\n <div class="uqc-lead-info">\n <div class="uqc-lead-name">${a}</div>\n ${i?`<div class="uqc-lead-company">${i}</div>`:""}\n ${o?`<div class="uqc-lead-email">${o}</div>`:""}\n </div>\n `},getInitialsFromName:function(n,e){const t=(n||"").trim(),a=(e||"").trim();return t||a?a?(t.charAt(0)+a.charAt(0)).toUpperCase():t.substring(0,2).toUpperCase():"??"}},h="1.0.0",g=(new Date).toLocaleString("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0});"undefined"!=typeof window&&(window.UniqodeCardConfig||(window.UniqodeCardConfig={}),window.UniqodeCardConfig.EVENTS=r);const p="undefined"!=typeof window&&"open"===window.UniqodeCardConfig?.shadowMode?"open":"closed";if("undefined"!=typeof window){const n=window.UniqodeCardConfig.shadowMode?`configured as '${p}'`:`default '${p}' (no config provided)`;console.log(`%c[UniqodeCardTemplates] Shadow DOM mode: ${n}`,"color: #10b981; font-weight: bold"),console.log("%c[UniqodeCardTemplates] Event constants: window.UniqodeCardConfig.EVENTS","color: #10b981; font-weight: bold");const e={...window.UniqodeCardConfig};Object.freeze(e.EVENTS),Object.defineProperty(window,"UniqodeCardConfig",{get(){return e},set(n){return console.error("%c[UniqodeCardTemplates] ERROR: Cannot change UniqodeCardConfig after module has loaded!\nShadow DOM mode is locked to: "+p+"\nSet configuration BEFORE importing the library.","color: #ef4444; font-weight: bold"),e},configurable:!1})}class f extends HTMLElement{static get EVENTS(){return r}constructor(){super(),this._shadowRoot=this.attachShadow({mode:p}),Object.assign(this,c),Object.assign(this,l),Object.assign(this,d),Object.assign(this,u),this._cardData={},this._config={},this._isConnected=!1,this._eventListeners=new Map,this._lastDataString="",this._lastConfigString="",this.handleCardShare=this.handleCardShare.bind(this),this.handleContactClick=this.handleContactClick.bind(this),this.handleSaveContact=this.handleSaveContact.bind(this),this.handleLeadCollect=this.handleLeadCollect.bind(this),this.handleSocialClick=this.handleSocialClick.bind(this),this.handleCustomFieldClick=this.handleCustomFieldClick.bind(this)}getShadowMode(){return p}static getShadowDOMMode(){return p}static get observedAttributes(){return["card-data","config","data-source","config-source"]}connectedCallback(){this._isConnected=!0,f._versionLogged||(console.log(`%c🎨 Uniqode Card Templates v${h}`,"background: #3b82f6; color: white; padding: 4px 8px; border-radius: 4px; font-weight: bold;",`\n📦 Build: ${g}\n🔧 Shadow DOM: ${p}\n✨ Features: Colors, Typography, Background, Multilingual`),f._versionLogged=!0),this._shadowRoot.innerHTML=this.getTemplate(),this.loadData(),this.loadConfig(),this.setupComponent(),this.setupEventListeners(),this.render(),this.emitEvent(r.CARD_READY,{layout:this.constructor.layoutId,hasData:Object.keys(this._cardData).length>0,hasConfig:Object.keys(this._config).length>0,version:h}),this.checkAutoOpenLeadForm()}disconnectedCallback(){this._isConnected=!1,this.cleanup()}attributeChangedCallback(n,e,t){if(this._isConnected&&e!==t)switch(n){case"card-data":this.handleCardDataAttribute(t);break;case"config":this.handleConfigAttribute(t);break;case"data-source":this.loadDataFromSource(t);break;case"config-source":this.loadConfigFromSource(t)}}loadData(){const n=this.getAttribute("data-source");if(n&&this.loadDataFromSource(n))return;const e=this.getAttribute("card-data");e&&this.handleCardDataAttribute(e)||this._cardData&&Object.keys(this._cardData).length>0||console.warn("[UniqodeCard] No card data provided. Use data-source, card-data attribute, or set cardData property.")}loadConfig(){const n=this.getAttribute("config-source");if(n&&this.loadConfigFromSource(n))return;const e=this.getAttribute("config");e&&this.handleConfigAttribute(e)||(this._config={...this.getDefaultConfig(),...this._config})}loadDataFromSource(n){try{const e=document.getElementById(n);if(!e)return console.warn(`[UniqodeCard] Data source element #${n} not found`),!1;const t=e.textContent.trim();return t===this._lastDataString||(this._cardData=JSON.parse(t),this._lastDataString=t,this._isConnected&&this.render()),!0}catch(n){return console.error("[UniqodeCard] Error loading data from source:",n),!1}}loadConfigFromSource(n){try{const e=document.getElementById(n);if(!e)return console.warn(`[UniqodeCard] Config source element #${n} not found`),!1;const t=e.textContent.trim();return t===this._lastConfigString||(this._config={...this.getDefaultConfig(),...JSON.parse(t)},this._lastConfigString=t,this._isConnected&&this.render()),!0}catch(n){return console.error("[UniqodeCard] Error loading config from source:",n),!1}}handleCardDataAttribute(n){if(!n||n===this._lastDataString)return!1;try{return this._cardData=JSON.parse(n),this._lastDataString=n,this._isConnected&&this.render(),!0}catch(n){return console.error("[UniqodeCard] Invalid card-data JSON:",n),!1}}handleConfigAttribute(n){if(!n||n===this._lastConfigString)return!1;try{return this._config={...this.getDefaultConfig(),...JSON.parse(n)},this._lastConfigString=n,this._isConnected&&this.render(),!0}catch(n){return console.error("[UniqodeCard] Invalid config JSON:",n),!1}}set cardData(n){if(!n)return void console.warn("[UniqodeCard] Card data is null or undefined");const e=(0,a.validateCardData)(n);e.isValid||console.warn("[UniqodeCard] Invalid card data:",e.errors);const t=JSON.stringify(n);t!==this._lastDataString&&(this._cardData=JSON.parse(t),this._lastDataString=t,this._isConnected&&this.render())}get cardData(){return JSON.parse(JSON.stringify(this._cardData))}set config(n){const e=JSON.stringify(n);e!==this._lastConfigString&&(this._config={...this.getDefaultConfig(),...n},this._lastConfigString=e,this._isConnected&&this.render())}get config(){return{...this._config}}getDefaultConfig(){return{showProfileImage:!0,showLogo:!0,enableSharing:!0,enableLeadCollection:!1,compactMode:!1,theme:"auto"}}emitEvent(n,e={}){const t=new CustomEvent(n,{bubbles:!0,composed:!0,cancelable:!0,detail:{...e,timestamp:Date.now(),layout:this.constructor.layoutId}});return this.dispatchEvent(t)}handleContactClick(n,e,t){const a={type:n,value:e,label:t};console.log("%c[LIBRARY] 📱 Contact click triggered:","color: #3b82f6; font-weight: bold",a),this.emitEvent(r.CONTACT_CLICK,a)?(console.log(`%c[LIBRARY] ✅ Executing default action for ${n}`,"color: #3b82f6; font-weight: bold"),this.defaultContactAction(n,e)):console.log("%c[LIBRARY] 🚫 Default action prevented by consumer","color: #ef4444; font-weight: bold")}defaultContactAction(n,e){try{switch(n){case"email":window.location.href=`mailto:${e}`;break;case"phone":window.location.href=`tel:${e}`;break;case"website":const n=e.startsWith("http")?e:`https://${e}`;window.open(n,"_blank","noopener,noreferrer");break;case"address":const t=`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(e)}`;window.open(t,"_blank","noopener,noreferrer")}}catch(e){console.warn(`[UniqodeCard] Failed to execute ${n} action:`,e)}}handleSaveContact(){const n=this.generateVCard(),e={vcardData:n,cardData:this._cardData};this.emitEvent(r.SAVE_CONTACT,e)&&this.downloadVCard(n)}handleCardShare(){const n={title:`${this._cardData.first_name||""} ${this._cardData.last_name||""}`.trim(),text:"Check out my digital business card",url:window.location.href},e={shareData:n,cardData:this._cardData};this.emitEvent("share",e)&&this.defaultShareAction(n)}handleLeadCollect(n){const e={leadData:n,cardData:this._cardData};this.emitEvent("lead-collect",e)}handleSocialClick(n,e){const t={platform:n,url:e};console.log("%c[LIBRARY] 🔗 Social click triggered:","color: #3b82f6; font-weight: bold",t),this.emitEvent(r.SOCIAL_CLICK,t)?(console.log("%c[LIBRARY] ✅ Opening social link","color: #3b82f6; font-weight: bold"),window.open(e,"_blank","noopener,noreferrer")):console.log("%c[LIBRARY] 🚫 Default action prevented by consumer","color: #ef4444; font-weight: bold")}handleCustomFieldClick(n,e){const t={fieldId:n,fieldValue:e};this.emitEvent("custom-field-click",t)}getInitials(){const{first_name:n="",last_name:e=""}=this._cardData;return(0,o.getInitials)(n,e)}hexToRGBA(n,e=.2){return(0,i.hexToRGBA)(n,e)}getFullName(){const{prefix:n,first_name:e="",last_name:t="",suffix:a}=this._cardData;let o="";return n&&(o+=n+" "),o+=e,t&&(o+=" "+t),a&&(o+=", "+a),o.trim()}generateVCard(){const{first_name:n,last_name:e,company:t,designation:a,email_v2:o,phone_v2:i,website_v2:r,address_v2:s}=this._cardData;let c="BEGIN:VCARD\nVERSION:3.0\n";return c+=`FN:${n||""} ${e||""}\n`,c+=`N:${e||""};${n||""};;;\n`,t&&(c+=`ORG:${t}\n`),a&&(c+=`TITLE:${a}\n`),o&&o.length>0&&o.forEach(n=>{n.value&&(c+=`EMAIL;TYPE=INTERNET:${n.value}\n`)}),i&&i.length>0&&i.forEach(n=>{n.value&&(c+=`TEL;TYPE=VOICE:${n.value}\n`)}),r&&r.length>0&&r[0].value&&(c+=`URL:${r[0].value}\n`),s&&(c+=`ADR;TYPE=WORK:;;${s};;;;\n`),c+="END:VCARD",c}downloadVCard(n){const e=new Blob([n],{type:"text/vcard;charset=utf-8"}),t=URL.createObjectURL(e),a=document.createElement("a"),o=`${this._cardData.first_name||"contact"}_${this._cardData.last_name||"card"}.vcf`;a.href=t,a.download=o,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(t)}defaultShareAction(n){navigator.share?navigator.share(n).catch(n=>{console.log("[UniqodeCard] Share cancelled or failed:",n)}):navigator.clipboard&&navigator.clipboard.writeText&&navigator.clipboard.writeText(n.url).then(()=>{console.log("[UniqodeCard] Link copied to clipboard")}).catch(n=>{console.warn("[UniqodeCard] Failed to copy link:",n)})}getContactIcon(n){const e={phone:'<svg viewBox="0 0 24 24" fill="currentColor">\n <path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/>\n </svg>',email:'<svg viewBox="0 0 24 24" fill="currentColor">\n <path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.89 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/>\n </svg>',website:'<svg viewBox="0 0 24 24" fill="currentColor">\n <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.94-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/>\n </svg>',address:'<svg viewBox="0 0 24 24" fill="currentColor">\n <path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>\n </svg>',custom:'<svg viewBox="0 0 24 24" fill="currentColor">\n <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>\n </svg>'};return e[n]||e.custom}setupComponent(){}setupEventListeners(){}cleanup(){this._eventListeners.forEach((n,e)=>{e.removeEventListener(n.event,n.handler)}),this._eventListeners.clear()}getCustomization(){const n=this._cardData?.customizations||{};return!this._customizationsLogged&&Object.keys(n).length>0?(console.log("%c[BaseCard] ✅ Customizations loaded:","color: #10b981; font-weight: bold",n),this._customizationsLogged=!0):this._customizationsLogged||(console.warn("%c[BaseCard] ⚠️ No customizations found in cardData","color: #ef4444; font-weight: bold"),this._customizationsLogged=!0),n}extractColors(){const n=this.getCustomization(),e=n.typography||{},t=n.background?.value||"#FFFFFF",a={"card-bg":t,"button-color":n.button_color,"icon-color":n.icon_color,"secondary-color":n.secondary_color,"user-info-color":n.user_info_color,"primary-color":n.background_color,"divider-color":this.getDarkerColor(t,15)};return e.personal_info&&(a["personal-info-color"]=e.personal_info.google_font_colour),e.company_details&&(a["company-details-color"]=e.company_details.google_font_colour),e.contact_details&&(a["contact-details-color"]=e.contact_details.google_font_colour),e.bio&&(a["bio-color"]=e.bio.google_font_colour),e.button&&(a["button-text-color"]=e.button.google_font_colour),e.button&&(a["button-text-color-typo"]=e.button.google_font_colour||a["button-text-color"]),a}getFontWeight(n){return{Thin:100,"Extra Light":200,Light:300,Regular:400,Medium:500,"Semi Bold":600,Bold:700,"Extra Bold":800,Black:900}[n]||400}extractTypography(){const n=this.getCustomization(),e=n.typography||{};return{fontFamily:e.font_family||n.font_style||"Roboto",fontType:e.font_type||n.font_type||"google",customFontUrl:n.custom_font_url||"",personalInfo:{fontSize:e.personal_info?.google_font_size||n.title_font_size||24,fontStyle:e.personal_info?.google_font_style||n.profile_info||"Semi Bold",fontWeight:this.getFontWeight(e.personal_info?.google_font_style||n.profile_info||"Semi Bold"),fontColor:e.personal_info?.google_font_colour||n.user_info_color||"#000000"},companyDetails:{fontSize:e.company_details?.google_font_size||16,fontStyle:e.company_details?.google_font_style||n.company_details||"Regular",fontWeight:this.getFontWeight(e.company_details?.google_font_style||n.company_details||"Regular"),fontColor:e.company_details?.google_font_colour||"#000000"},contactDetails:{fontSize:e.contact_details?.google_font_size||14,fontStyle:e.contact_details?.google_font_style||n.contact_details||"Medium",fontWeight:this.getFontWeight(e.contact_details?.google_font_style||n.contact_details||"Medium"),fontColor:e.contact_details?.google_font_colour||"#000000"},bio:{fontSize:e.bio?.google_font_size||16,fontStyle:e.bio?.google_font_style||"Regular",fontWeight:this.getFontWeight(e.bio?.google_font_style||"Regular"),fontColor:e.bio?.google_font_colour||"#000000"},button:{fontSize:e.button?.google_font_size||20,fontStyle:e.button?.google_font_style||n.button||"Regular",fontWeight:this.getFontWeight(e.button?.google_font_style||n.button||"Regular"),fontColor:e.button?.google_font_colour||"#FFFFFF"}}}extractBackground(){const n=this.getCustomization(),e=n.background||{};return{type:e.type||"color",value:e.value||n.background_color||"#FFFFFF",color:n.background_color||e.value||"#FFFFFF"}}getAllCustomizations(){return{colors:this.extractColors(),typography:this.extractTypography(),background:this.extractBackground(),raw:this.getCustomization()}}applyCustomColors(){const n=this.extractColors(),e=this.extractTypography(),t=this.extractBackground();this._colors=n,this._typography=e,this._background=t;const a=this._shadowRoot?.querySelector(".uqc-card-container"),o=this._shadowRoot?.host;if(!a)return;const i=e=>{Object.entries(n).forEach(([n,t])=>{e.style.setProperty(`--${n}`,t)})};i(a),o&&i(o);const r=n=>{n.style.setProperty("--font-family",e.fontFamily),n.style.setProperty("--font-type",e.fontType),n.style.setProperty("--personal-info-size",`${e.personalInfo.fontSize}px`),n.style.setProperty("--personal-info-style",e.personalInfo.fontStyle),n.style.setProperty("--personal-info-weight",e.personalInfo.fontWeight),n.style.setProperty("--personal-info-color",e.personalInfo.fontColor),n.style.setProperty("--company-details-size",`${e.companyDetails.fontSize}px`),n.style.setProperty("--company-details-style",e.companyDetails.fontStyle),n.style.setProperty("--company-details-weight",e.companyDetails.fontWeight),n.style.setProperty("--company-details-color",e.companyDetails.fontColor),n.style.setProperty("--contact-details-size",`${e.contactDetails.fontSize}px`),n.style.setProperty("--contact-details-style",e.contactDetails.fontStyle),n.style.setProperty("--contact-details-weight",e.contactDetails.fontWeight),n.style.setProperty("--contact-details-color",e.contactDetails.fontColor),n.style.setProperty("--bio-size",`${e.bio.fontSize}px`),n.style.setProperty("--bio-style",e.bio.fontStyle),n.style.setProperty("--bio-weight",e.bio.fontWeight),n.style.setProperty("--bio-color",e.bio.fontColor),n.style.setProperty("--button-size",`${e.button.fontSize}px`),n.style.setProperty("--button-style",e.button.fontStyle),n.style.setProperty("--button-weight",e.button.fontWeight),n.style.setProperty("--button-text-color-final",e.button.fontColor)};r(a),o&&r(o),"image"===t.type&&t.value?(a.style.setProperty("--card-bg-type","image"),a.style.setProperty("--card-bg-image",`url(${t.value})`)):(a.style.setProperty("--card-bg-type","color"),a.style.setProperty("--card-bg-color",t.color)),"google"===e.fontType&&e.fontFamily?this.loadGoogleFont(e.fontFamily):e.customFontUrl&&this.loadCustomFont(e.customFontUrl,e.fontFamily)}loadGoogleFont(n){if(!n)return;const e=`google-font-${n.replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(e))return;const t=document.createElement("link");t.id=e,t.rel="stylesheet",t.href=`https://fonts.googleapis.com/css2?family=${n.replace(/\s+/g,"+")}:wght@300;400;500;600;700&display=swap`,document.head.appendChild(t),console.log(`[BaseCard] 🔤 Loaded Google Font: ${n}`)}loadCustomFont(n,e){if(!n)return;const t=`custom-font-${e.replace(/\s+/g,"-").toLowerCase()}`;if(document.getElementById(t))return;const a=document.createElement("style");a.id=t,a.textContent=`\n @font-face {\n font-family: '${e}';\n src: url('${n}');\n font-display: swap;\n }\n `,document.head.appendChild(a)}getColor(n){if(this._colors&&this._colors[n])return this._colors[n];const e=this._shadowRoot?.querySelector(".uqc-card-container");return e?.style.getPropertyValue(`--${n}`)||"#000000"}getTypography(){return this._typography||this.extractTypography()}getTypographyFor(n){return this.getTypography()[n]||{fontSize:14,fontStyle:"Regular",fontColor:"#000000"}}getBackground(){return this._background||this.extractBackground()}getFontFamily(){return this.getTypography().fontFamily}getPersonalInfo(){const{first_name:n,last_name:e,prefix:t,suffix:a,pronouns_v2:o,designation:i,company:r,department:s,summary:c}=this._cardData;return{fullName:this.getFullName(),firstName:n,lastName:e,prefix:t,suffix:a,pronouns:o,designation:i,company:r,department:s,summary:c,initials:this.getInitials()}}getContactInfo(){const{phone_v2:n,email_v2:e,website_v2:t,address_v2:a,custom_fields:o,contact_info_ordering:i}=this._cardData,r={phone_v2:n||[],email_v2:e||[],website_v2:t||[],address_v2:a||"",custom_fields:o||[]};return i?this.orderContactInfo(r,i):r}orderContactInfo(n,e){return Object.keys(e).sort((n,e)=>parseInt(n)-parseInt(e)).map(n=>e[n]).map(e=>({type:e,items:n[e]})).filter(n=>"string"==typeof n.items?!!n.items:Array.isArray(n.items)&&n.items.length>0)}getSocialLinks(){const{social_links:n,social_links_ordering:e}=this._cardData;if(!n)return[];let t;return t=e?Object.keys(e).sort((n,e)=>parseInt(n)-parseInt(e)).map(n=>e[n]).filter(e=>n[e]):Object.keys(n).filter(e=>n[e]),t.map(e=>({platform:e,url:n[e]}))}getImages(){return{cover:this._cardData?.cover_image_url||"",profile:this._cardData?.user_image_url||"",logo:this._cardData?.logo_url||"",logoSize:this._cardData?.logo_size||80}}getStickyButtonTemplate(){const n=this._config||{},e=n.leadCollection||!1,t=n.showConnectButtons||!1,a=n.hideFooter||!1,o=n.pwaPreview||!1,i=this._cardData?.autodownload_url||"#";return`\n <style>\n .fixed-btn-container {\n position: fixed;\n display: ${o?"none":"flex"};\n flex-direction: column;\n max-width: 500px;\n bottom: 0px;\n padding: 12px 0px;\n background: rgba(255, 255, 255, 0.80);\n box-shadow: 0px -4px 4px 0px rgba(0, 0, 0, 0.04);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n width: -webkit-fill-available;\n align-items: center;\n z-index: 1000;\n }\n\n .btn, .btn-exchange {\n background-color: var(--button-color, #203D99);\n color: var(--button-text-color, #EBEBEB);\n border-radius: 10px;\n box-shadow: 0px 4px 4px rgba(98, 62, 9, 0.16);\n height: 48px;\n width: 90%;\n cursor: pointer;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n font-size: 18px;\n font-weight: 400;\n font-family: 'Inter', sans-serif;\n }\n\n #btn-connect-container {\n display: ${t?"flex":"none"};\n justify-content: space-between;\n align-items: center;\n height: 48px;\n width: 90%;\n gap: 16px;\n }\n\n .btn-connect {\n border: 1px solid var(--button-color, #203D99);\n color: var(--button-color, #203D99);\n background: transparent;\n border-radius: 10px;\n box-shadow: 0px 4px 4px rgba(98, 62, 9, 0.16);\n cursor: pointer;\n width: 100%;\n height: 46px;\n font-size: 16px;\n font-family: 'Inter', sans-serif;\n }\n\n .btn-create {\n background: var(--button-color, #203D99);\n color: var(--button-text-color, #EBEBEB);\n border: none;\n border-radius: 10px;\n box-shadow: 0px 4px 4px rgba(98, 62, 9, 0.16);\n cursor: pointer;\n width: 100%;\n height: 48px;\n font-size: 16px;\n font-family: 'Inter', sans-serif;\n }\n\n .uniqode-branding-footer {\n display: ${a?"none":"flex"};\n justify-content: center;\n align-items: center;\n padding: 12px 0px 0px 0px;\n }\n\n .uniqode-branding-footer-text {\n line-height: 17px;\n font-size: 14px;\n font-weight: 400;\n font-family: 'Inter', sans-serif;\n }\n \n .uniqode-logo-image {\n height: 16px;\n width: auto;\n margin-left: 5px;\n margin-top: 4px;\n }\n\n .create-your-free-card-link {\n text-decoration: underline;\n color: inherit;\n cursor: pointer;\n }\n </style>\n \n <div class="fixed-btn-container">\n ${e?this.getExchangeButtonsHTML(t):this.getAddToContactHTML(i)}\n ${this.getFooterHTML()}\n </div>\n `}getAddToContactHTML(n){return'\n <div class="btn" id="add-to-contact-main-page" data-add-to-contact>\n <svg width="22" height="22" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">\n <g clip-path="url(#clip0_434_678)">\n <path d="M10.6667 14V12.6667C10.6667 11.9594 10.3857 11.2811 9.88564 10.781C9.38554 10.281 8.70726 10 8.00002 10H3.33335C2.62611 10 1.94783 10.281 1.44774 10.781C0.947639 11.2811 0.666687 11.9594 0.666687 12.6667V14M13.3334 5.33333V9.33333M15.3334 7.33333H11.3334M8.33335 4.66667C8.33335 6.13943 7.13945 7.33333 5.66669 7.33333C4.19393 7.33333 3.00002 6.13943 3.00002 4.66667C3.00002 3.19391 4.19393 2 5.66669 2C7.13945 2 8.33335 3.19391 8.33335 4.66667Z" stroke="var(--button-text-color, #EBEBEB)" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>\n </g>\n <defs>\n <clipPath id="clip0_434_678">\n <rect width="16" height="16" fill="white"/>\n </clipPath>\n </defs>\n </svg>\n <span>Add to Contacts</span>\n </div>\n '}getExchangeButtonsHTML(n){return`\n <div class="btn-exchange" id="btn-exchange" style="display: ${n?"none":"flex"};" data-exchange-contacts>\n <i class="fas fa-exchange-alt" style="color: var(--button-text-color, #EBEBEB); font-size: 22px;"></i>\n <span>Exchange Contacts</span>\n </div>\n\n <div id="btn-connect-container">\n <button class="btn-connect" id="btn-connect" data-connect>\n Connect\n </button>\n <button class="btn-create" id="btn-create" data-create-card>\n Create Now\n </button>\n </div>\n `}getFooterHTML(){const n=(this._config||{}).hidePoweredBy||!1,e=this._cardData?.slug||"slug";return`\n <div id="footer-with-exchange" class="uniqode-branding-footer">\n <span class="uniqode-branding-footer-text"> \n ${n?"Created with":'<a href="#" class="create-your-free-card-link" data-footer-cta data-card-slug="'+e+'">Create your free card</a> with'}\n </span> \n <a href="https://www.uniqode.com/digital-business-card?utm_source=dbc_footer&utm_medium=referral&utm_campaign=flywheel"\n target="_blank" rel="noopener" data-footer-logo>\n <img src="${this._cardData?.static_assets_url||""}/static/images/footer/uniqode.svg" alt="Uniqode Logo" class="uniqode-logo-image">\n </a>\n </div>\n `}getButtonTextColor(n){const e=n.replace("#","");return(299*parseInt(e.substring(0,2),16)+587*parseInt(e.substring(2,4),16)+114*parseInt(e.substring(4,6),16))/1e3>186?"#000000":"#ffffff"}hexToHSL(n){n=n.replace("#","");const e=parseInt(n.substring(0,2),16)/255,t=parseInt(n.substring(2,4),16)/255,a=parseInt(n.substring(4,6),16)/255,o=Math.max(e,t,a),i=Math.min(e,t,a);let r,s,c=(o+i)/2;if(o===i)r=s=0;else{const n=o-i;switch(s=c>.5?n/(2-o-i):n/(o+i),o){case e:r=((t-a)/n+(t<a?6:0))/6;break;case t:r=((a-e)/n+2)/6;break;case a:r=((e-t)/n+4)/6}}return{h:360*r,s:100*s,l:100*c}}hslToHex(n,e,t){t/=100;const a=(e/=100)*Math.min(t,1-t),o=e=>{const o=(e+n/30)%12,i=t-a*Math.max(Math.min(o-3,9-o,1),-1);return Math.round(255*i).toString(16).padStart(2,"0")};return`#${o(0)}${o(8)}${o(4)}`}generateColorPalette(n,e){if(!n)return[];const t=this.hexToHSL(n);return e.map(n=>this.hslToHex(t.h,t.s,n))}getDarkerColor(n,e=10){if(!n)return"#E0E0E0";try{const t=this.hexToHSL(n),a=Math.max(0,t.l-e);return this.hslToHex(t.h,t.s,a)}catch(n){return console.warn("[BaseCard] getDarkerColor failed:",n),"#E0E0E0"}}attachStickyButtonListeners(){this._shadowRoot.querySelector("[data-add-to-contact]")?.addEventListener("click",n=>{const e=this._cardData?.autodownload_url;this.emitEvent(r.ADD_TO_CONTACT_CLICK,{url:e})}),this._shadowRoot.querySelector("[data-exchange-contacts]")?.addEventListener("click",()=>{this.openLeadForm(),this.emitEvent(r.EXCHANGE_CONTACTS_CLICK)}),this._shadowRoot.querySelector("[data-connect]")?.addEventListener("click",()=>{this.emitEvent(r.CONNECT_CLICK)}),this._shadowRoot.querySelector("[data-create-card]")?.addEventListener("click",n=>{const e=this._cardData?.slug||"slug";this.emitEvent(r.CREATE_NOW_CLICK,{slug:e})}),this._shadowRoot.querySelector("[data-footer-cta]")?.addEventListener("click",n=>{n.preventDefault();const e=n.target.getAttribute("data-card-slug");this.emitEvent(r.FOOTER_CTA_CLICK,{slug:e})}),this._shadowRoot.querySelector("[data-footer-logo]")?.addEventListener("click",()=>{this.emitEvent(r.FOOTER_LOGO_CLICK)})}showConnectButtons(){this._config.showConnectButtons=!0,this._config.hideFooter=!0;const n=this._shadowRoot.getElementById("uqc-btn-exchange"),e=this._shadowRoot.getElementById("uqc-btn-connect-container"),t=this._shadowRoot.getElementById("uqc-footer-with-exchange");n&&(n.style.display="none"),e&&(e.style.display="flex"),t&&(t.style.display="none"),console.log("[StickyButton] State changed: showing Connect + Create Now buttons")}resetToExchangeButton(){this._config.showConnectButtons=!1,this._config.hideFooter=!1;const n=this._shadowRoot.getElementById("uqc-btn-exchange"),e=this._shadowRoot.getElementById("uqc-btn-connect-container"),t=this._shadowRoot.getElementById("uqc-footer-with-exchange");n&&(n.style.display="flex"),e&&(e.style.display="none"),t&&(t.style.display="flex")}checkAutoOpenLeadForm(){const n=this._cardData||{},e=(n.lead_attribute||{}).connection;!n.lead_collection||"1"!==e&&1!==e?console.log("[LeadForm] Auto-open skipped:",{lead_collection:n.lead_collection,connection:e,has_lead_attribute:!!n.lead_attribute}):(console.log("[LeadForm] Auto-opening lead form (lead_collection=true, connection="+e+")"),setTimeout(()=>{this.openLeadForm&&(this.openLeadForm(),this.emitEvent(r.LEAD_FORM_OPEN,{source:"automatic"}))},200))}render(){throw new Error(`render() method must be implemented by ${this.constructor.name}`)}getTemplate(){throw new Error(`getTemplate() method must be implemented by ${this.constructor.name}`)}static get layoutId(){throw new Error(`layoutId must be defined by ${this.name} class`)}static get version(){return"1.0.0"}}},583:function(n,e,t){t.d(e,{K:function(){return o}});var a=t(310);class o extends a.a{static get layoutId(){return"layout-12"}connectedCallback(){this.loadFontAwesome(),super.connectedCallback()}loadFontAwesome(){if(document.getElementById("font-awesome-cdn"))return;const n=document.createElement("link");n.id="font-awesome-cdn",n.rel="stylesheet",n.href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css",n.integrity="sha512-iecdLmaskl7CVkqkXNQ/ZH/XLlvWZOJyj7Yy7tcenmpD1ypASozpmT/E0iPtmFIB46ZmdtAc9eNBvH0H/ZpiBw==",n.crossOrigin="anonymous",n.referrerPolicy="no-referrer",document.head.appendChild(n)}getTemplate(){const n=this._config?.layoutConfig||{},{width:e="auto",maxWidth:t="500px",height:a="auto",minHeight:o="100vh",centered:i=!0,fullWidth:r=!1,padding:s="0",clicksDisabled:c=!1,heroHeight:l="361px",footerClicksDisabled:d=!1}=n;return`\n <style>\n /* Import Font Awesome into Shadow DOM */\n @import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css');\n \n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :host {\n display: block;\n width: 100%;\n height: 100%;\n overflow: hidden; /* Prevent parent scrolling */\n position: relative; /* For absolute positioning of footer/form */\n }\n\n .uqc-card-container {\n width: ${r?"100%":e};\n max-width: ${r?"none":t};\n height: ${a};\n min-height: ${o};\n max-height: 100%; /* Don't exceed host height */\n margin: ${i?"0 auto":"0"};\n background: var(--card-bg, #F0EFED);\n position: relative;\n overflow: hidden; /* Container doesn't scroll, wrapper does */\n ${c?"pointer-events: none; user-select: none;":""}\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n \n /* Fixed elements wrapper - take full card width */\n .uqc-fixed-btn-container {\n width: 100%;\n max-width: 500px;\n margin: 0 auto;\n left: 0;\n right: 0;\n }\n \n /* Lead drawer - take full card width (transform handled by LeadFormMixin) */\n .uqc-lead-drawer {\n width: 100%;\n max-width: 500px;\n margin: 0 auto;\n left: 0;\n right: 0;\n }\n\n /* Scrollbar styling for better UX */\n .uqc-card-content-wrapper::-webkit-scrollbar {\n width: 6px;\n }\n\n .uqc-card-content-wrapper::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .uqc-card-content-wrapper::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n }\n\n .uqc-card-content-wrapper::-webkit-scrollbar-thumb:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n\n /* Responsive behavior */\n @media only screen and (max-width: 500px) {\n .uqc-card-container {\n max-width: 100%;\n }\n }\n\n /* Card content wrapper - scrolls when content overflows */\n .uqc-card-content-wrapper {\n flex: 0 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n overflow-x: hidden;\n -webkit-overflow-scrolling: touch;\n }\n\n /* Hero Image Section - configurable height */\n .uqc-hero-section {\n position: relative;\n width: 100%;\n height: ${l};\n overflow: hidden;\n flex-shrink: 0;\n }\n\n .uqc-hero-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n /* Logo Section - Positioned on hero image (top left) */\n .uqc-logo-section {\n position: absolute;\n top: 24px;\n left: 32px;\n z-index: 10;\n }\n\n .uqc-logo-circle {\n width: 50px;\n height: 50px;\n border-radius: 50%;\n background: #FFFFFF;\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n }\n\n .uqc-logo-image {\n width: 100%;\n height: 100%;\n object-fit: contain;\n padding: 4px;\n text-transform: uppercase;\n color: #EAEAEA;\n }\n\n /* Content Section - takes only needed space */\n .uqc-content-section {\n padding: 16px;\n flex-shrink: 0;\n }\n\n /* Personal Info Section */\n .uqc-personal-info {\n margin-bottom: 12px;\n }\n\n .uqc-name-line {\n display: flex;\n align-items: baseline;\n gap: 8px;\n margin-bottom: 4px;\n }\n\n .uqc-name {\n font-family: var(--font-family, 'Avenir Next'), sans-serif;\n font-weight: var(--personal-info-weight, 700);\n font-size: var(--personal-info-size, 26px);\n line-height: 1.1em;\n letter-spacing: -0.03em;\n text-transform: uppercase;\n color: var(--personal-info-color, var(--user-info-color, #203D99));\n }\n\n .uqc-pronouns {\n font-family: var(--font-family, 'Inter'), sans-serif;\n font-weight: var(--personal-info-weight, 400);\n font-size: calc(var(--personal-info-size, 26px) * 0.5);\n line-height: 1.21em;\n color: var(--personal-info-color, var(--user-info-color, #203D99));\n opacity: 0.8;\n }\n\n .uqc-job-title {\n font-family: var(--font-family, 'Avenir Next'), sans-serif;\n font-weight: var(--company-details-weight, 400);\n font-size: var(--company-details-size, 14.4px);\n line-height: 1.37em;\n color: var(--company-details-color, var(--user-info-color, #203D99));\n margin-bottom: 12px;\n }\n\n /* Dividers - color is darker version of card background */\n .uqc-divider-top {\n width: 100%;\n height: 1px;\n background: var(--divider-color, #E0E0E0);\n margin-bottom: 12px;\n }\n\n .uqc-divider-bottom {\n width: 100%;\n height: 1px;\n background: var(--divider-color, #E0E0E0);\n margin: 24px 0 16px 0;\n }\n\n /* Bio Section */\n .uqc-bio-section {\n margin-bottom: 24px;\n }\n\n .uqc-bio-text {\n font-family: var(--font-family, 'Avenir Next'), sans-serif;\n font-weight: var(--bio-weight, 400);\n font-size: var(--bio-size, 14.4px);\n line-height: 1.37em;\n color: var(--bio-color, var(--user-info-color, #203D99));\n max-width: 249px;\n }\n\n /* Contact Info Section */\n .uqc-contact-info {\n margin-bottom: 24px;\n }\n\n .uqc-contact-item {\n margin-bottom: 8px;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n\n .contact-item:hover {\n opacity: 0.8;\n }\n\n .contact-item:last-child {\n margin-bottom: 0;\n }\n\n .uqc-contact-value {\n font-family: var(--font-family, 'Avenir Next'), sans-serif;\n font-weight: var(--contact-details-weight, 400);\n font-size: var(--contact-details-size, 14.4px);\n line-height: 1.37em;\n color: var(--contact-details-color, var(--user-info-color, #203D99));\n }\n\n /* Social Links Section */\n .uqc-social-section {\n margin-bottom: 32px;\n }\n\n .uqc-social-links {\n display: flex;\n flex-wrap: wrap; /* ✅ Wrap to multiple rows when needed */\n gap: 15px;\n align-items: center;\n }\n\n .uqc-social-icon {\n width: 20px;\n height: 20px;\n cursor: pointer;\n transition: opacity 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .social-icon:hover {\n opacity: 0.7;\n }\n\n .social-icon svg {\n width: 100%;\n height: 100%;\n fill: var(--icon-color, #000000);\n }\n\n .social-icon i {\n font-size: 20px;\n }\n\n /* Color Stripes - Fills ALL remaining space in card container */\n .uqc-color-stripes {\n width: 100%;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto; /* Grow to fill ALL available space */\n min-height: 40px; /* Minimum 4 stripes × 10px */\n }\n\n .uqc-stripe {\n width: 100%;\n flex: 1; /* Each stripe grows equally */\n min-height: 10px; /* Minimum height per stripe */\n }\n\n /* Button Section - Part of flex flow, sits right after stripes */\n /* NOT absolute positioned - stripes end where button begins */\n .uqc-fixed-button-section {\n width: 100%;\n flex-shrink: 0; /* Don't shrink - always show full button */\n z-index: 1000;\n pointer-events: none; /* Allow scroll events to pass through */\n }\n\n /* Color palette generated from primary color (background_color) */\n .uqc-stripe-1 { background: var(--stripe-color-1); }\n .uqc-stripe-2 { background: var(--stripe-color-2); }\n .uqc-stripe-3 { background: var(--stripe-color-3); }\n .uqc-stripe-4 { background: var(--stripe-color-4); }\n\n /* Button Container - Inside fixed bottom section */\n .uqc-button-container {\n width: 100%;\n padding: 12px 16px 8px 16px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: center;\n pointer-events: ${d?"none":"auto"}; /* Disabled in preview mode */\n /* Background color applied dynamically via updateStickyButtons() */\n }\n\n /* Button Styles */\n .uqc-btn, .uqc-btn-exchange {\n background-color: var(--button-color, #203D99);\n color: var(--button-text-color, #EBEBEB);\n border-radius: 10px;\n box-shadow: 0px 4px 4px rgba(98, 62, 9, 0.16);\n height: 48px;\n width: 90%;\n cursor: pointer;\n border: none;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 12px;\n font-size: var(--button-size, 18px);\n font-weight: var(--button-weight, 400);\n font-family: var(--font-family, 'Inter'), sans-serif;\n pointer-events: auto;\n }\n\n .uqc-btn-connect-container {\n display: none;\n flex-direction: row;\n gap: 8px;\n width: 90%;\n }\n\n .uqc-btn-connect {\n flex: 1;\n width: auto;\n min-width: 0;\n padding: 12px 16px;\n }\n\n /* Footer */\n .uqc-footer-with-exchange {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n width: 100%;\n flex-wrap: wrap;\n margin-top: 8px;\n }\n\n .uqc-powered-by-text, .uqc-brand-name, .uqc-separator {\n font-family: 'Inter', sans-serif;\n font-size: 10px;\n color: rgba(255, 255, 255, 0.7);\n margin: 0;\n }\n\n .uqc-brand-name {\n font-weight: 600;\n }\n\n .uqc-separator {\n margin: 0 4px;\n }\n\n .uqc-footer-cta-link {\n font-family: 'Inter', sans-serif;\n font-size: 10px;\n font-weight: 500;\n color: rgba(255, 255, 255, 0.7);\n text-decoration: none;\n cursor: pointer;\n }\n\n .uqc-hidden {\n display: none !important;\n }\n </style>\n \n <div class="uqc-card-container">\n \x3c!-- Language Dropdown (inside card at top right) --\x3e\n ${this.getLanguageDropdownTemplate()}\n \n \x3c!-- Card content wrapper (hero + content) --\x3e\n <div class="uqc-card-content-wrapper">\n \x3c!-- Hero Image Section (logo positioned inside) --\x3e\n <div class="uqc-hero-section uqc-hidden">\n <img class="uqc-hero-image uqc-hidden" alt="Hero" />\n \n \x3c!-- Company Logo on top of hero (top left circle) --\x3e\n <div class="uqc-logo-section uqc-hidden">\n <div class="uqc-logo-circle">\n <img class="uqc-logo-image uqc-hidden" alt="Company Logo" />\n </div>\n </div>\n </div>\n\n \x3c!-- Content Section --\x3e\n <div class="uqc-content-section">\n \x3c!-- Personal Info --\x3e\n <div class="uqc-personal-info">\n <div class="uqc-name-line">\n <div class="uqc-name"></div>\n <div class="uqc-pronouns uqc-hidden"></div>\n </div>\n <div class="uqc-job-title uqc-hidden"></div>\n </div>\n\n \x3c!-- Divider --\x3e\n <div class="uqc-divider-top"></div>\n\n \x3c!-- Bio --\x3e\n <div class="uqc-bio-section uqc-hidden">\n <div class="uqc-bio-text"></div>\n </div>\n\n \x3c!-- Divider --\x3e\n <div class="uqc-divider-bottom"></div>\n\n \x3c!-- Contact Info --\x3e\n <div class="uqc-contact-info"></div>\n\n \x3c!-- Social Links --\x3e\n <div class="uqc-social-section">\n <div class="uqc-social-links"></div>\n </div>\n </div>\n </div>\n \n \x3c!-- Color Stripes - Fills ALL remaining space --\x3e\n <div class="uqc-color-stripes">\n <div class="uqc-stripe uqc-stripe-1"></div>\n <div class="uqc-stripe uqc-stripe-2"></div>\n <div class="uqc-stripe uqc-stripe-3"></div>\n <div class="uqc-stripe uqc-stripe-4"></div>\n </div>\n \n \x3c!-- Fixed Button Section - Inside card container, positioned at bottom --\x3e\n <div class="uqc-fixed-button-section">\n <div class="uqc-button-container">\n ${this.getButtonsHTML()}\n </div>\n </div>\n </div>\n \n \x3c!-- Lead Collection Form (outside scrolling container, fixed to :host) --\x3e\n ${!1!==this._config?.leadCollection?this.getLeadFormTemplate():""}\n \n \x3c!-- Card Exchange Animation (outside card, full screen overlay) --\x3e\n ${!1!==this._config?.enableAnimation?this.getAnimationFrameTemplate():""}\n `}getButtonsHTML(){const n=this._cardData||{},e=this._config||{},t=(n.lead_collection,e.showConnectButtons,n.autodownload_url||"#"),a=n.slug||"slug",o=e.hideFooter??!1,i=n.branding_footer??!1;return`\n <a class="uqc-btn" id="uqc-btn-add-to-contact" href="${t}" data-add-to-contact style="text-decoration: none;">\n <i class="fas fa-user-plus" style="font-size: 20px;"></i>\n Add to Contacts\n </a>\n \n <button class="uqc-btn-exchange" id="uqc-btn-exchange" data-exchange-contacts>\n <i class="fas fa-exchange-alt" style="font-size: 20px;"></i>\n Exchange Contacts\n </button>\n \n <div class="uqc-btn-connect-container" id="uqc-btn-connect-container">\n <button class="uqc-btn uqc-btn-connect" data-connect>\n <i class="fas fa-link" style="font-size: 20px;"></i>\n Connect\n </button>\n <button class="uqc-btn uqc-btn-connect" data-create-card data-card-slug="${a}">\n <i class="fas fa-plus-circle" style="font-size: 20px;"></i>\n Create Now\n </button>\n </div>\n `+(o||i?"":`\n <div class="uqc-footer-with-exchange" id="uqc-footer-with-exchange">\n <span class="uqc-powered-by-text">Powered by</span>\n <span class="uqc-brand-name">Uniqode</span>\n <span class="uqc-separator">•</span>\n <a href="#" class="uqc-footer-cta-link" data-footer-cta data-card-slug="${a}">\n Create your free card with Uniqode\n </a>\n </div>\n `)}render(){this._cardData&&(this.applyCustomColors(),this.applyStripeColorPalette(),this.renderLanguageDropdown(),this.renderHeroImage(),this.renderLogo(),this.renderPersonalInfo(),this.renderBio(),this.renderContactInfo(),this.renderSocialLinks(),this.updateStickyButtons(),this._listenersAttached||(this.attachEventListeners(),this.attachStickyButtonFooterListeners(),!1!==this._config?.leadCollection&&this.attachLeadFormListeners(),this._listenersAttached=!0))}applyStripeColorPalette(){const n=this.getColor("primary-color"),e=this._shadowRoot?.querySelector(".uqc-color-stripes");if(!e||!n)return void console.warn("[CardLayout12] Cannot apply stripe colors - missing primary color or stripes container");const t=this.hexToHSL(n).l,a=Math.min(95,t+15),o=Math.min(95,t+35),i=Math.min(95,t+48),r=[Math.min(95,t+55),i,o,a],s=this.generateColorPalette(n,r);e.querySelectorAll(".uqc-stripe").forEach((n,e)=>{s[e]&&(n.style.backgroundColor=s[e],console.log(`[CardLayout12] Stripe ${e+1}: ${s[e]} (L: ${r[e].toFixed(0)}%)`))}),console.log("[CardLayout12] Applied stripe colors from primary:",n,"(L:",t.toFixed(0)+"%)")}renderHeroImage(){const n=this.getImages(),e=this._shadowRoot.querySelector(".uqc-hero-image"),t=this._shadowRoot.querySelector(".uqc-hero-section"),a=!!n.profile,o=!!n.logo,i=(this._config?.layoutConfig||{}).heroHeight||"361px";if(a)e.src=n.profile,e.classList.remove("uqc-hidden"),t.classList.remove("uqc-hidden"),t.style.height=i;else if(o){e.classList.add("uqc-hidden"),t.classList.remove("uqc-hidden");const a=n.logoSize||50,o=24,i=24;t.style.height=`${o+a+i}px`}else e.classList.add("uqc-hidden"),t.classList.add("uqc-hidden")}renderLogo(){const n=this.getImages(),e=this._shadowRoot.querySelector(".uqc-logo-image"),t=this._shadowRoot.querySelector(".uqc-logo-section"),a=this._shadowRoot.querySelector(".uqc-logo-circle");if(n.logo){e.src=n.logo,e.classList.remove("uqc-hidden"),t.classList.remove("uqc-hidden");const o=n.logoSize||50;a&&(a.style.width=`${o}px`,a.style.height=`${o}px`)}else t.classList.add("uqc-hidden")}renderPersonalInfo(){const n=this.getPersonalInfo();this._shadowRoot.querySelector(".uqc-name").textContent=n.fullName;const e=this._shadowRoot.querySelector(".uqc-pronouns");n.pronouns?(e.textContent=`(${n.pronouns})`,e.classList.remove("uqc-hidden")):e.classList.add("uqc-hidden");const t=this._shadowRoot.querySelector(".uqc-job-title");n.designation?(t.textContent=n.designation,t.classList.remove("uqc-hidden")):t.classList.add("uqc-hidden")}renderBio(){const n=this.getPersonalInfo(),e=this._shadowRoot.querySelector(".uqc-bio-section"),t=this._shadowRoot.querySelector(".uqc-bio-text"),a=this._shadowRoot.querySelector(".uqc-divider-top"),o=this._shadowRoot.querySelector(".uqc-divider-bottom");n.summary?(t.textContent=n.summary,e.classList.remove("uqc-hidden"),a&&a.classList.remove("uqc-hidden"),o&&o.classList.remove("uqc-hidden")):(e.classList.add("uqc-hidden"),a&&a.classList.add("uqc-hidden"),o&&o.classList.add("uqc-hidden"))}renderContactInfo(){const n=this.getContactInfo(),e=JSON.stringify(n);if(this._lastContactKey===e)return;this._lastContactKey=e;const t=this._shadowRoot.querySelector(".uqc-contact-info");t.innerHTML="";const a=(n,e)=>{e&&Array.isArray(e)&&0!==e.length&&e.forEach(e=>{if(e&&e.value){const a=this.createContactItem(n,e.value,e.label);t.appendChild(a)}})};Array.isArray(n)?n.forEach(({type:n,items:e})=>{const o=n.replace("_v2","");if("address_v2"===n&&"string"==typeof e){const n=this.createContactItem("address",e);t.appendChild(n)}else a("custom_fields"===n?"custom":o,e)}):Object.entries(n).forEach(([n,e])=>{const o=n.replace("_v2","");if("address_v2"===n&&"string"==typeof e){const n=this.createContactItem("address",e);t.appendChild(n)}else a("custom_fields"===n?"custom":o,e)})}createContactItem(n,e,t){const a=document.createElement("div");return a.className="uqc-contact-item",a.innerHTML=t?`\n <div class="uqc-contact-label" style="font-size: 12px; color: var(--contact-details-color, var(--user-info-color, #203D99)); margin-bottom: 4px;">${t}</div>\n <div class="uqc-contact-value">${e}</div>\n `:`<div class="contact-value">${e}</div>`,a.addEventListener("click",()=>{this.handleContactClick(n,e)}),a}renderSocialLinks(){const n=this.getSocialLinks(),e=JSON.stringify(n);if(this._lastSocialKey===e)return;this._lastSocialKey=e;const t=this._shadowRoot.querySelector(".uqc-social-links");t.innerHTML="",n.forEach(({platform:n,url:e})=>{const a=document.createElement("div");a.className="uqc-social-icon",a.innerHTML=this.getSocialIcon(n),a.addEventListener("click",()=>{this.handleSocialClick(n,e)}),t.appendChild(a)})}getSocialIcon(n){const e={yelp:"fab fa-yelp",vimeo:"fab fa-vimeo",github:"fab fa-github",paypal:"fab fa-paypal",tiktok:"fab fa-tiktok",twitch:"fab fa-twitch",behance:"fab fa-behance",discord:"fab fa-discord",shopify:"fab fa-shopify",youtube:"fab fa-youtube",dribbble:"fab fa-dribbble",facebook:"fab fa-facebook",linkedin:"fab fa-linkedin",snapchat:"fab fa-snapchat",telegram:"fab fa-telegram",whatsapp:"fab fa-whatsapp",instagram:"fab fa-instagram",pinterest:"fab fa-pinterest"},t=this.getColor("icon-color");return e[n]?`<i class="${e[n]}" style="color: ${t}; font-size: 20px;"></i>`:this.getCustomColoredSocialIconSvg(n,t)}getCustomColoredSocialIconSvg(n,e){switch(n){case"twitter":return`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none">\n <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" fill="${e}"/>\n </svg>`;case"wistia":return`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 31 30" fill="none">\n <path d="M9.5 13V17H12.5V24H16.5V17H19.5L20.5 13H16.5V11C16.5 10.7348 16.6054 10.4804 16.7929 10.2929C16.9804 10.1054 17.2348 10 17.5 10H20.5V6H17.5C16.1739 6 14.9021 6.52678 13.9645 7.46447C13.0268 8.40215 12.5 9.67392 12.5 11V13H9.5Z" stroke="${e}" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/>\n </svg>`;case"custom_url":default:return`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 121 120" fill="none">\n <circle cx="60.1324" cy="60" r="56.4849" stroke="${e}" stroke-width="7.03025"/>\n <path d="M60.1324 115.055C75.3964 115.055 87.7703 90.4061 87.7703 60C87.7703 29.5938 75.3964 4.94482 60.1324 4.94482" stroke="${e}" stroke-width="7.03025"/>\n <path d="M60.1324 4.94482C44.8685 4.94482 32.4946 29.5938 32.4946 60C32.4946 90.4061 44.8685 115.055 60.1324 115.055" stroke="${e}" stroke-width="7.03025"/>\n <path d="M7.73383 60H112.531" stroke="${e}" stroke-width="7.03025"/>\n <path d="M13.6699 35.2739H106.595" stroke="${e}" stroke-width="7.03025"/>\n <path d="M13.6699 84.7261H106.595" stroke="${e}" stroke-width="7.03025"/>\n </svg>`;case"calendly":return`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none">\n <path d="M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z" fill="${e}"/>\n </svg>`;case"venmo":return`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none">\n <path d="M21.5 2h-19C1.67 2 1 2.67 1 3.5v17c0 .83.67 1.5 1.5 1.5h19c.83 0 1.5-.67 1.5-1.5v-17c0-.83-.67-1.5-1.5-1.5zM13.5 17h-3L8 7h3l1.5 7 2-7h3l-4 10z" fill="${e}"/>\n </svg>`;case"cashapp":return`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none">\n <path d="M21 5H3c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-5 10h-2v-2h2v2zm0-4h-2V9h2v2z" fill="${e}"/>\n </svg>`}}getInvertedColor(n){return n=n.replace("#",""),(.299*parseInt(n.substr(0,2),16)+.587*parseInt(n.substr(2,2),16)+.114*parseInt(n.substr(4,2),16))/255>.5?"#000000":"#FFFFFF"}attachEventListeners(){this.attachLanguageDropdownListeners()}}customElements.define("uniqode-layout-12",o)},688:function(n,e,t){function a(n){const e=[];return!n||"object"!=typeof n||Array.isArray(n)?(e.push("Card data must be a valid object"),{isValid:!1,errors:e}):(n.first_name||n.last_name||n.name||e.push("At least one name field (first_name, last_name, or name) is required"),n.customizations&&"object"!=typeof n.customizations&&e.push("Customizations must be an object"),["phone_v2","email_v2","website_v2","custom_fields"].forEach(t=>{n[t]&&!Array.isArray(n[t])&&e.push(`${t} must be an array`),Array.isArray(n[t])&&n[t].forEach((n,a)=>{n&&"object"==typeof n?n.value||e.push(`${t}[${a}] must have a value property`):null!=n&&e.push(`${t}[${a}] must be an object or null`)})}),n.social_links&&"object"!=typeof n.social_links&&e.push("Social links must be an object"),n.customizations&&["background_color","icon_color","button_color"].forEach(t=>{const a=n.customizations[t];a&&!o(a)&&e.push(`Invalid color format for ${t}: ${a}`)}),["logo_url","user_image_url","address_url"].forEach(t=>{const a=n[t];a&&!i(a)&&e.push(`Invalid URL format for ${t}: ${a}`)}),Array.isArray(n.email_v2)&&n.email_v2.forEach((n,t)=>{n&&n.value&&!r(n.value)&&e.push(`Invalid email format in email_v2[${t}]: ${n.value}`)}),{isValid:0===e.length,errors:e})}function o(n){return!(!n||"string"!=typeof n)&&(!!/^#([A-Fa-f0-9]{3}){1,2}$/.test(n)||(!!/^rgba?\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*(,\s*[\d.]+)?\s*\)$/.test(n)||(!!/^hsla?\(\s*\d+\s*,\s*\d+%\s*,\s*\d+%\s*(,\s*[\d.]+)?\s*\)$/.test(n)||["black","white","red","green","blue","yellow","orange","purple","pink","brown","gray","grey","cyan","magenta","lime","navy","maroon","olive","teal","silver","aqua","fuchsia","transparent"].includes(n.toLowerCase()))))}function i(n){if(!n||"string"!=typeof n)return!1;try{return new URL(n),!0}catch{return/^(https?:\/\/|\/\/|\/|\.\/)/.test(n)||/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}/.test(n)}}function r(n){return!(!n||"string"!=typeof n)&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)}function s(n){if(!n||"string"!=typeof n)return!1;const e=n.replace(/[^\d+]/g,"").replace(/^\+/,"").length;return e>=7&&e<=15}function c(n){if(!n||"object"!=typeof n)return{};const e=JSON.parse(JSON.stringify(n)),t=n=>{if("string"==typeof n)return"string"!=typeof(e=n)?e:e.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"").replace(/javascript:/gi,"").replace(/on\w+\s*=/gi,"");if(Array.isArray(n))return n.map(t);if(n&&"object"==typeof n){const e={};return Object.keys(n).forEach(a=>{e[a]=t(n[a])}),e}var e;return n};return t(e)}function l(){return{first_name:"",last_name:"",designation:"",company:"",department:"",summary:"",phone_v2:[],email_v2:[],website_v2:[],custom_fields:[],address_v2:"",social_links:{},logo_url:"",user_image_url:"",customizations:{background_color:"#ffffff",icon_color:"#333333",button_color:"#007bff",font_style:"Work Sans"},contact_info_ordering:["phone_v2","email_v2","website_v2","custom_fields"]}}t.r(e),t.d(e,{getDefaultCardData:function(){return l},isValidColor:function(){return o},isValidEmail:function(){return r},isValidPhone:function(){return s},isValidUrl:function(){return i},sanitizeCardData:function(){return c},validateCardData:function(){return a}}),e.default={validateCardData:a,isValidColor:o,isValidUrl:i,isValidEmail:r,isValidPhone:s,sanitizeCardData:c,getDefaultCardData:l}},750:function(n,e,t){function a(n="",e=""){const t=(n||"").toString().trim(),a=(e||"").toString().trim();return t||a?(t.charAt(0).toUpperCase()+a.charAt(0).toUpperCase()).substring(0,2):""}function o(n=""){const e=n.toString().trim().split(/\s+/);return 0===e.length||""===e[0]?"UN":1===e.length?e[0].substring(0,2).toUpperCase():e[0].charAt(0).toUpperCase()+e[e.length-1].charAt(0).toUpperCase()}function i(n={}){const{first_name:e,last_name:t,company:i,name:r}=n;return e||t?a(e,t):r?o(r):i?o(i):"UN"}function r(n=""){if(!n)return"#007bff";let e=0;for(let t=0;t<n.length;t++)e=n.charCodeAt(t)+((e<<5)-e);return function(n){const e=65*Math.min(.5,.5)/100,t=t=>{const a=(t+n/30)%12,o=.5-e*Math.max(Math.min(a-3,9-a,1),-1);return Math.round(255*o).toString(16).padStart(2,"0")};return`#${t(0)}${t(8)}${t(4)}`}(Math.abs(e)%360)}t.r(e),t.d(e,{getInitials:function(){return a},getInitialsBackgroundColor:function(){return r},getInitialsFromFullName:function(){return o},getInitialsWithFallback:function(){return i}}),e.default={getInitials:a,getInitialsFromFullName:o,getInitialsWithFallback:i,getInitialsBackgroundColor:r}}},e={};function t(a){var o=e[a];if(void 0!==o)return o.exports;var i=e[a]={exports:{}};return n[a](i,i.exports,t),i.exports}t.d=function(n,e){for(var a in e)t.o(e,a)&&!t.o(n,a)&&Object.defineProperty(n,a,{enumerable:!0,get:e[a]})},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})};var a={};t.d(a,{Dp:function(){return s},Hr:function(){return f},IM:function(){return g},Kp:function(){return o.K},TZ:function(){return r},Uv:function(){return p},aR:function(){return i.a},hq:function(){return l},iu:function(){return m},ne:function(){return c},o1:function(){return u},w5:function(){return h},wE:function(){return b},zX:function(){return d}});var o=t(583),i=t(310),r=t(59),s=t(750),c=t(688);const l={name:"Uniqode Card Templates",version:"1.0.0",description:"Universal card layout components for web applications",author:"Uniqode Team",license:"MIT"},{hexToRGBA:d,isValidColor:u,getContrastColor:h}=r,{getInitials:g,getInitialsWithFallback:p}=s,{validateCardData:f,sanitizeCardData:m,getDefaultCardData:b}=c;"undefined"!=typeof window&&!1!==window.UNIQODE_AUTO_REGISTER&&(console.log(`🎉 ${l.name} v${l.version} loaded`),console.log("📦 Available components:",["uniqode-layout-12"])),"undefined"!=typeof window&&(window.UniqodeCardTemplates={...l,components:{BaseCard:i.a,CardLayout12:o.K},utils:{ColorUtils:r,InitialsUtils:s,ValidationUtils:c}}),a.Ay={...l,components:{BaseCard:i.a,CardLayout12:o.K},utils:{ColorUtils:r,InitialsUtils:s,ValidationUtils:c}};var y=a.aR,x=a.Kp,w=a.TZ,v=a.Dp,C=a.hq,_=a.ne,q=a.Ay,S=a.w5,k=a.wE,E=a.IM,L=a.Uv,F=a.zX,A=a.o1,I=a.iu,T=a.Hr;export{y as BaseCard,x as CardLayout12,w as ColorUtils,v as InitialsUtils,C as LIBRARY_INFO,_ as ValidationUtils,q as default,S as getContrastColor,k as getDefaultCardData,E as getInitials,L as getInitialsWithFallback,F as hexToRGBA,A as isValidColor,I as sanitizeCardData,T as validateCardData};
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Enums for Uniqode Card Templates
3
+ * Aligned with Angular/Django backend models
4
+ */
5
+
6
+ /**
7
+ * Product state enum
8
+ * Represents the lifecycle state of a digital business card
9
+ */
10
+ export enum PRODUCT_STATE {
11
+ ACTIVE = 'active',
12
+ INACTIVE = 'inactive',
13
+ ARCHIVED = 'archived',
14
+ DRAFT = 'draft'
15
+ }
16
+
17
+ /**
18
+ * Lead collection type
19
+ * Determines when lead information is collected
20
+ */
21
+ export enum LEAD_COLLECT_TYPE {
22
+ SHARE_FIRST = 'share_first', // User shares contact first, then lead form appears
23
+ COLLECT_FIRST = 'collect_first' // Lead form appears first before sharing
24
+ }
25
+
26
+ /**
27
+ * Background type for card customization
28
+ */
29
+ export enum DBC_BACKGROUND_TYPE {
30
+ Color = 'color',
31
+ Image = 'image',
32
+ Gradient = 'gradient'
33
+ }
34
+
35
+ /**
36
+ * Contact detail types for ordering
37
+ */
38
+ export enum CONTACT_DETAIL {
39
+ PHONE_V2 = 'phone_v2',
40
+ EMAIL_V2 = 'email_v2',
41
+ WEBSITE_V2 = 'website_v2',
42
+ CUSTOM_FIELDS = 'custom_fields'
43
+ }
44
+
45
+ /**
46
+ * Text field validation states
47
+ */
48
+ export enum TEXT_FIELD_VALIDATIONS {
49
+ VALID = 'valid',
50
+ ERROR = 'error',
51
+ WARNING = 'warning'
52
+ }
53
+
54
+ /**
55
+ * Contact info type (used in contact_info_ordering)
56
+ */
57
+ export type contactInfoType =
58
+ | CONTACT_DETAIL.PHONE_V2
59
+ | CONTACT_DETAIL.EMAIL_V2
60
+ | CONTACT_DETAIL.WEBSITE_V2
61
+ | CONTACT_DETAIL.CUSTOM_FIELDS;
62
+
63
+ /**
64
+ * Default contact info ordering
65
+ */
66
+ export const default_contact_info_ordering: Record<string, contactInfoType> = {
67
+ '0': CONTACT_DETAIL.PHONE_V2,
68
+ '1': CONTACT_DETAIL.EMAIL_V2,
69
+ '2': CONTACT_DETAIL.WEBSITE_V2,
70
+ '3': CONTACT_DETAIL.CUSTOM_FIELDS
71
+ };
72
+