@depict-ai/ui 4.7.32 → 4.7.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,36 +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.32";
11
- function $dc9262ef6f786812$export$d9f36cf74e24d595(media_query) {
12
- const signal = $i7OB2$createSignal(false);
13
- $i7OB2$onCleanup($i7OB2$javascript_media_query(media_query, ({
14
- matches: matches
15
- }) => signal[1](matches)).remove);
16
- 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
+ });
17
20
  }
18
- function $77348875ac090fcd$export$a79e666719b3647c(cols_at_size_) {
19
- const size_active = $i7OB2$createMemo(() => cols_at_size_().map(([n_cols, min_width, max_width]) => {
20
- const media_query = $i7OB2$layout_media_query_header(min_width, max_width).replaceAll("@media", "");
21
- const matches = $dc9262ef6f786812$export$d9f36cf74e24d595(media_query);
22
- return [matches, n_cols];
23
- }));
24
- const n_cols_currently_showing = $i7OB2$createMemo(() => {
25
- try {
26
- const [, n_cols_currently_showing] = size_active().find(([media_query]) => media_query());
27
- return n_cols_currently_showing;
28
- } catch (e) {
29
- $i7OB2$dwarn("No active size found in columnsAtSize - can't render content blocks or looks");
30
- 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;
31
36
  }
32
37
  });
33
- 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);
34
247
  }
35
248
  var $d20eff0aadc28983$var$_tmpl$ = ["<span", ' class="', '" style="', '"></span>'];
36
249
  function $d20eff0aadc28983$export$acb3eaade4b23afd(props) {
@@ -68,31 +281,202 @@ function $7f60f09116a3fe61$export$3f37af283f8fb843(props) {
68
281
  }
69
282
  });
70
283
  }
71
- var $e7a7eb102ddc0c79$var$_tmpl$ = ["<div", ' class="', '" style="', '">', "</div>"];
72
- function $e7a7eb102ddc0c79$export$791ef57e62e21c3f({
73
- content_blocks_: incoming_content_blocks,
74
- cols_at_size_: cols_at_size_,
75
- set_top_row_shortened_by_: set_top_row_shortened_by_
76
- }) {
77
- // these are by row
78
- const [content_blocks, set_content_blocks] = $i7OB2$createStore([]);
79
- const n_cols_currently_showing_ = $77348875ac090fcd$export$a79e666719b3647c(cols_at_size_);
80
- $i7OB2$createEffect(() => {
81
- const incoming_value = incoming_content_blocks();
82
- if (!incoming_value) {
83
- set_content_blocks([]);
84
- return;
85
- }
86
- set_content_blocks($i7OB2$reconcile(incoming_value, {
87
- key: "content"
88
- })); // key: Make moving blocks faster, see https://github.com/solidjs/solid/issues/1925#issuecomment-1769671596
89
- });
90
-
91
- const get_wrapped_blocks_ = $e7a7eb102ddc0c79$var$wrap_blocks_in_div(content_blocks, n_cols_currently_showing_);
92
- $i7OB2$createComputed(() => {
93
- // Update our styling if a content block forces some items that should be in the top row into a lower one, so we can generate margin-top declarations for them
94
- const top_row_block = get_wrapped_blocks_()[0];
95
- const blocks_in_top_row_taken = top_row_block?.span_columns;
284
+ function $d134eae24341b4a1$export$89c6019e4baa40b1(props) {
285
+ const style = $i7OB2$createMemo(() => {
286
+ const {
287
+ style: style,
288
+ height: height,
289
+ width: width
290
+ } = props;
291
+ return {
292
+ ...(style || {}),
293
+ height: height ?? "1em",
294
+ ...(width && {
295
+ width: width
296
+ })
297
+ };
298
+ });
299
+ return $i7OB2$createComponent((0, $d20eff0aadc28983$export$acb3eaade4b23afd), {
300
+ get style() {
301
+ return style();
302
+ },
303
+ get ["class"]() {
304
+ return props.class;
305
+ }
306
+ });
307
+ }
308
+ var $bb15dfb548a7666e$var$_tmpl$ = ["<div", ' class="instant-card"><div class="img-part">', '</div><div class="right-part"><div class="title-brand-tagline"><span class="title">', '</span></div><div class="price-container">', "</div></div></div>"];
309
+ const $bb15dfb548a7666e$export$8a2234b5b1a5ebd4 = "--image-aspect-ratio";
310
+ function $bb15dfb548a7666e$export$ee1733d9a8495996() {
311
+ return $i7OB2$ssr($bb15dfb548a7666e$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $7f60f09116a3fe61$export$3f37af283f8fb843), {
312
+ aspectRatio: `var(${$bb15dfb548a7666e$export$8a2234b5b1a5ebd4}, 1)`
313
+ })), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
314
+ width: "20ch",
315
+ height: "1em"
316
+ })), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
317
+ width: "5ch",
318
+ height: "1em",
319
+ "class": "price"
320
+ })));
321
+ }
322
+ function $a444a52bafa0dacc$export$54c6d6ff54e72743(whatToWatch) {
323
+ const [width, setWidth] = $i7OB2$createSignal(0);
324
+ const [height, setHeight] = $i7OB2$createSignal(0);
325
+ const resizeObserver = new ResizeObserver($i7OB2$catchify(records => $i7OB2$batch(() => {
326
+ for (let j = 0; j < records.length; j++) {
327
+ const {
328
+ width: width,
329
+ height: height
330
+ } = records[j].contentRect;
331
+ // Padding hack makes that we can't use contentRect to get the height since that's apparently without padding
332
+ const definitiveHeight = height || whatToWatch.getBoundingClientRect().height;
333
+ if (definitiveHeight) setHeight(Math.ceil(definitiveHeight));
334
+ if (width) setWidth(Math.ceil(width));
335
+ }
336
+ })));
337
+ // If we start observing elements before they're in the DOM Chrome (Version 117.0.5938.92 (Official Build) (arm64)) sometimes gives us a resize event with a width of 0 and then doesn't dispatch one with the actual width once it's in the DOM. So we wait until the element is in the DOM before we start observing it.
338
+ // It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
339
+ const disconnect = (0, $i7OB2$observer).onexists(whatToWatch, ({
340
+ element: element
341
+ }) => requestAnimationFrame($i7OB2$catchify(() => resizeObserver.observe(element))));
342
+ $i7OB2$onCleanup(() => {
343
+ resizeObserver.disconnect();
344
+ disconnect();
345
+ });
346
+ return [width, height];
347
+ }
348
+ const $660070e2a394b3c3$var$backupSizeSignal = /*@__PURE__*/$i7OB2$createSignal();
349
+ const $660070e2a394b3c3$export$d7b7ab832c20e2f4 = /*@__PURE__*/Symbol("ShopifyContainedImage");
350
+ function $660070e2a394b3c3$export$e4b984597b71e989(props) {
351
+ const context = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
352
+ if (context && !context[$660070e2a394b3c3$export$d7b7ab832c20e2f4])
353
+ // create a signal that's the same for all items in this listing
354
+ context[$660070e2a394b3c3$export$d7b7ab832c20e2f4] = $i7OB2$createSignal();
355
+ const [currentImageSize, setCurrentImageSize] = context?.[$660070e2a394b3c3$export$d7b7ab832c20e2f4] || $660070e2a394b3c3$var$backupSizeSignal; // use global fallback signal (might lead to blurry images) if no context is available
356
+ const [mostPrevalentAspectRatio] = context ?
357
+ // If the context exists we have to create the signal here as getting it here would be too late when it's created by ShopifyResponsiveImg below
358
+ context[(0, $e8ffe11ed01df0fe$export$6066eb417ed2e9f7)] ||= $i7OB2$createSignal() : [];
359
+ const container = $f18d425032111270$export$94026ee33dbabc26({
360
+ // Write getters manually instead of using JSX, so we can do more complex logic in the aspectRatio getter without increasing bundle size
361
+ get class() {
362
+ return props.class;
363
+ },
364
+ get aspectRatio() {
365
+ if (props.autoAdjustAspectRatio) {
366
+ const targetRatio = mostPrevalentAspectRatio?.();
367
+ if (targetRatio != undefined) return `var(${(0, $bb15dfb548a7666e$export$8a2234b5b1a5ebd4)}, ${targetRatio})`;
368
+ }
369
+ return props.aspectRatio;
370
+ }
371
+ });
372
+ const owner = $i7OB2$getOwner();
373
+ let createdSizeAccessor = false;
374
+ let wasCleanedUp = false;
375
+ $i7OB2$createEffect(() => {
376
+ if (currentImageSize() || wasCleanedUp) return; // We get into the effect when onCleanup is called if we don't have wasCleanedUp
377
+ // ensure we always have a size accessor
378
+ // what this whole thing does is set the sizes attribute to the actual size of one of the existing image containers, therefore the value doesn't have to manually be specified
379
+ createdSizeAccessor = true;
380
+ setCurrentImageSize(() => $i7OB2$runWithOwner(owner, () => $a444a52bafa0dacc$export$54c6d6ff54e72743(container)));
381
+ });
382
+ $i7OB2$onCleanup(() => {
383
+ wasCleanedUp = true; // important to set this before the function call below and always, so the dead effects don't create dead size accessors
384
+ if (!createdSizeAccessor) return;
385
+ $i7OB2$queueMacroTask(() => setCurrentImageSize()); // unset the size accessor next event loop iteration, so that all onCleanup's have time to run, since the effects run more aggressively and can create a size accessor with a cleaned up owner otherwise
386
+ });
387
+
388
+ $i7OB2$insert(container, $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), $i7OB2$mergeProps({
389
+ size: () => currentImageSize()?.[0]?.() || 0,
390
+ sizeHeight: () => currentImageSize()?.[1]?.() || 0,
391
+ get src() {
392
+ return props.src;
393
+ }
394
+ }, () => props.imgProps, {
395
+ get style() {
396
+ return props.imgProps?.style;
397
+ }
398
+ })));
399
+ return container;
400
+ }
401
+ const $70bb27cc6be01fc7$var$customUrls = (url, width) => {
402
+ if (url?.startsWith?.("https://cdn.shopify.com"))
403
+ // The shopify image resizing CDN blocks Cloudflare's image resizer. It's possible that we can't detect shopify image URLs sometimes because they go to the merchant's domain,
404
+ // but it seems like the URLs returned by the Depict API always goes to the cdn.shopify.com version of an image, so this simple workaround works.
405
+ return $e8ffe11ed01df0fe$export$1d6267828870adda(url, width);
406
+ // Use cloudflare image resizer instead of img.depict.ai because it's a lot faster (and also auto-chooses other formats if webp is not supported)
407
+ return `https://app.depict.ai/cdn-cgi/image/width=${width},format=auto/${url}`;
408
+ };
409
+ function $70bb27cc6be01fc7$export$9d4a4b669b1929ab(props) {
410
+ return $i7OB2$createComponent((0, $660070e2a394b3c3$export$e4b984597b71e989), $i7OB2$mergeProps(props, {
411
+ get imgProps() {
412
+ return {
413
+ ...props.imgProps,
414
+ customUrls: $70bb27cc6be01fc7$var$customUrls
415
+ };
416
+ }
417
+ }));
418
+ }
419
+ function $70bb27cc6be01fc7$export$140423fa4bfb6d63(props) {
420
+ return $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), $i7OB2$mergeProps(props, {
421
+ customUrls: $70bb27cc6be01fc7$var$customUrls
422
+ }));
423
+ }
424
+
425
+ // Value first so shopify merchants can set (extra) display transformers in the shopify app
426
+ // Calling these functions normally doesn't do anything, but our shopify app respects them
427
+ // Them being here is value first too because this can be easily imported in the product card editor
428
+ let $a63fa9cb46ed211b$var$extraDisplayTransformers;
429
+ const $a63fa9cb46ed211b$export$b2d94be4f02525b2 = () => $a63fa9cb46ed211b$var$extraDisplayTransformers;
430
+ const $a63fa9cb46ed211b$export$f98b8d5ea7207a1 = displayTransformers => $a63fa9cb46ed211b$var$extraDisplayTransformers = displayTransformers;
431
+ function $dc9262ef6f786812$export$d9f36cf74e24d595(media_query) {
432
+ const signal = $i7OB2$createSignal(false);
433
+ $i7OB2$onCleanup($i7OB2$javascript_media_query(media_query, ({
434
+ matches: matches
435
+ }) => signal[1](matches)).remove);
436
+ return signal[0];
437
+ }
438
+ function $77348875ac090fcd$export$a79e666719b3647c(cols_at_size_) {
439
+ const size_active = $i7OB2$createMemo(() => cols_at_size_().map(([n_cols, min_width, max_width]) => {
440
+ const media_query = $i7OB2$layout_media_query_header(min_width, max_width).replaceAll("@media", "");
441
+ const matches = $dc9262ef6f786812$export$d9f36cf74e24d595(media_query);
442
+ return [matches, n_cols];
443
+ }));
444
+ const n_cols_currently_showing = $i7OB2$createMemo(() => {
445
+ try {
446
+ const [, n_cols_currently_showing] = size_active().find(([media_query]) => media_query());
447
+ return n_cols_currently_showing;
448
+ } catch (e) {
449
+ $i7OB2$dwarn("No active size found in columnsAtSize - can't render content blocks or looks");
450
+ return null;
451
+ }
452
+ });
453
+ return n_cols_currently_showing;
454
+ }
455
+ var $e7a7eb102ddc0c79$var$_tmpl$ = ["<div", ' class="', '" style="', '">', "</div>"];
456
+ function $e7a7eb102ddc0c79$export$791ef57e62e21c3f({
457
+ content_blocks_: incoming_content_blocks,
458
+ cols_at_size_: cols_at_size_,
459
+ set_top_row_shortened_by_: set_top_row_shortened_by_
460
+ }) {
461
+ // these are by row
462
+ const [content_blocks, set_content_blocks] = $i7OB2$createStore([]);
463
+ const n_cols_currently_showing_ = $77348875ac090fcd$export$a79e666719b3647c(cols_at_size_);
464
+ $i7OB2$createEffect(() => {
465
+ const incoming_value = incoming_content_blocks();
466
+ if (!incoming_value) {
467
+ set_content_blocks([]);
468
+ return;
469
+ }
470
+ set_content_blocks($i7OB2$reconcile(incoming_value, {
471
+ key: "content"
472
+ })); // key: Make moving blocks faster, see https://github.com/solidjs/solid/issues/1925#issuecomment-1769671596
473
+ });
474
+
475
+ const get_wrapped_blocks_ = $e7a7eb102ddc0c79$var$wrap_blocks_in_div(content_blocks, n_cols_currently_showing_);
476
+ $i7OB2$createComputed(() => {
477
+ // Update our styling if a content block forces some items that should be in the top row into a lower one, so we can generate margin-top declarations for them
478
+ const top_row_block = get_wrapped_blocks_()[0];
479
+ const blocks_in_top_row_taken = top_row_block?.span_columns;
96
480
  if (blocks_in_top_row_taken == undefined) {
97
481
  // Fall back to zero if no content block in top row, since then no blocks in top row are taken
98
482
  set_top_row_shortened_by_(0);
@@ -198,7 +582,7 @@ function $e7a7eb102ddc0c79$var$wrap_blocks_in_div(rendered_content_blocks, max_s
198
582
  })));
199
583
  }
200
584
  });
