@depict-ai/ui 4.7.32 → 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 +1648 -1615
- package/ES10/index.d.ts +182 -165
- package/ES10/index.js +1866 -1836
- package/latest/index.cjs +1322 -1296
- package/latest/index.d.ts +182 -165
- package/latest/index.js +1805 -1782
- package/package.json +1 -1
- package/server/ES10/index.cjs +588 -555
- package/server/ES10/index.d.ts +182 -165
- package/server/ES10/index.js +748 -718
- package/server/latest/index.cjs +598 -572
- package/server/latest/index.d.ts +182 -165
- package/server/latest/index.js +756 -733
package/server/latest/index.js
CHANGED
|
@@ -1,36 +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
|
-
|
|
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
|
+
});
|
|
17
20
|
}
|
|
18
|
-
function $
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}));
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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;
|
|
31
36
|
}
|
|
32
37
|
});
|
|
33
|
-
|
|
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);
|
|
34
247
|
}
|
|
35
248
|
var $d20eff0aadc28983$var$_tmpl$ = ["<span", ' class="', '" style="', '"></span>'];
|
|
36
249
|
function $d20eff0aadc28983$export$acb3eaade4b23afd(props) {
|
|
@@ -68,31 +281,202 @@ function $7f60f09116a3fe61$export$3f37af283f8fb843(props) {
|
|
|
68
281
|
}
|
|
69
282
|
});
|
|
70
283
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
const get_wrapped_blocks_ = $e7a7eb102ddc0c79$var$wrap_blocks_in_div(content_blocks, n_cols_currently_showing_);
|
|
476
|
+
$i7OB2$createComputed(() => {
|
|
477
|
+
// Update our styling if a content block forces some items that should be in the top row into a lower one, so we can generate margin-top declarations for them
|
|
478
|
+
const top_row_block = get_wrapped_blocks_()[0];
|
|
479
|
+
const blocks_in_top_row_taken = top_row_block?.span_columns;
|
|
96
480
|
if (blocks_in_top_row_taken == undefined) {
|
|
97
481
|
// Fall back to zero if no content block in top row, since then no blocks in top row are taken
|
|
98
482
|
set_top_row_shortened_by_(0);
|
|
@@ -198,7 +582,7 @@ function $e7a7eb102ddc0c79$var$wrap_blocks_in_div(rendered_content_blocks, max_s
|
|
|
198
582
|
})));
|
|
199
583
|
}
|
|
200
584
|
});
|
|
201
|
-
return $i7OB2$
|
|
585
|
+
return $i7OB2$mergeProps1(block, {
|
|
202
586
|
// Create content divs for the blocks with as much fine-grained diffing as possible?
|
|
203
587
|
content: () => {
|
|
204
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
|
|
@@ -269,11 +653,11 @@ function $4eb0a704f8f30273$var$doHeavyCalculations() {
|
|
|
269
653
|
const [, setElementsHovered] = $4eb0a704f8f30273$var$elementsHoveredSignal;
|
|
270
654
|
const elementAtTouch = new Map();
|
|
271
655
|
const updateSet = () => setElementsHovered(new Set([...elementAtTouch.values()].filter(v => v)));
|
|
272
|
-
const setPositionHandler = $i7OB2$
|
|
656
|
+
const setPositionHandler = $i7OB2$catchify1(evt => {
|
|
273
657
|
for (const touch of evt.changedTouches) elementAtTouch.set(touch.identifier, document.elementFromPoint(touch.clientX, touch.clientY));
|
|
274
658
|
updateSet();
|
|
275
659
|
});
|
|
276
|
-
const deleteTouchHandler = $i7OB2$
|
|
660
|
+
const deleteTouchHandler = $i7OB2$catchify1(evt => {
|
|
277
661
|
for (const touch of evt.changedTouches) elementAtTouch.delete(touch.identifier);
|
|
278
662
|
updateSet();
|
|
279
663
|
});
|
|
@@ -397,20 +781,6 @@ function $a52235d12ccf9c88$var$unwrapping_helper(elements) {
|
|
|
397
781
|
} else if (typeof elements == "function") result.push(...$a52235d12ccf9c88$var$unwrapping_helper(elements()));else if (elements != undefined && typeof elements != "boolean") result.push(elements);
|
|
398
782
|
return result;
|
|
399
783
|
}
|
|
400
|
-
const $b6440e72ed83671a$var$ProductCardIndexContext = /*@__PURE__*/$i7OB2$createContext();
|
|
401
|
-
function $b6440e72ed83671a$export$11354f017ddc9790(props) {
|
|
402
|
-
return $i7OB2$createComponent($b6440e72ed83671a$var$ProductCardIndexContext.Provider, {
|
|
403
|
-
get value() {
|
|
404
|
-
return props.index_;
|
|
405
|
-
},
|
|
406
|
-
get children() {
|
|
407
|
-
return props.children;
|
|
408
|
-
}
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
function $b6440e72ed83671a$export$e3faf4d95300054f() {
|
|
412
|
-
return $i7OB2$useContext($b6440e72ed83671a$var$ProductCardIndexContext);
|
|
413
|
-
}
|
|
414
784
|
|
|
415
785
|
/**
|
|
416
786
|
* This is a function that will safely clone an object that may contain promises.
|
|
@@ -634,7 +1004,7 @@ function $f091294da861020c$export$4a14175d33d81a96({
|
|
|
634
1004
|
};
|
|
635
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.
|
|
636
1006
|
const shouldObserve = $i7OB2$createMemo(() => alwaysObserveCards_ || listenersForIntersecting() > 0);
|
|
637
|
-
const intersection_observer = new IntersectionObserver($i7OB2$
|
|
1007
|
+
const intersection_observer = new IntersectionObserver($i7OB2$catchify(records => {
|
|
638
1008
|
const intersectingValue = currentlyIntersecting();
|
|
639
1009
|
for (let i = 0; i < records.length; i++) {
|
|
640
1010
|
const record = records[i];
|
|
@@ -914,7 +1284,7 @@ var $c8d5ff4524619fcd$var$_tmpl$ = ["<div", ' class="', '">', "</div>"],
|
|
|
914
1284
|
$c8d5ff4524619fcd$var$_tmpl$2 = ["<style", ' type="text/css">', "</style>"];
|
|
915
1285
|
function $c8d5ff4524619fcd$export$d21e32dfedac04be(props) {
|
|
916
1286
|
const container_class = "x" + $i7OB2$createUniqueId();
|
|
917
|
-
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$
|
|
1287
|
+
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps(() => props.element_attributes, {
|
|
918
1288
|
classList: {
|
|
919
1289
|
[container_class]: true
|
|
920
1290
|
}
|
|
@@ -951,529 +1321,183 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
|
|
|
951
1321
|
const [get_styling, set_styling] = $i7OB2$createSignal();
|
|
952
1322
|
const selector_beginning = `.depict .${container_class}>`; // class so ppl can have id if needed
|
|
953
1323
|
const [get_children_count, set_children_count] = $i7OB2$createSignal(0);
|
|
954
|
-
const update_children_count = () => (0, $i7OB2$isServer) ? 20 : set_children_count(container_element.children.length);
|
|
955
|
-
const col_styling = $i7OB2$createMemo(() => $i7OB2$n_col_styling_with_dist(selector_beginning, props.grid_spacing, props.cols_at_size, props.layout, props.override_vertical_spacing));
|
|
956
|
-
const default_currently_visible_signal = $i7OB2$createSignal($i7OB2$untrack(() => rows_or_empty_object().start_rows ?? 1)); // Keep this signal here, so it doesn't change when rows_or_empty_object and I think it's to be expected that the "internal default signal" stays the same
|
|
957
|
-
const rows_visible_signal = $i7OB2$createMemo(() => rows_or_empty_object().currently_visible || default_currently_visible_signal);
|
|
958
|
-
const get_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[0]());
|
|
959
|
-
const set_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[1]);
|
|
960
|
-
const view_more_button_class = "m" + $i7OB2$createUniqueId();
|
|
961
|
-
const view_less_button_class = "l" + $i7OB2$createUniqueId(); // https://github.com/solidjs/solid-docs/issues/263#issuecomment-1622388079
|
|
962
|
-
const view_more_button_container = $i7OB2$createMemo(() => have_a_view_more_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-more-container ${$i7OB2$escape(view_more_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().button)));
|
|
963
|
-
// 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
|
|
964
|
-
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)));
|
|
965
|
-
const [force_style_update, set_force_style_update] = $i7OB2$createSignal("");
|
|
966
|
-
$i7OB2$createComputed(() => {
|
|
967
|
-
// Make sure we don't have more rows visible than max_rows (this could happen by max_rows being decreased)
|
|
968
|
-
const rows_visible = get_rows_visible();
|
|
969
|
-
const max_rows = rows_or_empty_object().max_rows;
|
|
970
|
-
if (!isNaN(max_rows) && max_rows >= 0 && rows_visible > max_rows) set_rows_visible()(max_rows);
|
|
971
|
-
});
|
|
972
|
-
$i7OB2$createEffect(() => set_force_style_update(" ")); // force style update after hydration due to https://discord.com/channels/722131463138705510/722167424186843267/1151544212517552168
|
|
973
|
-
$i7OB2$createRenderEffect(() => {
|
|
974
|
-
// Be careful to only read show_all_rows in here (ofc doesn't apply to nested effects)
|
|
975
|
-
if (show_all_rows()) {
|
|
976
|
-
// no view more functionality requested
|
|
977
|
-
set_styling(() => col_styling);
|
|
978
|
-
return;
|
|
979
|
-
}
|
|
980
|
-
update_children_count();
|
|
981
|
-
if (!(0, $i7OB2$isServer)) {
|
|
982
|
-
const mutation_observer = new MutationObserver($i7OB2$catchify1(update_children_count));
|
|
983
|
-
mutation_observer.observe(container_element, {
|
|
984
|
-
childList: true
|
|
985
|
-
});
|
|
986
|
-
$i7OB2$onCleanup(() => mutation_observer.disconnect());
|
|
987
|
-
}
|
|
988
|
-
set_styling(
|
|
989
|
-
// this is needed because solid will think that the memo-accessor is a setter function otherwise
|
|
990
|
-
() => $i7OB2$createMemo(() => {
|
|
991
|
-
const {
|
|
992
|
-
rows_per_click: rows_per_click,
|
|
993
|
-
max_rows = -1,
|
|
994
|
-
start_rows: start_rows
|
|
995
|
-
} = rows_or_empty_object();
|
|
996
|
-
const rows_visible = get_rows_visible();
|
|
997
|
-
const children_count = get_children_count();
|
|
998
|
-
return force_style_update() + col_styling() + props.cols_at_size.map(options => {
|
|
999
|
-
const [recs_per_row, min, max] = options;
|
|
1000
|
-
let should_hide_view_more_button;
|
|
1001
|
-
let visible_recs;
|
|
1002
|
-
if (props.disable_partial_rows) {
|
|
1003
|
-
visible_recs = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible, children_count, options);
|
|
1004
|
-
const visible_recs_next_show_more = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible + (rows_per_click || 0),
|
|
1005
|
-
// Should this really be zero when we default rows_per_click to 1?
|
|
1006
|
-
children_count, options);
|
|
1007
|
-
should_hide_view_more_button = visible_recs === visible_recs_next_show_more;
|
|
1008
|
-
} else {
|
|
1009
|
-
visible_recs = $i7OB2$layout_get_total_rec_amount_for_row(rows_visible, options);
|
|
1010
|
-
should_hide_view_more_button = visible_recs >= children_count;
|
|
1011
|
-
}
|
|
1012
|
-
const should_hide_button_final = should_hide_view_more_button || max_rows !== -1 && rows_visible >= max_rows;
|
|
1013
|
-
// 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
|
|
1014
|
-
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;
|
|
1015
|
-
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}` : ``}}`;
|
|
1016
|
-
}).join("");
|
|
1017
|
-
}));
|
|
1018
|
-
});
|
|
1019
|
-
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
|
|
1020
|
-
if (insert_after_container) container_element.after(style_element);
|
|
1021
|
-
return [container_element, view_more_button_container(), view_less_button_container(), style_element];
|
|
1022
|
-
}
|
|
1023
|
-
var $c4492d24952ed731$var$_tmpl$ = ["<h2", ' class="recs-title">', "</h2>"];
|
|
1024
|
-
function $c4492d24952ed731$export$d41d19e89346fa2({
|
|
1025
|
-
recommendations_resource_: recommendations_resource_,
|
|
1026
|
-
product_card_template_: product_card_template_,
|
|
1027
|
-
layout_options_: layout_options_,
|
|
1028
|
-
title_: title_,
|
|
1029
|
-
NoResultsFallback_: NoResultsFallback_,
|
|
1030
|
-
placeholderCacheKey_: placeholderCacheKey_
|
|
1031
|
-
}) {
|
|
1032
|
-
const is_showing_something = $i7OB2$createMemo(() => recommendations_resource_.loading || recommendations_resource_()?.length);
|
|
1033
|
-
const title = $i7OB2$createMemo(() => title_?.()); // In case getter/accessor creates elements, don't create them twice
|
|
1034
|
-
const num_placeholders_ = () => 20;
|
|
1035
|
-
const slider = [$i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1036
|
-
get when() {
|
|
1037
|
-
return title();
|
|
1038
|
-
},
|
|
1039
|
-
get children() {
|
|
1040
|
-
return $i7OB2$ssr($c4492d24952ed731$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
|
|
1041
|
-
}
|
|
1042
|
-
}), $i7OB2$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
|
|
1043
|
-
arrow_height_: 25,
|
|
1044
|
-
arrow_width_: 12.5,
|
|
1045
|
-
disable_fading_: true,
|
|
1046
|
-
slider_ref_: slider => {
|
|
1047
|
-
const {
|
|
1048
|
-
insert_here: insert_here,
|
|
1049
|
-
container: container
|
|
1050
|
-
} = slider;
|
|
1051
|
-
const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
|
|
1052
|
-
// Do like this, so we don't have to call mergeProps ourselves
|
|
1053
|
-
$i7OB2$createComponent(Layout, $i7OB2$mergeProps1({
|
|
1054
|
-
rows: "all",
|
|
1055
|
-
layout: "slider"
|
|
1056
|
-
}, layout_options_));
|
|
1057
|
-
$i7OB2$slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
|
|
1058
|
-
insert_here.before($a458486f22b22f63$export$a2cc176055f8f08());
|
|
1059
|
-
container.classList.add("products");
|
|
1060
|
-
},
|
|
1061
|
-
get children() {
|
|
1062
|
-
return $i7OB2$createComponent((0, $i7OB2$Suspense), {
|
|
1063
|
-
get fallback() {
|
|
1064
|
-
return $6e41f1fde994db72$export$f33414a4df0afd3f({
|
|
1065
|
-
num_placeholders_: num_placeholders_,
|
|
1066
|
-
product_card_template_: product_card_template_,
|
|
1067
|
-
placeholderCacheKey_: placeholderCacheKey_
|
|
1068
|
-
});
|
|
1069
|
-
},
|
|
1070
|
-
get children() {
|
|
1071
|
-
return (() => {
|
|
1072
|
-
// IIFE to make sure we access both the recommendations_resource and the resources containing the product card rendering results themselves within the Suspense boundary
|
|
1073
|
-
const displays_by_key_ = $29ec7cddbe1d3484$export$7f8bd308237ab5a5($i7OB2$createMemo(() => recommendations_resource_() || []));
|
|
1074
|
-
const {
|
|
1075
|
-
renderedDisplays_: renderedDisplays_
|
|
1076
|
-
} = $f091294da861020c$export$4a14175d33d81a96({
|
|
1077
|
-
displays_by_key_: displays_by_key_,
|
|
1078
|
-
product_card_template_: product_card_template_
|
|
1079
|
-
});
|
|
1080
|
-
return renderedDisplays_;
|
|
1081
|
-
})();
|
|
1082
|
-
}
|
|
1083
|
-
});
|
|
1084
|
-
}
|
|
1085
|
-
})];
|
|
1086
|
-
return $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1087
|
-
get when() {
|
|
1088
|
-
return is_showing_something();
|
|
1089
|
-
},
|
|
1090
|
-
get fallback() {
|
|
1091
|
-
return NoResultsFallback_?.();
|
|
1092
|
-
},
|
|
1093
|
-
children: slider
|
|
1094
|
-
});
|
|
1095
|
-
}
|
|
1096
|
-
function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
|
|
1097
|
-
const component_in_error_boundary = do_with_elements => {
|
|
1098
|
-
const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
|
|
1099
|
-
severity_: "error",
|
|
1100
|
-
message_: error_message,
|
|
1101
|
-
get children() {
|
|
1102
|
-
const elements = component();
|
|
1103
|
-
do_with_elements?.(elements);
|
|
1104
|
-
return elements;
|
|
1105
|
-
}
|
|
1106
|
-
});
|
|
1107
|
-
// This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
|
|
1108
|
-
if (typeof error_boundary_wrapped === "function")
|
|
1109
|
-
// @ts-ignore
|
|
1110
|
-
return error_boundary_wrapped();
|
|
1111
|
-
// On the server it returns a string, so we just return that
|
|
1112
|
-
return error_boundary_wrapped;
|
|
1113
|
-
};
|
|
1114
|
-
const owner = $i7OB2$getOwner();
|
|
1115
|
-
if (owner == null) return $i7OB2$createRoot(dispose => {
|
|
1116
|
-
// 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
|
|
1117
|
-
return component_in_error_boundary(elements => {
|
|
1118
|
-
const have_multiple = Array.isArray(elements);
|
|
1119
|
-
if (have_multiple ? !elements?.length : !elements) return;
|
|
1120
|
-
(0, $i7OB2$observer).onremoved(have_multiple ? elements[0] : elements, ({
|
|
1121
|
-
element: element
|
|
1122
|
-
}) => {
|
|
1123
|
-
if (document.documentElement.contains(element)) return; // If element has instantly been re-inserted, don't dispose
|
|
1124
|
-
// See https://depictaiworkspace.slack.com/archives/C050GHEPBTR/p1695809102791259?thread_ts=1695106805.459729&cid=C050GHEPBTR
|
|
1125
|
-
dispose();
|
|
1126
|
-
});
|
|
1127
|
-
});
|
|
1128
|
-
});else
|
|
1129
|
-
// we're already in a root so cleanups are handled
|
|
1130
|
-
return component_in_error_boundary();
|
|
1131
|
-
}
|
|
1132
|
-
const $011607bdf658f807$var$ListingContext = /*@__PURE__*/$i7OB2$createContext();
|
|
1133
|
-
function $011607bdf658f807$export$e68cff63f76bd15b(props) {
|
|
1134
|
-
const our_object = {};
|
|
1135
|
-
return $i7OB2$createComponent($011607bdf658f807$var$ListingContext.Provider, {
|
|
1136
|
-
value: our_object,
|
|
1137
|
-
get children() {
|
|
1138
|
-
return props.children;
|
|
1139
|
-
}
|
|
1140
|
-
});
|
|
1141
|
-
}
|
|
1142
|
-
function $011607bdf658f807$export$8d0c4fdbb05a2f2e() {
|
|
1143
|
-
return $i7OB2$useContext($011607bdf658f807$var$ListingContext);
|
|
1144
|
-
}
|
|
1145
|
-
function $d134eae24341b4a1$export$89c6019e4baa40b1(props) {
|
|
1146
|
-
const style = $i7OB2$createMemo(() => {
|
|
1147
|
-
const {
|
|
1148
|
-
style: style,
|
|
1149
|
-
height: height,
|
|
1150
|
-
width: width
|
|
1151
|
-
} = props;
|
|
1152
|
-
return {
|
|
1153
|
-
...(style || {}),
|
|
1154
|
-
height: height ?? "1em",
|
|
1155
|
-
...(width && {
|
|
1156
|
-
width: width
|
|
1157
|
-
})
|
|
1158
|
-
};
|
|
1159
|
-
});
|
|
1160
|
-
return $i7OB2$createComponent((0, $d20eff0aadc28983$export$acb3eaade4b23afd), {
|
|
1161
|
-
get style() {
|
|
1162
|
-
return style();
|
|
1163
|
-
},
|
|
1164
|
-
get ["class"]() {
|
|
1165
|
-
return props.class;
|
|
1166
|
-
}
|
|
1167
|
-
});
|
|
1168
|
-
}
|
|
1169
|
-
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>"];
|
|
1170
|
-
const $bb15dfb548a7666e$export$8a2234b5b1a5ebd4 = "--image-aspect-ratio";
|
|
1171
|
-
function $bb15dfb548a7666e$export$ee1733d9a8495996() {
|
|
1172
|
-
return $i7OB2$ssr($bb15dfb548a7666e$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $7f60f09116a3fe61$export$3f37af283f8fb843), {
|
|
1173
|
-
aspectRatio: `var(${$bb15dfb548a7666e$export$8a2234b5b1a5ebd4}, 1)`
|
|
1174
|
-
})), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
|
|
1175
|
-
width: "20ch",
|
|
1176
|
-
height: "1em"
|
|
1177
|
-
})), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
|
|
1178
|
-
width: "5ch",
|
|
1179
|
-
height: "1em",
|
|
1180
|
-
"class": "price"
|
|
1181
|
-
})));
|
|
1182
|
-
}
|
|
1183
|
-
var $f18d425032111270$var$_tmpl$ = ["<div", ' style="', '"', ">", "</div>"];
|
|
1184
|
-
function $f18d425032111270$export$94026ee33dbabc26(props) {
|
|
1185
|
-
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));
|
|
1186
|
-
}
|
|
1187
|
-
let $4ea56971d92eb0cd$var$browserIsBugged = false;
|
|
1188
|
-
function $4ea56971d92eb0cd$export$2972b890694ced75(callback, {
|
|
1189
|
-
timeout: timeout
|
|
1190
|
-
}) {
|
|
1191
|
-
if ($4ea56971d92eb0cd$var$browserIsBugged) timeout /= 4;
|
|
1192
|
-
const cancel = () => {
|
|
1193
|
-
cancelIdleCallback(idleHandle);
|
|
1194
|
-
clearTimeout(racingTimeout);
|
|
1195
|
-
};
|
|
1196
|
-
const idleHandle = requestIdleCallback(deadline => {
|
|
1197
|
-
cancel();
|
|
1198
|
-
return callback(deadline);
|
|
1199
|
-
}, {
|
|
1200
|
-
timeout: timeout
|
|
1201
|
-
});
|
|
1202
|
-
const racingTimeout = setTimeout(() => {
|
|
1203
|
-
$i7OB2$dwarn("Browser did not respect requestIdleCallback timeout");
|
|
1204
|
-
$4ea56971d92eb0cd$var$browserIsBugged = true;
|
|
1205
|
-
cancel();
|
|
1206
|
-
callback({
|
|
1207
|
-
didTimeout: false,
|
|
1208
|
-
timeRemaining() {
|
|
1209
|
-
return 500;
|
|
1210
|
-
}
|
|
1211
|
-
});
|
|
1212
|
-
}, timeout + 1000);
|
|
1213
|
-
return cancel;
|
|
1214
|
-
}
|
|
1215
|
-
function $e8ffe11ed01df0fe$export$e6fffe67d4cdd848(whatToWatch) {
|
|
1216
|
-
const [size, setSize] = $i7OB2$createSignal(0);
|
|
1217
|
-
const resizeObserver = new ResizeObserver($i7OB2$catchify1(records => {
|
|
1218
|
-
for (let j = 0; j < records.length; j++) {
|
|
1219
|
-
const {
|
|
1220
|
-
width: width
|
|
1221
|
-
} = records[j].contentRect;
|
|
1222
|
-
if (!width) continue;
|
|
1223
|
-
setSize(Math.ceil(width));
|
|
1224
|
-
}
|
|
1225
|
-
}));
|
|
1226
|
-
// 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.
|
|
1227
|
-
// It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
|
|
1228
|
-
const disconnect = (0, $i7OB2$observer).onexists(whatToWatch, ({
|
|
1229
|
-
element: element
|
|
1230
|
-
}) => requestAnimationFrame($i7OB2$catchify1(() => resizeObserver.observe(element))));
|
|
1231
|
-
$i7OB2$onCleanup(() => {
|
|
1232
|
-
resizeObserver.disconnect();
|
|
1233
|
-
disconnect();
|
|
1234
|
-
});
|
|
1235
|
-
return size;
|
|
1236
|
-
}
|
|
1237
|
-
const $e8ffe11ed01df0fe$var$onIdleFunctionsSymbol = /*@__PURE__*/Symbol("onIdleFunctions");
|
|
1238
|
-
const $e8ffe11ed01df0fe$export$f8945274f08a3105 = /*@__PURE__*/Symbol("listingContextAspectRatios");
|
|
1239
|
-
const $e8ffe11ed01df0fe$export$6066eb417ed2e9f7 = /*@__PURE__*/Symbol("listingContextAspectRatios");
|
|
1240
|
-
function $e8ffe11ed01df0fe$export$6e5611bc7e57e477(props) {
|
|
1241
|
-
const src_options = $i7OB2$createMemo(() => {
|
|
1242
|
-
const {
|
|
1243
|
-
src: src,
|
|
1244
|
-
customUrls: customUrls
|
|
1245
|
-
} = props;
|
|
1246
|
-
const fallback_src = (customUrls || $e8ffe11ed01df0fe$export$1d6267828870adda)(src, 400);
|
|
1247
|
-
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);
|
|
1248
|
-
// The order here *might* matter - I've seen mobile safari always start with loading the 400px version when it was reversed
|
|
1249
|
-
return {
|
|
1250
|
-
srcset: srcset,
|
|
1251
|
-
src: fallback_src
|
|
1252
|
-
};
|
|
1253
|
-
});
|
|
1254
|
-
// Work around https://github.com/solidjs/solid/issues/1828
|
|
1255
|
-
const img = new Image(); // Need to use new Image or browser might not start loading image before it's in the DOM
|
|
1256
|
-
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 <-
|
|
1257
|
-
]);
|
|
1258
|
-
|
|
1259
|
-
const [hasSetSize, setHasSetSize] = $i7OB2$createSignal(false);
|
|
1260
|
-
const [hasDecoded, setHasDecoded] = $i7OB2$createSignal(false);
|
|
1261
|
-
const productCardIndexAccessor = $b6440e72ed83671a$export$e3faf4d95300054f();
|
|
1262
|
-
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
|
|
1263
|
-
const listingContext = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
|
|
1264
|
-
const isPrioritisedImage = $i7OB2$createMemo(() => productCardIndexAccessor?.() < 8);
|
|
1265
|
-
const shouldActuallyEnableLazyLoading = $i7OB2$createMemo(() => {
|
|
1266
|
-
const {
|
|
1267
|
-
loading: loading
|
|
1268
|
-
} = props;
|
|
1269
|
-
if (loading === "force-lazy") return true;
|
|
1270
|
-
return loading === "lazy" && !isPrioritisedImage();
|
|
1271
|
-
});
|
|
1272
|
-
const modifiedOtherAttributes = $i7OB2$mergeProps(otherAttributes, {
|
|
1273
|
-
get loading() {
|
|
1274
|
-
return shouldActuallyEnableLazyLoading() ? "lazy" : undefined;
|
|
1275
|
-
}
|
|
1276
|
-
});
|
|
1277
|
-
// 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
|
|
1278
|
-
// Happened on singular, they have some weird observer (+we also have one but ours is at least 3x more efficient)
|
|
1279
|
-
const executeWhenIdleBatched = (fn, isSizesUpdate) => {
|
|
1280
|
-
if (typeof requestIdleCallback !== "function") return setTimeout(fn); // Old browsers don't get optimisation
|
|
1281
|
-
if ((!isSizesUpdate || !sizeSetFastPath) && $i7OB2$untrack(isPrioritisedImage)) return fn(); // If we're one of the first 8 images, execute the callbacks immediately (improves lighthouse metrics)
|
|
1282
|
-
// 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)
|
|
1283
|
-
const existingStack = listingContext?.[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
|
|
1284
|
-
if (existingStack) return existingStack.add(fn);
|
|
1285
|
-
const newStack = new Set([fn]);
|
|
1286
|
-
if (listingContext) listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol] = newStack;
|
|
1287
|
-
const processStackWhenIdle = () => $4ea56971d92eb0cd$export$2972b890694ced75($i7OB2$catchify1(deadline => {
|
|
1288
|
-
const start = performance.now();
|
|
1289
|
-
const thirdDeadlineTime = deadline.timeRemaining() / 3; // observers coming after this take up 2-3x the time so don't use all of it
|
|
1290
|
-
for (const fn of newStack) {
|
|
1291
|
-
newStack.delete(fn);
|
|
1292
|
-
fn();
|
|
1293
|
-
const timeTaken = performance.now() - start;
|
|
1294
|
-
if ((!deadline.timeRemaining() || timeTaken > thirdDeadlineTime) && newStack.size) {
|
|
1295
|
-
// There's still work to be done but no time, so schedule another idle callback
|
|
1296
|
-
processStackWhenIdle();
|
|
1297
|
-
return;
|
|
1298
|
-
}
|
|
1299
|
-
}
|
|
1300
|
-
// Stack is empty
|
|
1301
|
-
if (listingContext) delete listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
|
|
1302
|
-
}), {
|
|
1303
|
-
timeout: 15000
|
|
1304
|
-
} // 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
|
|
1305
|
-
);
|
|
1306
|
-
|
|
1307
|
-
processStackWhenIdle();
|
|
1308
|
-
};
|
|
1309
|
-
let sizeSetFastPath = false;
|
|
1310
|
-
let hasDecodedFastPath = false;
|
|
1311
|
-
let timeoutSet = false;
|
|
1312
|
-
let gotCleanedUp = false;
|
|
1313
|
-
let srcJustChanged = true;
|
|
1314
|
-
img.classList.add("s-responsive-image");
|
|
1315
|
-
if (listingContext) {
|
|
1316
|
-
let prevValue;
|
|
1317
|
-
const aspectRatios = listingContext[$e8ffe11ed01df0fe$export$f8945274f08a3105] ||= new Set();
|
|
1318
|
-
const [, setMostPrevalentAspectRatio] = listingContext[$e8ffe11ed01df0fe$export$6066eb417ed2e9f7] ||= $i7OB2$createSignal();
|
|
1319
|
-
img.addEventListener("load", $i7OB2$catchify1(() => {
|
|
1320
|
-
if (props.keyRatioUpdating) {
|
|
1321
|
-
if (!srcJustChanged) return;
|
|
1322
|
-
srcJustChanged = false;
|
|
1323
|
-
}
|
|
1324
|
-
// 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
|
|
1325
|
-
const aspectRatio_ = img.naturalWidth / img.naturalHeight;
|
|
1326
|
-
if (prevValue) aspectRatios.delete(prevValue);
|
|
1327
|
-
const newValue = !isNaN(aspectRatio_) ? {
|
|
1328
|
-
aspectRatio_: aspectRatio_
|
|
1329
|
-
} : undefined;
|
|
1330
|
-
if (newValue) aspectRatios.add(newValue);
|
|
1331
|
-
prevValue = newValue;
|
|
1332
|
-
// Do all calculations resulting of an update directly, for performance
|
|
1333
|
-
const asArray = [...aspectRatios].map(({
|
|
1334
|
-
aspectRatio_: aspectRatio_
|
|
1335
|
-
}) => aspectRatio_);
|
|
1336
|
-
const mostPrevalentAspectRatio = $i7OB2$findMostFrequentItem(asArray);
|
|
1337
|
-
setMostPrevalentAspectRatio(mostPrevalentAspectRatio);
|
|
1338
|
-
}));
|
|
1339
|
-
$i7OB2$onCleanup(() => prevValue && aspectRatios.delete(prevValue));
|
|
1340
|
-
}
|
|
1341
|
-
$i7OB2$onCleanup(() => gotCleanedUp = true);
|
|
1342
|
-
$i7OB2$spread(img, $i7OB2$mergeProps(modifiedOtherAttributes), false, true);
|
|
1343
|
-
$i7OB2$createRenderEffect(() => {
|
|
1344
|
-
props.src;
|
|
1345
|
-
srcJustChanged = true;
|
|
1346
|
-
});
|
|
1347
|
-
$i7OB2$createEffect(() => {
|
|
1348
|
-
if (!props.size()) return; // wait until we have a size, run every time the size changes
|
|
1349
|
-
if (timeoutSet) return;
|
|
1350
|
-
const handler = $i7OB2$catchify1(() => {
|
|
1351
|
-
if (gotCleanedUp) return;
|
|
1352
|
-
img.sizes = sizePX(); // use latest available value of props.size
|
|
1353
|
-
if (!sizeSetFastPath) {
|
|
1354
|
-
setHasSetSize(true);
|
|
1355
|
-
sizeSetFastPath = true;
|
|
1356
|
-
}
|
|
1357
|
-
timeoutSet = false;
|
|
1358
|
-
});
|
|
1359
|
-
// Throttle the updating of sizes to avoid unnecessary image re-fetches during resize
|
|
1360
|
-
// And also because we first set src after sizes has been set, wait with loading and decoding images until browser is idle
|
|
1361
|
-
// This greatly improves performance when loading (more) products
|
|
1362
|
-
// See https://depictaiworkspace.slack.com/archives/C05NJ0K3WRL/p1698220617663139
|
|
1363
|
-
timeoutSet = true; // Important to set timeoutSet before the call to executeWhenIdleBatched since if this is an important image executeWhenIdleBatched will execute fn immediately
|
|
1364
|
-
executeWhenIdleBatched(handler, true);
|
|
1324
|
+
const update_children_count = () => (0, $i7OB2$isServer) ? 20 : set_children_count(container_element.children.length);
|
|
1325
|
+
const col_styling = $i7OB2$createMemo(() => $i7OB2$n_col_styling_with_dist(selector_beginning, props.grid_spacing, props.cols_at_size, props.layout, props.override_vertical_spacing));
|
|
1326
|
+
const default_currently_visible_signal = $i7OB2$createSignal($i7OB2$untrack(() => rows_or_empty_object().start_rows ?? 1)); // Keep this signal here, so it doesn't change when rows_or_empty_object and I think it's to be expected that the "internal default signal" stays the same
|
|
1327
|
+
const rows_visible_signal = $i7OB2$createMemo(() => rows_or_empty_object().currently_visible || default_currently_visible_signal);
|
|
1328
|
+
const get_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[0]());
|
|
1329
|
+
const set_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[1]);
|
|
1330
|
+
const view_more_button_class = "m" + $i7OB2$createUniqueId();
|
|
1331
|
+
const view_less_button_class = "l" + $i7OB2$createUniqueId(); // https://github.com/solidjs/solid-docs/issues/263#issuecomment-1622388079
|
|
1332
|
+
const view_more_button_container = $i7OB2$createMemo(() => have_a_view_more_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-more-container ${$i7OB2$escape(view_more_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().button)));
|
|
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
|
|
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)));
|
|
1335
|
+
const [force_style_update, set_force_style_update] = $i7OB2$createSignal("");
|
|
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);
|
|
1365
1341
|
});
|
|
1366
|
-
|
|
1367
|
-
$i7OB2$
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
// No need to listen if we're already in the DOM
|
|
1373
|
-
if (hasDecodedFastPath) return;
|
|
1374
|
-
if (shouldActuallyEnableLazyLoading()) {
|
|
1375
|
-
// For lazy loading there's no decoding to wait for as it only occurs when the image is visible
|
|
1376
|
-
// Make sure src is set before we put the image into the DOM though so no broken image symbol is shown
|
|
1377
|
-
setHasDecoded(true);
|
|
1378
|
-
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);
|
|
1379
1348
|
return;
|
|
1380
1349
|
}
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
}
|
|
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
|
+
}));
|
|
1389
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
|
+
})];
|
|
1390
1456
|
return $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
1391
1457
|
get when() {
|
|
1392
|
-
return
|
|
1458
|
+
return is_showing_something();
|
|
1393
1459
|
},
|
|
1394
|
-
|
|
1460
|
+
get fallback() {
|
|
1461
|
+
return NoResultsFallback_?.();
|
|
1462
|
+
},
|
|
1463
|
+
children: slider
|
|
1395
1464
|
});
|
|
1396
1465
|
}
|
|
1397
|
-
function $
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
const $660070e2a394b3c3$var$backupSizeSignal = /*@__PURE__*/$i7OB2$createSignal();
|
|
1407
|
-
const $660070e2a394b3c3$export$d7b7ab832c20e2f4 = /*@__PURE__*/Symbol("ShopifyContainedImage");
|
|
1408
|
-
function $660070e2a394b3c3$export$e4b984597b71e989(props) {
|
|
1409
|
-
const context = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
|
|
1410
|
-
if (context && !context[$660070e2a394b3c3$export$d7b7ab832c20e2f4])
|
|
1411
|
-
// create a signal that's the same for all items in this listing
|
|
1412
|
-
context[$660070e2a394b3c3$export$d7b7ab832c20e2f4] = $i7OB2$createSignal();
|
|
1413
|
-
const [currentImageSize, setCurrentImageSize] = context?.[$660070e2a394b3c3$export$d7b7ab832c20e2f4] || $660070e2a394b3c3$var$backupSizeSignal; // use global fallback signal (might lead to blurry images) if no context is available
|
|
1414
|
-
const [mostPrevalentAspectRatio] = context ?
|
|
1415
|
-
// 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
|
|
1416
|
-
context[(0, $e8ffe11ed01df0fe$export$6066eb417ed2e9f7)] ||= $i7OB2$createSignal() : [];
|
|
1417
|
-
const container = $f18d425032111270$export$94026ee33dbabc26({
|
|
1418
|
-
// Write getters manually instead of using JSX, so we can do more complex logic in the aspectRatio getter without increasing bundle size
|
|
1419
|
-
get class() {
|
|
1420
|
-
return props.class;
|
|
1421
|
-
},
|
|
1422
|
-
get aspectRatio() {
|
|
1423
|
-
if (props.autoAdjustAspectRatio) {
|
|
1424
|
-
const targetRatio = mostPrevalentAspectRatio?.();
|
|
1425
|
-
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;
|
|
1426
1475
|
}
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
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
|
+
};
|
|
1430
1484
|
const owner = $i7OB2$getOwner();
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
});
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
get size() {
|
|
1448
|
-
return $i7OB2$createMemo(() => currentImageSize()?.() || 0);
|
|
1449
|
-
},
|
|
1450
|
-
get src() {
|
|
1451
|
-
return props.src;
|
|
1452
|
-
}
|
|
1453
|
-
}, () => props.imgProps, {
|
|
1454
|
-
get style() {
|
|
1455
|
-
return props.imgProps?.style;
|
|
1456
|
-
}
|
|
1457
|
-
})));
|
|
1458
|
-
return container;
|
|
1459
|
-
}
|
|
1460
|
-
function $70bb27cc6be01fc7$export$9d4a4b669b1929ab(props) {
|
|
1461
|
-
return $i7OB2$createComponent((0, $660070e2a394b3c3$export$e4b984597b71e989), $i7OB2$mergeProps1(props, {
|
|
1462
|
-
get imgProps() {
|
|
1463
|
-
return {
|
|
1464
|
-
...props.imgProps,
|
|
1465
|
-
customUrls: (url, width // Apparently don't have to encode url for CF's service
|
|
1466
|
-
) => {
|
|
1467
|
-
if (url?.startsWith?.("https://cdn.shopify.com"))
|
|
1468
|
-
// 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,
|
|
1469
|
-
// 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.
|
|
1470
|
-
return $e8ffe11ed01df0fe$export$1d6267828870adda(url, width);
|
|
1471
|
-
// 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)
|
|
1472
|
-
return `https://app.depict.ai/cdn-cgi/image/width=${width},format=auto/${url}`;
|
|
1473
|
-
}
|
|
1474
|
-
};
|
|
1475
|
-
}
|
|
1476
|
-
}));
|
|
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();
|
|
1477
1501
|
}
|
|
1478
1502
|
function $8c0f86cb3e266eeb$export$a71e92cfbb498adc(props) {
|
|
1479
1503
|
return $i7OB2$createMemo(() => {
|
|
@@ -1509,7 +1533,7 @@ function $08a49ecdcd5beaca$export$b73ed90f0ee50dc3({
|
|
|
1509
1533
|
const href = $i7OB2$createMemo(() => variantToUse()?.page_url);
|
|
1510
1534
|
const FavoriteButton = FavoriteButton_; // Just to get rid of the type error - TS doesn't understand <Show>
|
|
1511
1535
|
const title = $i7OB2$createMemo(() => variantToUse()?.title);
|
|
1512
|
-
return $i7OB2$ssrElement("a", $i7OB2$
|
|
1536
|
+
return $i7OB2$ssrElement("a", $i7OB2$mergeProps({
|
|
1513
1537
|
"class": "look-item"
|
|
1514
1538
|
}, () => enableLink() ? {
|
|
1515
1539
|
href: href()
|
|
@@ -1553,7 +1577,7 @@ function $08a49ecdcd5beaca$export$b73ed90f0ee50dc3({
|
|
|
1553
1577
|
return (animationEffectExists() ? isExpandedThrottledByOurEffectRun() : userWantsExpanded()) || animationIsRunning();
|
|
1554
1578
|
},
|
|
1555
1579
|
get children() {
|
|
1556
|
-
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({
|
|
1557
1581
|
"class": "d-title line-clamp"
|
|
1558
1582
|
}, () => title() && {
|
|
1559
1583
|
title: title()
|
|
@@ -1646,7 +1670,7 @@ async function $1f9a34ca8a87d49f$var$checkIfIsAffectedByChromeBug326498383() {
|
|
|
1646
1670
|
const waitAFrame = () => new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));
|
|
1647
1671
|
const timeoutPromise = new Promise(r => {
|
|
1648
1672
|
resolveTimeoutPromise = r;
|
|
1649
|
-
setTimeout($i7OB2$
|
|
1673
|
+
setTimeout($i7OB2$catchify(() => {
|
|
1650
1674
|
r();
|
|
1651
1675
|
div.remove();
|
|
1652
1676
|
}), 500);
|
|
@@ -1730,7 +1754,7 @@ function $11fb4b33b36ecfac$export$ebf0b1d4f90c09ae({
|
|
|
1730
1754
|
priceFormatting_: priceFormatting_,
|
|
1731
1755
|
outerRef_: el => $i7OB2$createEffect(() => {
|
|
1732
1756
|
if (index !== 0) return;
|
|
1733
|
-
const resizeObserver = new ResizeObserver($i7OB2$
|
|
1757
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => setLookItemHeight(records.at(-1).contentRect.height)));
|
|
1734
1758
|
resizeObserver.observe(el);
|
|
1735
1759
|
$i7OB2$onCleanup(() => resizeObserver.disconnect());
|
|
1736
1760
|
})
|
|
@@ -1749,7 +1773,7 @@ function $11fb4b33b36ecfac$var$scrollingFunctionForChrome(element, targetScrollY
|
|
|
1749
1773
|
let start;
|
|
1750
1774
|
const startingY = element.scrollTop;
|
|
1751
1775
|
const diff = targetScrollY - startingY;
|
|
1752
|
-
const step = $i7OB2$
|
|
1776
|
+
const step = $i7OB2$catchify(timestamp => {
|
|
1753
1777
|
if (!start) start = timestamp;
|
|
1754
1778
|
// Elapsed milliseconds since start of scrolling.
|
|
1755
1779
|
const time = timestamp - start;
|
|
@@ -1780,7 +1804,7 @@ function $e9d1d09be9e6471e$export$44809a8a3e867e30({
|
|
|
1780
1804
|
const index = $b6440e72ed83671a$export$e3faf4d95300054f();
|
|
1781
1805
|
const [containerWidth_, setContainerWidth] = $i7OB2$createSignal();
|
|
1782
1806
|
const [containerHeight_, setContainerHeight] = $i7OB2$createSignal();
|
|
1783
|
-
const clickHandler = $i7OB2$
|
|
1807
|
+
const clickHandler = $i7OB2$catchify(({
|
|
1784
1808
|
target: target
|
|
1785
1809
|
}) => {
|
|
1786
1810
|
if (target !== container && !container.contains(target))
|
|
@@ -1917,7 +1941,7 @@ class $4fd2ba03703a7d92$export$7e1297a3a19f10d8 {
|
|
|
1917
1941
|
* @param is_replace_ if you want to replace the current URL in history instead of pushing a new one
|
|
1918
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
|
|
1919
1943
|
*/
|
|
1920
|
-
go_to_: $i7OB2$
|
|
1944
|
+
go_to_: $i7OB2$catchify(async ({
|
|
1921
1945
|
new_url_: raw_new_url,
|
|
1922
1946
|
event_: event_,
|
|
1923
1947
|
force_spa_navigation_: force_spa_navigation_,
|
|
@@ -2001,7 +2025,7 @@ function $3da8afe3ed57cf34$export$7da560f849543dff({
|
|
|
2001
2025
|
get children() {
|
|
2002
2026
|
return $i7OB2$ssr($3da8afe3ed57cf34$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
|
|
2003
2027
|
}
|
|
2004
|
-
}), $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({
|
|
2005
2029
|
get rows() {
|
|
2006
2030
|
return rows_object_();
|
|
2007
2031
|
},
|
|
@@ -2130,7 +2154,7 @@ function $07ef910e8ef6b783$export$2c9f9bf2092486aa(props) {
|
|
|
2130
2154
|
return $i7OB2$createComponent((0, $c4492d24952ed731$export$d41d19e89346fa2), sharedOptions);
|
|
2131
2155
|
},
|
|
2132
2156
|
get children() {
|
|
2133
|
-
return $i7OB2$createComponent((0, $3da8afe3ed57cf34$export$7da560f849543dff), $i7OB2$
|
|
2157
|
+
return $i7OB2$createComponent((0, $3da8afe3ed57cf34$export$7da560f849543dff), $i7OB2$mergeProps(sharedOptions, {
|
|
2134
2158
|
view_more_button_: () => props.gridOptions_?.view_more_button,
|
|
2135
2159
|
max_rows_: () => props.gridOptions_?.max_rows
|
|
2136
2160
|
}));
|
|
@@ -2178,7 +2202,7 @@ async function $07ef910e8ef6b783$var$runDisplayTransformersForLooks(baseData, li
|
|
|
2178
2202
|
}) : displaysToTransform;
|
|
2179
2203
|
const transformedListings = await transformedListingsPromise;
|
|
2180
2204
|
const transformedDisplayById = Object.fromEntries(transformedProducts.map(display => [$16351e4c87b90b3d$export$548d053aba053d79(display), display]));
|
|
2181
|
-
return transformedListings.map(listing => $i7OB2$
|
|
2205
|
+
return transformedListings.map(listing => $i7OB2$mergeProps1(listing, {
|
|
2182
2206
|
// use mergeProps because in preview browser we add getters in this object, that would be called too early otherwise
|
|
2183
2207
|
displays: (displayIdsPerListingId[listing.listing_id] || []).map(displayId => transformedDisplayById[displayId]).filter(v => v)
|
|
2184
2208
|
}));
|
|
@@ -2405,7 +2429,7 @@ function $eea41f703612261b$export$62f101a8aa597bf8({
|
|
|
2405
2429
|
// don't wait if it's the first request
|
|
2406
2430
|
write_current_instant_query(value);
|
|
2407
2431
|
clearTimeout(timeout);
|
|
2408
|
-
timeout = setTimeout($i7OB2$
|
|
2432
|
+
timeout = setTimeout($i7OB2$catchify(() => write_current_instant_query(value)), 250);
|
|
2409
2433
|
});
|
|
2410
2434
|
const [search_results] = $i7OB2$createResource($i7OB2$createMemo(() => ({
|
|
2411
2435
|
// <-- key order important, see comment below
|
|
@@ -2413,7 +2437,7 @@ function $eea41f703612261b$export$62f101a8aa597bf8({
|
|
|
2413
2437
|
market: market_(),
|
|
2414
2438
|
locale: i18n_.backend_locale_(),
|
|
2415
2439
|
query: read_current_instant_query()
|
|
2416
|
-
})), $i7OB2$
|
|
2440
|
+
})), $i7OB2$catchify(async variable_data => {
|
|
2417
2441
|
return depict_api_.query({
|
|
2418
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
|
|
2419
2443
|
limit: $i7OB2$untrack(has_sort_or_filters_) ? max_cards : min_products_to_fetch_,
|
|
@@ -2518,7 +2542,7 @@ function $c64d28ca12452b21$export$3340fdd8259bd4fd({
|
|
|
2518
2542
|
if (process.env.GA === "false") return;
|
|
2519
2543
|
let debounce_timeout;
|
|
2520
2544
|
const stop_timeout = () => clearTimeout(debounce_timeout);
|
|
2521
|
-
const send_to_ga = $i7OB2$
|
|
2545
|
+
const send_to_ga = $i7OB2$catchify(() => {
|
|
2522
2546
|
const fake_url = new URL(location.href);
|
|
2523
2547
|
const {
|
|
2524
2548
|
searchParams: searchParams
|
|
@@ -2531,12 +2555,12 @@ function $c64d28ca12452b21$export$3340fdd8259bd4fd({
|
|
|
2531
2555
|
$i7OB2$onCleanup(() => {
|
|
2532
2556
|
setTimeout(
|
|
2533
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
|
|
2534
|
-
$i7OB2$
|
|
2558
|
+
$i7OB2$catchify(() => {
|
|
2535
2559
|
if ($i7OB2$untrack(get_search_query_) === $i7OB2$untrack(get_search_field_value_)) stop_timeout();
|
|
2536
2560
|
}));
|
|
2537
2561
|
});
|
|
2538
2562
|
let first_call = true;
|
|
2539
|
-
$i7OB2$createEffect($i7OB2$
|
|
2563
|
+
$i7OB2$createEffect($i7OB2$catchify(() => {
|
|
2540
2564
|
get_search_field_value_();
|
|
2541
2565
|
if (first_call) {
|
|
2542
2566
|
// we only want to do stuff when it changes
|
|
@@ -2555,7 +2579,7 @@ function $a36cbc4f68bfd590$export$91c3b6774e8be0f5({
|
|
|
2555
2579
|
const [get_current_href, set_current_href] = $i7OB2$createSignal(location.href);
|
|
2556
2580
|
const [exit_iterable, exitable_iterable] = $i7OB2$make_asyncIterable_exiter((0, $i7OB2$href_change_ipns));
|
|
2557
2581
|
$i7OB2$onCleanup(exit_iterable);
|
|
2558
|
-
$i7OB2$
|
|
2582
|
+
$i7OB2$catchify(async () => {
|
|
2559
2583
|
for await (const href of exitable_iterable)
|
|
2560
2584
|
// use native links so ppl can cmdclick/right click and open in new tab and see target URL
|
|
2561
2585
|
set_current_href(href);
|
|
@@ -2573,7 +2597,7 @@ function $694b7f90501fea4c$export$5d2caaa6b530761c() {
|
|
|
2573
2597
|
}
|
|
2574
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>';
|
|
2575
2599
|
function $19976a74d273070d$export$3b621d86b1566b2(props = {}) {
|
|
2576
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
2600
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
2577
2601
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2578
2602
|
width: "21.064",
|
|
2579
2603
|
height: "21.064",
|
|
@@ -2673,7 +2697,7 @@ function $f3213c0640246d58$export$ba17c5b7e6dda39f({
|
|
|
2673
2697
|
}
|
|
2674
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>';
|
|
2675
2699
|
function $16f0ed5ea30d8d9c$export$82eafebb825fc23f(props = {}) {
|
|
2676
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
2700
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
2677
2701
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2678
2702
|
width: "20",
|
|
2679
2703
|
height: "22",
|
|
@@ -2682,7 +2706,7 @@ function $16f0ed5ea30d8d9c$export$82eafebb825fc23f(props = {}) {
|
|
|
2682
2706
|
}
|
|
2683
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>';
|
|
2684
2708
|
function $190927650b4840eb$export$605674723bcc715c(props = {}) {
|
|
2685
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
2709
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
2686
2710
|
xmlns: "http://www.w3.org/2000/svg",
|
|
2687
2711
|
width: "32",
|
|
2688
2712
|
height: "32",
|
|
@@ -2948,7 +2972,7 @@ function $6ef2e4ea23810f23$var$actual_navigation_working_on_fake_data({
|
|
|
2948
2972
|
if (!$i7OB2$untrack(() => read_updating_blocked())) previous_value = sfv;
|
|
2949
2973
|
});
|
|
2950
2974
|
const owner = $i7OB2$getOwner();
|
|
2951
|
-
const handler = $i7OB2$
|
|
2975
|
+
const handler = $i7OB2$catchify(({
|
|
2952
2976
|
keyCode: keyCode
|
|
2953
2977
|
}) => $i7OB2$untrack(() => {
|
|
2954
2978
|
const up = keyCode === 38;
|
|
@@ -3012,7 +3036,7 @@ function $6ef2e4ea23810f23$var$actual_navigation_working_on_fake_data({
|
|
|
3012
3036
|
const el = element_();
|
|
3013
3037
|
if (!el) return;
|
|
3014
3038
|
el.addEventListener("keyup", handler);
|
|
3015
|
-
$i7OB2$onCleanup($i7OB2$
|
|
3039
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => el.removeEventListener("keyup", handler)));
|
|
3016
3040
|
});
|
|
3017
3041
|
}
|
|
3018
3042
|
function $1ae0eaca6ada9753$export$af0124069c150252({
|
|
@@ -3209,7 +3233,7 @@ let $f86ba724282f6690$export$44dad306455dddf;
|
|
|
3209
3233
|
|
|
3210
3234
|
function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
|
|
3211
3235
|
const [width, setWidth] = $i7OB2$createSignal();
|
|
3212
|
-
const resizeObserver = new ResizeObserver($i7OB2$
|
|
3236
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => {
|
|
3213
3237
|
for (let j = 0; j < records.length; j++) {
|
|
3214
3238
|
const width = records[j].borderBoxSize?.[0]?.inlineSize ?? what_to_watch.getBoundingClientRect().width;
|
|
3215
3239
|
setWidth(width);
|
|
@@ -3219,7 +3243,7 @@ function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
|
|
|
3219
3243
|
// It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
|
|
3220
3244
|
const disconnect = (0, $i7OB2$observer).onexists(what_to_watch, ({
|
|
3221
3245
|
element: element
|
|
3222
|
-
}) => requestAnimationFrame($i7OB2$
|
|
3246
|
+
}) => requestAnimationFrame($i7OB2$catchify(() => {
|
|
3223
3247
|
const current_size = what_to_watch.getBoundingClientRect().width;
|
|
3224
3248
|
if (current_size)
|
|
3225
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.
|
|
@@ -3234,7 +3258,7 @@ function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
|
|
|
3234
3258
|
}
|
|
3235
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>';
|
|
3236
3260
|
function $081752ca508a876f$export$f7658c347b037c3f(props = {}) {
|
|
3237
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
3261
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
3238
3262
|
xmlns: "http://www.w3.org/2000/svg",
|
|
3239
3263
|
width: "21",
|
|
3240
3264
|
height: "20",
|
|
@@ -3263,7 +3287,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
|
|
|
3263
3287
|
let input_element;
|
|
3264
3288
|
// This is the div where we recommend (and ourselves do) attach the event listener to that opens the search modal.
|
|
3265
3289
|
let field_div;
|
|
3266
|
-
$i7OB2$createEffect($i7OB2$
|
|
3290
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
3267
3291
|
if (disabled_) return;
|
|
3268
3292
|
// we aren't in DOM yet unfortunately, wouldn't even be with onMount
|
|
3269
3293
|
await (0, $i7OB2$observer).wait_for_element(input_element);
|
|
@@ -3278,7 +3302,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
|
|
|
3278
3302
|
const BackButton = () => $i7OB2$createComponent((0, $i7OB2$Show), {
|
|
3279
3303
|
when: on_back_,
|
|
3280
3304
|
get children() {
|
|
3281
|
-
return $i7OB2$ssrElement("button", $i7OB2$
|
|
3305
|
+
return $i7OB2$ssrElement("button", $i7OB2$mergeProps({
|
|
3282
3306
|
"class": "back",
|
|
3283
3307
|
type: "button",
|
|
3284
3308
|
get ["aria-label"]() {
|
|
@@ -3292,7 +3316,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
|
|
|
3292
3316
|
}), () => isNewModal ? $i7OB2$escape($i7OB2$createComponent((0, $19976a74d273070d$export$3b621d86b1566b2), {})) : $i7OB2$escape($i7OB2$createComponent(BackIcon_, {})), true);
|
|
3293
3317
|
}
|
|
3294
3318
|
});
|
|
3295
|
-
const ClearButton = () => $i7OB2$ssrElement("button", $i7OB2$
|
|
3319
|
+
const ClearButton = () => $i7OB2$ssrElement("button", $i7OB2$mergeProps({
|
|
3296
3320
|
type: "button",
|
|
3297
3321
|
get ["class"]() {
|
|
3298
3322
|
return `clear ${searchFieldEmpty() ? "empty" : ""}`;
|
|
@@ -3340,7 +3364,7 @@ function $aea1edf92433e81e$export$fe334901e8bebd57() {
|
|
|
3340
3364
|
offset: 0
|
|
3341
3365
|
}, 1);
|
|
3342
3366
|
animation.pause();
|
|
3343
|
-
const fn = $i7OB2$
|
|
3367
|
+
const fn = $i7OB2$catchify(animation.play.bind(animation));
|
|
3344
3368
|
cleanup_fns.push(fn);
|
|
3345
3369
|
$i7OB2$onCleanup(fn);
|
|
3346
3370
|
} catch (e) {
|
|
@@ -3351,7 +3375,7 @@ function $aea1edf92433e81e$export$fe334901e8bebd57() {
|
|
|
3351
3375
|
const style = element.style;
|
|
3352
3376
|
const original_value = style.overflow;
|
|
3353
3377
|
style.overflow = "hidden";
|
|
3354
|
-
const fn = $i7OB2$
|
|
3378
|
+
const fn = $i7OB2$catchify(() => style.overflow = original_value);
|
|
3355
3379
|
cleanup_fns.push(fn);
|
|
3356
3380
|
$i7OB2$onCleanup(fn);
|
|
3357
3381
|
}
|
|
@@ -3374,8 +3398,8 @@ function $512b994d501f412b$export$93d9bfd0c9c1a5b8(close_modal, search_query_url
|
|
|
3374
3398
|
let set_initial_values = false;
|
|
3375
3399
|
let old_pathname;
|
|
3376
3400
|
let old_param_value;
|
|
3377
|
-
$i7OB2$onCleanup($i7OB2$
|
|
3378
|
-
$i7OB2$
|
|
3401
|
+
$i7OB2$onCleanup($i7OB2$catchify(exit_iterable));
|
|
3402
|
+
$i7OB2$catchify(async () => {
|
|
3379
3403
|
for await (const href of exitable_iterable) {
|
|
3380
3404
|
const u_o = new URL(href);
|
|
3381
3405
|
const new_pathname = u_o.pathname;
|
|
@@ -3446,7 +3470,7 @@ function $42912431795f188e$var$RawClassicSearchModal({
|
|
|
3446
3470
|
} = alignmentSignals_ || {};
|
|
3447
3471
|
const [bodyAlignmentStyle] = bodyAlignmentSignal;
|
|
3448
3472
|
const [get_modal_search_results, set_modal_search_results_] = $i7OB2$createSignal();
|
|
3449
|
-
const close_on_escape_handler = $i7OB2$
|
|
3473
|
+
const close_on_escape_handler = $i7OB2$catchify(({
|
|
3450
3474
|
key: key
|
|
3451
3475
|
}) => {
|
|
3452
3476
|
if (key === "Escape") close_modal_();
|
|
@@ -3471,7 +3495,7 @@ function $42912431795f188e$var$RawClassicSearchModal({
|
|
|
3471
3495
|
if (disable_scrolling_) $aea1edf92433e81e$export$fe334901e8bebd57();
|
|
3472
3496
|
$512b994d501f412b$export$93d9bfd0c9c1a5b8(close_modal_, search_query_url_param_name_);
|
|
3473
3497
|
window.addEventListener("keydown", close_on_escape_handler);
|
|
3474
|
-
$i7OB2$onCleanup($i7OB2$
|
|
3498
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => window.removeEventListener("keydown", close_on_escape_handler)));
|
|
3475
3499
|
if (closing_animation_) register_closing_animation_(closing_animation_);
|
|
3476
3500
|
$c64d28ca12452b21$export$3340fdd8259bd4fd({
|
|
3477
3501
|
get_search_field_value_: get_search_field_value_,
|
|
@@ -3842,7 +3866,7 @@ function $4ce5b8892775b62d$export$67152d26d4f56ee8({
|
|
|
3842
3866
|
selected_index_: [read_selected_index_, write_selected_index_]
|
|
3843
3867
|
}) {
|
|
3844
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
|
|
3845
|
-
const LinkToListing = props => $i7OB2$ssrElement("a", $i7OB2$
|
|
3869
|
+
const LinkToListing = props => $i7OB2$ssrElement("a", $i7OB2$mergeProps(props, {
|
|
3846
3870
|
get href() {
|
|
3847
3871
|
return href();
|
|
3848
3872
|
}
|
|
@@ -4132,7 +4156,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
|
|
|
4132
4156
|
$i7OB2$createComputed($i7OB2$on(search_field_value_[0], () => !suggestions_updating_blocked() && set_selected_index(undefined), {
|
|
4133
4157
|
defer: true
|
|
4134
4158
|
})); // reset autocomplete position if query changes
|
|
4135
|
-
return [$i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$
|
|
4159
|
+
return [$i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
|
|
4136
4160
|
get title_() {
|
|
4137
4161
|
return i18n_.popular_;
|
|
4138
4162
|
},
|
|
@@ -4142,7 +4166,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
|
|
|
4142
4166
|
return itemIndexes_.suggestionsIndex_;
|
|
4143
4167
|
},
|
|
4144
4168
|
showPlaceholders_: () => showPlaceholders() || noResults_() && !noResultsPopularSuggestions.latest
|
|
4145
|
-
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$
|
|
4169
|
+
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
|
|
4146
4170
|
get title_() {
|
|
4147
4171
|
return i18n_.previous_;
|
|
4148
4172
|
},
|
|
@@ -4153,7 +4177,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
|
|
|
4153
4177
|
},
|
|
4154
4178
|
extraTitleRowElements_: () => $i7OB2$ssr($2f3171b02c8f4a5d$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(i18n_.clear_all_from_filter_crumbs_())),
|
|
4155
4179
|
showPlaceholders_: () => false
|
|
4156
|
-
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$
|
|
4180
|
+
})), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
|
|
4157
4181
|
get title_() {
|
|
4158
4182
|
return i18n_.content_;
|
|
4159
4183
|
},
|
|
@@ -4291,7 +4315,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
|
|
|
4291
4315
|
const random_classname_body = $i7OB2$make_random_classname();
|
|
4292
4316
|
const backdropRandomClassname = $i7OB2$make_random_classname();
|
|
4293
4317
|
const [get_modal_search_results_, set_modal_search_results_] = $i7OB2$createSignal();
|
|
4294
|
-
const close_on_escape_handler = $i7OB2$
|
|
4318
|
+
const close_on_escape_handler = $i7OB2$catchify(evt => {
|
|
4295
4319
|
if (evt.key === "Escape") {
|
|
4296
4320
|
evt.preventDefault(); // Prevent the browser from closing/cancelling the modal so our animations have time to run
|
|
4297
4321
|
close_modal_();
|
|
@@ -4387,7 +4411,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
|
|
|
4387
4411
|
$i7OB2$createEffect($i7OB2$on(get_search_field_value_, () => {
|
|
4388
4412
|
setShowStaleListingSuggestions(true);
|
|
4389
4413
|
clearTimeout(listingSuggestionsDebounceTimeout);
|
|
4390
|
-
listingSuggestionsDebounceTimeout = setTimeout($i7OB2$
|
|
4414
|
+
listingSuggestionsDebounceTimeout = setTimeout($i7OB2$catchify(() => setShowStaleListingSuggestions(false)), 350);
|
|
4391
4415
|
}, {
|
|
4392
4416
|
defer: true
|
|
4393
4417
|
}));
|
|
@@ -4522,7 +4546,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
|
|
|
4522
4546
|
}
|
|
4523
4547
|
});
|
|
4524
4548
|
if (setSearchFieldOuterWidth_) {
|
|
4525
|
-
const resizeObserver = new ResizeObserver($i7OB2$
|
|
4549
|
+
const resizeObserver = new ResizeObserver($i7OB2$catchify(records => setSearchFieldOuterWidth_(records.at(-1).contentRect.width)));
|
|
4526
4550
|
resizeObserver.observe(search_field);
|
|
4527
4551
|
$i7OB2$onCleanup(() => resizeObserver.disconnect());
|
|
4528
4552
|
}
|
|
@@ -4556,7 +4580,7 @@ function $024fbc0a2d796fad$export$b2539bed5023c21c(props) {
|
|
|
4556
4580
|
return $i7OB2$createComponent($024fbc0a2d796fad$var$TabsContext.Provider, {
|
|
4557
4581
|
value: new (0, $i7OB2$ListenableSet)(),
|
|
4558
4582
|
get children() {
|
|
4559
|
-
return $i7OB2$createComponent($024fbc0a2d796fad$var$ActualTabs, $i7OB2$
|
|
4583
|
+
return $i7OB2$createComponent($024fbc0a2d796fad$var$ActualTabs, $i7OB2$mergeProps(props, {
|
|
4560
4584
|
get children() {
|
|
4561
4585
|
return props.children;
|
|
4562
4586
|
}
|
|
@@ -4572,7 +4596,7 @@ function $024fbc0a2d796fad$var$ActualTabs(props) {
|
|
|
4572
4596
|
});
|
|
4573
4597
|
const isSelected = $i7OB2$createSelector(currentlySelected);
|
|
4574
4598
|
const owner = $i7OB2$getOwner();
|
|
4575
|
-
const updateTabsSignal = $i7OB2$
|
|
4599
|
+
const updateTabsSignal = $i7OB2$catchify1(() => $i7OB2$runWithOwner(owner, () => setTabsReactive([...ourTabsSet])));
|
|
4576
4600
|
const ourTabsSet = $024fbc0a2d796fad$var$useTabs();
|
|
4577
4601
|
const location = $i7OB2$use_href_accessor1();
|
|
4578
4602
|
const linkWithChangedHash = hash => {
|
|
@@ -4586,7 +4610,7 @@ function $024fbc0a2d796fad$var$ActualTabs(props) {
|
|
|
4586
4610
|
},
|
|
4587
4611
|
children: item => {
|
|
4588
4612
|
const weSelected = $i7OB2$createMemo(() => isSelected(item().id));
|
|
4589
|
-
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$
|
|
4613
|
+
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps({
|
|
4590
4614
|
get component() {
|
|
4591
4615
|
return props.AnchorComponent;
|
|
4592
4616
|
},
|
|
@@ -4665,7 +4689,7 @@ function $024fbc0a2d796fad$export$3e41faf802a29e71(props) {
|
|
|
4665
4689
|
if (!currentTabs) throw new Error("Tab must be a child of Tabs");
|
|
4666
4690
|
const id = $i7OB2$createUniqueId();
|
|
4667
4691
|
const ourSet = currentTabs;
|
|
4668
|
-
const extendedProps = $i7OB2$
|
|
4692
|
+
const extendedProps = $i7OB2$mergeProps1({
|
|
4669
4693
|
id: id
|
|
4670
4694
|
}, props);
|
|
4671
4695
|
ourSet.add(extendedProps);
|
|
@@ -4675,7 +4699,7 @@ function $024fbc0a2d796fad$export$3e41faf802a29e71(props) {
|
|
|
4675
4699
|
async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_opts, parent) {
|
|
4676
4700
|
const body = parent || document.body || (await (0, $i7OB2$observer).wait_for_element("body"));
|
|
4677
4701
|
let dispose_and_remove;
|
|
4678
|
-
const open_modal_ = $i7OB2$
|
|
4702
|
+
const open_modal_ = $i7OB2$catchify(async (extra_options_for_modal = {}, on_dispose) => {
|
|
4679
4703
|
// Below await is very intentional,
|
|
4680
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
|
|
4681
4705
|
// This is because the suspense is for the content in the page and not the modal (the modal goes above it)
|
|
@@ -4705,7 +4729,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
|
|
|
4705
4729
|
// Animation broke, close it this time
|
|
4706
4730
|
actually_close();else if (!animation_started && closing_animation) {
|
|
4707
4731
|
animation_started = +new Date();
|
|
4708
|
-
$i7OB2$
|
|
4732
|
+
$i7OB2$catchify(closing_animation)()?.then($i7OB2$catchify(actually_close));
|
|
4709
4733
|
} else actually_close();
|
|
4710
4734
|
};
|
|
4711
4735
|
return search_modal({
|
|
@@ -4718,7 +4742,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
|
|
|
4718
4742
|
});
|
|
4719
4743
|
body.append(...modal_els);
|
|
4720
4744
|
});
|
|
4721
|
-
const close_modal_ = $i7OB2$
|
|
4745
|
+
const close_modal_ = $i7OB2$catchify(() => {
|
|
4722
4746
|
if (dispose_and_remove) {
|
|
4723
4747
|
// modal is open
|
|
4724
4748
|
const dispose_fn = dispose_and_remove;
|
|
@@ -4735,7 +4759,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
|
|
|
4735
4759
|
function $ca6f574bd8772184$export$e183a13865960371(params_to_default_value, router_) {
|
|
4736
4760
|
const signals = {};
|
|
4737
4761
|
const entries = Object.entries(params_to_default_value);
|
|
4738
|
-
const event_handler = $i7OB2$
|
|
4762
|
+
const event_handler = $i7OB2$catchify((what_happened, args) => {
|
|
4739
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
|
|
4740
4764
|
if (what_happened !== "popstate") return;
|
|
4741
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.
|
|
@@ -4766,8 +4790,8 @@ function $ca6f574bd8772184$export$e183a13865960371(params_to_default_value, rout
|
|
|
4766
4790
|
});
|
|
4767
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
|
|
4768
4792
|
(0, $i7OB2$instant_exec_on_suspect_history_change).add(event_handler);
|
|
4769
|
-
$i7OB2$onCleanup($i7OB2$
|
|
4770
|
-
$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
|
|
4771
4795
|
return signals;
|
|
4772
4796
|
}
|
|
4773
4797
|
function $ca6f574bd8772184$var$history_state_change(signals, entries, state) {
|
|
@@ -4901,7 +4925,7 @@ function $45d4ed34a22ab90c$export$6b35356958ae5587(props) {
|
|
|
4901
4925
|
// If someone clicks on a product card in the shop the look modal, close the modal the next time the href changes
|
|
4902
4926
|
for (const item of resolved()) {
|
|
4903
4927
|
if (!(item instanceof Element)) return;
|
|
4904
|
-
item.addEventListener("click", $i7OB2$
|
|
4928
|
+
item.addEventListener("click", $i7OB2$catchify(() =>
|
|
4905
4929
|
// run with modal owner so we don't do stuff after the modal closes
|
|
4906
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)
|
|
4907
4931
|
$i7OB2$runWithOwner(props.modalOwner_, () => $i7OB2$createEffect($i7OB2$on(hrefWithoutHash, props.actually_close_modal_, {
|
|
@@ -5082,7 +5106,7 @@ function $8560c919ff763930$var$ActualShopTheLookButton(props) {
|
|
|
5082
5106
|
const button = $i7OB2$ssrElement("button", localProps.buttonAttributes, () => $i7OB2$escape(localProps?.buttonAttributes?.children) || "Shop the look", true);
|
|
5083
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
|
|
5084
5108
|
$i7OB2$createEffect(() => !hasAnythingToShow() && closeModal()); // close modal if we ever get into the state of having it open and not having anything to show
|
|
5085
|
-
$8560c919ff763930$var$modalProps = $i7OB2$
|
|
5109
|
+
$8560c919ff763930$var$modalProps = $i7OB2$mergeProps1(partForModal, {
|
|
5086
5110
|
products_to_shop_: products_to_shop_
|
|
5087
5111
|
});
|
|
5088
5112
|
button.addEventListener("click", openModal);
|
|
@@ -5110,7 +5134,7 @@ function $8560c919ff763930$var$actualSetupModal() {
|
|
|
5110
5134
|
(0, $90980bd87c9960f9$export$3064e1e8c6513da3).add(history_key);
|
|
5111
5135
|
const actually_close_modal_ = () => set_history_value(false);
|
|
5112
5136
|
const owner = $i7OB2$getOwner();
|
|
5113
|
-
$i7OB2$
|
|
5137
|
+
$i7OB2$catchify(async () => {
|
|
5114
5138
|
const {
|
|
5115
5139
|
open_modal_: open_modal_,
|
|
5116
5140
|
close_modal_: close_modal_
|
|
@@ -5183,15 +5207,15 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
|
|
|
5183
5207
|
$i7OB2$insert(details_, [summary_, $i7OB2$createComponent(ExpandingContainer, {
|
|
5184
5208
|
children: children
|
|
5185
5209
|
})], null);
|
|
5186
|
-
if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(details_).then($i7OB2$
|
|
5187
|
-
$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 () => {
|
|
5188
5212
|
const is_open = is_open_memo();
|
|
5189
5213
|
if (!is_in_dom())
|
|
5190
5214
|
// wait with setting state until we're in DOM, animation won't work otherwise
|
|
5191
5215
|
return;
|
|
5192
5216
|
if (dont_animate_if_instant_open_ && fresh_component && !timeout_started) {
|
|
5193
5217
|
timeout_started = true;
|
|
5194
|
-
setTimeout($i7OB2$
|
|
5218
|
+
setTimeout($i7OB2$catchify(() => fresh_component = false));
|
|
5195
5219
|
}
|
|
5196
5220
|
if (is_open) {
|
|
5197
5221
|
details_.open = true; // open up the toggle so the animation can happen
|
|
@@ -5199,10 +5223,10 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
|
|
|
5199
5223
|
await expand(0, do_duration);
|
|
5200
5224
|
} else {
|
|
5201
5225
|
const animation = await collapse();
|
|
5202
|
-
animation?.addEventListener("finish", $i7OB2$
|
|
5226
|
+
animation?.addEventListener("finish", $i7OB2$catchify(() => details_.open = false));
|
|
5203
5227
|
}
|
|
5204
5228
|
}));
|
|
5205
|
-
details_.addEventListener("toggle", $i7OB2$
|
|
5229
|
+
details_.addEventListener("toggle", $i7OB2$catchify(() => {
|
|
5206
5230
|
const {
|
|
5207
5231
|
open: open
|
|
5208
5232
|
} = details_;
|
|
@@ -5212,11 +5236,11 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
|
|
|
5212
5236
|
}) // in case someone somehow toggles it without us intercepting it at least follow suit
|
|
5213
5237
|
);
|
|
5214
5238
|
|
|
5215
|
-
summary_.addEventListener("click", $i7OB2$
|
|
5239
|
+
summary_.addEventListener("click", $i7OB2$catchify(ev => {
|
|
5216
5240
|
ev.preventDefault();
|
|
5217
5241
|
toggle();
|
|
5218
5242
|
}));
|
|
5219
|
-
summary_.addEventListener("keydown", $i7OB2$
|
|
5243
|
+
summary_.addEventListener("keydown", $i7OB2$catchify(ev => {
|
|
5220
5244
|
const {
|
|
5221
5245
|
key: key
|
|
5222
5246
|
} = ev;
|
|
@@ -5439,9 +5463,9 @@ function $1adfe60f3a14a1d7$export$fecbb157621501bd({
|
|
|
5439
5463
|
});
|
|
5440
5464
|
const [is_in_dom, set_is_in_dom] = $i7OB2$createSignal(document.documentElement.contains(outmost_element));
|
|
5441
5465
|
const hidden = $i7OB2$createMemo(() => get_search_filters_open_() || get_search_sorting_open_());
|
|
5442
|
-
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)));
|
|
5443
5467
|
outmost_element.classList.add("selected-filters");
|
|
5444
|
-
$i7OB2$createEffect($i7OB2$
|
|
5468
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
5445
5469
|
if (!is_in_dom())
|
|
5446
5470
|
// wait with setting state until we're in DOM, animation won't work otherwise
|
|
5447
5471
|
return;
|
|
@@ -5474,7 +5498,7 @@ const $49b79728e7d9e2a1$export$48513f6b9f8ce62d = props => {
|
|
|
5474
5498
|
};
|
|
5475
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>';
|
|
5476
5500
|
function $f8a56ba74eedd0c6$export$f21ab0717a89c77f(props) {
|
|
5477
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
5501
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps(props, {
|
|
5478
5502
|
xmlns: "http://www.w3.org/2000/svg",
|
|
5479
5503
|
width: "11",
|
|
5480
5504
|
height: "12"
|
|
@@ -5588,7 +5612,7 @@ function $a4601e6bea3ed1e6$export$dd948f91abc3a1c4({
|
|
|
5588
5612
|
}) : []);
|
|
5589
5613
|
});
|
|
5590
5614
|
$i7OB2$onCleanup(() => set_view_more_button_below_group_());
|
|
5591
|
-
$i7OB2$createEffect($i7OB2$
|
|
5615
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
5592
5616
|
if (!togglable_rest()) {
|
|
5593
5617
|
await collapse();
|
|
5594
5618
|
return;
|
|
@@ -5700,7 +5724,7 @@ function $a6b08770e164eced$export$e0d834a0ad870cda({
|
|
|
5700
5724
|
});
|
|
5701
5725
|
$i7OB2$createComputed(() => {
|
|
5702
5726
|
clearTimeout(debounce_timeout);
|
|
5703
|
-
debounce_timeout = setTimeout($i7OB2$
|
|
5727
|
+
debounce_timeout = setTimeout($i7OB2$catchify(range => $i7OB2$untrack(() => {
|
|
5704
5728
|
const default_data = defaultRange();
|
|
5705
5729
|
const filter_object = {
|
|
5706
5730
|
op: filter_().op,
|
|
@@ -6257,7 +6281,7 @@ function $1c8cac76cb67e9af$export$a32086fa6616eafd({
|
|
|
6257
6281
|
}) : []);
|
|
6258
6282
|
});
|
|
6259
6283
|
$i7OB2$onCleanup(() => set_view_more_button_below_group());
|
|
6260
|
-
$i7OB2$createEffect($i7OB2$
|
|
6284
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
6261
6285
|
if (!some_top_level_are_hidden()) {
|
|
6262
6286
|
await collapse();
|
|
6263
6287
|
return;
|
|
@@ -6317,7 +6341,7 @@ function $1c8cac76cb67e9af$var$render_stuff(data, existing_filter, i18n_, filter
|
|
|
6317
6341
|
return value()?.is_checked_?.[0]?.() ?? false;
|
|
6318
6342
|
},
|
|
6319
6343
|
input_ref_: input => {
|
|
6320
|
-
input.addEventListener("change", $i7OB2$
|
|
6344
|
+
input.addEventListener("change", $i7OB2$catchify(() => $i7OB2$untrack(() => {
|
|
6321
6345
|
const {
|
|
6322
6346
|
checked: checked
|
|
6323
6347
|
} = input;
|
|
@@ -6392,7 +6416,7 @@ function $1c8cac76cb67e9af$var$batching_filter_state_syncer(props) {
|
|
|
6392
6416
|
existing_filter_: existing_filter_
|
|
6393
6417
|
} = props;
|
|
6394
6418
|
let sync_queued = false;
|
|
6395
|
-
const sync_fn = $i7OB2$
|
|
6419
|
+
const sync_fn = $i7OB2$catchify(async () => {
|
|
6396
6420
|
sync_queued = false;
|
|
6397
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
|
|
6398
6422
|
const set_filter = existing_filter_();
|
|
@@ -6449,13 +6473,13 @@ function $1c8cac76cb67e9af$var$create_updating_signal({
|
|
|
6449
6473
|
$i7OB2$createComputed($i7OB2$on(read_checked, trigger_sync_, {
|
|
6450
6474
|
defer: true
|
|
6451
6475
|
}));
|
|
6452
|
-
$i7OB2$createComputed($i7OB2$on(read_checked, $i7OB2$
|
|
6476
|
+
$i7OB2$createComputed($i7OB2$on(read_checked, $i7OB2$catchify(new_value => {
|
|
6453
6477
|
if (updating_blocked) return;
|
|
6454
6478
|
for (const child of child_objects) child.is_checked_[1](new_value);
|
|
6455
6479
|
}), {
|
|
6456
6480
|
defer: true
|
|
6457
6481
|
}));
|
|
6458
|
-
$i7OB2$createEffect($i7OB2$on(get_child_object_values, $i7OB2$
|
|
6482
|
+
$i7OB2$createEffect($i7OB2$on(get_child_object_values, $i7OB2$catchify(() => {
|
|
6459
6483
|
const all_kids_checked = get_child_object_values.every(accessor => accessor());
|
|
6460
6484
|
if (all_kids_checked === read_checked()) return;
|
|
6461
6485
|
updating_blocked = true;
|
|
@@ -6618,7 +6642,7 @@ const $93716a9ad0dea854$export$414f6a19d38e655c = ({
|
|
|
6618
6642
|
const MakeButton = attributes => {
|
|
6619
6643
|
const label = $i7OB2$createMemo(() => value().name_ || value().value_ + "");
|
|
6620
6644
|
const count_zero = $i7OB2$createMemo(() => value().count_ === 0);
|
|
6621
|
-
return $i7OB2$ssrElement("button", $i7OB2$
|
|
6645
|
+
return $i7OB2$ssrElement("button", $i7OB2$mergeProps(attributes, {
|
|
6622
6646
|
get disabled() {
|
|
6623
6647
|
return count_zero() && !is_selected();
|
|
6624
6648
|
},
|
|
@@ -6880,7 +6904,7 @@ function $e731d52d97444b7c$export$82ed4b28ecb67608({
|
|
|
6880
6904
|
}) : []);
|
|
6881
6905
|
});
|
|
6882
6906
|
$i7OB2$onCleanup(() => set_view_more_button_below_group_());
|
|
6883
|
-
$i7OB2$createEffect($i7OB2$
|
|
6907
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
6884
6908
|
if (!togglable_rest()) {
|
|
6885
6909
|
await collapse();
|
|
6886
6910
|
set_having_expanding_in_dom(false); // Once animation has finished, remove expanding from DOM
|
|
@@ -6920,7 +6944,7 @@ var $12497d09ef87296e$export$2e2bcd8739ae039 = {
|
|
|
6920
6944
|
};
|
|
6921
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>';
|
|
6922
6946
|
function $9bc34983fc5f7bdb$export$f2ca6fc699ca1fb4(props = {}) {
|
|
6923
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
6947
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
6924
6948
|
xmlns: "http://www.w3.org/2000/svg",
|
|
6925
6949
|
width: "16.8",
|
|
6926
6950
|
height: "14"
|
|
@@ -7563,7 +7587,7 @@ const $a6e23a834336fc19$export$824dde41348efed1 = /*@__PURE__*/(() => {
|
|
|
7563
7587
|
|
|
7564
7588
|
const observe_to_signal = (element, setter) => {
|
|
7565
7589
|
const computed_style = getComputedStyle(element);
|
|
7566
|
-
const resize_observer = new ResizeObserver($i7OB2$
|
|
7590
|
+
const resize_observer = new ResizeObserver($i7OB2$catchify(() => {
|
|
7567
7591
|
setter(element.getBoundingClientRect().width + parseFloat(computed_style.marginLeft) + parseFloat(computed_style.marginRight) + parseFloat(computed_style.borderRightWidth) + parseFloat(computed_style.borderLeftWidth));
|
|
7568
7592
|
}));
|
|
7569
7593
|
resize_observer.observe(element);
|
|
@@ -7801,7 +7825,7 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
|
|
|
7801
7825
|
return this.#cache_objs[endpoint] ||= {
|
|
7802
7826
|
in_progress_: {},
|
|
7803
7827
|
cache_: {},
|
|
7804
|
-
finalization_registry_: this.#supports_finalization_registry ? new FinalizationRegistry($i7OB2$
|
|
7828
|
+
finalization_registry_: this.#supports_finalization_registry ? new FinalizationRegistry($i7OB2$catchify(key => {
|
|
7805
7829
|
const our_cache = this.#cache_objs[endpoint].cache_;
|
|
7806
7830
|
$i7OB2$dlog1("[Search API]: removing", key, "from", our_cache);
|
|
7807
7831
|
delete our_cache[key];
|
|
@@ -7851,7 +7875,7 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
|
|
|
7851
7875
|
// Filter out our transformed ancestors
|
|
7852
7876
|
const transformedAncestors = Object.fromEntries(transformerResult.filter(item => item.is_suggestion === false).map(item => [item.listing_id, item]));
|
|
7853
7877
|
// Add the now transformed ancestors into the ancestors of the listing suggestions
|
|
7854
|
-
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, {
|
|
7855
7879
|
// Use mergeProps instead of spread since page_url and other properties could be a getter that solid components should call
|
|
7856
7880
|
ancestors: item.ancestors.map(ancestor => {
|
|
7857
7881
|
const newAncestor = transformedAncestors[ancestor.listing_id];
|
|
@@ -7949,11 +7973,11 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
|
|
|
7949
7973
|
result = $e5014ccd0b76d9f4$export$967e966fca9515e(result);
|
|
7950
7974
|
cache_obj.cache_[body] = new WeakRef(result);
|
|
7951
7975
|
resolve_in_progress(result);
|
|
7952
|
-
setTimeout($i7OB2$
|
|
7976
|
+
setTimeout($i7OB2$catchify(() => {
|
|
7953
7977
|
if (this.#supports_finalization_registry) cache_obj.finalization_registry_.register(result, body); // delete key from cache when value (WeakRefs) are collected
|
|
7954
7978
|
else
|
|
7955
7979
|
// delete things from cache after 5 minutes, so it doesn't get too heavy
|
|
7956
|
-
setTimeout($i7OB2$
|
|
7980
|
+
setTimeout($i7OB2$catchify(() => delete cache_obj.cache_[body]), 300000);
|
|
7957
7981
|
}), 60000 // cache values for at least 60 seconds
|
|
7958
7982
|
);
|
|
7959
7983
|
|
|
@@ -8084,7 +8108,7 @@ function $ccd5db07a3a069c5$export$477caf01aecaeb2a(options) {
|
|
|
8084
8108
|
const [get_selected_filters_, set_selected_filters] = selected_filters_;
|
|
8085
8109
|
const [get_has_sideways_filter_clearing_flag_, set_has_sideways_filter_clearing_flag] = sideways_filter_clearing_flag_;
|
|
8086
8110
|
const [get_current_href, set_current_href] = $i7OB2$createSignal(globalThis?.location?.href ?? "https://example.com");
|
|
8087
|
-
const history_change_handler = $i7OB2$
|
|
8111
|
+
const history_change_handler = $i7OB2$catchify(() => set_current_href(location.href));
|
|
8088
8112
|
const owner = $i7OB2$getOwner() || $i7OB2$createRoot(() => $i7OB2$getOwner());
|
|
8089
8113
|
const {
|
|
8090
8114
|
sorting_query_param_: sorting_query_param_,
|
|
@@ -8385,7 +8409,7 @@ function $172e1b898d457050$export$7de92c4c2205ebf3({
|
|
|
8385
8409
|
return (0, $7747fe1a8c5652e3$export$6c9030e511152266) + get_showing_recommendation_rows() * Math.max(...possible_num_columns);
|
|
8386
8410
|
});
|
|
8387
8411
|
// Don't tear down elements every time one updates the page - don't put them within <Show>
|
|
8388
|
-
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({
|
|
8389
8413
|
rows: rows_object,
|
|
8390
8414
|
layout: "grid",
|
|
8391
8415
|
element_attributes: {
|
|
@@ -8453,13 +8477,13 @@ function $bf52d9f9eebd1938$export$5196e4c01fa56fcb({
|
|
|
8453
8477
|
}) {
|
|
8454
8478
|
let close_toast_;
|
|
8455
8479
|
const stay_open_promise = new Promise(r => close_toast_ = r);
|
|
8456
|
-
$i7OB2$
|
|
8480
|
+
$i7OB2$catchify(async () => {
|
|
8457
8481
|
const closing_animation_duration = 300; // ms
|
|
8458
8482
|
const element = $i7OB2$ssrElement("div", more_attributes, () => $i7OB2$escape(children), true);
|
|
8459
8483
|
const [, set_is_showing_toast] = $bf52d9f9eebd1938$export$22970a0140fc759c;
|
|
8460
8484
|
// if this is a memory leak the garbage collector is stupid - does someone know?
|
|
8461
|
-
for (const ev of ["pointerover", "focusin"]) element.addEventListener(ev, $i7OB2$
|
|
8462
|
-
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()));
|
|
8463
8487
|
const body = await (0, $i7OB2$observer).wait_for_element("body");
|
|
8464
8488
|
const x_translate = "translateX(-50%) ";
|
|
8465
8489
|
let remove_keyboard_listener;
|
|
@@ -8484,7 +8508,7 @@ function $bf52d9f9eebd1938$export$5196e4c01fa56fcb({
|
|
|
8484
8508
|
// let other toasts close us if they open while we're still here
|
|
8485
8509
|
$bf52d9f9eebd1938$var$closing_functions.add(close_toast_);
|
|
8486
8510
|
set_is_showing_toast(true);
|
|
8487
|
-
const handler = $i7OB2$
|
|
8511
|
+
const handler = $i7OB2$catchify(({
|
|
8488
8512
|
key: key
|
|
8489
8513
|
}) => {
|
|
8490
8514
|
if (key === "Escape")
|
|
@@ -8617,7 +8641,7 @@ function $48d7e4a9707315b6$export$e026af0c7b64ea5f({
|
|
|
8617
8641
|
}, {
|
|
8618
8642
|
defer: true
|
|
8619
8643
|
}));
|
|
8620
|
-
$i7OB2$createComputed($i7OB2$on(get_search_query_, $i7OB2$
|
|
8644
|
+
$i7OB2$createComputed($i7OB2$on(get_search_query_, $i7OB2$catchify(() => {
|
|
8621
8645
|
// when a query was submitted, clear filters if clear was pressed before
|
|
8622
8646
|
const clear_value = $i7OB2$untrack(get_clear_filters_next_submit);
|
|
8623
8647
|
if (clear_value) {
|
|
@@ -8644,11 +8668,11 @@ function $21f51c14cb3f586f$export$84bba84a7b837187(read_search_query) {
|
|
|
8644
8668
|
const key = "depict_searches";
|
|
8645
8669
|
const previous_searches = $i7OB2$createSignal(JSON.parse(ls[key] || "[]"));
|
|
8646
8670
|
const [read_previous_searches, write_previous_searches] = previous_searches;
|
|
8647
|
-
$i7OB2$createEffect($i7OB2$
|
|
8671
|
+
$i7OB2$createEffect($i7OB2$catchify(() => {
|
|
8648
8672
|
const json_encoded = JSON.stringify(read_previous_searches());
|
|
8649
8673
|
if (ls[key] !== json_encoded) ls[key] = json_encoded;
|
|
8650
8674
|
}));
|
|
8651
|
-
$i7OB2$createComputed($i7OB2$
|
|
8675
|
+
$i7OB2$createComputed($i7OB2$catchify(() => {
|
|
8652
8676
|
const searches = $i7OB2$untrack(read_previous_searches);
|
|
8653
8677
|
const current_query = read_search_query();
|
|
8654
8678
|
if (!current_query)
|
|
@@ -8691,7 +8715,7 @@ async function $bfd908d13d90934c$export$e16630ecb9644a1c({
|
|
|
8691
8715
|
after_submit_?.();
|
|
8692
8716
|
}
|
|
8693
8717
|
function $8f9120a1ca151e6a$export$205efb947c7ffd78(handler, passive = true, override_element) {
|
|
8694
|
-
const catchified_handler = $i7OB2$
|
|
8718
|
+
const catchified_handler = $i7OB2$catchify(handler);
|
|
8695
8719
|
const owner = $i7OB2$getOwner();
|
|
8696
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.
|
|
8697
8721
|
// Use observer in case that this gets called before body exists
|
|
@@ -8733,7 +8757,7 @@ function $d68658730065de95$export$181cceed5c91919e(callback, alsoRaF, passiveLis
|
|
|
8733
8757
|
$i7OB2$createEffect(() => {
|
|
8734
8758
|
if (alsoRaF?.()) {
|
|
8735
8759
|
let disposed = false;
|
|
8736
|
-
const fn = $i7OB2$
|
|
8760
|
+
const fn = $i7OB2$catchify(() => {
|
|
8737
8761
|
if (disposed) return;
|
|
8738
8762
|
probablyCallCallback();
|
|
8739
8763
|
requestAnimationFrame(fn);
|
|
@@ -8746,10 +8770,10 @@ function $d68658730065de95$export$181cceed5c91919e(callback, alsoRaF, passiveLis
|
|
|
8746
8770
|
// "resize" doesn't fire sometimes when it should, also it doesn't when showing/hiding scrollbars which disabling scrolling does
|
|
8747
8771
|
// this works
|
|
8748
8772
|
// keeping resize just in case
|
|
8749
|
-
const resize_resize_observer = new ResizeObserver($i7OB2$
|
|
8773
|
+
const resize_resize_observer = new ResizeObserver($i7OB2$catchify(probablyCallCallback));
|
|
8750
8774
|
resize_resize_observer.observe(document.documentElement);
|
|
8751
8775
|
(0, $i7OB2$observer).wait_for_element("body").then(resize_resize_observer.observe.bind(resize_resize_observer));
|
|
8752
|
-
$i7OB2$onCleanup($i7OB2$
|
|
8776
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => resize_resize_observer.disconnect()));
|
|
8753
8777
|
return probablyCallCallback;
|
|
8754
8778
|
}
|
|
8755
8779
|
const $b6d5529b253681aa$export$3f238c96c45e6cc6 = 1;
|
|
@@ -8780,7 +8804,7 @@ function $b6d5529b253681aa$export$b3ad617e9036868({
|
|
|
8780
8804
|
}, pollAlignment);
|
|
8781
8805
|
let ro;
|
|
8782
8806
|
if (alignment & $b6d5529b253681aa$export$902f8b4a7dae5d78 || alignment & $b6d5529b253681aa$export$5097308c5200105a) {
|
|
8783
|
-
ro = new ResizeObserver($i7OB2$
|
|
8807
|
+
ro = new ResizeObserver($i7OB2$catchify(records => {
|
|
8784
8808
|
records.forEach(({
|
|
8785
8809
|
contentRect: {
|
|
8786
8810
|
width: width
|
|
@@ -8803,7 +8827,7 @@ function $b6d5529b253681aa$export$b3ad617e9036868({
|
|
|
8803
8827
|
}));
|
|
8804
8828
|
ro.observe(input_field);
|
|
8805
8829
|
}
|
|
8806
|
-
$i7OB2$onCleanup($i7OB2$
|
|
8830
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => ro?.disconnect()));
|
|
8807
8831
|
return ensureAlignedPosition;
|
|
8808
8832
|
}
|
|
8809
8833
|
const $fc5a12f3a857ca30$var$get_available_range = (available_filters_, search_for_field) => {
|
|
@@ -9003,7 +9027,7 @@ function $6db49ca163afa2c3$export$83fd5de5504a7a67({
|
|
|
9003
9027
|
fill: "forwards",
|
|
9004
9028
|
easing: "ease-in-out"
|
|
9005
9029
|
});
|
|
9006
|
-
animation.addEventListener("finish", $i7OB2$
|
|
9030
|
+
animation.addEventListener("finish", $i7OB2$catchify(() => {
|
|
9007
9031
|
if (unpermit_when_possible) set_permitted_to_show(false);
|
|
9008
9032
|
animation = undefined;
|
|
9009
9033
|
element.style.display = "none";
|
|
@@ -9068,7 +9092,7 @@ function $056f6ac0a6caa919$export$5e4aed86c12acdd9({
|
|
|
9068
9092
|
is_first_load = true;
|
|
9069
9093
|
});
|
|
9070
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
|
|
9071
|
-
$i7OB2$createEffect($i7OB2$
|
|
9095
|
+
$i7OB2$createEffect($i7OB2$catchify(async () => {
|
|
9072
9096
|
const be_above_percentage = is_first_load ? 50 : 75; // if first load, load earlier
|
|
9073
9097
|
if (percentage_in_view_() < be_above_percentage || is_loading_more) return;
|
|
9074
9098
|
if (!get_last_cursor()) {
|
|
@@ -9197,7 +9221,7 @@ var $6dee9211e57ac31a$var$_tmpl$ = ["<style", ' type="text/css">', "</style>"];
|
|
|
9197
9221
|
const $6dee9211e57ac31a$export$c500183c31c2b22e = "--spans-columns";
|
|
9198
9222
|
function $6dee9211e57ac31a$export$ab6b147eec64fea5(props) {
|
|
9199
9223
|
const container_class = "x" + $i7OB2$createUniqueId();
|
|
9200
|
-
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$
|
|
9224
|
+
const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps(() => props.element_attributes, {
|
|
9201
9225
|
classList: {
|
|
9202
9226
|
[container_class]: true
|
|
9203
9227
|
}
|
|
@@ -9494,7 +9518,7 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
|
|
|
9494
9518
|
} = slider;
|
|
9495
9519
|
const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
|
|
9496
9520
|
// Do like this, so we don't have to call mergeProps ourselves
|
|
9497
|
-
$i7OB2$createComponent(Layout, $i7OB2$
|
|
9521
|
+
$i7OB2$createComponent(Layout, $i7OB2$mergeProps(layout_options_, {
|
|
9498
9522
|
rows: "all",
|
|
9499
9523
|
get cols_at_size() {
|
|
9500
9524
|
return modified_cols_at_size();
|
|
@@ -9568,7 +9592,7 @@ function $f8c929beb82c512b$export$9dd50d35b9d94fdf({
|
|
|
9568
9592
|
number_of_results_: number_of_results_,
|
|
9569
9593
|
type: type
|
|
9570
9594
|
}) {
|
|
9571
|
-
const contents = $i7OB2$createMemo($i7OB2$
|
|
9595
|
+
const contents = $i7OB2$createMemo($i7OB2$catchify(() => {
|
|
9572
9596
|
const q = get_search_query_();
|
|
9573
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_());
|
|
9574
9598
|
}));
|
|
@@ -9640,7 +9664,7 @@ function $68a258a92b88f02f$export$1f1775a58da589b5({
|
|
|
9640
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>',
|
|
9641
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>';
|
|
9642
9666
|
function $e1bb71e65e01a3a0$export$da32f7add8a22e86(props = {}) {
|
|
9643
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
9667
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
9644
9668
|
xmlns: "http://www.w3.org/2000/svg",
|
|
9645
9669
|
width: "14",
|
|
9646
9670
|
height: "14",
|
|
@@ -9649,7 +9673,7 @@ function $e1bb71e65e01a3a0$export$da32f7add8a22e86(props = {}) {
|
|
|
9649
9673
|
}
|
|
9650
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>';
|
|
9651
9675
|
function $05fbe84eb34564ec$export$d10e63059ddb9fd4(props = {}) {
|
|
9652
|
-
return $i7OB2$ssrElement("svg", $i7OB2$
|
|
9676
|
+
return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
|
|
9653
9677
|
xmlns: "http://www.w3.org/2000/svg",
|
|
9654
9678
|
width: "14",
|
|
9655
9679
|
height: "14",
|
|
@@ -9715,7 +9739,7 @@ function $757dac7f7c6c5241$export$9bf11afa910f536e({
|
|
|
9715
9739
|
set_search_sorting_open(true);
|
|
9716
9740
|
}
|
|
9717
9741
|
});
|
|
9718
|
-
$i7OB2$onCleanup($i7OB2$
|
|
9742
|
+
$i7OB2$onCleanup($i7OB2$catchify(() => {
|
|
9719
9743
|
if (!sorting_expanded() && !filters_expanded()) {
|
|
9720
9744
|
set_search_filters_open(false);
|
|
9721
9745
|
set_search_sorting_open(false);
|
|
@@ -9762,7 +9786,7 @@ function $757dac7f7c6c5241$export$9bf11afa910f536e({
|
|
|
9762
9786
|
})));
|
|
9763
9787
|
},
|
|
9764
9788
|
get children() {
|
|
9765
|
-
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_, {
|
|
9766
9790
|
are_in_modal_: true
|
|
9767
9791
|
}))));
|
|
9768
9792
|
}
|
|
@@ -9824,7 +9848,7 @@ function $cdea4cf8c5c071ef$export$d7841e452f2e59a8({
|
|
|
9824
9848
|
const [sorting_open, set_sorting_open] = search_sorting_open_;
|
|
9825
9849
|
const [get_current_sorting_] = current_sorting_;
|
|
9826
9850
|
const [is_small, set_is_small] = $i7OB2$createSignal(false);
|
|
9827
|
-
const dismiss_modal_ = $i7OB2$
|
|
9851
|
+
const dismiss_modal_ = $i7OB2$catchify(() => {
|
|
9828
9852
|
set_filters_open(false);
|
|
9829
9853
|
set_sorting_open(false);
|
|
9830
9854
|
});
|
|
@@ -9910,7 +9934,7 @@ function $cdea4cf8c5c071ef$export$d7841e452f2e59a8({
|
|
|
9910
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))));
|
|
9911
9935
|
}
|
|
9912
9936
|
});
|
|
9913
|
-
$i7OB2$
|
|
9937
|
+
$i7OB2$catchify(async () => {
|
|
9914
9938
|
({
|
|
9915
9939
|
open_modal_: open_modal_,
|
|
9916
9940
|
close_modal_: close_modal_
|
|
@@ -10076,7 +10100,7 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
|
|
|
10076
10100
|
}
|
|
10077
10101
|
old_pos = new_pos;
|
|
10078
10102
|
});
|
|
10079
|
-
const touchstart_handler = $i7OB2$
|
|
10103
|
+
const touchstart_handler = $i7OB2$catchify(e => {
|
|
10080
10104
|
is_in_touch_scroll = true;
|
|
10081
10105
|
if (e.touches.length === 1) {
|
|
10082
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
|
|
@@ -10084,12 +10108,12 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
|
|
|
10084
10108
|
diff_over_second_or_touch = 0;
|
|
10085
10109
|
}
|
|
10086
10110
|
});
|
|
10087
|
-
const touchend_handler = $i7OB2$
|
|
10111
|
+
const touchend_handler = $i7OB2$catchify(e => {
|
|
10088
10112
|
if (e.touches.length === 0)
|
|
10089
10113
|
// scroll gesture of any type (pinch can also be used as scroll, etc.) ended
|
|
10090
10114
|
inertia_timeout = setTimeout(
|
|
10091
10115
|
// inertia ends after 500ms (educated guess)
|
|
10092
|
-
$i7OB2$
|
|
10116
|
+
$i7OB2$catchify(() => {
|
|
10093
10117
|
is_in_touch_scroll = false;
|
|
10094
10118
|
diff_over_second_or_touch = 0;
|
|
10095
10119
|
}), 500);
|
|
@@ -10107,9 +10131,9 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
|
|
|
10107
10131
|
const everything_closed = !get_search_filters_open_() && !get_search_sorting_open_();
|
|
10108
10132
|
if (!$i7OB2$untrack(modal_is_closed) && everything_closed)
|
|
10109
10133
|
// I think the point of this is to delay the animation a bit IIRC
|
|
10110
|
-
timeout = setTimeout($i7OB2$
|
|
10134
|
+
timeout = setTimeout($i7OB2$catchify(() => set_if_modal_is_closed(true)), 200);else set_if_modal_is_closed(everything_closed);
|
|
10111
10135
|
});
|
|
10112
|
-
$i7OB2$createComputed($i7OB2$
|
|
10136
|
+
$i7OB2$createComputed($i7OB2$catchify(async () => {
|
|
10113
10137
|
const element = sort_and_filter_element_();
|
|
10114
10138
|
if (!element) return;
|
|
10115
10139
|
await (0, $i7OB2$observer).wait_for_element(element);
|
|
@@ -10128,7 +10152,7 @@ function $587cd61972788655$export$210f130a61ac1e8d(fn) {
|
|
|
10128
10152
|
let last_queued;
|
|
10129
10153
|
let last_value;
|
|
10130
10154
|
let initial_run = true;
|
|
10131
|
-
$i7OB2$createComputed($i7OB2$
|
|
10155
|
+
$i7OB2$createComputed($i7OB2$catchify(async () => {
|
|
10132
10156
|
last_value = fn();
|
|
10133
10157
|
if (initial_run) {
|
|
10134
10158
|
initial_run = false;
|
|
@@ -10175,7 +10199,7 @@ function $641bba2917fe862b$export$6e49da55e449af7c({
|
|
|
10175
10199
|
}]); // get rid of old data the browser saves the old state and will restore it later on
|
|
10176
10200
|
};
|
|
10177
10201
|
|
|
10178
|
-
$i7OB2$createComputed($i7OB2$
|
|
10202
|
+
$i7OB2$createComputed($i7OB2$catchify(() => {
|
|
10179
10203
|
const last_result = get_last_result_in_viewport_();
|
|
10180
10204
|
if (last_result == undefined || last_result <= 0 || last_result == Infinity) return;
|
|
10181
10205
|
if (isNaN(last_result)) {
|
|
@@ -10202,7 +10226,7 @@ function $641bba2917fe862b$export$6e49da55e449af7c({
|
|
|
10202
10226
|
set_to_later = last_result;
|
|
10203
10227
|
// If a delayed push timeout is already running, just changing the value that will be pushed is sufficient
|
|
10204
10228
|
if (timeout) return;
|
|
10205
|
-
timeout = setTimeout($i7OB2$
|
|
10229
|
+
timeout = setTimeout($i7OB2$catchify(() => {
|
|
10206
10230
|
timeout = undefined;
|
|
10207
10231
|
last_time_history_changed = +new Date();
|
|
10208
10232
|
set_min_results_loaded(set_to_later);
|
|
@@ -10304,7 +10328,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
|
|
|
10304
10328
|
if (!result) return;
|
|
10305
10329
|
return {
|
|
10306
10330
|
href: result.page_url,
|
|
10307
|
-
onClick: $i7OB2$
|
|
10331
|
+
onClick: $i7OB2$catchify(ev => router_.navigate_.go_to_({
|
|
10308
10332
|
new_url_: result.page_url,
|
|
10309
10333
|
is_replace_: false,
|
|
10310
10334
|
event_: ev
|
|
@@ -10318,7 +10342,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
|
|
|
10318
10342
|
if (content_result_) return $i7OB2$ssrElement("a", attributes, () => $i7OB2$escape(children), true);
|
|
10319
10343
|
return $i7OB2$ssrElement("div", attributes, () => $i7OB2$escape(children), true);
|
|
10320
10344
|
};
|
|
10321
|
-
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, {
|
|
10322
10346
|
tabIndex: "-1",
|
|
10323
10347
|
get children() {
|
|
10324
10348
|
return $i7OB2$createComponent((0, $190927650b4840eb$export$605674723bcc715c), {
|
|
@@ -10326,7 +10350,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
|
|
|
10326
10350
|
height: "28"
|
|
10327
10351
|
});
|
|
10328
10352
|
}
|
|
10329
|
-
}))), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$
|
|
10353
|
+
}))), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps({
|
|
10330
10354
|
"class": "content-title line-clamp"
|
|
10331
10355
|
}, make_link_attributes, {
|
|
10332
10356
|
get title() {
|
|
@@ -10467,7 +10491,7 @@ function $49de9d31aeea1b5e$export$6d0c9c22f6652669({
|
|
|
10467
10491
|
return (0, $f8c929beb82c512b$export$2452208c79fe93ea).content;
|
|
10468
10492
|
},
|
|
10469
10493
|
number_of_results_: num_results
|
|
10470
|
-
})), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$
|
|
10494
|
+
})), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$mergeProps({
|
|
10471
10495
|
layout: "grid",
|
|
10472
10496
|
element_attributes: {
|
|
10473
10497
|
class: "cards"
|
|
@@ -10665,7 +10689,7 @@ function $0e562a5b247b1fc2$export$44f738469d5570cf({
|
|
|
10665
10689
|
// We might only have changed the left position which align_field doesn't know about, make it poll the position for a while
|
|
10666
10690
|
setPollAlignment_(true);
|
|
10667
10691
|
if (disableResizePollingTimeout) clearTimeout(disableResizePollingTimeout);
|
|
10668
|
-
disableResizePollingTimeout = setTimeout($i7OB2$
|
|
10692
|
+
disableResizePollingTimeout = setTimeout($i7OB2$catchify(() => {
|
|
10669
10693
|
setPollAlignment_(false);
|
|
10670
10694
|
disableResizePollingTimeout = undefined;
|
|
10671
10695
|
}), 1000);
|
|
@@ -10797,7 +10821,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10797
10821
|
} : {})
|
|
10798
10822
|
};
|
|
10799
10823
|
});
|
|
10800
|
-
const [search_results_] = $i7OB2$createResource(search_query_base_, $i7OB2$
|
|
10824
|
+
const [search_results_] = $i7OB2$createResource(search_query_base_, $i7OB2$catchify(async base_query => {
|
|
10801
10825
|
set_all_products_loaded(false);
|
|
10802
10826
|
// only first page of results
|
|
10803
10827
|
return await $641bba2917fe862b$export$cc42dd29bf655ab6({
|
|
@@ -10836,7 +10860,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10836
10860
|
const [, setModalFieldStyle] = modal_field_style;
|
|
10837
10861
|
const [, setModalBackdropStyle] = modal_backdrop_style;
|
|
10838
10862
|
const [get_search_field_elements, set_search_field_elements] = $i7OB2$createSignal();
|
|
10839
|
-
const SafeSearchField = $i7OB2$
|
|
10863
|
+
const SafeSearchField = $i7OB2$catchify((0, $5285d2814d0fac0c$export$b94867ecbd698f21));
|
|
10840
10864
|
const [sort_or_filter_open_, set_sort_or_filter_open_] = $i7OB2$createSignal(false);
|
|
10841
10865
|
const [desktop_filter_elements_, set_desktop_filter_elements] = $i7OB2$createSignal();
|
|
10842
10866
|
const n_hits = $i7OB2$createMemo(() => search_results_()?.n_hits);
|
|
@@ -10846,7 +10870,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10846
10870
|
});
|
|
10847
10871
|
const [sort_and_filter_element_, set_sort_and_filter_element_] = $i7OB2$createSignal();
|
|
10848
10872
|
const no_results_text_ = $i7OB2$createMemo(() => (search_results_()?.content_search_links?.length ? i18n_.no_products_ : i18n_.no_results_text_)());
|
|
10849
|
-
const results_for = $i7OB2$createComponent((0, $f8c929beb82c512b$export$9dd50d35b9d94fdf), $i7OB2$
|
|
10873
|
+
const results_for = $i7OB2$createComponent((0, $f8c929beb82c512b$export$9dd50d35b9d94fdf), $i7OB2$mergeProps({
|
|
10850
10874
|
get type() {
|
|
10851
10875
|
return (0, $f8c929beb82c512b$export$2452208c79fe93ea).products;
|
|
10852
10876
|
},
|
|
@@ -10886,7 +10910,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10886
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))));
|
|
10887
10911
|
}).remove);
|
|
10888
10912
|
$2ab89d64b7f1d5ef$export$d31a1a1a83ad9413(search_results_, selected_filters_);
|
|
10889
|
-
$i7OB2$
|
|
10913
|
+
$i7OB2$catchify((0, $641bba2917fe862b$export$6e49da55e449af7c))({
|
|
10890
10914
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
10891
10915
|
last_result_in_viewport_: last_result_in_viewport_,
|
|
10892
10916
|
id_: get_search_query_,
|
|
@@ -10932,8 +10956,8 @@ function $7097477c78a89208$export$a54ec244c8863715({
|
|
|
10932
10956
|
setModalBodyStyle({});
|
|
10933
10957
|
modalAlignmentSignalsRef_?.(alignmentSignals_);
|
|
10934
10958
|
const [pollAlignment, setPollAlignment_] = $i7OB2$createSignal(false);
|
|
10935
|
-
const align_position = $i7OB2$
|
|
10936
|
-
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 => {
|
|
10937
10961
|
const target = e.target;
|
|
10938
10962
|
const sel = ".submit";
|
|
10939
10963
|
if (target?.matches?.(sel) || target?.closest?.(sel))
|
|
@@ -11270,7 +11294,7 @@ class $806c97b931758897$export$ac6237957a15b3f0 {
|
|
|
11270
11294
|
BackIcon_: BackIcon_
|
|
11271
11295
|
});
|
|
11272
11296
|
$90980bd87c9960f9$export$5162a71f252e6122();
|
|
11273
|
-
$i7OB2$
|
|
11297
|
+
$i7OB2$catchify(async () => {
|
|
11274
11298
|
const {
|
|
11275
11299
|
open_modal_: open_modal_,
|
|
11276
11300
|
close_modal_: close_modal_
|
|
@@ -11511,7 +11535,7 @@ function $806c97b931758897$export$f2dc7e4e4aa11abb(props) {
|
|
|
11511
11535
|
function $4ca91518c9a35379$export$828dcdd425fd3231(aligner) {
|
|
11512
11536
|
const style_element = document.createElement("style");
|
|
11513
11537
|
document.head.append(style_element);
|
|
11514
|
-
const resize_observer = new ResizeObserver($i7OB2$
|
|
11538
|
+
const resize_observer = new ResizeObserver($i7OB2$catchify(() => {
|
|
11515
11539
|
const styles = $926b1b5ba2239356$export$1233ca167bf71f9a({
|
|
11516
11540
|
".depict.plp .depict-search-modal .search-field": {
|
|
11517
11541
|
"height": `${aligner?.clientHeight}px`
|
|
@@ -11580,7 +11604,7 @@ const $6891c018a834cfdd$export$d86a33413558014e = openModalParams => {
|
|
|
11580
11604
|
}, dispose_aligner];
|
|
11581
11605
|
};
|
|
11582
11606
|
function $6e8944558258054f$export$d0596b5cae35ad4(open_search) {
|
|
11583
|
-
const handler = $i7OB2$
|
|
11607
|
+
const handler = $i7OB2$catchify(e => {
|
|
11584
11608
|
const {
|
|
11585
11609
|
key: key,
|
|
11586
11610
|
target: target
|
|
@@ -11599,7 +11623,7 @@ function $6e8944558258054f$export$d0596b5cae35ad4(open_search) {
|
|
|
11599
11623
|
function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
|
|
11600
11624
|
let old_url;
|
|
11601
11625
|
let disconnect_link_observer;
|
|
11602
|
-
const link_handler = $i7OB2$
|
|
11626
|
+
const link_handler = $i7OB2$catchify(e => {
|
|
11603
11627
|
const link = e.currentTarget || e.target;
|
|
11604
11628
|
if (link.href === old_url) {
|
|
11605
11629
|
history.pushState(history.state, "", link.href);
|
|
@@ -11608,7 +11632,7 @@ function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
|
|
|
11608
11632
|
});
|
|
11609
11633
|
let remove_added_listeners;
|
|
11610
11634
|
let resolve_remove_added_listeners;
|
|
11611
|
-
pr.addEventListener("open", $i7OB2$
|
|
11635
|
+
pr.addEventListener("open", $i7OB2$catchify(() => {
|
|
11612
11636
|
remove_added_listeners = new Promise(r => resolve_remove_added_listeners = r);
|
|
11613
11637
|
disconnect_link_observer = (0, $i7OB2$observer).onexists("a", async ({
|
|
11614
11638
|
element: element
|
|
@@ -11618,11 +11642,11 @@ function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
|
|
|
11618
11642
|
element.removeEventListener("click", link_handler);
|
|
11619
11643
|
});
|
|
11620
11644
|
}));
|
|
11621
|
-
pr.addEventListener("close", $i7OB2$
|
|
11645
|
+
pr.addEventListener("close", $i7OB2$catchify(() => {
|
|
11622
11646
|
disconnect_link_observer?.();
|
|
11623
11647
|
resolve_remove_added_listeners?.();
|
|
11624
11648
|
}));
|
|
11625
|
-
$i7OB2$
|
|
11649
|
+
$i7OB2$catchify(async () => {
|
|
11626
11650
|
for await (const href of (0, $i7OB2$href_change_ipns)) if (!pr.is_page_(new URL(href))) old_url = href;
|
|
11627
11651
|
})();
|
|
11628
11652
|
}
|
|
@@ -11634,7 +11658,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11634
11658
|
static #reverting_permitted = true;
|
|
11635
11659
|
static #visited_urls = /*@__PURE__*/(() => {
|
|
11636
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).
|
|
11637
|
-
$i7OB2$
|
|
11661
|
+
$i7OB2$catchify(async () => {
|
|
11638
11662
|
// Static initialization blocks aren't supported in MobileSafari yet, otherwise this would be one.
|
|
11639
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).
|
|
11640
11664
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks
|
|
@@ -11652,7 +11676,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11652
11676
|
async #listen() {
|
|
11653
11677
|
const [exit_ipns, exitable_ipns] = $i7OB2$make_asyncIterable_exiter((0, $i7OB2$href_change_ipns));
|
|
11654
11678
|
this.#stop_listening = exit_ipns;
|
|
11655
|
-
const caught_page_check_fn = $i7OB2$
|
|
11679
|
+
const caught_page_check_fn = $i7OB2$catchify(this.is_page_, "page check failed");
|
|
11656
11680
|
for await (const href of exitable_ipns) {
|
|
11657
11681
|
const url = new URL(href);
|
|
11658
11682
|
if (!caught_page_check_fn(url)) {
|
|
@@ -11670,17 +11694,17 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11670
11694
|
this.addEventListener("close", dispose, {
|
|
11671
11695
|
once: true
|
|
11672
11696
|
});
|
|
11673
|
-
return $i7OB2$
|
|
11697
|
+
return $i7OB2$catchify(this.render_, "rendering failed")() || [];
|
|
11674
11698
|
});
|
|
11675
11699
|
}
|
|
11676
|
-
#unload = /*@__PURE__*/$i7OB2$
|
|
11700
|
+
#unload = /*@__PURE__*/$i7OB2$catchify(() => {
|
|
11677
11701
|
if (!this.#is_open) return;
|
|
11678
11702
|
this.#disconnect_observer?.();
|
|
11679
11703
|
if ($753e9b2889a47c89$export$3ccaa27d81dd8556.#reverting_permitted) while (this.#revert_fns.length) this.#revert_fns.pop()?.();
|
|
11680
11704
|
this.#is_open = false;
|
|
11681
11705
|
this.dispatchEvent(new CustomEvent("close"));
|
|
11682
11706
|
}, "failed to close page");
|
|
11683
|
-
#load = /*@__PURE__*/$i7OB2$
|
|
11707
|
+
#load = /*@__PURE__*/$i7OB2$catchify(async els => {
|
|
11684
11708
|
this.#is_open = true;
|
|
11685
11709
|
// So that #load doesn't get called again
|
|
11686
11710
|
let set_should_stay_inserted;
|
|
@@ -11730,7 +11754,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
|
|
|
11730
11754
|
}, "failed to open page");
|
|
11731
11755
|
#empty_page_bugfix() {
|
|
11732
11756
|
// Called when a "page" is "opened" using PageReplacer
|
|
11733
|
-
const on_maybe_popstate = $i7OB2$
|
|
11757
|
+
const on_maybe_popstate = $i7OB2$catchify(what_happened => {
|
|
11734
11758
|
if (what_happened !== "popstate") return;
|
|
11735
11759
|
const cleaned_current_url = $753e9b2889a47c89$var$clean_url(location.href);
|
|
11736
11760
|
if (!$753e9b2889a47c89$export$3ccaa27d81dd8556.#visited_urls.has(cleaned_current_url)) {
|
|
@@ -11832,7 +11856,7 @@ function $58b3487626e85ece$export$316f6f283ae64765(props) {
|
|
|
11832
11856
|
field_: $i7OB2$createSignal({}),
|
|
11833
11857
|
backdrop_: backdropAlignmentSignal_
|
|
11834
11858
|
};
|
|
11835
|
-
const defaultHandler = $i7OB2$
|
|
11859
|
+
const defaultHandler = $i7OB2$catchify(e => {
|
|
11836
11860
|
const {
|
|
11837
11861
|
modalVersionUsed_: modalVersionUsed_
|
|
11838
11862
|
} = shared_properties;
|
|
@@ -11959,7 +11983,7 @@ function $06edf3aec9073663$export$466cdc317043f6cb({
|
|
|
11959
11983
|
}];
|
|
11960
11984
|
$i7OB2$createComputed(() => {
|
|
11961
11985
|
if (place_holdey_quicklinks_data()?.[0]?.listing_id) {
|
|
11962
|
-
if (last_was_placeholder) queueMicrotask($i7OB2$
|
|
11986
|
+
if (last_was_placeholder) queueMicrotask($i7OB2$catchify(() => {
|
|
11963
11987
|
sliding_element?.scrollTo({
|
|
11964
11988
|
left: 0
|
|
11965
11989
|
}); // for some reason we land one element to the right after placeholder rendering otherwise
|
|
@@ -12025,7 +12049,7 @@ function $06edf3aec9073663$export$466cdc317043f6cb({
|
|
|
12025
12049
|
} else if (!(intersecting_items_object[selected_index()]?.intersectionRatio >= 0.95)) {
|
|
12026
12050
|
// negated larger than to handle left side of comparison being undefined
|
|
12027
12051
|
let done_work = false;
|
|
12028
|
-
$i7OB2$runWithOwner(owner, () => $i7OB2$createComputed($i7OB2$
|
|
12052
|
+
$i7OB2$runWithOwner(owner, () => $i7OB2$createComputed($i7OB2$catchify(() => {
|
|
12029
12053
|
if (done_work || !Array.isArray(quicklinks_data_())) return;
|
|
12030
12054
|
const sel_index = selected_index();
|
|
12031
12055
|
const target_element = sel_index >= 0 ? sel_index : 0;
|
|
@@ -12170,7 +12194,7 @@ function $e7fce80abe608e01$export$3945d6db2dfd3d12({
|
|
|
12170
12194
|
const handler = () => allow_filter_clearing = false;
|
|
12171
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
|
|
12172
12196
|
$i7OB2$onCleanup(() => window.removeEventListener("popstate", handler));
|
|
12173
|
-
$i7OB2$createEffect($i7OB2$on(crumb_data_, $i7OB2$
|
|
12197
|
+
$i7OB2$createEffect($i7OB2$on(crumb_data_, $i7OB2$catchify(new_crumb_data => {
|
|
12174
12198
|
const id_of_new_data = id_to_query_for_();
|
|
12175
12199
|
const type_of_id_of_new_data = id_type_();
|
|
12176
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_)) {
|
|
@@ -12250,11 +12274,11 @@ function $f916989c4b1be9f7$export$780a853d15174484({
|
|
|
12250
12274
|
}) {
|
|
12251
12275
|
if (type === "image") {
|
|
12252
12276
|
const [wrapperSize, setWrapperSize] = $i7OB2$createSignal();
|
|
12253
|
-
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$
|
|
12277
|
+
return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps({
|
|
12254
12278
|
component: link ? "a" : "div",
|
|
12255
12279
|
"class": "d-standard-content-wrapper",
|
|
12256
12280
|
get onClick() {
|
|
12257
|
-
return $i7OB2$
|
|
12281
|
+
return $i7OB2$catchify1(ev => link && router_.navigate_.go_to_({
|
|
12258
12282
|
new_url_: link,
|
|
12259
12283
|
is_replace_: false,
|
|
12260
12284
|
event_: ev
|
|
@@ -12264,10 +12288,9 @@ function $f916989c4b1be9f7$export$780a853d15174484({
|
|
|
12264
12288
|
href: link
|
|
12265
12289
|
}, {
|
|
12266
12290
|
get children() {
|
|
12267
|
-
return $i7OB2$createComponent((0, $
|
|
12268
|
-
|
|
12269
|
-
|
|
12270
|
-
},
|
|
12291
|
+
return $i7OB2$createComponent((0, $70bb27cc6be01fc7$export$140423fa4bfb6d63), {
|
|
12292
|
+
size: () => wrapperSize()?.[0]?.() || 0,
|
|
12293
|
+
sizeHeight: () => wrapperSize()?.[1]?.() || 0,
|
|
12271
12294
|
src: mediaUrl,
|
|
12272
12295
|
"class": "d-standard-content"
|
|
12273
12296
|
});
|
|
@@ -12379,7 +12402,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12379
12402
|
// Make "Get products in listing" request to get products in listing
|
|
12380
12403
|
const [plp_products_] = $i7OB2$createResource(products_query_base_,
|
|
12381
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)
|
|
12382
|
-
$i7OB2$
|
|
12405
|
+
$i7OB2$catchify1(base_query => $641bba2917fe862b$export$cc42dd29bf655ab6({
|
|
12383
12406
|
id_: $i7OB2$untrack(id_to_query_for_),
|
|
12384
12407
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
12385
12408
|
min_products_to_fetch_: min_products_to_fetch_,
|
|
@@ -12399,7 +12422,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12399
12422
|
id_type_: id_type_()
|
|
12400
12423
|
}));
|
|
12401
12424
|
// Make "Get Listing" request to get quicklinks, breadcrumbs, title, etc
|
|
12402
|
-
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)));
|
|
12403
12426
|
const contentBlocksByRow = $486360b09f0d5729$export$7a92d995f1bf3592(history_content_blocks_, plp_meta, content_blocks_by_row_, router_);
|
|
12404
12427
|
const available_sortings_ = $i7OB2$createMemo(() => plp_products_()?.sorts?.map(sort => ({
|
|
12405
12428
|
...sort,
|
|
@@ -12509,7 +12532,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12509
12532
|
filterModalParent_: filterModalParent_,
|
|
12510
12533
|
...extra_sort_and_filter_args_
|
|
12511
12534
|
});
|
|
12512
|
-
$i7OB2$
|
|
12535
|
+
$i7OB2$catchify1((0, $641bba2917fe862b$export$6e49da55e449af7c))({
|
|
12513
12536
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
12514
12537
|
last_result_in_viewport_: last_result_in_viewport_,
|
|
12515
12538
|
id_: id_to_query_for_,
|
|
@@ -12522,7 +12545,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
12522
12545
|
$i7OB2$createComputed(() => {
|
|
12523
12546
|
if (plp_products_.loading) set_can_write_scroll_restoration(false);else if (plp_products_()) set_can_write_scroll_restoration(true);
|
|
12524
12547
|
});
|
|
12525
|
-
$i7OB2$createRenderEffect($i7OB2$
|
|
12548
|
+
$i7OB2$createRenderEffect($i7OB2$catchify1(async () => {
|
|
12526
12549
|
const slim = is_slim_();
|
|
12527
12550
|
const only_show_filters_opener = only_show_filters_opener_?.();
|
|
12528
12551
|
const owner = $i7OB2$getOwner();
|
|
@@ -12661,7 +12684,7 @@ function $df5d81d0fe61ff21$var$add_us_to_crumbs(plp_meta) {
|
|
|
12661
12684
|
return $i7OB2$createMemo(() => {
|
|
12662
12685
|
const api_value = plp_meta()?.breadcrumbs;
|
|
12663
12686
|
if (!api_value) return api_value;
|
|
12664
|
-
return [...api_value, $i7OB2$
|
|
12687
|
+
return [...api_value, $i7OB2$mergeProps1(plp_meta(), {
|
|
12665
12688
|
get page_url() {
|
|
12666
12689
|
return href_accessor();
|
|
12667
12690
|
}
|
|
@@ -12769,4 +12792,4 @@ function $442f32a4d80abbde$export$e2bf8ce7779e827e(props) {
|
|
|
12769
12792
|
}, "Entire CategoryPage failed");
|
|
12770
12793
|
}
|
|
12771
12794
|
$i7OB2$add_to_version_info("ui", (0, $ec291e0010116877$export$83d89fbfd8236492));
|
|
12772
|
-
export { $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 };
|