@depict-ai/ui 4.10.12 → 4.10.14

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.
@@ -109,7 +109,7 @@ $parcel$export(module.exports, "BreadCrumbs", () => $1f4925833f07df29$export$5b7
109
109
  $parcel$export(module.exports, "QuickLinks", () => $1f4925833f07df29$export$de035477d6fef996);
110
110
  $parcel$export(module.exports, "CategoryPage", () => $14f289047713d67a$export$e2bf8ce7779e827e);
111
111
  /*! Depict.ai search and product listing SDK */
112
- const $b757f75811f3261f$export$83d89fbfd8236492 = "4.10.12";
112
+ const $b757f75811f3261f$export$83d89fbfd8236492 = "4.10.14";
113
113
  function $b54e6192d0caa293$export$d9f36cf74e24d595(media_query) {
114
114
  const signal = $5vyXB$solidjs.createSignal(false);
115
115
  $5vyXB$solidjs.onCleanup($5vyXB$depictaiutilishared.javascript_media_query(media_query, ({
@@ -2210,12 +2210,14 @@ function $cc43b6428000c4bf$export$f21ab0717a89c77f(props) {
2210
2210
  height: "12"
2211
2211
  }), () => $5vyXB$solidjsweb.ssr($cc43b6428000c4bf$var$_tmpl$), true);
2212
2212
  }
2213
- var $0fe1e7efdf4200d6$var$_tmpl$ = ["<button", ' type="button" class="', '"><!--$-->', "<!--/--><span>", "</span></button>"];
2213
+ var $0fe1e7efdf4200d6$var$_tmpl$ = ["<button", ' type="button" class="', '"', "><!--$-->", "<!--/--><span>", "</span></button>"];
2214
2214
  function $0fe1e7efdf4200d6$export$ca21a16d65b3dd8({
2215
2215
  show_extras_: [get_show_extras, set_show_extras],
2216
- i18n_: i18n_
2216
+ i18n_: i18n_,
2217
+ expanding_container_element_: expanding_container_element_
2217
2218
  }) {
2218
- return $5vyXB$solidjsweb.ssr($0fe1e7efdf4200d6$var$_tmpl$, $5vyXB$solidjsweb.ssrHydrationKey(), `expand-filter ${get_show_extras() ? "expanded" : ""}`, $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $cc43b6428000c4bf$export$f21ab0717a89c77f), {})), get_show_extras() ? $5vyXB$solidjsweb.escape(i18n_.view_less_()) : $5vyXB$solidjsweb.escape(i18n_.view_more_()));
2219
+ let button;
2220
+ return $5vyXB$solidjsweb.ssr($0fe1e7efdf4200d6$var$_tmpl$, $5vyXB$solidjsweb.ssrHydrationKey(), `expand-filter ${get_show_extras() ? "expanded" : ""}`, $5vyXB$solidjsweb.ssrAttribute("aria-expanded", $5vyXB$solidjsweb.escape(get_show_extras(), true), false), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $cc43b6428000c4bf$export$f21ab0717a89c77f), {})), get_show_extras() ? $5vyXB$solidjsweb.escape(i18n_.view_less_()) : $5vyXB$solidjsweb.escape(i18n_.view_more_()));
2219
2221
  }
2220
2222
  var $d023ed916c84e75d$var$_tmpl$ = ["<span", ' class="highlighted-part">', "</span>"],
2221
2223
  $d023ed916c84e75d$var$_tmpl$2 = ["<span", ' class="', '"', ">", "</span>"];
@@ -2367,7 +2369,8 @@ function $d94869c80e337a3d$export$dd948f91abc3a1c4({
2367
2369
  $5vyXB$solidjs.createRenderEffect(() => {
2368
2370
  set_view_more_button_below_group_(togglable_rest() ? $5vyXB$solidjsweb.createComponent((0, $0fe1e7efdf4200d6$export$ca21a16d65b3dd8), {
2369
2371
  show_extras_: show_extras_signal,
2370
- i18n_: i18n_
2372
+ i18n_: i18n_,
2373
+ expanding_container_element_: expanding_container_els
2371
2374
  }) : []);
2372
2375
  });
2373
2376
  $5vyXB$solidjs.onCleanup(() => set_view_more_button_below_group_());
@@ -2446,7 +2449,7 @@ function $c1dc1554c1b94233$export$430444115f70a734({
2446
2449
  }
2447
2450
  })));
