@occluze/tether 0.6.8 → 0.7.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/README.md +11 -11
- package/dist/esm/astro.js +2 -2
- package/dist/esm/chunks/account-UIPWJQ3Y.js +1 -0
- package/dist/esm/chunks/account-pages-6ROA6Y4V.js +1 -0
- package/dist/esm/chunks/analytics-2V632IRV.js +1 -0
- package/dist/esm/chunks/chunk-4GCXM764.js +1 -0
- package/dist/esm/chunks/chunk-56FCLJJD.js +1 -0
- package/dist/esm/chunks/chunk-5Z5O3767.js +1 -0
- package/dist/esm/chunks/chunk-6OZJCAGZ.js +1 -0
- package/dist/esm/chunks/chunk-A5SYCVQM.js +1 -0
- package/dist/esm/chunks/chunk-BA4LQJJQ.js +1 -0
- package/dist/esm/chunks/chunk-BFTZR4OB.js +4 -0
- package/dist/esm/chunks/chunk-C5JYQCWH.js +1 -0
- package/dist/esm/chunks/chunk-E5YO6274.js +1 -0
- package/dist/esm/chunks/chunk-MPDWM2NN.js +1 -0
- package/dist/esm/chunks/chunk-T44MUL4Y.js +1 -0
- package/dist/esm/chunks/chunk-YLUULATY.js +1 -0
- package/dist/esm/chunks/diagnose-3FEKRIEK.js +14 -0
- package/dist/esm/chunks/extras-6POFBNOP.js +1 -0
- package/dist/esm/chunks/markets-ui-FD6NI2OG.js +1 -0
- package/dist/esm/chunks/search-UJ73YBQ5.js +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/server.js +2 -2
- package/dist/presets/barba.esm.js +19 -23
- package/dist/tether.account-pages.js +320 -365
- package/dist/tether.account-pages.min.js +1 -1
- package/dist/tether.account.js +242 -491
- package/dist/tether.account.min.js +1 -1
- package/dist/tether.analytics.js +66 -88
- package/dist/tether.analytics.min.js +1 -1
- package/dist/tether.diagnose.js +36 -33
- package/dist/tether.diagnose.min.js +2 -2
- package/dist/tether.extras.js +28 -36
- package/dist/tether.extras.min.js +1 -1
- package/dist/tether.js +1270 -894
- package/dist/tether.markets.js +73 -90
- package/dist/tether.markets.min.js +1 -1
- package/dist/tether.min.js +0 -0
- package/dist/tether.min.js.map +4 -4
- package/dist/tether.search.js +44 -68
- package/dist/tether.search.min.js +1 -1
- package/dist/types/server/src/shared/account-orders.d.ts +44 -0
- package/dist/types/server/src/shared/account-routes.d.ts +153 -0
- package/dist/types/server/src/shared/api-versions.d.ts +13 -0
- package/dist/types/server/src/shared/error-message.d.ts +2 -0
- package/dist/types/server/src/shared/json.d.ts +25 -0
- package/dist/types/server/src/shared/market-codes.d.ts +16 -0
- package/dist/types/src/account/addresses-view.d.ts +5 -0
- package/dist/types/src/account/answers.d.ts +40 -0
- package/dist/types/src/account/markup.d.ts +19 -0
- package/dist/types/src/account/operations.d.ts +41 -0
- package/dist/types/src/account/order-lines.d.ts +13 -0
- package/dist/types/src/account/order-list.d.ts +12 -0
- package/dist/types/src/account/order-page.d.ts +6 -0
- package/dist/types/src/account/page-answers.d.ts +182 -0
- package/dist/types/src/account/page-events.d.ts +2 -0
- package/dist/types/src/account/server-client.d.ts +60 -0
- package/dist/types/src/account/subscriptions-view.d.ts +2 -0
- package/dist/types/src/account-api.d.ts +18 -0
- package/dist/types/src/account-marks.d.ts +15 -0
- package/dist/types/src/account-pages.d.ts +8 -0
- package/dist/types/src/account.d.ts +64 -0
- package/dist/types/src/amounts.d.ts +12 -0
- package/dist/types/src/analytics-shopify.d.ts +41 -0
- package/dist/types/src/analytics.d.ts +2 -0
- package/dist/types/src/api-version.d.ts +28 -0
- package/dist/types/src/astro.d.ts +42 -0
- package/dist/types/src/cart/cart-shape.d.ts +43 -0
- package/dist/types/src/cart/checkout.d.ts +16 -0
- package/dist/types/src/cart/drawer.d.ts +18 -0
- package/dist/types/src/cart/mutations.d.ts +79 -0
- package/dist/types/src/cart/render.d.ts +17 -0
- package/dist/types/src/cart/store.d.ts +182 -0
- package/dist/types/src/cart.d.ts +106 -0
- package/dist/types/src/client.d.ts +100 -0
- package/dist/types/src/collection.d.ts +25 -0
- package/dist/types/src/config-sections.d.ts +40 -0
- package/dist/types/src/config.d.ts +185 -0
- package/dist/types/src/controls/cart-controls.d.ts +2 -0
- package/dist/types/src/controls/discount.d.ts +2 -0
- package/dist/types/src/controls/extras.d.ts +5 -0
- package/dist/types/src/controls/navigation.d.ts +12 -0
- package/dist/types/src/diagnose-markup.d.ts +19 -0
- package/dist/types/src/diagnose.d.ts +60 -0
- package/dist/types/src/dom.d.ts +75 -0
- package/dist/types/src/extras.d.ts +21 -0
- package/dist/types/src/fragments.d.ts +158 -0
- package/dist/types/src/globals.d.ts +15 -0
- package/dist/types/src/images.d.ts +20 -0
- package/dist/types/src/index.d.ts +167 -0
- package/dist/types/src/initial.d.ts +56 -0
- package/dist/types/src/lazy.d.ts +28 -0
- package/dist/types/src/loader.d.ts +84 -0
- package/dist/types/src/market-codes.d.ts +6 -0
- package/dist/types/src/markets-ui.d.ts +32 -0
- package/dist/types/src/markets.d.ts +72 -0
- package/dist/types/src/markup.d.ts +131 -0
- package/dist/types/src/mounting.d.ts +46 -0
- package/dist/types/src/page-market.d.ts +27 -0
- package/dist/types/src/presets/barba.d.ts +56 -0
- package/dist/types/src/product-events.d.ts +2 -0
- package/dist/types/src/product-render.d.ts +17 -0
- package/dist/types/src/product-shape.d.ts +88 -0
- package/dist/types/src/product-state.d.ts +110 -0
- package/dist/types/src/product.d.ts +66 -0
- package/dist/types/src/repeaters.d.ts +16 -0
- package/dist/types/src/search.d.ts +33 -0
- package/dist/types/src/selling-plans.d.ts +64 -0
- package/dist/types/src/server.d.ts +88 -0
- package/dist/types/src/shopify-values.d.ts +46 -0
- package/dist/types/src/status.d.ts +33 -0
- package/dist/types/src/storage.d.ts +12 -0
- package/dist/types/src/store-html.d.ts +39 -0
- package/dist/types/src/storefront/catalog.d.ts +38 -0
- package/dist/types/src/storefront/json-ld.d.ts +20 -0
- package/dist/types/src/variant-render.d.ts +14 -0
- package/package.json +24 -23
- package/src/account/addresses-view.ts +58 -0
- package/src/account/answers.ts +79 -0
- package/src/account/markup.ts +36 -0
- package/src/account/operations.ts +145 -0
- package/src/account/{order-lines.js → order-lines.ts} +20 -41
- package/src/account/order-list.ts +107 -0
- package/src/account/order-page.ts +137 -0
- package/src/account/page-answers.ts +317 -0
- package/src/account/{page-events.js → page-events.ts} +55 -90
- package/src/account/server-client.ts +183 -0
- package/src/account/{subscriptions-view.js → subscriptions-view.ts} +25 -68
- package/src/account-api.ts +98 -0
- package/src/account-marks.ts +35 -0
- package/src/{account-pages.js → account-pages.ts} +29 -37
- package/src/account.ts +284 -0
- package/src/amounts.ts +64 -0
- package/src/{analytics-shopify.js → analytics-shopify.ts} +112 -107
- package/src/analytics.ts +315 -0
- package/src/{api-version.js → api-version.ts} +25 -31
- package/src/{astro.js → astro.ts} +110 -104
- package/src/cart/cart-shape.ts +25 -0
- package/src/cart/checkout.ts +101 -0
- package/src/cart/{drawer.js → drawer.ts} +18 -31
- package/src/cart/mutations.ts +237 -0
- package/src/cart/{render.js → render.ts} +68 -96
- package/src/cart/store.ts +279 -0
- package/src/{cart.js → cart.ts} +82 -128
- package/src/client.ts +391 -0
- package/src/{collection.js → collection.ts} +30 -38
- package/src/config-sections.ts +284 -0
- package/src/config.ts +480 -0
- package/src/controls/{cart-controls.js → cart-controls.ts} +22 -54
- package/src/controls/{discount.js → discount.ts} +13 -34
- package/src/controls/{extras.js → extras.ts} +15 -24
- package/src/controls/{navigation.js → navigation.ts} +24 -30
- package/src/{diagnose-markup.js → diagnose-markup.ts} +37 -72
- package/src/{diagnose.js → diagnose.ts} +95 -96
- package/src/dom.ts +268 -0
- package/src/{extras.js → extras.ts} +43 -52
- package/src/fragments.ts +261 -0
- package/src/globals.d.ts +15 -0
- package/src/{images.js → images.ts} +30 -43
- package/src/index.ts +415 -0
- package/src/initial.ts +101 -0
- package/src/lazy-iife.ts +197 -0
- package/src/lazy.ts +42 -0
- package/src/{loader.js → loader.ts} +149 -123
- package/src/market-codes.ts +6 -0
- package/src/{markets-ui.js → markets-ui.ts} +91 -68
- package/src/markets.ts +246 -0
- package/src/markup.ts +127 -0
- package/src/{mounting.js → mounting.ts} +88 -101
- package/src/{page-market.js → page-market.ts} +32 -38
- package/src/part-integrity.ts +7 -0
- package/src/parts/account-pages.ts +7 -0
- package/src/parts/account.ts +7 -0
- package/src/parts/analytics.ts +7 -0
- package/src/parts/diagnose.ts +7 -0
- package/src/parts/extras.ts +7 -0
- package/src/parts/markets.ts +7 -0
- package/src/parts/search.ts +7 -0
- package/src/presets/barba.ts +194 -0
- package/src/{product-events.js → product-events.ts} +33 -48
- package/src/{product-render.js → product-render.ts} +38 -77
- package/src/product-shape.ts +49 -0
- package/src/product-state.ts +318 -0
- package/src/{product.js → product.ts} +90 -126
- package/src/{repeaters.js → repeaters.ts} +40 -52
- package/src/{search.js → search.ts} +85 -103
- package/src/selling-plans.ts +145 -0
- package/src/server.ts +211 -0
- package/src/{shopify-values.js → shopify-values.ts} +24 -22
- package/src/{status.js → status.ts} +34 -54
- package/src/storage.ts +34 -0
- package/src/store-html.ts +359 -0
- package/src/storefront/catalog.ts +196 -0
- package/src/storefront/{json-ld.js → json-ld.ts} +45 -68
- package/src/{variant-render.js → variant-render.ts} +24 -50
- package/dist/esm/chunks/account-C3NP6HFB.js +0 -1
- package/dist/esm/chunks/account-pages-WLK374FO.js +0 -1
- package/dist/esm/chunks/analytics-G3SAWMNL.js +0 -1
- package/dist/esm/chunks/chunk-27PJJZGC.js +0 -1
- package/dist/esm/chunks/chunk-2FSXS55U.js +0 -1
- package/dist/esm/chunks/chunk-FCSWQDVV.js +0 -1
- package/dist/esm/chunks/chunk-FOMSMIAM.js +0 -1
- package/dist/esm/chunks/chunk-GZJTCLLW.js +0 -1
- package/dist/esm/chunks/chunk-HEQILZVR.js +0 -1
- package/dist/esm/chunks/chunk-JOOEXYF3.js +0 -4
- package/dist/esm/chunks/chunk-MPTQYLSM.js +0 -1
- package/dist/esm/chunks/chunk-NEHZ37TU.js +0 -3
- package/dist/esm/chunks/chunk-V74KGEJF.js +0 -1
- package/dist/esm/chunks/chunk-VT4CDUJJ.js +0 -1
- package/dist/esm/chunks/chunk-YJLWX2HK.js +0 -1
- package/dist/esm/chunks/diagnose-6VVGZNTY.js +0 -14
- package/dist/esm/chunks/extras-GJVRDFM3.js +0 -1
- package/dist/esm/chunks/markets-ui-UNB4PTA7.js +0 -1
- package/dist/esm/chunks/search-OU75RNQL.js +0 -1
- package/src/account/addresses-view.js +0 -92
- package/src/account/browser-session.js +0 -359
- package/src/account/markup.js +0 -48
- package/src/account/operations.js +0 -180
- package/src/account/order-list.js +0 -91
- package/src/account/order-page.js +0 -192
- package/src/account/server-client.js +0 -172
- package/src/account/shared.js +0 -111
- package/src/account/shopify-auth.js +0 -150
- package/src/account-api.js +0 -118
- package/src/account-links.js +0 -35
- package/src/account.js +0 -342
- package/src/amounts.js +0 -36
- package/src/analytics.js +0 -352
- package/src/cart/checkout.js +0 -97
- package/src/cart/mutations.js +0 -234
- package/src/cart/store.js +0 -326
- package/src/client.js +0 -267
- package/src/config.js +0 -349
- package/src/dom.js +0 -287
- package/src/fragments.js +0 -237
- package/src/index.js +0 -353
- package/src/initial.js +0 -87
- package/src/lazy-iife.js +0 -116
- package/src/lazy.js +0 -39
- package/src/market-codes.js +0 -35
- package/src/markets.js +0 -334
- package/src/markup.js +0 -64
- package/src/parts/account-pages.js +0 -6
- package/src/parts/account.js +0 -6
- package/src/parts/analytics.js +0 -6
- package/src/parts/diagnose.js +0 -6
- package/src/parts/extras.js +0 -6
- package/src/parts/markets.js +0 -6
- package/src/parts/search.js +0 -6
- package/src/presets/barba.js +0 -190
- package/src/product-state.js +0 -318
- package/src/selling-plans.js +0 -154
- package/src/server.js +0 -215
- package/src/store-html.js +0 -0
- package/src/storefront/catalog.js +0 -199
- package/types/astro.d.ts +0 -28
- package/types/barba.d.ts +0 -16
- package/types/index.d.ts +0 -577
- package/types/server.d.ts +0 -182
package/dist/tether.markets.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
(() => {
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __export = (target, all) => {
|
|
@@ -6,7 +5,7 @@
|
|
|
6
5
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
7
6
|
};
|
|
8
7
|
|
|
9
|
-
// src/markets-ui.
|
|
8
|
+
// src/markets-ui.ts
|
|
10
9
|
var markets_ui_exports = {};
|
|
11
10
|
__export(markets_ui_exports, {
|
|
12
11
|
detectMarket: () => detectMarket,
|
|
@@ -15,65 +14,69 @@
|
|
|
15
14
|
setCountry: () => setCountry
|
|
16
15
|
});
|
|
17
16
|
|
|
18
|
-
// tether-core:config.
|
|
19
|
-
var m = window.Tether.__core["config.
|
|
20
|
-
var
|
|
17
|
+
// tether-core:config.ts
|
|
18
|
+
var m = window.Tether.__core["config.ts"];
|
|
19
|
+
var [cfg, isConfigured, log, MARKET_SOURCES, parseMarkets, reportError, warn] = m;
|
|
21
20
|
|
|
22
|
-
// tether-core:client.
|
|
23
|
-
var m2 = window.Tether.__core["client.
|
|
24
|
-
var
|
|
21
|
+
// tether-core:client.ts
|
|
22
|
+
var m2 = window.Tether.__core["client.ts"];
|
|
23
|
+
var [endpoint, gql, orNull, shaped, TetherError] = m2;
|
|
25
24
|
|
|
26
|
-
// tether-core:cart.
|
|
27
|
-
var m3 = window.Tether.__core["cart.
|
|
28
|
-
var
|
|
25
|
+
// tether-core:cart.ts
|
|
26
|
+
var m3 = window.Tether.__core["cart.ts"];
|
|
27
|
+
var [Cart] = m3;
|
|
29
28
|
|
|
30
|
-
// tether-core:collection.
|
|
31
|
-
var m4 = window.Tether.__core["collection.
|
|
32
|
-
var
|
|
29
|
+
// tether-core:collection.ts
|
|
30
|
+
var m4 = window.Tether.__core["collection.ts"];
|
|
31
|
+
var [listSelector] = m4;
|
|
33
32
|
|
|
34
|
-
// tether-core:loader.
|
|
35
|
-
var m5 = window.Tether.__core["loader.
|
|
36
|
-
var
|
|
33
|
+
// tether-core:loader.ts
|
|
34
|
+
var m5 = window.Tether.__core["loader.ts"];
|
|
35
|
+
var [clearProductCache, getProduct] = m5;
|
|
37
36
|
|
|
38
|
-
// tether-core:dom.
|
|
39
|
-
var m6 = window.Tether.__core["dom.
|
|
40
|
-
var
|
|
37
|
+
// tether-core:dom.ts
|
|
38
|
+
var m6 = window.Tether.__core["dom.ts"];
|
|
39
|
+
var [ANALYTICS_EVENTS, attr, attributesFromJson, emit, formatDate, formatMoney, get, has, hasTemplate, isOwnEvent, parseJSONAttr, productUrl, qsa, repeat, sel, setImage, setText, show] = m6;
|
|
41
40
|
|
|
42
|
-
// tether-core:mounting.
|
|
43
|
-
var m7 = window.Tether.__core["mounting.
|
|
44
|
-
var
|
|
41
|
+
// tether-core:mounting.ts
|
|
42
|
+
var m7 = window.Tether.__core["mounting.ts"];
|
|
43
|
+
var [liveLists, liveProducts, mountedProducts, mountProduct, pruneLive, within] = m7;
|
|
45
44
|
|
|
46
|
-
// tether-core:market-codes.
|
|
47
|
-
var m8 = window.Tether.__core["market-codes.
|
|
48
|
-
var
|
|
45
|
+
// tether-core:market-codes.ts
|
|
46
|
+
var m8 = window.Tether.__core["market-codes.ts"];
|
|
47
|
+
var [toCountry, toLanguage] = m8;
|
|
49
48
|
|
|
50
|
-
// src/
|
|
51
|
-
|
|
52
|
-
var DEFAULT_COOKIE = "tether_country";
|
|
53
|
-
var storageKey = () => `${cfg.prefix}:market:${cfg.domain}`;
|
|
54
|
-
function localStorageIfAllowed() {
|
|
55
|
-
if (typeof window === "undefined") return null;
|
|
49
|
+
// src/storage.ts
|
|
50
|
+
function getStored(key, area = "localStorage") {
|
|
56
51
|
try {
|
|
57
|
-
return window.
|
|
52
|
+
return window[area].getItem(key);
|
|
58
53
|
} catch {
|
|
59
54
|
return null;
|
|
60
55
|
}
|
|
61
56
|
}
|
|
57
|
+
function setStored(key, value, area = "localStorage") {
|
|
58
|
+
try {
|
|
59
|
+
window[area].setItem(key, value);
|
|
60
|
+
} catch {
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// src/markets.ts
|
|
65
|
+
var DEFAULT_COOKIE = "tether_country";
|
|
66
|
+
var storageKey = () => `${cfg.prefix}:market:${cfg.domain}`;
|
|
67
|
+
var pageStorage = { getItem: (key) => getStored(key) };
|
|
62
68
|
function pageEnv() {
|
|
63
69
|
const hasWindow = typeof window !== "undefined";
|
|
64
70
|
return {
|
|
65
71
|
document: typeof document !== "undefined" ? document : null,
|
|
66
72
|
location: hasWindow ? window.location : null,
|
|
67
|
-
storage:
|
|
73
|
+
storage: pageStorage,
|
|
68
74
|
global: hasWindow ? window : {}
|
|
69
75
|
};
|
|
70
76
|
}
|
|
71
77
|
function parseJsonOrNull(text) {
|
|
72
78
|
try {
|
|
73
|
-
return (
|
|
74
|
-
/** @type {unknown} */
|
|
75
|
-
JSON.parse(text)
|
|
76
|
-
);
|
|
79
|
+
return JSON.parse(text);
|
|
77
80
|
} catch (error) {
|
|
78
81
|
if (error instanceof SyntaxError) return null;
|
|
79
82
|
throw error;
|
|
@@ -83,18 +86,15 @@
|
|
|
83
86
|
if (typeof value !== "object" || value === null) return null;
|
|
84
87
|
const country = toCountry(Reflect.get(value, "country"));
|
|
85
88
|
if (!country) return null;
|
|
86
|
-
const locale = (
|
|
87
|
-
/** @type {unknown} */
|
|
88
|
-
Reflect.get(value, "locale")
|
|
89
|
-
);
|
|
89
|
+
const locale = Reflect.get(value, "locale");
|
|
90
90
|
return {
|
|
91
91
|
country,
|
|
92
92
|
language: toLanguage(Reflect.get(value, "language")) ?? void 0,
|
|
93
93
|
locale: typeof locale === "string" && locale ? locale : void 0
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
function readSavedMarket(storage =
|
|
97
|
-
const text = storage
|
|
96
|
+
function readSavedMarket(storage = pageStorage) {
|
|
97
|
+
const text = storage.getItem(storageKey());
|
|
98
98
|
return text ? toMarket(parseJsonOrNull(text)) : null;
|
|
99
99
|
}
|
|
100
100
|
function readCookie(doc, name) {
|
|
@@ -110,9 +110,12 @@
|
|
|
110
110
|
}
|
|
111
111
|
function readServerHint(markets, env) {
|
|
112
112
|
const meta = (name) => env.document?.querySelector(`meta[name="${name}"]`)?.getAttribute("content");
|
|
113
|
+
const globalCountry = Reflect.get(env.global, "TETHER_COUNTRY");
|
|
114
|
+
const globalLanguage = Reflect.get(env.global, "TETHER_LANGUAGE");
|
|
115
|
+
const pageCountry = meta("tether-country") || readCookie(env.document, markets.cookie || DEFAULT_COOKIE);
|
|
113
116
|
return {
|
|
114
|
-
country:
|
|
115
|
-
language:
|
|
117
|
+
country: globalCountry || pageCountry,
|
|
118
|
+
language: globalLanguage || meta("tether-language")
|
|
116
119
|
};
|
|
117
120
|
}
|
|
118
121
|
function readWebflowLocale(markets, env) {
|
|
@@ -137,17 +140,12 @@
|
|
|
137
140
|
return readWebflowLocale(markets, env);
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
|
-
var isMarketSource = (name) => ALL_SOURCES.some((source) => source === name);
|
|
141
143
|
function sourcesFor(detect) {
|
|
142
144
|
if (!detect) return ["saved"];
|
|
143
|
-
|
|
144
|
-
return (
|
|
145
|
-
/** @type {unknown[]} */
|
|
146
|
-
[detect].flat().filter(isMarketSource)
|
|
147
|
-
);
|
|
145
|
+
return detect === true ? MARKET_SOURCES : detect;
|
|
148
146
|
}
|
|
149
147
|
function detectMarket(markets = cfg.markets, env = pageEnv()) {
|
|
150
|
-
const config = markets ?? {};
|
|
148
|
+
const config = (markets === cfg.markets ? markets : parseMarkets(markets)) ?? {};
|
|
151
149
|
if (config.detect === false) return {};
|
|
152
150
|
const sources = {};
|
|
153
151
|
const found = { sources };
|
|
@@ -172,40 +170,34 @@
|
|
|
172
170
|
}
|
|
173
171
|
return found;
|
|
174
172
|
}
|
|
175
|
-
function storeIfAllowed(key, value) {
|
|
176
|
-
try {
|
|
177
|
-
localStorage.setItem(key, value);
|
|
178
|
-
} catch {
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
173
|
function rememberMarket(market) {
|
|
183
174
|
if (cfg.markets?.remember === false) return;
|
|
184
175
|
const saved = { country: market.country, language: market.language || void 0, locale: market.locale || void 0 };
|
|
185
|
-
|
|
176
|
+
setStored(storageKey(), JSON.stringify(saved));
|
|
186
177
|
}
|
|
178
|
+
|
|
179
|
+
// src/markets-ui.ts
|
|
180
|
+
var DEFAULT_LABEL = "{name} ({currency})";
|
|
181
|
+
var DEFAULT_BIND = "name";
|
|
187
182
|
var localizationPromise = null;
|
|
188
183
|
function clearLocalization() {
|
|
189
184
|
localizationPromise = null;
|
|
190
185
|
}
|
|
191
186
|
var LOCALIZATION_QUERY = `query TetherLocalization{localization{country{isoCode name currency{isoCode symbol}}language{isoCode name}availableCountries{isoCode name currency{isoCode symbol}availableLanguages{isoCode name}}}}`;
|
|
187
|
+
var COUNTRY = { isoCode: "string", name: "string", currency: "object" };
|
|
188
|
+
var isLocalizationAnswer = shaped({
|
|
189
|
+
localization: { country: COUNTRY, availableCountries: [COUNTRY] }
|
|
190
|
+
});
|
|
192
191
|
function getLocalization() {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
);
|
|
202
|
-
}
|
|
192
|
+
localizationPromise ?? (localizationPromise = gql(LOCALIZATION_QUERY, {}, isLocalizationAnswer).then(
|
|
193
|
+
(data) => data.localization,
|
|
194
|
+
(error) => {
|
|
195
|
+
localizationPromise = null;
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
));
|
|
203
199
|
return localizationPromise;
|
|
204
200
|
}
|
|
205
|
-
|
|
206
|
-
// src/markets-ui.js
|
|
207
|
-
var DEFAULT_LABEL = "{name} ({currency})";
|
|
208
|
-
var DEFAULT_BIND = "name";
|
|
209
201
|
function countryField(country, field) {
|
|
210
202
|
switch (field) {
|
|
211
203
|
case "name":
|
|
@@ -220,10 +212,7 @@
|
|
|
220
212
|
return "";
|
|
221
213
|
}
|
|
222
214
|
}
|
|
223
|
-
var fillLabel = (template, country) => template.replace(
|
|
224
|
-
/\{(name|code|currency|symbol)\}/g,
|
|
225
|
-
(_match, field) => countryField(country, field)
|
|
226
|
-
);
|
|
215
|
+
var fillLabel = (template, country) => template.replace(/\{(name|code|currency|symbol)\}/g, (_match, field) => countryField(country, field));
|
|
227
216
|
function fillCountrySelect(select, countries, current) {
|
|
228
217
|
const template = select.getAttribute(attr("country-label")) || DEFAULT_LABEL;
|
|
229
218
|
const only = (select.getAttribute(attr("countries")) || "").toUpperCase().split(/[\s,]+/).filter(Boolean);
|
|
@@ -247,10 +236,7 @@
|
|
|
247
236
|
});
|
|
248
237
|
}
|
|
249
238
|
function renderCountrySelects(root = document) {
|
|
250
|
-
const selects = (
|
|
251
|
-
/** @type {HTMLSelectElement[]} */
|
|
252
|
-
within(root, `select${sel("country-select")}`)
|
|
253
|
-
);
|
|
239
|
+
const selects = within(root, `select${sel("country-select")}`);
|
|
254
240
|
const binds = within(root, sel("country-bind"));
|
|
255
241
|
if (!selects.length && !binds.length) return Promise.resolve();
|
|
256
242
|
return getLocalization().then((localization) => {
|
|
@@ -291,7 +277,7 @@
|
|
|
291
277
|
const ownLocale = locale || entry?.locale;
|
|
292
278
|
const nextLocale = ownLocale || cfg.locale;
|
|
293
279
|
const nextLanguage = languageFor(language, entry);
|
|
294
|
-
const changed = country !== cfg.country
|
|
280
|
+
const changed = country !== cfg.country || nextLanguage !== cfg.language || nextLocale !== cfg.locale;
|
|
295
281
|
cfg.country = country;
|
|
296
282
|
cfg.language = nextLanguage || void 0;
|
|
297
283
|
cfg.locale = nextLocale;
|
|
@@ -308,11 +294,8 @@
|
|
|
308
294
|
return Cart.state;
|
|
309
295
|
}
|
|
310
296
|
|
|
311
|
-
// src/parts/markets.
|
|
312
|
-
var { Tether } =
|
|
313
|
-
/** @type {Window & { Tether?: { __parts: Record<string, unknown> } }} */
|
|
314
|
-
window
|
|
315
|
-
);
|
|
297
|
+
// src/parts/markets.ts
|
|
298
|
+
var { Tether } = window;
|
|
316
299
|
if (!Tether) throw new Error("tether.markets.js runs after the Tether script, which loads it");
|
|
317
|
-
Tether.__parts
|
|
300
|
+
Tether.__parts.markets = markets_ui_exports;
|
|
318
301
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
(()=>{var K=Object.defineProperty;var W=(e,t)=>{for(var n in t)K(e,n,{get:t[n],enumerable:!0})};var L={};W(L,{detectMarket:()=>F,getLocalization:()=>$,renderCountrySelects:()=>h,setCountry:()=>be});var G=window.Tether.__core["config.ts"],[c,Te,ve,M,S,p,xe]=G;var V=window.Tether.__core["client.ts"],[Pe,b,Ae,E,T]=V;var Q=window.Tether.__core["cart.ts"],[g]=Q;var Z=window.Tether.__core["collection.ts"],[v]=Z;var X=window.Tether.__core["loader.ts"],[x,Oe]=X;var ee=window.Tether.__core["dom.ts"],[Ue,m,He,_,De,Fe,P,je,qe,$e,Je,Ye,Be,Ke,C,We,Ge,Ve]=ee;var te=window.Tether.__core["mounting.ts"],[A,I,z,N,O,w]=te;var ne=window.Tether.__core["market-codes.ts"],[s,d]=ne;function R(e,t="localStorage"){try{return window[t].getItem(e)}catch{return null}}function U(e,t,n="localStorage"){try{window[n].setItem(e,t)}catch{}}var oe="tether_country",H=()=>`${c.prefix}:market:${c.domain}`,D={getItem:e=>R(e)};function re(){let e=typeof window<"u";return{document:typeof document<"u"?document:null,location:e?window.location:null,storage:D,global:e?window:{}}}function ae(e){try{return JSON.parse(e)}catch(t){if(t instanceof SyntaxError)return null;throw t}}function ce(e){if(typeof e!="object"||e===null)return null;let t=s(Reflect.get(e,"country"));if(!t)return null;let n=Reflect.get(e,"locale");return{country:t,language:d(Reflect.get(e,"language"))??void 0,locale:typeof n=="string"&&n?n:void 0}}function ie(e=D){let t=e.getItem(H());return t?ce(ae(t)):null}function le(e,t){if(!e||!t)return null;let n=e.cookie.split(";").map(a=>a.trim()).find(a=>a.startsWith(`${t}=`));return n?decodeURIComponent(n.slice(t.length+1)):null}function k(e,t){if(!e||!t)return null;let n=t.toLowerCase(),a=Object.keys(e).find(o=>o.toLowerCase()===n);return a?e[a]??null:null}function ue(e,t){let n=r=>t.document?.querySelector(`meta[name="${r}"]`)?.getAttribute("content"),a=Reflect.get(t.global,"TETHER_COUNTRY"),o=Reflect.get(t.global,"TETHER_LANGUAGE"),i=n("tether-country")||le(t.document,e.cookie||oe);return{country:a||i,language:o||n("tether-language")}}function se(e,t){let n=(t.location?.pathname??"/").split("/").find(l=>l!==""),a=k(e.locales,n);if(a)return a;let o=t.document?.documentElement.getAttribute("lang");if(!o)return null;let i=k(e.locales,o)??k(e.locales,o.split("-")[0]);if(i)return{locale:o,...i};if(e.locales&&e.strict)return null;let r=o.split("-")[1];return{language:o,country:r?.length===2?r:null,locale:o}}function de(e,t,n){switch(e){case"saved":return t.remember===!1?null:ie(n.storage);case"server":return ue(t,n);case"webflow":return se(t,n)}}function ge(e){return e?e===!0?M:e:["saved"]}function F(e=c.markets,t=re()){let n=(e===c.markets?e:S(e))??{};if(n.detect===!1)return{};let a={},o={sources:a};for(let i of ge(n.detect)){let r=de(i,n,t);if(!r)continue;let l=s(r.country),u=d(r.language),f=typeof r.locale=="string"&&r.locale?r.locale:null;l&&!o.country&&(o.country=l,a.country=i),u&&!o.language&&(o.language=u,a.language=i),f&&!o.locale&&(o.locale=f,a.locale=i)}return o}function j(e){if(c.markets?.remember===!1)return;let t={country:e.country,language:e.language||void 0,locale:e.locale||void 0};U(H(),JSON.stringify(t))}var fe="{name} ({currency})",me="name",y=null;function ye(){y=null}var pe="query TetherLocalization{localization{country{isoCode name currency{isoCode symbol}}language{isoCode name}availableCountries{isoCode name currency{isoCode symbol}availableLanguages{isoCode name}}}}",q={isoCode:"string",name:"string",currency:"object"},Ce=E({localization:{country:q,availableCountries:[q]}});function $(){return y??(y=b(pe,{},Ce).then(e=>e.localization,e=>{throw y=null,e})),y}function J(e,t){switch(t){case"name":return e.name;case"code":return e.isoCode;case"currency":return e.currency.isoCode;case"symbol":return e.currency.symbol;default:return""}}var we=(e,t)=>e.replace(/\{(name|code|currency|symbol)\}/g,(n,a)=>J(t,a));function ke(e,t,n){let a=e.getAttribute(m("country-label"))||fe,o=(e.getAttribute(m("countries"))||"").toUpperCase().split(/[\s,]+/).filter(Boolean),i=o.length?o.map(r=>t.find(l=>l.isoCode===r)).filter(r=>r!==void 0):t;e.replaceChildren(...i.map(r=>new Option(we(a,r),r.isoCode))),e.value=n,e.value!==n&&(e.selectedIndex=-1),e.disabled=i.length<2&&!e.hasAttribute(m("always-enabled"))}function he(e,t,n){let a=(c.country||n.country.isoCode).toUpperCase(),o=[...n.availableCountries].sort((r,l)=>r.name.localeCompare(l.name,c.locale||void 0)),i=o.find(r=>r.isoCode===a)??n.country;e.forEach(r=>{ke(r,o,a)}),t.forEach(r=>{r.textContent=J(i,P(r,"country-bind")||me)})}function h(e=document){let t=w(e,`select${C("country-select")}`),n=w(e,C("country-bind"));return!t.length&&!n.length?Promise.resolve():$().then(a=>{he(t,n,a)}).catch(a=>{p(a,"country select")})}var Le=e=>Object.values(c.markets?.locales??{}).find(t=>s(t.country)===e);function Me(e,t){return e!==void 0?d(e):t?t.language?d(t.language):void 0:c.language}function Se(e){x();let t=[];return g.id()&&t.push(g.setBuyerIdentity({countryCode:e},{create:!1}).catch(n=>{p(n,"cart country")})),O(),A.forEach(n=>t.push(n.load())),I.forEach(n=>{n.closest(v())||(z.delete(n),N(n))}),t}async function be(e,{language:t,locale:n,remember:a=!0}={}){let o=s(e);if(!o)throw new T(`Not a country code: ${e}`,{code:"INVALID_COUNTRY"});let i=Le(o),r=n||i?.locale,l=r||c.locale,u=Me(t,i),f=o!==c.country||u!==c.language||l!==c.locale;if(c.country=o,c.language=u||void 0,c.locale=l,a&&j({country:o,language:u,locale:r}),!f)return h(),g.state;t!==void 0&&ye();let B=Se(o);return h(),_("country-changed",{country:o,language:c.language}),await Promise.all(B),g.state}var{Tether:Y}=window;if(!Y)throw new Error("tether.markets.js runs after the Tether script, which loads it");Y.__parts.markets=L;})();
|
package/dist/tether.min.js
CHANGED
|
Binary file
|