@depict-ai/ui 1.4.25 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/latest/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { add_to_version_info as $9HbP8$add_to_version_info, slider_fractional_factory as $9HbP8$slider_fractional_factory, make_random_classname as $9HbP8$make_random_classname, n_col_styling_with_dist as $9HbP8$n_col_styling_with_dist, catchify as $9HbP8$catchify, layout_get_visible_recs_without_partial_rows as $9HbP8$layout_get_visible_recs_without_partial_rows, layout_get_total_rec_amount_for_row as $9HbP8$layout_get_total_rec_amount_for_row, layout_media_query_header as $9HbP8$layout_media_query_header, report as $9HbP8$report, Amazing_Slider as $9HbP8$Amazing_Slider, slider_snap_css as $9HbP8$slider_snap_css, slider_fading_factory as $9HbP8$slider_fading_factory, is_safari as $9HbP8$is_safari, observer as $9HbP8$observer, useExpandingContainer as $9HbP8$useExpandingContainer, standard_price_format as $9HbP8$standard_price_format, dlog as $9HbP8$dlog, hex_to_rgb as $9HbP8$hex_to_rgb, relative_luminance_from_rgb as $9HbP8$relative_luminance_from_rgb, javascript_media_query as $9HbP8$javascript_media_query, fetch_recs as $9HbP8$fetch_recs, snakeCasifyObject as $9HbP8$snakeCasifyObject, instant_exec_on_suspect_history_change as $9HbP8$instant_exec_on_suspect_history_change, base_url as $9HbP8$base_url, get_depict_id as $9HbP8$get_depict_id, get_user_id as $9HbP8$get_user_id, get_session_id as $9HbP8$get_session_id, sort_obj as $9HbP8$sort_obj, fetch_retry as $9HbP8$fetch_retry, add_version_query_params as $9HbP8$add_version_query_params, dwarn as $9HbP8$dwarn, make_url_with_query_params as $9HbP8$make_url_with_query_params, edit_current_page_meta_tags as $9HbP8$edit_current_page_meta_tags, use_href_accessor as $9HbP8$use_href_accessor, base64_encode_unicode as $9HbP8$base64_encode_unicode, base64_decode_unicode as $9HbP8$base64_decode_unicode, queueMacroTask as $9HbP8$queueMacroTask, is_debug as $9HbP8$is_debug, make_asyncIterable_exiter as $9HbP8$make_asyncIterable_exiter, href_change_ipns as $9HbP8$href_change_ipns, ContainedImage as $9HbP8$ContainedImage, buildThresholdList as $9HbP8$buildThresholdList, deparallelize_no_drop as $9HbP8$deparallelize_no_drop, insert_surfaces as $9HbP8$insert_surfaces } from "@depict-ai/utilishared/latest";
1
+ import { add_to_version_info as $9HbP8$add_to_version_info, slider_fractional_factory as $9HbP8$slider_fractional_factory, make_random_classname as $9HbP8$make_random_classname, n_col_styling_with_dist as $9HbP8$n_col_styling_with_dist, catchify as $9HbP8$catchify, layout_get_visible_recs_without_partial_rows as $9HbP8$layout_get_visible_recs_without_partial_rows, layout_get_total_rec_amount_for_row as $9HbP8$layout_get_total_rec_amount_for_row, layout_media_query_header as $9HbP8$layout_media_query_header, report as $9HbP8$report, Amazing_Slider as $9HbP8$Amazing_Slider, slider_snap_css as $9HbP8$slider_snap_css, slider_fading_factory as $9HbP8$slider_fading_factory, observer as $9HbP8$observer, is_safari as $9HbP8$is_safari, useExpandingContainer as $9HbP8$useExpandingContainer, standard_price_format as $9HbP8$standard_price_format, dlog as $9HbP8$dlog, hex_to_rgb as $9HbP8$hex_to_rgb, relative_luminance_from_rgb as $9HbP8$relative_luminance_from_rgb, javascript_media_query as $9HbP8$javascript_media_query, fetch_recs as $9HbP8$fetch_recs, snakeCasifyObject as $9HbP8$snakeCasifyObject, instant_exec_on_suspect_history_change as $9HbP8$instant_exec_on_suspect_history_change, base_url as $9HbP8$base_url, get_depict_id as $9HbP8$get_depict_id, get_user_id as $9HbP8$get_user_id, get_session_id as $9HbP8$get_session_id, sort_obj as $9HbP8$sort_obj, fetch_retry as $9HbP8$fetch_retry, add_version_query_params as $9HbP8$add_version_query_params, dwarn as $9HbP8$dwarn, make_url_with_query_params as $9HbP8$make_url_with_query_params, edit_current_page_meta_tags as $9HbP8$edit_current_page_meta_tags, use_href_accessor as $9HbP8$use_href_accessor, base64_encode_unicode as $9HbP8$base64_encode_unicode, base64_decode_unicode as $9HbP8$base64_decode_unicode, queueMacroTask as $9HbP8$queueMacroTask, is_debug as $9HbP8$is_debug, make_asyncIterable_exiter as $9HbP8$make_asyncIterable_exiter, href_change_ipns as $9HbP8$href_change_ipns, ContainedImage as $9HbP8$ContainedImage, buildThresholdList as $9HbP8$buildThresholdList, deparallelize_no_drop as $9HbP8$deparallelize_no_drop, ListenableSet as $9HbP8$ListenableSet, insert_surfaces as $9HbP8$insert_surfaces } from "@depict-ai/utilishared/latest";
2
2
  import { template as $9HbP8$template, getNextElement as $9HbP8$getNextElement, insert as $9HbP8$insert, createComponent as $9HbP8$createComponent, mergeProps as $9HbP8$mergeProps, isServer as $9HbP8$isServer, spread as $9HbP8$spread, runHydrationEvents as $9HbP8$runHydrationEvents, addEventListener as $9HbP8$addEventListener, className as $9HbP8$className, memo as $9HbP8$memo, delegateEvents as $9HbP8$delegateEvents, effect as $9HbP8$effect, classList as $9HbP8$classList, setAttribute as $9HbP8$setAttribute, getNextMarker as $9HbP8$getNextMarker, style as $9HbP8$style, Dynamic as $9HbP8$Dynamic, use as $9HbP8$use } from "solid-js/web";