2448
2451
  }
2449
- var $0b7222ba8a8bb72f$var$_tmpl$ = ["<div", ' class="', '"><div class="input-group"><div class="field"><input', ' type="number"', '></div><div class="separator">-</div><div class="field"><input', ' type="number"', "></div></div><!--$-->", '<!--/--><div class="value-text"><span class="min"><!--$-->', "<!--/--><!--$-->", "<!--/--><!--$-->", '<!--/--></span><span class="max"><!--$-->', "<!--/--><!--$-->", "<!--/--><!--$-->", "<!--/--></span></div></div>"],
2452
+ var $0b7222ba8a8bb72f$var$_tmpl$ = ["<div", ' class="', '"><div class="input-group"><div class="field"><input', ' type="number"', '></div><div class="separator" aria-hidden="true">-</div><div class="field"><input', ' type="number"', "></div></div><!--$-->", '<!--/--><div class="value-text"><span class="min"><!--$-->', "<!--/--><!--$-->", "<!--/--><!--$-->", '<!--/--></span><span class="max"><!--$-->', "<!--/--><!--$-->", "<!--/--><!--$-->", "<!--/--></span></div></div>"],
2450
2453
  $0b7222ba8a8bb72f$var$_tmpl$2 = ["<div", ' class="slider"><div class="progress" style="', '"></div></div>'],
2451
2454
  $0b7222ba8a8bb72f$var$_tmpl$3 = ["<div", ' class="range-group"><input', ' type="range"', ' step="any"><input', ' type="range"', ' step="any"></div>'];