201
- return $i7OB2$mergeProps(block, {
585
+ return $i7OB2$mergeProps1(block, {
202
586
  // Create content divs for the blocks with as much fine-grained diffing as possible?
203
587
  content: () => {
204
588
  // Sneaky on-demand rendering, so we don't render more blocks than we can show: we have the rendered value here and don't return a function that renders because if our block would be moved around we'd be guaranteed to re-render
@@ -269,11 +653,11 @@ function $4eb0a704f8f30273$var$doHeavyCalculations() {
269
653
  const [, setElementsHovered] = $4eb0a704f8f30273$var$elementsHoveredSignal;
270
654
  const elementAtTouch = new Map();
271
655
  const updateSet = () => setElementsHovered(new Set([...elementAtTouch.values()].filter(v => v)));
272
- const setPositionHandler = $i7OB2$catchify(evt => {
656
+ const setPositionHandler = $i7OB2$catchify1(evt => {
273
657
  for (const touch of evt.changedTouches) elementAtTouch.set(touch.identifier, document.elementFromPoint(touch.clientX, touch.clientY));
274
658
  updateSet();
275
659
  });
276
- const deleteTouchHandler = $i7OB2$catchify(evt => {
660
+ const deleteTouchHandler = $i7OB2$catchify1(evt => {
277
661
  for (const touch of evt.changedTouches) elementAtTouch.delete(touch.identifier);
278
662
  updateSet();
279
663
  });
@@ -397,20 +781,6 @@ function $a52235d12ccf9c88$var$unwrapping_helper(elements) {
397
781
  } else if (typeof elements == "function") result.push(...$a52235d12ccf9c88$var$unwrapping_helper(elements()));else if (elements != undefined && typeof elements != "boolean") result.push(elements);
398
782
  return result;
399
783
  }
400
- const $b6440e72ed83671a$var$ProductCardIndexContext = /*@__PURE__*/$i7OB2$createContext();
401
- function $b6440e72ed83671a$export$11354f017ddc9790(props) {
402
- return $i7OB2$createComponent($b6440e72ed83671a$var$ProductCardIndexContext.Provider, {
403
- get value() {
404
- return props.index_;
405
- },
406
- get children() {
407
- return props.children;
408
- }
409
- });
410
- }
411
- function $b6440e72ed83671a$export$e3faf4d95300054f() {
412
- return $i7OB2$useContext($b6440e72ed83671a$var$ProductCardIndexContext);
413
- }
414
784
 
415
785
  /**
416
786
  * This is a function that will safely clone an object that may contain promises.
@@ -634,7 +1004,7 @@ function $f091294da861020c$export$4a14175d33d81a96({
634
1004
  };
635
1005
  // The following sets up an intersection observer to determine which results are in the viewport, used for the ScrollStatus indicator, knowing when to load more and any other consumer of the useProductCardIsVisible hook.
636
1006
  const shouldObserve = $i7OB2$createMemo(() => alwaysObserveCards_ || listenersForIntersecting() > 0);
637
- const intersection_observer = new IntersectionObserver($i7OB2$catchify1(records => {
1007
+ const intersection_observer = new IntersectionObserver($i7OB2$catchify(records => {
638
1008
  const intersectingValue = currentlyIntersecting();
639
1009
  for (let i = 0; i < records.length; i++) {
640
1010
  const record = records[i];
@@ -914,7 +1284,7 @@ var $c8d5ff4524619fcd$var$_tmpl$ = ["<div", ' class="', '">', "</div>"],
914
1284
  $c8d5ff4524619fcd$var$_tmpl$2 = ["<style", ' type="text/css">', "</style>"];
915
1285
  function $c8d5ff4524619fcd$export$d21e32dfedac04be(props) {
916
1286
  const container_class = "x" + $i7OB2$createUniqueId();
917
- const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps1(() => props.element_attributes, {
1287
+ const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps(() => props.element_attributes, {
918
1288
  classList: {
919
1289
  [container_class]: true
920
1290
  }
@@ -951,529 +1321,183 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
951
1321
  const [get_styling, set_styling] = $i7OB2$createSignal();
952
1322
  const selector_beginning = `.depict .${container_class}>`; // class so ppl can have id if needed
953
1323
  const [get_children_count, set_children_count] = $i7OB2$createSignal(0);
954
- const update_children_count = () => (0, $i7OB2$isServer) ? 20 : set_children_count(container_element.children.length);
955
- const col_styling = $i7OB2$createMemo(() => $i7OB2$n_col_styling_with_dist(selector_beginning, props.grid_spacing, props.cols_at_size, props.layout, props.override_vertical_spacing));
956
- const default_currently_visible_signal = $i7OB2$createSignal($i7OB2$untrack(() => rows_or_empty_object().start_rows ?? 1)); // Keep this signal here, so it doesn't change when rows_or_empty_object and I think it's to be expected that the "internal default signal" stays the same
957
- const rows_visible_signal = $i7OB2$createMemo(() => rows_or_empty_object().currently_visible || default_currently_visible_signal);
958
- const get_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[0]());
959
- const set_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[1]);
960
- const view_more_button_class = "m" + $i7OB2$createUniqueId();
961
- const view_less_button_class = "l" + $i7OB2$createUniqueId(); // https://github.com/solidjs/solid-docs/issues/263#issuecomment-1622388079
962
- const view_more_button_container = $i7OB2$createMemo(() => have_a_view_more_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-more-container ${$i7OB2$escape(view_more_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().button)));
963
- // We need to have duplicate buttons because which ones is shown depends on the number of rows visible and therefore on the viewport size and therefore on the css media queries
964
- const view_less_button_container = $i7OB2$createMemo(() => have_a_view_less_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-less-container ${$i7OB2$escape(view_less_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().view_less_button)));
965
- const [force_style_update, set_force_style_update] = $i7OB2$createSignal("");
966
- $i7OB2$createComputed(() => {
967
- // Make sure we don't have more rows visible than max_rows (this could happen by max_rows being decreased)
968
- const rows_visible = get_rows_visible();
969
- const max_rows = rows_or_empty_object().max_rows;
970
- if (!isNaN(max_rows) && max_rows >= 0 && rows_visible > max_rows) set_rows_visible()(max_rows);
971
- });
972
- $i7OB2$createEffect(() => set_force_style_update(" ")); // force style update after hydration due to https://discord.com/channels/722131463138705510/722167424186843267/1151544212517552168
973
- $i7OB2$createRenderEffect(() => {
974
- // Be careful to only read show_all_rows in here (ofc doesn't apply to nested effects)
975
- if (show_all_rows()) {
976
- // no view more functionality requested
977
- set_styling(() => col_styling);
978
- return;
979
- }
980
- update_children_count();
981
- if (!(0, $i7OB2$isServer)) {
982
- const mutation_observer = new MutationObserver($i7OB2$catchify1(update_children_count));
983
- mutation_observer.observe(container_element, {
984
- childList: true
985
- });
986
- $i7OB2$onCleanup(() => mutation_observer.disconnect());
987
- }
988
- set_styling(
989
- // this is needed because solid will think that the memo-accessor is a setter function otherwise
990
- () => $i7OB2$createMemo(() => {
991
- const {
992
- rows_per_click: rows_per_click,
993
- max_rows = -1,
994
- start_rows: start_rows
995
- } = rows_or_empty_object();
996
- const rows_visible = get_rows_visible();
997
- const children_count = get_children_count();
998
- return force_style_update() + col_styling() + props.cols_at_size.map(options => {
999
- const [recs_per_row, min, max] = options;
1000
- let should_hide_view_more_button;
1001
- let visible_recs;
1002
- if (props.disable_partial_rows) {
1003
- visible_recs = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible, children_count, options);
1004
- const visible_recs_next_show_more = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible + (rows_per_click || 0),
1005
- // Should this really be zero when we default rows_per_click to 1?
1006
- children_count, options);
1007
- should_hide_view_more_button = visible_recs === visible_recs_next_show_more;
1008
- } else {
1009
- visible_recs = $i7OB2$layout_get_total_rec_amount_for_row(rows_visible, options);
1010
- should_hide_view_more_button = visible_recs >= children_count;
1011
- }
1012
- const should_hide_button_final = should_hide_view_more_button || max_rows !== -1 && rows_visible >= max_rows;
1013
- // I don't really understand the logic for when the view more button gets hidden so IDK if below is correct, but it works how it should for now
1014
- const should_hide_view_less_button = !should_hide_view_more_button || start_rows == undefined || rows_visible <= start_rows || children_count <= recs_per_row * start_rows;
1015
- return `${$i7OB2$layout_media_query_header(min, max)}{${selector_beginning}:nth-child(n+${visible_recs + 1}){display:none}${props.layout == "slider" ? `${selector_beginning}:nth-child(n+${visible_recs}){margin-right:0}` : ""}${should_hide_button_final ? `.depict .${view_more_button_class}{display:none!important}` : ``}${should_hide_view_less_button ? `.depict .${view_less_button_class}{display:none!important}` : ``}}`;
1016
- }).join("");
1017
- }));
1018
- });
1019
- const style_element = $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$2, $i7OB2$ssrHydrationKey(), get_styling); // need to create this after set_styling has been called or else there will be no styling in the SSR'd output
1020
- if (insert_after_container) container_element.after(style_element);
1021
- return [container_element, view_more_button_container(), view_less_button_container(), style_element];
1022
- }
1023
- var $c4492d24952ed731$var$_tmpl$ = ["<h2", ' class="recs-title">', "</h2>"];
1024
- function $c4492d24952ed731$export$d41d19e89346fa2({
1025
- recommendations_resource_: recommendations_resource_,
1026
- product_card_template_: product_card_template_,
1027
- layout_options_: layout_options_,
1028
- title_: title_,
1029
- NoResultsFallback_: NoResultsFallback_,
1030
- placeholderCacheKey_: placeholderCacheKey_
1031
- }) {
1032
- const is_showing_something = $i7OB2$createMemo(() => recommendations_resource_.loading || recommendations_resource_()?.length);
1033
- const title = $i7OB2$createMemo(() => title_?.()); // In case getter/accessor creates elements, don't create them twice
1034
- const num_placeholders_ = () => 20;
1035
- const slider = [$i7OB2$createComponent((0, $i7OB2$Show), {
1036
- get when() {
1037
- return title();
1038
- },
1039
- get children() {
1040
- return $i7OB2$ssr($c4492d24952ed731$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
1041
- }
1042
- }), $i7OB2$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
1043
- arrow_height_: 25,
1044
- arrow_width_: 12.5,
1045
- disable_fading_: true,
1046
- slider_ref_: slider => {
1047
- const {
1048
- insert_here: insert_here,
1049
- container: container
1050
- } = slider;
1051
- const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
1052
- // Do like this, so we don't have to call mergeProps ourselves
1053
- $i7OB2$createComponent(Layout, $i7OB2$mergeProps1({
1054
- rows: "all",
1055
- layout: "slider"
1056
- }, layout_options_));
1057
- $i7OB2$slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
1058
- insert_here.before($a458486f22b22f63$export$a2cc176055f8f08());
1059
- container.classList.add("products");
1060
- },
1061
- get children() {
1062
- return $i7OB2$createComponent((0, $i7OB2$Suspense), {
1063
- get fallback() {
1064
- return $6e41f1fde994db72$export$f33414a4df0afd3f({
1065
- num_placeholders_: num_placeholders_,
1066
- product_card_template_: product_card_template_,
1067
- placeholderCacheKey_: placeholderCacheKey_
1068
- });
1069
- },
1070
- get children() {
1071
- return (() => {
1072
- // IIFE to make sure we access both the recommendations_resource and the resources containing the product card rendering results themselves within the Suspense boundary
1073
- const displays_by_key_ = $29ec7cddbe1d3484$export$7f8bd308237ab5a5($i7OB2$createMemo(() => recommendations_resource_() || []));
1074
- const {
1075
- renderedDisplays_: renderedDisplays_
1076
- } = $f091294da861020c$export$4a14175d33d81a96({
1077
- displays_by_key_: displays_by_key_,
1078
- product_card_template_: product_card_template_
1079
- });
1080
- return renderedDisplays_;
1081
- })();
1082
- }
1083
- });
1084
- }
1085
- })];
1086
- return $i7OB2$createComponent((0, $i7OB2$Show), {
1087
- get when() {
1088
- return is_showing_something();
1089
- },
1090
- get fallback() {
1091
- return NoResultsFallback_?.();
1092
- },
1093
- children: slider
1094
- });
1095
- }
1096
- function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
1097
- const component_in_error_boundary = do_with_elements => {
1098
- const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
1099
- severity_: "error",
1100
- message_: error_message,
1101
- get children() {
1102
- const elements = component();
1103
- do_with_elements?.(elements);
1104
- return elements;
1105
- }
1106
- });
1107
- // This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
1108
- if (typeof error_boundary_wrapped === "function")
1109
- // @ts-ignore
1110
- return error_boundary_wrapped();
1111
- // On the server it returns a string, so we just return that
1112
- return error_boundary_wrapped;
1113
- };
1114
- const owner = $i7OB2$getOwner();
1115
- if (owner == null) return $i7OB2$createRoot(dispose => {
1116
- // if we're not already run in a root, create a root and automatically dispose it when the first returned element is removed from the DOM
1117
- return component_in_error_boundary(elements => {
1118
- const have_multiple = Array.isArray(elements);
1119
- if (have_multiple ? !elements?.length : !elements) return;
1120
- (0, $i7OB2$observer).onremoved(have_multiple ? elements[0] : elements, ({
1121
- element: element
1122
- }) => {
1123
- if (document.documentElement.contains(element)) return; // If element has instantly been re-inserted, don't dispose
1124
- // See https://depictaiworkspace.slack.com/archives/C050GHEPBTR/p1695809102791259?thread_ts=1695106805.459729&cid=C050GHEPBTR
1125
- dispose();
1126
- });
1127
- });
1128
- });else
1129
- // we're already in a root so cleanups are handled
1130
- return component_in_error_boundary();
1131
- }
1132
- const $011607bdf658f807$var$ListingContext = /*@__PURE__*/$i7OB2$createContext();
1133
- function $011607bdf658f807$export$e68cff63f76bd15b(props) {
1134
- const our_object = {};
1135
- return $i7OB2$createComponent($011607bdf658f807$var$ListingContext.Provider, {
1136
- value: our_object,
1137
- get children() {
1138
- return props.children;
1139
- }
1140
- });
1141
- }
1142
- function $011607bdf658f807$export$8d0c4fdbb05a2f2e() {
1143
- return $i7OB2$useContext($011607bdf658f807$var$ListingContext);
1144
- }
1145
- function $d134eae24341b4a1$export$89c6019e4baa40b1(props) {
1146
- const style = $i7OB2$createMemo(() => {
1147
- const {
1148
- style: style,
1149
- height: height,
1150
- width: width
1151
- } = props;
1152
- return {
1153
- ...(style || {}),
1154
- height: height ?? "1em",
1155
- ...(width && {
1156
- width: width
1157
- })
1158
- };
1159
- });
1160
- return $i7OB2$createComponent((0, $d20eff0aadc28983$export$acb3eaade4b23afd), {
1161
- get style() {
1162
- return style();
1163
- },
1164
- get ["class"]() {
1165
- return props.class;
1166
- }
1167
- });
1168
- }
1169
- var $bb15dfb548a7666e$var$_tmpl$ = ["<div", ' class="instant-card"><div class="img-part">', '</div><div class="right-part"><div class="title-brand-tagline"><span class="title">', '</span></div><div class="price-container">', "</div></div></div>"];
1170
- const $bb15dfb548a7666e$export$8a2234b5b1a5ebd4 = "--image-aspect-ratio";
1171
- function $bb15dfb548a7666e$export$ee1733d9a8495996() {
1172
- return $i7OB2$ssr($bb15dfb548a7666e$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $7f60f09116a3fe61$export$3f37af283f8fb843), {
1173
- aspectRatio: `var(${$bb15dfb548a7666e$export$8a2234b5b1a5ebd4}, 1)`
1174
- })), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
1175
- width: "20ch",
1176
- height: "1em"
1177
- })), $i7OB2$escape($i7OB2$createComponent((0, $d134eae24341b4a1$export$89c6019e4baa40b1), {
1178
- width: "5ch",
1179
- height: "1em",
1180
- "class": "price"
1181
- })));
1182
- }
1183
- var $f18d425032111270$var$_tmpl$ = ["<div", ' style="', '"', ">", "</div>"];
1184
- function $f18d425032111270$export$94026ee33dbabc26(props) {
1185
- return $i7OB2$ssr($f18d425032111270$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$ssrStyle(`padding-bottom:calc(calc(1 / ${props.aspectRatio}) * 100%)`), $i7OB2$ssrAttribute("class", "s-image-container" + (props.class ? " " + $i7OB2$escape(props.class, true) : ""), false), $i7OB2$escape(props.children));
1186
- }
1187
- let $4ea56971d92eb0cd$var$browserIsBugged = false;
1188
- function $4ea56971d92eb0cd$export$2972b890694ced75(callback, {
1189
- timeout: timeout
1190
- }) {
1191
- if ($4ea56971d92eb0cd$var$browserIsBugged) timeout /= 4;
1192
- const cancel = () => {
1193
- cancelIdleCallback(idleHandle);
1194
- clearTimeout(racingTimeout);
1195
- };
1196
- const idleHandle = requestIdleCallback(deadline => {
1197
- cancel();
1198
- return callback(deadline);
1199
- }, {
1200
- timeout: timeout
1201
- });
1202
- const racingTimeout = setTimeout(() => {
1203
- $i7OB2$dwarn("Browser did not respect requestIdleCallback timeout");
1204
- $4ea56971d92eb0cd$var$browserIsBugged = true;
1205
- cancel();
1206
- callback({
1207
- didTimeout: false,
1208
- timeRemaining() {
1209
- return 500;
1210
- }
1211
- });
1212
- }, timeout + 1000);
1213
- return cancel;
1214
- }
1215
- function $e8ffe11ed01df0fe$export$e6fffe67d4cdd848(whatToWatch) {
1216
- const [size, setSize] = $i7OB2$createSignal(0);
1217
- const resizeObserver = new ResizeObserver($i7OB2$catchify1(records => {
1218
- for (let j = 0; j < records.length; j++) {
1219
- const {
1220
- width: width
1221
- } = records[j].contentRect;
1222
- if (!width) continue;
1223
- setSize(Math.ceil(width));
1224
- }
1225
- }));
1226
- // If we start observing elements before they're in the DOM Chrome (Version 117.0.5938.92 (Official Build) (arm64)) sometimes gives us a resize event with a width of 0 and then doesn't dispatch one with the actual width once it's in the DOM. So we wait until the element is in the DOM before we start observing it.
1227
- // It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
1228
- const disconnect = (0, $i7OB2$observer).onexists(whatToWatch, ({
1229
- element: element
1230
- }) => requestAnimationFrame($i7OB2$catchify1(() => resizeObserver.observe(element))));
1231
- $i7OB2$onCleanup(() => {
1232
- resizeObserver.disconnect();
1233
- disconnect();
1234
- });
1235
- return size;
1236
- }
1237
- const $e8ffe11ed01df0fe$var$onIdleFunctionsSymbol = /*@__PURE__*/Symbol("onIdleFunctions");
1238
- const $e8ffe11ed01df0fe$export$f8945274f08a3105 = /*@__PURE__*/Symbol("listingContextAspectRatios");
1239
- const $e8ffe11ed01df0fe$export$6066eb417ed2e9f7 = /*@__PURE__*/Symbol("listingContextAspectRatios");
1240
- function $e8ffe11ed01df0fe$export$6e5611bc7e57e477(props) {
1241
- const src_options = $i7OB2$createMemo(() => {
1242
- const {
1243
- src: src,
1244
- customUrls: customUrls
1245
- } = props;
1246
- const fallback_src = (customUrls || $e8ffe11ed01df0fe$export$1d6267828870adda)(src, 400);
1247
- const srcset = $e8ffe11ed01df0fe$var$make_srcset(props.src, props.resolutions || [64, 128, 256, 300, 400, 512, 640, 768, 1024, 1280, 1536, 2048, 2560, 3072, 3584, 4096], customUrls);
1248
- // The order here *might* matter - I've seen mobile safari always start with loading the 400px version when it was reversed
1249
- return {
1250
- srcset: srcset,
1251
- src: fallback_src
1252
- };
1253
- });
1254
- // Work around https://github.com/solidjs/solid/issues/1828
1255
- const img = new Image(); // Need to use new Image or browser might not start loading image before it's in the DOM
1256
- const [, otherAttributes] = $i7OB2$splitProps(props, ["resolutions", "size", "src", "srcSet", "loading", "keyRatioUpdating", "customUrls" // Can't have properties ending on underscore because the property name mangling will get confused by this <-
1257
- ]);
1258
-
1259
- const [hasSetSize, setHasSetSize] = $i7OB2$createSignal(false);
1260
- const [hasDecoded, setHasDecoded] = $i7OB2$createSignal(false);
1261
- const productCardIndexAccessor = $b6440e72ed83671a$export$e3faf4d95300054f();
1262
- const sizePX = $i7OB2$createMemo(() => `${props.size()}px`); // props.size could be a getter that expects a cleanup so get it in this memo instead of where we set img.sizes
1263
- const listingContext = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
1264
- const isPrioritisedImage = $i7OB2$createMemo(() => productCardIndexAccessor?.() < 8);
1265
- const shouldActuallyEnableLazyLoading = $i7OB2$createMemo(() => {
1266
- const {
1267
- loading: loading
1268
- } = props;
1269
- if (loading === "force-lazy") return true;
1270
- return loading === "lazy" && !isPrioritisedImage();
1271
- });
1272
- const modifiedOtherAttributes = $i7OB2$mergeProps(otherAttributes, {
1273
- get loading() {
1274
- return shouldActuallyEnableLazyLoading() ? "lazy" : undefined;
1275
- }
1276
- });
1277
- // Batch idle callbacks so that MutationObserver can batch the resulting mutations better, so we don't lose tons of CPU time to MutationObservers doing lots of things for each image
1278
- // Happened on singular, they have some weird observer (+we also have one but ours is at least 3x more efficient)
1279
- const executeWhenIdleBatched = (fn, isSizesUpdate) => {
1280
- if (typeof requestIdleCallback !== "function") return setTimeout(fn); // Old browsers don't get optimisation
1281
- if ((!isSizesUpdate || !sizeSetFastPath) && $i7OB2$untrack(isPrioritisedImage)) return fn(); // If we're one of the first 8 images, execute the callbacks immediately (improves lighthouse metrics)
1282
- // unless we're just a `sizes` update after the initial sizes setting (this optimisation makes the looks animation a lot smoother on low-cpu devices)
1283
- const existingStack = listingContext?.[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
1284
- if (existingStack) return existingStack.add(fn);
1285
- const newStack = new Set([fn]);
1286
- if (listingContext) listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol] = newStack;
1287
- const processStackWhenIdle = () => $4ea56971d92eb0cd$export$2972b890694ced75($i7OB2$catchify1(deadline => {
1288
- const start = performance.now();
1289
- const thirdDeadlineTime = deadline.timeRemaining() / 3; // observers coming after this take up 2-3x the time so don't use all of it
1290
- for (const fn of newStack) {
1291
- newStack.delete(fn);
1292
- fn();
1293
- const timeTaken = performance.now() - start;
1294
- if ((!deadline.timeRemaining() || timeTaken > thirdDeadlineTime) && newStack.size) {
1295
- // There's still work to be done but no time, so schedule another idle callback
1296
- processStackWhenIdle();
1297
- return;
1298
- }
1299
- }
1300
- // Stack is empty
1301
- if (listingContext) delete listingContext[$e8ffe11ed01df0fe$var$onIdleFunctionsSymbol];
1302
- }), {
1303
- timeout: 15000
1304
- } // long timeout, better to not have images than to freeze the browser. But also we don't want to confuse user why no iamges are loading
1305
- );
1306
-
1307
- processStackWhenIdle();
1308
- };
1309
- let sizeSetFastPath = false;
1310
- let hasDecodedFastPath = false;
1311
- let timeoutSet = false;
1312
- let gotCleanedUp = false;
1313
- let srcJustChanged = true;
1314
- img.classList.add("s-responsive-image");
1315
- if (listingContext) {
1316
- let prevValue;
1317
- const aspectRatios = listingContext[$e8ffe11ed01df0fe$export$f8945274f08a3105] ||= new Set();
1318
- const [, setMostPrevalentAspectRatio] = listingContext[$e8ffe11ed01df0fe$export$6066eb417ed2e9f7] ||= $i7OB2$createSignal();
1319
- img.addEventListener("load", $i7OB2$catchify1(() => {
1320
- if (props.keyRatioUpdating) {
1321
- if (!srcJustChanged) return;
1322
- srcJustChanged = false;
1323
- }
1324
- // Save our aspect ratio whenever it changes, so that we can base the containers on the most dominant aspect ratio, used in SearchModalV2 and LookItem
1325
- const aspectRatio_ = img.naturalWidth / img.naturalHeight;
1326
- if (prevValue) aspectRatios.delete(prevValue);
1327
- const newValue = !isNaN(aspectRatio_) ? {
1328
- aspectRatio_: aspectRatio_
1329
- } : undefined;
1330
- if (newValue) aspectRatios.add(newValue);
1331
- prevValue = newValue;
1332
- // Do all calculations resulting of an update directly, for performance
1333
- const asArray = [...aspectRatios].map(({
1334
- aspectRatio_: aspectRatio_
1335
- }) => aspectRatio_);
1336
- const mostPrevalentAspectRatio = $i7OB2$findMostFrequentItem(asArray);
1337
- setMostPrevalentAspectRatio(mostPrevalentAspectRatio);
1338
- }));
1339
- $i7OB2$onCleanup(() => prevValue && aspectRatios.delete(prevValue));
1340
- }
1341
- $i7OB2$onCleanup(() => gotCleanedUp = true);
1342
- $i7OB2$spread(img, $i7OB2$mergeProps(modifiedOtherAttributes), false, true);
1343
- $i7OB2$createRenderEffect(() => {
1344
- props.src;
1345
- srcJustChanged = true;
1346
- });
1347
- $i7OB2$createEffect(() => {
1348
- if (!props.size()) return; // wait until we have a size, run every time the size changes
1349
- if (timeoutSet) return;
1350
- const handler = $i7OB2$catchify1(() => {
1351
- if (gotCleanedUp) return;
1352
- img.sizes = sizePX(); // use latest available value of props.size
1353
- if (!sizeSetFastPath) {
1354
- setHasSetSize(true);
1355
- sizeSetFastPath = true;
1356
- }
1357
- timeoutSet = false;
1358
- });
1359
- // Throttle the updating of sizes to avoid unnecessary image re-fetches during resize
1360
- // And also because we first set src after sizes has been set, wait with loading and decoding images until browser is idle
1361
- // This greatly improves performance when loading (more) products
1362
- // See https://depictaiworkspace.slack.com/archives/C05NJ0K3WRL/p1698220617663139
1363
- timeoutSet = true; // Important to set timeoutSet before the call to executeWhenIdleBatched since if this is an important image executeWhenIdleBatched will execute fn immediately
1364
- executeWhenIdleBatched(handler, true);
1324
+ const update_children_count = () => (0, $i7OB2$isServer) ? 20 : set_children_count(container_element.children.length);
1325
+ const col_styling = $i7OB2$createMemo(() => $i7OB2$n_col_styling_with_dist(selector_beginning, props.grid_spacing, props.cols_at_size, props.layout, props.override_vertical_spacing));
1326
+ const default_currently_visible_signal = $i7OB2$createSignal($i7OB2$untrack(() => rows_or_empty_object().start_rows ?? 1)); // Keep this signal here, so it doesn't change when rows_or_empty_object and I think it's to be expected that the "internal default signal" stays the same
1327
+ const rows_visible_signal = $i7OB2$createMemo(() => rows_or_empty_object().currently_visible || default_currently_visible_signal);
1328
+ const get_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[0]());
1329
+ const set_rows_visible = $i7OB2$createMemo(() => rows_visible_signal()[1]);
1330
+ const view_more_button_class = "m" + $i7OB2$createUniqueId();
1331
+ const view_less_button_class = "l" + $i7OB2$createUniqueId(); // https://github.com/solidjs/solid-docs/issues/263#issuecomment-1622388079
1332
+ const view_more_button_container = $i7OB2$createMemo(() => have_a_view_more_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-more-container ${$i7OB2$escape(view_more_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().button)));
1333
+ // We need to have duplicate buttons because which ones is shown depends on the number of rows visible and therefore on the viewport size and therefore on the css media queries
1334
+ const view_less_button_container = $i7OB2$createMemo(() => have_a_view_less_button() && $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$, $i7OB2$ssrHydrationKey(), `load-less-container ${$i7OB2$escape(view_less_button_class, true)}`, $i7OB2$escape(rows_or_empty_object().view_less_button)));
1335
+ const [force_style_update, set_force_style_update] = $i7OB2$createSignal("");
1336
+ $i7OB2$createComputed(() => {
1337
+ // Make sure we don't have more rows visible than max_rows (this could happen by max_rows being decreased)
1338
+ const rows_visible = get_rows_visible();
1339
+ const max_rows = rows_or_empty_object().max_rows;
1340
+ if (!isNaN(max_rows) && max_rows >= 0 && rows_visible > max_rows) set_rows_visible()(max_rows);
1365
1341
  });
1366
- 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
1367
- $i7OB2$createEffect(() => {
1368
- 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
1369
- Object.assign(img, src_options());
1370
- // Add to DOM once decoded to not require/block any paints before image has completed loading and avoid showing broken image symbol
1371
- // We can do this because there has to be a container around us giving us a size
1372
- // No need to listen if we're already in the DOM
1373
- if (hasDecodedFastPath) return;
1374
- if (shouldActuallyEnableLazyLoading()) {
1375
- // For lazy loading there's no decoding to wait for as it only occurs when the image is visible
1376
- // Make sure src is set before we put the image into the DOM though so no broken image symbol is shown
1377
- setHasDecoded(true);
1378
- hasDecodedFastPath = true;
1342
+ $i7OB2$createEffect(() => set_force_style_update(" ")); // force style update after hydration due to https://discord.com/channels/722131463138705510/722167424186843267/1151544212517552168
1343
+ $i7OB2$createRenderEffect(() => {
1344
+ // Be careful to only read show_all_rows in here (ofc doesn't apply to nested effects)
1345
+ if (show_all_rows()) {
1346
+ // no view more functionality requested
1347
+ set_styling(() => col_styling);
1379
1348
  return;
1380
1349
  }
1381
- 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"
1382
- .then(async () => {
1383
- // Also wait with inserting image (i.e. paint) until browser is idle
1384
- await new Promise(r => executeWhenIdleBatched(r, false));
1385
- if (gotCleanedUp) return;
1386
- setHasDecoded(true);
1387
- hasDecodedFastPath = true;
1388
- });
1350
+ update_children_count();
1351
+ if (!(0, $i7OB2$isServer)) {
1352
+ const mutation_observer = new MutationObserver($i7OB2$catchify(update_children_count));
1353
+ mutation_observer.observe(container_element, {
1354
+ childList: true
1355
+ });
1356
+ $i7OB2$onCleanup(() => mutation_observer.disconnect());
1357
+ }
1358
+ set_styling(
1359
+ // this is needed because solid will think that the memo-accessor is a setter function otherwise
1360
+ () => $i7OB2$createMemo(() => {
1361
+ const {
1362
+ rows_per_click: rows_per_click,
1363
+ max_rows = -1,
1364
+ start_rows: start_rows
1365
+ } = rows_or_empty_object();
1366
+ const rows_visible = get_rows_visible();
1367
+ const children_count = get_children_count();
1368
+ return force_style_update() + col_styling() + props.cols_at_size.map(options => {
1369
+ const [recs_per_row, min, max] = options;
1370
+ let should_hide_view_more_button;
1371
+ let visible_recs;
1372
+ if (props.disable_partial_rows) {
1373
+ visible_recs = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible, children_count, options);
1374
+ const visible_recs_next_show_more = $i7OB2$layout_get_visible_recs_without_partial_rows(rows_visible + (rows_per_click || 0),
1375
+ // Should this really be zero when we default rows_per_click to 1?
1376
+ children_count, options);
1377
+ should_hide_view_more_button = visible_recs === visible_recs_next_show_more;
1378
+ } else {
1379
+ visible_recs = $i7OB2$layout_get_total_rec_amount_for_row(rows_visible, options);
1380
+ should_hide_view_more_button = visible_recs >= children_count;
1381
+ }
1382
+ const should_hide_button_final = should_hide_view_more_button || max_rows !== -1 && rows_visible >= max_rows;
1383
+ // I don't really understand the logic for when the view more button gets hidden so IDK if below is correct, but it works how it should for now
1384
+ const should_hide_view_less_button = !should_hide_view_more_button || start_rows == undefined || rows_visible <= start_rows || children_count <= recs_per_row * start_rows;
1385
+ return `${$i7OB2$layout_media_query_header(min, max)}{${selector_beginning}:nth-child(n+${visible_recs + 1}){display:none}${props.layout == "slider" ? `${selector_beginning}:nth-child(n+${visible_recs}){margin-right:0}` : ""}${should_hide_button_final ? `.depict .${view_more_button_class}{display:none!important}` : ``}${should_hide_view_less_button ? `.depict .${view_less_button_class}{display:none!important}` : ``}}`;
1386
+ }).join("");
1387
+ }));
1389
1388
  });
1389
+ const style_element = $i7OB2$ssr($c8d5ff4524619fcd$var$_tmpl$2, $i7OB2$ssrHydrationKey(), get_styling); // need to create this after set_styling has been called or else there will be no styling in the SSR'd output
1390
+ if (insert_after_container) container_element.after(style_element);
1391
+ return [container_element, view_more_button_container(), view_less_button_container(), style_element];
1392
+ }
1393
+ var $c4492d24952ed731$var$_tmpl$ = ["<h2", ' class="recs-title">', "</h2>"];
1394
+ function $c4492d24952ed731$export$d41d19e89346fa2({
1395
+ recommendations_resource_: recommendations_resource_,
1396
+ product_card_template_: product_card_template_,
1397
+ layout_options_: layout_options_,
1398
+ title_: title_,
1399
+ NoResultsFallback_: NoResultsFallback_,
1400
+ placeholderCacheKey_: placeholderCacheKey_
1401
+ }) {
1402
+ const is_showing_something = $i7OB2$createMemo(() => recommendations_resource_.loading || recommendations_resource_()?.length);
1403
+ const title = $i7OB2$createMemo(() => title_?.()); // In case getter/accessor creates elements, don't create them twice
1404
+ const num_placeholders_ = () => 20;
1405
+ const slider = [$i7OB2$createComponent((0, $i7OB2$Show), {
1406
+ get when() {
1407
+ return title();
1408
+ },
1409
+ get children() {
1410
+ return $i7OB2$ssr($c4492d24952ed731$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
1411
+ }
1412
+ }), $i7OB2$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
1413
+ arrow_height_: 25,
1414
+ arrow_width_: 12.5,
1415
+ disable_fading_: true,
1416
+ slider_ref_: slider => {
1417
+ const {
1418
+ insert_here: insert_here,
1419
+ container: container
1420
+ } = slider;
1421
+ const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
1422
+ // Do like this, so we don't have to call mergeProps ourselves
1423
+ $i7OB2$createComponent(Layout, $i7OB2$mergeProps({
1424
+ rows: "all",
1425
+ layout: "slider"
1426
+ }, layout_options_));
1427
+ $i7OB2$slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
1428
+ insert_here.before($a458486f22b22f63$export$a2cc176055f8f08());
1429
+ container.classList.add("products");
1430
+ },
1431
+ get children() {
1432
+ return $i7OB2$createComponent((0, $i7OB2$Suspense), {
1433
+ get fallback() {
1434
+ return $6e41f1fde994db72$export$f33414a4df0afd3f({
1435
+ num_placeholders_: num_placeholders_,
1436
+ product_card_template_: product_card_template_,
1437
+ placeholderCacheKey_: placeholderCacheKey_
1438
+ });
1439
+ },
1440
+ get children() {
1441
+ return (() => {
1442
+ // IIFE to make sure we access both the recommendations_resource and the resources containing the product card rendering results themselves within the Suspense boundary
1443
+ const displays_by_key_ = $29ec7cddbe1d3484$export$7f8bd308237ab5a5($i7OB2$createMemo(() => recommendations_resource_() || []));
1444
+ const {
1445
+ renderedDisplays_: renderedDisplays_
1446
+ } = $f091294da861020c$export$4a14175d33d81a96({
1447
+ displays_by_key_: displays_by_key_,
1448
+ product_card_template_: product_card_template_
1449
+ });
1450
+ return renderedDisplays_;
1451
+ })();
1452
+ }
1453
+ });
1454
+ }
1455
+ })];
1390
1456
  return $i7OB2$createComponent((0, $i7OB2$Show), {
1391
1457
  get when() {
1392
- return hasDecoded();
1458
+ return is_showing_something();
1393
1459
  },
1394
- children: img
1460
+ get fallback() {
1461
+ return NoResultsFallback_?.();
1462
+ },
1463
+ children: slider
1395
1464
  });
1396
1465
  }
1397
- function $e8ffe11ed01df0fe$var$make_srcset(url, resolutions, customGenerateImageUrl_) {
1398
- return resolutions.map(width => `${(customGenerateImageUrl_ || $e8ffe11ed01df0fe$export$1d6267828870adda)(url, width)} ${width}w`).join(", ");
1399
- }
1400
- function $e8ffe11ed01df0fe$export$1d6267828870adda(url, width) {
1401
- // 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)
1402
- // 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)
1403
- // That way we can just to string concatenation which is insanely fast
1404
- return url + "&width=" + encodeURIComponent(width);
1405
- }
1406
- const $660070e2a394b3c3$var$backupSizeSignal = /*@__PURE__*/$i7OB2$createSignal();
1407
- const $660070e2a394b3c3$export$d7b7ab832c20e2f4 = /*@__PURE__*/Symbol("ShopifyContainedImage");
1408
- function $660070e2a394b3c3$export$e4b984597b71e989(props) {
1409
- const context = $011607bdf658f807$export$8d0c4fdbb05a2f2e();
1410
- if (context && !context[$660070e2a394b3c3$export$d7b7ab832c20e2f4])
1411
- // create a signal that's the same for all items in this listing
1412
- context[$660070e2a394b3c3$export$d7b7ab832c20e2f4] = $i7OB2$createSignal();
1413
- const [currentImageSize, setCurrentImageSize] = context?.[$660070e2a394b3c3$export$d7b7ab832c20e2f4] || $660070e2a394b3c3$var$backupSizeSignal; // use global fallback signal (might lead to blurry images) if no context is available
1414
- const [mostPrevalentAspectRatio] = context ?
1415
- // If the context exists we have to create the signal here as getting it here would be too late when it's created by ShopifyResponsiveImg below
1416
- context[(0, $e8ffe11ed01df0fe$export$6066eb417ed2e9f7)] ||= $i7OB2$createSignal() : [];
1417
- const container = $f18d425032111270$export$94026ee33dbabc26({
1418
- // Write getters manually instead of using JSX, so we can do more complex logic in the aspectRatio getter without increasing bundle size
1419
- get class() {
1420
- return props.class;
1421
- },
1422
- get aspectRatio() {
1423
- if (props.autoAdjustAspectRatio) {
1424
- const targetRatio = mostPrevalentAspectRatio?.();
1425
- if (targetRatio != undefined) return `var(${(0, $bb15dfb548a7666e$export$8a2234b5b1a5ebd4)}, ${targetRatio})`;
1466
+ function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
1467
+ const component_in_error_boundary = do_with_elements => {
1468
+ const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
1469
+ severity_: "error",
1470
+ message_: error_message,
1471
+ get children() {
1472
+ const elements = component();
1473
+ do_with_elements?.(elements);
1474
+ return elements;
1426
1475
  }
1427
- return props.aspectRatio;
1428
- }
1429
- });
1476
+ });
1477
+ // This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
1478
+ if (typeof error_boundary_wrapped === "function")
1479
+ // @ts-ignore
1480
+ return error_boundary_wrapped();
1481
+ // On the server it returns a string, so we just return that
1482
+ return error_boundary_wrapped;
1483
+ };
1430
1484
  const owner = $i7OB2$getOwner();
1431
- let createdSizeAccessor = false;
1432
- let wasCleanedUp = false;
1433
- $i7OB2$createEffect(() => {
1434
- if (currentImageSize() || wasCleanedUp) return; // We get into the effect when onCleanup is called if we don't have wasCleanedUp
1435
- // ensure we always have a size accessor
1436
- // 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
1437
- createdSizeAccessor = true;
1438
- setCurrentImageSize(() => $i7OB2$runWithOwner(owner, () => $e8ffe11ed01df0fe$export$e6fffe67d4cdd848(container)));
1439
- });
1440
- $i7OB2$onCleanup(() => {
1441
- wasCleanedUp = true; // important to set this before the function call below and always, so the dead effects don't create dead size accessors
1442
- if (!createdSizeAccessor) return;
1443
- $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
1444
- });
1445
-
1446
- $i7OB2$insert(container, $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), $i7OB2$mergeProps1({
1447
- get size() {
1448
- return $i7OB2$createMemo(() => currentImageSize()?.() || 0);
1449
- },
1450
- get src() {
1451
- return props.src;
1452
- }
1453
- }, () => props.imgProps, {
1454
- get style() {
1455
- return props.imgProps?.style;
1456
- }
1457
- })));
1458
- return container;
1459
- }
1460
- function $70bb27cc6be01fc7$export$9d4a4b669b1929ab(props) {
1461
- return $i7OB2$createComponent((0, $660070e2a394b3c3$export$e4b984597b71e989), $i7OB2$mergeProps1(props, {
1462
- get imgProps() {
1463
- return {
1464
- ...props.imgProps,
1465
- customUrls: (url, width // Apparently don't have to encode url for CF's service
1466
- ) => {
1467
- if (url?.startsWith?.("https://cdn.shopify.com"))
1468
- // The shopify image resizing CDN blocks Cloudflare's image resizer. It's possible that we can't detect shopify image URLs sometimes because they go to the merchant's domain,
1469
- // but it seems like the URLs returned by the Depict API always goes to the cdn.shopify.com version of an image, so this simple workaround works.
1470
- return $e8ffe11ed01df0fe$export$1d6267828870adda(url, width);
1471
- // Use cloudflare image resizer instead of img.depict.ai because it's a lot faster (and also auto-chooses other formats if webp is not supported)
1472
- return `https://app.depict.ai/cdn-cgi/image/width=${width},format=auto/${url}`;
1473
- }
1474
- };
1475
- }
1476
- }));
1485
+ if (owner == null) return $i7OB2$createRoot(dispose => {
1486
+ // if we're not already run in a root, create a root and automatically dispose it when the first returned element is removed from the DOM
1487
+ return component_in_error_boundary(elements => {
1488
+ const have_multiple = Array.isArray(elements);
1489
+ if (have_multiple ? !elements?.length : !elements) return;
1490
+ (0, $i7OB2$observer).onremoved(have_multiple ? elements[0] : elements, ({
1491
+ element: element
1492
+ }) => {
1493
+ if (document.documentElement.contains(element)) return; // If element has instantly been re-inserted, don't dispose
1494
+ // See https://depictaiworkspace.slack.com/archives/C050GHEPBTR/p1695809102791259?thread_ts=1695106805.459729&cid=C050GHEPBTR
1495
+ dispose();
1496
+ });
1497
+ });
1498
+ });else
1499
+ // we're already in a root so cleanups are handled
1500
+ return component_in_error_boundary();
1477
1501
  }
1478
1502
  function $8c0f86cb3e266eeb$export$a71e92cfbb498adc(props) {
1479
1503
  return $i7OB2$createMemo(() => {
@@ -1509,7 +1533,7 @@ function $08a49ecdcd5beaca$export$b73ed90f0ee50dc3({
1509
1533
  const href = $i7OB2$createMemo(() => variantToUse()?.page_url);
1510
1534
  const FavoriteButton = FavoriteButton_; // Just to get rid of the type error - TS doesn't understand <Show>
1511
1535
  const title = $i7OB2$createMemo(() => variantToUse()?.title);
1512
- return $i7OB2$ssrElement("a", $i7OB2$mergeProps1({
1536
+ return $i7OB2$ssrElement("a", $i7OB2$mergeProps({
1513
1537
  "class": "look-item"
1514
1538
  }, () => enableLink() ? {
1515
1539
  href: href()
@@ -1553,7 +1577,7 @@ function $08a49ecdcd5beaca$export$b73ed90f0ee50dc3({
1553
1577
  return (animationEffectExists() ? isExpandedThrottledByOurEffectRun() : userWantsExpanded()) || animationIsRunning();
1554
1578
  },
1555
1579
  get children() {
1556
- return $i7OB2$ssr($08a49ecdcd5beaca$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$ssrElement("span", $i7OB2$mergeProps1({
1580
+ return $i7OB2$ssr($08a49ecdcd5beaca$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$ssrElement("span", $i7OB2$mergeProps({
1557
1581
  "class": "d-title line-clamp"
1558
1582
  }, () => title() && {
1559
1583
  title: title()
@@ -1646,7 +1670,7 @@ async function $1f9a34ca8a87d49f$var$checkIfIsAffectedByChromeBug326498383() {
1646
1670
  const waitAFrame = () => new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r)));
1647
1671
  const timeoutPromise = new Promise(r => {
1648
1672
  resolveTimeoutPromise = r;
1649
- setTimeout($i7OB2$catchify1(() => {
1673
+ setTimeout($i7OB2$catchify(() => {
1650
1674
  r();
1651
1675
  div.remove();
1652
1676
  }), 500);
@@ -1730,7 +1754,7 @@ function $11fb4b33b36ecfac$export$ebf0b1d4f90c09ae({
1730
1754
  priceFormatting_: priceFormatting_,
1731
1755
  outerRef_: el => $i7OB2$createEffect(() => {
1732
1756
  if (index !== 0) return;
1733
- const resizeObserver = new ResizeObserver($i7OB2$catchify1(records => setLookItemHeight(records.at(-1).contentRect.height)));
1757
+ const resizeObserver = new ResizeObserver($i7OB2$catchify(records => setLookItemHeight(records.at(-1).contentRect.height)));
1734
1758
  resizeObserver.observe(el);
1735
1759
  $i7OB2$onCleanup(() => resizeObserver.disconnect());
1736
1760
  })
@@ -1749,7 +1773,7 @@ function $11fb4b33b36ecfac$var$scrollingFunctionForChrome(element, targetScrollY
1749
1773
  let start;
1750
1774
  const startingY = element.scrollTop;
1751
1775
  const diff = targetScrollY - startingY;
1752
- const step = $i7OB2$catchify1(timestamp => {
1776
+ const step = $i7OB2$catchify(timestamp => {
1753
1777
  if (!start) start = timestamp;
1754
1778
  // Elapsed milliseconds since start of scrolling.
1755
1779
  const time = timestamp - start;
@@ -1780,7 +1804,7 @@ function $e9d1d09be9e6471e$export$44809a8a3e867e30({
1780
1804
  const index = $b6440e72ed83671a$export$e3faf4d95300054f();
1781
1805
  const [containerWidth_, setContainerWidth] = $i7OB2$createSignal();
1782
1806
  const [containerHeight_, setContainerHeight] = $i7OB2$createSignal();
1783
- const clickHandler = $i7OB2$catchify1(({
1807
+ const clickHandler = $i7OB2$catchify(({
1784
1808
  target: target
1785
1809
  }) => {
1786
1810
  if (target !== container && !container.contains(target))
@@ -1917,7 +1941,7 @@ class $4fd2ba03703a7d92$export$7e1297a3a19f10d8 {
1917
1941
  * @param is_replace_ if you want to replace the current URL in history instead of pushing a new one
1918
1942
  * @param listing_id_ If you are navigating to a category and know the listing_id of, please provide it. This is for making a better devEx in js-ui
1919
1943
  */
1920
- go_to_: $i7OB2$catchify1(async ({
1944
+ go_to_: $i7OB2$catchify(async ({
1921
1945
  new_url_: raw_new_url,
1922
1946
  event_: event_,
1923
1947
  force_spa_navigation_: force_spa_navigation_,
@@ -2001,7 +2025,7 @@ function $3da8afe3ed57cf34$export$7da560f849543dff({
2001
2025
  get children() {
2002
2026
  return $i7OB2$ssr($3da8afe3ed57cf34$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape(title()));
2003
2027
  }
2004
- }), $i7OB2$ssr($3da8afe3ed57cf34$var$_tmpl$3, $i7OB2$ssrHydrationKey(), $i7OB2$escape($a458486f22b22f63$export$a2cc176055f8f08()), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$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({
2005
2029
  get rows() {
2006
2030
  return rows_object_();
2007
2031
  },
@@ -2130,7 +2154,7 @@ function $07ef910e8ef6b783$export$2c9f9bf2092486aa(props) {
2130
2154
  return $i7OB2$createComponent((0, $c4492d24952ed731$export$d41d19e89346fa2), sharedOptions);
2131
2155
  },
2132
2156
  get children() {
2133
- return $i7OB2$createComponent((0, $3da8afe3ed57cf34$export$7da560f849543dff), $i7OB2$mergeProps1(sharedOptions, {
2157
+ return $i7OB2$createComponent((0, $3da8afe3ed57cf34$export$7da560f849543dff), $i7OB2$mergeProps(sharedOptions, {
2134
2158
  view_more_button_: () => props.gridOptions_?.view_more_button,
2135
2159
  max_rows_: () => props.gridOptions_?.max_rows
2136
2160
  }));
@@ -2178,7 +2202,7 @@ async function $07ef910e8ef6b783$var$runDisplayTransformersForLooks(baseData, li
2178
2202
  }) : displaysToTransform;
2179
2203
  const transformedListings = await transformedListingsPromise;
2180
2204
  const transformedDisplayById = Object.fromEntries(transformedProducts.map(display => [$16351e4c87b90b3d$export$548d053aba053d79(display), display]));
2181
- return transformedListings.map(listing => $i7OB2$mergeProps(listing, {
2205
+ return transformedListings.map(listing => $i7OB2$mergeProps1(listing, {
2182
2206
  // use mergeProps because in preview browser we add getters in this object, that would be called too early otherwise
2183
2207
  displays: (displayIdsPerListingId[listing.listing_id] || []).map(displayId => transformedDisplayById[displayId]).filter(v => v)
2184
2208
  }));
@@ -2405,7 +2429,7 @@ function $eea41f703612261b$export$62f101a8aa597bf8({
2405
2429
  // don't wait if it's the first request
2406
2430
  write_current_instant_query(value);
2407
2431
  clearTimeout(timeout);
2408
- timeout = setTimeout($i7OB2$catchify1(() => write_current_instant_query(value)), 250);
2432
+ timeout = setTimeout($i7OB2$catchify(() => write_current_instant_query(value)), 250);
2409
2433
  });
2410
2434
  const [search_results] = $i7OB2$createResource($i7OB2$createMemo(() => ({
2411
2435
  // <-- key order important, see comment below
@@ -2413,7 +2437,7 @@ function $eea41f703612261b$export$62f101a8aa597bf8({
2413
2437
  market: market_(),
2414
2438
  locale: i18n_.backend_locale_(),
2415
2439
  query: read_current_instant_query()
2416
- })), $i7OB2$catchify1(async variable_data => {
2440
+ })), $i7OB2$catchify(async variable_data => {
2417
2441
  return depict_api_.query({
2418
2442
  // here it is (unfortunately) important that the keys in the object are in the same order as in SearchPage.tsx, because when JSON-encoding them to compare for caching the strings will be different otherwise
2419
2443
  limit: $i7OB2$untrack(has_sort_or_filters_) ? max_cards : min_products_to_fetch_,
@@ -2518,7 +2542,7 @@ function $c64d28ca12452b21$export$3340fdd8259bd4fd({
2518
2542
  if (process.env.GA === "false") return;
2519
2543
  let debounce_timeout;
2520
2544
  const stop_timeout = () => clearTimeout(debounce_timeout);
2521
- const send_to_ga = $i7OB2$catchify1(() => {
2545
+ const send_to_ga = $i7OB2$catchify(() => {
2522
2546
  const fake_url = new URL(location.href);
2523
2547
  const {
2524
2548
  searchParams: searchParams
@@ -2531,12 +2555,12 @@ function $c64d28ca12452b21$export$3340fdd8259bd4fd({
2531
2555
  $i7OB2$onCleanup(() => {
2532
2556
  setTimeout(
2533
2557
  // do it next event loop because search_field_value_ is wrong this one and search_query might be too because we want the old value to be put into the history entry and a framework like NextJS might take some time to navigate
2534
- $i7OB2$catchify1(() => {
2558
+ $i7OB2$catchify(() => {
2535
2559
  if ($i7OB2$untrack(get_search_query_) === $i7OB2$untrack(get_search_field_value_)) stop_timeout();
2536
2560
  }));
2537
2561
  });
2538
2562
  let first_call = true;
2539
- $i7OB2$createEffect($i7OB2$catchify1(() => {
2563
+ $i7OB2$createEffect($i7OB2$catchify(() => {
2540
2564
  get_search_field_value_();
2541
2565
  if (first_call) {
2542
2566
  // we only want to do stuff when it changes
@@ -2555,7 +2579,7 @@ function $a36cbc4f68bfd590$export$91c3b6774e8be0f5({
2555
2579
  const [get_current_href, set_current_href] = $i7OB2$createSignal(location.href);
2556
2580
  const [exit_iterable, exitable_iterable] = $i7OB2$make_asyncIterable_exiter((0, $i7OB2$href_change_ipns));
2557
2581
  $i7OB2$onCleanup(exit_iterable);
2558
- $i7OB2$catchify1(async () => {
2582
+ $i7OB2$catchify(async () => {
2559
2583
  for await (const href of exitable_iterable)
2560
2584
  // use native links so ppl can cmdclick/right click and open in new tab and see target URL
2561
2585
  set_current_href(href);
@@ -2573,7 +2597,7 @@ function $694b7f90501fea4c$export$5d2caaa6b530761c() {
2573
2597
  }
2574
2598
  var $19976a74d273070d$var$_tmpl$ = '<path d="M11.669 10.531l9.156-9.156a.78.78 0 0 0 .237-.569c0-.221-.079-.412-.237-.569A.8.8 0 0 0 20.24 0a.77.77 0 0 0-.569.237l-9.14 9.14-9.14-9.14A.79.79 0 0 0 .807 0a.77.77 0 0 0-.569.237A.78.78 0 0 0 0 .807a.77.77 0 0 0 .237.569l9.156 9.156-9.156 9.14c-.159.157-.237.349-.237.569s.079.412.237.569c.085.085.174.148.268.19a1.095 1.095 0 0 0 .316.048.894.894 0 0 0 .285-.048.84.84 0 0 0 .285-.19l9.139-9.14 9.14 9.14a.894.894 0 0 0 .268.19 1.049 1.049 0 0 0 .301.048.941.941 0 0 0 .301-.048.84.84 0 0 0 .285-.19.78.78 0 0 0 .237-.569c0-.221-.079-.412-.237-.569z"></path>';
2575
2599
  function $19976a74d273070d$export$3b621d86b1566b2(props = {}) {
2576
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
2600
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
2577
2601
  xmlns: "http://www.w3.org/2000/svg",
2578
2602
  width: "21.064",
2579
2603
  height: "21.064",
@@ -2673,7 +2697,7 @@ function $f3213c0640246d58$export$ba17c5b7e6dda39f({
2673
2697
  }
2674
2698
  var $16f0ed5ea30d8d9c$var$_tmpl$ = '<path d="M19.811 20.174l-6.234-6.809a7.96 7.96 0 0 0 .923-1.179c.274-.424.502-.865.687-1.323a8.04 8.04 0 0 0 .42-1.436 7.88 7.88 0 0 0 .144-1.507c0-.526-.051-1.042-.154-1.548-.096-.506-.243-.995-.441-1.466s-.441-.919-.728-1.343a8.28 8.28 0 0 0-.984-1.21 7.86 7.86 0 0 0-1.2-.984A7.56 7.56 0 0 0 10.89.651C10.418.453 9.929.302 9.423.2S8.401.046 7.875.046 6.833.097 6.327.2 5.332.453 4.86.651a7.56 7.56 0 0 0-1.354.718c-.431.287-.831.615-1.2.984a8.28 8.28 0 0 0-.984 1.21 7.73 7.73 0 0 0-.728 1.343c-.198.472-.349.96-.451 1.466A8.31 8.31 0 0 0 0 7.921a8.31 8.31 0 0 0 .144 1.548c.103.506.253.995.451 1.466a8.08 8.08 0 0 0 .728 1.354 7.86 7.86 0 0 0 .984 1.2 7.54 7.54 0 0 0 1.2.995c.431.287.882.53 1.354.728.472.191.96.338 1.466.441a8.31 8.31 0 0 0 1.548.144c.451 0 .896-.038 1.333-.113a7.83 7.83 0 0 0 1.282-.328 7.55 7.55 0 0 0 1.2-.533 8.08 8.08 0 0 0 1.107-.749l6.245 6.809a.45.45 0 0 0 .174.123.55.55 0 0 0 .205.041.61.61 0 0 0 .195-.031c.061-.021.116-.055.164-.102.109-.096.164-.219.164-.369.007-.144-.038-.267-.133-.369zM1.046 7.921c0-.937.178-1.818.533-2.646.362-.834.851-1.559 1.466-2.174.622-.615 1.347-1.101 2.174-1.456.827-.362 1.712-.543 2.656-.543s1.829.181 2.656.543c.827.355 1.548.841 2.164 1.456.622.615 1.111 1.34 1.466 2.174a6.52 6.52 0 0 1 .543 2.646c0 .943-.181 1.829-.543 2.656a6.89 6.89 0 0 1-1.466 2.174c-.615.615-1.336 1.104-2.164 1.466-.827.356-1.712.533-2.656.533s-1.829-.178-2.656-.533c-.827-.362-1.552-.851-2.174-1.466-.615-.622-1.104-1.347-1.466-2.174-.355-.827-.533-1.712-.533-2.656z"></path>';
2675
2699
  function $16f0ed5ea30d8d9c$export$82eafebb825fc23f(props = {}) {
2676
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
2700
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
2677
2701
  xmlns: "http://www.w3.org/2000/svg",
2678
2702
  width: "20",
2679
2703
  height: "22",
@@ -2682,7 +2706,7 @@ function $16f0ed5ea30d8d9c$export$82eafebb825fc23f(props = {}) {
2682
2706
  }
2683
2707
  var $190927650b4840eb$var$_tmpl$ = '<path d="M56 26.455a13.71 13.71 0 0 0-9.578 3.967A13.71 13.71 0 0 0 42.455 40v176a13.71 13.71 0 0 0 3.967 9.578A13.71 13.71 0 0 0 56 229.545h144A13.71 13.71 0 0 0 213.545 216V88a2.456 2.456 0 0 1 0-.002c.001-1.452-.597-2.895-1.623-3.922l-55.998-55.998a5.61 5.61 0 0 0-3.922-1.623 2.456 2.456 0 0 1-.002 0zm0 11.09h88A2.456 2.456 0 0 1 146.455 40v48c0 2.903 2.642 5.545 5.545 5.545h48A2.456 2.456 0 0 1 202.455 96v120a2.456 2.456 0 0 1-2.455 2.455H56A2.456 2.456 0 0 1 53.545 216V40A2.456 2.456 0 0 1 56 37.545zm103.061 11.498a2.456 2.456 0 0 1 2.676.531l28.689 28.689a2.456 2.456 0 0 1-1.736 4.191H160A2.456 2.456 0 0 1 157.545 80V51.311a2.456 2.456 0 0 1 1.516-2.268zM96 130.455c-2.903 0-5.545 2.642-5.545 5.545s2.642 5.545 5.545 5.545h64c2.903 0 5.545-2.642 5.545-5.545s-2.642-5.545-5.545-5.545zm0 32c-2.903 0-5.545 2.642-5.545 5.545s2.642 5.545 5.545 5.545h64c2.903 0 5.545-2.642 5.545-5.545s-2.642-5.545-5.545-5.545z"></path>';
2684
2708
  function $190927650b4840eb$export$605674723bcc715c(props = {}) {
2685
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
2709
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
2686
2710
  xmlns: "http://www.w3.org/2000/svg",
2687
2711
  width: "32",
2688
2712
  height: "32",
@@ -2948,7 +2972,7 @@ function $6ef2e4ea23810f23$var$actual_navigation_working_on_fake_data({
2948
2972
  if (!$i7OB2$untrack(() => read_updating_blocked())) previous_value = sfv;
2949
2973
  });
2950
2974
  const owner = $i7OB2$getOwner();
2951
- const handler = $i7OB2$catchify1(({
2975
+ const handler = $i7OB2$catchify(({
2952
2976
  keyCode: keyCode
2953
2977
  }) => $i7OB2$untrack(() => {
2954
2978
  const up = keyCode === 38;
@@ -3012,7 +3036,7 @@ function $6ef2e4ea23810f23$var$actual_navigation_working_on_fake_data({
3012
3036
  const el = element_();
3013
3037
  if (!el) return;
3014
3038
  el.addEventListener("keyup", handler);
3015
- $i7OB2$onCleanup($i7OB2$catchify1(() => el.removeEventListener("keyup", handler)));
3039
+ $i7OB2$onCleanup($i7OB2$catchify(() => el.removeEventListener("keyup", handler)));
3016
3040
  });
3017
3041
  }
3018
3042
  function $1ae0eaca6ada9753$export$af0124069c150252({
@@ -3209,7 +3233,7 @@ let $f86ba724282f6690$export$44dad306455dddf;
3209
3233
 
3210
3234
  function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
3211
3235
  const [width, setWidth] = $i7OB2$createSignal();
3212
- const resizeObserver = new ResizeObserver($i7OB2$catchify1(records => {
3236
+ const resizeObserver = new ResizeObserver($i7OB2$catchify(records => {
3213
3237
  for (let j = 0; j < records.length; j++) {
3214
3238
  const width = records[j].borderBoxSize?.[0]?.inlineSize ?? what_to_watch.getBoundingClientRect().width;
3215
3239
  setWidth(width);
@@ -3219,7 +3243,7 @@ function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
3219
3243
  // It doesn't seem to work even when waiting for it to be in the DOM, also wait an animation frame
3220
3244
  const disconnect = (0, $i7OB2$observer).onexists(what_to_watch, ({
3221
3245
  element: element
3222
- }) => requestAnimationFrame($i7OB2$catchify1(() => {
3246
+ }) => requestAnimationFrame($i7OB2$catchify(() => {
3223
3247
  const current_size = what_to_watch.getBoundingClientRect().width;
3224
3248
  if (current_size)
3225
3249
  // If element has size, set signal to that. ResizeObserver only triggers when the content is visible in some cases, but it might already have a size. This reduces size filter expanding animation jank in chrome.
@@ -3234,7 +3258,7 @@ function $2449872a62a75a20$export$ebdc3711f7e02ccd(what_to_watch) {
3234
3258
  }
3235
3259
  var $081752ca508a876f$var$_tmpl$ = '<path fill-rule="evenodd" d="M9.563 3.438c-3.107 0-5.625 2.518-5.625 5.625s2.518 5.625 5.625 5.625 5.625-2.518 5.625-5.625-2.518-5.625-5.625-5.625zm-7.5 5.625a7.5 7.5 0 1 1 15 0c0 1.733-.588 3.329-1.575 4.599l3.176 3.176a.94.94 0 0 1 0 1.326.94.94 0 0 1-1.326 0l-3.176-3.176a7.47 7.47 0 0 1-4.599 1.575 7.5 7.5 0 0 1-7.5-7.5z" fill="#0f0f0f"></path>';
3236
3260
  function $081752ca508a876f$export$f7658c347b037c3f(props = {}) {
3237
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
3261
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
3238
3262
  xmlns: "http://www.w3.org/2000/svg",
3239
3263
  width: "21",
3240
3264
  height: "20",
@@ -3263,7 +3287,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
3263
3287
  let input_element;
3264
3288
  // This is the div where we recommend (and ourselves do) attach the event listener to that opens the search modal.
3265
3289
  let field_div;
3266
- $i7OB2$createEffect($i7OB2$catchify1(async () => {
3290
+ $i7OB2$createEffect($i7OB2$catchify(async () => {
3267
3291
  if (disabled_) return;
3268
3292
  // we aren't in DOM yet unfortunately, wouldn't even be with onMount
3269
3293
  await (0, $i7OB2$observer).wait_for_element(input_element);
@@ -3278,7 +3302,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
3278
3302
  const BackButton = () => $i7OB2$createComponent((0, $i7OB2$Show), {
3279
3303
  when: on_back_,
3280
3304
  get children() {
3281
- return $i7OB2$ssrElement("button", $i7OB2$mergeProps1({
3305
+ return $i7OB2$ssrElement("button", $i7OB2$mergeProps({
3282
3306
  "class": "back",
3283
3307
  type: "button",
3284
3308
  get ["aria-label"]() {
@@ -3292,7 +3316,7 @@ function $5285d2814d0fac0c$export$b94867ecbd698f21({
3292
3316
  }), () => isNewModal ? $i7OB2$escape($i7OB2$createComponent((0, $19976a74d273070d$export$3b621d86b1566b2), {})) : $i7OB2$escape($i7OB2$createComponent(BackIcon_, {})), true);
3293
3317
  }
3294
3318
  });
3295
- const ClearButton = () => $i7OB2$ssrElement("button", $i7OB2$mergeProps1({
3319
+ const ClearButton = () => $i7OB2$ssrElement("button", $i7OB2$mergeProps({
3296
3320
  type: "button",
3297
3321
  get ["class"]() {
3298
3322
  return `clear ${searchFieldEmpty() ? "empty" : ""}`;
@@ -3340,7 +3364,7 @@ function $aea1edf92433e81e$export$fe334901e8bebd57() {
3340
3364
  offset: 0
3341
3365
  }, 1);
3342
3366
  animation.pause();
3343
- const fn = $i7OB2$catchify1(animation.play.bind(animation));
3367
+ const fn = $i7OB2$catchify(animation.play.bind(animation));
3344
3368
  cleanup_fns.push(fn);
3345
3369
  $i7OB2$onCleanup(fn);
3346
3370
  } catch (e) {
@@ -3351,7 +3375,7 @@ function $aea1edf92433e81e$export$fe334901e8bebd57() {
3351
3375
  const style = element.style;
3352
3376
  const original_value = style.overflow;
3353
3377
  style.overflow = "hidden";
3354
- const fn = $i7OB2$catchify1(() => style.overflow = original_value);
3378
+ const fn = $i7OB2$catchify(() => style.overflow = original_value);
3355
3379
  cleanup_fns.push(fn);
3356
3380
  $i7OB2$onCleanup(fn);
3357
3381
  }
@@ -3374,8 +3398,8 @@ function $512b994d501f412b$export$93d9bfd0c9c1a5b8(close_modal, search_query_url
3374
3398
  let set_initial_values = false;
3375
3399
  let old_pathname;
3376
3400
  let old_param_value;
3377
- $i7OB2$onCleanup($i7OB2$catchify1(exit_iterable));
3378
- $i7OB2$catchify1(async () => {
3401
+ $i7OB2$onCleanup($i7OB2$catchify(exit_iterable));
3402
+ $i7OB2$catchify(async () => {
3379
3403
  for await (const href of exitable_iterable) {
3380
3404
  const u_o = new URL(href);
3381
3405
  const new_pathname = u_o.pathname;
@@ -3446,7 +3470,7 @@ function $42912431795f188e$var$RawClassicSearchModal({
3446
3470
  } = alignmentSignals_ || {};
3447
3471
  const [bodyAlignmentStyle] = bodyAlignmentSignal;
3448
3472
  const [get_modal_search_results, set_modal_search_results_] = $i7OB2$createSignal();
3449
- const close_on_escape_handler = $i7OB2$catchify1(({
3473
+ const close_on_escape_handler = $i7OB2$catchify(({
3450
3474
  key: key
3451
3475
  }) => {
3452
3476
  if (key === "Escape") close_modal_();
@@ -3471,7 +3495,7 @@ function $42912431795f188e$var$RawClassicSearchModal({
3471
3495
  if (disable_scrolling_) $aea1edf92433e81e$export$fe334901e8bebd57();
3472
3496
  $512b994d501f412b$export$93d9bfd0c9c1a5b8(close_modal_, search_query_url_param_name_);
3473
3497
  window.addEventListener("keydown", close_on_escape_handler);
3474
- $i7OB2$onCleanup($i7OB2$catchify1(() => window.removeEventListener("keydown", close_on_escape_handler)));
3498
+ $i7OB2$onCleanup($i7OB2$catchify(() => window.removeEventListener("keydown", close_on_escape_handler)));
3475
3499
  if (closing_animation_) register_closing_animation_(closing_animation_);
3476
3500
  $c64d28ca12452b21$export$3340fdd8259bd4fd({
3477
3501
  get_search_field_value_: get_search_field_value_,
@@ -3842,7 +3866,7 @@ function $4ce5b8892775b62d$export$67152d26d4f56ee8({
3842
3866
  selected_index_: [read_selected_index_, write_selected_index_]
3843
3867
  }) {
3844
3868
  const href = $i7OB2$createMemo(() => listing_()?.page_url); // <- could be made reactive getter created in displayTransformers, read it in memo here since it might create computations (for example in the preview-brower), and there's no owner in the onClick handler
3845
- const LinkToListing = props => $i7OB2$ssrElement("a", $i7OB2$mergeProps1(props, {
3869
+ const LinkToListing = props => $i7OB2$ssrElement("a", $i7OB2$mergeProps(props, {
3846
3870
  get href() {
3847
3871
  return href();
3848
3872
  }
@@ -4132,7 +4156,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
4132
4156
  $i7OB2$createComputed($i7OB2$on(search_field_value_[0], () => !suggestions_updating_blocked() && set_selected_index(undefined), {
4133
4157
  defer: true
4134
4158
  })); // reset autocomplete position if query changes
4135
- return [$i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps1(sharedSuggestionProps, {
4159
+ return [$i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
4136
4160
  get title_() {
4137
4161
  return i18n_.popular_;
4138
4162
  },
@@ -4142,7 +4166,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
4142
4166
  return itemIndexes_.suggestionsIndex_;
4143
4167
  },
4144
4168
  showPlaceholders_: () => showPlaceholders() || noResults_() && !noResultsPopularSuggestions.latest
4145
- })), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps1(sharedSuggestionProps, {
4169
+ })), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
4146
4170
  get title_() {
4147
4171
  return i18n_.previous_;
4148
4172
  },
@@ -4153,7 +4177,7 @@ function $2f3171b02c8f4a5d$export$af1fb307bbba2417({
4153
4177
  },
4154
4178
  extraTitleRowElements_: () => $i7OB2$ssr($2f3171b02c8f4a5d$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(i18n_.clear_all_from_filter_crumbs_())),
4155
4179
  showPlaceholders_: () => false
4156
- })), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps1(sharedSuggestionProps, {
4180
+ })), $i7OB2$createComponent((0, $903297121898e5ff$export$d4994a86c6235f72), $i7OB2$mergeProps(sharedSuggestionProps, {
4157
4181
  get title_() {
4158
4182
  return i18n_.content_;
4159
4183
  },
@@ -4291,7 +4315,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
4291
4315
  const random_classname_body = $i7OB2$make_random_classname();
4292
4316
  const backdropRandomClassname = $i7OB2$make_random_classname();
4293
4317
  const [get_modal_search_results_, set_modal_search_results_] = $i7OB2$createSignal();
4294
- const close_on_escape_handler = $i7OB2$catchify1(evt => {
4318
+ const close_on_escape_handler = $i7OB2$catchify(evt => {
4295
4319
  if (evt.key === "Escape") {
4296
4320
  evt.preventDefault(); // Prevent the browser from closing/cancelling the modal so our animations have time to run
4297
4321
  close_modal_();
@@ -4387,7 +4411,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
4387
4411
  $i7OB2$createEffect($i7OB2$on(get_search_field_value_, () => {
4388
4412
  setShowStaleListingSuggestions(true);
4389
4413
  clearTimeout(listingSuggestionsDebounceTimeout);
4390
- listingSuggestionsDebounceTimeout = setTimeout($i7OB2$catchify1(() => setShowStaleListingSuggestions(false)), 350);
4414
+ listingSuggestionsDebounceTimeout = setTimeout($i7OB2$catchify(() => setShowStaleListingSuggestions(false)), 350);
4391
4415
  }, {
4392
4416
  defer: true
4393
4417
  }));
@@ -4522,7 +4546,7 @@ function $500a16dd18ee5a71$var$RawSearchModalV2({
4522
4546
  }
4523
4547
  });
4524
4548
  if (setSearchFieldOuterWidth_) {
4525
- const resizeObserver = new ResizeObserver($i7OB2$catchify1(records => setSearchFieldOuterWidth_(records.at(-1).contentRect.width)));
4549
+ const resizeObserver = new ResizeObserver($i7OB2$catchify(records => setSearchFieldOuterWidth_(records.at(-1).contentRect.width)));
4526
4550
  resizeObserver.observe(search_field);
4527
4551
  $i7OB2$onCleanup(() => resizeObserver.disconnect());
4528
4552
  }
@@ -4556,7 +4580,7 @@ function $024fbc0a2d796fad$export$b2539bed5023c21c(props) {
4556
4580
  return $i7OB2$createComponent($024fbc0a2d796fad$var$TabsContext.Provider, {
4557
4581
  value: new (0, $i7OB2$ListenableSet)(),
4558
4582
  get children() {
4559
- return $i7OB2$createComponent($024fbc0a2d796fad$var$ActualTabs, $i7OB2$mergeProps1(props, {
4583
+ return $i7OB2$createComponent($024fbc0a2d796fad$var$ActualTabs, $i7OB2$mergeProps(props, {
4560
4584
  get children() {
4561
4585
  return props.children;
4562
4586
  }
@@ -4572,7 +4596,7 @@ function $024fbc0a2d796fad$var$ActualTabs(props) {
4572
4596
  });
4573
4597
  const isSelected = $i7OB2$createSelector(currentlySelected);
4574
4598
  const owner = $i7OB2$getOwner();
4575
- const updateTabsSignal = $i7OB2$catchify(() => $i7OB2$runWithOwner(owner, () => setTabsReactive([...ourTabsSet])));
4599
+ const updateTabsSignal = $i7OB2$catchify1(() => $i7OB2$runWithOwner(owner, () => setTabsReactive([...ourTabsSet])));
4576
4600
  const ourTabsSet = $024fbc0a2d796fad$var$useTabs();
4577
4601
  const location = $i7OB2$use_href_accessor1();
4578
4602
  const linkWithChangedHash = hash => {
@@ -4586,7 +4610,7 @@ function $024fbc0a2d796fad$var$ActualTabs(props) {
4586
4610
  },
4587
4611
  children: item => {
4588
4612
  const weSelected = $i7OB2$createMemo(() => isSelected(item().id));
4589
- return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps1({
4613
+ return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps({
4590
4614
  get component() {
4591
4615
  return props.AnchorComponent;
4592
4616
  },
@@ -4665,7 +4689,7 @@ function $024fbc0a2d796fad$export$3e41faf802a29e71(props) {
4665
4689
  if (!currentTabs) throw new Error("Tab must be a child of Tabs");
4666
4690
  const id = $i7OB2$createUniqueId();
4667
4691
  const ourSet = currentTabs;
4668
- const extendedProps = $i7OB2$mergeProps({
4692
+ const extendedProps = $i7OB2$mergeProps1({
4669
4693
  id: id
4670
4694
  }, props);
4671
4695
  ourSet.add(extendedProps);
@@ -4675,7 +4699,7 @@ function $024fbc0a2d796fad$export$3e41faf802a29e71(props) {
4675
4699
  async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_opts, parent) {
4676
4700
  const body = parent || document.body || (await (0, $i7OB2$observer).wait_for_element("body"));
4677
4701
  let dispose_and_remove;
4678
- const open_modal_ = $i7OB2$catchify1(async (extra_options_for_modal = {}, on_dispose) => {
4702
+ const open_modal_ = $i7OB2$catchify(async (extra_options_for_modal = {}, on_dispose) => {
4679
4703
  // Below await is very intentional,
4680
4704
  // The reason is that effects don't run in <Suspense> boundaries before they've resolved and this carries even through roots created, but if a modal is opened from a suspense boundary we still want the effects in it to run
4681
4705
  // This is because the suspense is for the content in the page and not the modal (the modal goes above it)
@@ -4705,7 +4729,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
4705
4729
  // Animation broke, close it this time
4706
4730
  actually_close();else if (!animation_started && closing_animation) {
4707
4731
  animation_started = +new Date();
4708
- $i7OB2$catchify1(closing_animation)()?.then($i7OB2$catchify1(actually_close));
4732
+ $i7OB2$catchify(closing_animation)()?.then($i7OB2$catchify(actually_close));
4709
4733
  } else actually_close();
4710
4734
  };
4711
4735
  return search_modal({
@@ -4718,7 +4742,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
4718
4742
  });
4719
4743
  body.append(...modal_els);
4720
4744
  });
4721
- const close_modal_ = $i7OB2$catchify1(() => {
4745
+ const close_modal_ = $i7OB2$catchify(() => {
4722
4746
  if (dispose_and_remove) {
4723
4747
  // modal is open
4724
4748
  const dispose_fn = dispose_and_remove;
@@ -4735,7 +4759,7 @@ async function $194bd6b8e4c59830$export$79b1565500412d9b(search_modal, modal_fn_
4735
4759
  function $ca6f574bd8772184$export$e183a13865960371(params_to_default_value, router_) {
4736
4760
  const signals = {};
4737
4761
  const entries = Object.entries(params_to_default_value);
4738
- const event_handler = $i7OB2$catchify1((what_happened, args) => {
4762
+ const event_handler = $i7OB2$catchify((what_happened, args) => {
4739
4763
  // Intentionally always update our signals to the history state to allow external control of SDK state for doing things like https://linear.app/depictai/issue/X-1432/is-this-possible-with-the-depict-sdk
4740
4764
  if (what_happened !== "popstate") return;
4741
4765
  // Had to undo the comment above,but leaving the history. Doing this because discovering why it doesn't work is a deja-vu and I don't want to have to discover it again.
@@ -4766,8 +4790,8 @@ function $ca6f574bd8772184$export$e183a13865960371(params_to_default_value, rout
4766
4790
  });
4767
4791
  // history_dot_state_to_state needs to update after its signals after url_state does BUT in the same task (might even have to be in the same tick in the microtask queue). If we'd use window.addEventListener("popstate") it would be guaranteed to be too late since each event listener has its own task
4768
4792
  (0, $i7OB2$instant_exec_on_suspect_history_change).add(event_handler);
4769
- $i7OB2$onCleanup($i7OB2$catchify1(() => (0, $i7OB2$instant_exec_on_suspect_history_change).delete(event_handler)));
4770
- $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
4771
4795
  return signals;
4772
4796
  }
4773
4797
  function $ca6f574bd8772184$var$history_state_change(signals, entries, state) {
@@ -4901,7 +4925,7 @@ function $45d4ed34a22ab90c$export$6b35356958ae5587(props) {
4901
4925
  // If someone clicks on a product card in the shop the look modal, close the modal the next time the href changes
4902
4926
  for (const item of resolved()) {
4903
4927
  if (!(item instanceof Element)) return;
4904
- item.addEventListener("click", $i7OB2$catchify1(() =>
4928
+ item.addEventListener("click", $i7OB2$catchify(() =>
4905
4929
  // run with modal owner so we don't do stuff after the modal closes
4906
4930
  // can't have the owner of the product card as that gets disposed if the productId changes which might be too early (before location.href has changed)
4907
4931
  $i7OB2$runWithOwner(props.modalOwner_, () => $i7OB2$createEffect($i7OB2$on(hrefWithoutHash, props.actually_close_modal_, {
@@ -5082,7 +5106,7 @@ function $8560c919ff763930$var$ActualShopTheLookButton(props) {
5082
5106
  const button = $i7OB2$ssrElement("button", localProps.buttonAttributes, () => $i7OB2$escape(localProps?.buttonAttributes?.children) || "Shop the look", true);
5083
5107
  $i7OB2$createEffect(() => button.style.display = displayStyleValue()); // Set our attributes like this, so we allow total control over the button from the outside via buttonAttributes
5084
5108
  $i7OB2$createEffect(() => !hasAnythingToShow() && closeModal()); // close modal if we ever get into the state of having it open and not having anything to show
5085
- $8560c919ff763930$var$modalProps = $i7OB2$mergeProps(partForModal, {
5109
+ $8560c919ff763930$var$modalProps = $i7OB2$mergeProps1(partForModal, {
5086
5110
  products_to_shop_: products_to_shop_
5087
5111
  });
5088
5112
  button.addEventListener("click", openModal);
@@ -5110,7 +5134,7 @@ function $8560c919ff763930$var$actualSetupModal() {
5110
5134
  (0, $90980bd87c9960f9$export$3064e1e8c6513da3).add(history_key);
5111
5135
  const actually_close_modal_ = () => set_history_value(false);
5112
5136
  const owner = $i7OB2$getOwner();
5113
- $i7OB2$catchify1(async () => {
5137
+ $i7OB2$catchify(async () => {
5114
5138
  const {
5115
5139
  open_modal_: open_modal_,
5116
5140
  close_modal_: close_modal_
@@ -5183,15 +5207,15 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
5183
5207
  $i7OB2$insert(details_, [summary_, $i7OB2$createComponent(ExpandingContainer, {
5184
5208
  children: children
5185
5209
  })], null);
5186
- if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(details_).then($i7OB2$catchify1(() => set_is_in_dom(true)));
5187
- $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 () => {
5188
5212
  const is_open = is_open_memo();
5189
5213
  if (!is_in_dom())
5190
5214
  // wait with setting state until we're in DOM, animation won't work otherwise
5191
5215
  return;
5192
5216
  if (dont_animate_if_instant_open_ && fresh_component && !timeout_started) {
5193
5217
  timeout_started = true;
5194
- setTimeout($i7OB2$catchify1(() => fresh_component = false));
5218
+ setTimeout($i7OB2$catchify(() => fresh_component = false));
5195
5219
  }
5196
5220
  if (is_open) {
5197
5221
  details_.open = true; // open up the toggle so the animation can happen
@@ -5199,10 +5223,10 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
5199
5223
  await expand(0, do_duration);
5200
5224
  } else {
5201
5225
  const animation = await collapse();
5202
- animation?.addEventListener("finish", $i7OB2$catchify1(() => details_.open = false));
5226
+ animation?.addEventListener("finish", $i7OB2$catchify(() => details_.open = false));
5203
5227
  }
5204
5228
  }));
5205
- details_.addEventListener("toggle", $i7OB2$catchify1(() => {
5229
+ details_.addEventListener("toggle", $i7OB2$catchify(() => {
5206
5230
  const {
5207
5231
  open: open
5208
5232
  } = details_;
@@ -5212,11 +5236,11 @@ function $6bb0a0c563dff4bb$export$6c6d7a51fa9aa15d(props) {
5212
5236
  }) // in case someone somehow toggles it without us intercepting it at least follow suit
5213
5237
  );
5214
5238
 
5215
- summary_.addEventListener("click", $i7OB2$catchify1(ev => {
5239
+ summary_.addEventListener("click", $i7OB2$catchify(ev => {
5216
5240
  ev.preventDefault();
5217
5241
  toggle();
5218
5242
  }));
5219
- summary_.addEventListener("keydown", $i7OB2$catchify1(ev => {
5243
+ summary_.addEventListener("keydown", $i7OB2$catchify(ev => {
5220
5244
  const {
5221
5245
  key: key
5222
5246
  } = ev;
@@ -5439,9 +5463,9 @@ function $1adfe60f3a14a1d7$export$fecbb157621501bd({
5439
5463
  });
5440
5464
  const [is_in_dom, set_is_in_dom] = $i7OB2$createSignal(document.documentElement.contains(outmost_element));
5441
5465
  const hidden = $i7OB2$createMemo(() => get_search_filters_open_() || get_search_sorting_open_());
5442
- if (!$i7OB2$untrack(is_in_dom)) (0, $i7OB2$observer).wait_for_element(outmost_element).then($i7OB2$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)));
5443
5467
  outmost_element.classList.add("selected-filters");
5444
- $i7OB2$createEffect($i7OB2$catchify1(async () => {
5468
+ $i7OB2$createEffect($i7OB2$catchify(async () => {
5445
5469
  if (!is_in_dom())
5446
5470
  // wait with setting state until we're in DOM, animation won't work otherwise
5447
5471
  return;
@@ -5474,7 +5498,7 @@ const $49b79728e7d9e2a1$export$48513f6b9f8ce62d = props => {
5474
5498
  };
5475
5499
  var $f8a56ba74eedd0c6$var$_tmpl$ = '<path d="M10.173 5.548H5.5V.875c0-.075-.027-.14-.081-.193S5.301.601 5.226.601s-.14.027-.193.081-.081.118-.081.193v4.673H.274c-.075 0-.14.027-.193.081A.27.27 0 0 0 0 5.827c0 .075.027.14.081.193s.118.081.193.081h4.678v4.673c0 .075.027.14.081.193s.118.081.193.081.14-.027.193-.081.081-.118.081-.193V6.101h4.673a.27.27 0 0 0 .199-.081c.054-.054.08-.118.08-.193a.27.27 0 0 0-.279-.279z" fill="#000"></path>';
5476
5500
  function $f8a56ba74eedd0c6$export$f21ab0717a89c77f(props) {
5477
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1(props, {
5501
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps(props, {
5478
5502
  xmlns: "http://www.w3.org/2000/svg",
5479
5503
  width: "11",
5480
5504
  height: "12"
@@ -5588,7 +5612,7 @@ function $a4601e6bea3ed1e6$export$dd948f91abc3a1c4({
5588
5612
  }) : []);
5589
5613
  });
5590
5614
  $i7OB2$onCleanup(() => set_view_more_button_below_group_());
5591
- $i7OB2$createEffect($i7OB2$catchify1(async () => {
5615
+ $i7OB2$createEffect($i7OB2$catchify(async () => {
5592
5616
  if (!togglable_rest()) {
5593
5617
  await collapse();
5594
5618
  return;
@@ -5700,7 +5724,7 @@ function $a6b08770e164eced$export$e0d834a0ad870cda({
5700
5724
  });
5701
5725
  $i7OB2$createComputed(() => {
5702
5726
  clearTimeout(debounce_timeout);
5703
- debounce_timeout = setTimeout($i7OB2$catchify1(range => $i7OB2$untrack(() => {
5727
+ debounce_timeout = setTimeout($i7OB2$catchify(range => $i7OB2$untrack(() => {
5704
5728
  const default_data = defaultRange();
5705
5729
  const filter_object = {
5706
5730
  op: filter_().op,
@@ -6257,7 +6281,7 @@ function $1c8cac76cb67e9af$export$a32086fa6616eafd({
6257
6281
  }) : []);
6258
6282
  });
6259
6283
  $i7OB2$onCleanup(() => set_view_more_button_below_group());
6260
- $i7OB2$createEffect($i7OB2$catchify1(async () => {
6284
+ $i7OB2$createEffect($i7OB2$catchify(async () => {
6261
6285
  if (!some_top_level_are_hidden()) {
6262
6286
  await collapse();
6263
6287
  return;
@@ -6317,7 +6341,7 @@ function $1c8cac76cb67e9af$var$render_stuff(data, existing_filter, i18n_, filter
6317
6341
  return value()?.is_checked_?.[0]?.() ?? false;
6318
6342
  },
6319
6343
  input_ref_: input => {
6320
- input.addEventListener("change", $i7OB2$catchify1(() => $i7OB2$untrack(() => {
6344
+ input.addEventListener("change", $i7OB2$catchify(() => $i7OB2$untrack(() => {
6321
6345
  const {
6322
6346
  checked: checked
6323
6347
  } = input;
@@ -6392,7 +6416,7 @@ function $1c8cac76cb67e9af$var$batching_filter_state_syncer(props) {
6392
6416
  existing_filter_: existing_filter_
6393
6417
  } = props;
6394
6418
  let sync_queued = false;
6395
- const sync_fn = $i7OB2$catchify1(async () => {
6419
+ const sync_fn = $i7OB2$catchify(async () => {
6396
6420
  sync_queued = false;
6397
6421
  // if we change, update filter state - next microtask, so that "reactions" to the change can process before we send it off to the API
6398
6422
  const set_filter = existing_filter_();
@@ -6449,13 +6473,13 @@ function $1c8cac76cb67e9af$var$create_updating_signal({
6449
6473
  $i7OB2$createComputed($i7OB2$on(read_checked, trigger_sync_, {
6450
6474
  defer: true
6451
6475
  }));
6452
- $i7OB2$createComputed($i7OB2$on(read_checked, $i7OB2$catchify1(new_value => {
6476
+ $i7OB2$createComputed($i7OB2$on(read_checked, $i7OB2$catchify(new_value => {
6453
6477
  if (updating_blocked) return;
6454
6478
  for (const child of child_objects) child.is_checked_[1](new_value);
6455
6479
  }), {
6456
6480
  defer: true
6457
6481
  }));
6458
- $i7OB2$createEffect($i7OB2$on(get_child_object_values, $i7OB2$catchify1(() => {
6482
+ $i7OB2$createEffect($i7OB2$on(get_child_object_values, $i7OB2$catchify(() => {
6459
6483
  const all_kids_checked = get_child_object_values.every(accessor => accessor());
6460
6484
  if (all_kids_checked === read_checked()) return;
6461
6485
  updating_blocked = true;
@@ -6618,7 +6642,7 @@ const $93716a9ad0dea854$export$414f6a19d38e655c = ({
6618
6642
  const MakeButton = attributes => {
6619
6643
  const label = $i7OB2$createMemo(() => value().name_ || value().value_ + "");
6620
6644
  const count_zero = $i7OB2$createMemo(() => value().count_ === 0);
6621
- return $i7OB2$ssrElement("button", $i7OB2$mergeProps1(attributes, {
6645
+ return $i7OB2$ssrElement("button", $i7OB2$mergeProps(attributes, {
6622
6646
  get disabled() {
6623
6647
  return count_zero() && !is_selected();
6624
6648
  },
@@ -6880,7 +6904,7 @@ function $e731d52d97444b7c$export$82ed4b28ecb67608({
6880
6904
  }) : []);
6881
6905
  });
6882
6906
  $i7OB2$onCleanup(() => set_view_more_button_below_group_());
6883
- $i7OB2$createEffect($i7OB2$catchify1(async () => {
6907
+ $i7OB2$createEffect($i7OB2$catchify(async () => {
6884
6908
  if (!togglable_rest()) {
6885
6909
  await collapse();
6886
6910
  set_having_expanding_in_dom(false); // Once animation has finished, remove expanding from DOM
@@ -6920,7 +6944,7 @@ var $12497d09ef87296e$export$2e2bcd8739ae039 = {
6920
6944
  };
6921
6945
  var $9bc34983fc5f7bdb$var$_tmpl$ = '<path d="M4.617 12.738a.48.48 0 0 1-.164-.027c-.051-.023-.094-.055-.129-.098L.125 8.414A.39.39 0 0 1 0 8.117c0-.113.039-.211.125-.293s.18-.125.293-.125.215.043.297.125l3.902 3.902L16.086.262c.082-.082.18-.125.297-.125s.211.043.293.125.125.184.125.301-.043.215-.125.297L4.914 12.613c-.039.043-.086.078-.141.098s-.102.027-.156.027zm0 0"></path>';
6922
6946
  function $9bc34983fc5f7bdb$export$f2ca6fc699ca1fb4(props = {}) {
6923
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
6947
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
6924
6948
  xmlns: "http://www.w3.org/2000/svg",
6925
6949
  width: "16.8",
6926
6950
  height: "14"
@@ -7563,7 +7587,7 @@ const $a6e23a834336fc19$export$824dde41348efed1 = /*@__PURE__*/(() => {
7563
7587
 
7564
7588
  const observe_to_signal = (element, setter) => {
7565
7589
  const computed_style = getComputedStyle(element);
7566
- const resize_observer = new ResizeObserver($i7OB2$catchify1(() => {
7590
+ const resize_observer = new ResizeObserver($i7OB2$catchify(() => {
7567
7591
  setter(element.getBoundingClientRect().width + parseFloat(computed_style.marginLeft) + parseFloat(computed_style.marginRight) + parseFloat(computed_style.borderRightWidth) + parseFloat(computed_style.borderLeftWidth));
7568
7592
  }));
7569
7593
  resize_observer.observe(element);
@@ -7801,7 +7825,7 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
7801
7825
  return this.#cache_objs[endpoint] ||= {
7802
7826
  in_progress_: {},
7803
7827
  cache_: {},
7804
- finalization_registry_: this.#supports_finalization_registry ? new FinalizationRegistry($i7OB2$catchify1(key => {
7828
+ finalization_registry_: this.#supports_finalization_registry ? new FinalizationRegistry($i7OB2$catchify(key => {
7805
7829
  const our_cache = this.#cache_objs[endpoint].cache_;
7806
7830
  $i7OB2$dlog1("[Search API]: removing", key, "from", our_cache);
7807
7831
  delete our_cache[key];
@@ -7851,7 +7875,7 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
7851
7875
  // Filter out our transformed ancestors
7852
7876
  const transformedAncestors = Object.fromEntries(transformerResult.filter(item => item.is_suggestion === false).map(item => [item.listing_id, item]));
7853
7877
  // Add the now transformed ancestors into the ancestors of the listing suggestions
7854
- const transformedSuggestions = transformerResult.filter(item => item.is_suggestion !== false).map(item => $i7OB2$mergeProps(item, {
7878
+ const transformedSuggestions = transformerResult.filter(item => item.is_suggestion !== false).map(item => $i7OB2$mergeProps1(item, {
7855
7879
  // Use mergeProps instead of spread since page_url and other properties could be a getter that solid components should call
7856
7880
  ancestors: item.ancestors.map(ancestor => {
7857
7881
  const newAncestor = transformedAncestors[ancestor.listing_id];
@@ -7949,11 +7973,11 @@ class $7fa23e2a0079eca4$export$e015ed2f2950f2e3 {
7949
7973
  result = $e5014ccd0b76d9f4$export$967e966fca9515e(result);
7950
7974
  cache_obj.cache_[body] = new WeakRef(result);
7951
7975
  resolve_in_progress(result);
7952
- setTimeout($i7OB2$catchify1(() => {
7976
+ setTimeout($i7OB2$catchify(() => {
7953
7977
  if (this.#supports_finalization_registry) cache_obj.finalization_registry_.register(result, body); // delete key from cache when value (WeakRefs) are collected
7954
7978
  else
7955
7979
  // delete things from cache after 5 minutes, so it doesn't get too heavy
7956
- setTimeout($i7OB2$catchify1(() => delete cache_obj.cache_[body]), 300000);
7980
+ setTimeout($i7OB2$catchify(() => delete cache_obj.cache_[body]), 300000);
7957
7981
  }), 60000 // cache values for at least 60 seconds
7958
7982
  );
7959
7983
 
@@ -8084,7 +8108,7 @@ function $ccd5db07a3a069c5$export$477caf01aecaeb2a(options) {
8084
8108
  const [get_selected_filters_, set_selected_filters] = selected_filters_;
8085
8109
  const [get_has_sideways_filter_clearing_flag_, set_has_sideways_filter_clearing_flag] = sideways_filter_clearing_flag_;
8086
8110
  const [get_current_href, set_current_href] = $i7OB2$createSignal(globalThis?.location?.href ?? "https://example.com");
8087
- const history_change_handler = $i7OB2$catchify1(() => set_current_href(location.href));
8111
+ const history_change_handler = $i7OB2$catchify(() => set_current_href(location.href));
8088
8112
  const owner = $i7OB2$getOwner() || $i7OB2$createRoot(() => $i7OB2$getOwner());
8089
8113
  const {
8090
8114
  sorting_query_param_: sorting_query_param_,
@@ -8385,7 +8409,7 @@ function $172e1b898d457050$export$7de92c4c2205ebf3({
8385
8409
  return (0, $7747fe1a8c5652e3$export$6c9030e511152266) + get_showing_recommendation_rows() * Math.max(...possible_num_columns);
8386
8410
  });
8387
8411
  // Don't tear down elements every time one updates the page - don't put them within <Show>
8388
- const elements = $i7OB2$ssr($172e1b898d457050$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(i18n_.search_recs_title_()), $i7OB2$escape($a458486f22b22f63$export$a2cc176055f8f08()), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$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({
8389
8413
  rows: rows_object,
8390
8414
  layout: "grid",
8391
8415
  element_attributes: {
@@ -8453,13 +8477,13 @@ function $bf52d9f9eebd1938$export$5196e4c01fa56fcb({
8453
8477
  }) {
8454
8478
  let close_toast_;
8455
8479
  const stay_open_promise = new Promise(r => close_toast_ = r);
8456
- $i7OB2$catchify1(async () => {
8480
+ $i7OB2$catchify(async () => {
8457
8481
  const closing_animation_duration = 300; // ms
8458
8482
  const element = $i7OB2$ssrElement("div", more_attributes, () => $i7OB2$escape(children), true);
8459
8483
  const [, set_is_showing_toast] = $bf52d9f9eebd1938$export$22970a0140fc759c;
8460
8484
  // if this is a memory leak the garbage collector is stupid - does someone know?
8461
- for (const ev of ["pointerover", "focusin"]) element.addEventListener(ev, $i7OB2$catchify1(() => closing_animation.pause()));
8462
- 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()));
8463
8487
  const body = await (0, $i7OB2$observer).wait_for_element("body");
8464
8488
  const x_translate = "translateX(-50%) ";
8465
8489
  let remove_keyboard_listener;
@@ -8484,7 +8508,7 @@ function $bf52d9f9eebd1938$export$5196e4c01fa56fcb({
8484
8508
  // let other toasts close us if they open while we're still here
8485
8509
  $bf52d9f9eebd1938$var$closing_functions.add(close_toast_);
8486
8510
  set_is_showing_toast(true);
8487
- const handler = $i7OB2$catchify1(({
8511
+ const handler = $i7OB2$catchify(({
8488
8512
  key: key
8489
8513
  }) => {
8490
8514
  if (key === "Escape")
@@ -8617,7 +8641,7 @@ function $48d7e4a9707315b6$export$e026af0c7b64ea5f({
8617
8641
  }, {
8618
8642
  defer: true
8619
8643
  }));
8620
- $i7OB2$createComputed($i7OB2$on(get_search_query_, $i7OB2$catchify1(() => {
8644
+ $i7OB2$createComputed($i7OB2$on(get_search_query_, $i7OB2$catchify(() => {
8621
8645
  // when a query was submitted, clear filters if clear was pressed before
8622
8646
  const clear_value = $i7OB2$untrack(get_clear_filters_next_submit);
8623
8647
  if (clear_value) {
@@ -8644,11 +8668,11 @@ function $21f51c14cb3f586f$export$84bba84a7b837187(read_search_query) {
8644
8668
  const key = "depict_searches";
8645
8669
  const previous_searches = $i7OB2$createSignal(JSON.parse(ls[key] || "[]"));
8646
8670
  const [read_previous_searches, write_previous_searches] = previous_searches;
8647
- $i7OB2$createEffect($i7OB2$catchify1(() => {
8671
+ $i7OB2$createEffect($i7OB2$catchify(() => {
8648
8672
  const json_encoded = JSON.stringify(read_previous_searches());
8649
8673
  if (ls[key] !== json_encoded) ls[key] = json_encoded;
8650
8674
  }));
8651
- $i7OB2$createComputed($i7OB2$catchify1(() => {
8675
+ $i7OB2$createComputed($i7OB2$catchify(() => {
8652
8676
  const searches = $i7OB2$untrack(read_previous_searches);
8653
8677
  const current_query = read_search_query();
8654
8678
  if (!current_query)
@@ -8691,7 +8715,7 @@ async function $bfd908d13d90934c$export$e16630ecb9644a1c({
8691
8715
  after_submit_?.();
8692
8716
  }
8693
8717
  function $8f9120a1ca151e6a$export$205efb947c7ffd78(handler, passive = true, override_element) {
8694
- const catchified_handler = $i7OB2$catchify1(handler);
8718
+ const catchified_handler = $i7OB2$catchify(handler);
8695
8719
  const owner = $i7OB2$getOwner();
8696
8720
  // Some customers (e.g. equestrian) have `height: 100%` and/or `overflow-x: hidden` on the body, which means that scroll events won't get dispatched on `window`. The pages who get it on <body> won't get it on `window` and vice-versa, so there shouldn't be a worry about duplicate calling of the handler.
8697
8721
  // Use observer in case that this gets called before body exists
@@ -8733,7 +8757,7 @@ function $d68658730065de95$export$181cceed5c91919e(callback, alsoRaF, passiveLis
8733
8757
  $i7OB2$createEffect(() => {
8734
8758
  if (alsoRaF?.()) {
8735
8759
  let disposed = false;
8736
- const fn = $i7OB2$catchify1(() => {
8760
+ const fn = $i7OB2$catchify(() => {
8737
8761
  if (disposed) return;
8738
8762
  probablyCallCallback();
8739
8763
  requestAnimationFrame(fn);
@@ -8746,10 +8770,10 @@ function $d68658730065de95$export$181cceed5c91919e(callback, alsoRaF, passiveLis
8746
8770
  // "resize" doesn't fire sometimes when it should, also it doesn't when showing/hiding scrollbars which disabling scrolling does
8747
8771
  // this works
8748
8772
  // keeping resize just in case
8749
- const resize_resize_observer = new ResizeObserver($i7OB2$catchify1(probablyCallCallback));
8773
+ const resize_resize_observer = new ResizeObserver($i7OB2$catchify(probablyCallCallback));
8750
8774
  resize_resize_observer.observe(document.documentElement);
8751
8775
  (0, $i7OB2$observer).wait_for_element("body").then(resize_resize_observer.observe.bind(resize_resize_observer));
8752
- $i7OB2$onCleanup($i7OB2$catchify1(() => resize_resize_observer.disconnect()));
8776
+ $i7OB2$onCleanup($i7OB2$catchify(() => resize_resize_observer.disconnect()));
8753
8777
  return probablyCallCallback;
8754
8778
  }
8755
8779
  const $b6d5529b253681aa$export$3f238c96c45e6cc6 = 1;
@@ -8780,7 +8804,7 @@ function $b6d5529b253681aa$export$b3ad617e9036868({
8780
8804
  }, pollAlignment);
8781
8805
  let ro;
8782
8806
  if (alignment & $b6d5529b253681aa$export$902f8b4a7dae5d78 || alignment & $b6d5529b253681aa$export$5097308c5200105a) {
8783
- ro = new ResizeObserver($i7OB2$catchify1(records => {
8807
+ ro = new ResizeObserver($i7OB2$catchify(records => {
8784
8808
  records.forEach(({
8785
8809
  contentRect: {
8786
8810
  width: width
@@ -8803,7 +8827,7 @@ function $b6d5529b253681aa$export$b3ad617e9036868({
8803
8827
  }));
8804
8828
  ro.observe(input_field);
8805
8829
  }
8806
- $i7OB2$onCleanup($i7OB2$catchify1(() => ro?.disconnect()));
8830
+ $i7OB2$onCleanup($i7OB2$catchify(() => ro?.disconnect()));
8807
8831
  return ensureAlignedPosition;
8808
8832
  }
8809
8833
  const $fc5a12f3a857ca30$var$get_available_range = (available_filters_, search_for_field) => {
@@ -9003,7 +9027,7 @@ function $6db49ca163afa2c3$export$83fd5de5504a7a67({
9003
9027
  fill: "forwards",
9004
9028
  easing: "ease-in-out"
9005
9029
  });
9006
- animation.addEventListener("finish", $i7OB2$catchify1(() => {
9030
+ animation.addEventListener("finish", $i7OB2$catchify(() => {
9007
9031
  if (unpermit_when_possible) set_permitted_to_show(false);
9008
9032
  animation = undefined;
9009
9033
  element.style.display = "none";
@@ -9068,7 +9092,7 @@ function $056f6ac0a6caa919$export$5e4aed86c12acdd9({
9068
9092
  is_first_load = true;
9069
9093
  });
9070
9094
  // percentage_in_view_ has equals: false so it should update even when set to the same value. That is to make sure that if the user bounces around below the "viewport" of our product listing we still start fetching as soon as is_loading_more becomes false again and we get IntersectionObserverEntries
9071
- $i7OB2$createEffect($i7OB2$catchify1(async () => {
9095
+ $i7OB2$createEffect($i7OB2$catchify(async () => {
9072
9096
  const be_above_percentage = is_first_load ? 50 : 75; // if first load, load earlier
9073
9097
  if (percentage_in_view_() < be_above_percentage || is_loading_more) return;
9074
9098
  if (!get_last_cursor()) {
@@ -9197,7 +9221,7 @@ var $6dee9211e57ac31a$var$_tmpl$ = ["<style", ' type="text/css">', "</style>"];
9197
9221
  const $6dee9211e57ac31a$export$c500183c31c2b22e = "--spans-columns";
9198
9222
  function $6dee9211e57ac31a$export$ab6b147eec64fea5(props) {
9199
9223
  const container_class = "x" + $i7OB2$createUniqueId();
9200
- const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps1(() => props.element_attributes, {
9224
+ const container_element_ = $i7OB2$ssrElement("div", $i7OB2$mergeProps(() => props.element_attributes, {
9201
9225
  classList: {
9202
9226
  [container_class]: true
9203
9227
  }
@@ -9494,7 +9518,7 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
9494
9518
  } = slider;
9495
9519
  const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
9496
9520
  // Do like this, so we don't have to call mergeProps ourselves
9497
- $i7OB2$createComponent(Layout, $i7OB2$mergeProps1(layout_options_, {
9521
+ $i7OB2$createComponent(Layout, $i7OB2$mergeProps(layout_options_, {
9498
9522
  rows: "all",
9499
9523
  get cols_at_size() {
9500
9524
  return modified_cols_at_size();
@@ -9568,7 +9592,7 @@ function $f8c929beb82c512b$export$9dd50d35b9d94fdf({
9568
9592
  number_of_results_: number_of_results_,
9569
9593
  type: type
9570
9594
  }) {
9571
- const contents = $i7OB2$createMemo($i7OB2$catchify1(() => {
9595
+ const contents = $i7OB2$createMemo($i7OB2$catchify(() => {
9572
9596
  const q = get_search_query_();
9573
9597
  return i18n_[type === $f8c929beb82c512b$export$2452208c79fe93ea.content ? "get_showing_pages_for_" : "get_showing_results_for_"]()($i7OB2$ssr($f8c929beb82c512b$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(q)), $i7OB2$ssr($f8c929beb82c512b$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(formatted_number_of_results_())), !!q, number_of_results_());
9574
9598
  }));
@@ -9640,7 +9664,7 @@ function $68a258a92b88f02f$export$1f1775a58da589b5({
9640
9664
  var $e1bb71e65e01a3a0$var$_tmpl$ = '<path d="M6.199 10.254a.35.35 0 0 0-.496 0L3.5 12.453V.348a.35.35 0 0 0-.7 0v12.105L.598 10.254c-.137-.137-.359-.137-.492 0a.35.35 0 0 0 0 .492l2.797 2.801a.35.35 0 0 0 .496 0L6.2 10.746c.137-.137.137-.355 0-.492zM9.449 3.5H8.051a.35.35 0 0 1-.352-.352V1.75c0-.191.156-.352.352-.352h1.398c.195 0 .352.16.352.352v1.398a.35.35 0 0 1-.352.352zm-1.051-.699h.703v-.699h-.703zm0 0"></path>',
9641
9665
  $e1bb71e65e01a3a0$var$_tmpl$2 = '<path d="M10.852 6.301H8.051a.35.35 0 0 1-.352-.352V4.551a.35.35 0 0 1 .352-.352h2.801a.35.35 0 0 1 .348.352v1.398a.35.35 0 0 1-.348.352zm-2.453-.699H10.5v-.703H8.398zm3.851 3.5H8.051c-.195 0-.352-.16-.352-.352V7.352A.35.35 0 0 1 8.051 7h4.199c.191 0 .352.156.352.352V8.75c0 .191-.16.352-.352.352zm-3.852-.703h3.5V7.7h-3.5zm5.25 3.499H8.051a.35.35 0 0 1-.352-.348v-1.402a.35.35 0 0 1 .352-.348h5.598a.35.35 0 0 1 .352.348v1.402a.35.35 0 0 1-.352.348zm-5.25-.699H13.3V10.5H8.398zm0 0"></path>';
9642
9666
  function $e1bb71e65e01a3a0$export$da32f7add8a22e86(props = {}) {
9643
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
9667
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
9644
9668
  xmlns: "http://www.w3.org/2000/svg",
9645
9669
  width: "14",
9646
9670
  height: "14",
@@ -9649,7 +9673,7 @@ function $e1bb71e65e01a3a0$export$da32f7add8a22e86(props = {}) {
9649
9673
  }
9650
9674
  var $05fbe84eb34564ec$var$_tmpl$ = '<path d="M6.199 10.254a.35.35 0 0 0-.496 0L3.5 12.453V.348a.35.35 0 0 0-.7 0v12.105L.598 10.254c-.137-.137-.359-.137-.492 0a.35.35 0 0 0 0 .492l2.797 2.801a.35.35 0 0 0 .496 0L6.2 10.746c.137-.137.137-.355 0-.492zm3.25 1.644H8.051a.35.35 0 0 1-.352-.348v-1.402a.35.35 0 0 1 .352-.348h1.398a.35.35 0 0 1 .352.348v1.402a.35.35 0 0 1-.352.348zm-1.051-.699h.703V10.5h-.703zm2.454-2.097H8.051c-.195 0-.352-.16-.352-.352V7.352A.35.35 0 0 1 8.051 7h2.801a.35.35 0 0 1 .348.352V8.75c0 .191-.156.352-.348.352zm-2.453-.703H10.5V7.7H8.398zm3.851-2.098H8.051a.35.35 0 0 1-.352-.352V4.551a.35.35 0 0 1 .352-.352h4.199c.191 0 .352.156.352.352v1.398c0 .195-.16.352-.352.352zm-3.852-.699h3.5v-.703h-3.5zm5.25-2.102H8.051a.35.35 0 0 1-.352-.352V1.75c0-.191.156-.352.352-.352h5.598c.195 0 .352.16.352.352v1.398a.35.35 0 0 1-.352.352zm-5.25-.699H13.3v-.699H8.398zm0 0"></path>';
9651
9675
  function $05fbe84eb34564ec$export$d10e63059ddb9fd4(props = {}) {
9652
- return $i7OB2$ssrElement("svg", $i7OB2$mergeProps1({
9676
+ return $i7OB2$ssrElement("svg", $i7OB2$mergeProps({
9653
9677
  xmlns: "http://www.w3.org/2000/svg",
9654
9678
  width: "14",
9655
9679
  height: "14",
@@ -9715,7 +9739,7 @@ function $757dac7f7c6c5241$export$9bf11afa910f536e({
9715
9739
  set_search_sorting_open(true);
9716
9740
  }
9717
9741
  });
9718
- $i7OB2$onCleanup($i7OB2$catchify1(() => {
9742
+ $i7OB2$onCleanup($i7OB2$catchify(() => {
9719
9743
  if (!sorting_expanded() && !filters_expanded()) {
9720
9744
  set_search_filters_open(false);
9721
9745
  set_search_sorting_open(false);
@@ -9762,7 +9786,7 @@ function $757dac7f7c6c5241$export$9bf11afa910f536e({
9762
9786
  })));
9763
9787
  },
9764
9788
  get children() {
9765
- return $i7OB2$ssr($757dac7f7c6c5241$var$_tmpl$5, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $fab07f52c9861732$export$3f1a388cc0d8fed7), $i7OB2$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_, {
9766
9790
  are_in_modal_: true
9767
9791
  }))));
9768
9792
  }
@@ -9824,7 +9848,7 @@ function $cdea4cf8c5c071ef$export$d7841e452f2e59a8({
9824
9848
  const [sorting_open, set_sorting_open] = search_sorting_open_;
9825
9849
  const [get_current_sorting_] = current_sorting_;
9826
9850
  const [is_small, set_is_small] = $i7OB2$createSignal(false);
9827
- const dismiss_modal_ = $i7OB2$catchify1(() => {
9851
+ const dismiss_modal_ = $i7OB2$catchify(() => {
9828
9852
  set_filters_open(false);
9829
9853
  set_sorting_open(false);
9830
9854
  });
@@ -9910,7 +9934,7 @@ function $cdea4cf8c5c071ef$export$d7841e452f2e59a8({
9910
9934
  }));else set_extra_els_in_results_container_($i7OB2$ssr($cdea4cf8c5c071ef$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent((0, $68a258a92b88f02f$export$1f1775a58da589b5), sorting_options))));
9911
9935
  }
9912
9936
  });
9913
- $i7OB2$catchify1(async () => {
9937
+ $i7OB2$catchify(async () => {
9914
9938
  ({
9915
9939
  open_modal_: open_modal_,
9916
9940
  close_modal_: close_modal_
@@ -10076,7 +10100,7 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
10076
10100
  }
10077
10101
  old_pos = new_pos;
10078
10102
  });
10079
- const touchstart_handler = $i7OB2$catchify1(e => {
10103
+ const touchstart_handler = $i7OB2$catchify(e => {
10080
10104
  is_in_touch_scroll = true;
10081
10105
  if (e.touches.length === 1) {
10082
10106
  // we had no touches but then we got some. Adding a new touch cancels the inertia. We are in a new touch so do reset the diff
@@ -10084,12 +10108,12 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
10084
10108
  diff_over_second_or_touch = 0;
10085
10109
  }
10086
10110
  });
10087
- const touchend_handler = $i7OB2$catchify1(e => {
10111
+ const touchend_handler = $i7OB2$catchify(e => {
10088
10112
  if (e.touches.length === 0)
10089
10113
  // scroll gesture of any type (pinch can also be used as scroll, etc.) ended
10090
10114
  inertia_timeout = setTimeout(
10091
10115
  // inertia ends after 500ms (educated guess)
10092
- $i7OB2$catchify1(() => {
10116
+ $i7OB2$catchify(() => {
10093
10117
  is_in_touch_scroll = false;
10094
10118
  diff_over_second_or_touch = 0;
10095
10119
  }), 500);
@@ -10107,9 +10131,9 @@ function $0b0380f75d729d63$var$ActualFloatingButtons({
10107
10131
  const everything_closed = !get_search_filters_open_() && !get_search_sorting_open_();
10108
10132
  if (!$i7OB2$untrack(modal_is_closed) && everything_closed)
10109
10133
  // I think the point of this is to delay the animation a bit IIRC
10110
- timeout = setTimeout($i7OB2$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);
10111
10135
  });
10112
- $i7OB2$createComputed($i7OB2$catchify1(async () => {
10136
+ $i7OB2$createComputed($i7OB2$catchify(async () => {
10113
10137
  const element = sort_and_filter_element_();
10114
10138
  if (!element) return;
10115
10139
  await (0, $i7OB2$observer).wait_for_element(element);
@@ -10128,7 +10152,7 @@ function $587cd61972788655$export$210f130a61ac1e8d(fn) {
10128
10152
  let last_queued;
10129
10153
  let last_value;
10130
10154
  let initial_run = true;
10131
- $i7OB2$createComputed($i7OB2$catchify1(async () => {
10155
+ $i7OB2$createComputed($i7OB2$catchify(async () => {
10132
10156
  last_value = fn();
10133
10157
  if (initial_run) {
10134
10158
  initial_run = false;
@@ -10175,7 +10199,7 @@ function $641bba2917fe862b$export$6e49da55e449af7c({
10175
10199
  }]); // get rid of old data the browser saves the old state and will restore it later on
10176
10200
  };
10177
10201
 
10178
- $i7OB2$createComputed($i7OB2$catchify1(() => {
10202
+ $i7OB2$createComputed($i7OB2$catchify(() => {
10179
10203
  const last_result = get_last_result_in_viewport_();
10180
10204
  if (last_result == undefined || last_result <= 0 || last_result == Infinity) return;
10181
10205
  if (isNaN(last_result)) {
@@ -10202,7 +10226,7 @@ function $641bba2917fe862b$export$6e49da55e449af7c({
10202
10226
  set_to_later = last_result;
10203
10227
  // If a delayed push timeout is already running, just changing the value that will be pushed is sufficient
10204
10228
  if (timeout) return;
10205
- timeout = setTimeout($i7OB2$catchify1(() => {
10229
+ timeout = setTimeout($i7OB2$catchify(() => {
10206
10230
  timeout = undefined;
10207
10231
  last_time_history_changed = +new Date();
10208
10232
  set_min_results_loaded(set_to_later);
@@ -10304,7 +10328,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
10304
10328
  if (!result) return;
10305
10329
  return {
10306
10330
  href: result.page_url,
10307
- onClick: $i7OB2$catchify1(ev => router_.navigate_.go_to_({
10331
+ onClick: $i7OB2$catchify(ev => router_.navigate_.go_to_({
10308
10332
  new_url_: result.page_url,
10309
10333
  is_replace_: false,
10310
10334
  event_: ev
@@ -10318,7 +10342,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
10318
10342
  if (content_result_) return $i7OB2$ssrElement("a", attributes, () => $i7OB2$escape(children), true);
10319
10343
  return $i7OB2$ssrElement("div", attributes, () => $i7OB2$escape(children), true);
10320
10344
  };
10321
- return $i7OB2$ssr($b2bf2cdcff8142d8$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps1(make_link_attributes, {
10345
+ return $i7OB2$ssr($b2bf2cdcff8142d8$var$_tmpl$2, $i7OB2$ssrHydrationKey(), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps(make_link_attributes, {
10322
10346
  tabIndex: "-1",
10323
10347
  get children() {
10324
10348
  return $i7OB2$createComponent((0, $190927650b4840eb$export$605674723bcc715c), {
@@ -10326,7 +10350,7 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
10326
10350
  height: "28"
10327
10351
  });
10328
10352
  }
10329
- }))), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps1({
10353
+ }))), $i7OB2$escape($i7OB2$createComponent(LinkIfPossible, $i7OB2$mergeProps({
10330
10354
  "class": "content-title line-clamp"
10331
10355
  }, make_link_attributes, {
10332
10356
  get title() {
@@ -10467,7 +10491,7 @@ function $49de9d31aeea1b5e$export$6d0c9c22f6652669({
10467
10491
  return (0, $f8c929beb82c512b$export$2452208c79fe93ea).content;
10468
10492
  },
10469
10493
  number_of_results_: num_results
10470
- })), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$mergeProps1({
10494
+ })), $i7OB2$escape($i7OB2$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), $i7OB2$mergeProps({
10471
10495
  layout: "grid",
10472
10496
  element_attributes: {
10473
10497
  class: "cards"
@@ -10665,7 +10689,7 @@ function $0e562a5b247b1fc2$export$44f738469d5570cf({
10665
10689
  // We might only have changed the left position which align_field doesn't know about, make it poll the position for a while
10666
10690
  setPollAlignment_(true);
10667
10691
  if (disableResizePollingTimeout) clearTimeout(disableResizePollingTimeout);
10668
- disableResizePollingTimeout = setTimeout($i7OB2$catchify1(() => {
10692
+ disableResizePollingTimeout = setTimeout($i7OB2$catchify(() => {
10669
10693
  setPollAlignment_(false);
10670
10694
  disableResizePollingTimeout = undefined;
10671
10695
  }), 1000);
@@ -10797,7 +10821,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
10797
10821
  } : {})
10798
10822
  };
10799
10823
  });
10800
- const [search_results_] = $i7OB2$createResource(search_query_base_, $i7OB2$catchify1(async base_query => {
10824
+ const [search_results_] = $i7OB2$createResource(search_query_base_, $i7OB2$catchify(async base_query => {
10801
10825
  set_all_products_loaded(false);
10802
10826
  // only first page of results
10803
10827
  return await $641bba2917fe862b$export$cc42dd29bf655ab6({
@@ -10836,7 +10860,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
10836
10860
  const [, setModalFieldStyle] = modal_field_style;
10837
10861
  const [, setModalBackdropStyle] = modal_backdrop_style;
10838
10862
  const [get_search_field_elements, set_search_field_elements] = $i7OB2$createSignal();
10839
- const SafeSearchField = $i7OB2$catchify1((0, $5285d2814d0fac0c$export$b94867ecbd698f21));
10863
+ const SafeSearchField = $i7OB2$catchify((0, $5285d2814d0fac0c$export$b94867ecbd698f21));
10840
10864
  const [sort_or_filter_open_, set_sort_or_filter_open_] = $i7OB2$createSignal(false);
10841
10865
  const [desktop_filter_elements_, set_desktop_filter_elements] = $i7OB2$createSignal();
10842
10866
  const n_hits = $i7OB2$createMemo(() => search_results_()?.n_hits);
@@ -10846,7 +10870,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
10846
10870
  });
10847
10871
  const [sort_and_filter_element_, set_sort_and_filter_element_] = $i7OB2$createSignal();
10848
10872
  const no_results_text_ = $i7OB2$createMemo(() => (search_results_()?.content_search_links?.length ? i18n_.no_products_ : i18n_.no_results_text_)());
10849
- const results_for = $i7OB2$createComponent((0, $f8c929beb82c512b$export$9dd50d35b9d94fdf), $i7OB2$mergeProps1({
10873
+ const results_for = $i7OB2$createComponent((0, $f8c929beb82c512b$export$9dd50d35b9d94fdf), $i7OB2$mergeProps({
10850
10874
  get type() {
10851
10875
  return (0, $f8c929beb82c512b$export$2452208c79fe93ea).products;
10852
10876
  },
@@ -10886,7 +10910,7 @@ function $7097477c78a89208$export$a54ec244c8863715({
10886
10910
  $i7OB2$runWithOwner(owner, () => results_filters[1](matches ? [results_for, filters_opener] : $i7OB2$ssr($7097477c78a89208$var$_tmpl$, $i7OB2$ssrHydrationKey(), $i7OB2$escape(results_for), $i7OB2$escape(filters_opener))));
10887
10911
  }).remove);
10888
10912
  $2ab89d64b7f1d5ef$export$d31a1a1a83ad9413(search_results_, selected_filters_);
10889
- $i7OB2$catchify1((0, $641bba2917fe862b$export$6e49da55e449af7c))({
10913
+ $i7OB2$catchify((0, $641bba2917fe862b$export$6e49da55e449af7c))({
10890
10914
  scroll_restoration_data_: scroll_restoration_data_,
10891
10915
  last_result_in_viewport_: last_result_in_viewport_,
10892
10916
  id_: get_search_query_,
@@ -10932,8 +10956,8 @@ function $7097477c78a89208$export$a54ec244c8863715({
10932
10956
  setModalBodyStyle({});
10933
10957
  modalAlignmentSignalsRef_?.(alignmentSignals_);
10934
10958
  const [pollAlignment, setPollAlignment_] = $i7OB2$createSignal(false);
10935
- const align_position = $i7OB2$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);
10936
- 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 => {
10937
10961
  const target = e.target;
10938
10962
  const sel = ".submit";
10939
10963
  if (target?.matches?.(sel) || target?.closest?.(sel))
@@ -11270,7 +11294,7 @@ class $806c97b931758897$export$ac6237957a15b3f0 {
11270
11294
  BackIcon_: BackIcon_
11271
11295
  });
11272
11296
  $90980bd87c9960f9$export$5162a71f252e6122();
11273
- $i7OB2$catchify1(async () => {
11297
+ $i7OB2$catchify(async () => {
11274
11298
  const {
11275
11299
  open_modal_: open_modal_,
11276
11300
  close_modal_: close_modal_
@@ -11511,7 +11535,7 @@ function $806c97b931758897$export$f2dc7e4e4aa11abb(props) {
11511
11535
  function $4ca91518c9a35379$export$828dcdd425fd3231(aligner) {
11512
11536
  const style_element = document.createElement("style");
11513
11537
  document.head.append(style_element);
11514
- const resize_observer = new ResizeObserver($i7OB2$catchify1(() => {
11538
+ const resize_observer = new ResizeObserver($i7OB2$catchify(() => {
11515
11539
  const styles = $926b1b5ba2239356$export$1233ca167bf71f9a({
11516
11540
  ".depict.plp .depict-search-modal .search-field": {
11517
11541
  "height": `${aligner?.clientHeight}px`
@@ -11580,7 +11604,7 @@ const $6891c018a834cfdd$export$d86a33413558014e = openModalParams => {
11580
11604
  }, dispose_aligner];
11581
11605
  };
11582
11606
  function $6e8944558258054f$export$d0596b5cae35ad4(open_search) {
11583
- const handler = $i7OB2$catchify1(e => {
11607
+ const handler = $i7OB2$catchify(e => {
11584
11608
  const {
11585
11609
  key: key,
11586
11610
  target: target
@@ -11599,7 +11623,7 @@ function $6e8944558258054f$export$d0596b5cae35ad4(open_search) {
11599
11623
  function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
11600
11624
  let old_url;
11601
11625
  let disconnect_link_observer;
11602
- const link_handler = $i7OB2$catchify1(e => {
11626
+ const link_handler = $i7OB2$catchify(e => {
11603
11627
  const link = e.currentTarget || e.target;
11604
11628
  if (link.href === old_url) {
11605
11629
  history.pushState(history.state, "", link.href);
@@ -11608,7 +11632,7 @@ function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
11608
11632
  });
11609
11633
  let remove_added_listeners;
11610
11634
  let resolve_remove_added_listeners;
11611
- pr.addEventListener("open", $i7OB2$catchify1(() => {
11635
+ pr.addEventListener("open", $i7OB2$catchify(() => {
11612
11636
  remove_added_listeners = new Promise(r => resolve_remove_added_listeners = r);
11613
11637
  disconnect_link_observer = (0, $i7OB2$observer).onexists("a", async ({
11614
11638
  element: element
@@ -11618,11 +11642,11 @@ function $6936724b9e0b98d5$export$689e204eadb33baf(pr) {
11618
11642
  element.removeEventListener("click", link_handler);
11619
11643
  });
11620
11644
  }));
11621
- pr.addEventListener("close", $i7OB2$catchify1(() => {
11645
+ pr.addEventListener("close", $i7OB2$catchify(() => {
11622
11646
  disconnect_link_observer?.();
11623
11647
  resolve_remove_added_listeners?.();
11624
11648
  }));
11625
- $i7OB2$catchify1(async () => {
11649
+ $i7OB2$catchify(async () => {
11626
11650
  for await (const href of (0, $i7OB2$href_change_ipns)) if (!pr.is_page_(new URL(href))) old_url = href;
11627
11651
  })();
11628
11652
  }
@@ -11634,7 +11658,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
11634
11658
  static #reverting_permitted = true;
11635
11659
  static #visited_urls = /*@__PURE__*/(() => {
11636
11660
  // Keep track of all URLs that have been visited since the document that was initially loaded (loaded means the process where the browser creates a new `document` and `window` object).
11637
- $i7OB2$catchify1(async () => {
11661
+ $i7OB2$catchify(async () => {
11638
11662
  // Static initialization blocks aren't supported in MobileSafari yet, otherwise this would be one.
11639
11663
  // I don't think we want to ship a library that users are *forced* to transpile, it should run in the newest version of all major browsers. So we'll just use a function wrapper for now (adding "last 1 ios version" to the build target does a bunch of other unneeded transpilations).
11640
11664
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Static_initialization_blocks
@@ -11652,7 +11676,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
11652
11676
  async #listen() {
11653
11677
  const [exit_ipns, exitable_ipns] = $i7OB2$make_asyncIterable_exiter((0, $i7OB2$href_change_ipns));
11654
11678
  this.#stop_listening = exit_ipns;
11655
- const caught_page_check_fn = $i7OB2$catchify1(this.is_page_, "page check failed");
11679
+ const caught_page_check_fn = $i7OB2$catchify(this.is_page_, "page check failed");
11656
11680
  for await (const href of exitable_ipns) {
11657
11681
  const url = new URL(href);
11658
11682
  if (!caught_page_check_fn(url)) {
@@ -11670,17 +11694,17 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
11670
11694
  this.addEventListener("close", dispose, {
11671
11695
  once: true
11672
11696
  });
11673
- return $i7OB2$catchify1(this.render_, "rendering failed")() || [];
11697
+ return $i7OB2$catchify(this.render_, "rendering failed")() || [];
11674
11698
  });
11675
11699
  }
11676
- #unload = /*@__PURE__*/$i7OB2$catchify1(() => {
11700
+ #unload = /*@__PURE__*/$i7OB2$catchify(() => {
11677
11701
  if (!this.#is_open) return;
11678
11702
  this.#disconnect_observer?.();
11679
11703
  if ($753e9b2889a47c89$export$3ccaa27d81dd8556.#reverting_permitted) while (this.#revert_fns.length) this.#revert_fns.pop()?.();
11680
11704
  this.#is_open = false;
11681
11705
  this.dispatchEvent(new CustomEvent("close"));
11682
11706
  }, "failed to close page");
11683
- #load = /*@__PURE__*/$i7OB2$catchify1(async els => {
11707
+ #load = /*@__PURE__*/$i7OB2$catchify(async els => {
11684
11708
  this.#is_open = true;
11685
11709
  // So that #load doesn't get called again
11686
11710
  let set_should_stay_inserted;
@@ -11730,7 +11754,7 @@ class $753e9b2889a47c89$export$3ccaa27d81dd8556 extends EventTarget {
11730
11754
  }, "failed to open page");
11731
11755
  #empty_page_bugfix() {
11732
11756
  // Called when a "page" is "opened" using PageReplacer
11733
- const on_maybe_popstate = $i7OB2$catchify1(what_happened => {
11757
+ const on_maybe_popstate = $i7OB2$catchify(what_happened => {
11734
11758
  if (what_happened !== "popstate") return;
11735
11759
  const cleaned_current_url = $753e9b2889a47c89$var$clean_url(location.href);
11736
11760
  if (!$753e9b2889a47c89$export$3ccaa27d81dd8556.#visited_urls.has(cleaned_current_url)) {
@@ -11832,7 +11856,7 @@ function $58b3487626e85ece$export$316f6f283ae64765(props) {
11832
11856
  field_: $i7OB2$createSignal({}),
11833
11857
  backdrop_: backdropAlignmentSignal_
11834
11858
  };
11835
- const defaultHandler = $i7OB2$catchify1(e => {
11859
+ const defaultHandler = $i7OB2$catchify(e => {
11836
11860
  const {
11837
11861
  modalVersionUsed_: modalVersionUsed_
11838
11862
  } = shared_properties;
@@ -11959,7 +11983,7 @@ function $06edf3aec9073663$export$466cdc317043f6cb({
11959
11983
  }];
11960
11984
  $i7OB2$createComputed(() => {
11961
11985
  if (place_holdey_quicklinks_data()?.[0]?.listing_id) {
11962
- if (last_was_placeholder) queueMicrotask($i7OB2$catchify1(() => {
11986
+ if (last_was_placeholder) queueMicrotask($i7OB2$catchify(() => {
11963
11987
  sliding_element?.scrollTo({
11964
11988
  left: 0
11965
11989
  }); // for some reason we land one element to the right after placeholder rendering otherwise
@@ -12025,7 +12049,7 @@ function $06edf3aec9073663$export$466cdc317043f6cb({
12025
12049
  } else if (!(intersecting_items_object[selected_index()]?.intersectionRatio >= 0.95)) {
12026
12050
  // negated larger than to handle left side of comparison being undefined
12027
12051
  let done_work = false;
12028
- $i7OB2$runWithOwner(owner, () => $i7OB2$createComputed($i7OB2$catchify1(() => {
12052
+ $i7OB2$runWithOwner(owner, () => $i7OB2$createComputed($i7OB2$catchify(() => {
12029
12053
  if (done_work || !Array.isArray(quicklinks_data_())) return;
12030
12054
  const sel_index = selected_index();
12031
12055
  const target_element = sel_index >= 0 ? sel_index : 0;
@@ -12170,7 +12194,7 @@ function $e7fce80abe608e01$export$3945d6db2dfd3d12({
12170
12194
  const handler = () => allow_filter_clearing = false;
12171
12195
  window.addEventListener("popstate", handler); // popstate only gets called when using back/forwards button of browser or the history navigate to achieve the same, but not on pushState or replaceState
12172
12196
  $i7OB2$onCleanup(() => window.removeEventListener("popstate", handler));
12173
- $i7OB2$createEffect($i7OB2$on(crumb_data_, $i7OB2$catchify1(new_crumb_data => {
12197
+ $i7OB2$createEffect($i7OB2$on(crumb_data_, $i7OB2$catchify(new_crumb_data => {
12174
12198
  const id_of_new_data = id_to_query_for_();
12175
12199
  const type_of_id_of_new_data = id_type_();
12176
12200
  if (allow_filter_clearing && previous_crumb_data && new_crumb_data && (id_of_new_data !== id_when_we_got_previous_data.id_ || type_of_id_of_new_data !== id_when_we_got_previous_data.type_)) {
@@ -12250,11 +12274,11 @@ function $f916989c4b1be9f7$export$780a853d15174484({
12250
12274
  }) {
12251
12275
  if (type === "image") {
12252
12276
  const [wrapperSize, setWrapperSize] = $i7OB2$createSignal();
12253
- return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps1({
12277
+ return $i7OB2$createComponent((0, $i7OB2$Dynamic), $i7OB2$mergeProps({
12254
12278
  component: link ? "a" : "div",
12255
12279
  "class": "d-standard-content-wrapper",
12256
12280
  get onClick() {
12257
- return $i7OB2$catchify(ev => link && router_.navigate_.go_to_({
12281
+ return $i7OB2$catchify1(ev => link && router_.navigate_.go_to_({
12258
12282
  new_url_: link,
12259
12283
  is_replace_: false,
12260
12284
  event_: ev
@@ -12264,10 +12288,9 @@ function $f916989c4b1be9f7$export$780a853d15174484({
12264
12288
  href: link
12265
12289
  }, {
12266
12290
  get children() {
12267
- return $i7OB2$createComponent((0, $e8ffe11ed01df0fe$export$6e5611bc7e57e477), {
12268
- get size() {
12269
- return $i7OB2$createMemo(() => wrapperSize()?.() || 0);
12270
- },
12291
+ return $i7OB2$createComponent((0, $70bb27cc6be01fc7$export$140423fa4bfb6d63), {
12292
+ size: () => wrapperSize()?.[0]?.() || 0,
12293
+ sizeHeight: () => wrapperSize()?.[1]?.() || 0,
12271
12294
  src: mediaUrl,
12272
12295
  "class": "d-standard-content"
12273
12296
  });
@@ -12379,7 +12402,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
12379
12402
  // Make "Get products in listing" request to get products in listing
12380
12403
  const [plp_products_] = $i7OB2$createResource(products_query_base_,
12381
12404
  // only first page of results, unless the history state says we should load more (can't do that in load more thing, I tested, they need to be added at once for the browser to not give up scroll restoration)
12382
- $i7OB2$catchify(base_query => $641bba2917fe862b$export$cc42dd29bf655ab6({
12405
+ $i7OB2$catchify1(base_query => $641bba2917fe862b$export$cc42dd29bf655ab6({
12383
12406
  id_: $i7OB2$untrack(id_to_query_for_),
12384
12407
  scroll_restoration_data_: scroll_restoration_data_,
12385
12408
  min_products_to_fetch_: min_products_to_fetch_,
@@ -12399,7 +12422,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
12399
12422
  id_type_: id_type_()
12400
12423
  }));
12401
12424
  // Make "Get Listing" request to get quicklinks, breadcrumbs, title, etc
12402
- const [plp_meta] = $i7OB2$createResource(meta_query_base, $i7OB2$catchify(query => depict_api_.get_listing(query)));
12425
+ const [plp_meta] = $i7OB2$createResource(meta_query_base, $i7OB2$catchify1(query => depict_api_.get_listing(query)));
12403
12426
  const contentBlocksByRow = $486360b09f0d5729$export$7a92d995f1bf3592(history_content_blocks_, plp_meta, content_blocks_by_row_, router_);
12404
12427
  const available_sortings_ = $i7OB2$createMemo(() => plp_products_()?.sorts?.map(sort => ({
12405
12428
  ...sort,
@@ -12509,7 +12532,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
12509
12532
  filterModalParent_: filterModalParent_,
12510
12533
  ...extra_sort_and_filter_args_
12511
12534
  });
12512
- $i7OB2$catchify((0, $641bba2917fe862b$export$6e49da55e449af7c))({
12535
+ $i7OB2$catchify1((0, $641bba2917fe862b$export$6e49da55e449af7c))({
12513
12536
  scroll_restoration_data_: scroll_restoration_data_,
12514
12537
  last_result_in_viewport_: last_result_in_viewport_,
12515
12538
  id_: id_to_query_for_,
@@ -12522,7 +12545,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
12522
12545
  $i7OB2$createComputed(() => {
12523
12546
  if (plp_products_.loading) set_can_write_scroll_restoration(false);else if (plp_products_()) set_can_write_scroll_restoration(true);
12524
12547
  });
12525
- $i7OB2$createRenderEffect($i7OB2$catchify(async () => {
12548
+ $i7OB2$createRenderEffect($i7OB2$catchify1(async () => {
12526
12549
  const slim = is_slim_();
12527
12550
  const only_show_filters_opener = only_show_filters_opener_?.();
12528
12551
  const owner = $i7OB2$getOwner();
@@ -12661,7 +12684,7 @@ function $df5d81d0fe61ff21$var$add_us_to_crumbs(plp_meta) {
12661
12684
  return $i7OB2$createMemo(() => {
12662
12685
  const api_value = plp_meta()?.breadcrumbs;
12663
12686
  if (!api_value) return api_value;
12664
- return [...api_value, $i7OB2$mergeProps(plp_meta(), {
12687
+ return [...api_value, $i7OB2$mergeProps1(plp_meta(), {
12665
12688
  get page_url() {
12666
12689
  return href_accessor();
12667
12690
  }
@@ -12769,4 +12792,4 @@ function $442f32a4d80abbde$export$e2bf8ce7779e827e(props) {
12769
12792
  }, "Entire CategoryPage failed");
12770
12793
  }
12771
12794
  $i7OB2$add_to_version_info("ui", (0, $ec291e0010116877$export$83d89fbfd8236492));
12772
- export { $e7a7eb102ddc0c79$export$92aa5d691d588f3f as remap_blocks_to_index, $4eb0a704f8f30273$export$d4d96868197be50e as useMobileHover, $5e3d278ef4c80cd7$export$54299a3c81f5425 as useVisibilityState, $f32e14878e75af51$export$eaa625fb39439e37 as useSlidableInformation, $f091294da861020c$export$80bb7300ce6a8be3 as useProductCardIsVisible, $f091294da861020c$export$f223d69ed12f5fb7 as CurrentlyIntersectingContext, $24e27fab9c821b86$export$5bad61ecde080b1f as useExpandingContainerReactive, $07ef910e8ef6b783$export$2c9f9bf2092486aa as LooksSliderOrGrid, $e9d1d09be9e6471e$export$44809a8a3e867e30 as LookCard, $4fd2ba03703a7d92$export$7e1297a3a19f10d8 as PseudoRouter, $de6ccd37192b5fc2$export$83bb9af5671e1dbe as promiseSafeStructuredClone, $90980bd87c9960f9$export$5162a71f252e6122 as preserve_items_in_history_dot_state, $90980bd87c9960f9$export$3064e1e8c6513da3 as prefixes_to_preserve_in_history_dot_state, $a281666e5c15c2ec$export$29d28dadc2d6b631 as allowNativeNavigation, $66db7a014e20802e$export$1ea76ea778b880dd as modalVersionSymbol, $136f1d4d6c7ba6ac$export$e417c49320921907 as createDeparallelizedNoDropResource, $d8dbf52fea1773e2$export$f50b88e2a00918b5 as throw_globally, $42912431795f188e$export$9265e66f26f8e383 as ClassicSearchModal, $500a16dd18ee5a71$export$b0c55aa2e87c4be7 as SearchModalV2, $70bb27cc6be01fc7$export$9d4a4b669b1929ab as ModernResponsiveContainedImage, $024fbc0a2d796fad$export$3e41faf802a29e71 as Tab, $024fbc0a2d796fad$export$b2539bed5023c21c as Tabs, $8560c919ff763930$export$d4973c31938cbfd1 as ShopTheLookButton, $ca6f574bd8772184$export$e183a13865960371 as history_dot_state_to_state, $4147651646da990a$export$916e6850778505f6 as strip_encoded_filter_and_sort, $4147651646da990a$export$58aa3f171519b6d7 as encode_filters, $4147651646da990a$export$f934fa24c3a86811 as decode_filters, $4147651646da990a$export$62acb285a7579555 as encode_sorting, $4147651646da990a$export$766e9676e74997d3 as decode_sorting, $660070e2a394b3c3$export$d7b7ab832c20e2f4 as shopifyContainedImageContextSymbol, $011607bdf658f807$export$e68cff63f76bd15b as ListingProvider, $011607bdf658f807$export$8d0c4fdbb05a2f2e as useListing, $b6440e72ed83671a$export$11354f017ddc9790 as ProductCardIndexProvider, $b6440e72ed83671a$export$e3faf4d95300054f as useProductCardIndex, $660070e2a394b3c3$export$e4b984597b71e989 as ShopifyContainedImage, $f32e14878e75af51$export$6649caad96ef8870 as SlidableItems, $2449872a62a75a20$export$ebdc3711f7e02ccd as make_accurate_width_accessor, $ee116da074deb002$export$9574e176201e5e8d as RecommendationSlider, $9ea5383493360761$export$9756467d34d91cdb as RecommendationGrid, $e8ffe11ed01df0fe$export$6e5611bc7e57e477 as ShopifyResponsiveImg, $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 };