3
- import { createMemo as $9HbP8$createMemo, createResource as $9HbP8$createResource, Suspense as $9HbP8$Suspense, Show as $9HbP8$Show, createSignal as $9HbP8$createSignal, createRenderEffect as $9HbP8$createRenderEffect, createRoot as $9HbP8$createRoot, onCleanup as $9HbP8$onCleanup, For as $9HbP8$For, getOwner as $9HbP8$getOwner, runWithOwner as $9HbP8$runWithOwner, createEffect as $9HbP8$createEffect, untrack as $9HbP8$untrack, createComputed as $9HbP8$createComputed, ErrorBoundary as $9HbP8$ErrorBoundary, Index as $9HbP8$Index, on as $9HbP8$on, batch as $9HbP8$batch, createReaction as $9HbP8$createReaction } from "solid-js";
3
+ import { createMemo as $9HbP8$createMemo, createResource as $9HbP8$createResource, Suspense as $9HbP8$Suspense, Show as $9HbP8$Show, createSignal as $9HbP8$createSignal, createRenderEffect as $9HbP8$createRenderEffect, createRoot as $9HbP8$createRoot, onCleanup as $9HbP8$onCleanup, For as $9HbP8$For, getOwner as $9HbP8$getOwner, runWithOwner as $9HbP8$runWithOwner, createEffect as $9HbP8$createEffect, untrack as $9HbP8$untrack, createUniqueId as $9HbP8$createUniqueId, createComputed as $9HbP8$createComputed, ErrorBoundary as $9HbP8$ErrorBoundary, Index as $9HbP8$Index, on as $9HbP8$on, batch as $9HbP8$batch, createReaction as $9HbP8$createReaction } from "solid-js";
4
4
 
5
5
  /*! Depict.ai search and product listing SDK */
6
6
  import { register_es_version } from "../multi_import_deduplicator.mjs";
7
7
  register_es_version("ui", "latest");