2452
2455
  function $0b7222ba8a8bb72f$export$e0d834a0ad870cda({
@@ -2539,7 +2542,8 @@ function $0b7222ba8a8bb72f$var$RangeSelector({
2539
2542
  min_: min_,
2540
2543
  current_range_: current_range_,
2541
2544
  i18n_: i18n_,
2542
- should_be_disabled_: should_be_disabled_
2545
+ should_be_disabled_: should_be_disabled_,
2546
+ priceFormatting_: price_formatting_
2543
2547
  })), $5vyXB$solidjsweb.escape(pre_price()), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $d659702496cb72ea$export$a71e92cfbb498adc), {
2544
2548
  get price_() {
2545
2549
  return min_();
@@ -2561,7 +2565,8 @@ function $0b7222ba8a8bb72f$var$ExponentialSlider({
2561
2565
  min_: min_,
2562
2566
  i18n_: i18n_,
2563
2567
  max_: max_,
2564
- should_be_disabled_: should_be_disabled_
2568
+ should_be_disabled_: should_be_disabled_,
2569
+ priceFormatting_: priceFormatting_
2565
2570
  }) {
2566
2571
  // inspired by https://observablehq.com/@mbostock/nonlinear-slider
2567
2572
  const transform_linear_to_nonlinear = ([smaller, larger]) => [Math.sqrt(smaller), Math.sqrt(larger)];
@@ -2595,7 +2600,8 @@ function $0b7222ba8a8bb72f$var$ExponentialSlider({
2595
2600
  max_: modified_max,
2596
2601
  offset_value_calculator_: offset_value_calculator_,
2597
2602
  i18n_: i18n_,
2598
- should_be_disabled_: should_be_disabled_
2603
+ should_be_disabled_: should_be_disabled_,
2604
+ priceFormatting_: priceFormatting_
2599
2605
  });
2600
2606
  }
2601
2607
  function $0b7222ba8a8bb72f$var$LinearSlider({
@@ -2604,12 +2610,17 @@ function $0b7222ba8a8bb72f$var$LinearSlider({
2604
2610
  current_range_: current_range_,
2605
2611
  offset_value_calculator_: offset_value_calculator_,
2606
2612
  i18n_: i18n_,
2607
- should_be_disabled_: should_be_disabled_
2613
+ should_be_disabled_: should_be_disabled_,
2614
+ priceFormatting_: priceFormatting_
2608
2615
  }) {
2609
2616
  let range_input_1;
2610
2617
  let range_input_2;
2611
2618
  let clickable_slider;
2612
2619
  const [get_current_range, set_current_range] = current_range_;
2620
+ const formatRealPrice = value => {
2621
+ const priceFormatting = priceFormatting_();
2622
+ return priceFormatting.pre_ + $5vyXB$depictaiutilishared.standard_price_format(value, priceFormatting.places_after_comma_, priceFormatting.decimal_places_delimiter_, priceFormatting.thousands_delimiter_) + priceFormatting.post_;
2623
+ };
2613
2624
  const progress_styling = $5vyXB$solidjs.createMemo(() => {
2614
2625
  const min = min_();
2615
2626
  const span = max_() - min;
@@ -2628,13 +2639,13 @@ function $0b7222ba8a8bb72f$var$LinearSlider({
2628
2639
  el.value = get_current_range()[index];
2629
2640
  });
2630
2641
  };
2631
- return [$5vyXB$solidjsweb.ssr($0b7222ba8a8bb72f$var$_tmpl$2, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrStyle(progress_styling())), $5vyXB$solidjsweb.ssr($0b7222ba8a8bb72f$var$_tmpl$3, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("disabled", should_be_disabled_(), true), $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape(i18n_.range_filter_low_point_aria_label_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("min", $5vyXB$solidjsweb.escape(min_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("max", $5vyXB$solidjsweb.escape(max_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("value", $5vyXB$solidjsweb.escape($5vyXB$solidjs.createMemo(() => {
2642
+ return [$5vyXB$solidjsweb.ssr($0b7222ba8a8bb72f$var$_tmpl$2, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrStyle(progress_styling())), $5vyXB$solidjsweb.ssr($0b7222ba8a8bb72f$var$_tmpl$3, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("disabled", should_be_disabled_(), true), $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape(i18n_.range_filter_low_point_aria_label_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("aria-valuetext", $5vyXB$solidjsweb.escape(formatRealPrice(get_current_range()[0]), true), false) + $5vyXB$solidjsweb.ssrAttribute("min", $5vyXB$solidjsweb.escape(min_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("max", $5vyXB$solidjsweb.escape(max_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("value", $5vyXB$solidjsweb.escape($5vyXB$solidjs.createMemo(() => {
2632
2643
  min_();
2633
2644
  max_();
2634
2645
  return get_current_range()[0];
2635
2646
  }, undefined, {
2636
2647
  equals: false
2637
- })(), true), false), $5vyXB$solidjsweb.ssrAttribute("disabled", should_be_disabled_(), true) + $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape(i18n_.range_filter_high_point_aria_label_(), true), false), $5vyXB$solidjsweb.ssrAttribute("min", $5vyXB$solidjsweb.escape(min_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("max", $5vyXB$solidjsweb.escape(max_(), true), false))];
2648
+ })(), true), false), $5vyXB$solidjsweb.ssrAttribute("disabled", should_be_disabled_(), true) + $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape(i18n_.range_filter_high_point_aria_label_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("aria-valuetext", $5vyXB$solidjsweb.escape(formatRealPrice(get_current_range()[1]), true), false), $5vyXB$solidjsweb.ssrAttribute("min", $5vyXB$solidjsweb.escape(min_(), true), false) + $5vyXB$solidjsweb.ssrAttribute("max", $5vyXB$solidjsweb.escape(max_(), true), false))];
2638
2649
  }
2639
2650
  function $0b7222ba8a8bb72f$var$set_range_with_sanitation(min_, max_, current_range_signal, index, target_el, get_offset_value = (value, how_many) => value + how_many) {
2640
2651
  let value_as_number = +target_el.value;
@@ -3036,7 +3047,8 @@ function $3bdc00a1353c1150$export$a32086fa6616eafd({
3036
3047
  $5vyXB$solidjs.createRenderEffect(() => {
3037
3048
  set_view_more_button_below_group(some_top_level_are_hidden() ? $5vyXB$solidjsweb.createComponent((0, $0fe1e7efdf4200d6$export$ca21a16d65b3dd8), {
3038
3049
  show_extras_: show_extras,
3039
- i18n_: i18n_
3050
+ i18n_: i18n_,
3051
+ expanding_container_element_: expanding_container_els
3040
3052
  }) : []);
3041
3053
  });
3042
3054
  $5vyXB$solidjs.onCleanup(() => set_view_more_button_below_group());
@@ -3430,6 +3442,13 @@ const $0ef1681699140f1a$export$414f6a19d38e655c = ({
3430
3442
  const label = $5vyXB$solidjs.createMemo(() => value().name_ || value().value_ + "");
3431
3443
  const count_zero = $5vyXB$solidjs.createMemo(() => value().count_ === 0);
3432
3444
  return $5vyXB$solidjsweb.ssrElement("button", $5vyXB$solidjsweb.mergeProps(attributes, {
3445
+ type: "button",
3446
+ get ["aria-pressed"]() {
3447
+ return is_selected();
3448
+ },
3449
+ get ["aria-label"]() {
3450
+ return value().count_ != undefined ? `${label()}, ${value().count_}` : label();
3451
+ },
3433
3452
  get disabled() {
3434
3453
  return count_zero() && !is_selected();
3435
3454
  },
@@ -3600,7 +3619,14 @@ function $b51a2b8b9355e66c$export$82ed4b28ecb67608({
3600
3619
  return !!data?.some(item => $daa394359b026187$export$325f75597868c4f0(item) === value);
3601
3620
  });
3602
3621
  const value = $5vyXB$solidjs.createMemo(() => checkbox().value_);
3603
- const label_text = $5vyXB$solidjs.createMemo(() => checkbox().name_ || value() + "");
3622
+ const label_text = $5vyXB$solidjs.createMemo(() => {
3623
+ const name = checkbox().name_;
3624
+ if (name) return name;
3625
+ const value_string = value() + "";
3626
+ if (backendFilterV2()) return value_string;
3627
+ // Legacy values are "Name;#hex" - split is used to get the name so that screen readers don't announce the hex code
3628
+ return value_string.split(";")[0] || value_string;
3629
+ });
3604
3630
  const count = $5vyXB$solidjs.createMemo(() => checkbox().count_);
3605
3631
  const colorNameDatasetValue = $5vyXB$solidjs.createMemo(() => {
3606
3632
  if (backendFilterV2()) return label_text();
@@ -3687,7 +3713,8 @@ function $b51a2b8b9355e66c$export$82ed4b28ecb67608({
3687
3713
  $5vyXB$solidjs.createRenderEffect(() => {
3688
3714
  set_view_more_button_below_group_(togglable_rest() ? $5vyXB$solidjsweb.createComponent((0, $0fe1e7efdf4200d6$export$ca21a16d65b3dd8), {
3689
3715
  show_extras_: show_extras_signal,
3690
- i18n_: i18n_
3716
+ i18n_: i18n_,
3717
+ expanding_container_element_: expanding_container_els
3691
3718
  }) : []);
3692
3719
  });
3693
3720
  $5vyXB$solidjs.onCleanup(() => set_view_more_button_below_group_());
@@ -4011,9 +4038,9 @@ function $47d8681015b71901$var$find_str_arr_in_str_arr_arr(operation, haystack,
4011
4038
  var $aff9a96d30ed3563$var$_tmpl$ = ["<div", ' class="filter-collapsible">', "</div>"],
4012
4039
  $aff9a96d30ed3563$var$_tmpl$2 = ["<button", ' class="clear-group"><!--$-->', "<!--/--><span>", "</span></button>"],
4013
4040
  $aff9a96d30ed3563$var$_tmpl$3 = ["<div", ' class="view-more-clear"><!--$-->', "<!--/--><!--$-->", "<!--/--></div>"],
4014
- $aff9a96d30ed3563$var$_tmpl$4 = ["<div", ' class="filter-collapsible-body"><div class="filter-part"><!--$-->', "<!--/--><!--$-->", "<!--/--></div><!--$-->", "<!--/--></div>"],
4041
+ $aff9a96d30ed3563$var$_tmpl$4 = ["<div", ' class="filter-collapsible-body"><fieldset class="filter-part"', "><!--$-->", "<!--/--><!--$-->", "<!--/--></fieldset><!--$-->", "<!--/--></div>"],
4015
4042
  $aff9a96d30ed3563$var$_tmpl$5 = ["<details", ' class="filter-collapsible"', "></details>"],
4016
- $aff9a96d30ed3563$var$_tmpl$6 = ["<summary", ' class="filter-group-summary"><div class="summary"><span>', '</span><div class="selected-w-sign"><!--$-->', "<!--/--><!--$-->", "<!--/--></div></div></summary>"],
4043
+ $aff9a96d30ed3563$var$_tmpl$6 = ["<summary", ' class="filter-group-summary"><div class="summary"><span', ">", '</span><div class="selected-w-sign"><!--$-->', "<!--/--><!--$-->", "<!--/--></div></div></summary>"],
4017
4044
  $aff9a96d30ed3563$var$_tmpl$7 = ["<div", ' class="ungrouped">', "</div>"],
4018
4045
  $aff9a96d30ed3563$var$_tmpl$8 = ["<button", ' class="clear-all-filters major">', "</button>"];
4019
4046
  function $aff9a96d30ed3563$export$3f1a388cc0d8fed7(props) {
@@ -4097,13 +4124,14 @@ function $aff9a96d30ed3563$var$ActualFilterBody(props) {
4097
4124
  const a_filter_is_selected = $5vyXB$solidjs.createMemo(() => selected_filters_in_group().size);
4098
4125
  const [get_details_width, set_get_details_width] = $5vyXB$solidjs.createSignal();
4099
4126
  const details_element_width_ = $5vyXB$solidjs.createMemo(() => get_details_width?.()?.());
4127
+ const title_id = $5vyXB$depictaiutilishared.make_random_classname();
4100
4128
  return $5vyXB$solidjsweb.createComponent((0, $a69e505a12a77874$export$6c6d7a51fa9aa15d), {
4101
4129
  is_open_: is_open,
4102
4130
  get details_() {
4103
4131
  return $5vyXB$solidjsweb.ssr($aff9a96d30ed3563$var$_tmpl$5, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("data-group-title", $5vyXB$solidjsweb.escape(section_, true), false));
4104
4132
  },
4105
4133
  get summary_() {
4106
- return $5vyXB$solidjsweb.ssr($aff9a96d30ed3563$var$_tmpl$6, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.escape(section_), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Show), {
4134
+ return $5vyXB$solidjsweb.ssr($aff9a96d30ed3563$var$_tmpl$6, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("id", $5vyXB$solidjsweb.escape(title_id, true), false), $5vyXB$solidjsweb.escape(section_), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Show), {
4107
4135
  get when() {
4108
4136
  return a_filter_is_selected();
4109
4137
  },
@@ -4125,7 +4153,7 @@ function $aff9a96d30ed3563$var$ActualFilterBody(props) {
4125
4153
  })));
4126
4154
  },
4127
4155
  get children() {
4128
- return $5vyXB$solidjsweb.ssr($aff9a96d30ed3563$var$_tmpl$4, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent(SearchThisFilterGroup_, {})), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Index), {
4156
+ return $5vyXB$solidjsweb.ssr($aff9a96d30ed3563$var$_tmpl$4, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("aria-labelledby", $5vyXB$solidjsweb.escape(title_id, true), false), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent(SearchThisFilterGroup_, {})), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Index), {
4129
4157
  get each() {
4130
4158
  return searched_filter_array_();
4131
4159
  },
@@ -4685,8 +4713,8 @@ var $f49857214f7675b1$var$_tmpl$ = ["<svg", ' xmlns="http://www.w3.org/2000/svg"
4685
4713
  function $f49857214f7675b1$export$cb808a3c41736d8e() {
4686
4714
  return $5vyXB$solidjsweb.ssr($f49857214f7675b1$var$_tmpl$, $5vyXB$solidjsweb.ssrHydrationKey());
4687
4715
  }
4688
- var $f8f64d05c525825b$var$_tmpl$ = ["<div", ' class="filters"><div class="body">', "</div></div>"],
4689
- $f8f64d05c525825b$var$_tmpl$2 = ["<div", ' class="sorting"><div class="body">', "</div></div>"],
4716
+ var $f8f64d05c525825b$var$_tmpl$ = ["<section", ' class="filters"', '><div class="body">', "</div></section>"],
4717
+ $f8f64d05c525825b$var$_tmpl$2 = ["<section", ' class="sorting"', '><div class="body">', "</div></section>"],
4690
4718
  $f8f64d05c525825b$var$_tmpl$3 = ["<div", ' class="sort-and-filter-buttons"><div class="outer"><div class="inner"><!--$-->', "<!--/--><!--$-->", "<!--/--><!--$-->", "<!--/--></div></div></div>"],
4691
4719
  $f8f64d05c525825b$var$_tmpl$4 = ["<span", ' class="num-filters" style="', '">', "</span>"],
4692
4720
  $f8f64d05c525825b$var$_tmpl$5 = ["<div", ' class="open-filters-button-container" style="', '"><!--$-->', "<!--/--><button", ' class="', '" type="button"', ' style="', '"><!--$-->', "<!--/--><span>", "</span></button></div>"],
@@ -4755,6 +4783,27 @@ function $f8f64d05c525825b$export$d7841e452f2e59a8({
4755
4783
  available_sortings_: available_sortings_,
4756
4784
  meta_of_currently_selected_sorting_: meta_of_currently_selected_sorting_
4757
4785
  };
4786
+ // Keyboard accessibility for the desktop panels (rendered after the product grid in the DOM): when the user
4787
+ // opens a panel we move focus into it, and restore focus to the toggle button on close. Intent is tracked with
4788
+ // a plain flag set in the buttons' click handlers - `filters_open`/`sorting_open` also change programmatically
4789
+ // (undo toast, history-state restore, SDK consumers), and those must not steal focus.
4790
+ let user_opened_panel = false;
4791
+ let filter_toggle_button;
4792
+ let sort_toggle_button;
4793
+ let current_panel;
4794
+ let current_panel_toggle_button;
4795
+ const focus_panel_when_in_dom = panel => $5vyXB$depictaiutilishared.catchify(async () => {
4796
+ // Bounded wait: if the panel never lands in the DOM (e.g. it's superseded by a rapid re-render before
4797
+ // insertion), the timeout lets this promise resolve instead of keeping `panel` - and the observer
4798
+ // listener it registers - referenced forever.
4799
+ await (0, $5vyXB$depictaiutilishared.observer).wait_for_element(panel, 4000);
4800
+ if (panel.isConnected) panel.focus();
4801
+ })();
4802
+ const register_desktop_panel = (el, toggle_button, should_focus) => {
4803
+ current_panel = el;
4804
+ current_panel_toggle_button = toggle_button;
4805
+ if (should_focus) focus_panel_when_in_dom(el);
4806
+ };
4758
4807
  const make_open_filters_button = (adhere_to_width = false, is_tabbable = false) => $5vyXB$solidjsweb.createComponent($f8f64d05c525825b$var$OpenFiltersButton, {
4759
4808
  tabindex_: is_tabbable ? 0 : -1,
4760
4809
  i18n_: i18n_,
@@ -4762,7 +4811,9 @@ function $f8f64d05c525825b$export$d7841e452f2e59a8({
4762
4811
  search_sorting_open_: search_sorting_open_,
4763
4812
  number_of_rendered_selected_filters_items_: number_of_rendered_selected_filters_items_,
4764
4813
  filter_button_width_: adhere_to_width ? filter_button_width_ : undefined,
4765
- hide_button_: hide_filters
4814
+ hide_button_: hide_filters,
4815
+ on_user_open_: () => user_opened_panel = true,
4816
+ button_ref_: is_tabbable ? el => filter_toggle_button = el : undefined
4766
4817
  });
4767
4818
  const make_open_sorting_button = (adhere_to_width = false, is_tabbable = false) => $5vyXB$solidjsweb.createComponent($f8f64d05c525825b$var$OpenSortingButton, {
4768
4819
  tabindex_: is_tabbable ? 0 : -1,
@@ -4772,7 +4823,9 @@ function $f8f64d05c525825b$export$d7841e452f2e59a8({
4772
4823
  search_sorting_open_: search_sorting_open_,
4773
4824
  available_sortings_: available_sortings_,
4774
4825
  sort_button_width_: adhere_to_width ? sort_button_width_ : undefined,
4775
- meta_of_currently_selected_sorting_: meta_of_currently_selected_sorting_
4826
+ meta_of_currently_selected_sorting_: meta_of_currently_selected_sorting_,
4827
+ on_user_open_: () => user_opened_panel = true,
4828
+ button_ref_: is_tabbable ? el => sort_toggle_button = el : undefined
4776
4829
  });
4777
4830
  let open_modal_;
4778
4831
  let close_modal_;
@@ -4791,9 +4844,34 @@ function $f8f64d05c525825b$export$d7841e452f2e59a8({
4791
4844
  grid_is_in_original_state = true;
4792
4845
  }
4793
4846
  });
4847
+ // Restore focus to the relevant toggle button when a desktop panel is torn down while focus is still inside it.
4848
+ const restore_focus_to_toggle_on_close = () => {
4849
+ const button_to_restore = current_panel_toggle_button;
4850
+ const focus_was_in_panel = !!current_panel && current_panel.contains(document.activeElement);
4851
+ current_panel = undefined;
4852
+ current_panel_toggle_button = undefined;
4853
+ if (focus_was_in_panel) button_to_restore?.focus();
4854
+ };
4855
+ // `<section>` + `aria-label` so the panel announces itself ("Filters"/"Sort") when we move focus to it; the bare
4856
+ // tabindex=-1 container would otherwise give screen readers nothing to read on focus. A semantic <section> avoids
4857
+ // an ARIA role and the UA styling pitfalls of <fieldset>; the existing CSS targets the `.filters`/`.sorting` class.
4858
+ const FiltersPanel = should_focus => $5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Show), {
4859
+ get when() {
4860
+ return !hide_filters();
4861
+ },
4862
+ get children() {
4863
+ return $5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("tabindex", -1, false) + $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape(i18n_.filters_(), true), false), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $aff9a96d30ed3563$export$3f1a388cc0d8fed7), filter_options)));
4864
+ }
4865
+ });
4866
+ const SortingPanel = should_focus => $5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$2, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrAttribute("tabindex", -1, false) + $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape(i18n_.sorting_text_(), true), false), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $be89be42ce9ea60f$export$1f1775a58da589b5), sorting_options)));
4794
4867
  $5vyXB$solidjs.createEffect(() => {
4868
+ // Consume the user-intent flag once per run, in every branch, so a stale flag can't leak into a later
4869
+ // resize-triggered re-render and steal focus.
4870
+ const should_focus_panel = user_opened_panel;
4871
+ user_opened_panel = false;
4795
4872
  if (!filters_open() && !sorting_open()) {
4796
4873
  close_modal_?.();
4874
+ restore_focus_to_toggle_on_close();
4797
4875
  set_extra_els_in_results_container_("");
4798
4876
  } else if (isSmall()()) {
4799
4877
  if ($5vyXB$solidjs.untrack(() => input_modal_open_?.())) {
@@ -4802,18 +4880,14 @@ function $f8f64d05c525825b$export$d7841e452f2e59a8({
4802
4880
  set_sorting_open(false);
4803
4881
  return;
4804
4882
  }
4883
+ // The modal manages its own focus; just drop the desktop panel reference.
4884
+ current_panel = undefined;
4885
+ current_panel_toggle_button = undefined;
4805
4886
  open_modal_?.();
4806
4887
  set_extra_els_in_results_container_("");
4807
4888
  } else {
4808
4889
  close_modal_?.();
4809
- if (filters_open()) set_extra_els_in_results_container_(() => $5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Show), {
4810
- get when() {
4811
- return !hide_filters();
4812
- },
4813
- get children() {
4814
- return $5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $aff9a96d30ed3563$export$3f1a388cc0d8fed7), filter_options)));
4815
- }
4816
- }));else set_extra_els_in_results_container_($5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$2, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $be89be42ce9ea60f$export$1f1775a58da589b5), sorting_options))));
4890
+ if (filters_open()) set_extra_els_in_results_container_(() => FiltersPanel(should_focus_panel));else set_extra_els_in_results_container_(SortingPanel(should_focus_panel));
4817
4891
  }
4818
4892
  });
4819
4893
  $5vyXB$depictaiutilishared.catchify(async () => {
@@ -4863,7 +4937,9 @@ function $f8f64d05c525825b$var$OpenFiltersButton({
4863
4937
  filter_button_width_: filter_button_width_,
4864
4938
  tabindex_: tabindex_,
4865
4939
  number_of_rendered_selected_filters_items_: [num_selected_filters],
4866
- hide_button_: hide_button_
4940
+ hide_button_: hide_button_,
4941
+ on_user_open_: on_user_open_,
4942
+ button_ref_: button_ref_
4867
4943
  }) {
4868
4944
  const filters_closed = $5vyXB$solidjs.createMemo(() => !search_filters_open_[0]());
4869
4945
  // We assume in embedded_num_products that this is a single HTMLElement so pls change there if you change it here
@@ -4876,7 +4952,7 @@ function $f8f64d05c525825b$var$OpenFiltersButton({
4876
4952
  get children() {
4877
4953
  return $5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$4, $5vyXB$solidjsweb.ssrHydrationKey(), $5vyXB$solidjsweb.ssrStyle(filters_closed() ? `` : `opacity:0`), $5vyXB$solidjsweb.escape(num_selected_filters()));
4878
4954
  }
4879
- })), $5vyXB$solidjsweb.ssrAttribute("tabindex", $5vyXB$solidjsweb.escape(tabindex_, true), false), `${!filters_closed() ? "major" : ""} ${filters_closed() ? "minor" : ""} ${"filter toggle-button major-minor-transition" + ((0, $5vyXB$solidjsweb.isServer) ? " minor" : "")}`, $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape((filters_closed() ? i18n_.open_filters_ : i18n_.close_filters_)(), true), false), $5vyXB$solidjsweb.ssrStyle(filter_button_width_?.() ? {
4955
+ })), $5vyXB$solidjsweb.ssrAttribute("tabindex", $5vyXB$solidjsweb.escape(tabindex_, true), false), `${!filters_closed() ? "major" : ""} ${filters_closed() ? "minor" : ""} ${"filter toggle-button major-minor-transition" + ((0, $5vyXB$solidjsweb.isServer) ? " minor" : "")}`, $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape((filters_closed() ? i18n_.open_filters_ : i18n_.close_filters_)(), true), false) + $5vyXB$solidjsweb.ssrAttribute("aria-expanded", !filters_closed(), false), $5vyXB$solidjsweb.ssrStyle(filter_button_width_?.() ? {
4880
4956
  width: filter_button_width_() + "px"
4881
4957
  } : {}), $5vyXB$solidjsweb.escape($5vyXB$solidjsweb.createComponent((0, $5vyXB$solidjs.Show), {
4882
4958
  get when() {
@@ -4898,11 +4974,13 @@ function $f8f64d05c525825b$var$OpenSortingButton({
4898
4974
  search_sorting_open_: search_sorting_open_,
4899
4975
  sort_button_width_: sort_button_width_,
4900
4976
  tabindex_: tabindex_,
4901
- meta_of_currently_selected_sorting_: meta_of_currently_selected_sorting_
4977
+ meta_of_currently_selected_sorting_: meta_of_currently_selected_sorting_,
4978
+ on_user_open_: on_user_open_,
4979
+ button_ref_: button_ref_
4902
4980
  }) {
4903
4981
  const sorting_closed = $5vyXB$solidjs.createMemo(() => !search_sorting_open_[0]());
4904
4982
  // We assume in embedded_num_products that this is a single HTMLElement so pls change there if you change it here
4905
- return $5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$6, $5vyXB$solidjsweb.ssrHydrationKey(), `${!sorting_closed() ? "major" : ""} ${sorting_closed() ? "minor" : ""} toggle-button for-sorting major-minor-transition`, $5vyXB$solidjsweb.ssrAttribute("tabindex", $5vyXB$solidjsweb.escape(tabindex_, true), false) + $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape((sorting_closed() ? i18n_.open_sorting_ : i18n_.close_sorting_)(), true), false), $5vyXB$solidjsweb.ssrStyle(sort_button_width_?.() ? {
4983
+ return $5vyXB$solidjsweb.ssr($f8f64d05c525825b$var$_tmpl$6, $5vyXB$solidjsweb.ssrHydrationKey(), `${!sorting_closed() ? "major" : ""} ${sorting_closed() ? "minor" : ""} toggle-button for-sorting major-minor-transition`, $5vyXB$solidjsweb.ssrAttribute("tabindex", $5vyXB$solidjsweb.escape(tabindex_, true), false) + $5vyXB$solidjsweb.ssrAttribute("aria-label", $5vyXB$solidjsweb.escape((sorting_closed() ? i18n_.open_sorting_ : i18n_.close_sorting_)(), true), false) + $5vyXB$solidjsweb.ssrAttribute("aria-expanded", !sorting_closed(), false), $5vyXB$solidjsweb.ssrStyle(sort_button_width_?.() ? {
4906
4984
  width: sort_button_width_() + "px"
4907
4985
  } : {}),
4908
4986
  // Show the title of the currently selected sorting when the sorting is closed, if there's currently a sorting selected
@@ -11,7 +11,7 @@ import { GetListingRequest } from "@depict-ai/types/api/GetListingRequest";
11
11
  import { BaseSearchRequestV3 } from "@depict-ai/types/api/BaseSearchRequestV3";
12
12
  import { FeaturedInDisplay } from "@depict-ai/types/api/FeaturedInResponseV3";
13
13
  import { SearchFilter as _SearchFilter3 } from "@depict-ai/types/api/SearchRequestV2";
14
- export const version = "4.10.12";
14
+ export const version = "4.10.14";
15
15
  /**
16
16
  * Use `javascript_media_query` but return a reactive accessor instead of taking a callback function
17
17
  */