@depict-ai/ui 4.7.33 → 4.7.34
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/ES10/index.cjs +1640 -1621
- package/ES10/index.d.ts +139 -128
- package/ES10/index.js +1867 -1849
- package/latest/index.cjs +1564 -1552
- package/latest/index.d.ts +139 -128
- package/latest/index.js +1805 -1794
- package/package.json +1 -1
- package/server/ES10/index.cjs +566 -547
- package/server/ES10/index.d.ts +139 -128
- package/server/ES10/index.js +752 -734
- package/server/latest/index.cjs +575 -563
- package/server/latest/index.d.ts +139 -128
- package/server/latest/index.js +736 -725
package/server/latest/index.js
CHANGED
|
@@ -1,43 +1,249 @@
|
|
|
1
|
-
import { add_to_version_info as $i7OB2$add_to_version_info,
|
|
2
|
-
import { createComponent as $i7OB2$createComponent,
|
|
3
|
-
import {
|
|
1
|
+
import { add_to_version_info as $i7OB2$add_to_version_info, queueMacroTask as $i7OB2$queueMacroTask, catchify as $i7OB2$catchify, findMostFrequentItem as $i7OB2$findMostFrequentItem, dwarn as $i7OB2$dwarn, observer as $i7OB2$observer, layout_media_query_header as $i7OB2$layout_media_query_header, javascript_media_query as $i7OB2$javascript_media_query, slider_fading_factory as $i7OB2$slider_fading_factory, Amazing_Slider as $i7OB2$Amazing_Slider, slider_snap_css as $i7OB2$slider_snap_css, dlog as $i7OB2$dlog1, camelCasifyObject as $i7OB2$camelCasifyObject, useExpandingContainer as $i7OB2$useExpandingContainer, fetch_retry as $i7OB2$fetch_retry, base_url as $i7OB2$base_url, slider_fractional_factory as $i7OB2$slider_fractional_factory, make_random_classname as $i7OB2$make_random_classname, n_col_styling_with_dist as $i7OB2$n_col_styling_with_dist, layout_get_visible_recs_without_partial_rows as $i7OB2$layout_get_visible_recs_without_partial_rows, layout_get_total_rec_amount_for_row as $i7OB2$layout_get_total_rec_amount_for_row, report as $i7OB2$report, standard_price_format as $i7OB2$standard_price_format, instant_exec_on_suspect_history_change as $i7OB2$instant_exec_on_suspect_history_change, deparallelize_no_drop as $i7OB2$deparallelize_no_drop, ContainedImage as $i7OB2$ContainedImage, make_asyncIterable_exiter as $i7OB2$make_asyncIterable_exiter, href_change_ipns as $i7OB2$href_change_ipns, base64_encode_unicode as $i7OB2$base64_encode_unicode, base64_decode_unicode as $i7OB2$base64_decode_unicode, use_href_accessor as $i7OB2$use_href_accessor, get_session_id as $i7OB2$get_session_id, add_version_query_params as $i7OB2$add_version_query_params, hex_to_rgb as $i7OB2$hex_to_rgb, relative_luminance_from_rgb as $i7OB2$relative_luminance_from_rgb, snakeCasifyObject as $i7OB2$snakeCasifyObject, sort_obj as $i7OB2$sort_obj, make_url_with_query_params as $i7OB2$make_url_with_query_params, insert_surfaces as $i7OB2$insert_surfaces } from "@depict-ai/utilishared/latest";
|
|
2
|
+
import { createComponent as $i7OB2$createComponent, mergeProps as $i7OB2$mergeProps, insert as $i7OB2$insert, ssr as $i7OB2$ssr, ssrHydrationKey as $i7OB2$ssrHydrationKey, ssrStyle as $i7OB2$ssrStyle, ssrAttribute as $i7OB2$ssrAttribute, escape as $i7OB2$escape, spread as $i7OB2$spread, isServer as $i7OB2$isServer, ssrElement as $i7OB2$ssrElement, ssrClassList as $i7OB2$ssrClassList, Dynamic as $i7OB2$Dynamic } from "solid-js/web";
|
|
3
|
+
import { createSignal as $i7OB2$createSignal, getOwner as $i7OB2$getOwner, createEffect as $i7OB2$createEffect, runWithOwner as $i7OB2$runWithOwner, onCleanup as $i7OB2$onCleanup, createContext as $i7OB2$createContext, useContext as $i7OB2$useContext, createMemo as $i7OB2$createMemo, splitProps as $i7OB2$splitProps, mergeProps as $i7OB2$mergeProps1, untrack as $i7OB2$untrack, createRenderEffect as $i7OB2$createRenderEffect, Show as $i7OB2$Show, batch as $i7OB2$batch, createComputed as $i7OB2$createComputed, mapArray as $i7OB2$mapArray, createResource as $i7OB2$createResource, Suspense as $i7OB2$Suspense, createRoot as $i7OB2$createRoot, For as $i7OB2$For, Index as $i7OB2$Index, createUniqueId as $i7OB2$createUniqueId, ErrorBoundary as $i7OB2$ErrorBoundary, on as $i7OB2$on, createSelector as $i7OB2$createSelector, children as $i7OB2$children, createReaction as $i7OB2$createReaction } from "solid-js";
|
|
4
4
|
import { createStore as $i7OB2$createStore, reconcile as $i7OB2$reconcile } from "solid-js/store";
|
|
5
|
-
import { dlog as $i7OB2$dlog, catchify as $i7OB2$
|
|
5
|
+
import { dlog as $i7OB2$dlog, catchify as $i7OB2$catchify1, ListenableSet as $i7OB2$ListenableSet, use_href_accessor as $i7OB2$use_href_accessor1, queueMacroTask as $i7OB2$queueMacroTask1, report as $i7OB2$report1 } from "@depict-ai/utilishared/latest";
|
|
6
6
|
|
|
7
7
|
/*! Depict.ai search and product listing SDK */
|
|
8
8
|
import { register_es_version } from "../../multi_import_deduplicator.mjs";
|
|
9
9
|
register_es_version("ui", "latest");
|
|
10
|
-
const $ec291e0010116877$export$83d89fbfd8236492 = "4.7.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
$i7OB2$onCleanup($i7OB2$javascript_media_query(media_query, ({
|
|
21
|
-
matches: matches
|
|
22
|
-
}) => signal[1](matches)).remove);
|
|
23
|
-
return signal[0];
|
|
10
|
+
const $ec291e0010116877$export$83d89fbfd8236492 = "4.7.34";
|
|
11
|
+
const $011607bdf658f807$var$ListingContext = /*@__PURE__*/$i7OB2$createContext();
|
|
12
|
+
function $011607bdf658f807$export$e68cff63f76bd15b(props) {
|
|
13
|
+
const our_object = {};
|
|
14
|
+
return $i7OB2$createComponent($011607bdf658f807$var$ListingContext.Provider, {
|
|
15
|
+
value: our_object,
|
|
16
|
+
get children() {
|
|
17
|
+
return props.children;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
24
20
|
}
|
|
25
|
-
function $
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}));
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
21
|
+
function $011607bdf658f807$export$8d0c4fdbb05a2f2e() {
|
|
22
|
+
return $i7OB2$useContext($011607bdf658f807$var$ListingContext);
|
|
23
|
+
}
|
|
24
|
+
var $f18d425032111270$var$_tmpl$ = ["<div", ' style="', '"', ">", "</div>"];
|
|
25
|
+
function $f18d425032111270$export$94026ee33dbabc26(props) {
|
|
26
|
+
return $i7OB2$ssr($f18d425032111270$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$ssrStyle(`padding-bottom:calc(calc(1 / ${props.aspectRatio}) * 100%)`), $i7OB2$ssrAttribute("class", "s-image-container" + (props.class ? " " + $i7OB2$escape(props.class, true) : ""), false), $i7OB2$escape(props.children));
|
|
27
|
+
}
|
|
28
|
+
const $b6440e72ed83671a$var$ProductCardIndexContext = /*@__PURE__*/$i7OB2$createContext();
|
|
29
|
+
function $b6440e72ed83671a$export$11354f017ddc9790(props) {
|
|
30
|
+
return $i7OB2$createComponent($b6440e72ed83671a$var$ProductCardIndexContext.Provider, {
|
|
31
|
+
get value() {
|
|
32
|
+
return props.index_;
|
|
33
|
+
},
|
|
34
|
+
get children() {
|
|
35
|
+
return props.children;
|
|
38
36
|
}
|
|
39
37
|
});
|
|
40
|
-
|
|
38
|
+
}
|
|
39
|
+
function $b6440e72ed83671a$export$e3faf4d95300054f() {
|
|
40
|
+
return $i7OB2$useContext($b6440e72ed83671a$var$ProductCardIndexContext);
|
|
41
|
+
}
|
|
42
|
+
let $4ea56971d92eb0cd$var$browserIsBugged = false;
|
|
43
|
+
function $4ea56971d92eb0cd$export$2972b890694ced75(callback, {
|
|
44
|
+
timeout: timeout
|
|
45
|
+
}) {
|
|
46
|
+
if ($4ea56971d92eb0cd$var$browserIsBugged) timeout /= 4;
|
|
47
|
+
const cancel = () => {
|
|
48
|
+
cancelIdleCallback(idleHandle);
|
|
49
|
+
clearTimeout(racingTimeout);
|
|
50
|
+
};
|
|
51
|
+
const idleHandle = requestIdleCallback(deadline => {
|
|
52
|
+
cancel();
|
|
53
|
+
return callback(deadline);
|
|
54
|
+
}, {
|
|
55
|
+
timeout: timeout
|
|
56
|
+
});
|
|
57
|
+
const racingTimeout = setTimeout(() => {
|
|
58
|
+
$i7OB2$dwarn("Browser did not respect requestIdleCallback timeout");
|
|
59
|
+
$4ea56971d92eb0cd$var$browserIsBugged = true;
|
|
60
|
+
cancel();
|
|
61
|
+
callback({
|
|
62
|
+
didTimeout: false,
|
|
63
|
+
timeRemaining() {
|
|
64
|
+
return 500;
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}, timeout + 1000);
|
|
68
|
+
return cancel;
|
|
69
|
+
}
|
|
70
|
+
const $e8ffe11ed01df0fe$var$onIdleFunctionsSymbol = /*@__PURE__*/Symbol("onIdleFunctions");
|
|
71
|
+
const $e8ffe11ed01df0fe$export$f8945274f08a3105 = /*@__PURE__*/Symbol("listingContextAspectRatios");
|
|
72
|
+
const $e8ffe11ed01df0fe$export$6066eb417ed2e9f7 = /*@__PURE__*/Symbol("listingContextAspectRatios");
|
|
73
|
+
function $e8ffe11ed01df0fe$export$6e5611bc7e57e477(props) {
|
|
74
|
+
const img = new Image(); // Need to use new Image or browser might not start loading image before it's in the DOM
|
|
75
|
+
const [ourRatioKeyed, setOurRatioKeyed] = $i7OB2$createSignal();
|
|
76
|
+
const sizeToUse = $i7OB2$createMemo(() => {
|
|
77
|
+
// props.size could be a getter that expects a cleanup so get it in this memo instead of where we set img.sizes (also we need to multiply, and it's good with some diffing here so people calling the comp don't have to)
|
|
78
|
+
const incomingSize = props.size();
|
|
79
|
+
const ratio = ourRatioKeyed();
|
|
80
|
+
const containerHeight = props.sizeHeight?.();
|
|
81
|
+
if (!incomingSize || !ratio || !containerHeight || getComputedStyle(img).objectFit !== "cover") return incomingSize;
|
|
82
|
+
const maybeCorrectedSize = ratio * containerHeight;
|
|
83
|
+
return Math.round(Math.max(incomingSize, maybeCorrectedSize));
|
|
84
|
+
});
|
|
85
|
+
const src_options = $i7OB2$createMemo(() => {
|
|
86
|
+
const {
|
|
87
|
+
src: src,
|
|
88
|
+
customUrls: customUrls
|
|
89
|
+
} = props;
|
|
90
|
+
const fallback_src = (customUrls || $e8ffe11ed01df0fe$export$1d6267828870adda)(src, 400);
|
|
91
|
+
const srcset = $e8ffe11ed01df0fe$var$make_srcset(props.src, props.resolutions || [64, 128, 256, 300, 400, 512, 640, 768, 1024, 1280, 1536, 2048, 2560, 3072, 3584, 4096], customUrls);
|
|
92
|
+
// The order here *might* matter - I've seen mobile safari always start with loading the 400px version when it was reversed
|
|
93
|
+
return {
|
|
94
|
+
srcset: srcset,
|
|
95
|
+
src: fallback_src
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
// Work around https://github.com/solidjs/solid/issues/1828
|
|
99
|
+
const [, otherAttributes] = $i7OB2$splitProps(props, ["resolutions", "size", "src", "srcSet", "loading", "keyRatioUpdating", "sizeHeight", "customUrls" // Can't have properties ending on underscore because the property name mangling will get confused by this <-
|
|
100
|
+
]);
|
|
101
|
+
|
|
102
|
+
const [hasSetSize, setHasSetSize] = $i7OB2$createSignal(false);
|
|
103
|
+
const [hasDecoded, setHasDecoded] = $i7OB2$createSignal(false);
|
|
104
|
+
const productCardIndexAccessor = $b6440e72ed83671a$export$e3faf4d95300054f();
|
|
105
|
+
const listingContext = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
|
|
106
|
+
const isPrioritisedImage = $i7OB2$createMemo(() => productCardIndexAccessor?.() < 8);
|
|
107
|
+
const shouldActuallyEnableLazyLoading = $i7OB2$createMemo(() => {
|
|
108
|
+
const {
|
|
109
|
+
loading: loading
|
|
110
|
+
} = props;
|
|
111
|
+
if (loading === "force-lazy") return true;
|
|
112
|
+
return loading === "lazy" && !isPrioritisedImage();
|
|
113
|
+
});
|
|
114
|
+
const modifiedOtherAttributes = $i7OB2$mergeProps1(otherAttributes, {
|
|
115
|
+
get loading() {
|
|
116
|
+
return shouldActuallyEnableLazyLoading() ? "lazy" : undefined;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
// Batch idle callbacks so that MutationObserver can batch the resulting mutations better, so we don't lose tons of CPU time to MutationObservers doing lots of things for each image
|
|
120
|
+
// Happened on singular, they have some weird observer (+we also have one but ours is at least 3x more efficient)
|
|
121
|
+
const executeWhenIdleBatched = (fn, isSizesUpdate) => {
|
|
122
|
+
if (typeof requestIdleCallback !== "function") return setTimeout(fn); // Old browsers don't get optimisation
|
|
123
|
+
if ((!isSizesUpdate || !sizeSetFastPath) && $i7OB2$untrack(isPrioritisedImage)) return fn(); // If we're one of the first 8 images, execute the callbacks immediately (improves lighthouse metrics)
|
|
124
|
+
// unless we're just a `sizes` update after the initial sizes setting (this optimisation makes the looks animation a lot smoother on low-cpu devices)
|
|
125
|
+
const existingStack = listingContext?.[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
|
|
126
|
+
if (existingStack) return existingStack.add(fn);
|
|
127
|
+
const newStack = new Set([fn]);
|
|
128
|
+
if (listingContext) listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol] = newStack;
|
|
129
|
+
const processStackWhenIdle = () => $4ea56971d92eb0cd$export$2972b890694ced75($i7OB2$catchify(deadline => {
|
|
130
|
+
const start = performance.now();
|
|
131
|
+
const thirdDeadlineTime = deadline.timeRemaining() / 3; // observers coming after this take up 2-3x the time so don't use all of it
|
|
132
|
+
for (const fn of newStack) {
|
|
133
|
+
newStack.delete(fn);
|
|
134
|
+
fn();
|
|
135
|
+
const timeTaken = performance.now() - start;
|
|
136
|
+
if ((!deadline.timeRemaining() || timeTaken > thirdDeadlineTime) && newStack.size) {
|
|
137
|
+
// There's still work to be done but no time, so schedule another idle callback
|
|
138
|
+
processStackWhenIdle();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Stack is empty
|
|
143
|
+
if (listingContext) delete listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
|
|
144
|
+
}), {
|
|
145
|
+
timeout: 15000
|
|
146
|
+
} // long timeout, better to not have images than to freeze the browser. But also we don't want to confuse user why no iamges are loading
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
processStackWhenIdle();
|
|
150
|
+
};
|
|
151
|
+
let sizeSetFastPath = false;
|
|
152
|
+
let hasDecodedFastPath = false;
|
|
153
|
+
let timeoutSet = false;
|
|
154
|
+
let gotCleanedUp = false;
|
|
155
|
+
let srcJustChanged = true;
|
|
156
|
+
img.classList.add("s-responsive-image");
|
|
157
|
+
if (listingContext) {
|
|
158
|
+
let prevValue;
|
|
159
|
+
const aspectRatios = listingContext[$e8ffe11ed01df0fe$export$f8945274f08a3105] ||= new Set();
|
|
160
|
+
const [, setMostPrevalentAspectRatio] = listingContext[$e8ffe11ed01df0fe$export$6066eb417ed2e9f7] ||= $i7OB2$createSignal();
|
|
161
|
+
img.addEventListener("load", $i7OB2$catchify(() => {
|
|
162
|
+
const aspectRatio_ = img.naturalWidth / img.naturalHeight;
|
|
163
|
+
if (srcJustChanged)
|
|
164
|
+
// Always key object-fit-cover compensation to avoid loading-different-images-infinite-loop
|
|
165
|
+
setOurRatioKeyed(aspectRatio_);else if (props.keyRatioUpdating) return;
|
|
166
|
+
srcJustChanged = false;
|
|
167
|
+
// Save our aspect ratio whenever it changes, so that we can base the containers on the most dominant aspect ratio, used in SearchModalV2 and LookItem
|
|
168
|
+
if (prevValue) aspectRatios.delete(prevValue);
|
|
169
|
+
const newValue = !isNaN(aspectRatio_) ? {
|
|
170
|
+
aspectRatio_: aspectRatio_
|
|
171
|
+
} : undefined;
|
|
172
|
+
if (newValue) aspectRatios.add(newValue);
|
|
173
|
+
prevValue = newValue;
|
|
174
|
+
// Do all calculations resulting of an update directly, for performance
|
|
175
|
+
const asArray = [...aspectRatios].map(({
|
|
176
|
+
aspectRatio_: aspectRatio_
|
|
177
|
+
}) => aspectRatio_);
|
|
178
|
+
const mostPrevalentAspectRatio = $i7OB2$findMostFrequentItem(asArray);
|
|
179
|
+
setMostPrevalentAspectRatio(mostPrevalentAspectRatio);
|
|
180
|
+
}));
|
|
181
|
+
$i7OB2$onCleanup(() => prevValue && aspectRatios.delete(prevValue));
|
|
182
|
+
}
|
|
183
|
+
$i7OB2$onCleanup(() => gotCleanedUp = true);
|
|
184
|
+
$i7OB2$spread(img, $i7OB2$mergeProps1(modifiedOtherAttributes), false, true);
|
|
185
|
+
$i7OB2$createRenderEffect(() => {
|
|
186
|
+
props.src;
|
|
187
|
+
srcJustChanged = true;
|
|
188
|
+
});
|
|
189
|
+
$i7OB2$createEffect(() => {
|
|
190
|
+
if (!sizeToUse()) return; // wait until we have a size, run every time the size changes
|
|
191
|
+
if (timeoutSet) return;
|
|
192
|
+
const handler = $i7OB2$catchify(() => {
|
|
193
|
+
if (gotCleanedUp) return;
|
|
194
|
+
img.sizes = `${sizeToUse()}px`; // use latest available value of size in case it has changed
|
|
195
|
+
if (!sizeSetFastPath) {
|
|
196
|
+
setHasSetSize(true);
|
|
197
|
+
sizeSetFastPath = true;
|
|
198
|
+
}
|
|
199
|
+
timeoutSet = false;
|
|
200
|
+
});
|
|
201
|
+
// Throttle the updating of sizes to avoid unnecessary image re-fetches during resize
|
|
202
|
+
// And also because we first set src after sizes has been set, wait with loading and decoding images until browser is idle
|
|
203
|
+
// This greatly improves performance when loading (more) products
|
|
204
|
+
// See https://depictaiworkspace.slack.com/archives/C05NJ0K3WRL/p1698220617663139
|
|
205
|
+
timeoutSet = true; // Important to set timeoutSet before the call to executeWhenIdleBatched since if this is an important image executeWhenIdleBatched will execute fn immediately
|
|
206
|
+
executeWhenIdleBatched(handler, true);
|
|
207
|
+
});
|
|
208
|
+
const dontLoadImageYet = $i7OB2$createMemo(() => !sizeToUse() || !hasSetSize()); // Moving this condition into a memo saves us from re-setting src and srcset (expensive) if just props.size changes
|
|
209
|
+
$i7OB2$createEffect(() => {
|
|
210
|
+
if (dontLoadImageYet()) return; // If size isn't known or set, don't assign src yet since it would cause the most low res image to load
|
|
211
|
+
Object.assign(img, src_options());
|
|
212
|
+
// Add to DOM once decoded to not require/block any paints before image has completed loading and avoid showing broken image symbol
|
|
213
|
+
// We can do this because there has to be a container around us giving us a size
|
|
214
|
+
// No need to listen if we're already in the DOM
|
|
215
|
+
if (hasDecodedFastPath) return;
|
|
216
|
+
if (shouldActuallyEnableLazyLoading()) {
|
|
217
|
+
// For lazy loading there's no decoding to wait for as it only occurs when the image is visible
|
|
218
|
+
// Make sure src is set before we put the image into the DOM though so no broken image symbol is shown
|
|
219
|
+
setHasDecoded(true);
|
|
220
|
+
hasDecodedFastPath = true;
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
img.decode().catch(e => $i7OB2$dwarn("Failed to decode image", e, img)) // Display the image also if loading failed so webdev can debug and doesn't get "no image"
|
|
224
|
+
.then(async () => {
|
|
225
|
+
// Also wait with inserting image (i.e. paint) until browser is idle
|
|
226
|
+
await new Promise(r => executeWhenIdleBatched(r, false));
|
|
227
|
+
if (gotCleanedUp) return;
|
|
228
|
+
setHasDecoded(true);
|
|
229
|
+
hasDecodedFastPath = true;
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
return $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
233
|
+
get when() {
|
|
234
|
+
return hasDecoded();
|
|
235
|
+
},
|
|
236
|
+
children: img
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function $e8ffe11ed01df0fe$var$make_srcset(url, resolutions, customGenerateImageUrl_) {
|
|
240
|
+
return resolutions.map(width => `${(customGenerateImageUrl_ || $e8ffe11ed01df0fe$export$1d6267828870adda)(url, width)} ${width}w`).join(", ");
|
|
241
|
+
}
|
|
242
|
+
function $e8ffe11ed01df0fe$export$1d6267828870adda(url, width) {
|
|
243
|
+
// Even just creating one `URL` object per image src and then setting the search parameter is quite slow (0.25ms to set the width param)
|
|
244
|
+
// We're making the assumptions that the url has already at least one query parameter and that the image resizing service will choose the last one out of a duplicate width parameter (shopify's does)
|
|
245
|
+
// That way we can just to string concatenation which is insanely fast
|
|
246
|
+
return url + "&width=" + encodeURIComponent(width);
|
|
41
247
|
}
|
|
42
248
|
var $d20eff0aadc28983$var$_tmpl$ = ["<span", ' class="', '" style="', '"></span>'];
|
|
43
249
|
function $d20eff0aadc28983$export$acb3eaade4b23afd(props) {
|
|
@@ -75,24 +281,195 @@ function $7f60f09116a3fe61$export$3f37af283f8fb843(props) {
|
|
|
75
281
|
}
|
|
76
282
|
});
|
|
77
283
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
284
|
+
function $d134eae24341b4a1$export$89c6019e4baa40b1(props) {
|
|
285
|
+
const style = $i7OB2$createMemo(() => {
|
|
286
|
+
const {
|
|
287
|
+
style: style,
|
|
288
|
+
height: height,
|
|
289
|
+
width: width
|
|
290
|
+
} = props;
|
|
291
|
+
return {
|
|
292
|
+
...(style || {}),
|
|
293
|
+
height: height ?? "1em",
|
|
294
|
+
...(width && {
|
|
295
|
+
width: width
|
|
296
|
+
})
|
|
297
|
+
};
|
|
298
|
+
});
|
|
299
|
+
return $i7OB2$createComponent((0, $d20eff0aadc28983$export$acb3eaade4b23afd), {
|
|
300
|
+
get style() {
|
|
301
|
+
return style();
|
|
302
|
+
},
|
|
303
|
+
get ["class"]() {
|
|
304
|
+
return props.class;
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
var $bb15dfb548a7666e$var$_tmpl$ = ["<div", ' class="instant-card"><div class="img-part">', '</div><div class="right-part"><div class="title-brand-tagline"><span class="title">', '</span></div><div class="price-container">', "</div></div></div>"];
|
|
309
|
+
const $bb15dfb548a7666e$export$8a2234b5b1a5ebd4 = "--image-aspect-ratio";
|
|
310
|
+
function $bb15dfb548a7666e$export$ee1733d9a8495996() {
|
|
311
|
+
return $i7OB2$ssr($bb15dfb548a7666e$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $7f60f09116a3fe61$export$3f37af283f8fb843), {
|
|
312
|
+
aspectRatio: `var(${$bb15dfb548a7666e$export$8a2234b5b1a5ebd4}, 1)`
|
|
313
|
+
})), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
|
|
314
|
+
width: "20ch",
|
|
315
|
+
height: "1em"
|
|
316
|
+
})), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
|
|
317
|
+
width: "5ch",
|
|
318
|
+
height: "1em",
|
|
319
|
+
"class": "price"
|
|
320
|
+
})));
|
|
321
|
+
}
|
|
322
|
+
function $a444a52bafa0dacc$export$54c6d6ff54e72743(whatToWatch) {
|
|
323
|
+
const [width, setWidth] = $i7OB2$createSignal(0);
|
|
324
|
+
const [height, setHeight] = $i7OB2$createSignal(0);
|
|
325
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => $i7OB2$batch(() => {
|
|
326
|
+
for (let j = 0; j < records.length; j++) {
|
|
327
|
+
const {
|
|
328
|
+
width: width,
|
|
329
|
+
height: height
|
|
330
|
+
} = records[j].contentRect;
|
|
331
|
+
// Padding hack makes that we can't use contentRect to get the height since that's apparently without padding
|
|
332
|
+
const definitiveHeight = height || whatToWatch.getBoundingClientRect().height;
|
|
333
|
+
if (definitiveHeight) setHeight(Math.ceil(definitiveHeight));
|
|
334
|
+
if (width) setWidth(Math.ceil(width));
|
|
335
|
+
}
|
|
336
|
+
})));
|
|
337
|
+
// If we start observing elements before they're in the DOM Chrome (Version 117.0.5938.92 (Official Build) (arm64)) sometimes gives us a resize event with a width of 0 and then doesn't dispatch one with the actual width once it's in the DOM. So we wait until the element is in the DOM before we start observing it.
|
|
338
|
+
// It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
|
|
339
|
+
const disconnect = (0, $i7OB2$observer).onexists(whatToWatch, ({
|
|
340
|
+
element: element
|
|
341
|
+
}) => requestAnimationFrame($i7OB2$catchify(() => resizeObserver.observe(element))));
|
|
342
|
+
$i7OB2$onCleanup(() => {
|
|
343
|
+
resizeObserver.disconnect();
|
|
344
|
+
disconnect();
|
|
345
|
+
});
|
|
346
|
+
return [width, height];
|
|
347
|
+
}
|
|
348
|
+
const $660070e2a394b3c3$var$backupSizeSignal = /*@__PURE__*/$i7OB2$createSignal();
|
|
349
|
+
const $660070e2a394b3c3$export$d7b7ab832c20e2f4 = /*@__PURE__*/Symbol("ShopifyContainedImage");
|
|
350
|
+
function $660070e2a394b3c3$export$e4b984597b71e989(props) {
|
|
351
|
+
const context = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
|
|
352
|
+
if (context && !context[$660070e2a394b3c3$export$d7b7ab832c20e2f4])
|
|
353
|
+
// create a signal that's the same for all items in this listing
|
|
354
|
+
context[$660070e2a394b3c3$export$d7b7ab832c20e2f4] = $i7OB2$createSignal();
|
|
355
|
+
const [currentImageSize, setCurrentImageSize] = context?.[$660070e2a394b3c3$export$d7b7ab832c20e2f4] || $660070e2a394b3c3$var$backupSizeSignal; // use global fallback signal (might lead to blurry images) if no context is available
|
|
356
|
+
const [mostPrevalentAspectRatio] = context ?
|
|
357
|
+
// If the context exists we have to create the signal here as getting it here would be too late when it's created by ShopifyResponsiveImg below
|
|
358
|
+
context[(0, $e8ffe11ed01df0fe$export$6066eb417ed2e9f7)] ||= $i7OB2$createSignal() : [];
|
|
359
|
+
const container = $f18d425032111270$export$94026ee33dbabc26({
|
|
360
|
+
// Write getters manually instead of using JSX, so we can do more complex logic in the aspectRatio getter without increasing bundle size
|
|
361
|
+
get class() {
|
|
362
|
+
return props.class;
|
|
363
|
+
},
|
|
364
|
+
get aspectRatio() {
|
|
365
|
+
if (props.autoAdjustAspectRatio) {
|
|
366
|
+
const targetRatio = mostPrevalentAspectRatio?.();
|
|
367
|
+
if (targetRatio != undefined) return `var(${(0, $bb15dfb548a7666e$export$8a2234b5b1a5ebd4)}, ${targetRatio})`;
|
|
368
|
+
}
|
|
369
|
+
return props.aspectRatio;
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
const owner = $i7OB2$getOwner();
|
|
373
|
+
let createdSizeAccessor = false;
|
|
374
|
+
let wasCleanedUp = false;
|
|
375
|
+
$i7OB2$createEffect(() => {
|
|
376
|
+
if (currentImageSize() || wasCleanedUp) return; // We get into the effect when onCleanup is called if we don't have wasCleanedUp
|
|
377
|
+
// ensure we always have a size accessor
|
|
378
|
+
// what this whole thing does is set the sizes attribute to the actual size of one of the existing image containers, therefore the value doesn't have to manually be specified
|
|
379
|
+
createdSizeAccessor = true;
|
|
380
|
+
setCurrentImageSize(() => $i7OB2$runWithOwner(owner, () => $a444a52bafa0dacc$export$54c6d6ff54e72743(container)));
|
|
381
|
+
});
|
|
382
|
+
$i7OB2$onCleanup(() => {
|
|
383
|
+
wasCleanedUp = true; // important to set this before the function call below and always, so the dead effects don't create dead size accessors
|
|
384
|
+
if (!createdSizeAccessor) return;
|
|
385
|
+
$i7OB2$queueMacroTask(() => setCurrentImageSize()); // unset the size accessor next event loop iteration, so that all onCleanup's have time to run, since the effects run more aggressively and can create a size accessor with a cleaned up owner otherwise
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
$i7OB2$insert(container, $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), $i7OB2$mergeProps({
|
|
389
|
+
size: () => currentImageSize()?.[0]?.() || 0,
|
|
390
|
+
sizeHeight: () => currentImageSize()?.[1]?.() || 0,
|
|
391
|
+
get src() {
|
|
392
|
+
return props.src;
|
|
393
|
+
}
|
|
394
|
+
}, () => props.imgProps, {
|
|
395
|
+
get style() {
|
|
396
|
+
return props.imgProps?.style;
|
|
397
|
+
}
|
|
398
|
+
})));
|
|
399
|
+
return container;
|
|
400
|
+
}
|
|
401
|
+
const $70bb27cc6be01fc7$var$customUrls = (url, width) => {
|
|
402
|
+
if (url?.startsWith?.("https://cdn.shopify.com"))
|
|
403
|
+
// The shopify image resizing CDN blocks Cloudflare's image resizer. It's possible that we can't detect shopify image URLs sometimes because they go to the merchant's domain,
|
|
404
|
+
// but it seems like the URLs returned by the Depict API always goes to the cdn.shopify.com version of an image, so this simple workaround works.
|
|
405
|
+
return $e8ffe11ed01df0fe$export$1d6267828870adda(url, width);
|
|
406
|
+
// Use cloudflare image resizer instead of img.depict.ai because it's a lot faster (and also auto-chooses other formats if webp is not supported)
|
|
407
|
+
return `https://app.depict.ai/cdn-cgi/image/width=${width},format=auto/${url}`;
|
|
408
|
+
};
|
|
409
|
+
function $70bb27cc6be01fc7$export$9d4a4b669b1929ab(props) {
|
|
410
|
+
return $i7OB2$createComponent((0, $660070e2a394b3c3$export$e4b984597b71e989), $i7OB2$mergeProps(props, {
|
|
411
|
+
get imgProps() {
|
|
412
|
+
return {
|
|
413
|
+
...props.imgProps,
|
|
414
|
+
customUrls: $70bb27cc6be01fc7$var$customUrls
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
}));
|
|
418
|
+
}
|
|
419
|
+
function $70bb27cc6be01fc7$export$140423fa4bfb6d63(props) {
|
|
420
|
+
return $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), $i7OB2$mergeProps(props, {
|
|
421
|
+
customUrls: $70bb27cc6be01fc7$var$customUrls
|
|
422
|
+
}));
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Value first so shopify merchants can set (extra) display transformers in the shopify app
|
|
426
|
+
// Calling these functions normally doesn't do anything, but our shopify app respects them
|
|
427
|
+
// Them being here is value first too because this can be easily imported in the product card editor
|
|
428
|
+
let $a63fa9cb46ed211b$var$extraDisplayTransformers;
|
|
429
|
+
const $a63fa9cb46ed211b$export$b2d94be4f02525b2 = () => $a63fa9cb46ed211b$var$extraDisplayTransformers;
|
|
430
|
+
const $a63fa9cb46ed211b$export$f98b8d5ea7207a1 = displayTransformers => $a63fa9cb46ed211b$var$extraDisplayTransformers = displayTransformers;
|
|
431
|
+
function $dc9262ef6f786812$export$d9f36cf74e24d595(media_query) {
|
|
432
|
+
const signal = $i7OB2$createSignal(false);
|
|
433
|
+
$i7OB2$onCleanup($i7OB2$javascript_media_query(media_query, ({
|
|
434
|
+
matches: matches
|
|
435
|
+
}) => signal[1](matches)).remove);
|
|
436
|
+
return signal[0];
|
|
437
|
+
}
|
|
438
|
+
function $77348875ac090fcd$export$a79e666719b3647c(cols_at_size_) {
|
|
439
|
+
const size_active = $i7OB2$createMemo(() => cols_at_size_().map(([n_cols, min_width, max_width]) => {
|
|
440
|
+
const media_query = $i7OB2$layout_media_query_header(min_width, max_width).replaceAll("@media", "");
|
|
441
|
+
const matches = $dc9262ef6f786812$export$d9f36cf74e24d595(media_query);
|
|
442
|
+
return [matches, n_cols];
|
|
443
|
+
}));
|
|
444
|
+
const n_cols_currently_showing = $i7OB2$createMemo(() => {
|
|
445
|
+
try {
|
|
446
|
+
const [, n_cols_currently_showing] = size_active().find(([media_query]) => media_query());
|
|
447
|
+
return n_cols_currently_showing;
|
|
448
|
+
} catch (e) {
|
|
449
|
+
$i7OB2$dwarn("No active size found in columnsAtSize - can't render content blocks or looks");
|
|
450
|
+
return null;
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
return n_cols_currently_showing;
|
|
454
|
+
}
|
|
455
|
+
var $e7a7eb102ddc0c79$var$_tmpl$ = ["<div", ' class="', '" style="', '">', "</div>"];
|
|
456
|
+
function $e7a7eb102ddc0c79$export$791ef57e62e21c3f({
|
|
457
|
+
content_blocks_: incoming_content_blocks,
|
|
458
|
+
cols_at_size_: cols_at_size_,
|
|
459
|
+
set_top_row_shortened_by_: set_top_row_shortened_by_
|
|
460
|
+
}) {
|
|
461
|
+
// these are by row
|
|
462
|
+
const [content_blocks, set_content_blocks] = $i7OB2$createStore([]);
|
|
463
|
+
const n_cols_currently_showing_ = $77348875ac090fcd$export$a79e666719b3647c(cols_at_size_);
|
|
464
|
+
$i7OB2$createEffect(() => {
|
|
465
|
+
const incoming_value = incoming_content_blocks();
|
|
466
|
+
if (!incoming_value) {
|
|
467
|
+
set_content_blocks([]);
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
set_content_blocks($i7OB2$reconcile(incoming_value, {
|
|
471
|
+
key: "content"
|
|
472
|
+
})); // key: Make moving blocks faster, see https://github.com/solidjs/solid/issues/1925#issuecomment-1769671596
|
|
96
473
|
});
|
|
97
474
|
|
|
98
475
|
const get_wrapped_blocks_ = $e7a7eb102ddc0c79$var$wrap_blocks_in_div(content_blocks, n_cols_currently_showing_);
|
|
@@ -205,7 +582,7 @@ function $e7a7eb102ddc0c79$var$wrap_blocks_in_div(rendered_content_blocks, max_s
|
|
|
205
582
|
})));
|
|
206
583
|
}
|
|
207
584
|
});
|
|
208
|
-
return $i7OB2$
|
|
585
|
+
return $i7OB2$mergeProps1(block, {
|
|
209
586
|
// Create content divs for the blocks with as much fine-grained diffing as possible?
|
|
210
587
|
content: () => {
|
|
211
588
|
// Sneaky on-demand rendering, so we don't render more blocks than we can show: we have the rendered value here and don't return a function that renders because if our block would be moved around we'd be guaranteed to re-render
|
|
@@ -276,11 +653,11 @@ function $4eb0a704f8f30273$var$doHeavyCalculations() {
|
|
|
276
653
|
const [, setElementsHovered] = $4eb0a704f8f30273$var$elementsHoveredSignal;
|
|
277
654
|
const elementAtTouch = new Map();
|
|
278
655
|
const updateSet = () => setElementsHovered(new Set([...elementAtTouch.values()].filter(v => v)));
|
|
279
|
-
const setPositionHandler = $i7OB2$
|
|
656
|
+
const setPositionHandler = $i7OB2$catchify1(evt => {
|
|
280
657
|
for (const touch of evt.changedTouches) elementAtTouch.set(touch.identifier, document.elementFromPoint(touch.clientX, touch.clientY));
|
|
281
658
|
updateSet();
|
|
282
659
|
});
|
|
283
|
-
const deleteTouchHandler = $i7OB2$
|
|
660
|
+
const deleteTouchHandler = $i7OB2$catchify1(evt => {
|
|
284
661
|
for (const touch of evt.changedTouches) elementAtTouch.delete(touch.identifier);
|
|
285
662
|
updateSet();
|
|
286
663
|
});
|
|
@@ -404,20 +781,6 @@ function $a52235d12ccf9c88$var$unwrapping_helper(elements) {
|
|
|
404
781
|
} else if (typeof elements == "function") result.push(...$a52235d12ccf9c88$var$unwrapping_helper(elements()));else if (elements != undefined && typeof elements != "boolean") result.push(elements);
|
|
405
782
|
return result;
|
|
406
783
|
}
|
|
407
|
-
const $b6440e72ed83671a$var$ProductCardIndexContext = /*@__PURE__*/$i7OB2$createContext();
|
|
408
|
-
function $b6440e72ed83671a$export$11354f017ddc9790(props) {
|
|
409
|
-
return $i7OB2$createComponent($b6440e72ed83671a$var$ProductCardIndexContext.Provider, {
|
|
410
|
-
get value() {
|
|
411
|
-
return props.index_;
|
|
412
|
-
},
|
|
413
|
-
get children() {
|
|
414
|
-
return props.children;
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
function $b6440e72ed83671a$export$e3faf4d95300054f() {
|
|
419
|
-
return $i7OB2$useContext($b6440e72ed83671a$var$ProductCardIndexContext);
|
|
420
|
-
}
|
|
421
784
|
|
|
422
785
|
/**
|
|
423
786
|
* This is a function that will safely clone an object that may contain promises.
|
|
@@ -641,7 +1004,7 @@ function $f091294da861020c$export$4a14175d33d81a96({
|
|
|
641
1004
|
};
|
|
642
1005
|
// The following sets up an intersection observer to determine which results are in the viewport, used for the ScrollStatus indicator, knowing when to load more and any other consumer of the useProductCardIsVisible hook.
|
|
643
1006
|
const shouldObserve = $i7OB2$createMemo(() => alwaysObserveCards_ || listenersForIntersecting() > 0);
|
|
644
|
-
const intersection_observer = new IntersectionObserver($i7OB2$
|
|
1007
|
+
const intersection_observer = new IntersectionObserver($i7OB2$catchify(records => {
|
|
645
1008
|
const intersectingValue = currentlyIntersecting();
|
|
646
1009
|
for (let i = 0; i < records.length; i++) {
|
|
647
1010
|
const record = records[i];
|
|
@@ -921,7 +1284,7 @@ var $c8d5ff4524619fcd$var$_tmpl$ = ["<div", ' class="', '">', "</div>"],
|
|
|
921
1284
|
$c8d5ff4524619fcd$var$_tmpl$2 = ["<style", ' type="text/css">', "</style>"];
|
|
922
1285
|
function $c8d5ff4524619fcd$export$d21e32dfedac04be(props) {
|
|
923
1286
|
const container_class = "x" + $i7OB2$createUniqueId();
|
|
924
|
-
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$
|
|
1287
|
+
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps(() => props.element_attributes, {
|
|
925
1288
|
classList: {
|
|
926
1289
|
[container_class]: true
|
|
927
1290
|
}
|
|
@@ -970,522 +1333,171 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
|
|
|
970
1333
|
// We need to have duplicate buttons because which ones is shown depends on the number of rows visible and therefore on the viewport size and therefore on the css media queries
|
|
971
1334
|
const view_less_button_container = $i7OB2$createMemo(() => have_a_view_less_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-less-container ${$i7OB2$escape(view_less_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().view_less_button)));
|
|
972
1335
|
const [force_style_update, set_force_style_update] = $i7OB2$createSignal("");
|
|
973
|
-
$i7OB2$createComputed(() => {
|
|
974
|
-
// Make sure we don't have more rows visible than max_rows (this could happen by max_rows being decreased)
|
|
975
|
-
const rows_visible = get_rows_visible();
|
|
976
|
-
const max_rows = rows_or_empty_object().max_rows;
|
|
977
|
-
if (!isNaN(max_rows) && max_rows >= 0 && rows_visible > max_rows) set_rows_visible()(max_rows);
|
|
978
|
-
});
|
|
979
|
-
$i7OB2$createEffect(() => set_force_style_update(" ")); // force style update after hydration due to https://discord.com/channels/722131463138705510/722167424186843267/1151544212517552168
|
|
980
|
-
$i7OB2$createRenderEffect(() => {
|
|
981
|
-
// Be careful to only read show_all_rows in here (ofc doesn't apply to nested effects)
|
|
982
|
-
if (show_all_rows()) {
|
|
983
|
-
// no view more functionality requested
|
|
984
|
-
set_styling(() => col_styling);
|
|
985
|
-
return;
|
|
986
|
-
}
|
|
987
|
-
update_children_count();
|
|
988
|
-
if (!(0, $i7OB2$isServer)) {
|
|
989
|
-
const mutation_observer = new MutationObserver($i7OB2$catchify1(update_children_count));
|
|
990
|
-
mutation_observer.observe(container_element, {
|
|
991
|
-
childList: true
|
|
992
|
-
});
|
|
993
|
-
$i7OB2$onCleanup(() => mutation_observer.disconnect());
|
|
994
|
-
}
|
|
995
|
-
set_styling(
|
|
996
|
-
// this is needed because solid will think that the memo-accessor is a setter function otherwise
|
|
997
|
-
() => $i7OB2$createMemo(() => {
|
|
998
|
-
const {
|
|
999
|
-
rows_per_click: rows_per_click,
|
|
1000
|
-
max_rows = -1,
|
|
1001
|
-
start_rows: start_rows
|
|
1002
|
-
} = rows_or_empty_object();
|
|
1003
|
-
const rows_visible = get_rows_visible();
|
|
1004
|
-
const children_count = get_children_count();
|
|
1005
|
-
return force_style_update() + col_styling() + props.cols_at_size.map(options => {
|
|
1006
|
-
const [recs_per_row, min, max] = options;
|
|
1007
|
-
let should_hide_view_more_button;
|
|
1008
|
-
let visible_recs;
|
|
1009
|
-
if (props.disable_partial_rows) {
|
|
1010
|
-
visible_recs = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible, children_count, options);
|
|
1011
|
-
const visible_recs_next_show_more = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible + (rows_per_click || 0),
|
|
1012
|
-
// Should this really be zero when we default rows_per_click to 1?
|
|
1013
|
-
children_count, options);
|
|
1014
|
-
should_hide_view_more_button = visible_recs === visible_recs_next_show_more;
|
|
1015
|
-
} else {
|
|
1016
|
-
visible_recs = $i7OB2$layout_get_total_rec_amount_for_row(rows_visible, options);
|
|
1017
|
-
should_hide_view_more_button = visible_recs >= children_count;
|
|
1018
|
-
}
|
|
1019
|
-
const should_hide_button_final = should_hide_view_more_button || max_rows !== -1 && rows_visible >= max_rows;
|
|
1020
|
-
// I don't really understand the logic for when the view more button gets hidden so IDK if below is correct, but it works how it should for now
|
|
1021
|
-
const should_hide_view_less_button = !should_hide_view_more_button || start_rows == undefined || rows_visible <= start_rows || children_count <= recs_per_row * start_rows;
|
|
1022
|
-
return `${$i7OB2$layout_media_query_header(min, max)}{${selector_beginning}:nth-child(n+${visible_recs + 1}){display:none}${props.layout == "slider" ? `${selector_beginning}:nth-child(n+${visible_recs}){margin-right:0}` : ""}${should_hide_button_final ? `.depict .${view_more_button_class}{display:none!important}` : ``}${should_hide_view_less_button ? `.depict .${view_less_button_class}{display:none!important}` : ``}}`;
|
|
1023
|
-
}).join("");
|
|
1024
|
-
}));
|
|
1025
|
-
});
|
|
1026
|
-
const style_element = $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$2, $i7OB2$ssrHydrationKey(), get_styling); // need to create this after set_styling has been called or else there will be no styling in the SSR'd output
|
|
1027
|
-
if (insert_after_container) container_element.after(style_element);
|
|
1028
|
-
return [container_element, view_more_button_container(), view_less_button_container(), style_element];
|
|
1029
|
-
}
|
|
1030
|
-
var $c4492d24952ed731$var$_tmpl$ = ["<h2", ' class="recs-title">', "</h2>"];
|
|
1031
|
-
function $c4492d24952ed731$export$d41d19e89346fa2({
|
|
1032
|
-
recommendations_resource_: recommendations_resource_,
|
|
1033
|
-
product_card_template_: product_card_template_,
|
|
1034
|
-
layout_options_: layout_options_,
|
|
1035
|
-
title_: title_,
|
|
1036
|
-
NoResultsFallback_: NoResultsFallback_,
|
|
1037
|
-
placeholderCacheKey_: placeholderCacheKey_
|
|
1038
|
-
}) {
|
|
1039
|
-
const is_showing_something = $i7OB2$createMemo(() => recommendations_resource_.loading || recommendations_resource_()?.length);
|
|
1040
|
-
const title = $i7OB2$createMemo(() => title_?.()); // In case getter/accessor creates elements, don't create them twice
|
|
1041
|
-
const num_placeholders_ = () => 20;
|
|
1042
|
-
const slider = [$i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1043
|
-
get when() {
|
|
1044
|
-
return title();
|
|
1045
|
-
},
|
|
1046
|
-
get children() {
|
|
1047
|
-
return $i7OB2$ssr($c4492d24952ed731$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
|
|
1048
|
-
}
|
|
1049
|
-
}), $i7OB2$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
|
|
1050
|
-
arrow_height_: 25,
|
|
1051
|
-
arrow_width_: 12.5,
|
|
1052
|
-
disable_fading_: true,
|
|
1053
|
-
slider_ref_: slider => {
|
|
1054
|
-
const {
|
|
1055
|
-
insert_here: insert_here,
|
|
1056
|
-
container: container
|
|
1057
|
-
} = slider;
|
|
1058
|
-
const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
|
|
1059
|
-
// Do like this, so we don't have to call mergeProps ourselves
|
|
1060
|
-
$i7OB2$createComponent(Layout, $i7OB2$mergeProps1({
|
|
1061
|
-
rows: "all",
|
|
1062
|
-
layout: "slider"
|
|
1063
|
-
}, layout_options_));
|
|
1064
|
-
$i7OB2$slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
|
|
1065
|
-
insert_here.before($a458486f22b22f63$export$a2cc176055f8f08());
|
|
1066
|
-
container.classList.add("products");
|
|
1067
|
-
},
|
|
1068
|
-
get children() {
|
|
1069
|
-
return $i7OB2$createComponent((0, $i7OB2$Suspense), {
|
|
1070
|
-
get fallback() {
|
|
1071
|
-
return $6e41f1fde994db72$export$f33414a4df0afd3f({
|
|
1072
|
-
num_placeholders_: num_placeholders_,
|
|
1073
|
-
product_card_template_: product_card_template_,
|
|
1074
|
-
placeholderCacheKey_: placeholderCacheKey_
|
|
1075
|
-
});
|
|
1076
|
-
},
|
|
1077
|
-
get children() {
|
|
1078
|
-
return (() => {
|
|
1079
|
-
// IIFE to make sure we access both the recommendations_resource and the resources containing the product card rendering results themselves within the Suspense boundary
|
|
1080
|
-
const displays_by_key_ = $29ec7cddbe1d3484$export$7f8bd308237ab5a5($i7OB2$createMemo(() => recommendations_resource_() || []));
|
|
1081
|
-
const {
|
|
1082
|
-
renderedDisplays_: renderedDisplays_
|
|
1083
|
-
} = $f091294da861020c$export$4a14175d33d81a96({
|
|
1084
|
-
displays_by_key_: displays_by_key_,
|
|
1085
|
-
product_card_template_: product_card_template_
|
|
1086
|
-
});
|
|
1087
|
-
return renderedDisplays_;
|
|
1088
|
-
})();
|
|
1089
|
-
}
|
|
1090
|
-
});
|
|
1091
|
-
}
|
|
1092
|
-
})];
|
|
1093
|
-
return $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1094
|
-
get when() {
|
|
1095
|
-
return is_showing_something();
|
|
1096
|
-
},
|
|
1097
|
-
get fallback() {
|
|
1098
|
-
return NoResultsFallback_?.();
|
|
1099
|
-
},
|
|
1100
|
-
children: slider
|
|
1101
|
-
});
|
|
1102
|
-
}
|
|
1103
|
-
function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
|
|
1104
|
-
const component_in_error_boundary = do_with_elements => {
|
|
1105
|
-
const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
|
|
1106
|
-
severity_: "error",
|
|
1107
|
-
message_: error_message,
|
|
1108
|
-
get children() {
|
|
1109
|
-
const elements = component();
|
|
1110
|
-
do_with_elements?.(elements);
|
|
1111
|
-
return elements;
|
|
1112
|
-
}
|
|
1113
|
-
});
|
|
1114
|
-
// This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
|
|
1115
|
-
if (typeof error_boundary_wrapped === "function")
|
|
1116
|
-
// @ts-ignore
|
|
1117
|
-
return error_boundary_wrapped();
|
|
1118
|
-
// On the server it returns a string, so we just return that
|
|
1119
|
-
return error_boundary_wrapped;
|
|
1120
|
-
};
|
|
1121
|
-
const owner = $i7OB2$getOwner();
|
|
1122
|
-
if (owner == null) return $i7OB2$createRoot(dispose => {
|
|
1123
|
-
// if we're not already run in a root, create a root and automatically dispose it when the first returned element is removed from the DOM
|
|
1124
|
-
return component_in_error_boundary(elements => {
|
|
1125
|
-
const have_multiple = Array.isArray(elements);
|
|
1126
|
-
if (have_multiple ? !elements?.length : !elements) return;
|
|
1127
|
-
(0, $i7OB2$observer).onremoved(have_multiple ? elements[0] : elements, ({
|
|
1128
|
-
element: element
|
|
1129
|
-
}) => {
|
|
1130
|
-
if (document.documentElement.contains(element)) return; // If element has instantly been re-inserted, don't dispose
|
|
1131
|
-
// See https://depictaiworkspace.slack.com/archives/C050GHEPBTR/p1695809102791259?thread_ts=1695106805.459729&cid=C050GHEPBTR
|
|
1132
|
-
dispose();
|
|
1133
|
-
});
|
|
1134
|
-
});
|
|
1135
|
-
});else
|
|
1136
|
-
// we're already in a root so cleanups are handled
|
|
1137
|
-
return component_in_error_boundary();
|
|
1138
|
-
}
|
|
1139
|
-
const $011607bdf658f807$var$ListingContext = /*@__PURE__*/$i7OB2$createContext();
|
|
1140
|
-
function $011607bdf658f807$export$e68cff63f76bd15b(props) {
|
|
1141
|
-
const our_object = {};
|
|
1142
|
-
return $i7OB2$createComponent($011607bdf658f807$var$ListingContext.Provider, {
|
|
1143
|
-
value: our_object,
|
|
1144
|
-
get children() {
|
|
1145
|
-
return props.children;
|
|
1146
|
-
}
|
|
1147
|
-
});
|
|
1148
|
-
}
|
|
1149
|
-
function $011607bdf658f807$export$8d0c4fdbb05a2f2e() {
|
|
1150
|
-
return $i7OB2$useContext($011607bdf658f807$var$ListingContext);
|
|
1151
|
-
}
|
|
1152
|
-
function $d134eae24341b4a1$export$89c6019e4baa40b1(props) {
|
|
1153
|
-
const style = $i7OB2$createMemo(() => {
|
|
1154
|
-
const {
|
|
1155
|
-
style: style,
|
|
1156
|
-
height: height,
|
|
1157
|
-
width: width
|
|
1158
|
-
} = props;
|
|
1159
|
-
return {
|
|
1160
|
-
...(style || {}),
|
|
1161
|
-
height: height ?? "1em",
|
|
1162
|
-
...(width && {
|
|
1163
|
-
width: width
|
|
1164
|
-
})
|
|
1165
|
-
};
|
|
1166
|
-
});
|
|
1167
|
-
return $i7OB2$createComponent((0, $d20eff0aadc28983$export$acb3eaade4b23afd), {
|
|
1168
|
-
get style() {
|
|
1169
|
-
return style();
|
|
1170
|
-
},
|
|
1171
|
-
get ["class"]() {
|
|
1172
|
-
return props.class;
|
|
1173
|
-
}
|
|
1174
|
-
});
|
|
1175
|
-
}
|
|
1176
|
-
var $bb15dfb548a7666e$var$_tmpl$ = ["<div", ' class="instant-card"><div class="img-part">', '</div><div class="right-part"><div class="title-brand-tagline"><span class="title">', '</span></div><div class="price-container">', "</div></div></div>"];
|
|
1177
|
-
const $bb15dfb548a7666e$export$8a2234b5b1a5ebd4 = "--image-aspect-ratio";
|
|
1178
|
-
function $bb15dfb548a7666e$export$ee1733d9a8495996() {
|
|
1179
|
-
return $i7OB2$ssr($bb15dfb548a7666e$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $7f60f09116a3fe61$export$3f37af283f8fb843), {
|
|
1180
|
-
aspectRatio: `var(${$bb15dfb548a7666e$export$8a2234b5b1a5ebd4}, 1)`
|
|
1181
|
-
})), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
|
|
1182
|
-
width: "20ch",
|
|
1183
|
-
height: "1em"
|
|
1184
|
-
})), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
|
|
1185
|
-
width: "5ch",
|
|
1186
|
-
height: "1em",
|
|
1187
|
-
"class": "price"
|
|
1188
|
-
})));
|
|
1189
|
-
}
|
|
1190
|
-
var $f18d425032111270$var$_tmpl$ = ["<div", ' style="', '"', ">", "</div>"];
|
|
1191
|
-
function $f18d425032111270$export$94026ee33dbabc26(props) {
|
|
1192
|
-
return $i7OB2$ssr($f18d425032111270$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$ssrStyle(`padding-bottom:calc(calc(1 / ${props.aspectRatio}) * 100%)`), $i7OB2$ssrAttribute("class", "s-image-container" + (props.class ? " " + $i7OB2$escape(props.class, true) : ""), false), $i7OB2$escape(props.children));
|
|
1193
|
-
}
|
|
1194
|
-
let $4ea56971d92eb0cd$var$browserIsBugged = false;
|
|
1195
|
-
function $4ea56971d92eb0cd$export$2972b890694ced75(callback, {
|
|
1196
|
-
timeout: timeout
|
|
1197
|
-
}) {
|
|
1198
|
-
if ($4ea56971d92eb0cd$var$browserIsBugged) timeout /= 4;
|
|
1199
|
-
const cancel = () => {
|
|
1200
|
-
cancelIdleCallback(idleHandle);
|
|
1201
|
-
clearTimeout(racingTimeout);
|
|
1202
|
-
};
|
|
1203
|
-
const idleHandle = requestIdleCallback(deadline => {
|
|
1204
|
-
cancel();
|
|
1205
|
-
return callback(deadline);
|
|
1206
|
-
}, {
|
|
1207
|
-
timeout: timeout
|
|
1208
|
-
});
|
|
1209
|
-
const racingTimeout = setTimeout(() => {
|
|
1210
|
-
$i7OB2$dwarn("Browser did not respect requestIdleCallback timeout");
|
|
1211
|
-
$4ea56971d92eb0cd$var$browserIsBugged = true;
|
|
1212
|
-
cancel();
|
|
1213
|
-
callback({
|
|
1214
|
-
didTimeout: false,
|
|
1215
|
-
timeRemaining() {
|
|
1216
|
-
return 500;
|
|
1217
|
-
}
|
|
1218
|
-
});
|
|
1219
|
-
}, timeout + 1000);
|
|
1220
|
-
return cancel;
|
|
1221
|
-
}
|
|
1222
|
-
function $e8ffe11ed01df0fe$export$e6fffe67d4cdd848(whatToWatch) {
|
|
1223
|
-
const [size, setSize] = $i7OB2$createSignal(0);
|
|
1224
|
-
const resizeObserver = new ResizeObserver($i7OB2$catchify1(records => {
|
|
1225
|
-
for (let j = 0; j < records.length; j++) {
|
|
1226
|
-
const {
|
|
1227
|
-
width: width
|
|
1228
|
-
} = records[j].contentRect;
|
|
1229
|
-
if (!width) continue;
|
|
1230
|
-
setSize(Math.ceil(width));
|
|
1231
|
-
}
|
|
1232
|
-
}));
|
|
1233
|
-
// If we start observing elements before they're in the DOM Chrome (Version 117.0.5938.92 (Official Build) (arm64)) sometimes gives us a resize event with a width of 0 and then doesn't dispatch one with the actual width once it's in the DOM. So we wait until the element is in the DOM before we start observing it.
|
|
1234
|
-
// It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
|
|
1235
|
-
const disconnect = (0, $i7OB2$observer).onexists(whatToWatch, ({
|
|
1236
|
-
element: element
|
|
1237
|
-
}) => requestAnimationFrame($i7OB2$catchify1(() => resizeObserver.observe(element))));
|
|
1238
|
-
$i7OB2$onCleanup(() => {
|
|
1239
|
-
resizeObserver.disconnect();
|
|
1240
|
-
disconnect();
|
|
1241
|
-
});
|
|
1242
|
-
return size;
|
|
1243
|
-
}
|
|
1244
|
-
const $e8ffe11ed01df0fe$var$onIdleFunctionsSymbol = /*@__PURE__*/Symbol("onIdleFunctions");
|
|
1245
|
-
const $e8ffe11ed01df0fe$export$f8945274f08a3105 = /*@__PURE__*/Symbol("listingContextAspectRatios");
|
|
1246
|
-
const $e8ffe11ed01df0fe$export$6066eb417ed2e9f7 = /*@__PURE__*/Symbol("listingContextAspectRatios");
|
|
1247
|
-
function $e8ffe11ed01df0fe$export$6e5611bc7e57e477(props) {
|
|
1248
|
-
const src_options = $i7OB2$createMemo(() => {
|
|
1249
|
-
const {
|
|
1250
|
-
src: src,
|
|
1251
|
-
customUrls: customUrls
|
|
1252
|
-
} = props;
|
|
1253
|
-
const fallback_src = (customUrls || $e8ffe11ed01df0fe$export$1d6267828870adda)(src, 400);
|
|
1254
|
-
const srcset = $e8ffe11ed01df0fe$var$make_srcset(props.src, props.resolutions || [64, 128, 256, 300, 400, 512, 640, 768, 1024, 1280, 1536, 2048, 2560, 3072, 3584, 4096], customUrls);
|
|
1255
|
-
// The order here *might* matter - I've seen mobile safari always start with loading the 400px version when it was reversed
|
|
1256
|
-
return {
|
|
1257
|
-
srcset: srcset,
|
|
1258
|
-
src: fallback_src
|
|
1259
|
-
};
|
|
1260
|
-
});
|
|
1261
|
-
// Work around https://github.com/solidjs/solid/issues/1828
|
|
1262
|
-
const img = new Image(); // Need to use new Image or browser might not start loading image before it's in the DOM
|
|
1263
|
-
const [, otherAttributes] = $i7OB2$splitProps(props, ["resolutions", "size", "src", "srcSet", "loading", "keyRatioUpdating", "customUrls" // Can't have properties ending on underscore because the property name mangling will get confused by this <-
|
|
1264
|
-
]);
|
|
1265
|
-
|
|
1266
|
-
const [hasSetSize, setHasSetSize] = $i7OB2$createSignal(false);
|
|
1267
|
-
const [hasDecoded, setHasDecoded] = $i7OB2$createSignal(false);
|
|
1268
|
-
const productCardIndexAccessor = $b6440e72ed83671a$export$e3faf4d95300054f();
|
|
1269
|
-
const sizePX = $i7OB2$createMemo(() => `${props.size()}px`); // props.size could be a getter that expects a cleanup so get it in this memo instead of where we set img.sizes
|
|
1270
|
-
const listingContext = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
|
|
1271
|
-
const isPrioritisedImage = $i7OB2$createMemo(() => productCardIndexAccessor?.() < 8);
|
|
1272
|
-
const shouldActuallyEnableLazyLoading = $i7OB2$createMemo(() => {
|
|
1273
|
-
const {
|
|
1274
|
-
loading: loading
|
|
1275
|
-
} = props;
|
|
1276
|
-
if (loading === "force-lazy") return true;
|
|
1277
|
-
return loading === "lazy" && !isPrioritisedImage();
|
|
1278
|
-
});
|
|
1279
|
-
const modifiedOtherAttributes = $i7OB2$mergeProps(otherAttributes, {
|
|
1280
|
-
get loading() {
|
|
1281
|
-
return shouldActuallyEnableLazyLoading() ? "lazy" : undefined;
|
|
1282
|
-
}
|
|
1283
|
-
});
|
|
1284
|
-
// Batch idle callbacks so that MutationObserver can batch the resulting mutations better, so we don't lose tons of CPU time to MutationObservers doing lots of things for each image
|
|
1285
|
-
// Happened on singular, they have some weird observer (+we also have one but ours is at least 3x more efficient)
|
|
1286
|
-
const executeWhenIdleBatched = (fn, isSizesUpdate) => {
|
|
1287
|
-
if (typeof requestIdleCallback !== "function") return setTimeout(fn); // Old browsers don't get optimisation
|
|
1288
|
-
if ((!isSizesUpdate || !sizeSetFastPath) && $i7OB2$untrack(isPrioritisedImage)) return fn(); // If we're one of the first 8 images, execute the callbacks immediately (improves lighthouse metrics)
|
|
1289
|
-
// unless we're just a `sizes` update after the initial sizes setting (this optimisation makes the looks animation a lot smoother on low-cpu devices)
|
|
1290
|
-
const existingStack = listingContext?.[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
|
|
1291
|
-
if (existingStack) return existingStack.add(fn);
|
|
1292
|
-
const newStack = new Set([fn]);
|
|
1293
|
-
if (listingContext) listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol] = newStack;
|
|
1294
|
-
const processStackWhenIdle = () => $4ea56971d92eb0cd$export$2972b890694ced75($i7OB2$catchify1(deadline => {
|
|
1295
|
-
const start = performance.now();
|
|
1296
|
-
const thirdDeadlineTime = deadline.timeRemaining() / 3; // observers coming after this take up 2-3x the time so don't use all of it
|
|
1297
|
-
for (const fn of newStack) {
|
|
1298
|
-
newStack.delete(fn);
|
|
1299
|
-
fn();
|
|
1300
|
-
const timeTaken = performance.now() - start;
|
|
1301
|
-
if ((!deadline.timeRemaining() || timeTaken > thirdDeadlineTime) && newStack.size) {
|
|
1302
|
-
// There's still work to be done but no time, so schedule another idle callback
|
|
1303
|
-
processStackWhenIdle();
|
|
1304
|
-
return;
|
|
1305
|
-
}
|
|
1306
|
-
}
|
|
1307
|
-
// Stack is empty
|
|
1308
|
-
if (listingContext) delete listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
|
|
1309
|
-
}), {
|
|
1310
|
-
timeout: 15000
|
|
1311
|
-
} // long timeout, better to not have images than to freeze the browser. But also we don't want to confuse user why no iamges are loading
|
|
1312
|
-
);
|
|
1313
|
-
|
|
1314
|
-
processStackWhenIdle();
|
|
1315
|
-
};
|
|
1316
|
-
let sizeSetFastPath = false;
|
|
1317
|
-
let hasDecodedFastPath = false;
|
|
1318
|
-
let timeoutSet = false;
|
|
1319
|
-
let gotCleanedUp = false;
|
|
1320
|
-
let srcJustChanged = true;
|
|
1321
|
-
img.classList.add("s-responsive-image");
|
|
1322
|
-
if (listingContext) {
|
|
1323
|
-
let prevValue;
|
|
1324
|
-
const aspectRatios = listingContext[$e8ffe11ed01df0fe$export$f8945274f08a3105] ||= new Set();
|
|
1325
|
-
const [, setMostPrevalentAspectRatio] = listingContext[$e8ffe11ed01df0fe$export$6066eb417ed2e9f7] ||= $i7OB2$createSignal();
|
|
1326
|
-
img.addEventListener("load", $i7OB2$catchify1(() => {
|
|
1327
|
-
if (props.keyRatioUpdating) {
|
|
1328
|
-
if (!srcJustChanged) return;
|
|
1329
|
-
srcJustChanged = false;
|
|
1330
|
-
}
|
|
1331
|
-
// Save our aspect ratio whenever it changes, so that we can base the containers on the most dominant aspect ratio, used in SearchModalV2 and LookItem
|
|
1332
|
-
const aspectRatio_ = img.naturalWidth / img.naturalHeight;
|
|
1333
|
-
if (prevValue) aspectRatios.delete(prevValue);
|
|
1334
|
-
const newValue = !isNaN(aspectRatio_) ? {
|
|
1335
|
-
aspectRatio_: aspectRatio_
|
|
1336
|
-
} : undefined;
|
|
1337
|
-
if (newValue) aspectRatios.add(newValue);
|
|
1338
|
-
prevValue = newValue;
|
|
1339
|
-
// Do all calculations resulting of an update directly, for performance
|
|
1340
|
-
const asArray = [...aspectRatios].map(({
|
|
1341
|
-
aspectRatio_: aspectRatio_
|
|
1342
|
-
}) => aspectRatio_);
|
|
1343
|
-
const mostPrevalentAspectRatio = $i7OB2$findMostFrequentItem(asArray);
|
|
1344
|
-
setMostPrevalentAspectRatio(mostPrevalentAspectRatio);
|
|
1345
|
-
}));
|
|
1346
|
-
$i7OB2$onCleanup(() => prevValue && aspectRatios.delete(prevValue));
|
|
1347
|
-
}
|
|
1348
|
-
$i7OB2$onCleanup(() => gotCleanedUp = true);
|
|
1349
|
-
$i7OB2$spread(img, $i7OB2$mergeProps(modifiedOtherAttributes), false, true);
|
|
1350
|
-
$i7OB2$createRenderEffect(() => {
|
|
1351
|
-
props.src;
|
|
1352
|
-
srcJustChanged = true;
|
|
1353
|
-
});
|
|
1354
|
-
$i7OB2$createEffect(() => {
|
|
1355
|
-
if (!props.size()) return; // wait until we have a size, run every time the size changes
|
|
1356
|
-
if (timeoutSet) return;
|
|
1357
|
-
const handler = $i7OB2$catchify1(() => {
|
|
1358
|
-
if (gotCleanedUp) return;
|
|
1359
|
-
img.sizes = sizePX(); // use latest available value of props.size
|
|
1360
|
-
if (!sizeSetFastPath) {
|
|
1361
|
-
setHasSetSize(true);
|
|
1362
|
-
sizeSetFastPath = true;
|
|
1363
|
-
}
|
|
1364
|
-
timeoutSet = false;
|
|
1365
|
-
});
|
|
1366
|
-
// Throttle the updating of sizes to avoid unnecessary image re-fetches during resize
|
|
1367
|
-
// And also because we first set src after sizes has been set, wait with loading and decoding images until browser is idle
|
|
1368
|
-
// This greatly improves performance when loading (more) products
|
|
1369
|
-
// See https://depictaiworkspace.slack.com/archives/C05NJ0K3WRL/p1698220617663139
|
|
1370
|
-
timeoutSet = true; // Important to set timeoutSet before the call to executeWhenIdleBatched since if this is an important image executeWhenIdleBatched will execute fn immediately
|
|
1371
|
-
executeWhenIdleBatched(handler, true);
|
|
1336
|
+
$i7OB2$createComputed(() => {
|
|
1337
|
+
// Make sure we don't have more rows visible than max_rows (this could happen by max_rows being decreased)
|
|
1338
|
+
const rows_visible = get_rows_visible();
|
|
1339
|
+
const max_rows = rows_or_empty_object().max_rows;
|
|
1340
|
+
if (!isNaN(max_rows) && max_rows >= 0 && rows_visible > max_rows) set_rows_visible()(max_rows);
|
|
1372
1341
|
});
|
|
1373
|
-
|
|
1374
|
-
$i7OB2$
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
// No need to listen if we're already in the DOM
|
|
1380
|
-
if (hasDecodedFastPath) return;
|
|
1381
|
-
if (shouldActuallyEnableLazyLoading()) {
|
|
1382
|
-
// For lazy loading there's no decoding to wait for as it only occurs when the image is visible
|
|
1383
|
-
// Make sure src is set before we put the image into the DOM though so no broken image symbol is shown
|
|
1384
|
-
setHasDecoded(true);
|
|
1385
|
-
hasDecodedFastPath = true;
|
|
1342
|
+
$i7OB2$createEffect(() => set_force_style_update(" ")); // force style update after hydration due to https://discord.com/channels/722131463138705510/722167424186843267/1151544212517552168
|
|
1343
|
+
$i7OB2$createRenderEffect(() => {
|
|
1344
|
+
// Be careful to only read show_all_rows in here (ofc doesn't apply to nested effects)
|
|
1345
|
+
if (show_all_rows()) {
|
|
1346
|
+
// no view more functionality requested
|
|
1347
|
+
set_styling(() => col_styling);
|
|
1386
1348
|
return;
|
|
1387
1349
|
}
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
}
|
|
1350
|
+
update_children_count();
|
|
1351
|
+
if (!(0, $i7OB2$isServer)) {
|
|
1352
|
+
const mutation_observer = new MutationObserver($i7OB2$catchify(update_children_count));
|
|
1353
|
+
mutation_observer.observe(container_element, {
|
|
1354
|
+
childList: true
|
|
1355
|
+
});
|
|
1356
|
+
$i7OB2$onCleanup(() => mutation_observer.disconnect());
|
|
1357
|
+
}
|
|
1358
|
+
set_styling(
|
|
1359
|
+
// this is needed because solid will think that the memo-accessor is a setter function otherwise
|
|
1360
|
+
() => $i7OB2$createMemo(() => {
|
|
1361
|
+
const {
|
|
1362
|
+
rows_per_click: rows_per_click,
|
|
1363
|
+
max_rows = -1,
|
|
1364
|
+
start_rows: start_rows
|
|
1365
|
+
} = rows_or_empty_object();
|
|
1366
|
+
const rows_visible = get_rows_visible();
|
|
1367
|
+
const children_count = get_children_count();
|
|
1368
|
+
return force_style_update() + col_styling() + props.cols_at_size.map(options => {
|
|
1369
|
+
const [recs_per_row, min, max] = options;
|
|
1370
|
+
let should_hide_view_more_button;
|
|
1371
|
+
let visible_recs;
|
|
1372
|
+
if (props.disable_partial_rows) {
|
|
1373
|
+
visible_recs = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible, children_count, options);
|
|
1374
|
+
const visible_recs_next_show_more = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible + (rows_per_click || 0),
|
|
1375
|
+
// Should this really be zero when we default rows_per_click to 1?
|
|
1376
|
+
children_count, options);
|
|
1377
|
+
should_hide_view_more_button = visible_recs === visible_recs_next_show_more;
|
|
1378
|
+
} else {
|
|
1379
|
+
visible_recs = $i7OB2$layout_get_total_rec_amount_for_row(rows_visible, options);
|
|
1380
|
+
should_hide_view_more_button = visible_recs >= children_count;
|
|
1381
|
+
}
|
|
1382
|
+
const should_hide_button_final = should_hide_view_more_button || max_rows !== -1 && rows_visible >= max_rows;
|
|
1383
|
+
// I don't really understand the logic for when the view more button gets hidden so IDK if below is correct, but it works how it should for now
|
|
1384
|
+
const should_hide_view_less_button = !should_hide_view_more_button || start_rows == undefined || rows_visible <= start_rows || children_count <= recs_per_row * start_rows;
|
|
1385
|
+
return `${$i7OB2$layout_media_query_header(min, max)}{${selector_beginning}:nth-child(n+${visible_recs + 1}){display:none}${props.layout == "slider" ? `${selector_beginning}:nth-child(n+${visible_recs}){margin-right:0}` : ""}${should_hide_button_final ? `.depict .${view_more_button_class}{display:none!important}` : ``}${should_hide_view_less_button ? `.depict .${view_less_button_class}{display:none!important}` : ``}}`;
|
|
1386
|
+
}).join("");
|
|
1387
|
+
}));
|
|
1396
1388
|
});
|
|
1389
|
+
const style_element = $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$2, $i7OB2$ssrHydrationKey(), get_styling); // need to create this after set_styling has been called or else there will be no styling in the SSR'd output
|
|
1390
|
+
if (insert_after_container) container_element.after(style_element);
|
|
1391
|
+
return [container_element, view_more_button_container(), view_less_button_container(), style_element];
|
|
1392
|
+
}
|
|
1393
|
+
var $c4492d24952ed731$var$_tmpl$ = ["<h2", ' class="recs-title">', "</h2>"];
|
|
1394
|
+
function $c4492d24952ed731$export$d41d19e89346fa2({
|
|
1395
|
+
recommendations_resource_: recommendations_resource_,
|
|
1396
|
+
product_card_template_: product_card_template_,
|
|
1397
|
+
layout_options_: layout_options_,
|
|
1398
|
+
title_: title_,
|
|
1399
|
+
NoResultsFallback_: NoResultsFallback_,
|
|
1400
|
+
placeholderCacheKey_: placeholderCacheKey_
|
|
1401
|
+
}) {
|
|
1402
|
+
const is_showing_something = $i7OB2$createMemo(() => recommendations_resource_.loading || recommendations_resource_()?.length);
|
|
1403
|
+
const title = $i7OB2$createMemo(() => title_?.()); // In case getter/accessor creates elements, don't create them twice
|
|
1404
|
+
const num_placeholders_ = () => 20;
|
|
1405
|
+
const slider = [$i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1406
|
+
get when() {
|
|
1407
|
+
return title();
|
|
1408
|
+
},
|
|
1409
|
+
get children() {
|
|
1410
|
+
return $i7OB2$ssr($c4492d24952ed731$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
|
|
1411
|
+
}
|
|
1412
|
+
}), $i7OB2$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
|
|
1413
|
+
arrow_height_: 25,
|
|
1414
|
+
arrow_width_: 12.5,
|
|
1415
|
+
disable_fading_: true,
|
|
1416
|
+
slider_ref_: slider => {
|
|
1417
|
+
const {
|
|
1418
|
+
insert_here: insert_here,
|
|
1419
|
+
container: container
|
|
1420
|
+
} = slider;
|
|
1421
|
+
const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
|
|
1422
|
+
// Do like this, so we don't have to call mergeProps ourselves
|
|
1423
|
+
$i7OB2$createComponent(Layout, $i7OB2$mergeProps({
|
|
1424
|
+
rows: "all",
|
|
1425
|
+
layout: "slider"
|
|
1426
|
+
}, layout_options_));
|
|
1427
|
+
$i7OB2$slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
|
|
1428
|
+
insert_here.before($a458486f22b22f63$export$a2cc176055f8f08());
|
|
1429
|
+
container.classList.add("products");
|
|
1430
|
+
},
|
|
1431
|
+
get children() {
|
|
1432
|
+
return $i7OB2$createComponent((0, $i7OB2$Suspense), {
|
|
1433
|
+
get fallback() {
|
|
1434
|
+
return $6e41f1fde994db72$export$f33414a4df0afd3f({
|
|
1435
|
+
num_placeholders_: num_placeholders_,
|
|
1436
|
+
product_card_template_: product_card_template_,
|
|
1437
|
+
placeholderCacheKey_: placeholderCacheKey_
|
|
1438
|
+
});
|
|
1439
|
+
},
|
|
1440
|
+
get children() {
|
|
1441
|
+
return (() => {
|
|
1442
|
+
// IIFE to make sure we access both the recommendations_resource and the resources containing the product card rendering results themselves within the Suspense boundary
|
|
1443
|
+
const displays_by_key_ = $29ec7cddbe1d3484$export$7f8bd308237ab5a5($i7OB2$createMemo(() => recommendations_resource_() || []));
|
|
1444
|
+
const {
|
|
1445
|
+
renderedDisplays_: renderedDisplays_
|
|
1446
|
+
} = $f091294da861020c$export$4a14175d33d81a96({
|
|
1447
|
+
displays_by_key_: displays_by_key_,
|
|
1448
|
+
product_card_template_: product_card_template_
|
|
1449
|
+
});
|
|
1450
|
+
return renderedDisplays_;
|
|
1451
|
+
})();
|
|
1452
|
+
}
|
|
1453
|
+
});
|
|
1454
|
+
}
|
|
1455
|
+
})];
|
|
1397
1456
|
return $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1398
1457
|
get when() {
|
|
1399
|
-
return
|
|
1458
|
+
return is_showing_something();
|
|
1400
1459
|
},
|
|
1401
|
-
|
|
1460
|
+
get fallback() {
|
|
1461
|
+
return NoResultsFallback_?.();
|
|
1462
|
+
},
|
|
1463
|
+
children: slider
|
|
1402
1464
|
});
|
|
1403
1465
|
}
|
|
1404
|
-
function $
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
const $660070e2a394b3c3$var$backupSizeSignal = /*@__PURE__*/$i7OB2$createSignal();
|
|
1414
|
-
const $660070e2a394b3c3$export$d7b7ab832c20e2f4 = /*@__PURE__*/Symbol("ShopifyContainedImage");
|
|
1415
|
-
function $660070e2a394b3c3$export$e4b984597b71e989(props) {
|
|
1416
|
-
const context = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
|
|
1417
|
-
if (context && !context[$660070e2a394b3c3$export$d7b7ab832c20e2f4])
|
|
1418
|
-
// create a signal that's the same for all items in this listing
|
|
1419
|
-
context[$660070e2a394b3c3$export$d7b7ab832c20e2f4] = $i7OB2$createSignal();
|
|
1420
|
-
const [currentImageSize, setCurrentImageSize] = context?.[$660070e2a394b3c3$export$d7b7ab832c20e2f4] || $660070e2a394b3c3$var$backupSizeSignal; // use global fallback signal (might lead to blurry images) if no context is available
|
|
1421
|
-
const [mostPrevalentAspectRatio] = context ?
|
|
1422
|
-
// If the context exists we have to create the signal here as getting it here would be too late when it's created by ShopifyResponsiveImg below
|
|
1423
|
-
context[(0, $e8ffe11ed01df0fe$export$6066eb417ed2e9f7)] ||= $i7OB2$createSignal() : [];
|
|
1424
|
-
const container = $f18d425032111270$export$94026ee33dbabc26({
|
|
1425
|
-
// Write getters manually instead of using JSX, so we can do more complex logic in the aspectRatio getter without increasing bundle size
|
|
1426
|
-
get class() {
|
|
1427
|
-
return props.class;
|
|
1428
|
-
},
|
|
1429
|
-
get aspectRatio() {
|
|
1430
|
-
if (props.autoAdjustAspectRatio) {
|
|
1431
|
-
const targetRatio = mostPrevalentAspectRatio?.();
|
|
1432
|
-
if (targetRatio != undefined) return `var(${(0, $bb15dfb548a7666e$export$8a2234b5b1a5ebd4)}, ${targetRatio})`;
|
|
1466
|
+
function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
|
|
1467
|
+
const component_in_error_boundary = do_with_elements => {
|
|
1468
|
+
const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
|
|
1469
|
+
severity_: "error",
|
|
1470
|
+
message_: error_message,
|
|
1471
|
+
get children() {
|
|
1472
|
+
const elements = component();
|
|
1473
|
+
do_with_elements?.(elements);
|
|
1474
|
+
return elements;
|
|
1433
1475
|
}
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1476
|
+
});
|
|
1477
|
+
// This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
|
|
1478
|
+
if (typeof error_boundary_wrapped === "function")
|
|
1479
|
+
// @ts-ignore
|
|
1480
|
+
return error_boundary_wrapped();
|
|
1481
|
+
// On the server it returns a string, so we just return that
|
|
1482
|
+
return error_boundary_wrapped;
|
|
1483
|
+
};
|
|
1437
1484
|
const owner = $i7OB2$getOwner();
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
});
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
get size() {
|
|
1455
|
-
return $i7OB2$createMemo(() => currentImageSize()?.() || 0);
|
|
1456
|
-
},
|
|
1457
|
-
get src() {
|
|
1458
|
-
return props.src;
|
|
1459
|
-
}
|
|
1460
|
-
}, () => props.imgProps, {
|
|
1461
|
-
get style() {
|
|
1462
|
-
return props.imgProps?.style;
|
|
1463
|
-
}
|
|
1464
|
-
})));
|
|
1465
|
-
return container;
|
|
1466
|
-
}
|
|
1467
|
-
const $70bb27cc6be01fc7$var$customUrls = (url, width) => {
|
|
1468
|
-
if (url?.startsWith?.("https://cdn.shopify.com"))
|
|
1469
|
-
// The shopify image resizing CDN blocks Cloudflare's image resizer. It's possible that we can't detect shopify image URLs sometimes because they go to the merchant's domain,
|
|
1470
|
-
// but it seems like the URLs returned by the Depict API always goes to the cdn.shopify.com version of an image, so this simple workaround works.
|
|
1471
|
-
return $e8ffe11ed01df0fe$export$1d6267828870adda(url, width);
|
|
1472
|
-
// Use cloudflare image resizer instead of img.depict.ai because it's a lot faster (and also auto-chooses other formats if webp is not supported)
|
|
1473
|
-
return `https://app.depict.ai/cdn-cgi/image/width=${width},format=auto/${url}`;
|
|
1474
|
-
};
|
|
1475
|
-
function $70bb27cc6be01fc7$export$9d4a4b669b1929ab(props) {
|
|
1476
|
-
return $i7OB2$createComponent((0, $660070e2a394b3c3$export$e4b984597b71e989), $i7OB2$mergeProps1(props, {
|
|
1477
|
-
get imgProps() {
|
|
1478
|
-
return {
|
|
1479
|
-
...props.imgProps,
|
|
1480
|
-
customUrls: $70bb27cc6be01fc7$var$customUrls
|
|
1481
|
-
};
|
|
1482
|
-
}
|
|
1483
|
-
}));
|
|
1484
|
-
}
|
|
1485
|
-
function $70bb27cc6be01fc7$export$140423fa4bfb6d63(props) {
|
|
1486
|
-
return $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), $i7OB2$mergeProps1(props, {
|
|
1487
|
-
customUrls: $70bb27cc6be01fc7$var$customUrls
|
|
1488
|
-
}));
|
|
1485
|
+
if (owner == null) return $i7OB2$createRoot(dispose => {
|
|
1486
|
+
// if we're not already run in a root, create a root and automatically dispose it when the first returned element is removed from the DOM
|
|
1487
|
+
return component_in_error_boundary(elements => {
|
|
1488
|
+
const have_multiple = Array.isArray(elements);
|
|
1489
|
+
if (have_multiple ? !elements?.length : !elements) return;
|
|
1490
|
+
(0, $i7OB2$observer).onremoved(have_multiple ? elements[0] : elements, ({
|
|
1491
|
+
element: element
|
|
1492
|
+
}) => {
|
|
1493
|
+
if (document.documentElement.contains(element)) return; // If element has instantly been re-inserted, don't dispose
|
|
1494
|
+
// See https://depictaiworkspace.slack.com/archives/C050GHEPBTR/p1695809102791259?thread_ts=1695106805.459729&cid=C050GHEPBTR
|
|
1495
|
+
dispose();
|
|
1496
|
+
});
|
|
1497
|
+
});
|
|
1498
|
+
});else
|
|
1499
|
+
// we're already in a root so cleanups are handled
|
|
1500
|
+
return component_in_error_boundary();
|
|
1489
1501
|
}
|
|
1490
1502
|
function $8c0f86cb3e266eeb$export$a71e92cfbb498adc(props) {
|
|
1491
1503
|
return $i7OB2$createMemo(() => {
|
|
@@ -1521,7 +1533,7 @@ function $08a49ecdcd5beaca$export$b73ed90f0ee50dc3({
|
|
|
1521
1533
|
const href = $i7OB2$createMemo(() => variantToUse()?.page_url);
|
|
1522
1534
|
const FavoriteButton = FavoriteButton_; // Just to get rid of the type error - TS doesn't understand <Show>
|
|
1523
1535
|
const title = $i7OB2$createMemo(() => variantToUse()?.title);
|
|
1524
|
-
return $i7OB2$ssrElement("a", $i7OB2$
|
|
1536
|
+
return $i7OB2$ssrElement("a", $i7OB2$mergeProps({
|
|
1525
1537
|
"class": "look-item"
|
|
1526
1538
|
}, () => enableLink() ? {
|
|
1527
1539
|
href: href()
|
|
@@ -1565,7 +1577,7 @@ function $08a49ecdcd5beaca$export$b73ed90f0ee50dc3({
|
|
|
1565
1577
|
return (animationEffectExists() ? isExpandedThrottledByOurEffectRun() : userWantsExpanded()) || animationIsRunning();
|
|
1566
1578
|
},
|
|
1567
1579
|
get children() {
|
|
1568
|
-
return $i7OB2$ssr($08a49ecdcd5beaca$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$ssrElement("span", $i7OB2$
|
|
1580
|
+
return $i7OB2$ssr($08a49ecdcd5beaca$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$ssrElement("span", $i7OB2$mergeProps({
|
|
1569
1581
|
"class": "d-title line-clamp"
|
|
1570
1582
|
}, () => title() && {
|
|
1571
1583
|
title: title()
|
|
@@ -1658,7 +1670,7 @@ async function $1f9a34ca8a87d49f$var$checkIfIsAffectedByChromeBug326498383() {
|
|
|
1658
1670
|
const waitAFrame = () => new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));
|
|
1659
1671
|
const timeoutPromise = new Promise(r => {
|
|
1660
1672
|
resolveTimeoutPromise = r;
|
|
1661
|
-
setTimeout($i7OB2$
|
|
1673
|
+
setTimeout($i7OB2$catchify(() => {
|
|
1662
1674
|
r();
|
|
1663
1675
|
div.remove();
|
|
1664
1676
|
}), 500);
|
|
@@ -1742,7 +1754,7 @@ function $11fb4b33b36ecfac$export$ebf0b1d4f90c09ae({
|
|
|
1742
1754
|
priceFormatting_: priceFormatting_,
|
|
1743
1755
|
outerRef_: el => $i7OB2$createEffect(() => {
|
|
1744
1756
|
if (index !== 0) return;
|
|
1745
|
-
const resizeObserver = new ResizeObserver($i7OB2$
|
|
1757
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => setLookItemHeight(records.at(-1).contentRect.height)));
|
|
1746
1758
|
resizeObserver.observe(el);
|
|
1747
1759
|
$i7OB2$onCleanup(() => resizeObserver.disconnect());
|
|
1748
1760
|
})
|
|
@@ -1761,7 +1773,7 @@ function $11fb4b33b36ecfac$var$scrollingFunctionForChrome(element, targetScrollY
|
|
|
1761
1773
|
let start;
|
|
1762
1774
|
const startingY = element.scrollTop;
|
|
1763
1775
|
const diff = targetScrollY - startingY;
|
|
1764
|
-
const step = $i7OB2$
|
|
1776
|
+
const step = $i7OB2$catchify(timestamp => {
|
|
1765
1777
|
if (!start) start = timestamp;
|
|
1766
1778
|
// Elapsed milliseconds since start of scrolling.
|
|
1767
1779
|
const time = timestamp - start;
|
|
@@ -1792,7 +1804,7 @@ function $e9d1d09be9e6471e$export$44809a8a3e867e30({
|
|
|
1792
1804
|
const index = $b6440e72ed83671a$export$e3faf4d95300054f();
|
|
1793
1805
|
const [containerWidth_, setContainerWidth] = $i7OB2$createSignal();
|
|
1794
1806
|
const [containerHeight_, setContainerHeight] = $i7OB2$createSignal();
|
|
1795
|
-
const clickHandler = $i7OB2$
|
|
1807
|
+
const clickHandler = $i7OB2$catchify(({
|
|
1796
1808
|
target: target
|
|
1797
1809
|
}) => {
|
|
1798
1810
|
if (target !== container && !container.contains(target))
|
|
@@ -1929,7 +1941,7 @@ class $4fd2ba03703a7d92$export$7e1297a3a19f10d8 {
|
|
|
1929
1941
|
* @param is_replace_ if you want to replace the current URL in history instead of pushing a new one
|
|
1930
1942
|
* @param listing_id_ If you are navigating to a category and know the listing_id of, please provide it. This is for making a better devEx in js-ui
|
|
1931
1943
|
*/
|
|
1932
|
-
go_to_: $i7OB2$
|
|
1944
|
+
go_to_: $i7OB2$catchify(async ({
|
|
1933
1945
|
new_url_: raw_new_url,
|
|
1934
1946
|
event_: event_,
|
|
1935
1947
|
force_spa_navigation_: force_spa_navigation_,
|
|
@@ -2013,7 +2025,7 @@ function $3da8afe3ed57cf34$export$7da560f849543dff({
|
|
|
2013
2025
|
get children() {
|
|
2014
2026
|
return $i7OB2$ssr($3da8afe3ed57cf34$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
|
|
2015
2027
|
}
|
|
2016
|
-
}), $i7OB2$ssr($3da8afe3ed57cf34$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$escape($a458486f22b22f63$export$a2cc176055f8f08()), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$
|
|
2028
|
+
}), $i7OB2$ssr($3da8afe3ed57cf34$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$escape($a458486f22b22f63$export$a2cc176055f8f08()), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$mergeProps({
|
|
2017
2029
|
get rows() {
|
|
2018
2030
|
return rows_object_();
|
|
2019
2031
|
},
|
|
@@ -2142,7 +2154,7 @@ function $07ef910e8ef6b783$export$2c9f9bf2092486aa(props) {
|
|
|
2142
2154
|
return $i7OB2$createComponent((0, $c4492d24952ed731$export$d41d19e89346fa2), sharedOptions);
|
|
2143
2155
|
},
|
|
2144
2156
|
get children() {
|
|
2145
|
-
return $i7OB2$createComponent((0, $3da8afe3ed57cf34$export$7da560f849543dff), $i7OB2$
|
|
2157
|
+
return $i7OB2$createComponent((0, $3da8afe3ed57cf34$export$7da560f849543dff), $i7OB2$mergeProps(sharedOptions, {
|
|
2146
2158
|
view_more_button_: () => props.gridOptions_?.view_more_button,
|
|
2147
2159
|
max_rows_: () => props.gridOptions_?.max_rows
|
|
2148
2160
|
}));
|
|
@@ -2190,7 +2202,7 @@ async function $07ef910e8ef6b783$var$runDisplayTransformersForLooks(baseData, li
|
|
|
2190
2202
|
}) : displaysToTransform;
|
|
2191
2203
|
const transformedListings = await transformedListingsPromise;
|
|
2192
2204
|
const transformedDisplayById = Object.fromEntries(transformedProducts.map(display => [$16351e4c87b90b3d$export$548d053aba053d79(display), display]));
|
|
2193
|
-
return transformedListings.map(listing => $i7OB2$
|
|
2205
|
+
return transformedListings.map(listing => $i7OB2$mergeProps1(listing, {
|
|
2194
2206
|
// use mergeProps because in preview browser we add getters in this object, that would be called too early otherwise
|
|
2195
2207
|
displays: (displayIdsPerListingId[listing.listing_id] || []).map(displayId => transformedDisplayById[displayId]).filter(v => v)
|
|
2196
2208
|
}));
|
|
@@ -2417,7 +2429,7 @@ function $eea41f703612261b$export$62f101a8aa597bf8({
|
|
|
2417
2429
|
// don't wait if it's the first request
|
|
2418
2430
|
write_current_instant_query(value);
|
|
2419
2431
|
clearTimeout(timeout);
|
|
2420
|
-
timeout = setTimeout($i7OB2$
|
|
2432
|
+
timeout = setTimeout($i7OB2$catchify(() => write_current_instant_query(value)), 250);
|
|
2421
2433
|
});
|
|
2422
2434
|
const [search_results] = $i7OB2$createResource($i7OB2$createMemo(() => ({
|
|
2423
2435
|
// <-- key order important, see comment below
|
|
@@ -2425,7 +2437,7 @@ function $eea41f703612261b$export$62f101a8aa597bf8({
|
|
|
2425
2437
|
market: market_(),
|
|
2426
2438
|
locale: i18n_.backend_locale_(),
|
|
2427
2439
|
query: read_current_instant_query()
|
|
2428
|
-
})), $i7OB2$
|
|
2440
|
+
})), $i7OB2$catchify(async variable_data => {
|
|
2429
2441
|
return depict_api_.query({
|
|
2430
2442
|
// here it is (unfortunately) important that the keys in the object are in the same order as in SearchPage.tsx, because when JSON-encoding them to compare for caching the strings will be different otherwise
|
|
2431
2443
|
limit: $i7OB2$untrack(has_sort_or_filters_) ? max_cards : min_products_to_fetch_,
|
|
@@ -2530,7 +2542,7 @@ function $c64d28ca12452b21$export$3340fdd8259bd4fd({
|
|
|
2530
2542
|
if (process.env.GA === "false") return;
|
|
2531
2543
|
let debounce_timeout;
|
|
2532
2544
|
const stop_timeout = () => clearTimeout(debounce_timeout);
|
|
2533
|
-
const send_to_ga = $i7OB2$
|
|
2545
|
+
const send_to_ga = $i7OB2$catchify(() => {
|
|
2534
2546
|
const fake_url = new URL(location.href);
|
|
2535
2547
|
const {
|
|
2536
2548
|
searchParams: searchParams
|
|
@@ -2543,12 +2555,12 @@ function $c64d28ca12452b21$export$3340fdd8259bd4fd({
|
|
|
2543
2555
|
$i7OB2$onCleanup(() => {
|
|
2544
2556
|
setTimeout(
|
|
2545
2557
|
// do it next event loop because search_field_value_ is wrong this one and search_query might be too because we want the old value to be put into the history entry and a framework like NextJS might take some time to navigate
|
|
2546
|
-
$i7OB2$
|
|
2558
|
+
$i7OB2$catchify(() => {
|
|
2547
2559
|
if ($i7OB2$untrack(get_search_query_) === $i7OB2$untrack(get_search_field_value_)) stop_timeout();
|
|
2548
2560
|
}));
|
|
2549
2561
|
});
|
|
2550
2562
|
let first_call = true;
|
|
2551
|
-
$i7OB2$createEffect($i7OB2$
|
|
2563
|
+
$i7OB2$createEffect($i7OB2$catchify(() => {
|
|
2552
2564
|
get_search_field_value_();
|
|
2553
2565
|
if (first_call) {
|
|
2554
2566
|
// we only want to do stuff when it changes
|
|
@@ -2567,7 +2579,7 @@ function $a36cbc4f68bfd590$export$91c3b6774e8be0f5({
|
|
|
2567
2579
|
const [get_current_href, set_current_href] = $i7OB2$createSignal(location.href);
|
|
2568
2580
|
const [exit_iterable, exitable_iterable] = $i7OB2$make_asyncIterable_exiter((0, $i7OB2$href_change_ipns));
|
|
2569
2581
|
$i7OB2$onCleanup(exit_iterable);
|
|
2570
|
-
$i7OB2$
|
|
2582
|
+
$i7OB2$catchify(async () => {
|
|
2571
2583
|
for await (const href of exitable_iterable)
|
|
2572
2584
|
// use native links so ppl can cmdclick/right click and open in new tab and see target URL
|
|
2573
2585
|
set_current_href(href);
|
|
@@ -2585,7 +2597,7 @@ function $694b7f90501fea4c$export$5d2caaa6b530761c() {
|
|
|
2585
2597
|
}
|
|
2586
2598
|
var $19976a74d273070d$var$_tmpl$ = '<path d="M11.669 10.531l9.156-9.156a.78.78 0 0 0 .237-.569c0-.221-.079-.412-.237-.569A.8.8 0 0 0 20.24 0a.77.77 0 0 0-.569.237l-9.14 9.14-9.14-9.14A.79.79 0 0 0 .807 0a.77.77 0 0 0-.569.237A.78.78 0 0 0 0 .807a.77.77 0 0 0 .237.569l9.156 9.156-9.156 9.14c-.159.157-.237.349-.237.569s.079.412.237.569c.085.085.174.148.268.19a1.095 1.095 0 0 0 .316.048.894.894 0 0 0 .285-.048.84.84 0 0 0 .285-.19l9.139-9.14 9.14 9.14a.894.894 0 0 0 .268.19 1.049 1.049 0 0 0 .301.048.941.941 0 0 0 .301-.048.84.84 0 0 0 .285-.19.78.78 0 0 0 .237-.569c0-.221-.079-.412-.237-.569z"></path>';
|
|
2587
2599
|
function $19976a74d273070d$export$3b621d86b1566b2(props = {}) {
|
|
2588
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
2600
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
2589
2601
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2590
2602
|
width: "21.064",
|
|
2591
2603
|
height: "21.064",
|
|
@@ -2685,7 +2697,7 @@ function $f3213c0640246d58$export$ba17c5b7e6dda39f({
|
|
|
2685
2697
|
}
|
|
2686
2698
|
var $16f0ed5ea30d8d9c$var$_tmpl$ = '<path d="M19.811 20.174l-6.234-6.809a7.96 7.96 0 0 0 .923-1.179c.274-.424.502-.865.687-1.323a8.04 8.04 0 0 0 .42-1.436 7.88 7.88 0 0 0 .144-1.507c0-.526-.051-1.042-.154-1.548-.096-.506-.243-.995-.441-1.466s-.441-.919-.728-1.343a8.28 8.28 0 0 0-.984-1.21 7.86 7.86 0 0 0-1.2-.984A7.56 7.56 0 0 0 10.89.651C10.418.453 9.929.302 9.423.2S8.401.046 7.875.046 6.833.097 6.327.2 5.332.453 4.86.651a7.56 7.56 0 0 0-1.354.718c-.431.287-.831.615-1.2.984a8.28 8.28 0 0 0-.984 1.21 7.73 7.73 0 0 0-.728 1.343c-.198.472-.349.96-.451 1.466A8.31 8.31 0 0 0 0 7.921a8.31 8.31 0 0 0 .144 1.548c.103.506.253.995.451 1.466a8.08 8.08 0 0 0 .728 1.354 7.86 7.86 0 0 0 .984 1.2 7.54 7.54 0 0 0 1.2.995c.431.287.882.53 1.354.728.472.191.96.338 1.466.441a8.31 8.31 0 0 0 1.548.144c.451 0 .896-.038 1.333-.113a7.83 7.83 0 0 0 1.282-.328 7.55 7.55 0 0 0 1.2-.533 8.08 8.08 0 0 0 1.107-.749l6.245 6.809a.45.45 0 0 0 .174.123.55.55 0 0 0 .205.041.61.61 0 0 0 .195-.031c.061-.021.116-.055.164-.102.109-.096.164-.219.164-.369.007-.144-.038-.267-.133-.369zM1.046 7.921c0-.937.178-1.818.533-2.646.362-.834.851-1.559 1.466-2.174.622-.615 1.347-1.101 2.174-1.456.827-.362 1.712-.543 2.656-.543s1.829.181 2.656.543c.827.355 1.548.841 2.164 1.456.622.615 1.111 1.34 1.466 2.174a6.52 6.52 0 0 1 .543 2.646c0 .943-.181 1.829-.543 2.656a6.89 6.89 0 0 1-1.466 2.174c-.615.615-1.336 1.104-2.164 1.466-.827.356-1.712.533-2.656.533s-1.829-.178-2.656-.533c-.827-.362-1.552-.851-2.174-1.466-.615-.622-1.104-1.347-1.466-2.174-.355-.827-.533-1.712-.533-2.656z"></path>';
|
|
2687
2699
|
function $16f0ed5ea30d8d9c$export$82eafebb825fc23f(props = {}) {
|
|
2688
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
2700
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
2689
2701
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2690
2702
|
width: "20",
|
|
2691
2703
|
height: "22",
|
|
@@ -2694,7 +2706,7 @@ function $16f0ed5ea30d8d9c$export$82eafebb825fc23f(props = {}) {
|
|
|
2694
2706
|
}
|
|
2695
2707
|
var $190927650b4840eb$var$_tmpl$ = '<path d="M56 26.455a13.71 13.71 0 0 0-9.578 3.967A13.71 13.71 0 0 0 42.455 40v176a13.71 13.71 0 0 0 3.967 9.578A13.71 13.71 0 0 0 56 229.545h144A13.71 13.71 0 0 0 213.545 216V88a2.456 2.456 0 0 1 0-.002c.001-1.452-.597-2.895-1.623-3.922l-55.998-55.998a5.61 5.61 0 0 0-3.922-1.623 2.456 2.456 0 0 1-.002 0zm0 11.09h88A2.456 2.456 0 0 1 146.455 40v48c0 2.903 2.642 5.545 5.545 5.545h48A2.456 2.456 0 0 1 202.455 96v120a2.456 2.456 0 0 1-2.455 2.455H56A2.456 2.456 0 0 1 53.545 216V40A2.456 2.456 0 0 1 56 37.545zm103.061 11.498a2.456 2.456 0 0 1 2.676.531l28.689 28.689a2.456 2.456 0 0 1-1.736 4.191H160A2.456 2.456 0 0 1 157.545 80V51.311a2.456 2.456 0 0 1 1.516-2.268zM96 130.455c-2.903 0-5.545 2.642-5.545 5.545s2.642 5.545 5.545 5.545h64c2.903 0 5.545-2.642 5.545-5.545s-2.642-5.545-5.545-5.545zm0 32c-2.903 0-5.545 2.642-5.545 5.545s2.642 5.545 5.545 5.545h64c2.903 0 5.545-2.642 5.545-5.545s-2.642-5.545-5.545-5.545z"></path>';
|
|
2696
2708
|
function $190927650b4840eb$export$605674723bcc715c(props = {}) {
|
|
2697
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
2709
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
2698
2710
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2699
2711
|
width: "32",
|
|
2700
2712
|
height: "32",
|
|
@@ -2960,7 +2972,7 @@ function $6ef2e4ea23810f23$var$actual_navigation_working_on_fake_data({
|
|
|
2960
2972
|
if (!$i7OB2$untrack(() => read_updating_blocked())) previous_value = sfv;
|
|
2961
2973
|
});
|
|
2962
2974
|
const owner = $i7OB2$getOwner();
|
|
2963
|
-
const handler = $i7OB2$
|
|
2975
|
+
const handler = $i7OB2$catchify(({
|
|
2964
2976
|
keyCode: keyCode
|
|
2965
2977
|
}) => $i7OB2$untrack(() => {
|
|
2966
2978
|
const up = keyCode === 38;
|
|
@@ -3024,7 +3036,7 @@ function $6ef2e4ea23810f23$var$actual_navigation_working_on_fake_data({
|
|
|
3024
3036
|
const el = element_();
|
|
3025
3037
|
if (!el) return;
|
|
3026
3038
|
el.addEventListener("keyup", handler);
|
|
3027
|
-
$i7OB2$onCleanup($i7OB2$
|
|
3039
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => el.removeEventListener("keyup", handler)));
|
|
3028
3040
|
});
|
|
3029
3041
|
}
|
|
3030
3042
|
function $1ae0eaca6ada9753$export$af0124069c150252({
|
|
@@ -3221,7 +3233,7 @@ let $f86ba724282f6690$export$44dad306455dddf;
|
|
|
3221
3233
|
|
|
3222
3234
|
function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
|
|
3223
3235
|
const [width, setWidth] = $i7OB2$createSignal();
|
|
3224
|
-
const resizeObserver = new ResizeObserver($i7OB2$
|
|
3236
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => {
|
|
3225
3237
|
for (let j = 0; j < records.length; j++) {
|
|
3226
3238
|
const width = records[j].borderBoxSize?.[0]?.inlineSize ?? what_to_watch.getBoundingClientRect().width;
|
|
3227
3239
|
setWidth(width);
|
|
@@ -3231,7 +3243,7 @@ function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
|
|
|
3231
3243
|
// It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
|
|
3232
3244
|
const disconnect = (0, $i7OB2$observer).onexists(what_to_watch, ({
|
|
3233
3245
|
element: element
|
|
3234
|
-
}) => requestAnimationFrame($i7OB2$
|
|
3246
|
+
}) => requestAnimationFrame($i7OB2$catchify(() => {
|
|
3235
3247
|
const current_size = what_to_watch.getBoundingClientRect().width;
|
|
3236
3248
|
if (current_size)
|
|
3237
3249
|
// If element has size, set signal to that. ResizeObserver only triggers when the content is visible in some cases, but it might already have a size. This reduces size filter expanding animation jank in chrome.
|
|
@@ -3246,7 +3258,7 @@ function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
|
|
|
3246
3258
|
}
|
|
3247
3259
|
var $081752ca508a876f$var$_tmpl$ = '<path fill-rule="evenodd" d="M9.563 3.438c-3.107 0-5.625 2.518-5.625 5.625s2.518 5.625 5.625 5.625 5.625-2.518 5.625-5.625-2.518-5.625-5.625-5.625zm-7.5 5.625a7.5 7.5 0 1 1 15 0c0 1.733-.588 3.329-1.575 4.599l3.176 3.176a.94.94 0 0 1 0 1.326.94.94 0 0 1-1.326 0l-3.176-3.176a7.47 7.47 0 0 1-4.599 1.575 7.5 7.5 0 0 1-7.5-7.5z" fill="#0f0f0f"></path>';
|
|
3248
3260
|
function $081752ca508a876f$export$f7658c347b037c3f(props = {}) {
|
|
3249
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
3261
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
3250
3262
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3251
3263
|
width: "21",
|
|
3252
3264
|
height: "20",
|
|
@@ -3275,7 +3287,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
|
|
|
3275
3287
|
let input_element;
|
|
3276
3288
|
// This is the div where we recommend (and ourselves do) attach the event listener to that opens the search modal.
|
|
3277
3289
|
let field_div;
|
|
3278
|
-
$i7OB2$createEffect($i7OB2$
|
|
3290
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
3279
3291
|
if (disabled_) return;
|
|
3280
3292
|
// we aren't in DOM yet unfortunately, wouldn't even be with onMount
|
|
3281
3293
|
await (0, $i7OB2$observer).wait_for_element(input_element);
|
|
@@ -3290,7 +3302,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
|
|
|
3290
3302
|
const BackButton = () => $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
3291
3303
|
when: on_back_,
|
|
3292
3304
|
get children() {
|
|
3293
|
-
return $i7OB2$ssrElement("button", $i7OB2$
|
|
3305
|
+
return $i7OB2$ssrElement("button", $i7OB2$mergeProps({
|
|
3294
3306
|
"class": "back",
|
|
3295
3307
|
type: "button",
|
|
3296
3308
|
get ["aria-label"]() {
|
|
@@ -3304,7 +3316,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
|
|
|
3304
3316
|
}), () => isNewModal ? $i7OB2$escape($i7OB2$createComponent((0, $19976a74d273070d$export$3b621d86b1566b2), {})) : $i7OB2$escape($i7OB2$createComponent(BackIcon_, {})), true);
|
|
3305
3317
|
}
|
|
3306
3318
|
});
|
|
3307
|
-
const ClearButton = () => $i7OB2$ssrElement("button", $i7OB2$
|
|
3319
|
+
const ClearButton = () => $i7OB2$ssrElement("button", $i7OB2$mergeProps({
|
|
3308
3320
|
type: "button",
|
|
3309
3321
|
get ["class"]() {
|
|
3310
3322
|
return `clear ${searchFieldEmpty() ? "empty" : ""}`;
|
|
@@ -3352,7 +3364,7 @@ function $aea1edf92433e81e$export$fe334901e8bebd57() {
|
|
|
3352
3364
|
offset: 0
|
|
3353
3365
|
}, 1);
|
|
3354
3366
|
animation.pause();
|
|
3355
|
-
const fn = $i7OB2$
|
|
3367
|
+
const fn = $i7OB2$catchify(animation.play.bind(animation));
|
|
3356
3368
|
cleanup_fns.push(fn);
|
|
3357
3369
|
$i7OB2$onCleanup(fn);
|
|
3358
3370
|
} catch (e) {
|
|
@@ -3363,7 +3375,7 @@ function $aea1edf92433e81e$export$fe334901e8bebd57() {
|
|
|
3363
3375
|
const style = element.style;
|
|
3364
3376
|
const original_value = style.overflow;
|
|
3365
3377
|
style.overflow = "hidden";
|
|
3366
|
-
const fn = $i7OB2$
|
|
3378
|
+
const fn = $i7OB2$catchify(() => style.overflow = original_value);
|
|
3367
3379
|
cleanup_fns.push(fn);
|
|
3368
3380
|
$i7OB2$onCleanup(fn);
|
|
3369
3381
|
}
|
|
@@ -3386,8 +3398,8 @@ function $512b994d501f412b$export$93d9bfd0c9c1a5b8(close_modal, search_query_url
|
|
|
3386
3398
|
let set_initial_values = false;
|
|
3387
3399
|
let old_pathname;
|
|
3388
3400
|
let old_param_value;
|
|
3389
|
-
$i7OB2$onCleanup($i7OB2$
|
|
3390
|
-
$i7OB2$
|
|
3401
|
+
$i7OB2$onCleanup($i7OB2$catchify(exit_iterable));
|
|
3402
|
+
$i7OB2$catchify(async () => {
|
|
3391
3403
|
for await (const href of exitable_iterable) {
|
|
3392
3404
|
const u_o = new URL(href);
|
|
3393
3405
|
const new_pathname = u_o.pathname;
|
|
@@ -3458,7 +3470,7 @@ function $42912431795f188e$var$RawClassicSearchModal({
|
|
|
3458
3470
|
} = alignmentSignals_ || {};
|
|
3459
3471
|
const [bodyAlignmentStyle] = bodyAlignmentSignal;
|
|
3460
3472
|
const [get_modal_search_results, set_modal_search_results_] = $i7OB2$createSignal();
|
|
3461
|
-
const close_on_escape_handler = $i7OB2$
|
|
3473
|
+
const close_on_escape_handler = $i7OB2$catchify(({
|
|
3462
3474
|
key: key
|
|
3463
3475
|
}) => {
|
|
3464
3476
|
if (key === "Escape") close_modal_();
|
|
@@ -3483,7 +3495,7 @@ function $42912431795f188e$var$RawClassicSearchModal({
|
|
|
3483
3495
|
if (disable_scrolling_) $aea1edf92433e81e$export$fe334901e8bebd57();
|
|
3484
3496
|
$512b994d501f412b$export$93d9bfd0c9c1a5b8(close_modal_, search_query_url_param_name_);
|
|
3485
3497
|
window.addEventListener("keydown", close_on_escape_handler);
|
|
3486
|
-
$i7OB2$onCleanup($i7OB2$
|
|
3498
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => window.removeEventListener("keydown", close_on_escape_handler)));
|
|
3487
3499
|
if (closing_animation_) register_closing_animation_(closing_animation_);
|
|
3488
3500
|
$c64d28ca12452b21$export$3340fdd8259bd4fd({
|
|
3489
3501
|
get_search_field_value_: get_search_field_value_,
|
|
@@ -3854,7 +3866,7 @@ function $4ce5b8892775b62d$export$67152d26d4f56ee8({
|
|
|
3854
3866
|
selected_index_: [read_selected_index_, write_selected_index_]
|
|
3855
3867
|
}) {
|
|
3856
3868
|
const href = $i7OB2$createMemo(() => listing_()?.page_url); // <- could be made reactive getter created in displayTransformers, read it in memo here since it might create computations (for example in the preview-brower), and there's no owner in the onClick handler
|
|
3857
|
-
const LinkToListing = props => $i7OB2$ssrElement("a", $i7OB2$
|
|
3869
|
+
const LinkToListing = props => $i7OB2$ssrElement("a", $i7OB2$mergeProps(props, {
|
|
3858
3870
|
get href() {
|
|
3859
3871
|
return href();
|
|
3860
3872
|
}
|
|
@@ -4144,7 +4156,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
|
|
|
4144
4156
|
$i7OB2$createComputed($i7OB2$on(search_field_value_[0], () => !suggestions_updating_blocked() && set_selected_index(undefined), {
|
|
4145
4157
|
defer: true
|
|
4146
4158
|
})); // reset autocomplete position if query changes
|
|
4147
|
-
return [$i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$
|
|
4159
|
+
return [$i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
|
|
4148
4160
|
get title_() {
|
|
4149
4161
|
return i18n_.popular_;
|
|
4150
4162
|
},
|
|
@@ -4154,7 +4166,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
|
|
|
4154
4166
|
return itemIndexes_.suggestionsIndex_;
|
|
4155
4167
|
},
|
|
4156
4168
|
showPlaceholders_: () => showPlaceholders() || noResults_() && !noResultsPopularSuggestions.latest
|
|
4157
|
-
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$
|
|
4169
|
+
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
|
|
4158
4170
|
get title_() {
|
|
4159
4171
|
return i18n_.previous_;
|
|
4160
4172
|
},
|
|
@@ -4165,7 +4177,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
|
|
|
4165
4177
|
},
|
|
4166
4178
|
extraTitleRowElements_: () => $i7OB2$ssr($2f3171b02c8f4a5d$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(i18n_.clear_all_from_filter_crumbs_())),
|
|
4167
4179
|
showPlaceholders_: () => false
|
|
4168
|
-
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$
|
|
4180
|
+
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
|
|
4169
4181
|
get title_() {
|
|
4170
4182
|
return i18n_.content_;
|
|
4171
4183
|
},
|
|
@@ -4303,7 +4315,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
|
|
|
4303
4315
|
const random_classname_body = $i7OB2$make_random_classname();
|
|
4304
4316
|
const backdropRandomClassname = $i7OB2$make_random_classname();
|
|
4305
4317
|
const [get_modal_search_results_, set_modal_search_results_] = $i7OB2$createSignal();
|
|
4306
|
-
const close_on_escape_handler = $i7OB2$
|
|
4318
|
+
const close_on_escape_handler = $i7OB2$catchify(evt => {
|
|
4307
4319
|
if (evt.key === "Escape") {
|
|
4308
4320
|
evt.preventDefault(); // Prevent the browser from closing/cancelling the modal so our animations have time to run
|
|
4309
4321
|
close_modal_();
|
|
@@ -4399,7 +4411,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
|
|
|
4399
4411
|
$i7OB2$createEffect($i7OB2$on(get_search_field_value_, () => {
|
|
4400
4412
|
setShowStaleListingSuggestions(true);
|
|
4401
4413
|
clearTimeout(listingSuggestionsDebounceTimeout);
|
|
4402
|
-
listingSuggestionsDebounceTimeout = setTimeout($i7OB2$
|
|
4414
|
+
listingSuggestionsDebounceTimeout = setTimeout($i7OB2$catchify(() => setShowStaleListingSuggestions(false)), 350);
|
|
4403
4415
|
}, {
|
|
4404
4416
|
defer: true
|
|
4405
4417
|
}));
|
|
@@ -4534,7 +4546,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
|
|
|
4534
4546
|
}
|
|
4535
4547
|
});
|
|
4536
4548
|
if (setSearchFieldOuterWidth_) {
|
|
4537
|
-
const resizeObserver = new ResizeObserver($i7OB2$
|
|
4549
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => setSearchFieldOuterWidth_(records.at(-1).contentRect.width)));
|
|
4538
4550
|
resizeObserver.observe(search_field);
|
|
4539
4551
|
$i7OB2$onCleanup(() => resizeObserver.disconnect());
|
|
4540
4552
|
}
|
|
@@ -4568,7 +4580,7 @@ function $024fbc0a2d796fad$export$b2539bed5023c21c(props) {
|
|
|
4568
4580
|
return $i7OB2$createComponent($024fbc0a2d796fad$var$TabsContext.Provider, {
|
|
4569
4581
|
value: new (0, $i7OB2$ListenableSet)(),
|
|
4570
4582
|
get children() {
|
|
4571
|
-
return $i7OB2$createComponent($024fbc0a2d796fad$var$ActualTabs, $i7OB2$
|
|
4583
|
+
return $i7OB2$createComponent($024fbc0a2d796fad$var$ActualTabs, $i7OB2$mergeProps(props, {
|
|
4572
4584
|
get children() {
|
|
4573
4585
|
return props.children;
|
|
4574
4586
|
}
|
|
@@ -4584,7 +4596,7 @@ function $024fbc0a2d796fad$var$ActualTabs(props) {
|
|
|
4584
4596
|
});
|
|
4585
4597
|
const isSelected = $i7OB2$createSelector(currentlySelected);
|
|
4586
4598
|
const owner = $i7OB2$getOwner();
|
|
4587
|
-
const updateTabsSignal = $i7OB2$
|
|
4599
|
+
const updateTabsSignal = $i7OB2$catchify1(() => $i7OB2$runWithOwner(owner, () => setTabsReactive([...ourTabsSet])));
|
|
4588
4600
|
const ourTabsSet = $024fbc0a2d796fad$var$useTabs();
|
|
4589
4601
|
const location = $i7OB2$use_href_accessor1();
|
|
4590
4602
|
const linkWithChangedHash = hash => {
|
|
@@ -4598,7 +4610,7 @@ function $024fbc0a2d796fad$var$ActualTabs(props) {
|
|
|
4598
4610
|
},
|
|
4599
4611
|
children: item => {
|
|
4600
4612
|
const weSelected = $i7OB2$createMemo(() => isSelected(item().id));
|
|
4601
|
-
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$
|
|
4613
|
+
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps({
|
|
4602
4614
|
get component() {
|
|
4603
4615
|
return props.AnchorComponent;
|
|
4604
4616
|
},
|
|
@@ -4677,7 +4689,7 @@ function $024fbc0a2d796fad$export$3e41faf802a29e71(props) {
|
|
|
4677
4689
|
if (!currentTabs) throw new Error("Tab must be a child of Tabs");
|
|
4678
4690
|
const id = $i7OB2$createUniqueId();
|
|
4679
4691
|
const ourSet = currentTabs;
|
|
4680
|
-
const extendedProps = $i7OB2$
|
|
4692
|
+
const extendedProps = $i7OB2$mergeProps1({
|
|
4681
4693
|
id: id
|
|
4682
4694
|
}, props);
|
|
4683
4695
|
ourSet.add(extendedProps);
|
|
@@ -4687,7 +4699,7 @@ function $024fbc0a2d796fad$export$3e41faf802a29e71(props) {
|
|
|
4687
4699
|
async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_opts, parent) {
|
|
4688
4700
|
const body = parent || document.body || (await (0, $i7OB2$observer).wait_for_element("body"));
|
|
4689
4701
|
let dispose_and_remove;
|
|
4690
|
-
const open_modal_ = $i7OB2$
|
|
4702
|
+
const open_modal_ = $i7OB2$catchify(async (extra_options_for_modal = {}, on_dispose) => {
|
|
4691
4703
|
// Below await is very intentional,
|
|
4692
4704
|
// The reason is that effects don't run in <Suspense> boundaries before they've resolved and this carries even through roots created, but if a modal is opened from a suspense boundary we still want the effects in it to run
|
|
4693
4705
|
// This is because the suspense is for the content in the page and not the modal (the modal goes above it)
|
|
@@ -4717,7 +4729,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
|
|
|
4717
4729
|
// Animation broke, close it this time
|
|
4718
4730
|
actually_close();else if (!animation_started && closing_animation) {
|
|
4719
4731
|
animation_started = +new Date();
|
|
4720
|
-
$i7OB2$
|
|
4732
|
+
$i7OB2$catchify(closing_animation)()?.then($i7OB2$catchify(actually_close));
|
|
4721
4733
|
} else actually_close();
|
|
4722
4734
|
};
|
|
4723
4735
|
return search_modal({
|
|
@@ -4730,7 +4742,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
|
|
|
4730
4742
|
});
|
|
4731
4743
|
body.append(...modal_els);
|
|
4732
4744
|
});
|
|
4733
|
-
const close_modal_ = $i7OB2$
|
|
4745
|
+
const close_modal_ = $i7OB2$catchify(() => {
|
|
4734
4746
|
if (dispose_and_remove) {
|
|
4735
4747
|
// modal is open
|
|
4736
4748
|
const dispose_fn = dispose_and_remove;
|
|
@@ -4747,7 +4759,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
|
|
|
4747
4759
|
function $ca6f574bd8772184$export$e183a13865960371(params_to_default_value, router_) {
|
|
4748
4760
|
const signals = {};
|
|
4749
4761
|
const entries = Object.entries(params_to_default_value);
|
|
4750
|
-
const event_handler = $i7OB2$
|
|
4762
|
+
const event_handler = $i7OB2$catchify((what_happened, args) => {
|
|
4751
4763
|
// Intentionally always update our signals to the history state to allow external control of SDK state for doing things like https://linear.app/depictai/issue/X-1432/is-this-possible-with-the-depict-sdk
|
|
4752
4764
|
if (what_happened !== "popstate") return;
|
|
4753
4765
|
// Had to undo the comment above,but leaving the history. Doing this because discovering why it doesn't work is a deja-vu and I don't want to have to discover it again.
|
|
@@ -4778,8 +4790,8 @@ function $ca6f574bd8772184$export$e183a13865960371(params_to_default_value, rout
|
|
|
4778
4790
|
});
|
|
4779
4791
|
// history_dot_state_to_state needs to update after its signals after url_state does BUT in the same task (might even have to be in the same tick in the microtask queue). If we'd use window.addEventListener("popstate") it would be guaranteed to be too late since each event listener has its own task
|
|
4780
4792
|
(0, $i7OB2$instant_exec_on_suspect_history_change).add(event_handler);
|
|
4781
|
-
$i7OB2$onCleanup($i7OB2$
|
|
4782
|
-
$i7OB2$createEffect($i7OB2$
|
|
4793
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => (0, $i7OB2$instant_exec_on_suspect_history_change).delete(event_handler)));
|
|
4794
|
+
$i7OB2$createEffect($i7OB2$catchify(() => $i7OB2$untrack($i7OB2$catchify(() => $ca6f574bd8772184$var$history_state_change(signals, entries, history.state))))); // we need this to run after reading the initial state from history.state to write the defaults to history.state
|
|
4783
4795
|
return signals;
|
|
4784
4796
|
}
|
|
4785
4797
|
function $ca6f574bd8772184$var$history_state_change(signals, entries, state) {
|
|
@@ -4913,7 +4925,7 @@ function $45d4ed34a22ab90c$export$6b35356958ae5587(props) {
|
|
|
4913
4925
|
// If someone clicks on a product card in the shop the look modal, close the modal the next time the href changes
|
|
4914
4926
|
for (const item of resolved()) {
|
|
4915
4927
|
if (!(item instanceof Element)) return;
|
|
4916
|
-
item.addEventListener("click", $i7OB2$
|
|
4928
|
+
item.addEventListener("click", $i7OB2$catchify(() =>
|
|
4917
4929
|
// run with modal owner so we don't do stuff after the modal closes
|
|
4918
4930
|
// can't have the owner of the product card as that gets disposed if the productId changes which might be too early (before location.href has changed)
|
|
4919
4931
|
$i7OB2$runWithOwner(props.modalOwner_, () => $i7OB2$createEffect($i7OB2$on(hrefWithoutHash, props.actually_close_modal_, {
|
|
@@ -5094,7 +5106,7 @@ function $8560c919ff763930$var$ActualShopTheLookButton(props) {
|
|
|
5094
5106
|
const button = $i7OB2$ssrElement("button", localProps.buttonAttributes, () => $i7OB2$escape(localProps?.buttonAttributes?.children) || "Shop the look", true);
|
|
5095
5107
|
$i7OB2$createEffect(() => button.style.display = displayStyleValue()); // Set our attributes like this, so we allow total control over the button from the outside via buttonAttributes
|
|
5096
5108
|
$i7OB2$createEffect(() => !hasAnythingToShow() && closeModal()); // close modal if we ever get into the state of having it open and not having anything to show
|
|
5097
|
-
$8560c919ff763930$var$modalProps = $i7OB2$
|
|
5109
|
+
$8560c919ff763930$var$modalProps = $i7OB2$mergeProps1(partForModal, {
|
|
5098
5110
|
products_to_shop_: products_to_shop_
|
|
5099
5111
|
});
|
|
5100
5112
|
button.addEventListener("click", openModal);
|
|
@@ -5122,7 +5134,7 @@ function $8560c919ff763930$var$actualSetupModal() {
|
|
|
5122
5134
|
(0, $90980bd87c9960f9$export$3064e1e8c6513da3).add(history_key);
|
|
5123
5135
|
const actually_close_modal_ = () => set_history_value(false);
|
|
5124
5136
|
const owner = $i7OB2$getOwner();
|
|
5125
|
-
$i7OB2$
|
|
5137
|
+
$i7OB2$catchify(async () => {
|
|
5126
5138
|
const {
|
|
5127
5139
|
open_modal_: open_modal_,
|
|
5128
5140
|
close_modal_: close_modal_
|
|
@@ -5195,15 +5207,15 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
|
|
|
5195
5207
|
$i7OB2$insert(details_, [summary_, $i7OB2$createComponent(ExpandingContainer, {
|
|
5196
5208
|
children: children
|
|
5197
5209
|
})], null);
|
|
5198
|
-
if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(details_).then($i7OB2$
|
|
5199
|
-
$i7OB2$createEffect($i7OB2$
|
|
5210
|
+
if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(details_).then($i7OB2$catchify(() => set_is_in_dom(true)));
|
|
5211
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
5200
5212
|
const is_open = is_open_memo();
|
|
5201
5213
|
if (!is_in_dom())
|
|
5202
5214
|
// wait with setting state until we're in DOM, animation won't work otherwise
|
|
5203
5215
|
return;
|
|
5204
5216
|
if (dont_animate_if_instant_open_ && fresh_component && !timeout_started) {
|
|
5205
5217
|
timeout_started = true;
|
|
5206
|
-
setTimeout($i7OB2$
|
|
5218
|
+
setTimeout($i7OB2$catchify(() => fresh_component = false));
|
|
5207
5219
|
}
|
|
5208
5220
|
if (is_open) {
|
|
5209
5221
|
details_.open = true; // open up the toggle so the animation can happen
|
|
@@ -5211,10 +5223,10 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
|
|
|
5211
5223
|
await expand(0, do_duration);
|
|
5212
5224
|
} else {
|
|
5213
5225
|
const animation = await collapse();
|
|
5214
|
-
animation?.addEventListener("finish", $i7OB2$
|
|
5226
|
+
animation?.addEventListener("finish", $i7OB2$catchify(() => details_.open = false));
|
|
5215
5227
|
}
|
|
5216
5228
|
}));
|
|
5217
|
-
details_.addEventListener("toggle", $i7OB2$
|
|
5229
|
+
details_.addEventListener("toggle", $i7OB2$catchify(() => {
|
|
5218
5230
|
const {
|
|
5219
5231
|
open: open
|
|
5220
5232
|
} = details_;
|
|
@@ -5224,11 +5236,11 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
|
|
|
5224
5236
|
}) // in case someone somehow toggles it without us intercepting it at least follow suit
|
|
5225
5237
|
);
|
|
5226
5238
|
|
|
5227
|
-
summary_.addEventListener("click", $i7OB2$
|
|
5239
|
+
summary_.addEventListener("click", $i7OB2$catchify(ev => {
|
|
5228
5240
|
ev.preventDefault();
|
|
5229
5241
|
toggle();
|
|
5230
5242
|
}));
|
|
5231
|
-
summary_.addEventListener("keydown", $i7OB2$
|
|
5243
|
+
summary_.addEventListener("keydown", $i7OB2$catchify(ev => {
|
|
5232
5244
|
const {
|
|
5233
5245
|
key: key
|
|
5234
5246
|
} = ev;
|
|
@@ -5451,9 +5463,9 @@ function $1adfe60f3a14a1d7$export$fecbb157621501bd({
|
|
|
5451
5463
|
});
|
|
5452
5464
|
const [is_in_dom, set_is_in_dom] = $i7OB2$createSignal(document.documentElement.contains(outmost_element));
|
|
5453
5465
|
const hidden = $i7OB2$createMemo(() => get_search_filters_open_() || get_search_sorting_open_());
|
|
5454
|
-
if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(outmost_element).then($i7OB2$
|
|
5466
|
+
if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(outmost_element).then($i7OB2$catchify(() => set_is_in_dom(true)));
|
|
5455
5467
|
outmost_element.classList.add("selected-filters");
|
|
5456
|
-
$i7OB2$createEffect($i7OB2$
|
|
5468
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
5457
5469
|
if (!is_in_dom())
|
|
5458
5470
|
// wait with setting state until we're in DOM, animation won't work otherwise
|
|
5459
5471
|
return;
|
|
@@ -5486,7 +5498,7 @@ const $49b79728e7d9e2a1$export$48513f6b9f8ce62d = props => {
|
|
|
5486
5498
|
};
|
|
5487
5499
|
var $f8a56ba74eedd0c6$var$_tmpl$ = '<path d="M10.173 5.548H5.5V.875c0-.075-.027-.14-.081-.193S5.301.601 5.226.601s-.14.027-.193.081-.081.118-.081.193v4.673H.274c-.075 0-.14.027-.193.081A.27.27 0 0 0 0 5.827c0 .075.027.14.081.193s.118.081.193.081h4.678v4.673c0 .075.027.14.081.193s.118.081.193.081.14-.027.193-.081.081-.118.081-.193V6.101h4.673a.27.27 0 0 0 .199-.081c.054-.054.08-.118.08-.193a.27.27 0 0 0-.279-.279z" fill="#000"></path>';
|
|
5488
5500
|
function $f8a56ba74eedd0c6$export$f21ab0717a89c77f(props) {
|
|
5489
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
5501
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps(props, {
|
|
5490
5502
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5491
5503
|
width: "11",
|
|
5492
5504
|
height: "12"
|
|
@@ -5600,7 +5612,7 @@ function $a4601e6bea3ed1e6$export$dd948f91abc3a1c4({
|
|
|
5600
5612
|
}) : []);
|
|
5601
5613
|
});
|
|
5602
5614
|
$i7OB2$onCleanup(() => set_view_more_button_below_group_());
|
|
5603
|
-
$i7OB2$createEffect($i7OB2$
|
|
5615
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
5604
5616
|
if (!togglable_rest()) {
|
|
5605
5617
|
await collapse();
|
|
5606
5618
|
return;
|
|
@@ -5712,7 +5724,7 @@ function $a6b08770e164eced$export$e0d834a0ad870cda({
|
|
|
5712
5724
|
});
|
|
5713
5725
|
$i7OB2$createComputed(() => {
|
|
5714
5726
|
clearTimeout(debounce_timeout);
|
|
5715
|
-
debounce_timeout = setTimeout($i7OB2$
|
|
5727
|
+
debounce_timeout = setTimeout($i7OB2$catchify(range => $i7OB2$untrack(() => {
|
|
5716
5728
|
const default_data = defaultRange();
|
|
5717
5729
|
const filter_object = {
|
|
5718
5730
|
op: filter_().op,
|
|
@@ -6269,7 +6281,7 @@ function $1c8cac76cb67e9af$export$a32086fa6616eafd({
|
|
|
6269
6281
|
}) : []);
|
|
6270
6282
|
});
|
|
6271
6283
|
$i7OB2$onCleanup(() => set_view_more_button_below_group());
|
|
6272
|
-
$i7OB2$createEffect($i7OB2$
|
|
6284
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
6273
6285
|
if (!some_top_level_are_hidden()) {
|
|
6274
6286
|
await collapse();
|
|
6275
6287
|
return;
|
|
@@ -6329,7 +6341,7 @@ function $1c8cac76cb67e9af$var$render_stuff(data, existing_filter, i18n_, filter
|
|
|
6329
6341
|
return value()?.is_checked_?.[0]?.() ?? false;
|
|
6330
6342
|
},
|
|
6331
6343
|
input_ref_: input => {
|
|
6332
|
-
input.addEventListener("change", $i7OB2$
|
|
6344
|
+
input.addEventListener("change", $i7OB2$catchify(() => $i7OB2$untrack(() => {
|
|
6333
6345
|
const {
|
|
6334
6346
|
checked: checked
|
|
6335
6347
|
} = input;
|
|
@@ -6404,7 +6416,7 @@ function $1c8cac76cb67e9af$var$batching_filter_state_syncer(props) {
|
|
|
6404
6416
|
existing_filter_: existing_filter_
|
|
6405
6417
|
} = props;
|
|
6406
6418
|
let sync_queued = false;
|
|
6407
|
-
const sync_fn = $i7OB2$
|
|
6419
|
+
const sync_fn = $i7OB2$catchify(async () => {
|
|
6408
6420
|
sync_queued = false;
|
|
6409
6421
|
// if we change, update filter state - next microtask, so that "reactions" to the change can process before we send it off to the API
|
|
6410
6422
|
const set_filter = existing_filter_();
|
|
@@ -6461,13 +6473,13 @@ function $1c8cac76cb67e9af$var$create_updating_signal({
|
|
|
6461
6473
|
$i7OB2$createComputed($i7OB2$on(read_checked, trigger_sync_, {
|
|
6462
6474
|
defer: true
|
|
6463
6475
|
}));
|
|
6464
|
-
$i7OB2$createComputed($i7OB2$on(read_checked, $i7OB2$
|
|
6476
|
+
$i7OB2$createComputed($i7OB2$on(read_checked, $i7OB2$catchify(new_value => {
|
|
6465
6477
|
if (updating_blocked) return;
|
|
6466
6478
|
for (const child of child_objects) child.is_checked_[1](new_value);
|
|
6467
6479
|
}), {
|
|
6468
6480
|
defer: true
|
|
6469
6481
|
}));
|
|
6470
|
-
$i7OB2$createEffect($i7OB2$on(get_child_object_values, $i7OB2$
|
|
6482
|
+
$i7OB2$createEffect($i7OB2$on(get_child_object_values, $i7OB2$catchify(() => {
|
|
6471
6483
|
const all_kids_checked = get_child_object_values.every(accessor => accessor());
|
|
6472
6484
|
if (all_kids_checked === read_checked()) return;
|
|
6473
6485
|
updating_blocked = true;
|
|
@@ -6630,7 +6642,7 @@ const $93716a9ad0dea854$export$414f6a19d38e655c = ({
|
|
|
6630
6642
|
const MakeButton = attributes => {
|
|
6631
6643
|
const label = $i7OB2$createMemo(() => value().name_ || value().value_ + "");
|
|
6632
6644
|
const count_zero = $i7OB2$createMemo(() => value().count_ === 0);
|
|
6633
|
-
return $i7OB2$ssrElement("button", $i7OB2$
|
|
6645
|
+
return $i7OB2$ssrElement("button", $i7OB2$mergeProps(attributes, {
|
|
6634
6646
|
get disabled() {
|
|
6635
6647
|
return count_zero() && !is_selected();
|
|
6636
6648
|
},
|
|
@@ -6892,7 +6904,7 @@ function $e731d52d97444b7c$export$82ed4b28ecb67608({
|
|
|
6892
6904
|
}) : []);
|
|
6893
6905
|
});
|
|
6894
6906
|
$i7OB2$onCleanup(() => set_view_more_button_below_group_());
|
|
6895
|
-
$i7OB2$createEffect($i7OB2$
|
|
6907
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
6896
6908
|
if (!togglable_rest()) {
|
|
6897
6909
|
await collapse();
|
|
6898
6910
|
set_having_expanding_in_dom(false); // Once animation has finished, remove expanding from DOM
|
|
@@ -6932,7 +6944,7 @@ var $12497d09ef87296e$export$2e2bcd8739ae039 = {
|
|
|
6932
6944
|
};
|
|
6933
6945
|
var $9bc34983fc5f7bdb$var$_tmpl$ = '<path d="M4.617 12.738a.48.48 0 0 1-.164-.027c-.051-.023-.094-.055-.129-.098L.125 8.414A.39.39 0 0 1 0 8.117c0-.113.039-.211.125-.293s.18-.125.293-.125.215.043.297.125l3.902 3.902L16.086.262c.082-.082.18-.125.297-.125s.211.043.293.125.125.184.125.301-.043.215-.125.297L4.914 12.613c-.039.043-.086.078-.141.098s-.102.027-.156.027zm0 0"></path>';
|
|
6934
6946
|
function $9bc34983fc5f7bdb$export$f2ca6fc699ca1fb4(props = {}) {
|
|
6935
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
6947
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
6936
6948
|
xmlns: "http://www.w3.org/2000/svg",
|
|
6937
6949
|
width: "16.8",
|
|
6938
6950
|
height: "14"
|
|
@@ -7575,7 +7587,7 @@ const $a6e23a834336fc19$export$824dde41348efed1 = /*@__PURE__*/(() => {
|
|
|
7575
7587
|
|
|
7576
7588
|
const observe_to_signal = (element, setter) => {
|
|
7577
7589
|
const computed_style = getComputedStyle(element);
|
|
7578
|
-
const resize_observer = new ResizeObserver($i7OB2$
|
|
7590
|
+
const resize_observer = new ResizeObserver($i7OB2$catchify(() => {
|
|
7579
7591
|
setter(element.getBoundingClientRect().width + parseFloat(computed_style.marginLeft) + parseFloat(computed_style.marginRight) + parseFloat(computed_style.borderRightWidth) + parseFloat(computed_style.borderLeftWidth));
|
|
7580
7592
|
}));
|
|
7581
7593
|
resize_observer.observe(element);
|
|
@@ -7813,7 +7825,7 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
|
|
|
7813
7825
|
return this.#cache_objs[endpoint] ||= {
|
|
7814
7826
|
in_progress_: {},
|
|
7815
7827
|
cache_: {},
|
|
7816
|
-
finalization_registry_: this.#supports_finalization_registry ? new FinalizationRegistry($i7OB2$
|
|
7828
|
+
finalization_registry_: this.#supports_finalization_registry ? new FinalizationRegistry($i7OB2$catchify(key => {
|
|
7817
7829
|
const our_cache = this.#cache_objs[endpoint].cache_;
|
|
7818
7830
|
$i7OB2$dlog1("[Search API]: removing", key, "from", our_cache);
|
|
7819
7831
|
delete our_cache[key];
|
|
@@ -7863,7 +7875,7 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
|
|
|
7863
7875
|
// Filter out our transformed ancestors
|
|
7864
7876
|
const transformedAncestors = Object.fromEntries(transformerResult.filter(item => item.is_suggestion === false).map(item => [item.listing_id, item]));
|
|
7865
7877
|
// Add the now transformed ancestors into the ancestors of the listing suggestions
|
|
7866
|
-
const transformedSuggestions = transformerResult.filter(item => item.is_suggestion !== false).map(item => $i7OB2$
|
|
7878
|
+
const transformedSuggestions = transformerResult.filter(item => item.is_suggestion !== false).map(item => $i7OB2$mergeProps1(item, {
|
|
7867
7879
|
// Use mergeProps instead of spread since page_url and other properties could be a getter that solid components should call
|
|
7868
7880
|
ancestors: item.ancestors.map(ancestor => {
|
|
7869
7881
|
const newAncestor = transformedAncestors[ancestor.listing_id];
|
|
@@ -7961,11 +7973,11 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
|
|
|
7961
7973
|
result = $e5014ccd0b76d9f4$export$967e966fca9515e(result);
|
|
7962
7974
|
cache_obj.cache_[body] = new WeakRef(result);
|
|
7963
7975
|
resolve_in_progress(result);
|
|
7964
|
-
setTimeout($i7OB2$
|
|
7976
|
+
setTimeout($i7OB2$catchify(() => {
|
|
7965
7977
|
if (this.#supports_finalization_registry) cache_obj.finalization_registry_.register(result, body); // delete key from cache when value (WeakRefs) are collected
|
|
7966
7978
|
else
|
|
7967
7979
|
// delete things from cache after 5 minutes, so it doesn't get too heavy
|
|
7968
|
-
setTimeout($i7OB2$
|
|
7980
|
+
setTimeout($i7OB2$catchify(() => delete cache_obj.cache_[body]), 300000);
|
|
7969
7981
|
}), 60000 // cache values for at least 60 seconds
|
|
7970
7982
|
);
|
|
7971
7983
|
|
|
@@ -8096,7 +8108,7 @@ function $ccd5db07a3a069c5$export$477caf01aecaeb2a(options) {
|
|
|
8096
8108
|
const [get_selected_filters_, set_selected_filters] = selected_filters_;
|
|
8097
8109
|
const [get_has_sideways_filter_clearing_flag_, set_has_sideways_filter_clearing_flag] = sideways_filter_clearing_flag_;
|
|
8098
8110
|
const [get_current_href, set_current_href] = $i7OB2$createSignal(globalThis?.location?.href ?? "https://example.com");
|
|
8099
|
-
const history_change_handler = $i7OB2$
|
|
8111
|
+
const history_change_handler = $i7OB2$catchify(() => set_current_href(location.href));
|
|
8100
8112
|
const owner = $i7OB2$getOwner() || $i7OB2$createRoot(() => $i7OB2$getOwner());
|
|
8101
8113
|
const {
|
|
8102
8114
|
sorting_query_param_: sorting_query_param_,
|
|
@@ -8397,7 +8409,7 @@ function $172e1b898d457050$export$7de92c4c2205ebf3({
|
|
|
8397
8409
|
return (0, $7747fe1a8c5652e3$export$6c9030e511152266) + get_showing_recommendation_rows() * Math.max(...possible_num_columns);
|
|
8398
8410
|
});
|
|
8399
8411
|
// Don't tear down elements every time one updates the page - don't put them within <Show>
|
|
8400
|
-
const elements = $i7OB2$ssr($172e1b898d457050$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(i18n_.search_recs_title_()), $i7OB2$escape($a458486f22b22f63$export$a2cc176055f8f08()), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$
|
|
8412
|
+
const elements = $i7OB2$ssr($172e1b898d457050$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(i18n_.search_recs_title_()), $i7OB2$escape($a458486f22b22f63$export$a2cc176055f8f08()), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$mergeProps({
|
|
8401
8413
|
rows: rows_object,
|
|
8402
8414
|
layout: "grid",
|
|
8403
8415
|
element_attributes: {
|
|
@@ -8465,13 +8477,13 @@ function $bf52d9f9eebd1938$export$5196e4c01fa56fcb({
|
|
|
8465
8477
|
}) {
|
|
8466
8478
|
let close_toast_;
|
|
8467
8479
|
const stay_open_promise = new Promise(r => close_toast_ = r);
|
|
8468
|
-
$i7OB2$
|
|
8480
|
+
$i7OB2$catchify(async () => {
|
|
8469
8481
|
const closing_animation_duration = 300; // ms
|
|
8470
8482
|
const element = $i7OB2$ssrElement("div", more_attributes, () => $i7OB2$escape(children), true);
|
|
8471
8483
|
const [, set_is_showing_toast] = $bf52d9f9eebd1938$export$22970a0140fc759c;
|
|
8472
8484
|
// if this is a memory leak the garbage collector is stupid - does someone know?
|
|
8473
|
-
for (const ev of ["pointerover", "focusin"]) element.addEventListener(ev, $i7OB2$
|
|
8474
|
-
for (const ev of ["pointerout", "focusout"]) element.addEventListener(ev, $i7OB2$
|
|
8485
|
+
for (const ev of ["pointerover", "focusin"]) element.addEventListener(ev, $i7OB2$catchify(() => closing_animation.pause()));
|
|
8486
|
+
for (const ev of ["pointerout", "focusout"]) element.addEventListener(ev, $i7OB2$catchify(() => closing_animation.play()));
|
|
8475
8487
|
const body = await (0, $i7OB2$observer).wait_for_element("body");
|
|
8476
8488
|
const x_translate = "translateX(-50%) ";
|
|
8477
8489
|
let remove_keyboard_listener;
|
|
@@ -8496,7 +8508,7 @@ function $bf52d9f9eebd1938$export$5196e4c01fa56fcb({
|
|
|
8496
8508
|
// let other toasts close us if they open while we're still here
|
|
8497
8509
|
$bf52d9f9eebd1938$var$closing_functions.add(close_toast_);
|
|
8498
8510
|
set_is_showing_toast(true);
|
|
8499
|
-
const handler = $i7OB2$
|
|
8511
|
+
const handler = $i7OB2$catchify(({
|
|
8500
8512
|
key: key
|
|
8501
8513
|
}) => {
|
|
8502
8514
|
if (key === "Escape")
|
|
@@ -8629,7 +8641,7 @@ function $48d7e4a9707315b6$export$e026af0c7b64ea5f({
|
|
|
8629
8641
|
}, {
|
|
8630
8642
|
defer: true
|
|
8631
8643
|
}));
|
|
8632
|
-
$i7OB2$createComputed($i7OB2$on(get_search_query_, $i7OB2$
|
|
8644
|
+
$i7OB2$createComputed($i7OB2$on(get_search_query_, $i7OB2$catchify(() => {
|
|
8633
8645
|
// when a query was submitted, clear filters if clear was pressed before
|
|
8634
8646
|
const clear_value = $i7OB2$untrack(get_clear_filters_next_submit);
|
|
8635
8647
|
if (clear_value) {
|
|
@@ -8656,11 +8668,11 @@ function $21f51c14cb3f586f$export$84bba84a7b837187(read_search_query) {
|
|
|
8656
8668
|
const key = "depict_searches";
|
|
8657
8669
|
const previous_searches = $i7OB2$createSignal(JSON.parse(ls[key] || "[]"));
|
|
8658
8670
|
const [read_previous_searches, write_previous_searches] = previous_searches;
|
|
8659
|
-
$i7OB2$createEffect($i7OB2$
|
|
8671
|
+
$i7OB2$createEffect($i7OB2$catchify(() => {
|
|
8660
8672
|
const json_encoded = JSON.stringify(read_previous_searches());
|
|
8661
8673
|
if (ls[key] !== json_encoded) ls[key] = json_encoded;
|
|
8662
8674
|
}));
|
|
8663
|
-
$i7OB2$createComputed($i7OB2$
|
|
8675
|
+
$i7OB2$createComputed($i7OB2$catchify(() => {
|
|
8664
8676
|
const searches = $i7OB2$untrack(read_previous_searches);
|
|
8665
8677
|
const current_query = read_search_query();
|
|
8666
8678
|
if (!current_query)
|
|
@@ -8703,7 +8715,7 @@ async function $bfd908d13d90934c$export$e16630ecb9644a1c({
|
|
|
8703
8715
|
after_submit_?.();
|
|
8704
8716
|
}
|
|
8705
8717
|
function $8f9120a1ca151e6a$export$205efb947c7ffd78(handler, passive = true, override_element) {
|
|
8706
|
-
const catchified_handler = $i7OB2$
|
|
8718
|
+
const catchified_handler = $i7OB2$catchify(handler);
|
|
8707
8719
|
const owner = $i7OB2$getOwner();
|
|
8708
8720
|
// Some customers (e.g. equestrian) have `height: 100%` and/or `overflow-x: hidden` on the body, which means that scroll events won't get dispatched on `window`. The pages who get it on <body> won't get it on `window` and vice-versa, so there shouldn't be a worry about duplicate calling of the handler.
|
|
8709
8721
|
// Use observer in case that this gets called before body exists
|
|
@@ -8745,7 +8757,7 @@ function $d68658730065de95$export$181cceed5c91919e(callback, alsoRaF, passiveLis
|
|
|
8745
8757
|
$i7OB2$createEffect(() => {
|
|
8746
8758
|
if (alsoRaF?.()) {
|
|
8747
8759
|
let disposed = false;
|
|
8748
|
-
const fn = $i7OB2$
|
|
8760
|
+
const fn = $i7OB2$catchify(() => {
|
|
8749
8761
|
if (disposed) return;
|
|
8750
8762
|
probablyCallCallback();
|
|
8751
8763
|
requestAnimationFrame(fn);
|
|
@@ -8758,10 +8770,10 @@ function $d68658730065de95$export$181cceed5c91919e(callback, alsoRaF, passiveLis
|
|
|
8758
8770
|
// "resize" doesn't fire sometimes when it should, also it doesn't when showing/hiding scrollbars which disabling scrolling does
|
|
8759
8771
|
// this works
|
|
8760
8772
|
// keeping resize just in case
|
|
8761
|
-
const resize_resize_observer = new ResizeObserver($i7OB2$
|
|
8773
|
+
const resize_resize_observer = new ResizeObserver($i7OB2$catchify(probablyCallCallback));
|
|
8762
8774
|
resize_resize_observer.observe(document.documentElement);
|
|
8763
8775
|
(0, $i7OB2$observer).wait_for_element("body").then(resize_resize_observer.observe.bind(resize_resize_observer));
|
|
8764
|
-
$i7OB2$onCleanup($i7OB2$
|
|
8776
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => resize_resize_observer.disconnect()));
|
|
8765
8777
|
return probablyCallCallback;
|
|
8766
8778
|
}
|
|
8767
8779
|
const $b6d5529b253681aa$export$3f238c96c45e6cc6 = 1;
|
|
@@ -8792,7 +8804,7 @@ function $b6d5529b253681aa$export$b3ad617e9036868({
|
|
|
8792
8804
|
}, pollAlignment);
|
|
8793
8805
|
let ro;
|
|
8794
8806
|
if (alignment & $b6d5529b253681aa$export$902f8b4a7dae5d78 || alignment & $b6d5529b253681aa$export$5097308c5200105a) {
|
|
8795
|
-
ro = new ResizeObserver($i7OB2$
|
|
8807
|
+
ro = new ResizeObserver($i7OB2$catchify(records => {
|
|
8796
8808
|
records.forEach(({
|
|
8797
8809
|
contentRect: {
|
|
8798
8810
|
width: width
|
|
@@ -8815,7 +8827,7 @@ function $b6d5529b253681aa$export$b3ad617e9036868({
|
|
|
8815
8827
|
}));
|
|
8816
8828
|
ro.observe(input_field);
|
|
8817
8829
|
}
|
|
8818
|
-
$i7OB2$onCleanup($i7OB2$
|
|
8830
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => ro?.disconnect()));
|
|
8819
8831
|
return ensureAlignedPosition;
|
|
8820
8832
|
}
|
|
8821
8833
|
const $fc5a12f3a857ca30$var$get_available_range = (available_filters_, search_for_field) => {
|
|
@@ -9015,7 +9027,7 @@ function $6db49ca163afa2c3$export$83fd5de5504a7a67({
|
|
|
9015
9027
|
fill: "forwards",
|
|
9016
9028
|
easing: "ease-in-out"
|
|
9017
9029
|
});
|
|
9018
|
-
animation.addEventListener("finish", $i7OB2$
|
|
9030
|
+
animation.addEventListener("finish", $i7OB2$catchify(() => {
|
|
9019
9031
|
if (unpermit_when_possible) set_permitted_to_show(false);
|
|
9020
9032
|
animation = undefined;
|
|
9021
9033
|
element.style.display = "none";
|
|
@@ -9080,7 +9092,7 @@ function $056f6ac0a6caa919$export$5e4aed86c12acdd9({
|
|
|
9080
9092
|
is_first_load = true;
|
|
9081
9093
|
});
|
|
9082
9094
|
// percentage_in_view_ has equals: false so it should update even when set to the same value. That is to make sure that if the user bounces around below the "viewport" of our product listing we still start fetching as soon as is_loading_more becomes false again and we get IntersectionObserverEntries
|
|
9083
|
-
$i7OB2$createEffect($i7OB2$
|
|
9095
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
9084
9096
|
const be_above_percentage = is_first_load ? 50 : 75; // if first load, load earlier
|
|
9085
9097
|
if (percentage_in_view_() < be_above_percentage || is_loading_more) return;
|
|
9086
9098
|
if (!get_last_cursor()) {
|
|
@@ -9209,7 +9221,7 @@ var $6dee9211e57ac31a$var$_tmpl$ = ["<style", ' type="text/css">', "</style>"];
|
|
|
9209
9221
|
const $6dee9211e57ac31a$export$c500183c31c2b22e = "--spans-columns";
|
|
9210
9222
|
function $6dee9211e57ac31a$export$ab6b147eec64fea5(props) {
|
|
9211
9223
|
const container_class = "x" + $i7OB2$createUniqueId();
|
|
9212
|
-
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$
|
|
9224
|
+
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps(() => props.element_attributes, {
|
|
9213
9225
|
classList: {
|
|
9214
9226
|
[container_class]: true
|
|
9215
9227
|
}
|
|
@@ -9506,7 +9518,7 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
|
|
|
9506
9518
|
} = slider;
|
|
9507
9519
|
const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
|
|
9508
9520
|
// Do like this, so we don't have to call mergeProps ourselves
|
|
9509
|
-
$i7OB2$createComponent(Layout, $i7OB2$
|
|
9521
|
+
$i7OB2$createComponent(Layout, $i7OB2$mergeProps(layout_options_, {
|
|
9510
9522
|
rows: "all",
|
|
9511
9523
|
get cols_at_size() {
|
|
9512
9524
|
return modified_cols_at_size();
|
|
@@ -9580,7 +9592,7 @@ function $f8c929beb82c512b$export$9dd50d35b9d94fdf({
|
|
|
9580
9592
|
number_of_results_: number_of_results_,
|
|
9581
9593
|
type: type
|
|
9582
9594
|
}) {
|
|
9583
|
-
const contents = $i7OB2$createMemo($i7OB2$
|
|
9595
|
+
const contents = $i7OB2$createMemo($i7OB2$catchify(() => {
|
|
9584
9596
|
const q = get_search_query_();
|
|
9585
9597
|
return i18n_[type === $f8c929beb82c512b$export$2452208c79fe93ea.content ? "get_showing_pages_for_" : "get_showing_results_for_"]()($i7OB2$ssr($f8c929beb82c512b$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(q)), $i7OB2$ssr($f8c929beb82c512b$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(formatted_number_of_results_())), !!q, number_of_results_());
|
|
9586
9598
|
}));
|
|
@@ -9652,7 +9664,7 @@ function $68a258a92b88f02f$export$1f1775a58da589b5({
|
|
|
9652
9664
|
var $e1bb71e65e01a3a0$var$_tmpl$ = '<path d="M6.199 10.254a.35.35 0 0 0-.496 0L3.5 12.453V.348a.35.35 0 0 0-.7 0v12.105L.598 10.254c-.137-.137-.359-.137-.492 0a.35.35 0 0 0 0 .492l2.797 2.801a.35.35 0 0 0 .496 0L6.2 10.746c.137-.137.137-.355 0-.492zM9.449 3.5H8.051a.35.35 0 0 1-.352-.352V1.75c0-.191.156-.352.352-.352h1.398c.195 0 .352.16.352.352v1.398a.35.35 0 0 1-.352.352zm-1.051-.699h.703v-.699h-.703zm0 0"></path>',
|
|
9653
9665
|
$e1bb71e65e01a3a0$var$_tmpl$2 = '<path d="M10.852 6.301H8.051a.35.35 0 0 1-.352-.352V4.551a.35.35 0 0 1 .352-.352h2.801a.35.35 0 0 1 .348.352v1.398a.35.35 0 0 1-.348.352zm-2.453-.699H10.5v-.703H8.398zm3.851 3.5H8.051c-.195 0-.352-.16-.352-.352V7.352A.35.35 0 0 1 8.051 7h4.199c.191 0 .352.156.352.352V8.75c0 .191-.16.352-.352.352zm-3.852-.703h3.5V7.7h-3.5zm5.25 3.499H8.051a.35.35 0 0 1-.352-.348v-1.402a.35.35 0 0 1 .352-.348h5.598a.35.35 0 0 1 .352.348v1.402a.35.35 0 0 1-.352.348zm-5.25-.699H13.3V10.5H8.398zm0 0"></path>';
|
|
9654
9666
|
function $e1bb71e65e01a3a0$export$da32f7add8a22e86(props = {}) {
|
|
9655
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
9667
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
9656
9668
|
xmlns: "http://www.w3.org/2000/svg",
|
|
9657
9669
|
width: "14",
|
|
9658
9670
|
height: "14",
|
|
@@ -9661,7 +9673,7 @@ function $e1bb71e65e01a3a0$export$da32f7add8a22e86(props = {}) {
|
|
|
9661
9673
|
}
|
|
9662
9674
|
var $05fbe84eb34564ec$var$_tmpl$ = '<path d="M6.199 10.254a.35.35 0 0 0-.496 0L3.5 12.453V.348a.35.35 0 0 0-.7 0v12.105L.598 10.254c-.137-.137-.359-.137-.492 0a.35.35 0 0 0 0 .492l2.797 2.801a.35.35 0 0 0 .496 0L6.2 10.746c.137-.137.137-.355 0-.492zm3.25 1.644H8.051a.35.35 0 0 1-.352-.348v-1.402a.35.35 0 0 1 .352-.348h1.398a.35.35 0 0 1 .352.348v1.402a.35.35 0 0 1-.352.348zm-1.051-.699h.703V10.5h-.703zm2.454-2.097H8.051c-.195 0-.352-.16-.352-.352V7.352A.35.35 0 0 1 8.051 7h2.801a.35.35 0 0 1 .348.352V8.75c0 .191-.156.352-.348.352zm-2.453-.703H10.5V7.7H8.398zm3.851-2.098H8.051a.35.35 0 0 1-.352-.352V4.551a.35.35 0 0 1 .352-.352h4.199c.191 0 .352.156.352.352v1.398c0 .195-.16.352-.352.352zm-3.852-.699h3.5v-.703h-3.5zm5.25-2.102H8.051a.35.35 0 0 1-.352-.352V1.75c0-.191.156-.352.352-.352h5.598c.195 0 .352.16.352.352v1.398a.35.35 0 0 1-.352.352zm-5.25-.699H13.3v-.699H8.398zm0 0"></path>';
|
|
9663
9675
|
function $05fbe84eb34564ec$export$d10e63059ddb9fd4(props = {}) {
|
|
9664
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
9676
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
9665
9677
|
xmlns: "http://www.w3.org/2000/svg",
|
|
9666
9678
|
width: "14",
|
|
9667
9679
|
height: "14",
|
|
@@ -9727,7 +9739,7 @@ function $757dac7f7c6c5241$export$9bf11afa910f536e({
|
|
|
9727
9739
|
set_search_sorting_open(true);
|
|
9728
9740
|
}
|
|
9729
9741
|
});
|
|
9730
|
-
$i7OB2$onCleanup($i7OB2$
|
|
9742
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => {
|
|
9731
9743
|
if (!sorting_expanded() && !filters_expanded()) {
|
|
9732
9744
|
set_search_filters_open(false);
|
|
9733
9745
|
set_search_sorting_open(false);
|
|
@@ -9774,7 +9786,7 @@ function $757dac7f7c6c5241$export$9bf11afa910f536e({
|
|
|
9774
9786
|
})));
|
|
9775
9787
|
},
|
|
9776
9788
|
get children() {
|
|
9777
|
-
return $i7OB2$ssr($757dac7f7c6c5241$var$_tmpl$5, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $fab07f52c9861732$export$3f1a388cc0d8fed7), $i7OB2$
|
|
9789
|
+
return $i7OB2$ssr($757dac7f7c6c5241$var$_tmpl$5, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $fab07f52c9861732$export$3f1a388cc0d8fed7), $i7OB2$mergeProps(args_for_filtering_, {
|
|
9778
9790
|
are_in_modal_: true
|
|
9779
9791
|
}))));
|
|
9780
9792
|
}
|
|
@@ -9836,7 +9848,7 @@ function $cdea4cf8c5c071ef$export$d7841e452f2e59a8({
|
|
|
9836
9848
|
const [sorting_open, set_sorting_open] = search_sorting_open_;
|
|
9837
9849
|
const [get_current_sorting_] = current_sorting_;
|
|
9838
9850
|
const [is_small, set_is_small] = $i7OB2$createSignal(false);
|
|
9839
|
-
const dismiss_modal_ = $i7OB2$
|
|
9851
|
+
const dismiss_modal_ = $i7OB2$catchify(() => {
|
|
9840
9852
|
set_filters_open(false);
|
|
9841
9853
|
set_sorting_open(false);
|
|
9842
9854
|
});
|
|
@@ -9922,7 +9934,7 @@ function $cdea4cf8c5c071ef$export$d7841e452f2e59a8({
|
|
|
9922
9934
|
}));else set_extra_els_in_results_container_($i7OB2$ssr($cdea4cf8c5c071ef$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $68a258a92b88f02f$export$1f1775a58da589b5), sorting_options))));
|
|
9923
9935
|
}
|
|
9924
9936
|
});
|
|
9925
|
-
$i7OB2$
|
|
9937
|
+
$i7OB2$catchify(async () => {
|
|
9926
9938
|
({
|
|
9927
9939
|
open_modal_: open_modal_,
|
|
9928
9940
|
close_modal_: close_modal_
|
|
@@ -10088,7 +10100,7 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
|
|
|
10088
10100
|
}
|
|
10089
10101
|
old_pos = new_pos;
|
|
10090
10102
|
});
|
|
10091
|
-
const touchstart_handler = $i7OB2$
|
|
10103
|
+
const touchstart_handler = $i7OB2$catchify(e => {
|
|
10092
10104
|
is_in_touch_scroll = true;
|
|
10093
10105
|
if (e.touches.length === 1) {
|
|
10094
10106
|
// we had no touches but then we got some. Adding a new touch cancels the inertia. We are in a new touch so do reset the diff
|
|
@@ -10096,12 +10108,12 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
|
|
|
10096
10108
|
diff_over_second_or_touch = 0;
|
|
10097
10109
|
}
|
|
10098
10110
|
});
|
|
10099
|
-
const touchend_handler = $i7OB2$
|
|
10111
|
+
const touchend_handler = $i7OB2$catchify(e => {
|
|
10100
10112
|
if (e.touches.length === 0)
|
|
10101
10113
|
// scroll gesture of any type (pinch can also be used as scroll, etc.) ended
|
|
10102
10114
|
inertia_timeout = setTimeout(
|
|
10103
10115
|
// inertia ends after 500ms (educated guess)
|
|
10104
|
-
$i7OB2$
|
|
10116
|
+
$i7OB2$catchify(() => {
|
|
10105
10117
|
is_in_touch_scroll = false;
|
|
10106
10118
|
diff_over_second_or_touch = 0;
|
|
10107
10119
|
}), 500);
|
|
@@ -10119,9 +10131,9 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
|
|
|
10119
10131
|
const everything_closed = !get_search_filters_open_() && !get_search_sorting_open_();
|
|
10120
10132
|
if (!$i7OB2$untrack(modal_is_closed) && everything_closed)
|
|
10121
10133
|
// I think the point of this is to delay the animation a bit IIRC
|
|
10122
|
-
timeout = setTimeout($i7OB2$
|
|
10134
|
+
timeout = setTimeout($i7OB2$catchify(() => set_if_modal_is_closed(true)), 200);else set_if_modal_is_closed(everything_closed);
|
|
10123
10135
|
});
|
|
10124
|
-
$i7OB2$createComputed($i7OB2$
|
|
10136
|
+
$i7OB2$createComputed($i7OB2$catchify(async () => {
|
|
10125
10137
|
const element = sort_and_filter_element_();
|
|
10126
10138
|
if (!element) return;
|
|
10127
10139
|
await (0, $i7OB2$observer).wait_for_element(element);
|
|
@@ -10140,7 +10152,7 @@ function $587cd61972788655$export$210f130a61ac1e8d(fn) {
|
|
|
10140
10152
|
let last_queued;
|
|
10141
10153
|
let last_value;
|
|
10142
10154
|
let initial_run = true;
|
|
10143
|
-
$i7OB2$createComputed($i7OB2$
|
|
10155
|
+
$i7OB2$createComputed($i7OB2$catchify(async () => {
|
|
10144
10156
|
last_value = fn();
|
|
10145
10157
|
if (initial_run) {
|
|
10146
10158
|
initial_run = false;
|
|
@@ -10187,7 +10199,7 @@ function $641bba2917fe862b$export$6e49da55e449af7c({
|
|
|
10187
10199
|
}]); // get rid of old data the browser saves the old state and will restore it later on
|
|
10188
10200
|
};
|
|
10189
10201
|
|
|
10190
|
-
$i7OB2$createComputed($i7OB2$
|
|
10202
|
+
$i7OB2$createComputed($i7OB2$catchify(() => {
|
|
10191
10203
|
const last_result = get_last_result_in_viewport_();
|
|
10192
10204
|
if (last_result == undefined || last_result <= 0 || last_result == Infinity) return;
|
|
10193
10205
|
if (isNaN(last_result)) {
|
|
@@ -10214,7 +10226,7 @@ function $641bba2917fe862b$export$6e49da55e449af7c({
|
|
|
10214
10226
|
set_to_later = last_result;
|
|
10215
10227
|
// If a delayed push timeout is already running, just changing the value that will be pushed is sufficient
|
|
10216
10228
|
if (timeout) return;
|
|
10217
|
-
timeout = setTimeout($i7OB2$
|
|
10229
|
+
timeout = setTimeout($i7OB2$catchify(() => {
|
|
10218
10230
|
timeout = undefined;
|
|
10219
10231
|
last_time_history_changed = +new Date();
|
|
10220
10232
|
set_min_results_loaded(set_to_later);
|
|
@@ -10316,7 +10328,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
|
|
|
10316
10328
|
if (!result) return;
|
|
10317
10329
|
return {
|
|
10318
10330
|
href: result.page_url,
|
|
10319
|
-
onClick: $i7OB2$
|
|
10331
|
+
onClick: $i7OB2$catchify(ev => router_.navigate_.go_to_({
|
|
10320
10332
|
new_url_: result.page_url,
|
|
10321
10333
|
is_replace_: false,
|
|
10322
10334
|
event_: ev
|
|
@@ -10330,7 +10342,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
|
|
|
10330
10342
|
if (content_result_) return $i7OB2$ssrElement("a", attributes, () => $i7OB2$escape(children), true);
|
|
10331
10343
|
return $i7OB2$ssrElement("div", attributes, () => $i7OB2$escape(children), true);
|
|
10332
10344
|
};
|
|
10333
|
-
return $i7OB2$ssr($b2bf2cdcff8142d8$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$
|
|
10345
|
+
return $i7OB2$ssr($b2bf2cdcff8142d8$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps(make_link_attributes, {
|
|
10334
10346
|
tabIndex: "-1",
|
|
10335
10347
|
get children() {
|
|
10336
10348
|
return $i7OB2$createComponent((0, $190927650b4840eb$export$605674723bcc715c), {
|
|
@@ -10338,7 +10350,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
|
|
|
10338
10350
|
height: "28"
|
|
10339
10351
|
});
|
|
10340
10352
|
}
|
|
10341
|
-
}))), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$
|
|
10353
|
+
}))), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps({
|
|
10342
10354
|
"class": "content-title line-clamp"
|
|
10343
10355
|
}, make_link_attributes, {
|
|
10344
10356
|
get title() {
|
|
@@ -10479,7 +10491,7 @@ function $49de9d31aeea1b5e$export$6d0c9c22f6652669({
|
|
|
10479
10491
|
return (0, $f8c929beb82c512b$export$2452208c79fe93ea).content;
|
|
10480
10492
|
},
|
|
10481
10493
|
number_of_results_: num_results
|
|
10482
|
-
})), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$
|
|
10494
|
+
})), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$mergeProps({
|
|
10483
10495
|
layout: "grid",
|
|
10484
10496
|
element_attributes: {
|
|
10485
10497
|
class: "cards"
|
|
@@ -10677,7 +10689,7 @@ function $0e562a5b247b1fc2$export$44f738469d5570cf({
|
|
|
10677
10689
|
// We might only have changed the left position which align_field doesn't know about, make it poll the position for a while
|
|
10678
10690
|
setPollAlignment_(true);
|
|
10679
10691
|
if (disableResizePollingTimeout) clearTimeout(disableResizePollingTimeout);
|
|
10680
|
-
disableResizePollingTimeout = setTimeout($i7OB2$
|
|
10692
|
+
disableResizePollingTimeout = setTimeout($i7OB2$catchify(() => {
|
|
10681
10693
|
setPollAlignment_(false);
|
|
10682
10694
|
disableResizePollingTimeout = undefined;
|
|
10683
10695
|
}), 1000);
|
|
@@ -10809,7 +10821,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10809
10821
|
} : {})
|
|
10810
10822
|
};
|
|
10811
10823
|
});
|
|
10812
|
-
const [search_results_] = $i7OB2$createResource(search_query_base_, $i7OB2$
|
|
10824
|
+
const [search_results_] = $i7OB2$createResource(search_query_base_, $i7OB2$catchify(async base_query => {
|
|
10813
10825
|
set_all_products_loaded(false);
|
|
10814
10826
|
// only first page of results
|
|
10815
10827
|
return await $641bba2917fe862b$export$cc42dd29bf655ab6({
|
|
@@ -10848,7 +10860,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10848
10860
|
const [, setModalFieldStyle] = modal_field_style;
|
|
10849
10861
|
const [, setModalBackdropStyle] = modal_backdrop_style;
|
|
10850
10862
|
const [get_search_field_elements, set_search_field_elements] = $i7OB2$createSignal();
|
|
10851
|
-
const SafeSearchField = $i7OB2$
|
|
10863
|
+
const SafeSearchField = $i7OB2$catchify((0, $5285d2814d0fac0c$export$b94867ecbd698f21));
|
|
10852
10864
|
const [sort_or_filter_open_, set_sort_or_filter_open_] = $i7OB2$createSignal(false);
|
|
10853
10865
|
const [desktop_filter_elements_, set_desktop_filter_elements] = $i7OB2$createSignal();
|
|
10854
10866
|
const n_hits = $i7OB2$createMemo(() => search_results_()?.n_hits);
|
|
@@ -10858,7 +10870,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10858
10870
|
});
|
|
10859
10871
|
const [sort_and_filter_element_, set_sort_and_filter_element_] = $i7OB2$createSignal();
|
|
10860
10872
|
const no_results_text_ = $i7OB2$createMemo(() => (search_results_()?.content_search_links?.length ? i18n_.no_products_ : i18n_.no_results_text_)());
|
|
10861
|
-
const results_for = $i7OB2$createComponent((0, $f8c929beb82c512b$export$9dd50d35b9d94fdf), $i7OB2$
|
|
10873
|
+
const results_for = $i7OB2$createComponent((0, $f8c929beb82c512b$export$9dd50d35b9d94fdf), $i7OB2$mergeProps({
|
|
10862
10874
|
get type() {
|
|
10863
10875
|
return (0, $f8c929beb82c512b$export$2452208c79fe93ea).products;
|
|
10864
10876
|
},
|
|
@@ -10898,7 +10910,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10898
10910
|
$i7OB2$runWithOwner(owner, () => results_filters[1](matches ? [results_for, filters_opener] : $i7OB2$ssr($7097477c78a89208$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(results_for), $i7OB2$escape(filters_opener))));
|
|
10899
10911
|
}).remove);
|
|
10900
10912
|
$2ab89d64b7f1d5ef$export$d31a1a1a83ad9413(search_results_, selected_filters_);
|
|
10901
|
-
$i7OB2$
|
|
10913
|
+
$i7OB2$catchify((0, $641bba2917fe862b$export$6e49da55e449af7c))({
|
|
10902
10914
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
10903
10915
|
last_result_in_viewport_: last_result_in_viewport_,
|
|
10904
10916
|
id_: get_search_query_,
|
|
@@ -10944,8 +10956,8 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10944
10956
|
setModalBodyStyle({});
|
|
10945
10957
|
modalAlignmentSignalsRef_?.(alignmentSignals_);
|
|
10946
10958
|
const [pollAlignment, setPollAlignment_] = $i7OB2$createSignal(false);
|
|
10947
|
-
const align_position = $i7OB2$
|
|
10948
|
-
div_with_field_class.addEventListener("click", $i7OB2$
|
|
10959
|
+
const align_position = $i7OB2$catchify((0, $b6d5529b253681aa$export$b3ad617e9036868))(alignmentSignals_, search_field, (0, $b6d5529b253681aa$export$3f238c96c45e6cc6) | (0, $b6d5529b253681aa$export$7895aadd1956b1c7) | (modalVersionUsed_ === 1 ? (0, $b6d5529b253681aa$export$902f8b4a7dae5d78) : (0, $b6d5529b253681aa$export$6060bc6bee850eb6) | (0, $b6d5529b253681aa$export$5097308c5200105a)), true, pollAlignment);
|
|
10960
|
+
div_with_field_class.addEventListener("click", $i7OB2$catchify(e => {
|
|
10949
10961
|
const target = e.target;
|
|
10950
10962
|
const sel = ".submit";
|
|
10951
10963
|
if (target?.matches?.(sel) || target?.closest?.(sel))
|
|
@@ -11282,7 +11294,7 @@ class $806c97b931758897$export$ac6237957a15b3f0 {
|
|
|
11282
11294
|
BackIcon_: BackIcon_
|
|
11283
11295
|
});
|
|
11284
11296
|
$90980bd87c9960f9$export$5162a71f252e6122();
|
|
11285
|
-
$i7OB2$
|
|
11297
|
+
$i7OB2$catchify(async () => {
|
|
11286
11298
|
const {
|
|
11287
11299
|
open_modal_: open_modal_,
|
|
11288
11300
|
close_modal_: close_modal_
|
|
@@ -11523,7 +11535,7 @@ function $806c97b931758897$export$f2dc7e4e4aa11abb(props) {
|
|
|
11523
11535
|
function $4ca91518c9a35379$export$828dcdd425fd3231(aligner) {
|
|
11524
11536
|
const style_element = document.createElement("style");
|
|
11525
11537
|
document.head.append(style_element);
|
|
11526
|
-
const resize_observer = new ResizeObserver($i7OB2$
|
|
11538
|
+
const resize_observer = new ResizeObserver($i7OB2$catchify(() => {
|
|
11527
11539
|
const styles = $926b1b5ba2239356$export$1233ca167bf71f9a({
|
|
11528
11540
|
".depict.plp .depict-search-modal .search-field": {
|
|
11529
11541
|
"height": `${aligner?.clientHeight}px`
|
|
@@ -11592,7 +11604,7 @@ const $6891c018a834cfdd$export$d86a33413558014e = openModalParams => {
|
|
|
11592
11604
|
}, dispose_aligner];
|
|
11593
11605
|
};
|
|
11594
11606
|
function $6e8944558258054f$export$d0596b5cae35ad4(open_search) {
|
|
11595
|
-
const handler = $i7OB2$
|
|
11607
|
+
const handler = $i7OB2$catchify(e => {
|
|
11596
11608
|
const {
|
|
11597
11609
|
key: key,
|
|
11598
11610
|
target: target
|
|
@@ -11611,7 +11623,7 @@ function $6e8944558258054f$export$d0596b5cae35ad4(open_search) {
|
|
|
11611
11623
|
function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
|
|
11612
11624
|
let old_url;
|
|
11613
11625
|
let disconnect_link_observer;
|
|
11614
|
-
const link_handler = $i7OB2$
|
|
11626
|
+
const link_handler = $i7OB2$catchify(e => {
|
|
11615
11627
|
const link = e.currentTarget || e.target;
|
|
11616
11628
|
if (link.href === old_url) {
|
|
11617
11629
|
history.pushState(history.state, "", link.href);
|
|
@@ -11620,7 +11632,7 @@ function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
|
|
|
11620
11632
|
});
|
|
11621
11633
|
let remove_added_listeners;
|
|
11622
11634
|
let resolve_remove_added_listeners;
|
|
11623
|
-
pr.addEventListener("open", $i7OB2$
|
|
11635
|
+
pr.addEventListener("open", $i7OB2$catchify(() => {
|
|
11624
11636
|
remove_added_listeners = new Promise(r => resolve_remove_added_listeners = r);
|
|
11625
11637
|
disconnect_link_observer = (0, $i7OB2$observer).onexists("a", async ({
|
|
11626
11638
|
element: element
|
|
@@ -11630,11 +11642,11 @@ function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
|
|
|
11630
11642
|
element.removeEventListener("click", link_handler);
|
|
11631
11643
|
});
|
|
11632
11644
|
}));
|
|
11633
|
-
pr.addEventListener("close", $i7OB2$
|
|
11645
|
+
pr.addEventListener("close", $i7OB2$catchify(() => {
|
|
11634
11646
|
disconnect_link_observer?.();
|
|
11635
11647
|
resolve_remove_added_listeners?.();
|
|
11636
11648
|
}));
|
|
11637
|
-
$i7OB2$
|
|
11649
|
+
$i7OB2$catchify(async () => {
|
|
11638
11650
|
for await (const href of (0, $i7OB2$href_change_ipns)) if (!pr.is_page_(new URL(href))) old_url = href;
|
|
11639
11651
|
})();
|
|
11640
11652
|
}
|
|
@@ -11646,7 +11658,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11646
11658
|
static #reverting_permitted = true;
|
|
11647
11659
|
static #visited_urls = /*@__PURE__*/(() => {
|
|
11648
11660
|
// Keep track of all URLs that have been visited since the document that was initially loaded (loaded means the process where the browser creates a new `document` and `window` object).
|
|
11649
|
-
$i7OB2$
|
|
11661
|
+
$i7OB2$catchify(async () => {
|
|
11650
11662
|
// Static initialization blocks aren't supported in MobileSafari yet, otherwise this would be one.
|
|
11651
11663
|
// I don't think we want to ship a library that users are *forced* to transpile, it should run in the newest version of all major browsers. So we'll just use a function wrapper for now (adding "last 1 ios version" to the build target does a bunch of other unneeded transpilations).
|
|
11652
11664
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks
|
|
@@ -11664,7 +11676,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11664
11676
|
async #listen() {
|
|
11665
11677
|
const [exit_ipns, exitable_ipns] = $i7OB2$make_asyncIterable_exiter((0, $i7OB2$href_change_ipns));
|
|
11666
11678
|
this.#stop_listening = exit_ipns;
|
|
11667
|
-
const caught_page_check_fn = $i7OB2$
|
|
11679
|
+
const caught_page_check_fn = $i7OB2$catchify(this.is_page_, "page check failed");
|
|
11668
11680
|
for await (const href of exitable_ipns) {
|
|
11669
11681
|
const url = new URL(href);
|
|
11670
11682
|
if (!caught_page_check_fn(url)) {
|
|
@@ -11682,17 +11694,17 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11682
11694
|
this.addEventListener("close", dispose, {
|
|
11683
11695
|
once: true
|
|
11684
11696
|
});
|
|
11685
|
-
return $i7OB2$
|
|
11697
|
+
return $i7OB2$catchify(this.render_, "rendering failed")() || [];
|
|
11686
11698
|
});
|
|
11687
11699
|
}
|
|
11688
|
-
#unload = /*@__PURE__*/$i7OB2$
|
|
11700
|
+
#unload = /*@__PURE__*/$i7OB2$catchify(() => {
|
|
11689
11701
|
if (!this.#is_open) return;
|
|
11690
11702
|
this.#disconnect_observer?.();
|
|
11691
11703
|
if ($753e9b2889a47c89$export$3ccaa27d81dd8556.#reverting_permitted) while (this.#revert_fns.length) this.#revert_fns.pop()?.();
|
|
11692
11704
|
this.#is_open = false;
|
|
11693
11705
|
this.dispatchEvent(new CustomEvent("close"));
|
|
11694
11706
|
}, "failed to close page");
|
|
11695
|
-
#load = /*@__PURE__*/$i7OB2$
|
|
11707
|
+
#load = /*@__PURE__*/$i7OB2$catchify(async els => {
|
|
11696
11708
|
this.#is_open = true;
|
|
11697
11709
|
// So that #load doesn't get called again
|
|
11698
11710
|
let set_should_stay_inserted;
|
|
@@ -11742,7 +11754,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11742
11754
|
}, "failed to open page");
|
|
11743
11755
|
#empty_page_bugfix() {
|
|
11744
11756
|
// Called when a "page" is "opened" using PageReplacer
|
|
11745
|
-
const on_maybe_popstate = $i7OB2$
|
|
11757
|
+
const on_maybe_popstate = $i7OB2$catchify(what_happened => {
|
|
11746
11758
|
if (what_happened !== "popstate") return;
|
|
11747
11759
|
const cleaned_current_url = $753e9b2889a47c89$var$clean_url(location.href);
|
|
11748
11760
|
if (!$753e9b2889a47c89$export$3ccaa27d81dd8556.#visited_urls.has(cleaned_current_url)) {
|
|
@@ -11844,7 +11856,7 @@ function $58b3487626e85ece$export$316f6f283ae64765(props) {
|
|
|
11844
11856
|
field_: $i7OB2$createSignal({}),
|
|
11845
11857
|
backdrop_: backdropAlignmentSignal_
|
|
11846
11858
|
};
|
|
11847
|
-
const defaultHandler = $i7OB2$
|
|
11859
|
+
const defaultHandler = $i7OB2$catchify(e => {
|
|
11848
11860
|
const {
|
|
11849
11861
|
modalVersionUsed_: modalVersionUsed_
|
|
11850
11862
|
} = shared_properties;
|
|
@@ -11971,7 +11983,7 @@ function $06edf3aec9073663$export$466cdc317043f6cb({
|
|
|
11971
11983
|
}];
|
|
11972
11984
|
$i7OB2$createComputed(() => {
|
|
11973
11985
|
if (place_holdey_quicklinks_data()?.[0]?.listing_id) {
|
|
11974
|
-
if (last_was_placeholder) queueMicrotask($i7OB2$
|
|
11986
|
+
if (last_was_placeholder) queueMicrotask($i7OB2$catchify(() => {
|
|
11975
11987
|
sliding_element?.scrollTo({
|
|
11976
11988
|
left: 0
|
|
11977
11989
|
}); // for some reason we land one element to the right after placeholder rendering otherwise
|
|
@@ -12037,7 +12049,7 @@ function $06edf3aec9073663$export$466cdc317043f6cb({
|
|
|
12037
12049
|
} else if (!(intersecting_items_object[selected_index()]?.intersectionRatio >= 0.95)) {
|
|
12038
12050
|
// negated larger than to handle left side of comparison being undefined
|
|
12039
12051
|
let done_work = false;
|
|
12040
|
-
$i7OB2$runWithOwner(owner, () => $i7OB2$createComputed($i7OB2$
|
|
12052
|
+
$i7OB2$runWithOwner(owner, () => $i7OB2$createComputed($i7OB2$catchify(() => {
|
|
12041
12053
|
if (done_work || !Array.isArray(quicklinks_data_())) return;
|
|
12042
12054
|
const sel_index = selected_index();
|
|
12043
12055
|
const target_element = sel_index >= 0 ? sel_index : 0;
|
|
@@ -12182,7 +12194,7 @@ function $e7fce80abe608e01$export$3945d6db2dfd3d12({
|
|
|
12182
12194
|
const handler = () => allow_filter_clearing = false;
|
|
12183
12195
|
window.addEventListener("popstate", handler); // popstate only gets called when using back/forwards button of browser or the history navigate to achieve the same, but not on pushState or replaceState
|
|
12184
12196
|
$i7OB2$onCleanup(() => window.removeEventListener("popstate", handler));
|
|
12185
|
-
$i7OB2$createEffect($i7OB2$on(crumb_data_, $i7OB2$
|
|
12197
|
+
$i7OB2$createEffect($i7OB2$on(crumb_data_, $i7OB2$catchify(new_crumb_data => {
|
|
12186
12198
|
const id_of_new_data = id_to_query_for_();
|
|
12187
12199
|
const type_of_id_of_new_data = id_type_();
|
|
12188
12200
|
if (allow_filter_clearing && previous_crumb_data && new_crumb_data && (id_of_new_data !== id_when_we_got_previous_data.id_ || type_of_id_of_new_data !== id_when_we_got_previous_data.type_)) {
|
|
@@ -12262,11 +12274,11 @@ function $f916989c4b1be9f7$export$780a853d15174484({
|
|
|
12262
12274
|
}) {
|
|
12263
12275
|
if (type === "image") {
|
|
12264
12276
|
const [wrapperSize, setWrapperSize] = $i7OB2$createSignal();
|
|
12265
|
-
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$
|
|
12277
|
+
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps({
|
|
12266
12278
|
component: link ? "a" : "div",
|
|
12267
12279
|
"class": "d-standard-content-wrapper",
|
|
12268
12280
|
get onClick() {
|
|
12269
|
-
return $i7OB2$
|
|
12281
|
+
return $i7OB2$catchify1(ev => link && router_.navigate_.go_to_({
|
|
12270
12282
|
new_url_: link,
|
|
12271
12283
|
is_replace_: false,
|
|
12272
12284
|
event_: ev
|
|
@@ -12277,9 +12289,8 @@ function $f916989c4b1be9f7$export$780a853d15174484({
|
|
|
12277
12289
|
}, {
|
|
12278
12290
|
get children() {
|
|
12279
12291
|
return $i7OB2$createComponent((0, $70bb27cc6be01fc7$export$140423fa4bfb6d63), {
|
|
12280
|
-
|
|
12281
|
-
|
|
12282
|
-
},
|
|
12292
|
+
size: () => wrapperSize()?.[0]?.() || 0,
|
|
12293
|
+
sizeHeight: () => wrapperSize()?.[1]?.() || 0,
|
|
12283
12294
|
src: mediaUrl,
|
|
12284
12295
|
"class": "d-standard-content"
|
|
12285
12296
|
});
|
|
@@ -12391,7 +12402,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12391
12402
|
// Make "Get products in listing" request to get products in listing
|
|
12392
12403
|
const [plp_products_] = $i7OB2$createResource(products_query_base_,
|
|
12393
12404
|
// only first page of results, unless the history state says we should load more (can't do that in load more thing, I tested, they need to be added at once for the browser to not give up scroll restoration)
|
|
12394
|
-
$i7OB2$
|
|
12405
|
+
$i7OB2$catchify1(base_query => $641bba2917fe862b$export$cc42dd29bf655ab6({
|
|
12395
12406
|
id_: $i7OB2$untrack(id_to_query_for_),
|
|
12396
12407
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
12397
12408
|
min_products_to_fetch_: min_products_to_fetch_,
|
|
@@ -12411,7 +12422,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12411
12422
|
id_type_: id_type_()
|
|
12412
12423
|
}));
|
|
12413
12424
|
// Make "Get Listing" request to get quicklinks, breadcrumbs, title, etc
|
|
12414
|
-
const [plp_meta] = $i7OB2$createResource(meta_query_base, $i7OB2$
|
|
12425
|
+
const [plp_meta] = $i7OB2$createResource(meta_query_base, $i7OB2$catchify1(query => depict_api_.get_listing(query)));
|
|
12415
12426
|
const contentBlocksByRow = $486360b09f0d5729$export$7a92d995f1bf3592(history_content_blocks_, plp_meta, content_blocks_by_row_, router_);
|
|
12416
12427
|
const available_sortings_ = $i7OB2$createMemo(() => plp_products_()?.sorts?.map(sort => ({
|
|
12417
12428
|
...sort,
|
|
@@ -12521,7 +12532,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12521
12532
|
filterModalParent_: filterModalParent_,
|
|
12522
12533
|
...extra_sort_and_filter_args_
|
|
12523
12534
|
});
|
|
12524
|
-
$i7OB2$
|
|
12535
|
+
$i7OB2$catchify1((0, $641bba2917fe862b$export$6e49da55e449af7c))({
|
|
12525
12536
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
12526
12537
|
last_result_in_viewport_: last_result_in_viewport_,
|
|
12527
12538
|
id_: id_to_query_for_,
|
|
@@ -12534,7 +12545,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12534
12545
|
$i7OB2$createComputed(() => {
|
|
12535
12546
|
if (plp_products_.loading) set_can_write_scroll_restoration(false);else if (plp_products_()) set_can_write_scroll_restoration(true);
|
|
12536
12547
|
});
|
|
12537
|
-
$i7OB2$createRenderEffect($i7OB2$
|
|
12548
|
+
$i7OB2$createRenderEffect($i7OB2$catchify1(async () => {
|
|
12538
12549
|
const slim = is_slim_();
|
|
12539
12550
|
const only_show_filters_opener = only_show_filters_opener_?.();
|
|
12540
12551
|
const owner = $i7OB2$getOwner();
|
|
@@ -12673,7 +12684,7 @@ function $df5d81d0fe61ff21$var$add_us_to_crumbs(plp_meta) {
|
|
|
12673
12684
|
return $i7OB2$createMemo(() => {
|
|
12674
12685
|
const api_value = plp_meta()?.breadcrumbs;
|
|
12675
12686
|
if (!api_value) return api_value;
|
|
12676
|
-
return [...api_value, $i7OB2$
|
|
12687
|
+
return [...api_value, $i7OB2$mergeProps1(plp_meta(), {
|
|
12677
12688
|
get page_url() {
|
|
12678
12689
|
return href_accessor();
|
|
12679
12690
|
}
|
|
@@ -12781,4 +12792,4 @@ function $442f32a4d80abbde$export$e2bf8ce7779e827e(props) {
|
|
|
12781
12792
|
}, "Entire CategoryPage failed");
|
|
12782
12793
|
}
|
|
12783
12794
|
$i7OB2$add_to_version_info("ui", (0, $ec291e0010116877$export$83d89fbfd8236492));
|
|
12784
|
-
export { $a63fa9cb46ed211b$export$f98b8d5ea7207a1 as setExtraDisplayTransformers, $a63fa9cb46ed211b$export$b2d94be4f02525b2 as getExtraDisplayTransformers, $e7a7eb102ddc0c79$export$92aa5d691d588f3f as remap_blocks_to_index, $4eb0a704f8f30273$export$d4d96868197be50e as useMobileHover, $5e3d278ef4c80cd7$export$54299a3c81f5425 as useVisibilityState, $f32e14878e75af51$export$eaa625fb39439e37 as useSlidableInformation, $f091294da861020c$export$80bb7300ce6a8be3 as useProductCardIsVisible, $f091294da861020c$export$f223d69ed12f5fb7 as CurrentlyIntersectingContext, $24e27fab9c821b86$export$5bad61ecde080b1f as useExpandingContainerReactive, $07ef910e8ef6b783$export$2c9f9bf2092486aa as LooksSliderOrGrid, $e9d1d09be9e6471e$export$44809a8a3e867e30 as LookCard, $4fd2ba03703a7d92$export$7e1297a3a19f10d8 as PseudoRouter, $de6ccd37192b5fc2$export$83bb9af5671e1dbe as promiseSafeStructuredClone, $90980bd87c9960f9$export$5162a71f252e6122 as preserve_items_in_history_dot_state, $90980bd87c9960f9$export$3064e1e8c6513da3 as prefixes_to_preserve_in_history_dot_state, $a281666e5c15c2ec$export$29d28dadc2d6b631 as allowNativeNavigation, $66db7a014e20802e$export$1ea76ea778b880dd as modalVersionSymbol, $136f1d4d6c7ba6ac$export$e417c49320921907 as createDeparallelizedNoDropResource, $d8dbf52fea1773e2$export$f50b88e2a00918b5 as throw_globally, $42912431795f188e$export$9265e66f26f8e383 as ClassicSearchModal, $500a16dd18ee5a71$export$b0c55aa2e87c4be7 as SearchModalV2, $70bb27cc6be01fc7$export$9d4a4b669b1929ab as ModernResponsiveContainedImage, $024fbc0a2d796fad$export$3e41faf802a29e71 as Tab, $024fbc0a2d796fad$export$b2539bed5023c21c as Tabs, $8560c919ff763930$export$d4973c31938cbfd1 as ShopTheLookButton, $ca6f574bd8772184$export$e183a13865960371 as history_dot_state_to_state, $4147651646da990a$export$916e6850778505f6 as strip_encoded_filter_and_sort, $4147651646da990a$export$58aa3f171519b6d7 as encode_filters, $4147651646da990a$export$f934fa24c3a86811 as decode_filters, $4147651646da990a$export$62acb285a7579555 as encode_sorting, $4147651646da990a$export$766e9676e74997d3 as decode_sorting, $660070e2a394b3c3$export$d7b7ab832c20e2f4 as shopifyContainedImageContextSymbol, $011607bdf658f807$export$e68cff63f76bd15b as ListingProvider, $011607bdf658f807$export$8d0c4fdbb05a2f2e as useListing, $b6440e72ed83671a$export$11354f017ddc9790 as ProductCardIndexProvider, $b6440e72ed83671a$export$e3faf4d95300054f as useProductCardIndex, $660070e2a394b3c3$export$e4b984597b71e989 as ShopifyContainedImage, $f32e14878e75af51$export$6649caad96ef8870 as SlidableItems, $2449872a62a75a20$export$ebdc3711f7e02ccd as make_accurate_width_accessor, $ee116da074deb002$export$9574e176201e5e8d as RecommendationSlider, $9ea5383493360761$export$9756467d34d91cdb as RecommendationGrid, $e8ffe11ed01df0fe$export$6e5611bc7e57e477 as ShopifyResponsiveImg, $
|
|
12795
|
+
export { $70bb27cc6be01fc7$export$140423fa4bfb6d63 as ModernResponsiveImage, $a63fa9cb46ed211b$export$f98b8d5ea7207a1 as setExtraDisplayTransformers, $a63fa9cb46ed211b$export$b2d94be4f02525b2 as getExtraDisplayTransformers, $e7a7eb102ddc0c79$export$92aa5d691d588f3f as remap_blocks_to_index, $4eb0a704f8f30273$export$d4d96868197be50e as useMobileHover, $5e3d278ef4c80cd7$export$54299a3c81f5425 as useVisibilityState, $f32e14878e75af51$export$eaa625fb39439e37 as useSlidableInformation, $f091294da861020c$export$80bb7300ce6a8be3 as useProductCardIsVisible, $f091294da861020c$export$f223d69ed12f5fb7 as CurrentlyIntersectingContext, $24e27fab9c821b86$export$5bad61ecde080b1f as useExpandingContainerReactive, $07ef910e8ef6b783$export$2c9f9bf2092486aa as LooksSliderOrGrid, $e9d1d09be9e6471e$export$44809a8a3e867e30 as LookCard, $4fd2ba03703a7d92$export$7e1297a3a19f10d8 as PseudoRouter, $de6ccd37192b5fc2$export$83bb9af5671e1dbe as promiseSafeStructuredClone, $90980bd87c9960f9$export$5162a71f252e6122 as preserve_items_in_history_dot_state, $90980bd87c9960f9$export$3064e1e8c6513da3 as prefixes_to_preserve_in_history_dot_state, $a281666e5c15c2ec$export$29d28dadc2d6b631 as allowNativeNavigation, $66db7a014e20802e$export$1ea76ea778b880dd as modalVersionSymbol, $136f1d4d6c7ba6ac$export$e417c49320921907 as createDeparallelizedNoDropResource, $d8dbf52fea1773e2$export$f50b88e2a00918b5 as throw_globally, $42912431795f188e$export$9265e66f26f8e383 as ClassicSearchModal, $500a16dd18ee5a71$export$b0c55aa2e87c4be7 as SearchModalV2, $70bb27cc6be01fc7$export$9d4a4b669b1929ab as ModernResponsiveContainedImage, $024fbc0a2d796fad$export$3e41faf802a29e71 as Tab, $024fbc0a2d796fad$export$b2539bed5023c21c as Tabs, $8560c919ff763930$export$d4973c31938cbfd1 as ShopTheLookButton, $ca6f574bd8772184$export$e183a13865960371 as history_dot_state_to_state, $4147651646da990a$export$916e6850778505f6 as strip_encoded_filter_and_sort, $4147651646da990a$export$58aa3f171519b6d7 as encode_filters, $4147651646da990a$export$f934fa24c3a86811 as decode_filters, $4147651646da990a$export$62acb285a7579555 as encode_sorting, $4147651646da990a$export$766e9676e74997d3 as decode_sorting, $660070e2a394b3c3$export$d7b7ab832c20e2f4 as shopifyContainedImageContextSymbol, $011607bdf658f807$export$e68cff63f76bd15b as ListingProvider, $011607bdf658f807$export$8d0c4fdbb05a2f2e as useListing, $b6440e72ed83671a$export$11354f017ddc9790 as ProductCardIndexProvider, $b6440e72ed83671a$export$e3faf4d95300054f as useProductCardIndex, $660070e2a394b3c3$export$e4b984597b71e989 as ShopifyContainedImage, $f32e14878e75af51$export$6649caad96ef8870 as SlidableItems, $2449872a62a75a20$export$ebdc3711f7e02ccd as make_accurate_width_accessor, $ee116da074deb002$export$9574e176201e5e8d as RecommendationSlider, $9ea5383493360761$export$9756467d34d91cdb as RecommendationGrid, $e8ffe11ed01df0fe$export$6e5611bc7e57e477 as ShopifyResponsiveImg, $f18d425032111270$export$94026ee33dbabc26 as ImageContainer, $b7436a6d1fd64e3b$export$b69d0d92862de18b as SentryErrorBoundary, $b7436a6d1fd64e3b$export$240ecf5363d76c0f as ExtraSentryContextProvider, $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d as ExpandingDetails, $c16e74cfe125bb05$export$f091cbac892643a4 as accessor_of_object_to_object_with_accessor_values, $1adfe60f3a14a1d7$export$fecbb157621501bd as SelectedFilters, $fab07f52c9861732$export$3f1a388cc0d8fed7 as FilterBody, $5efb5894079b220e$export$b288c38ae3fddb56 as create_modified_filters, $c8d5ff4524619fcd$export$d21e32dfedac04be as SolidLayout, $c8d5ff4524619fcd$export$445d8d3f5f706a40 as SolidLayoutWithProvidedElement, $194bd6b8e4c59830$export$79b1565500412d9b as general_modal_abstraction, $19976a74d273070d$export$3b621d86b1566b2 as CrossIcon, $fbbadcb080ad1d4a$export$8be2714ec7f169ee as GenericSliderArrowButton, $a0f0e923bad68a9b$export$58e808b1db15d3bc as fetchDepictRecommendations, $e4615ecd1849548f$export$b91cec6bdc6b32a1 as CategoryTitle, $a6e23a834336fc19$export$824dde41348efed1 as embedded_num_products, $4b2134398dfa83fa$export$c1a6b039e689a58e as get_listings, $961b5c64bef4662f$export$f34314aa9505732e as DepictCategory, $806c97b931758897$export$ac6237957a15b3f0 as DepictSearch, $806c97b931758897$export$bde3eb976dfded9 as get_search_query_updating_blocked_signal, $806c97b931758897$export$f2dc7e4e4aa11abb as SearchPage, $4fd48cb976bf1789$export$aa14a9f43128f61f as ProductCardError, $6891c018a834cfdd$export$d86a33413558014e as open_modal_with_alignment, $bb15dfb548a7666e$export$ee1733d9a8495996 as DefaultInstantCardPlaceholder, $b6d5529b253681aa$export$b3ad617e9036868 as align_field, $b6d5529b253681aa$export$3f238c96c45e6cc6 as ALIGN_TOP, $b6d5529b253681aa$export$902f8b4a7dae5d78 as ALIGN_WIDTH_ON_MODAL, $b6d5529b253681aa$export$7895aadd1956b1c7 as ALIGN_LEFT, $b6d5529b253681aa$export$6060bc6bee850eb6 as SET_CENTERED_LEFT, $b5cccc8ee7d24677$export$6daf8749b65a1b77 as convert_sdk_cols_at_size_to_layout, $926b1b5ba2239356$export$1233ca167bf71f9a as styles_to_valid_css_string, $aea1edf92433e81e$export$fe334901e8bebd57 as disable_scrolling, $6e8944558258054f$export$d0596b5cae35ad4 as open_search_with_shift_slash, $7fa23e2a0079eca4$export$e015ed2f2950f2e3 as DepictAPI, $dc9262ef6f786812$export$d9f36cf74e24d595 as media_query_to_accessor, $6936724b9e0b98d5$export$689e204eadb33baf as setup_fast_leave, $bf52d9f9eebd1938$export$5196e4c01fa56fcb as show_toast, $8c0f86cb3e266eeb$export$a71e92cfbb498adc as SolidFormatPrice, $4ca91518c9a35379$export$828dcdd425fd3231 as connect_search_field_height_to_aligner_height, $d20eff0aadc28983$export$acb3eaade4b23afd as BasePlaceholder, $d134eae24341b4a1$export$89c6019e4baa40b1 as TextPlaceholder, $7f60f09116a3fe61$export$3f37af283f8fb843 as ImagePlaceholder, $753e9b2889a47c89$export$3ccaa27d81dd8556 as PageReplacer, $4690a06c8489dcd0$export$864d304a0bc46829 as defaultGridSpacing, $4690a06c8489dcd0$export$c3834fa86c616831 as defaultColsAtSize, $4690a06c8489dcd0$export$7bf543b9d9be2c22 as defaultCategoryTitlePlugin, $ec291e0010116877$export$83d89fbfd8236492 as version, $58b3487626e85ece$export$316f6f283ae64765 as SearchField, $feffae76d8dc0135$export$5b7c3ce0ebe51f86 as BreadCrumbs, $feffae76d8dc0135$export$de035477d6fef996 as QuickLinks, $442f32a4d80abbde$export$e2bf8ce7779e827e as CategoryPage, $a444a52bafa0dacc$export$54c6d6ff54e72743 as makeSizeAccessors };
|