8
- const $ec291e0010116877$export$83d89fbfd8236492 = "1.4.25";
8
+ const $ec291e0010116877$export$83d89fbfd8236492 = "2.0.0";
9
9
  const $b5cccc8ee7d24677$var$transform_elements = sorted_cols_at_size => {
10
10
  const cols_at_size = [];
11
11
  for (let i = 0; i < sorted_cols_at_size.length; i++) {
@@ -64,7 +64,9 @@ function $1848f7cca286fbab$export$ff7109b9b2b206ba(sdk_cols_at_size, min_width_f
64
64
  }
65
65
  function $a458486f22b22f63$export$a2cc176055f8f08() {
66
66
  const text = "Please try setting `colsAtSize` on the `SearchPage`/`CategoryPage` components to change the grid before setting it with CSS. If you do with CSS, set `ColsAtSize` to an empty array to ensure no declarations created by the SDK leak through.";
67
- return (0, $9HbP8$isServer) ? `<!-- ${text} -->` : document.createComment(text);
67
+ return (0, $9HbP8$isServer) ? {
68
+ t: `<!-- ${text} -->`
69
+ } : document.createComment(text);
68
70
  }
69
71
  function $a52235d12ccf9c88$export$2f0cbfbb4354bb52(elements) {
70
72
  // FYI this probably doesn't work on hugely deep nestings or large amount of elements
@@ -279,9 +281,14 @@ function $b7436a6d1fd64e3b$export$b69d0d92862de18b(props) {
279
281
  const $c8d5ff4524619fcd$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<div></div>`, 2),
280
282
  $c8d5ff4524619fcd$var$_tmpl$2 = /*#__PURE__*/$9HbP8$template(`<style type="text/css"></style>`, 2);
281
283
  function $c8d5ff4524619fcd$export$d21e32dfedac04be(props) {
284
+ const container_class = "x" + $9HbP8$createUniqueId();
282
285
  const container_element_ = (() => {
283
286
  const _el$ = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$);
284
- $9HbP8$spread(_el$, $9HbP8$mergeProps(() => props.element_attributes), false, true);
287
+ $9HbP8$spread(_el$, $9HbP8$mergeProps(() => props.element_attributes, {
288
+ "classList": {
289
+ [container_class]: true
290
+ }
291
+ }), false, true);
285
292
  $9HbP8$insert(_el$, () => props.children);
286
293
  $9HbP8$runHydrationEvents();
287
294
  return _el$;
@@ -292,11 +299,16 @@ function $c8d5ff4524619fcd$export$d21e32dfedac04be(props) {
292
299
  },
293
300
  severity_: "error",
294
301
  get children() {
295
- return $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element_);
302
+ return $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element_, false, container_class);
296
303
  }
297
304
  });
298
305
  }
299
- function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, insert_after_container = false) {
306
+ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, insert_after_container = false, container_class) {
307
+ if (!container_class) {
308
+ // only try to add if it wasn't provided, so that we have a code path without classList when doing SSR
309
+ container_class = $9HbP8$make_random_classname();
310
+ container_element.classList.add(container_class);
311
+ }
300
312
  // Copy of Layout from utilishared but using solid-js signals instead of async iterable IPNS
301
313
  const show_all_rows = $9HbP8$createMemo(() => props.rows === "all");
302
314
  const rows_or_empty_object = $9HbP8$createMemo(() => show_all_rows() ? {} : props.rows);
@@ -311,46 +323,41 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
311
323
  return !(!button || Array.isArray(button) && !button.length);
312
324
  });
313
325
  const [get_styling, set_styling] = $9HbP8$createSignal();
314
- const container_class = $9HbP8$make_random_classname();
315
326
  const selector_beginning = `.depict .${container_class}>`; // class so ppl can have id if needed
316
327
  const [get_children_count, set_children_count] = $9HbP8$createSignal(0);
317
- const update_children_count = () => set_children_count(container_element.children.length);
328
+ const update_children_count = () => (0, $9HbP8$isServer) ? 20 : set_children_count(container_element.children.length);
318
329
  const col_styling = $9HbP8$createMemo(() => $9HbP8$n_col_styling_with_dist(selector_beginning, props.grid_spacing, props.cols_at_size, props.layout, props.override_vertical_spacing));
319
330
  const default_currently_visible_signal = $9HbP8$createSignal($9HbP8$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
320
331
  const rows_visible_signal = $9HbP8$createMemo(() => rows_or_empty_object().currently_visible || default_currently_visible_signal);
321
332
  const get_rows_visible = $9HbP8$createMemo(() => rows_visible_signal()[0]());
322
333
  const set_rows_visible = $9HbP8$createMemo(() => rows_visible_signal()[1]);
323
- const view_more_button_class = $9HbP8$make_random_classname();
324
- const view_less_button_class = $9HbP8$make_random_classname();
325
- const style_element = (() => {
326
- const _el$2 = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$2);
327
- $9HbP8$insert(_el$2, get_styling);
328
- return _el$2;
329
- })();
334
+ const view_more_button_class = "m" + $9HbP8$createUniqueId();
335
+ const view_less_button_class = "l" + $9HbP8$createUniqueId(); // https://github.com/solidjs/solid-docs/issues/263#issuecomment-1622388079
330
336
  const view_more_button_container = $9HbP8$createMemo(() => have_a_view_more_button() && (() => {
331
- const _el$3 = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$);
332
- $9HbP8$addEventListener(_el$3, "click", $9HbP8$catchify(() => set_rows_visible()(prev => prev + (rows_or_empty_object().rows_per_click ?? 1))), true);
333
- $9HbP8$className(_el$3, `load-more-container ${view_more_button_class}`);
334
- $9HbP8$insert(_el$3, () => rows_or_empty_object().button);
337
+ const _el$2 = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$);
338
+ $9HbP8$addEventListener(_el$2, "click", $9HbP8$catchify(() => set_rows_visible()(prev => prev + (rows_or_empty_object().rows_per_click ?? 1))), true);
339
+ $9HbP8$className(_el$2, `load-more-container ${view_more_button_class}`);
340
+ $9HbP8$insert(_el$2, () => rows_or_empty_object().button);
335
341
  $9HbP8$runHydrationEvents();
336
- return _el$3;
342
+ return _el$2;
337
343
  })());
338
344
  // 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
339
345
  const view_less_button_container = $9HbP8$createMemo(() => have_a_view_less_button() && (() => {
340
- const _el$4 = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$);
341
- $9HbP8$addEventListener(_el$4, "click", $9HbP8$catchify(() => set_rows_visible()(() => rows_or_empty_object().start_rows ?? 1)), true);
342
- $9HbP8$className(_el$4, `load-less-container ${view_less_button_class}`);
343
- $9HbP8$insert(_el$4, () => rows_or_empty_object().view_less_button);
346
+ const _el$3 = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$);
347
+ $9HbP8$addEventListener(_el$3, "click", $9HbP8$catchify(() => set_rows_visible()(() => rows_or_empty_object().start_rows ?? 1)), true);
348
+ $9HbP8$className(_el$3, `load-less-container ${view_less_button_class}`);
349
+ $9HbP8$insert(_el$3, () => rows_or_empty_object().view_less_button);
344
350
  $9HbP8$runHydrationEvents();
345
- return _el$4;
351
+ return _el$3;
346
352
  })());
347
- container_element.classList.add(container_class);
353
+ const [force_style_update, set_force_style_update] = $9HbP8$createSignal("");
348
354
  $9HbP8$createComputed(() => {
349
355
  // Make sure we don't have more rows visible than max_rows (this could happen by max_rows being decreased)
350
356
  const rows_visible = get_rows_visible();
351
357
  const max_rows = rows_or_empty_object().max_rows;
352
358
  if (!isNaN(max_rows) && max_rows >= 0 && rows_visible > max_rows) set_rows_visible()(max_rows);
353
359
  });
360
+ $9HbP8$createEffect(() => set_force_style_update(" ")); // force style update after hydration due to https://discord.com/channels/722131463138705510/722167424186843267/1151544212517552168
354
361
  $9HbP8$createRenderEffect(() => {
355
362
  // Be careful to only read show_all_rows in here (ofc doesn't apply to nested effects)
356
363
  if (show_all_rows()) {
@@ -359,11 +366,13 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
359
366
  return;
360
367
  }
361
368
  update_children_count();
362
- const mutation_observer = new MutationObserver($9HbP8$catchify(update_children_count));
363
- mutation_observer.observe(container_element, {
364
- childList: true
365
- });
366
- $9HbP8$onCleanup(() => mutation_observer.disconnect());
369
+ if (!(0, $9HbP8$isServer)) {
370
+ const mutation_observer = new MutationObserver($9HbP8$catchify(update_children_count));
371
+ mutation_observer.observe(container_element, {
372
+ childList: true
373
+ });
374
+ $9HbP8$onCleanup(() => mutation_observer.disconnect());
375
+ }
367
376
  set_styling(
368
377
  // this is needed because solid will think that the memo-accessor is a setter function otherwise
369
378
  () => $9HbP8$createMemo(() => {
@@ -374,7 +383,7 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
374
383
  } = rows_or_empty_object();
375
384
  const rows_visible = get_rows_visible();
376
385
  const children_count = get_children_count();
377
- return col_styling() + props.cols_at_size.map(options => {
386
+ return force_style_update() + col_styling() + props.cols_at_size.map(options => {
378
387
  const [recs_per_row, min, max] = options;
379
388
  let should_hide_view_more_button;
380
389
  let visible_recs;
@@ -395,6 +404,11 @@ function $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, container_element, ins
395
404
  }).join("");
396
405
  }));
397
406
  });
407
+ const style_element = (() => {
408
+ const _el$4 = $9HbP8$getNextElement($c8d5ff4524619fcd$var$_tmpl$2);
409
+ $9HbP8$insert(_el$4, get_styling);
410
+ return _el$4;
411
+ })(); // need to create this after set_styling has been called or else there will be no styling in the SSR'd output
398
412
  if (insert_after_container) container_element.after(style_element);
399
413
  return [container_element, $9HbP8$memo(view_more_button_container), $9HbP8$memo(view_less_button_container), style_element];
400
414
  }
@@ -422,18 +436,26 @@ function $f32e14878e75af51$export$6649caad96ef8870({
422
436
  slider_ref_: slider_ref_,
423
437
  faded_opacity_ = 0.7,
424
438
  mutation_plugins_ = [],
425
- disable_fading_: disable_fading_
439
+ disable_fading_: disable_fading_,
440
+ arrow_width_: arrow_width_,
441
+ arrow_height_: arrow_height_
426
442
  }) {
427
443
  const slider = new (0, $9HbP8$Amazing_Slider)({
428
444
  button_contents: {
429
445
  left: [(() => {
430
446
  const _el$ = $9HbP8$getNextElement($f32e14878e75af51$var$_tmpl$);
431
- $9HbP8$insert(_el$, $9HbP8$createComponent((0, $fbbadcb080ad1d4a$export$8be2714ec7f169ee), {}));
447
+ $9HbP8$insert(_el$, $9HbP8$createComponent((0, $fbbadcb080ad1d4a$export$8be2714ec7f169ee), {
448
+ height_: arrow_height_,
449
+ width_: arrow_width_
450
+ }));
432
451
  return _el$;
433
452
  })()],
434
453
  right: [(() => {
435
454
  const _el$2 = $9HbP8$getNextElement($f32e14878e75af51$var$_tmpl$);
436
- $9HbP8$insert(_el$2, $9HbP8$createComponent((0, $fbbadcb080ad1d4a$export$8be2714ec7f169ee), {}));
455
+ $9HbP8$insert(_el$2, $9HbP8$createComponent((0, $fbbadcb080ad1d4a$export$8be2714ec7f169ee), {
456
+ height_: arrow_height_,
457
+ width_: arrow_width_
458
+ }));
437
459
  return _el$2;
438
460
  })()]
439
461
  },
@@ -458,6 +480,8 @@ function $c4492d24952ed731$export$d41d19e89346fa2({
458
480
  const is_showing_something = $9HbP8$createMemo(() => recommendations_resource_.loading || recommendations_resource_()?.length);
459
481
  const num_placeholders_ = () => 20;
460
482
  const slider = $9HbP8$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
483
+ arrow_height_: 25,
484
+ arrow_width_: 12.5,
461
485
  disable_fading_: true,
462
486
  slider_ref_: slider => {
463
487
  const {
@@ -502,34 +526,66 @@ function $c4492d24952ed731$export$d41d19e89346fa2({
502
526
  children: slider
503
527
  });
504
528
  }
529
+ function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
530
+ const component_in_error_boundary = do_with_elements => {
531
+ const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
532
+ severity_: "error",
533
+ message_: error_message,
534
+ get children() {
535
+ const elements = component();
536
+ do_with_elements?.(elements);
537
+ return elements;
538
+ }
539
+ });
540
+ // This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
541
+ if (typeof error_boundary_wrapped === "function")
542
+ // @ts-ignore
543
+ return error_boundary_wrapped();
544
+ // On the server it returns a string, so we just return that
545
+ return error_boundary_wrapped;
546
+ };
547
+ const owner = $9HbP8$getOwner();
548
+ if (owner == null) return $9HbP8$createRoot(dispose => {
549
+ // 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
550
+ return component_in_error_boundary(elements => {
551
+ const have_multiple = Array.isArray(elements);
552
+ if (have_multiple ? !elements?.length : !elements) return;
553
+ (0, $9HbP8$observer).onremoved(have_multiple ? elements[0] : elements, dispose);
554
+ });
555
+ });else
556
+ // we're already in a root so cleanups are handled
557
+ return component_in_error_boundary();
558
+ }
505
559
  const $ee116da074deb002$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<div class="depict recommendations"></div>`, 2);
506
560
  function $ee116da074deb002$export$9574e176201e5e8d(props) {
507
- const grid_spacing_override = $9HbP8$createMemo(() => {
508
- const {
509
- grid_spacing: grid_spacing
510
- } = props; // can be reactive
511
- return typeof grid_spacing === "string" ? {
512
- grid_spacing: grid_spacing
513
- } : {
514
- override_vertical_spacing: grid_spacing.vertical,
515
- grid_spacing: grid_spacing.horizontal
516
- };
517
- });
518
- const [recommendations_resource_] = $9HbP8$createResource(() => props.recommendations, recs => recs);
519
- return (() => {
520
- const _el$ = $9HbP8$getNextElement($ee116da074deb002$var$_tmpl$);
521
- $9HbP8$insert(_el$, () => $c4492d24952ed731$export$d41d19e89346fa2({
522
- product_card_template_: (...args) => props.product_card_template(...args),
523
- recommendations_resource_: recommendations_resource_,
524
- market_: () => props.market,
525
- merchant_: () => props.merchant,
526
- layout_options_: $9HbP8$createMemo(() => ({
527
- cols_at_size: $b5cccc8ee7d24677$export$6daf8749b65a1b77($1848f7cca286fbab$export$ff7109b9b2b206ba(props.cols_at_size)),
528
- ...grid_spacing_override()
529
- }))
530
- }));
531
- return _el$;
532
- })();
561
+ return $16b52438165aafe2$export$23fca46f3143581f(() => {
562
+ const grid_spacing_override = $9HbP8$createMemo(() => {
563
+ const {
564
+ grid_spacing: grid_spacing
565
+ } = props; // can be reactive
566
+ return typeof grid_spacing === "string" ? {
567
+ grid_spacing: grid_spacing
568
+ } : {
569
+ override_vertical_spacing: grid_spacing.vertical,
570
+ grid_spacing: grid_spacing.horizontal
571
+ };
572
+ });
573
+ const [recommendations_resource_] = $9HbP8$createResource(() => props.recommendations, recs => recs);
574
+ return (() => {
575
+ const _el$ = $9HbP8$getNextElement($ee116da074deb002$var$_tmpl$);
576
+ $9HbP8$insert(_el$, () => $c4492d24952ed731$export$d41d19e89346fa2({
577
+ product_card_template_: (...args) => props.product_card_template(...args),
578
+ recommendations_resource_: recommendations_resource_,
579
+ market_: () => props.market,
580
+ merchant_: () => props.merchant,
581
+ layout_options_: $9HbP8$createMemo(() => ({
582
+ cols_at_size: $b5cccc8ee7d24677$export$6daf8749b65a1b77($1848f7cca286fbab$export$ff7109b9b2b206ba(props.cols_at_size)),
583
+ ...grid_spacing_override()
584
+ }))
585
+ }));
586
+ return _el$;
587
+ })();
588
+ }, "RecommendationSlider failed");
533
589
  }
534
590
  const $3da8afe3ed57cf34$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<div class="recommendation-grid"><!#><!/><!#><!/></div>`, 6);
535
591
  function $3da8afe3ed57cf34$export$7da560f849543dff({
@@ -592,46 +648,48 @@ function $3da8afe3ed57cf34$export$7da560f849543dff({
592
648
  const $9ea5383493360761$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<button class="show-more major" type="button"></button>`, 2),
593
649
  $9ea5383493360761$var$_tmpl$2 = /*#__PURE__*/$9HbP8$template(`<div class="depict plp recommendations"></div>`, 2);
594
650
  function $9ea5383493360761$export$9756467d34d91cdb(props) {
595
- const rows_object_ = $9HbP8$createMemo(() => {
596
- const view_more_button = props.view_more_button;
597
- if (!view_more_button) return "all";
598
- return {
599
- start_rows: view_more_button.start_rows,
600
- rows_per_click: view_more_button.rows_per_click,
601
- button: (() => {
602
- const _el$ = $9HbP8$getNextElement($9ea5383493360761$var$_tmpl$);
603
- $9HbP8$insert(_el$, () => view_more_button.text);
604
- return _el$;
605
- })()
606
- };
607
- });
608
- const grid_spacing_override = $9HbP8$createMemo(() => {
609
- const {
610
- grid_spacing: grid_spacing
611
- } = props; // can be reactive
612
- return typeof grid_spacing === "string" ? {
613
- grid_spacing: grid_spacing
614
- } : {
615
- override_vertical_spacing: grid_spacing.vertical,
616
- grid_spacing: grid_spacing.horizontal
617
- };
618
- });
619
- const [recommendations_resource_] = $9HbP8$createResource(() => props.recommendations, recs => recs);
620
- return (() => {
621
- const _el$2 = $9HbP8$getNextElement($9ea5383493360761$var$_tmpl$2);
622
- $9HbP8$insert(_el$2, () => $3da8afe3ed57cf34$export$7da560f849543dff({
623
- rows_object_: rows_object_,
624
- product_card_template_: (...args) => props.product_card_template(...args),
625
- recommendations_resource_: recommendations_resource_,
626
- market_: () => props.market,
627
- merchant_: () => props.merchant,
628
- layout_options_: $9HbP8$createMemo(() => ({
629
- cols_at_size: $b5cccc8ee7d24677$export$6daf8749b65a1b77($1848f7cca286fbab$export$ff7109b9b2b206ba(props.cols_at_size)),
630
- ...grid_spacing_override()
631
- }))
632
- }));
633
- return _el$2;
634
- })();
651
+ return $16b52438165aafe2$export$23fca46f3143581f(() => {
652
+ const rows_object_ = $9HbP8$createMemo(() => {
653
+ const view_more_button = props.view_more_button;
654
+ if (!view_more_button) return "all";
655
+ return {
656
+ start_rows: view_more_button.start_rows,
657
+ rows_per_click: view_more_button.rows_per_click ?? 2,
658
+ button: (() => {
659
+ const _el$ = $9HbP8$getNextElement($9ea5383493360761$var$_tmpl$);
660
+ $9HbP8$insert(_el$, () => view_more_button.text);
661
+ return _el$;
662
+ })()
663
+ };
664
+ });
665
+ const grid_spacing_override = $9HbP8$createMemo(() => {
666
+ const {
667
+ grid_spacing: grid_spacing
668
+ } = props; // can be reactive
669
+ return typeof grid_spacing === "string" ? {
670
+ grid_spacing: grid_spacing
671
+ } : {
672
+ override_vertical_spacing: grid_spacing.vertical,
673
+ grid_spacing: grid_spacing.horizontal
674
+ };
675
+ });
676
+ const [recommendations_resource_] = $9HbP8$createResource(() => props.recommendations, recs => recs);
677
+ return (() => {
678
+ const _el$2 = $9HbP8$getNextElement($9ea5383493360761$var$_tmpl$2);
679
+ $9HbP8$insert(_el$2, () => $3da8afe3ed57cf34$export$7da560f849543dff({
680
+ rows_object_: rows_object_,
681
+ product_card_template_: (...args) => props.product_card_template(...args),
682
+ recommendations_resource_: recommendations_resource_,
683
+ market_: () => props.market,
684
+ merchant_: () => props.merchant,
685
+ layout_options_: $9HbP8$createMemo(() => ({
686
+ cols_at_size: $b5cccc8ee7d24677$export$6daf8749b65a1b77($1848f7cca286fbab$export$ff7109b9b2b206ba(props.cols_at_size)),
687
+ ...grid_spacing_override()
688
+ }))
689
+ }));
690
+ return _el$2;
691
+ })();
692
+ }, "RecommendationGrid failed");
635
693
  }
636
694
  const $e8ffe11ed01df0fe$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<img>`, 1);
637
695
  function $e8ffe11ed01df0fe$export$e6fffe67d4cdd848(whatToWatch) {
@@ -1303,7 +1361,7 @@ const $87c712b5b33f24f7$export$48513f6b9f8ce62d = props => {
1303
1361
  const label = $9HbP8$createMemo(() => props.label_);
1304
1362
  const checked = $9HbP8$createMemo(() => props.checked_);
1305
1363
  const value = $9HbP8$createMemo(() => props.value_);
1306
- const is_count_zero = $9HbP8$createMemo(() => props.is_count_zero_);
1364
+ const is_count_zero = $9HbP8$createMemo(() => props.is_count_zero_ || count() === 0);
1307
1365
  const id = $9HbP8$make_random_classname();
1308
1366
  return (/* We can't use actual margin because ExpandingContainer gets messed up */(() => {
1309
1367
  const _el$ = $9HbP8$getNextElement($87c712b5b33f24f7$var$_tmpl$2),
@@ -1339,14 +1397,17 @@ const $87c712b5b33f24f7$export$48513f6b9f8ce62d = props => {
1339
1397
  }
1340
1398
  }), _el$8, _co$);
1341
1399
  $9HbP8$effect(_p$ => {
1342
- const _v$ = !!(is_count_zero() || count() === 0),
1343
- _v$2 = value();
1400
+ const _v$ = !!is_count_zero(),
1401
+ _v$2 = value(),
1402
+ _v$3 = !checked() && is_count_zero();
1344
1403
  _v$ !== _p$._v$ && _el$.classList.toggle("count-0", _p$._v$ = _v$);
1345
1404
  _v$2 !== _p$._v$2 && $9HbP8$setAttribute(_el$3, "name", _p$._v$2 = _v$2);
1405
+ _v$3 !== _p$._v$3 && (_el$3.disabled = _p$._v$3 = _v$3);
1346
1406
  return _p$;
1347
1407
  }, {
1348
1408
  _v$: undefined,
1349
- _v$2: undefined
1409
+ _v$2: undefined,
1410
+ _v$3: undefined
1350
1411
  });
1351
1412
  $9HbP8$effect(() => _el$3.checked = checked());
1352
1413
  return _el$;
@@ -2183,6 +2244,7 @@ function $1c8cac76cb67e9af$var$render_stuff(data, existing_filter, i18n_) {
2183
2244
  return $9HbP8$createMemo(() => value()?.is_expanded_?.ui_should_show_expanded_?.() ?? false);
2184
2245
  }
2185
2246
  }), _el$16, _co$5);
2247
+ $9HbP8$effect(() => _el$14.classList.toggle("count-0", !!(value()?.count_ === 0)));
2186
2248
  return _el$12;
2187
2249
  })();
2188
2250
  },
@@ -2374,7 +2436,8 @@ function $1c8cac76cb67e9af$var$expand_until_choice(data_structure) {
2374
2436
  });
2375
2437
  }
