@depict-ai/ui 4.7.33 → 4.7.34

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