notify-me-wl 2.1.0 → 2.1.1
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/README.md +1 -1
- package/build/notify-me-wl.min.js +1 -1
- package/package.json +1 -1
- package/build/notify-me-wl.js +0 -680
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ Source lives in `src/` (TypeScript) and is bundled with Rollup into `build/`.
|
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
npm install # install dev dependencies
|
|
28
|
-
npm run build # emit build/notify-me-wl.
|
|
28
|
+
npm run build # emit build/notify-me-wl.min.js
|
|
29
29
|
npm run dev # rebuild on change (watch mode)
|
|
30
30
|
npm run typecheck # type-check without emitting
|
|
31
31
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";const e=[{code:"AF",name:"Afghanistan"},{code:"AX",name:"Åland Islands"},{code:"AL",name:"Albania"},{code:"DZ",name:"Algeria"},{code:"AS",name:"American Samoa"},{code:"AD",name:"Andorra"},{code:"AO",name:"Angola"},{code:"AI",name:"Anguilla"},{code:"AG",name:"Antigua and Barbuda"},{code:"AR",name:"Argentina"},{code:"AM",name:"Armenia"},{code:"AW",name:"Aruba"},{code:"AU",name:"Australia"},{code:"AT",name:"Austria"},{code:"AZ",name:"Azerbaijan"},{code:"BS",name:"Bahamas"},{code:"BH",name:"Bahrain"},{code:"BD",name:"Bangladesh"},{code:"BB",name:"Barbados"},{code:"BY",name:"Belarus"},{code:"BE",name:"Belgium"},{code:"BZ",name:"Belize"},{code:"BJ",name:"Benin"},{code:"BM",name:"Bermuda"},{code:"BT",name:"Bhutan"},{code:"BO",name:"Bolivia"},{code:"BA",name:"Bosnia and Herzegovina"},{code:"BW",name:"Botswana"},{code:"BR",name:"Brazil"},{code:"BN",name:"Brunei"},{code:"BG",name:"Bulgaria"},{code:"BF",name:"Burkina Faso"},{code:"BI",name:"Burundi"},{code:"CV",name:"Cabo Verde"},{code:"KH",name:"Cambodia"},{code:"CM",name:"Cameroon"},{code:"CA",name:"Canada"},{code:"KY",name:"Cayman Islands"},{code:"CF",name:"Central African Republic"},{code:"TD",name:"Chad"},{code:"CL",name:"Chile"},{code:"CN",name:"China"},{code:"CO",name:"Colombia"},{code:"KM",name:"Comoros"},{code:"CG",name:"Congo"},{code:"CD",name:"Congo, DR"},{code:"CK",name:"Cook Islands"},{code:"CR",name:"Costa Rica"},{code:"HR",name:"Croatia"},{code:"CU",name:"Cuba"},{code:"CW",name:"Curaçao"},{code:"CY",name:"Cyprus"},{code:"CZ",name:"Czech Republic"},{code:"DK",name:"Denmark"},{code:"DJ",name:"Djibouti"},{code:"DM",name:"Dominica"},{code:"DO",name:"Dominican Republic"},{code:"EC",name:"Ecuador"},{code:"EG",name:"Egypt"},{code:"SV",name:"El Salvador"},{code:"GQ",name:"Equatorial Guinea"},{code:"ER",name:"Eritrea"},{code:"EE",name:"Estonia"},{code:"SZ",name:"Eswatini"},{code:"ET",name:"Ethiopia"},{code:"FO",name:"Faroe Islands"},{code:"FJ",name:"Fiji"},{code:"FI",name:"Finland"},{code:"FR",name:"France"},{code:"GF",name:"French Guiana"},{code:"PF",name:"French Polynesia"},{code:"GA",name:"Gabon"},{code:"GM",name:"Gambia"},{code:"GE",name:"Georgia"},{code:"DE",name:"Germany"},{code:"GH",name:"Ghana"},{code:"GI",name:"Gibraltar"},{code:"GR",name:"Greece"},{code:"GL",name:"Greenland"},{code:"GD",name:"Grenada"},{code:"GP",name:"Guadeloupe"},{code:"GU",name:"Guam"},{code:"GT",name:"Guatemala"},{code:"GN",name:"Guinea"},{code:"GW",name:"Guinea-Bissau"},{code:"GY",name:"Guyana"},{code:"HT",name:"Haiti"},{code:"HN",name:"Honduras"},{code:"HK",name:"Hong Kong"},{code:"HU",name:"Hungary"},{code:"IS",name:"Iceland"},{code:"IN",name:"India"},{code:"ID",name:"Indonesia"},{code:"IR",name:"Iran"},{code:"IQ",name:"Iraq"},{code:"IE",name:"Ireland"},{code:"IM",name:"Isle of Man"},{code:"IL",name:"Israel"},{code:"IT",name:"Italy"},{code:"JM",name:"Jamaica"},{code:"JP",name:"Japan"},{code:"JE",name:"Jersey"},{code:"JO",name:"Jordan"},{code:"KZ",name:"Kazakhstan"},{code:"KE",name:"Kenya"},{code:"KI",name:"Kiribati"},{code:"KR",name:"Korea, South"},{code:"XK",name:"Kosovo"},{code:"KW",name:"Kuwait"},{code:"KG",name:"Kyrgyzstan"},{code:"LA",name:"Laos"},{code:"LV",name:"Latvia"},{code:"LB",name:"Lebanon"},{code:"LS",name:"Lesotho"},{code:"LR",name:"Liberia"},{code:"LY",name:"Libya"},{code:"LI",name:"Liechtenstein"},{code:"LT",name:"Lithuania"},{code:"LU",name:"Luxembourg"},{code:"MO",name:"Macao"},{code:"MG",name:"Madagascar"},{code:"MW",name:"Malawi"},{code:"MY",name:"Malaysia"},{code:"MV",name:"Maldives"},{code:"ML",name:"Mali"},{code:"MT",name:"Malta"},{code:"MH",name:"Marshall Islands"},{code:"MQ",name:"Martinique"},{code:"MR",name:"Mauritania"},{code:"MU",name:"Mauritius"},{code:"MX",name:"Mexico"},{code:"FM",name:"Micronesia"},{code:"MD",name:"Moldova"},{code:"MC",name:"Monaco"},{code:"MN",name:"Mongolia"},{code:"ME",name:"Montenegro"},{code:"MS",name:"Montserrat"},{code:"MA",name:"Morocco"},{code:"MZ",name:"Mozambique"},{code:"MM",name:"Myanmar"},{code:"NA",name:"Namibia"},{code:"NR",name:"Nauru"},{code:"NP",name:"Nepal"},{code:"NL",name:"Netherlands"},{code:"NC",name:"New Caledonia"},{code:"NZ",name:"New Zealand"},{code:"NI",name:"Nicaragua"},{code:"NE",name:"Niger"},{code:"NG",name:"Nigeria"},{code:"NU",name:"Niue"},{code:"MK",name:"North Macedonia"},{code:"NO",name:"Norway"},{code:"OM",name:"Oman"},{code:"PK",name:"Pakistan"},{code:"PW",name:"Palau"},{code:"PS",name:"Palestine"},{code:"PA",name:"Panama"},{code:"PG",name:"Papua New Guinea"},{code:"PY",name:"Paraguay"},{code:"PE",name:"Peru"},{code:"PH",name:"Philippines"},{code:"PL",name:"Poland"},{code:"PT",name:"Portugal"},{code:"PR",name:"Puerto Rico"},{code:"QA",name:"Qatar"},{code:"RE",name:"Réunion"},{code:"RO",name:"Romania"},{code:"RW",name:"Rwanda"},{code:"KN",name:"Saint Kitts and Nevis"},{code:"LC",name:"Saint Lucia"},{code:"VC",name:"Saint Vincent and the Grenadines"},{code:"WS",name:"Samoa"},{code:"SM",name:"San Marino"},{code:"SA",name:"Saudi Arabia"},{code:"SN",name:"Senegal"},{code:"RS",name:"Serbia"},{code:"SC",name:"Seychelles"},{code:"SL",name:"Sierra Leone"},{code:"SG",name:"Singapore"},{code:"SK",name:"Slovakia"},{code:"SI",name:"Slovenia"},{code:"SB",name:"Solomon Islands"},{code:"SO",name:"Somalia"},{code:"ZA",name:"South Africa"},{code:"SS",name:"South Sudan"},{code:"ES",name:"Spain"},{code:"LK",name:"Sri Lanka"},{code:"SD",name:"Sudan"},{code:"SR",name:"Suriname"},{code:"SE",name:"Sweden"},{code:"CH",name:"Switzerland"},{code:"SY",name:"Syria"},{code:"TW",name:"Taiwan"},{code:"TJ",name:"Tajikistan"},{code:"TZ",name:"Tanzania"},{code:"TH",name:"Thailand"},{code:"TL",name:"Timor-Leste"},{code:"TG",name:"Togo"},{code:"TO",name:"Tonga"},{code:"TT",name:"Trinidad and Tobago"},{code:"TN",name:"Tunisia"},{code:"TR",name:"Turkey"},{code:"TM",name:"Turkmenistan"},{code:"TC",name:"Turks and Caicos Islands"},{code:"TV",name:"Tuvalu"},{code:"UG",name:"Uganda"},{code:"UA",name:"Ukraine"},{code:"AE",name:"United Arab Emirates"},{code:"GB",name:"United Kingdom"},{code:"US",name:"United States"},{code:"UY",name:"Uruguay"},{code:"UZ",name:"Uzbekistan"},{code:"VU",name:"Vanuatu"},{code:"VE",name:"Venezuela"},{code:"VN",name:"Vietnam"},{code:"VG",name:"Virgin Islands, British"},{code:"VI",name:"Virgin Islands, U.S."},{code:"YE",name:"Yemen"},{code:"ZM",name:"Zambia"},{code:"ZW",name:"Zimbabwe"}];let n=null;async function a(e,a,o,t){let c="Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRWlJkS3JabXJmMEk3WkhXRUtqNWRLTEhQanFubWJFeV9iNmpSbHdya1drIn0.eyJleHAiOjE3MjMwMzI3NzIsImlhdCI6MTcyMzAyOTE3MiwianRpIjoiNDJiNGYwM2QtMDNiNS00NmZlLTk5YmItZDQ2NTdhNjk5NGNiIiwiaXNzIjoiaHR0cHM6Ly9hdXRoLmF1LWF3cy50aGV3aXNobGlzdC5pby9hdXRoL3JlYWxtcy90d2NNYWluIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjI2YTIyNTAyLWRhNzQtNDhkMC1iZWFiLTgzY2E0YTlmMDdlOSIsInR5cCI6IkJlYXJlciIsImF6cCI6InR3Yy1wb3MtY2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6IjQxYWQwMDc4LWVmYTItNGVjMi1hM2I2LTIzYjBkNDM3YjEzOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInR3Yy1wb3MtdXNlciIsIm9mZmxpbmVfYWNjZXNzIiwidHdjLXN0b3JlLW93bmVyIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InRlbmFudGlkIHN0b3JlIHByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInRlbmFudGlkIjoidmlrdG9yaWEtd29vZHMiLCJuYW1lIjoiTWF0dCBIYW1wc2hpcmUiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJtYXR0QHRoZXdpc2hsaXN0LmlvIiwic3RvcmUiOiIyMDUiLCJnaXZlbl9uYW1lIjoiTWF0dCIsImZhbWlseV9uYW1lIjoiSGFtcHNoaXJlIiwiZW1haWwiOiJtYXR0QHRoZXdpc2hsaXN0LmlvIn0.iZkMgwH74njjXUWvImkJomHYr91Lr8ZGrZGwslEGcV3vbNuoNc5CocvNWW476o-LoSh-LsKf-MLiYN1XvOuPDF3fGoGCEbMh6_M0RJcrhVWogkj81fx4ukvDPCFIjgoDCV9WIuehV9dsSWa7E0irZeE6MUVhLwRIaTzKtxgzUUKrAqBtI_HKpyo8TUGQBiYlrc85QFUyuoKbKg-QaRn_SObRLDB8ooIBJvIlgklXQt1ZYBM2HUOc5L1bAQwfzcrWEvl6eYiQHXCSPqS0rPGoaGC6v5ydBo9VMxtVHGladDHLrO3Gt2BnIGMBoYrKTAmt7j0KABwPyB3CmAIwj_pOBQ";if("proxy"===a){const e=await async function(e){if(n)return n;try{const a=await fetch(`/apps/${e}/auth/token`,{method:"GET",headers:{Accept:"application/json"}}),o=await a.json().catch(()=>null);return a.ok&&o&&o.success&&o.data&&o.data.access_token?(n=o.data.access_token,n):null}catch(e){return console.error("Error fetching proxy access token:",e),null}}(t);if(!e)return{ok:!1,reason:"auth"};c=`Bearer ${e}`}try{return(await fetch("https://api.au-sandbox.thewishlist.io/services/wsservice/api/wishlist/items/customerInterest",{method:"POST",headers:{"Content-Type":"application/json",Authorization:c,"X-Twc-Tenant":o},body:JSON.stringify(e)})).ok?{ok:!0}:{ok:!1,reason:"error"}}catch(e){return console.error("Error submitting form:",e),{ok:!1,reason:"error"}}}const o={"notify-me":{text:"Register to receive a notification as soon as this item is back in stock",buttonText:"Notify Me"},"coming-soon":{text:"Register your interest to hear more about this item",buttonText:"Register Interest"}};function t(n){const{wrapper:t,openButton:c,config:i,productData:d,countryCtx:r}=n,{fields:m,type:l,authMode:s,tenant:u,proxyApp:p,marketId:b}=i,y=document.createElement("div");y.innerHTML='\n <div id="twc-nm-overlay" role="dialog" aria-modal="true" aria-labelledby="popup-title">\n <div class="twc-nm-card">\n <button type="button" id="popup-close" class="twc-nm-close" aria-label="Close">×</button>\n <h2 id="popup-title" class="twc-nm-title"></h2>\n <p id="popup-text" class="twc-nm-text"></p>\n <form id="popup-form" class="twc-nm-form">\n <div class="twc-nm-field">\n <label class="twc-nm-label" for="twc-nm-size">Size</label>\n <select class="twc-nm-select" id="twc-nm-size" name="select-size" required>\n <option value="" disabled selected>Select a size</option>\n </select>\n </div>\n </form>\n </div>\n </div>\n ',t.appendChild(y);const w=document.getElementById("twc-nm-overlay"),h=document.getElementById("popup-close"),f=document.getElementById("popup-title"),g=document.getElementById("popup-text"),v=document.querySelector("select[name='select-size']"),I=document.getElementById("popup-form");if(!(w&&h&&f&&g&&v&&I))return;g.innerText=o[l].text;const C=e.map(e=>`<option value="${e.code}"${e.code===r.countryCode?" selected":""}>${e.name}</option>`).join(""),x=(e,n,a)=>`<div class="twc-nm-field"><label class="twc-nm-label" for="${e}">${n}</label>${a}</div>`,M={email:x("twc-nm-email","Email",'<input class="twc-nm-input" id="twc-nm-email" name="email" type="email" placeholder="you@example.com" required />'),mobile:x("twc-nm-mobile","Mobile",'<input class="twc-nm-input" id="twc-nm-mobile" name="mobile" type="tel" placeholder="Mobile number" required />'),firstName:x("twc-nm-firstname","First name",'<input class="twc-nm-input" id="twc-nm-firstname" name="firstName" type="text" placeholder="First name" required />'),lastName:x("twc-nm-lastname","Last name",'<input class="twc-nm-input" id="twc-nm-lastname" name="lastName" type="text" placeholder="Last name" required />'),countryCode:x("twc-nm-country","Country",`<select class="twc-nm-select" id="twc-nm-country" name="countryCode"><option value="">Select country</option>${C}</select>`),provinceCode:x("twc-nm-province","State / Province",`<input class="twc-nm-input" id="twc-nm-province" name="provinceCode" type="text" placeholder="State / province code" value="${r.provinceCode||""}" />`)};m.forEach(e=>{M[e]&&I.insertAdjacentHTML("beforeend",M[e])}),I.insertAdjacentHTML("beforeend",'<div class="twc-nm-checks">\n <label class="twc-nm-check"><input type="checkbox" name="mailList" /> Email me store updates</label>\n <label class="twc-nm-check"><input type="checkbox" name="mailListSms" /> Text me store updates</label>\n </div>'),I.insertAdjacentHTML("beforeend",'<div id="popup-status" class="twc-nm-status" role="status" aria-live="polite" hidden></div>'),I.insertAdjacentHTML("beforeend",`<button type="submit" class="twc-nm-submit">${o[l].buttonText}</button>`);const S=document.getElementById("popup-status"),N=I.querySelector(".twc-nm-submit");if(!S||!N)return;function k(e,n){S.textContent=n,S.className=`twc-nm-status twc-nm-status--${e}`,S.hidden=!1}function L(){S.hidden=!0,S.textContent=""}const G=e=>{const n=I.querySelector(e);return n?n.value:""},E=e=>{const n=I.querySelector(e);return!!n&&n.checked};let B=!1,T=null;function A(e){"Escape"===e.key&&W()}function W(){w.classList.remove("is-open"),document.body.style.overflow="",document.removeEventListener("keydown",A),L(),T&&"function"==typeof T.focus&&T.focus()}c.addEventListener("click",function(){if(T=document.activeElement,w.classList.add("is-open"),document.body.style.overflow="hidden",document.addEventListener("keydown",A),!d)return I.hidden=!0,void k("error","Product information is unavailable. Please refresh the page.");f.textContent=d.title,B||((d.variants||[]).forEach(e=>{const n=document.createElement("option");n.value=e.title,n.textContent=e.title,v.appendChild(n)}),B=!0);const e=I.querySelector("select, input");e&&e.focus()}),h.addEventListener("click",W),w.addEventListener("click",e=>{e.target===w&&W()}),I.addEventListener("submit",async e=>{e.preventDefault();const n=((null==d?void 0:d.variants)||[]).find(e=>e.title===v.value);if(!n)return void k("error","Please select a size.");const o={variantRef:n.id,email:G("input[name='email']"),subscribe:E("input[name='mailList']"),subscribeSms:E("input[name='mailListSms']")};if("coming-soon"===l?o.comingSoon=!0:o.notifyMe=!0,m.includes("firstName")&&(o.firstName=G("input[name='firstName']")),m.includes("lastName")&&(o.lastName=G("input[name='lastName']")),m.includes("mobile")&&(o.mobile=G("input[name='mobile']")),m.includes("countryCode")){const e=G("select[name='countryCode']");e&&(o.countryCode=e)}else r.countryCode&&(o.countryCode=r.countryCode);if(m.includes("provinceCode")){const e=G("input[name='provinceCode']");e&&(o.provinceCode=e)}else r.provinceCode&&(o.provinceCode=r.provinceCode);b&&(o.marketId=b),L();const t=N.textContent||"";N.disabled=!0,N.textContent="Sending…";try{const e=await a(o,s,u,p);e.ok?(k("success","You're on the list. We'll be in touch."),setTimeout(W,1500)):"auth"===e.reason?k("error","Please log in to your account to continue."):k("error","Something went wrong. Please try again.")}finally{N.disabled=!1,N.textContent=t}})}document.addEventListener("DOMContentLoaded",()=>{const e=document.getElementById("notification-widget");if(!e)return;const n=document.getElementById("popup-open");if(!n)return;!function(){const e=document.createElement("style");e.type="text/css",e.innerText="\n .notification-btn {\n display: inline-block;\n width: 100%;\n padding: 12px 24px;\n background: #fff;\n border: 1px solid #111827;\n border-radius: 8px;\n color: #111827;\n font: inherit;\n text-align: center;\n text-transform: uppercase;\n cursor: pointer;\n }\n .notification-btn:hover {\n background: #111827;\n color: #fff;\n }\n #twc-nm-overlay {\n position: fixed;\n inset: 0;\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(17, 17, 17, 0.55);\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n }\n #twc-nm-overlay.is-open {\n opacity: 1;\n visibility: visible;\n }\n #twc-nm-overlay * {\n box-sizing: border-box;\n }\n #twc-nm-overlay .twc-nm-card {\n position: relative;\n width: 100%;\n max-width: 400px;\n max-height: calc(100vh - 32px);\n overflow-y: auto;\n padding: 24px;\n background: #fff;\n color: #111827;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.18);\n font: inherit;\n transform: translateY(8px);\n transition: transform 200ms ease;\n }\n #twc-nm-overlay.is-open .twc-nm-card {\n transform: translateY(0);\n }\n #twc-nm-overlay .twc-nm-close {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n border-radius: 6px;\n font-size: 24px;\n line-height: 1;\n color: #6b7280;\n cursor: pointer;\n }\n #twc-nm-overlay .twc-nm-close:hover {\n background: #f3f4f6;\n color: #111827;\n }\n #twc-nm-overlay .twc-nm-title {\n margin: 0 32px 4px 0;\n font-size: 18px;\n font-weight: 600;\n }\n #twc-nm-overlay .twc-nm-text {\n margin: 0 0 16px;\n font-size: 14px;\n line-height: 1.5;\n color: #6b7280;\n }\n #twc-nm-overlay .twc-nm-form {\n display: flex;\n flex-direction: column;\n gap: 14px;\n }\n #twc-nm-overlay .twc-nm-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n #twc-nm-overlay .twc-nm-label {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n }\n #twc-nm-overlay .twc-nm-input,\n #twc-nm-overlay .twc-nm-select {\n width: 100%;\n padding: 10px 12px;\n font-size: 14px;\n font-family: inherit;\n color: #111827;\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n }\n #twc-nm-overlay .twc-nm-input:focus,\n #twc-nm-overlay .twc-nm-select:focus {\n outline: none;\n border-color: #111827;\n box-shadow: 0 0 0 3px rgba(17, 24, 39, 0.08);\n }\n #twc-nm-overlay .twc-nm-select {\n appearance: none;\n -webkit-appearance: none;\n padding-right: 36px;\n cursor: pointer;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' stroke='%236b7280' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 12px center;\n }\n #twc-nm-overlay .twc-nm-checks {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n #twc-nm-overlay .twc-nm-check {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #374151;\n cursor: pointer;\n }\n #twc-nm-overlay .twc-nm-check input {\n width: 16px;\n height: 16px;\n margin: 0;\n accent-color: #111827;\n }\n #twc-nm-overlay .twc-nm-status {\n font-size: 13px;\n line-height: 1.5;\n padding: 10px 12px;\n border-radius: 8px;\n }\n #twc-nm-overlay .twc-nm-status--error {\n color: #b91c1c;\n background: #fef2f2;\n }\n #twc-nm-overlay .twc-nm-status--success {\n color: #15803d;\n background: #f0fdf4;\n }\n #twc-nm-overlay .twc-nm-submit {\n width: 100%;\n padding: 12px 16px;\n font-size: 14px;\n font-weight: 600;\n font-family: inherit;\n color: #fff;\n background: #111827;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: background 150ms ease;\n }\n #twc-nm-overlay .twc-nm-submit:hover {\n background: #374151;\n }\n #twc-nm-overlay .twc-nm-submit:disabled {\n opacity: 0.6;\n cursor: default;\n }\n @media (prefers-reduced-motion: reduce) {\n #twc-nm-overlay,\n #twc-nm-overlay .twc-nm-card {\n transition: none;\n }\n #twc-nm-overlay .twc-nm-card {\n transform: none;\n }\n }\n ",document.head.appendChild(e)}();const a=JSON.parse(n.getAttribute("data-fields")||'["email"]'),o=n.getAttribute("data-type")||"notify-me",c=n.getAttribute("data-auth")||"token",i=n.getAttribute("data-tenant")||"victoria-woods",d=n.getAttribute("data-proxy-app")||"twc-sdk",r=function(){var e,n;const a={countryCode:null,provinceCode:null,marketId:null},o=window.Shopify;if(o){"string"==typeof o.country&&(a.countryCode=o.country);const n=null===(e=o.markets)||void 0===e?void 0:e.currentMarket;if(n&&(n.countryCode&&(a.countryCode=n.countryCode),null!=n.id&&(a.marketId=String(n.id))),!a.countryCode&&"string"==typeof o.locale){const e=o.locale.split("-");e.length>1&&(a.countryCode=e[e.length-1].toUpperCase())}}if(!a.countryCode||!a.provinceCode){const e=null===(n=window.customer)||void 0===n?void 0:n.default_address;e&&(!a.countryCode&&e.country_code&&(a.countryCode=e.country_code),!a.provinceCode&&e.province_code&&(a.provinceCode=e.province_code))}if(!a.countryCode){const e=(navigator.language||"").split("-");e.length>1&&(a.countryCode=e[e.length-1].toUpperCase())}return a}(),m=n.getAttribute("data-market-id")||r.marketId;t({wrapper:e,openButton:n,config:{fields:a,type:o,authMode:c,tenant:i,proxyApp:d,marketId:m},productData:window.currentProduct,countryCtx:r})})}();
|
|
1
|
+
!function(){"use strict";const e=[{code:"AF",name:"Afghanistan"},{code:"AX",name:"Åland Islands"},{code:"AL",name:"Albania"},{code:"DZ",name:"Algeria"},{code:"AS",name:"American Samoa"},{code:"AD",name:"Andorra"},{code:"AO",name:"Angola"},{code:"AI",name:"Anguilla"},{code:"AG",name:"Antigua and Barbuda"},{code:"AR",name:"Argentina"},{code:"AM",name:"Armenia"},{code:"AW",name:"Aruba"},{code:"AU",name:"Australia"},{code:"AT",name:"Austria"},{code:"AZ",name:"Azerbaijan"},{code:"BS",name:"Bahamas"},{code:"BH",name:"Bahrain"},{code:"BD",name:"Bangladesh"},{code:"BB",name:"Barbados"},{code:"BY",name:"Belarus"},{code:"BE",name:"Belgium"},{code:"BZ",name:"Belize"},{code:"BJ",name:"Benin"},{code:"BM",name:"Bermuda"},{code:"BT",name:"Bhutan"},{code:"BO",name:"Bolivia"},{code:"BA",name:"Bosnia and Herzegovina"},{code:"BW",name:"Botswana"},{code:"BR",name:"Brazil"},{code:"BN",name:"Brunei"},{code:"BG",name:"Bulgaria"},{code:"BF",name:"Burkina Faso"},{code:"BI",name:"Burundi"},{code:"CV",name:"Cabo Verde"},{code:"KH",name:"Cambodia"},{code:"CM",name:"Cameroon"},{code:"CA",name:"Canada"},{code:"KY",name:"Cayman Islands"},{code:"CF",name:"Central African Republic"},{code:"TD",name:"Chad"},{code:"CL",name:"Chile"},{code:"CN",name:"China"},{code:"CO",name:"Colombia"},{code:"KM",name:"Comoros"},{code:"CG",name:"Congo"},{code:"CD",name:"Congo, DR"},{code:"CK",name:"Cook Islands"},{code:"CR",name:"Costa Rica"},{code:"HR",name:"Croatia"},{code:"CU",name:"Cuba"},{code:"CW",name:"Curaçao"},{code:"CY",name:"Cyprus"},{code:"CZ",name:"Czech Republic"},{code:"DK",name:"Denmark"},{code:"DJ",name:"Djibouti"},{code:"DM",name:"Dominica"},{code:"DO",name:"Dominican Republic"},{code:"EC",name:"Ecuador"},{code:"EG",name:"Egypt"},{code:"SV",name:"El Salvador"},{code:"GQ",name:"Equatorial Guinea"},{code:"ER",name:"Eritrea"},{code:"EE",name:"Estonia"},{code:"SZ",name:"Eswatini"},{code:"ET",name:"Ethiopia"},{code:"FO",name:"Faroe Islands"},{code:"FJ",name:"Fiji"},{code:"FI",name:"Finland"},{code:"FR",name:"France"},{code:"GF",name:"French Guiana"},{code:"PF",name:"French Polynesia"},{code:"GA",name:"Gabon"},{code:"GM",name:"Gambia"},{code:"GE",name:"Georgia"},{code:"DE",name:"Germany"},{code:"GH",name:"Ghana"},{code:"GI",name:"Gibraltar"},{code:"GR",name:"Greece"},{code:"GL",name:"Greenland"},{code:"GD",name:"Grenada"},{code:"GP",name:"Guadeloupe"},{code:"GU",name:"Guam"},{code:"GT",name:"Guatemala"},{code:"GN",name:"Guinea"},{code:"GW",name:"Guinea-Bissau"},{code:"GY",name:"Guyana"},{code:"HT",name:"Haiti"},{code:"HN",name:"Honduras"},{code:"HK",name:"Hong Kong"},{code:"HU",name:"Hungary"},{code:"IS",name:"Iceland"},{code:"IN",name:"India"},{code:"ID",name:"Indonesia"},{code:"IR",name:"Iran"},{code:"IQ",name:"Iraq"},{code:"IE",name:"Ireland"},{code:"IM",name:"Isle of Man"},{code:"IL",name:"Israel"},{code:"IT",name:"Italy"},{code:"JM",name:"Jamaica"},{code:"JP",name:"Japan"},{code:"JE",name:"Jersey"},{code:"JO",name:"Jordan"},{code:"KZ",name:"Kazakhstan"},{code:"KE",name:"Kenya"},{code:"KI",name:"Kiribati"},{code:"KR",name:"Korea, South"},{code:"XK",name:"Kosovo"},{code:"KW",name:"Kuwait"},{code:"KG",name:"Kyrgyzstan"},{code:"LA",name:"Laos"},{code:"LV",name:"Latvia"},{code:"LB",name:"Lebanon"},{code:"LS",name:"Lesotho"},{code:"LR",name:"Liberia"},{code:"LY",name:"Libya"},{code:"LI",name:"Liechtenstein"},{code:"LT",name:"Lithuania"},{code:"LU",name:"Luxembourg"},{code:"MO",name:"Macao"},{code:"MG",name:"Madagascar"},{code:"MW",name:"Malawi"},{code:"MY",name:"Malaysia"},{code:"MV",name:"Maldives"},{code:"ML",name:"Mali"},{code:"MT",name:"Malta"},{code:"MH",name:"Marshall Islands"},{code:"MQ",name:"Martinique"},{code:"MR",name:"Mauritania"},{code:"MU",name:"Mauritius"},{code:"MX",name:"Mexico"},{code:"FM",name:"Micronesia"},{code:"MD",name:"Moldova"},{code:"MC",name:"Monaco"},{code:"MN",name:"Mongolia"},{code:"ME",name:"Montenegro"},{code:"MS",name:"Montserrat"},{code:"MA",name:"Morocco"},{code:"MZ",name:"Mozambique"},{code:"MM",name:"Myanmar"},{code:"NA",name:"Namibia"},{code:"NR",name:"Nauru"},{code:"NP",name:"Nepal"},{code:"NL",name:"Netherlands"},{code:"NC",name:"New Caledonia"},{code:"NZ",name:"New Zealand"},{code:"NI",name:"Nicaragua"},{code:"NE",name:"Niger"},{code:"NG",name:"Nigeria"},{code:"NU",name:"Niue"},{code:"MK",name:"North Macedonia"},{code:"NO",name:"Norway"},{code:"OM",name:"Oman"},{code:"PK",name:"Pakistan"},{code:"PW",name:"Palau"},{code:"PS",name:"Palestine"},{code:"PA",name:"Panama"},{code:"PG",name:"Papua New Guinea"},{code:"PY",name:"Paraguay"},{code:"PE",name:"Peru"},{code:"PH",name:"Philippines"},{code:"PL",name:"Poland"},{code:"PT",name:"Portugal"},{code:"PR",name:"Puerto Rico"},{code:"QA",name:"Qatar"},{code:"RE",name:"Réunion"},{code:"RO",name:"Romania"},{code:"RW",name:"Rwanda"},{code:"KN",name:"Saint Kitts and Nevis"},{code:"LC",name:"Saint Lucia"},{code:"VC",name:"Saint Vincent and the Grenadines"},{code:"WS",name:"Samoa"},{code:"SM",name:"San Marino"},{code:"SA",name:"Saudi Arabia"},{code:"SN",name:"Senegal"},{code:"RS",name:"Serbia"},{code:"SC",name:"Seychelles"},{code:"SL",name:"Sierra Leone"},{code:"SG",name:"Singapore"},{code:"SK",name:"Slovakia"},{code:"SI",name:"Slovenia"},{code:"SB",name:"Solomon Islands"},{code:"SO",name:"Somalia"},{code:"ZA",name:"South Africa"},{code:"SS",name:"South Sudan"},{code:"ES",name:"Spain"},{code:"LK",name:"Sri Lanka"},{code:"SD",name:"Sudan"},{code:"SR",name:"Suriname"},{code:"SE",name:"Sweden"},{code:"CH",name:"Switzerland"},{code:"SY",name:"Syria"},{code:"TW",name:"Taiwan"},{code:"TJ",name:"Tajikistan"},{code:"TZ",name:"Tanzania"},{code:"TH",name:"Thailand"},{code:"TL",name:"Timor-Leste"},{code:"TG",name:"Togo"},{code:"TO",name:"Tonga"},{code:"TT",name:"Trinidad and Tobago"},{code:"TN",name:"Tunisia"},{code:"TR",name:"Turkey"},{code:"TM",name:"Turkmenistan"},{code:"TC",name:"Turks and Caicos Islands"},{code:"TV",name:"Tuvalu"},{code:"UG",name:"Uganda"},{code:"UA",name:"Ukraine"},{code:"AE",name:"United Arab Emirates"},{code:"GB",name:"United Kingdom"},{code:"US",name:"United States"},{code:"UY",name:"Uruguay"},{code:"UZ",name:"Uzbekistan"},{code:"VU",name:"Vanuatu"},{code:"VE",name:"Venezuela"},{code:"VN",name:"Vietnam"},{code:"VG",name:"Virgin Islands, British"},{code:"VI",name:"Virgin Islands, U.S."},{code:"YE",name:"Yemen"},{code:"ZM",name:"Zambia"},{code:"ZW",name:"Zimbabwe"}];let n=null;async function a(e,a,o,t){let c="Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRWlJkS3JabXJmMEk3WkhXRUtqNWRLTEhQanFubWJFeV9iNmpSbHdya1drIn0.eyJleHAiOjE3MjMwMzI3NzIsImlhdCI6MTcyMzAyOTE3MiwianRpIjoiNDJiNGYwM2QtMDNiNS00NmZlLTk5YmItZDQ2NTdhNjk5NGNiIiwiaXNzIjoiaHR0cHM6Ly9hdXRoLmF1LWF3cy50aGV3aXNobGlzdC5pby9hdXRoL3JlYWxtcy90d2NNYWluIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjI2YTIyNTAyLWRhNzQtNDhkMC1iZWFiLTgzY2E0YTlmMDdlOSIsInR5cCI6IkJlYXJlciIsImF6cCI6InR3Yy1wb3MtY2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6IjQxYWQwMDc4LWVmYTItNGVjMi1hM2I2LTIzYjBkNDM3YjEzOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInR3Yy1wb3MtdXNlciIsIm9mZmxpbmVfYWNjZXNzIiwidHdjLXN0b3JlLW93bmVyIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InRlbmFudGlkIHN0b3JlIHByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInRlbmFudGlkIjoidmlrdG9yaWEtd29vZHMiLCJuYW1lIjoiTWF0dCBIYW1wc2hpcmUiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJtYXR0QHRoZXdpc2hsaXN0LmlvIiwic3RvcmUiOiIyMDUiLCJnaXZlbl9uYW1lIjoiTWF0dCIsImZhbWlseV9uYW1lIjoiSGFtcHNoaXJlIiwiZW1haWwiOiJtYXR0QHRoZXdpc2hsaXN0LmlvIn0.iZkMgwH74njjXUWvImkJomHYr91Lr8ZGrZGwslEGcV3vbNuoNc5CocvNWW476o-LoSh-LsKf-MLiYN1XvOuPDF3fGoGCEbMh6_M0RJcrhVWogkj81fx4ukvDPCFIjgoDCV9WIuehV9dsSWa7E0irZeE6MUVhLwRIaTzKtxgzUUKrAqBtI_HKpyo8TUGQBiYlrc85QFUyuoKbKg-QaRn_SObRLDB8ooIBJvIlgklXQt1ZYBM2HUOc5L1bAQwfzcrWEvl6eYiQHXCSPqS0rPGoaGC6v5ydBo9VMxtVHGladDHLrO3Gt2BnIGMBoYrKTAmt7j0KABwPyB3CmAIwj_pOBQ";if("proxy"===a){const e=await async function(e){if(n)return n;try{const a=await fetch(`/apps/${e}/auth/token`,{method:"GET",headers:{Accept:"application/json"}}),o=await a.json().catch(()=>null);return a.ok&&o&&o.success&&o.data&&o.data.access_token?(n=o.data.access_token,n):null}catch(e){return console.error("Error fetching proxy access token:",e),null}}(t);if(!e)return{ok:!1,reason:"auth"};c=`Bearer ${e}`}try{return(await fetch("https://api.au-aws.thewishlist.io/services/wsservice/api/wishlist/items/customerInterest",{method:"POST",headers:{"Content-Type":"application/json",Authorization:c,"X-Twc-Tenant":o},body:JSON.stringify(e)})).ok?{ok:!0}:{ok:!1,reason:"error"}}catch(e){return console.error("Error submitting form:",e),{ok:!1,reason:"error"}}}const o={"notify-me":{text:"Register to receive a notification as soon as this item is back in stock",buttonText:"Notify Me"},"coming-soon":{text:"Register your interest to hear more about this item",buttonText:"Register Interest"}};function t(n){const{wrapper:t,openButton:c,config:i,productData:d,countryCtx:r}=n,{fields:m,type:l,authMode:s,tenant:u,proxyApp:p,marketId:y}=i,b=document.createElement("div");b.innerHTML='\n <div id="twc-nm-overlay" role="dialog" aria-modal="true" aria-labelledby="popup-title">\n <div class="twc-nm-card">\n <button type="button" id="popup-close" class="twc-nm-close" aria-label="Close">×</button>\n <h2 id="popup-title" class="twc-nm-title"></h2>\n <p id="popup-text" class="twc-nm-text"></p>\n <form id="popup-form" class="twc-nm-form">\n <div class="twc-nm-field">\n <label class="twc-nm-label" for="twc-nm-size">Size</label>\n <select class="twc-nm-select" id="twc-nm-size" name="select-size" required>\n <option value="" disabled selected>Select a size</option>\n </select>\n </div>\n </form>\n </div>\n </div>\n ',t.appendChild(b);const w=document.getElementById("twc-nm-overlay"),h=document.getElementById("popup-close"),f=document.getElementById("popup-title"),g=document.getElementById("popup-text"),v=document.querySelector("select[name='select-size']"),I=document.getElementById("popup-form");if(!(w&&h&&f&&g&&v&&I))return;g.innerText=o[l].text;const C=e.map(e=>`<option value="${e.code}"${e.code===r.countryCode?" selected":""}>${e.name}</option>`).join(""),x=(e,n,a)=>`<div class="twc-nm-field"><label class="twc-nm-label" for="${e}">${n}</label>${a}</div>`,M={email:x("twc-nm-email","Email",'<input class="twc-nm-input" id="twc-nm-email" name="email" type="email" placeholder="you@example.com" required />'),mobile:x("twc-nm-mobile","Mobile",'<input class="twc-nm-input" id="twc-nm-mobile" name="mobile" type="tel" placeholder="Mobile number" required />'),firstName:x("twc-nm-firstname","First name",'<input class="twc-nm-input" id="twc-nm-firstname" name="firstName" type="text" placeholder="First name" required />'),lastName:x("twc-nm-lastname","Last name",'<input class="twc-nm-input" id="twc-nm-lastname" name="lastName" type="text" placeholder="Last name" required />'),countryCode:x("twc-nm-country","Country",`<select class="twc-nm-select" id="twc-nm-country" name="countryCode"><option value="">Select country</option>${C}</select>`),provinceCode:x("twc-nm-province","State / Province",`<input class="twc-nm-input" id="twc-nm-province" name="provinceCode" type="text" placeholder="State / province code" value="${r.provinceCode||""}" />`)};m.forEach(e=>{M[e]&&I.insertAdjacentHTML("beforeend",M[e])}),I.insertAdjacentHTML("beforeend",'<div class="twc-nm-checks">\n <label class="twc-nm-check"><input type="checkbox" name="mailList" /> Email me store updates</label>\n <label class="twc-nm-check"><input type="checkbox" name="mailListSms" /> Text me store updates</label>\n </div>'),I.insertAdjacentHTML("beforeend",'<div id="popup-status" class="twc-nm-status" role="status" aria-live="polite" hidden></div>'),I.insertAdjacentHTML("beforeend",`<button type="submit" class="twc-nm-submit">${o[l].buttonText}</button>`);const S=document.getElementById("popup-status"),N=I.querySelector(".twc-nm-submit");if(!S||!N)return;function k(e,n){S.textContent=n,S.className=`twc-nm-status twc-nm-status--${e}`,S.hidden=!1}function L(){S.hidden=!0,S.textContent=""}const G=e=>{const n=I.querySelector(e);return n?n.value:""},E=e=>{const n=I.querySelector(e);return!!n&&n.checked};let B=!1,T=null;function A(e){"Escape"===e.key&&W()}function W(){w.classList.remove("is-open"),document.body.style.overflow="",document.removeEventListener("keydown",A),L(),T&&"function"==typeof T.focus&&T.focus()}c.addEventListener("click",function(){if(T=document.activeElement,w.classList.add("is-open"),document.body.style.overflow="hidden",document.addEventListener("keydown",A),!d)return I.hidden=!0,void k("error","Product information is unavailable. Please refresh the page.");f.textContent=d.title,B||((d.variants||[]).forEach(e=>{const n=document.createElement("option");n.value=e.title,n.textContent=e.title,v.appendChild(n)}),B=!0);const e=I.querySelector("select, input");e&&e.focus()}),h.addEventListener("click",W),w.addEventListener("click",e=>{e.target===w&&W()}),I.addEventListener("submit",async e=>{e.preventDefault();const n=((null==d?void 0:d.variants)||[]).find(e=>e.title===v.value);if(!n)return void k("error","Please select a size.");const o={variantRef:n.id,email:G("input[name='email']"),subscribe:E("input[name='mailList']"),subscribeSms:E("input[name='mailListSms']")};if("coming-soon"===l?o.comingSoon=!0:o.notifyMe=!0,m.includes("firstName")&&(o.firstName=G("input[name='firstName']")),m.includes("lastName")&&(o.lastName=G("input[name='lastName']")),m.includes("mobile")&&(o.mobile=G("input[name='mobile']")),m.includes("countryCode")){const e=G("select[name='countryCode']");e&&(o.countryCode=e)}else r.countryCode&&(o.countryCode=r.countryCode);if(m.includes("provinceCode")){const e=G("input[name='provinceCode']");e&&(o.provinceCode=e)}else r.provinceCode&&(o.provinceCode=r.provinceCode);y&&(o.marketId=y),L();const t=N.textContent||"";N.disabled=!0,N.textContent="Sending…";try{const e=await a(o,s,u,p);e.ok?(k("success","You're on the list. We'll be in touch."),setTimeout(W,1500)):"auth"===e.reason?k("error","Please log in to your account to continue."):k("error","Something went wrong. Please try again.")}finally{N.disabled=!1,N.textContent=t}})}document.addEventListener("DOMContentLoaded",()=>{const e=document.getElementById("notification-widget");if(!e)return;const n=document.getElementById("popup-open");if(!n)return;!function(){const e=document.createElement("style");e.type="text/css",e.innerText="\n .notification-btn {\n display: inline-block;\n width: 100%;\n padding: 12px 24px;\n background: #fff;\n border: 1px solid #111827;\n border-radius: 8px;\n color: #111827;\n font: inherit;\n text-align: center;\n text-transform: uppercase;\n cursor: pointer;\n }\n .notification-btn:hover {\n background: #111827;\n color: #fff;\n }\n #twc-nm-overlay {\n position: fixed;\n inset: 0;\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 16px;\n background: rgba(17, 17, 17, 0.55);\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n }\n #twc-nm-overlay.is-open {\n opacity: 1;\n visibility: visible;\n }\n #twc-nm-overlay * {\n box-sizing: border-box;\n }\n #twc-nm-overlay .twc-nm-card {\n position: relative;\n width: 100%;\n max-width: 400px;\n max-height: calc(100vh - 32px);\n overflow-y: auto;\n padding: 24px;\n background: #fff;\n color: #111827;\n border-radius: 12px;\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.18);\n font: inherit;\n transform: translateY(8px);\n transition: transform 200ms ease;\n }\n #twc-nm-overlay.is-open .twc-nm-card {\n transform: translateY(0);\n }\n #twc-nm-overlay .twc-nm-close {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n background: transparent;\n border-radius: 6px;\n font-size: 24px;\n line-height: 1;\n color: #6b7280;\n cursor: pointer;\n }\n #twc-nm-overlay .twc-nm-close:hover {\n background: #f3f4f6;\n color: #111827;\n }\n #twc-nm-overlay .twc-nm-title {\n margin: 0 32px 4px 0;\n font-size: 18px;\n font-weight: 600;\n }\n #twc-nm-overlay .twc-nm-text {\n margin: 0 0 16px;\n font-size: 14px;\n line-height: 1.5;\n color: #6b7280;\n }\n #twc-nm-overlay .twc-nm-form {\n display: flex;\n flex-direction: column;\n gap: 14px;\n }\n #twc-nm-overlay .twc-nm-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n #twc-nm-overlay .twc-nm-label {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n }\n #twc-nm-overlay .twc-nm-input,\n #twc-nm-overlay .twc-nm-select {\n width: 100%;\n padding: 10px 12px;\n font-size: 14px;\n font-family: inherit;\n color: #111827;\n background: #fff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n }\n #twc-nm-overlay .twc-nm-input:focus,\n #twc-nm-overlay .twc-nm-select:focus {\n outline: none;\n border-color: #111827;\n box-shadow: 0 0 0 3px rgba(17, 24, 39, 0.08);\n }\n #twc-nm-overlay .twc-nm-select {\n appearance: none;\n -webkit-appearance: none;\n padding-right: 36px;\n cursor: pointer;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' stroke='%236b7280' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 12px center;\n }\n #twc-nm-overlay .twc-nm-checks {\n display: flex;\n flex-direction: column;\n gap: 10px;\n }\n #twc-nm-overlay .twc-nm-check {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #374151;\n cursor: pointer;\n }\n #twc-nm-overlay .twc-nm-check input {\n width: 16px;\n height: 16px;\n margin: 0;\n accent-color: #111827;\n }\n #twc-nm-overlay .twc-nm-status {\n font-size: 13px;\n line-height: 1.5;\n padding: 10px 12px;\n border-radius: 8px;\n }\n #twc-nm-overlay .twc-nm-status--error {\n color: #b91c1c;\n background: #fef2f2;\n }\n #twc-nm-overlay .twc-nm-status--success {\n color: #15803d;\n background: #f0fdf4;\n }\n #twc-nm-overlay .twc-nm-submit {\n width: 100%;\n padding: 12px 16px;\n font-size: 14px;\n font-weight: 600;\n font-family: inherit;\n color: #fff;\n background: #111827;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: background 150ms ease;\n }\n #twc-nm-overlay .twc-nm-submit:hover {\n background: #374151;\n }\n #twc-nm-overlay .twc-nm-submit:disabled {\n opacity: 0.6;\n cursor: default;\n }\n @media (prefers-reduced-motion: reduce) {\n #twc-nm-overlay,\n #twc-nm-overlay .twc-nm-card {\n transition: none;\n }\n #twc-nm-overlay .twc-nm-card {\n transform: none;\n }\n }\n ",document.head.appendChild(e)}();const a=JSON.parse(n.getAttribute("data-fields")||'["email"]'),o=n.getAttribute("data-type")||"notify-me",c=n.getAttribute("data-auth")||"token",i=n.getAttribute("data-tenant")||"victoria-woods",d=n.getAttribute("data-proxy-app")||"twc-sdk",r=function(){var e,n;const a={countryCode:null,provinceCode:null,marketId:null},o=window.Shopify;if(o){"string"==typeof o.country&&(a.countryCode=o.country);const n=null===(e=o.markets)||void 0===e?void 0:e.currentMarket;if(n&&(n.countryCode&&(a.countryCode=n.countryCode),null!=n.id&&(a.marketId=String(n.id))),!a.countryCode&&"string"==typeof o.locale){const e=o.locale.split("-");e.length>1&&(a.countryCode=e[e.length-1].toUpperCase())}}if(!a.countryCode||!a.provinceCode){const e=null===(n=window.customer)||void 0===n?void 0:n.default_address;e&&(!a.countryCode&&e.country_code&&(a.countryCode=e.country_code),!a.provinceCode&&e.province_code&&(a.provinceCode=e.province_code))}if(!a.countryCode){const e=(navigator.language||"").split("-");e.length>1&&(a.countryCode=e[e.length-1].toUpperCase())}return a}(),m=n.getAttribute("data-market-id")||r.marketId;t({wrapper:e,openButton:n,config:{fields:a,type:o,authMode:c,tenant:i,proxyApp:d,marketId:m},productData:window.currentProduct,countryCtx:r})})}();
|
package/package.json
CHANGED
package/build/notify-me-wl.js
DELETED
|
@@ -1,680 +0,0 @@
|
|
|
1
|
-
(function () {
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
const STYLES = `
|
|
5
|
-
.notification-btn {
|
|
6
|
-
display: inline-block;
|
|
7
|
-
width: 100%;
|
|
8
|
-
padding: 12px 24px;
|
|
9
|
-
background: #fff;
|
|
10
|
-
border: 1px solid #111827;
|
|
11
|
-
border-radius: 8px;
|
|
12
|
-
color: #111827;
|
|
13
|
-
font: inherit;
|
|
14
|
-
text-align: center;
|
|
15
|
-
text-transform: uppercase;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
}
|
|
18
|
-
.notification-btn:hover {
|
|
19
|
-
background: #111827;
|
|
20
|
-
color: #fff;
|
|
21
|
-
}
|
|
22
|
-
#twc-nm-overlay {
|
|
23
|
-
position: fixed;
|
|
24
|
-
inset: 0;
|
|
25
|
-
z-index: 99999;
|
|
26
|
-
display: flex;
|
|
27
|
-
align-items: center;
|
|
28
|
-
justify-content: center;
|
|
29
|
-
padding: 16px;
|
|
30
|
-
background: rgba(17, 17, 17, 0.55);
|
|
31
|
-
opacity: 0;
|
|
32
|
-
visibility: hidden;
|
|
33
|
-
transition: opacity 200ms ease;
|
|
34
|
-
}
|
|
35
|
-
#twc-nm-overlay.is-open {
|
|
36
|
-
opacity: 1;
|
|
37
|
-
visibility: visible;
|
|
38
|
-
}
|
|
39
|
-
#twc-nm-overlay * {
|
|
40
|
-
box-sizing: border-box;
|
|
41
|
-
}
|
|
42
|
-
#twc-nm-overlay .twc-nm-card {
|
|
43
|
-
position: relative;
|
|
44
|
-
width: 100%;
|
|
45
|
-
max-width: 400px;
|
|
46
|
-
max-height: calc(100vh - 32px);
|
|
47
|
-
overflow-y: auto;
|
|
48
|
-
padding: 24px;
|
|
49
|
-
background: #fff;
|
|
50
|
-
color: #111827;
|
|
51
|
-
border-radius: 12px;
|
|
52
|
-
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.18);
|
|
53
|
-
font: inherit;
|
|
54
|
-
transform: translateY(8px);
|
|
55
|
-
transition: transform 200ms ease;
|
|
56
|
-
}
|
|
57
|
-
#twc-nm-overlay.is-open .twc-nm-card {
|
|
58
|
-
transform: translateY(0);
|
|
59
|
-
}
|
|
60
|
-
#twc-nm-overlay .twc-nm-close {
|
|
61
|
-
position: absolute;
|
|
62
|
-
top: 12px;
|
|
63
|
-
right: 12px;
|
|
64
|
-
width: 32px;
|
|
65
|
-
height: 32px;
|
|
66
|
-
display: flex;
|
|
67
|
-
align-items: center;
|
|
68
|
-
justify-content: center;
|
|
69
|
-
padding: 0;
|
|
70
|
-
border: none;
|
|
71
|
-
background: transparent;
|
|
72
|
-
border-radius: 6px;
|
|
73
|
-
font-size: 24px;
|
|
74
|
-
line-height: 1;
|
|
75
|
-
color: #6b7280;
|
|
76
|
-
cursor: pointer;
|
|
77
|
-
}
|
|
78
|
-
#twc-nm-overlay .twc-nm-close:hover {
|
|
79
|
-
background: #f3f4f6;
|
|
80
|
-
color: #111827;
|
|
81
|
-
}
|
|
82
|
-
#twc-nm-overlay .twc-nm-title {
|
|
83
|
-
margin: 0 32px 4px 0;
|
|
84
|
-
font-size: 18px;
|
|
85
|
-
font-weight: 600;
|
|
86
|
-
}
|
|
87
|
-
#twc-nm-overlay .twc-nm-text {
|
|
88
|
-
margin: 0 0 16px;
|
|
89
|
-
font-size: 14px;
|
|
90
|
-
line-height: 1.5;
|
|
91
|
-
color: #6b7280;
|
|
92
|
-
}
|
|
93
|
-
#twc-nm-overlay .twc-nm-form {
|
|
94
|
-
display: flex;
|
|
95
|
-
flex-direction: column;
|
|
96
|
-
gap: 14px;
|
|
97
|
-
}
|
|
98
|
-
#twc-nm-overlay .twc-nm-field {
|
|
99
|
-
display: flex;
|
|
100
|
-
flex-direction: column;
|
|
101
|
-
gap: 6px;
|
|
102
|
-
}
|
|
103
|
-
#twc-nm-overlay .twc-nm-label {
|
|
104
|
-
font-size: 13px;
|
|
105
|
-
font-weight: 500;
|
|
106
|
-
color: #374151;
|
|
107
|
-
}
|
|
108
|
-
#twc-nm-overlay .twc-nm-input,
|
|
109
|
-
#twc-nm-overlay .twc-nm-select {
|
|
110
|
-
width: 100%;
|
|
111
|
-
padding: 10px 12px;
|
|
112
|
-
font-size: 14px;
|
|
113
|
-
font-family: inherit;
|
|
114
|
-
color: #111827;
|
|
115
|
-
background: #fff;
|
|
116
|
-
border: 1px solid #e5e7eb;
|
|
117
|
-
border-radius: 8px;
|
|
118
|
-
}
|
|
119
|
-
#twc-nm-overlay .twc-nm-input:focus,
|
|
120
|
-
#twc-nm-overlay .twc-nm-select:focus {
|
|
121
|
-
outline: none;
|
|
122
|
-
border-color: #111827;
|
|
123
|
-
box-shadow: 0 0 0 3px rgba(17, 24, 39, 0.08);
|
|
124
|
-
}
|
|
125
|
-
#twc-nm-overlay .twc-nm-select {
|
|
126
|
-
appearance: none;
|
|
127
|
-
-webkit-appearance: none;
|
|
128
|
-
padding-right: 36px;
|
|
129
|
-
cursor: pointer;
|
|
130
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' stroke='%236b7280' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
131
|
-
background-repeat: no-repeat;
|
|
132
|
-
background-position: right 12px center;
|
|
133
|
-
}
|
|
134
|
-
#twc-nm-overlay .twc-nm-checks {
|
|
135
|
-
display: flex;
|
|
136
|
-
flex-direction: column;
|
|
137
|
-
gap: 10px;
|
|
138
|
-
}
|
|
139
|
-
#twc-nm-overlay .twc-nm-check {
|
|
140
|
-
display: flex;
|
|
141
|
-
align-items: center;
|
|
142
|
-
gap: 8px;
|
|
143
|
-
font-size: 13px;
|
|
144
|
-
color: #374151;
|
|
145
|
-
cursor: pointer;
|
|
146
|
-
}
|
|
147
|
-
#twc-nm-overlay .twc-nm-check input {
|
|
148
|
-
width: 16px;
|
|
149
|
-
height: 16px;
|
|
150
|
-
margin: 0;
|
|
151
|
-
accent-color: #111827;
|
|
152
|
-
}
|
|
153
|
-
#twc-nm-overlay .twc-nm-status {
|
|
154
|
-
font-size: 13px;
|
|
155
|
-
line-height: 1.5;
|
|
156
|
-
padding: 10px 12px;
|
|
157
|
-
border-radius: 8px;
|
|
158
|
-
}
|
|
159
|
-
#twc-nm-overlay .twc-nm-status--error {
|
|
160
|
-
color: #b91c1c;
|
|
161
|
-
background: #fef2f2;
|
|
162
|
-
}
|
|
163
|
-
#twc-nm-overlay .twc-nm-status--success {
|
|
164
|
-
color: #15803d;
|
|
165
|
-
background: #f0fdf4;
|
|
166
|
-
}
|
|
167
|
-
#twc-nm-overlay .twc-nm-submit {
|
|
168
|
-
width: 100%;
|
|
169
|
-
padding: 12px 16px;
|
|
170
|
-
font-size: 14px;
|
|
171
|
-
font-weight: 600;
|
|
172
|
-
font-family: inherit;
|
|
173
|
-
color: #fff;
|
|
174
|
-
background: #111827;
|
|
175
|
-
border: none;
|
|
176
|
-
border-radius: 8px;
|
|
177
|
-
cursor: pointer;
|
|
178
|
-
transition: background 150ms ease;
|
|
179
|
-
}
|
|
180
|
-
#twc-nm-overlay .twc-nm-submit:hover {
|
|
181
|
-
background: #374151;
|
|
182
|
-
}
|
|
183
|
-
#twc-nm-overlay .twc-nm-submit:disabled {
|
|
184
|
-
opacity: 0.6;
|
|
185
|
-
cursor: default;
|
|
186
|
-
}
|
|
187
|
-
@media (prefers-reduced-motion: reduce) {
|
|
188
|
-
#twc-nm-overlay,
|
|
189
|
-
#twc-nm-overlay .twc-nm-card {
|
|
190
|
-
transition: none;
|
|
191
|
-
}
|
|
192
|
-
#twc-nm-overlay .twc-nm-card {
|
|
193
|
-
transform: none;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
`;
|
|
197
|
-
// Inject the widget styles once. All rules are namespaced under #twc-nm-overlay
|
|
198
|
-
// (plus .notification-btn) so they don't collide with the host store theme.
|
|
199
|
-
function injectStyles() {
|
|
200
|
-
const styleSheet = document.createElement('style');
|
|
201
|
-
styleSheet.type = 'text/css';
|
|
202
|
-
styleSheet.innerText = STYLES;
|
|
203
|
-
document.head.appendChild(styleSheet);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
const COUNTRY_CODES = [
|
|
207
|
-
{ code: 'AF', name: 'Afghanistan' }, { code: 'AX', name: 'Åland Islands' },
|
|
208
|
-
{ code: 'AL', name: 'Albania' }, { code: 'DZ', name: 'Algeria' },
|
|
209
|
-
{ code: 'AS', name: 'American Samoa' }, { code: 'AD', name: 'Andorra' },
|
|
210
|
-
{ code: 'AO', name: 'Angola' }, { code: 'AI', name: 'Anguilla' },
|
|
211
|
-
{ code: 'AG', name: 'Antigua and Barbuda' }, { code: 'AR', name: 'Argentina' },
|
|
212
|
-
{ code: 'AM', name: 'Armenia' }, { code: 'AW', name: 'Aruba' },
|
|
213
|
-
{ code: 'AU', name: 'Australia' }, { code: 'AT', name: 'Austria' },
|
|
214
|
-
{ code: 'AZ', name: 'Azerbaijan' }, { code: 'BS', name: 'Bahamas' },
|
|
215
|
-
{ code: 'BH', name: 'Bahrain' }, { code: 'BD', name: 'Bangladesh' },
|
|
216
|
-
{ code: 'BB', name: 'Barbados' }, { code: 'BY', name: 'Belarus' },
|
|
217
|
-
{ code: 'BE', name: 'Belgium' }, { code: 'BZ', name: 'Belize' },
|
|
218
|
-
{ code: 'BJ', name: 'Benin' }, { code: 'BM', name: 'Bermuda' },
|
|
219
|
-
{ code: 'BT', name: 'Bhutan' }, { code: 'BO', name: 'Bolivia' },
|
|
220
|
-
{ code: 'BA', name: 'Bosnia and Herzegovina' }, { code: 'BW', name: 'Botswana' },
|
|
221
|
-
{ code: 'BR', name: 'Brazil' }, { code: 'BN', name: 'Brunei' },
|
|
222
|
-
{ code: 'BG', name: 'Bulgaria' }, { code: 'BF', name: 'Burkina Faso' },
|
|
223
|
-
{ code: 'BI', name: 'Burundi' }, { code: 'CV', name: 'Cabo Verde' },
|
|
224
|
-
{ code: 'KH', name: 'Cambodia' }, { code: 'CM', name: 'Cameroon' },
|
|
225
|
-
{ code: 'CA', name: 'Canada' }, { code: 'KY', name: 'Cayman Islands' },
|
|
226
|
-
{ code: 'CF', name: 'Central African Republic' }, { code: 'TD', name: 'Chad' },
|
|
227
|
-
{ code: 'CL', name: 'Chile' }, { code: 'CN', name: 'China' },
|
|
228
|
-
{ code: 'CO', name: 'Colombia' }, { code: 'KM', name: 'Comoros' },
|
|
229
|
-
{ code: 'CG', name: 'Congo' }, { code: 'CD', name: 'Congo, DR' },
|
|
230
|
-
{ code: 'CK', name: 'Cook Islands' }, { code: 'CR', name: 'Costa Rica' },
|
|
231
|
-
{ code: 'HR', name: 'Croatia' }, { code: 'CU', name: 'Cuba' },
|
|
232
|
-
{ code: 'CW', name: 'Curaçao' }, { code: 'CY', name: 'Cyprus' },
|
|
233
|
-
{ code: 'CZ', name: 'Czech Republic' }, { code: 'DK', name: 'Denmark' },
|
|
234
|
-
{ code: 'DJ', name: 'Djibouti' }, { code: 'DM', name: 'Dominica' },
|
|
235
|
-
{ code: 'DO', name: 'Dominican Republic' }, { code: 'EC', name: 'Ecuador' },
|
|
236
|
-
{ code: 'EG', name: 'Egypt' }, { code: 'SV', name: 'El Salvador' },
|
|
237
|
-
{ code: 'GQ', name: 'Equatorial Guinea' }, { code: 'ER', name: 'Eritrea' },
|
|
238
|
-
{ code: 'EE', name: 'Estonia' }, { code: 'SZ', name: 'Eswatini' },
|
|
239
|
-
{ code: 'ET', name: 'Ethiopia' }, { code: 'FO', name: 'Faroe Islands' },
|
|
240
|
-
{ code: 'FJ', name: 'Fiji' }, { code: 'FI', name: 'Finland' },
|
|
241
|
-
{ code: 'FR', name: 'France' }, { code: 'GF', name: 'French Guiana' },
|
|
242
|
-
{ code: 'PF', name: 'French Polynesia' }, { code: 'GA', name: 'Gabon' },
|
|
243
|
-
{ code: 'GM', name: 'Gambia' }, { code: 'GE', name: 'Georgia' },
|
|
244
|
-
{ code: 'DE', name: 'Germany' }, { code: 'GH', name: 'Ghana' },
|
|
245
|
-
{ code: 'GI', name: 'Gibraltar' }, { code: 'GR', name: 'Greece' },
|
|
246
|
-
{ code: 'GL', name: 'Greenland' }, { code: 'GD', name: 'Grenada' },
|
|
247
|
-
{ code: 'GP', name: 'Guadeloupe' }, { code: 'GU', name: 'Guam' },
|
|
248
|
-
{ code: 'GT', name: 'Guatemala' }, { code: 'GN', name: 'Guinea' },
|
|
249
|
-
{ code: 'GW', name: 'Guinea-Bissau' }, { code: 'GY', name: 'Guyana' },
|
|
250
|
-
{ code: 'HT', name: 'Haiti' }, { code: 'HN', name: 'Honduras' },
|
|
251
|
-
{ code: 'HK', name: 'Hong Kong' }, { code: 'HU', name: 'Hungary' },
|
|
252
|
-
{ code: 'IS', name: 'Iceland' }, { code: 'IN', name: 'India' },
|
|
253
|
-
{ code: 'ID', name: 'Indonesia' }, { code: 'IR', name: 'Iran' },
|
|
254
|
-
{ code: 'IQ', name: 'Iraq' }, { code: 'IE', name: 'Ireland' },
|
|
255
|
-
{ code: 'IM', name: 'Isle of Man' }, { code: 'IL', name: 'Israel' },
|
|
256
|
-
{ code: 'IT', name: 'Italy' }, { code: 'JM', name: 'Jamaica' },
|
|
257
|
-
{ code: 'JP', name: 'Japan' }, { code: 'JE', name: 'Jersey' },
|
|
258
|
-
{ code: 'JO', name: 'Jordan' }, { code: 'KZ', name: 'Kazakhstan' },
|
|
259
|
-
{ code: 'KE', name: 'Kenya' }, { code: 'KI', name: 'Kiribati' },
|
|
260
|
-
{ code: 'KR', name: 'Korea, South' }, { code: 'XK', name: 'Kosovo' },
|
|
261
|
-
{ code: 'KW', name: 'Kuwait' }, { code: 'KG', name: 'Kyrgyzstan' },
|
|
262
|
-
{ code: 'LA', name: 'Laos' }, { code: 'LV', name: 'Latvia' },
|
|
263
|
-
{ code: 'LB', name: 'Lebanon' }, { code: 'LS', name: 'Lesotho' },
|
|
264
|
-
{ code: 'LR', name: 'Liberia' }, { code: 'LY', name: 'Libya' },
|
|
265
|
-
{ code: 'LI', name: 'Liechtenstein' }, { code: 'LT', name: 'Lithuania' },
|
|
266
|
-
{ code: 'LU', name: 'Luxembourg' }, { code: 'MO', name: 'Macao' },
|
|
267
|
-
{ code: 'MG', name: 'Madagascar' }, { code: 'MW', name: 'Malawi' },
|
|
268
|
-
{ code: 'MY', name: 'Malaysia' }, { code: 'MV', name: 'Maldives' },
|
|
269
|
-
{ code: 'ML', name: 'Mali' }, { code: 'MT', name: 'Malta' },
|
|
270
|
-
{ code: 'MH', name: 'Marshall Islands' }, { code: 'MQ', name: 'Martinique' },
|
|
271
|
-
{ code: 'MR', name: 'Mauritania' }, { code: 'MU', name: 'Mauritius' },
|
|
272
|
-
{ code: 'MX', name: 'Mexico' }, { code: 'FM', name: 'Micronesia' },
|
|
273
|
-
{ code: 'MD', name: 'Moldova' }, { code: 'MC', name: 'Monaco' },
|
|
274
|
-
{ code: 'MN', name: 'Mongolia' }, { code: 'ME', name: 'Montenegro' },
|
|
275
|
-
{ code: 'MS', name: 'Montserrat' }, { code: 'MA', name: 'Morocco' },
|
|
276
|
-
{ code: 'MZ', name: 'Mozambique' }, { code: 'MM', name: 'Myanmar' },
|
|
277
|
-
{ code: 'NA', name: 'Namibia' }, { code: 'NR', name: 'Nauru' },
|
|
278
|
-
{ code: 'NP', name: 'Nepal' }, { code: 'NL', name: 'Netherlands' },
|
|
279
|
-
{ code: 'NC', name: 'New Caledonia' }, { code: 'NZ', name: 'New Zealand' },
|
|
280
|
-
{ code: 'NI', name: 'Nicaragua' }, { code: 'NE', name: 'Niger' },
|
|
281
|
-
{ code: 'NG', name: 'Nigeria' }, { code: 'NU', name: 'Niue' },
|
|
282
|
-
{ code: 'MK', name: 'North Macedonia' }, { code: 'NO', name: 'Norway' },
|
|
283
|
-
{ code: 'OM', name: 'Oman' }, { code: 'PK', name: 'Pakistan' },
|
|
284
|
-
{ code: 'PW', name: 'Palau' }, { code: 'PS', name: 'Palestine' },
|
|
285
|
-
{ code: 'PA', name: 'Panama' }, { code: 'PG', name: 'Papua New Guinea' },
|
|
286
|
-
{ code: 'PY', name: 'Paraguay' }, { code: 'PE', name: 'Peru' },
|
|
287
|
-
{ code: 'PH', name: 'Philippines' }, { code: 'PL', name: 'Poland' },
|
|
288
|
-
{ code: 'PT', name: 'Portugal' }, { code: 'PR', name: 'Puerto Rico' },
|
|
289
|
-
{ code: 'QA', name: 'Qatar' }, { code: 'RE', name: 'Réunion' },
|
|
290
|
-
{ code: 'RO', name: 'Romania' },
|
|
291
|
-
{ code: 'RW', name: 'Rwanda' }, { code: 'KN', name: 'Saint Kitts and Nevis' },
|
|
292
|
-
{ code: 'LC', name: 'Saint Lucia' }, { code: 'VC', name: 'Saint Vincent and the Grenadines' },
|
|
293
|
-
{ code: 'WS', name: 'Samoa' }, { code: 'SM', name: 'San Marino' },
|
|
294
|
-
{ code: 'SA', name: 'Saudi Arabia' }, { code: 'SN', name: 'Senegal' },
|
|
295
|
-
{ code: 'RS', name: 'Serbia' }, { code: 'SC', name: 'Seychelles' },
|
|
296
|
-
{ code: 'SL', name: 'Sierra Leone' }, { code: 'SG', name: 'Singapore' },
|
|
297
|
-
{ code: 'SK', name: 'Slovakia' }, { code: 'SI', name: 'Slovenia' },
|
|
298
|
-
{ code: 'SB', name: 'Solomon Islands' }, { code: 'SO', name: 'Somalia' },
|
|
299
|
-
{ code: 'ZA', name: 'South Africa' }, { code: 'SS', name: 'South Sudan' },
|
|
300
|
-
{ code: 'ES', name: 'Spain' }, { code: 'LK', name: 'Sri Lanka' },
|
|
301
|
-
{ code: 'SD', name: 'Sudan' }, { code: 'SR', name: 'Suriname' },
|
|
302
|
-
{ code: 'SE', name: 'Sweden' }, { code: 'CH', name: 'Switzerland' },
|
|
303
|
-
{ code: 'SY', name: 'Syria' }, { code: 'TW', name: 'Taiwan' },
|
|
304
|
-
{ code: 'TJ', name: 'Tajikistan' }, { code: 'TZ', name: 'Tanzania' },
|
|
305
|
-
{ code: 'TH', name: 'Thailand' }, { code: 'TL', name: 'Timor-Leste' },
|
|
306
|
-
{ code: 'TG', name: 'Togo' }, { code: 'TO', name: 'Tonga' },
|
|
307
|
-
{ code: 'TT', name: 'Trinidad and Tobago' }, { code: 'TN', name: 'Tunisia' },
|
|
308
|
-
{ code: 'TR', name: 'Turkey' }, { code: 'TM', name: 'Turkmenistan' },
|
|
309
|
-
{ code: 'TC', name: 'Turks and Caicos Islands' }, { code: 'TV', name: 'Tuvalu' },
|
|
310
|
-
{ code: 'UG', name: 'Uganda' }, { code: 'UA', name: 'Ukraine' },
|
|
311
|
-
{ code: 'AE', name: 'United Arab Emirates' }, { code: 'GB', name: 'United Kingdom' },
|
|
312
|
-
{ code: 'US', name: 'United States' }, { code: 'UY', name: 'Uruguay' },
|
|
313
|
-
{ code: 'UZ', name: 'Uzbekistan' }, { code: 'VU', name: 'Vanuatu' },
|
|
314
|
-
{ code: 'VE', name: 'Venezuela' }, { code: 'VN', name: 'Vietnam' },
|
|
315
|
-
{ code: 'VG', name: 'Virgin Islands, British' }, { code: 'VI', name: 'Virgin Islands, U.S.' },
|
|
316
|
-
{ code: 'YE', name: 'Yemen' }, { code: 'ZM', name: 'Zambia' },
|
|
317
|
-
{ code: 'ZW', name: 'Zimbabwe' },
|
|
318
|
-
];
|
|
319
|
-
|
|
320
|
-
// Bundled server-issued access token (used by the default 'token' auth mode).
|
|
321
|
-
// NOTE: relocated verbatim from the original index.js — unchanged by this restructure.
|
|
322
|
-
const ACCESS_TOKEN = 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRWlJkS3JabXJmMEk3WkhXRUtqNWRLTEhQanFubWJFeV9iNmpSbHdya1drIn0.eyJleHAiOjE3MjMwMzI3NzIsImlhdCI6MTcyMzAyOTE3MiwianRpIjoiNDJiNGYwM2QtMDNiNS00NmZlLTk5YmItZDQ2NTdhNjk5NGNiIiwiaXNzIjoiaHR0cHM6Ly9hdXRoLmF1LWF3cy50aGV3aXNobGlzdC5pby9hdXRoL3JlYWxtcy90d2NNYWluIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6IjI2YTIyNTAyLWRhNzQtNDhkMC1iZWFiLTgzY2E0YTlmMDdlOSIsInR5cCI6IkJlYXJlciIsImF6cCI6InR3Yy1wb3MtY2xpZW50Iiwic2Vzc2lvbl9zdGF0ZSI6IjQxYWQwMDc4LWVmYTItNGVjMi1hM2I2LTIzYjBkNDM3YjEzOCIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInR3Yy1wb3MtdXNlciIsIm9mZmxpbmVfYWNjZXNzIiwidHdjLXN0b3JlLW93bmVyIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InRlbmFudGlkIHN0b3JlIHByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInRlbmFudGlkIjoidmlrdG9yaWEtd29vZHMiLCJuYW1lIjoiTWF0dCBIYW1wc2hpcmUiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJtYXR0QHRoZXdpc2hsaXN0LmlvIiwic3RvcmUiOiIyMDUiLCJnaXZlbl9uYW1lIjoiTWF0dCIsImZhbWlseV9uYW1lIjoiSGFtcHNoaXJlIiwiZW1haWwiOiJtYXR0QHRoZXdpc2hsaXN0LmlvIn0.iZkMgwH74njjXUWvImkJomHYr91Lr8ZGrZGwslEGcV3vbNuoNc5CocvNWW476o-LoSh-LsKf-MLiYN1XvOuPDF3fGoGCEbMh6_M0RJcrhVWogkj81fx4ukvDPCFIjgoDCV9WIuehV9dsSWa7E0irZeE6MUVhLwRIaTzKtxgzUUKrAqBtI_HKpyo8TUGQBiYlrc85QFUyuoKbKg-QaRn_SObRLDB8ooIBJvIlgklXQt1ZYBM2HUOc5L1bAQwfzcrWEvl6eYiQHXCSPqS0rPGoaGC6v5ydBo9VMxtVHGladDHLrO3Gt2BnIGMBoYrKTAmt7j0KABwPyB3CmAIwj_pOBQ';
|
|
323
|
-
// Default tenant for the X-Twc-Tenant header; used in both auth modes.
|
|
324
|
-
const TENANT_ID = 'victoria-woods';
|
|
325
|
-
// Default Shopify App Proxy app name; forms the `/apps/<name>/...` URL prefix
|
|
326
|
-
// used by the 'proxy' auth mode. Override per-merchant via `data-proxy-app`.
|
|
327
|
-
const PROXY_APP_NAME = 'twc-sdk';
|
|
328
|
-
// Customer-interest API endpoint (sandbox).
|
|
329
|
-
const CUSTOMER_INTEREST_URL = 'https://api.au-sandbox.thewishlist.io/services/wsservice/api/wishlist/items/customerInterest';
|
|
330
|
-
|
|
331
|
-
// Session-cached access token obtained from the Shopify App Proxy (proxy auth mode).
|
|
332
|
-
let cachedProxyToken = null;
|
|
333
|
-
// Fetch a tenant-scoped access token from the Shopify App Proxy.
|
|
334
|
-
// `proxyApp` is the merchant's App Proxy app name, forming the `/apps/<name>/...`
|
|
335
|
-
// URL prefix. The path is relative/same-origin, so Shopify's App Proxy layer
|
|
336
|
-
// appends and signs `shop`, `logged_in_customer_id`, `timestamp`, and `signature`.
|
|
337
|
-
// Returns the access token string, or null on failure (e.g. customer not logged in).
|
|
338
|
-
async function getProxyAccessToken(proxyApp) {
|
|
339
|
-
if (cachedProxyToken)
|
|
340
|
-
return cachedProxyToken;
|
|
341
|
-
try {
|
|
342
|
-
const response = await fetch(`/apps/${proxyApp}/auth/token`, {
|
|
343
|
-
method: 'GET',
|
|
344
|
-
headers: { Accept: 'application/json' },
|
|
345
|
-
});
|
|
346
|
-
const body = await response.json().catch(() => null);
|
|
347
|
-
if (response.ok &&
|
|
348
|
-
body &&
|
|
349
|
-
body.success &&
|
|
350
|
-
body.data &&
|
|
351
|
-
body.data.access_token) {
|
|
352
|
-
cachedProxyToken = body.data.access_token;
|
|
353
|
-
return cachedProxyToken;
|
|
354
|
-
}
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
357
|
-
catch (error) {
|
|
358
|
-
console.error('Error fetching proxy access token:', error);
|
|
359
|
-
return null;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// Resolve the Authorization token for the configured auth mode, then POST the
|
|
364
|
-
// customer-interest payload. 'auth' means a proxy token could not be obtained
|
|
365
|
-
// (customer not logged in); 'error' means the request failed or returned non-OK.
|
|
366
|
-
async function submitCustomerInterest(payload, authMode, tenant, proxyApp) {
|
|
367
|
-
let authToken = ACCESS_TOKEN;
|
|
368
|
-
if (authMode === 'proxy') {
|
|
369
|
-
const proxyToken = await getProxyAccessToken(proxyApp);
|
|
370
|
-
if (!proxyToken)
|
|
371
|
-
return { ok: false, reason: 'auth' };
|
|
372
|
-
authToken = `Bearer ${proxyToken}`;
|
|
373
|
-
}
|
|
374
|
-
try {
|
|
375
|
-
const response = await fetch(CUSTOMER_INTEREST_URL, {
|
|
376
|
-
method: 'POST',
|
|
377
|
-
headers: {
|
|
378
|
-
'Content-Type': 'application/json',
|
|
379
|
-
Authorization: authToken,
|
|
380
|
-
'X-Twc-Tenant': tenant,
|
|
381
|
-
},
|
|
382
|
-
body: JSON.stringify(payload),
|
|
383
|
-
});
|
|
384
|
-
return response.ok ? { ok: true } : { ok: false, reason: 'error' };
|
|
385
|
-
}
|
|
386
|
-
catch (error) {
|
|
387
|
-
console.error('Error submitting form:', error);
|
|
388
|
-
return { ok: false, reason: 'error' };
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
const TYPE_CONFIG = {
|
|
393
|
-
'notify-me': {
|
|
394
|
-
text: 'Register to receive a notification as soon as this item is back in stock',
|
|
395
|
-
buttonText: 'Notify Me',
|
|
396
|
-
},
|
|
397
|
-
'coming-soon': {
|
|
398
|
-
text: 'Register your interest to hear more about this item',
|
|
399
|
-
buttonText: 'Register Interest',
|
|
400
|
-
},
|
|
401
|
-
};
|
|
402
|
-
function createWidget(params) {
|
|
403
|
-
const { wrapper, openButton, config, productData, countryCtx } = params;
|
|
404
|
-
const { fields, type, authMode, tenant, proxyApp, marketId } = config;
|
|
405
|
-
// Create and append the overlay for the popup.
|
|
406
|
-
const overlay = document.createElement('div');
|
|
407
|
-
overlay.innerHTML = `
|
|
408
|
-
<div id="twc-nm-overlay" role="dialog" aria-modal="true" aria-labelledby="popup-title">
|
|
409
|
-
<div class="twc-nm-card">
|
|
410
|
-
<button type="button" id="popup-close" class="twc-nm-close" aria-label="Close">×</button>
|
|
411
|
-
<h2 id="popup-title" class="twc-nm-title"></h2>
|
|
412
|
-
<p id="popup-text" class="twc-nm-text"></p>
|
|
413
|
-
<form id="popup-form" class="twc-nm-form">
|
|
414
|
-
<div class="twc-nm-field">
|
|
415
|
-
<label class="twc-nm-label" for="twc-nm-size">Size</label>
|
|
416
|
-
<select class="twc-nm-select" id="twc-nm-size" name="select-size" required>
|
|
417
|
-
<option value="" disabled selected>Select a size</option>
|
|
418
|
-
</select>
|
|
419
|
-
</div>
|
|
420
|
-
</form>
|
|
421
|
-
</div>
|
|
422
|
-
</div>
|
|
423
|
-
`;
|
|
424
|
-
wrapper.appendChild(overlay);
|
|
425
|
-
const overlayEl = document.getElementById('twc-nm-overlay');
|
|
426
|
-
const popupClose = document.getElementById('popup-close');
|
|
427
|
-
const popupTitle = document.getElementById('popup-title');
|
|
428
|
-
const popupText = document.getElementById('popup-text');
|
|
429
|
-
const sizeSelect = document.querySelector("select[name='select-size']");
|
|
430
|
-
const form = document.getElementById('popup-form');
|
|
431
|
-
if (!overlayEl || !popupClose || !popupTitle || !popupText || !sizeSelect || !form) {
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
// Map for form fields.
|
|
435
|
-
popupText.innerText = TYPE_CONFIG[type].text;
|
|
436
|
-
const countryOptions = COUNTRY_CODES.map((c) => `<option value="${c.code}"${c.code === countryCtx.countryCode ? ' selected' : ''}>${c.name}</option>`).join('');
|
|
437
|
-
// Wrap an input/select in a labeled field row.
|
|
438
|
-
const field = (id, label, control) => `<div class="twc-nm-field"><label class="twc-nm-label" for="${id}">${label}</label>${control}</div>`;
|
|
439
|
-
const fieldMap = {
|
|
440
|
-
email: field('twc-nm-email', 'Email', `<input class="twc-nm-input" id="twc-nm-email" name="email" type="email" placeholder="you@example.com" required />`),
|
|
441
|
-
mobile: field('twc-nm-mobile', 'Mobile', `<input class="twc-nm-input" id="twc-nm-mobile" name="mobile" type="tel" placeholder="Mobile number" required />`),
|
|
442
|
-
firstName: field('twc-nm-firstname', 'First name', `<input class="twc-nm-input" id="twc-nm-firstname" name="firstName" type="text" placeholder="First name" required />`),
|
|
443
|
-
lastName: field('twc-nm-lastname', 'Last name', `<input class="twc-nm-input" id="twc-nm-lastname" name="lastName" type="text" placeholder="Last name" required />`),
|
|
444
|
-
countryCode: field('twc-nm-country', 'Country', `<select class="twc-nm-select" id="twc-nm-country" name="countryCode"><option value="">Select country</option>${countryOptions}</select>`),
|
|
445
|
-
provinceCode: field('twc-nm-province', 'State / Province', `<input class="twc-nm-input" id="twc-nm-province" name="provinceCode" type="text" placeholder="State / province code" value="${countryCtx.provinceCode || ''}" />`),
|
|
446
|
-
};
|
|
447
|
-
// Add fields to the form based on the parsed fields.
|
|
448
|
-
fields.forEach((name) => {
|
|
449
|
-
if (fieldMap[name]) {
|
|
450
|
-
form.insertAdjacentHTML('beforeend', fieldMap[name]);
|
|
451
|
-
}
|
|
452
|
-
});
|
|
453
|
-
form.insertAdjacentHTML('beforeend', `<div class="twc-nm-checks">
|
|
454
|
-
<label class="twc-nm-check"><input type="checkbox" name="mailList" /> Email me store updates</label>
|
|
455
|
-
<label class="twc-nm-check"><input type="checkbox" name="mailListSms" /> Text me store updates</label>
|
|
456
|
-
</div>`);
|
|
457
|
-
form.insertAdjacentHTML('beforeend', `<div id="popup-status" class="twc-nm-status" role="status" aria-live="polite" hidden></div>`);
|
|
458
|
-
form.insertAdjacentHTML('beforeend', `<button type="submit" class="twc-nm-submit">${TYPE_CONFIG[type].buttonText}</button>`);
|
|
459
|
-
const popupStatus = document.getElementById('popup-status');
|
|
460
|
-
const submitBtn = form.querySelector('.twc-nm-submit');
|
|
461
|
-
if (!popupStatus || !submitBtn)
|
|
462
|
-
return;
|
|
463
|
-
// Inline status messaging (replaces alert()).
|
|
464
|
-
function setStatus(kind, message) {
|
|
465
|
-
popupStatus.textContent = message;
|
|
466
|
-
popupStatus.className = `twc-nm-status twc-nm-status--${kind}`;
|
|
467
|
-
popupStatus.hidden = false;
|
|
468
|
-
}
|
|
469
|
-
function clearStatus() {
|
|
470
|
-
popupStatus.hidden = true;
|
|
471
|
-
popupStatus.textContent = '';
|
|
472
|
-
}
|
|
473
|
-
// Null-safe form readers (preserve normal-path behavior under strict mode).
|
|
474
|
-
const getValue = (selector) => {
|
|
475
|
-
const el = form.querySelector(selector);
|
|
476
|
-
return el ? el.value : '';
|
|
477
|
-
};
|
|
478
|
-
const isChecked = (selector) => {
|
|
479
|
-
const el = form.querySelector(selector);
|
|
480
|
-
return el ? el.checked : false;
|
|
481
|
-
};
|
|
482
|
-
// Open / close the popup.
|
|
483
|
-
let variantsPopulated = false;
|
|
484
|
-
let lastFocused = null;
|
|
485
|
-
function onKeydown(event) {
|
|
486
|
-
if (event.key === 'Escape')
|
|
487
|
-
closePopup();
|
|
488
|
-
}
|
|
489
|
-
function openPopup() {
|
|
490
|
-
lastFocused = document.activeElement;
|
|
491
|
-
overlayEl.classList.add('is-open');
|
|
492
|
-
document.body.style.overflow = 'hidden';
|
|
493
|
-
document.addEventListener('keydown', onKeydown);
|
|
494
|
-
}
|
|
495
|
-
function closePopup() {
|
|
496
|
-
overlayEl.classList.remove('is-open');
|
|
497
|
-
document.body.style.overflow = '';
|
|
498
|
-
document.removeEventListener('keydown', onKeydown);
|
|
499
|
-
clearStatus();
|
|
500
|
-
if (lastFocused && typeof lastFocused.focus === 'function') {
|
|
501
|
-
lastFocused.focus();
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
function showPopup() {
|
|
505
|
-
openPopup();
|
|
506
|
-
if (!productData) {
|
|
507
|
-
form.hidden = true;
|
|
508
|
-
setStatus('error', 'Product information is unavailable. Please refresh the page.');
|
|
509
|
-
return;
|
|
510
|
-
}
|
|
511
|
-
popupTitle.textContent = productData.title;
|
|
512
|
-
if (!variantsPopulated) {
|
|
513
|
-
(productData.variants || []).forEach((variant) => {
|
|
514
|
-
const option = document.createElement('option');
|
|
515
|
-
option.value = variant.title;
|
|
516
|
-
option.textContent = variant.title;
|
|
517
|
-
sizeSelect.appendChild(option);
|
|
518
|
-
});
|
|
519
|
-
variantsPopulated = true;
|
|
520
|
-
}
|
|
521
|
-
const firstControl = form.querySelector('select, input');
|
|
522
|
-
if (firstControl)
|
|
523
|
-
firstControl.focus();
|
|
524
|
-
}
|
|
525
|
-
openButton.addEventListener('click', showPopup);
|
|
526
|
-
popupClose.addEventListener('click', closePopup);
|
|
527
|
-
// Close when clicking the backdrop (but not the card).
|
|
528
|
-
overlayEl.addEventListener('click', (event) => {
|
|
529
|
-
if (event.target === overlayEl)
|
|
530
|
-
closePopup();
|
|
531
|
-
});
|
|
532
|
-
// Form submission handler.
|
|
533
|
-
form.addEventListener('submit', async (event) => {
|
|
534
|
-
event.preventDefault();
|
|
535
|
-
const selectedVariant = ((productData === null || productData === void 0 ? void 0 : productData.variants) || []).find((variant) => variant.title === sizeSelect.value);
|
|
536
|
-
if (!selectedVariant) {
|
|
537
|
-
setStatus('error', 'Please select a size.');
|
|
538
|
-
return;
|
|
539
|
-
}
|
|
540
|
-
const formData = {
|
|
541
|
-
variantRef: selectedVariant.id,
|
|
542
|
-
email: getValue("input[name='email']"),
|
|
543
|
-
subscribe: isChecked("input[name='mailList']"),
|
|
544
|
-
subscribeSms: isChecked("input[name='mailListSms']"),
|
|
545
|
-
};
|
|
546
|
-
if (type === 'coming-soon') {
|
|
547
|
-
formData.comingSoon = true;
|
|
548
|
-
}
|
|
549
|
-
else {
|
|
550
|
-
formData.notifyMe = true;
|
|
551
|
-
}
|
|
552
|
-
if (fields.includes('firstName')) {
|
|
553
|
-
formData.firstName = getValue("input[name='firstName']");
|
|
554
|
-
}
|
|
555
|
-
if (fields.includes('lastName')) {
|
|
556
|
-
formData.lastName = getValue("input[name='lastName']");
|
|
557
|
-
}
|
|
558
|
-
if (fields.includes('mobile')) {
|
|
559
|
-
formData.mobile = getValue("input[name='mobile']");
|
|
560
|
-
}
|
|
561
|
-
// Country / province / market — manual fields take precedence over auto-detected values.
|
|
562
|
-
if (fields.includes('countryCode')) {
|
|
563
|
-
const selected = getValue("select[name='countryCode']");
|
|
564
|
-
if (selected)
|
|
565
|
-
formData.countryCode = selected;
|
|
566
|
-
}
|
|
567
|
-
else if (countryCtx.countryCode) {
|
|
568
|
-
formData.countryCode = countryCtx.countryCode;
|
|
569
|
-
}
|
|
570
|
-
if (fields.includes('provinceCode')) {
|
|
571
|
-
const val = getValue("input[name='provinceCode']");
|
|
572
|
-
if (val)
|
|
573
|
-
formData.provinceCode = val;
|
|
574
|
-
}
|
|
575
|
-
else if (countryCtx.provinceCode) {
|
|
576
|
-
formData.provinceCode = countryCtx.provinceCode;
|
|
577
|
-
}
|
|
578
|
-
if (marketId)
|
|
579
|
-
formData.marketId = marketId;
|
|
580
|
-
clearStatus();
|
|
581
|
-
const originalButtonText = submitBtn.textContent || '';
|
|
582
|
-
submitBtn.disabled = true;
|
|
583
|
-
submitBtn.textContent = 'Sending…';
|
|
584
|
-
try {
|
|
585
|
-
const result = await submitCustomerInterest(formData, authMode, tenant, proxyApp);
|
|
586
|
-
if (result.ok) {
|
|
587
|
-
setStatus('success', "You're on the list. We'll be in touch.");
|
|
588
|
-
setTimeout(closePopup, 1500);
|
|
589
|
-
}
|
|
590
|
-
else if (result.reason === 'auth') {
|
|
591
|
-
setStatus('error', 'Please log in to your account to continue.');
|
|
592
|
-
}
|
|
593
|
-
else {
|
|
594
|
-
setStatus('error', 'Something went wrong. Please try again.');
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
finally {
|
|
598
|
-
submitBtn.disabled = false;
|
|
599
|
-
submitBtn.textContent = originalButtonText;
|
|
600
|
-
}
|
|
601
|
-
});
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
// Detect country/province/market context using priority fallback chain.
|
|
605
|
-
function detectCountryContext() {
|
|
606
|
-
var _a, _b;
|
|
607
|
-
const ctx = {
|
|
608
|
-
countryCode: null,
|
|
609
|
-
provinceCode: null,
|
|
610
|
-
marketId: null,
|
|
611
|
-
};
|
|
612
|
-
// Priority 1: Shopify localization/country context
|
|
613
|
-
const shopify = window.Shopify;
|
|
614
|
-
if (shopify) {
|
|
615
|
-
if (typeof shopify.country === 'string')
|
|
616
|
-
ctx.countryCode = shopify.country;
|
|
617
|
-
const mkt = (_a = shopify.markets) === null || _a === void 0 ? void 0 : _a.currentMarket;
|
|
618
|
-
if (mkt) {
|
|
619
|
-
if (mkt.countryCode)
|
|
620
|
-
ctx.countryCode = mkt.countryCode;
|
|
621
|
-
if (mkt.id != null)
|
|
622
|
-
ctx.marketId = String(mkt.id);
|
|
623
|
-
}
|
|
624
|
-
if (!ctx.countryCode && typeof shopify.locale === 'string') {
|
|
625
|
-
const parts = shopify.locale.split('-');
|
|
626
|
-
if (parts.length > 1)
|
|
627
|
-
ctx.countryCode = parts[parts.length - 1].toUpperCase();
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
// Priority 2: Existing customer shipping country
|
|
631
|
-
if (!ctx.countryCode || !ctx.provinceCode) {
|
|
632
|
-
const addr = (_b = window.customer) === null || _b === void 0 ? void 0 : _b.default_address;
|
|
633
|
-
if (addr) {
|
|
634
|
-
if (!ctx.countryCode && addr.country_code)
|
|
635
|
-
ctx.countryCode = addr.country_code;
|
|
636
|
-
if (!ctx.provinceCode && addr.province_code)
|
|
637
|
-
ctx.provinceCode = addr.province_code;
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
// Priority 3: Browser locale fallback
|
|
641
|
-
if (!ctx.countryCode) {
|
|
642
|
-
const parts = (navigator.language || '').split('-');
|
|
643
|
-
if (parts.length > 1)
|
|
644
|
-
ctx.countryCode = parts[parts.length - 1].toUpperCase();
|
|
645
|
-
}
|
|
646
|
-
return ctx;
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
650
|
-
const wrapper = document.getElementById('notification-widget');
|
|
651
|
-
if (!wrapper)
|
|
652
|
-
return;
|
|
653
|
-
const openButton = document.getElementById('popup-open');
|
|
654
|
-
if (!openButton)
|
|
655
|
-
return;
|
|
656
|
-
injectStyles();
|
|
657
|
-
// Parse configuration from the host button's data-* attributes.
|
|
658
|
-
const fields = JSON.parse(openButton.getAttribute('data-fields') || '["email"]');
|
|
659
|
-
const type = (openButton.getAttribute('data-type') || 'notify-me');
|
|
660
|
-
// Auth mode: 'token' (default, bundled ACCESS_TOKEN) or 'proxy' (Shopify App Proxy).
|
|
661
|
-
const authMode = (openButton.getAttribute('data-auth') || 'token');
|
|
662
|
-
// Tenant for X-Twc-Tenant header; used in both auth modes.
|
|
663
|
-
const tenant = openButton.getAttribute('data-tenant') || TENANT_ID;
|
|
664
|
-
// Shopify App Proxy app name; used by the 'proxy' auth mode to build the URL.
|
|
665
|
-
const proxyApp = openButton.getAttribute('data-proxy-app') || PROXY_APP_NAME;
|
|
666
|
-
const countryCtx = detectCountryContext();
|
|
667
|
-
const marketId = openButton.getAttribute('data-market-id') || countryCtx.marketId;
|
|
668
|
-
const config = {
|
|
669
|
-
fields,
|
|
670
|
-
type,
|
|
671
|
-
authMode,
|
|
672
|
-
tenant,
|
|
673
|
-
proxyApp,
|
|
674
|
-
marketId,
|
|
675
|
-
};
|
|
676
|
-
const productData = window.currentProduct;
|
|
677
|
-
createWidget({ wrapper, openButton, config, productData, countryCtx });
|
|
678
|
-
});
|
|
679
|
-
|
|
680
|
-
})();
|