2376
2438
  const $93716a9ad0dea854$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<div class="checkbox-grid"></div>`, 2),
2377
- $93716a9ad0dea854$var$_tmpl$2 = /*#__PURE__*/$9HbP8$template(`<button class="major-minor-transition"></button>`, 2);
2439
+ $93716a9ad0dea854$var$_tmpl$2 = /*#__PURE__*/$9HbP8$template(`<span class="count-wrapper"><span class="count"></span></span>`, 4),
2440
+ $93716a9ad0dea854$var$_tmpl$3 = /*#__PURE__*/$9HbP8$template(`<button class="major-minor-transition"><!#><!/><!#><!/></button>`, 6);
2378
2441
  const $93716a9ad0dea854$export$414f6a19d38e655c = ({
2379
2442
  filter_: filter_,
2380
2443
  selected_filters_: [get_selected_filters, set_selected_filters]
@@ -2406,7 +2469,11 @@ const $93716a9ad0dea854$export$414f6a19d38e655c = ({
2406
2469
  children: value => {
2407
2470
  const is_selected = $9HbP8$createMemo(() => existing_filter()?.data?.includes(value().value_));
2408
2471
  return (() => {
2409
- const _el$2 = $9HbP8$getNextElement($93716a9ad0dea854$var$_tmpl$2);
2472
+ const _el$2 = $9HbP8$getNextElement($93716a9ad0dea854$var$_tmpl$3),
2473
+ _el$5 = _el$2.firstChild,
2474
+ [_el$6, _co$] = $9HbP8$getNextMarker(_el$5.nextSibling),
2475
+ _el$7 = _el$6.nextSibling,
2476
+ [_el$8, _co$2] = $9HbP8$getNextMarker(_el$7.nextSibling);
2410
2477
  $9HbP8$addEventListener(_el$2, "click", $9HbP8$catchify(() => {
2411
2478
  const set_filter = existing_filter();
2412
2479
  const {
@@ -2427,16 +2494,30 @@ const $93716a9ad0dea854$export$414f6a19d38e655c = ({
2427
2494
  const selected_filters = [...get_selected_filters().filter(f => f !== set_filter), ...(new_filter_object.data.length ? [new_filter_object] : [])];
2428
2495
  set_selected_filters(selected_filters);
2429
2496
  }), true);
2430
- $9HbP8$insert(_el$2, () => value().value_);
2497
+ $9HbP8$insert(_el$2, () => value().value_, _el$6, _co$);
2498
+ $9HbP8$insert(_el$2, $9HbP8$createComponent((0, $9HbP8$Show), {
2499
+ get when() {
2500
+ return value().count_ != undefined;
2501
+ },
2502
+ get children() {
2503
+ const _el$3 = $9HbP8$getNextElement($93716a9ad0dea854$var$_tmpl$2),
2504
+ _el$4 = _el$3.firstChild;
2505
+ $9HbP8$insert(_el$4, () => value().count_);
2506
+ return _el$3;
2507
+ }
2508
+ }), _el$8, _co$2);
2431
2509
  $9HbP8$effect(_p$ => {
2432
- const _v$ = !is_selected(),
2433
- _v$2 = !!is_selected();
2434
- _v$ !== _p$._v$ && _el$2.classList.toggle("minor", _p$._v$ = _v$);
2435
- _v$2 !== _p$._v$2 && _el$2.classList.toggle("major", _p$._v$2 = _v$2);
2510
+ const _v$ = value().count_ === 0 && !is_selected(),
2511
+ _v$2 = !is_selected(),
2512
+ _v$3 = !!is_selected();
2513
+ _v$ !== _p$._v$ && (_el$2.disabled = _p$._v$ = _v$);
2514
+ _v$2 !== _p$._v$2 && _el$2.classList.toggle("minor", _p$._v$2 = _v$2);
2515
+ _v$3 !== _p$._v$3 && _el$2.classList.toggle("major", _p$._v$3 = _v$3);
2436
2516
  return _p$;
2437
2517
  }, {
2438
2518
  _v$: undefined,
2439
- _v$2: undefined
2519
+ _v$2: undefined,
2520
+ _v$3: undefined
2440
2521
  });
2441
2522
  $9HbP8$runHydrationEvents();
2442
2523
  return _el$2;
@@ -6262,35 +6343,6 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
6262
6343
  return _el$13;
6263
6344
  })()];
6264
6345
  }
6265
- function $16b52438165aafe2$export$23fca46f3143581f(component, error_message) {
6266
- const component_in_error_boundary = do_with_elements => {
6267
- const error_boundary_wrapped = $b7436a6d1fd64e3b$export$b69d0d92862de18b({
6268
- severity_: "error",
6269
- message_: error_message,
6270
- get children() {
6271
- const elements = component();
6272
- do_with_elements?.(elements);
6273
- return elements;
6274
- }
6275
- });
6276
- // This might return an accessor, in that case we need to "unwrap" it since our SDK consumers expect HTML elements or arrays thereof
6277
- if (typeof error_boundary_wrapped === "function")
6278
- // @ts-ignore
6279
- return error_boundary_wrapped();
6280
- // On the server it returns a string, so we just return that
6281
- return error_boundary_wrapped;
6282
- };
6283
- const owner = $9HbP8$getOwner();
6284
- if (owner == null) return $9HbP8$createRoot(dispose => {
6285
- // 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
6286
- return component_in_error_boundary(elements => {
6287
- if (!elements?.length) return;
6288
- (0, $9HbP8$observer).onremoved(elements[0], dispose);
6289
- });
6290
- });else
6291
- // we're already in a root so cleanups are handled
6292
- return component_in_error_boundary();
6293
- }
6294
6346
  function $ccd5db07a3a069c5$export$477caf01aecaeb2a(options) {
6295
6347
  const router_ = options.router_;
6296
6348
  const search_query_url_param_name_ = "search_query_url_param_name_" in options ? options.search_query_url_param_name_ : undefined;
@@ -7936,7 +7988,7 @@ function $190927650b4840eb$export$605674723bcc715c(props = {}) {
7936
7988
  const $cea52f6b24092f05$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<a class="suggestion"></a>`, 2),
7937
7989
  $cea52f6b24092f05$var$_tmpl$2 = /*#__PURE__*/$9HbP8$template(`<div class="search-icon"></div>`, 2),
7938
7990
  $cea52f6b24092f05$var$_tmpl$3 = /*#__PURE__*/$9HbP8$template(`<span class="type"></span>`, 2),
7939
- $cea52f6b24092f05$var$_tmpl$4 = /*#__PURE__*/$9HbP8$template(`<div><!#><!/><span class="value"></span></div>`, 6),
7991
+ $cea52f6b24092f05$var$_tmpl$4 = /*#__PURE__*/$9HbP8$template(`<div class="with-parent-title"><!#><!/><span class="value line-clamp"></span></div>`, 6),
7940
7992
  $cea52f6b24092f05$var$_tmpl$5 = /*#__PURE__*/$9HbP8$template(`<div class="with-icon"><!#><!/><!#><!/></div>`, 6),
7941
7993
  $cea52f6b24092f05$var$_tmpl$6 = /*#__PURE__*/$9HbP8$template(`<h2 class="text"></h2>`, 2),
7942
7994
  $cea52f6b24092f05$var$_tmpl$7 = /*#__PURE__*/$9HbP8$template(`<div class="suggestion-container query"><!#><!/><!#><!/></div>`, 6),
@@ -9264,7 +9316,9 @@ function $b2bf2cdcff8142d8$export$f631859cab12b342({
9264
9316
  }
9265
9317
  function $b26bdbd081f63e3f$export$9ff751cd77687edc({
9266
9318
  search_results_: search_results_,
9267
- router_: router_
9319
+ router_: router_,
9320
+ queries_without_content_results_: queries_without_content_results_,
9321
+ get_search_query_: get_search_query_
9268
9322
  }) {
9269
9323
  const content_results = $9HbP8$createMemo(() => search_results_()?.content_search_links);
9270
9324
  const content_results_by_page_url = $9HbP8$createMemo(() => {
@@ -9277,6 +9331,10 @@ function $b26bdbd081f63e3f$export$9ff751cd77687edc({
9277
9331
  }
9278
9332
  return map;
9279
9333
  });
9334
+ $9HbP8$createEffect(() => {
9335
+ const results = content_results();
9336
+ if (Array.isArray(results) && results.length === 0) queries_without_content_results_.add($9HbP8$untrack(get_search_query_));
9337
+ });
9280
9338
  return $9HbP8$createComponent((0, $9HbP8$For), {
9281
9339
  get each() {
9282
9340
  return [...content_results_by_page_url().keys()];
@@ -9329,8 +9387,15 @@ function $49de9d31aeea1b5e$export$6d0c9c22f6652669({
9329
9387
  number_: num_results,
9330
9388
  i18n_: i18n_
9331
9389
  });
9332
- const [is_showing_placeholders, set_is_showing_placeholders] = $9HbP8$createSignal(false);
9390
+ const queries_without_content_results_ = new (0, $9HbP8$ListenableSet)();
9391
+ const [check_query, set_check_query] = $9HbP8$createSignal(false);
9392
+ const placeholders_enabled = $9HbP8$createMemo(() => {
9393
+ // don't show placeholders when the user toggles filters
9394
+ check_query();
9395
+ return !queries_without_content_results_.has(get_search_query_());
9396
+ });
9333
9397
  const rows_object = $49de9d31aeea1b5e$var$make_state_saved_rows(content_results_rows_, i18n_);
9398
+ for (const ev of ["add", "delete"]) queries_without_content_results_.addEventListener(ev, () => set_check_query(prev => !prev));
9334
9399
  return (() => {
9335
9400
  const _el$ = $9HbP8$getNextElement($49de9d31aeea1b5e$var$_tmpl$),
9336
9401
  _el$2 = _el$.firstChild,
@@ -9356,36 +9421,25 @@ function $49de9d31aeea1b5e$export$6d0c9c22f6652669({
9356
9421
  get children() {
9357
9422
  return $9HbP8$createComponent((0, $9HbP8$Suspense), {
9358
9423
  get fallback() {
9359
- return (() => {
9360
- set_is_showing_placeholders(true);
9361
- $9HbP8$onCleanup(() => set_is_showing_placeholders(false));
9362
- return $9HbP8$createComponent((0, $9d5b3ed1fc91c672$export$4405d077f0a20494), {
9363
- content_results_rows_: content_results_rows_,
9364
- get cols_at_size_() {
9365
- return $9HbP8$createMemo(() => layout_options_().cols_at_size);
9366
- }
9367
- });
9368
- })();
9424
+ return $9HbP8$createComponent((0, $9d5b3ed1fc91c672$export$4405d077f0a20494), {
9425
+ content_results_rows_: content_results_rows_,
9426
+ get cols_at_size_() {
9427
+ return $9HbP8$createMemo(() => layout_options_().cols_at_size);
9428
+ }
9429
+ });
9369
9430
  },
9370
9431
  get children() {
9371
9432
  return $9HbP8$createComponent((0, $b26bdbd081f63e3f$export$9ff751cd77687edc), {
9372
9433
  router_: router_,
9373
- search_results_: search_results_
9434
+ search_results_: search_results_,
9435
+ queries_without_content_results_: queries_without_content_results_,
9436
+ get_search_query_: get_search_query_
9374
9437
  });
9375
9438
  }
9376
9439
  });
9377
9440
  }
9378
9441
  })), _el$5, _co$2);
9379
- $9HbP8$effect(_p$ => {
9380
- const _v$ = !!is_showing_placeholders(),
9381
- _v$2 = is_loading_() || content_results()?.length > 0 ? "" : "none";
9382
- _v$ !== _p$._v$ && _el$.classList.toggle("loading", _p$._v$ = _v$);
9383
- _v$2 !== _p$._v$2 && _el$.style.setProperty("display", _p$._v$2 = _v$2);
9384
- return _p$;
9385
- }, {
9386
- _v$: undefined,
9387
- _v$2: undefined
9388
- });
9442
+ $9HbP8$effect(() => _el$.style.setProperty("display", is_loading_() && placeholders_enabled() || content_results()?.length > 0 ? "" : "none"));
9389
9443
  return _el$;
9390
9444
  })();
9391
9445
  }
@@ -9820,7 +9874,7 @@ const $806c97b931758897$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<div class="d
9820
9874
  * Type for the private properties that are shared between the different exported search SDK wrapper functions. SDK users are not allowed to change/access these, they're an internal implementation detail.
9821
9875
  */
9822
9876
  const $806c97b931758897$var$privately_shared_properties = /*@__PURE__*/new WeakMap();
9823
- const $806c97b931758897$var$content_search_default = false;
9877
+ const $806c97b931758897$var$content_search_default = true;
9824
9878
  const $806c97b931758897$var$min_products_to_fetch_ = 20;
9825
9879
  const $806c97b931758897$export$bde3eb976dfded9 = depict_search => $806c97b931758897$var$privately_shared_properties.get(depict_search)?.search_query_updating_blocked_;
9826
9880
  class $806c97b931758897$export$ac6237957a15b3f0 {