@depict-ai/ui 3.0.11 → 3.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ES10/index.cjs +134 -51
- package/ES10/index.d.ts +7 -1
- package/ES10/index.js +134 -51
- package/latest/index.cjs +125 -47
- package/latest/index.d.ts +7 -1
- package/latest/index.js +125 -47
- package/package.json +1 -1
- package/server/ES10/index.cjs +134 -51
- package/server/ES10/index.d.ts +7 -1
- package/server/ES10/index.js +134 -51
- package/server/latest/index.cjs +125 -47
- package/server/latest/index.d.ts +7 -1
- package/server/latest/index.js +125 -47
package/latest/index.cjs
CHANGED
|
@@ -77,7 +77,7 @@ $parcel$export(module.exports, "defaultColsAtSize", () => $a3280f0aad997933$expo
|
|
|
77
77
|
$parcel$export(module.exports, "defaultCategoryTitlePlugin", () => $a3280f0aad997933$export$7bf543b9d9be2c22);
|
|
78
78
|
$parcel$export(module.exports, "version", () => $b757f75811f3261f$export$83d89fbfd8236492);
|
|
79
79
|
/*! Depict.ai search and product listing SDK */
|
|
80
|
-
const $b757f75811f3261f$export$83d89fbfd8236492 = "3.0.
|
|
80
|
+
const $b757f75811f3261f$export$83d89fbfd8236492 = "3.0.13";
|
|
81
81
|
const $0f313083912e447a$var$_tmpl$ = /*#__PURE__*/$gVhhF$solidjsweb.template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 14 26"><path d="M2 24.656c-.078 0-.156-.016-.234-.047s-.133-.066-.187-.129c-.117-.117-.176-.258-.176-.422s.059-.305.176-.422l10.371-10.371L1.578 2.883c-.117-.117-.176-.258-.176-.422s.059-.305.176-.422.258-.176.422-.176.305.059.422.176l10.805 10.793a.59.59 0 0 1 .176.434c0 .172-.059.305-.176.422L2.422 24.48a.42.42 0 0 1-.199.129.54.54 0 0 1-.223.047zm0 0"fill=#0f0f0f>`);
|
|
82
82
|
function $0f313083912e447a$export$8be2714ec7f169ee(props = {}) {
|
|
83
83
|
return (() => {
|
|
@@ -773,8 +773,8 @@ const $0b23bfd073d9a4e8$export$b91cec6bdc6b32a1 = /*@__PURE__*/(() => {
|
|
|
773
773
|
const $a3280f0aad997933$export$c3834fa86c616831 = [[4], [3, 1024], [2, 901]];
|
|
774
774
|
const $a3280f0aad997933$export$864d304a0bc46829 = "2%";
|
|
775
775
|
const $a3280f0aad997933$export$7bf543b9d9be2c22 = (0, $0b23bfd073d9a4e8$export$b91cec6bdc6b32a1);
|
|
776
|
-
function $fc23d7668ae0011d$export$a2cc176055f8f08() {
|
|
777
|
-
const text = "Please try setting `columnsAtSize`/`gridSpacing` on the `SearchPage`/`CategoryPage` components to change the
|
|
776
|
+
function $fc23d7668ae0011d$export$a2cc176055f8f08(what = "grid") {
|
|
777
|
+
const text = "Please try setting `columnsAtSize`/`gridSpacing` on the `SearchPage`/`CategoryPage` components to change the " + what + " before setting it with CSS. If you do with CSS, set `columnsAtSize` to an empty array to ensure no declarations created by the SDK leak through.";
|
|
778
778
|
return (0, $gVhhF$solidjsweb.isServer) ? {
|
|
779
779
|
t: `<!-- ${text} -->`
|
|
780
780
|
} : document.createComment(text);
|
|
@@ -5881,25 +5881,28 @@ function $0f400c3f7248d5f1$export$92f2da32c6e7e7ee({
|
|
|
5881
5881
|
price_formatting.decimal_places_delimiter_, price_formatting.thousands_delimiter_);
|
|
5882
5882
|
});
|
|
5883
5883
|
}
|
|
5884
|
-
function $76b6ac05693f5c71$export$205efb947c7ffd78(handler, passive = true) {
|
|
5884
|
+
function $76b6ac05693f5c71$export$205efb947c7ffd78(handler, passive = true, override_element) {
|
|
5885
5885
|
const catchified_handler = $gVhhF$depictaiutilishared.catchify(handler);
|
|
5886
5886
|
const owner = $gVhhF$solidjs.getOwner();
|
|
5887
5887
|
// 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.
|
|
5888
5888
|
// Use observer in case that this gets called before body exists
|
|
5889
|
-
|
|
5890
|
-
|
|
5891
|
-
|
|
5892
|
-
|
|
5893
|
-
|
|
5889
|
+
if (!override_element) {
|
|
5890
|
+
const disconnect = (0, $gVhhF$depictaiutilishared.observer).onexists("body", ({
|
|
5891
|
+
element: element
|
|
5892
|
+
}) => {
|
|
5893
|
+
element.addEventListener("scroll", catchified_handler, {
|
|
5894
|
+
passive: passive
|
|
5895
|
+
});
|
|
5896
|
+
$gVhhF$solidjs.runWithOwner(owner, () => $gVhhF$solidjs.onCleanup(() => element.removeEventListener("scroll", catchified_handler)));
|
|
5894
5897
|
});
|
|
5895
|
-
$gVhhF$solidjs.
|
|
5896
|
-
}
|
|
5897
|
-
$gVhhF$solidjs.onCleanup(disconnect);
|
|
5898
|
+
$gVhhF$solidjs.onCleanup(disconnect);
|
|
5899
|
+
}
|
|
5898
5900
|
for (const event of ["resize", "orientationchange", "scroll"]) {
|
|
5899
|
-
|
|
5901
|
+
const listen_on = override_element ?? window;
|
|
5902
|
+
listen_on.addEventListener(event, catchified_handler, {
|
|
5900
5903
|
passive: passive
|
|
5901
5904
|
});
|
|
5902
|
-
$gVhhF$solidjs.onCleanup(() => removeEventListener(event, catchified_handler));
|
|
5905
|
+
$gVhhF$solidjs.onCleanup(() => listen_on.removeEventListener(event, catchified_handler));
|
|
5903
5906
|
}
|
|
5904
5907
|
}
|
|
5905
5908
|
const $401aee5f33dca9e2$var$_tmpl$ = /*#__PURE__*/$gVhhF$solidjsweb.template(`<div class=scroll-status style=display:none><span class=text><b></b> \u{2013} <b></b> <!$><!/> <b>`);
|
|
@@ -5911,7 +5914,9 @@ function $401aee5f33dca9e2$export$83fd5de5504a7a67({
|
|
|
5911
5914
|
i18n_: {
|
|
5912
5915
|
price_formatting_: price_formatting_,
|
|
5913
5916
|
of_: of_
|
|
5914
|
-
}
|
|
5917
|
+
},
|
|
5918
|
+
get_scroll_position_ = () => scrollY,
|
|
5919
|
+
listen_to_scroll_on_: listen_to_scroll_on_
|
|
5915
5920
|
}) {
|
|
5916
5921
|
if (0, $gVhhF$solidjsweb.isServer) return; // won't show in initial render and need scroll position
|
|
5917
5922
|
const [first_to_show, set_first_to_show] = $gVhhF$solidjs.createSignal(0);
|
|
@@ -5926,12 +5931,12 @@ function $401aee5f33dca9e2$export$83fd5de5504a7a67({
|
|
|
5926
5931
|
let element;
|
|
5927
5932
|
let animation;
|
|
5928
5933
|
let last_pos_time = +new Date();
|
|
5929
|
-
let last_pos =
|
|
5934
|
+
let last_pos = get_scroll_position_();
|
|
5930
5935
|
let unpermit_when_possible = false;
|
|
5931
5936
|
let times_too_fast = 0;
|
|
5932
5937
|
const handle_scrollpos_change = () => {
|
|
5933
5938
|
if (animation) set_show_triggered(prev => !prev); // make sure that once we've decided to show the indicator it doesn't disappear before we stop scrolling
|
|
5934
|
-
const distance_travelled = Math.abs(
|
|
5939
|
+
const distance_travelled = Math.abs(get_scroll_position_() - last_pos);
|
|
5935
5940
|
const now = +new Date();
|
|
5936
5941
|
const age_of_distance = now - last_pos_time;
|
|
5937
5942
|
const velocity = distance_travelled / age_of_distance; // pixels per millisecond
|
|
@@ -5944,9 +5949,9 @@ function $401aee5f33dca9e2$export$83fd5de5504a7a67({
|
|
|
5944
5949
|
unpermit_when_possible = false;
|
|
5945
5950
|
} else if (animation) unpermit_when_possible = true;else set_permitted_to_show(false);
|
|
5946
5951
|
last_pos_time = now;
|
|
5947
|
-
last_pos =
|
|
5952
|
+
last_pos = get_scroll_position_();
|
|
5948
5953
|
};
|
|
5949
|
-
$76b6ac05693f5c71$export$205efb947c7ffd78(handle_scrollpos_change);
|
|
5954
|
+
$76b6ac05693f5c71$export$205efb947c7ffd78(handle_scrollpos_change, undefined, listen_to_scroll_on_);
|
|
5950
5955
|
$gVhhF$solidjs.createEffect(() => {
|
|
5951
5956
|
show_triggered();
|
|
5952
5957
|
const first = get_first_result_in_viewport();
|
|
@@ -6599,7 +6604,8 @@ function $fe76fb463cc60b89$export$3925f87b1545cfc6({
|
|
|
6599
6604
|
product_card_template_: product_card_template_,
|
|
6600
6605
|
layout_options_: layout_options_,
|
|
6601
6606
|
id_currently_querying_for_: id_currently_querying_for_,
|
|
6602
|
-
content_blocks_by_row_: content_blocks_by_row_
|
|
6607
|
+
content_blocks_by_row_: content_blocks_by_row_,
|
|
6608
|
+
ConfiguredScrollStatus: ConfiguredScrollStatus
|
|
6603
6609
|
}) {
|
|
6604
6610
|
// The plp_results_ resource will be delayed because we're using createBatchedMemo to not make triplicate API requests, but we need to show the placeholders before already to match Chrome and Firefox's "content has to be there, ready for scroll restoration, before all popstate tasks have been completed"-requirement
|
|
6605
6611
|
const is_loading_ = $gVhhF$solidjs.createMemo(() => plp_results_.loading || query_base_.loading);
|
|
@@ -6667,6 +6673,7 @@ function $fe76fb463cc60b89$export$3925f87b1545cfc6({
|
|
|
6667
6673
|
product_card_template_: product_card_template_,
|
|
6668
6674
|
num_placeholders_: num_placeholders_
|
|
6669
6675
|
}) : undefined);
|
|
6676
|
+
const layout = $gVhhF$solidjs.createMemo(() => layout_options_().layout || "grid");
|
|
6670
6677
|
const [get_suspense_is_blocked, set_suspense_is_blocked] = $gVhhF$solidjs.createSignal(false);
|
|
6671
6678
|
const block_suspense_if_needed = () => {
|
|
6672
6679
|
if (!is_just_after_plp_results_update) return;
|
|
@@ -6738,7 +6745,7 @@ function $fe76fb463cc60b89$export$3925f87b1545cfc6({
|
|
|
6738
6745
|
},
|
|
6739
6746
|
children: product_cards_when_data
|
|
6740
6747
|
});
|
|
6741
|
-
return [$gVhhF$solidjsweb.memo((
|
|
6748
|
+
return [$gVhhF$solidjsweb.memo(() => $fc23d7668ae0011d$export$a2cc176055f8f08(layout())), $gVhhF$solidjsweb.createComponent((0, $gVhhF$solidjs.Show), {
|
|
6742
6749
|
get when() {
|
|
6743
6750
|
return doesnt_have_content_blocks();
|
|
6744
6751
|
},
|
|
@@ -6761,22 +6768,79 @@ function $fe76fb463cc60b89$export$3925f87b1545cfc6({
|
|
|
6761
6768
|
});
|
|
6762
6769
|
},
|
|
6763
6770
|
get children() {
|
|
6764
|
-
return $gVhhF$solidjsweb.createComponent((0, $
|
|
6765
|
-
get
|
|
6766
|
-
return
|
|
6767
|
-
},
|
|
6768
|
-
get override_vertical_spacing() {
|
|
6769
|
-
return layout_options_().override_vertical_spacing;
|
|
6770
|
-
},
|
|
6771
|
-
get grid_spacing() {
|
|
6772
|
-
return layout_options_().grid_spacing;
|
|
6771
|
+
return $gVhhF$solidjsweb.createComponent((0, $gVhhF$solidjs.Show), {
|
|
6772
|
+
get when() {
|
|
6773
|
+
return layout() === "grid";
|
|
6773
6774
|
},
|
|
6774
|
-
|
|
6775
|
-
|
|
6776
|
-
|
|
6777
|
-
|
|
6775
|
+
get fallback() {
|
|
6776
|
+
return $gVhhF$solidjsweb.createComponent((0, $a0e53f99354809d9$export$6649caad96ef8870), {
|
|
6777
|
+
arrow_height_: 25,
|
|
6778
|
+
arrow_width_: 12.5,
|
|
6779
|
+
disable_fading_: true,
|
|
6780
|
+
slider_ref_: slider => {
|
|
6781
|
+
const {
|
|
6782
|
+
insert_here: insert_here,
|
|
6783
|
+
container: container
|
|
6784
|
+
} = slider;
|
|
6785
|
+
const Layout = props => $f48d0fbb00835aaa$export$445d8d3f5f706a40(props, insert_here, true);
|
|
6786
|
+
// Do like this, so we don't have to call mergeProps ourselves
|
|
6787
|
+
$gVhhF$solidjsweb.createComponent(Layout, $gVhhF$solidjsweb.mergeProps({
|
|
6788
|
+
rows: "all"
|
|
6789
|
+
}, layout_options_, {
|
|
6790
|
+
get cols_at_size() {
|
|
6791
|
+
return modified_cols_at_size();
|
|
6792
|
+
},
|
|
6793
|
+
get layout() {
|
|
6794
|
+
return layout();
|
|
6795
|
+
}
|
|
6796
|
+
}));
|
|
6797
|
+
insert_here.classList.add("generated-spacing");
|
|
6798
|
+
$gVhhF$solidjs.createEffect(
|
|
6799
|
+
// @ts-ignore
|
|
6800
|
+
$gVhhF$solidjs.on(query_base_, () => insert_here.scrollTo({
|
|
6801
|
+
left: 0,
|
|
6802
|
+
behavior: "instant"
|
|
6803
|
+
}), {
|
|
6804
|
+
defer: true
|
|
6805
|
+
})); // Scroll to the beginning if a filter or the query changes
|
|
6806
|
+
$gVhhF$depictaiutilishared.slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
|
|
6807
|
+
if (ConfiguredScrollStatus) {
|
|
6808
|
+
// Put scroll status into slider container, so it's centered relatively to the products
|
|
6809
|
+
const rendered_scroll_status = ConfiguredScrollStatus({
|
|
6810
|
+
get_scroll_position_: () => insert_here.scrollLeft,
|
|
6811
|
+
listen_to_scroll_on_: insert_here
|
|
6812
|
+
});
|
|
6813
|
+
const {
|
|
6814
|
+
childNodes: childNodes
|
|
6815
|
+
} = container;
|
|
6816
|
+
// We have to use `insert` over Element.append, because ConfiguredScrollStatus is in an ErrorBoundary and therefore returns a function. `insert` will wipe all children, therefore save them first and then tell insert that the element should contain these elements + whatever ScrollStatus returns
|
|
6817
|
+
$gVhhF$solidjsweb.insert(container, $gVhhF$solidjs.createMemo(() => [...childNodes, rendered_scroll_status]));
|
|
6818
|
+
}
|
|
6819
|
+
},
|
|
6820
|
+
children: listing_contents
|
|
6821
|
+
});
|
|
6778
6822
|
},
|
|
6779
|
-
children
|
|
6823
|
+
get children() {
|
|
6824
|
+
return $gVhhF$solidjsweb.createComponent((0, $f48d0fbb00835aaa$export$d21e32dfedac04be), {
|
|
6825
|
+
get cols_at_size() {
|
|
6826
|
+
return modified_cols_at_size();
|
|
6827
|
+
},
|
|
6828
|
+
get override_vertical_spacing() {
|
|
6829
|
+
return layout_options_().override_vertical_spacing;
|
|
6830
|
+
},
|
|
6831
|
+
get grid_spacing() {
|
|
6832
|
+
return layout_options_().grid_spacing;
|
|
6833
|
+
},
|
|
6834
|
+
rows: "all",
|
|
6835
|
+
get layout() {
|
|
6836
|
+
return layout();
|
|
6837
|
+
},
|
|
6838
|
+
element_attributes: {
|
|
6839
|
+
class: "cards"
|
|
6840
|
+
},
|
|
6841
|
+
children: listing_contents
|
|
6842
|
+
});
|
|
6843
|
+
}
|
|
6780
6844
|
});
|
|
6781
6845
|
}
|
|
6782
6846
|
})];
|
|
@@ -8070,8 +8134,11 @@ async function $276380e4607fb9fb$export$cc42dd29bf655ab6({
|
|
|
8070
8134
|
const new_displays = last_response.displays;
|
|
8071
8135
|
displays.push(...new_displays);
|
|
8072
8136
|
next_cursor = last_response.cursor;
|
|
8073
|
-
if (new_displays.length < fetch_this_time && last_response.failed !== true) break;
|
|
8074
8137
|
const left_to_fetch = total_products_to_fetch - displays.length;
|
|
8138
|
+
if (!next_cursor) {
|
|
8139
|
+
if (left_to_fetch > 0) $gVhhF$depictaiutilishared.dwarn("Got response without a cursor when attempting to restore scroll position, giving up", last_response, total_products_to_fetch, displays);
|
|
8140
|
+
break;
|
|
8141
|
+
}
|
|
8075
8142
|
fetch_this_time = left_to_fetch < $276380e4607fb9fb$var$api_max_products_per_request ? left_to_fetch : $276380e4607fb9fb$var$api_max_products_per_request;
|
|
8076
8143
|
}
|
|
8077
8144
|
return {
|
|
@@ -8384,6 +8451,20 @@ function $840d88a04b2d22a7$export$f7d2f673fc2f091d({
|
|
|
8384
8451
|
// @ts-ignore - there's no type error here when writing the code, but parcel can't generate types that include the symbol, so we need to suppress the error that creates in our pipelines
|
|
8385
8452
|
const category_title_type = category_title_[(0, $6b502b1b2155a0bc$export$5c28802497c8a83c)];
|
|
8386
8453
|
const extra_sort_and_filter_args_ = {};
|
|
8454
|
+
const ConfiguredScrollStatus = (extraProps = {}) => $gVhhF$solidjsweb.createComponent((0, $edafe91daf3091d7$export$b69d0d92862de18b), {
|
|
8455
|
+
severity_: "error",
|
|
8456
|
+
message_: "Scroll status failed",
|
|
8457
|
+
get children() {
|
|
8458
|
+
return $401aee5f33dca9e2$export$83fd5de5504a7a67({
|
|
8459
|
+
first_result_in_viewport_: first_result_in_viewport_,
|
|
8460
|
+
last_result_in_viewport_: last_result_in_viewport_,
|
|
8461
|
+
formatted_number_of_results_: formatted_number_of_results_,
|
|
8462
|
+
i18n_: i18n_,
|
|
8463
|
+
number_of_results_: $gVhhF$solidjs.createMemo(() => plp_products_()?.n_hits),
|
|
8464
|
+
...extraProps
|
|
8465
|
+
});
|
|
8466
|
+
}
|
|
8467
|
+
});
|
|
8387
8468
|
const make_product_count_ = () => (() => {
|
|
8388
8469
|
const _el$ = $gVhhF$solidjsweb.getNextElement($840d88a04b2d22a7$var$_tmpl$),
|
|
8389
8470
|
_el$3 = _el$.firstChild,
|
|
@@ -8602,6 +8683,7 @@ function $840d88a04b2d22a7$export$f7d2f673fc2f091d({
|
|
|
8602
8683
|
sort_or_filter_open_: sort_or_filter_open_,
|
|
8603
8684
|
desktop_filter_elements_: desktop_filter_elements_,
|
|
8604
8685
|
content_blocks_by_row_: content_blocks_by_row_,
|
|
8686
|
+
ConfiguredScrollStatus: ConfiguredScrollStatus,
|
|
8605
8687
|
id_currently_querying_for_: id_to_query_for_,
|
|
8606
8688
|
no_results_options_: {
|
|
8607
8689
|
selected_filters_: selected_filters_,
|
|
@@ -8614,17 +8696,12 @@ function $840d88a04b2d22a7$export$f7d2f673fc2f091d({
|
|
|
8614
8696
|
});
|
|
8615
8697
|
}
|
|
8616
8698
|
}), _el$26, _co$10);
|
|
8617
|
-
$gVhhF$solidjsweb.insert(_el$13, $gVhhF$solidjsweb.createComponent((0, $
|
|
8618
|
-
|
|
8619
|
-
|
|
8699
|
+
$gVhhF$solidjsweb.insert(_el$13, $gVhhF$solidjsweb.createComponent((0, $gVhhF$solidjs.Show), {
|
|
8700
|
+
get when() {
|
|
8701
|
+
return layout_options_().layout === "grid";
|
|
8702
|
+
},
|
|
8620
8703
|
get children() {
|
|
8621
|
-
return $
|
|
8622
|
-
first_result_in_viewport_: first_result_in_viewport_,
|
|
8623
|
-
last_result_in_viewport_: last_result_in_viewport_,
|
|
8624
|
-
formatted_number_of_results_: formatted_number_of_results_,
|
|
8625
|
-
i18n_: i18n_,
|
|
8626
|
-
number_of_results_: $gVhhF$solidjs.createMemo(() => plp_products_()?.n_hits)
|
|
8627
|
-
});
|
|
8704
|
+
return $gVhhF$solidjsweb.createComponent(ConfiguredScrollStatus, {});
|
|
8628
8705
|
}
|
|
8629
8706
|
}), _el$28, _co$11);
|
|
8630
8707
|
$gVhhF$solidjsweb.insert(_el$13, $gVhhF$solidjsweb.createComponent((0, $edafe91daf3091d7$export$b69d0d92862de18b), {
|
|
@@ -9016,7 +9093,8 @@ function $48567ac5b39bac56$export$e2bf8ce7779e827e(props) {
|
|
|
9016
9093
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
9017
9094
|
layout_options_: $gVhhF$solidjs.createMemo(() => ({
|
|
9018
9095
|
cols_at_size: $4e04be41243c3d80$export$6daf8749b65a1b77(props.cols_at_size),
|
|
9019
|
-
...grid_spacing_override()
|
|
9096
|
+
...grid_spacing_override(),
|
|
9097
|
+
layout: props.layout || "grid"
|
|
9020
9098
|
})),
|
|
9021
9099
|
product_card_template_: product_card_template,
|
|
9022
9100
|
sorting_query_param_: sorting_query_param_,
|
package/latest/index.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { ProductListingRequestV3 } from "@depict-ai/types/api/ProductListingRequ
|
|
|
10
10
|
import { GetListingRequest } from "@depict-ai/types/api/GetListingRequest";
|
|
11
11
|
import { BaseSearchRequestV3 } from "@depict-ai/types/api/BaseSearchRequestV3";
|
|
12
12
|
import { SearchFilter as _SearchFilter2 } from "@depict-ai/types/api/SearchRequestV2";
|
|
13
|
-
export const version = "3.0.
|
|
13
|
+
export const version = "3.0.13";
|
|
14
14
|
export type SDKColsAtSize = [number, number?][];
|
|
15
15
|
/**
|
|
16
16
|
* Transform SDK ColsAtSize into valid Layout ColsAtSize
|
|
@@ -182,6 +182,11 @@ export interface BaseCategoryPageConfig extends BaseProductListingConfig {
|
|
|
182
182
|
* @default true
|
|
183
183
|
*/
|
|
184
184
|
showQuicklinks?: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Whether to show the listing in a grid or a slider.
|
|
187
|
+
* @default "grid"
|
|
188
|
+
*/
|
|
189
|
+
layout?: "grid" | "slider";
|
|
185
190
|
}
|
|
186
191
|
/**
|
|
187
192
|
* The listing to query Depict for. `type` can be `"listingId"` or `"externalId"` and `id` is the actual id.
|
|
@@ -965,6 +970,7 @@ export function CategoryPage<OriginalDisplay extends Display, OutputDisplay exte
|
|
|
965
970
|
category_title: typeof CategoryTitle | typeof embedded_num_products;
|
|
966
971
|
on_listing_query_change?: (new_listing_query?: ListingQuery | undefined, old_listing_query?: ListingQuery | undefined) => void;
|
|
967
972
|
content_blocks_by_row?: ContentBlocksByRow;
|
|
973
|
+
layout?: "slider" | "grid";
|
|
968
974
|
}): import("@depict-ai/utilishared/latest").Node_Array;
|
|
969
975
|
export function BreadCrumbs<T extends Display>({
|
|
970
976
|
depict_category
|
package/latest/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { createStore as $9HbP8$createStore, reconcile as $9HbP8$reconcile } from
|
|
|
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 = "3.0.
|
|
10
|
+
const $ec291e0010116877$export$83d89fbfd8236492 = "3.0.13";
|
|
11
11
|
const $fbbadcb080ad1d4a$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 14 26"><path d="M2 24.656c-.078 0-.156-.016-.234-.047s-.133-.066-.187-.129c-.117-.117-.176-.258-.176-.422s.059-.305.176-.422l10.371-10.371L1.578 2.883c-.117-.117-.176-.258-.176-.422s.059-.305.176-.422.258-.176.422-.176.305.059.422.176l10.805 10.793a.59.59 0 0 1 .176.434c0 .172-.059.305-.176.422L2.422 24.48a.42.42 0 0 1-.199.129.54.54 0 0 1-.223.047zm0 0"fill=#0f0f0f>`);
|
|
12
12
|
function $fbbadcb080ad1d4a$export$8be2714ec7f169ee(props = {}) {
|
|
13
13
|
return (() => {
|
|
@@ -703,8 +703,8 @@ const $e4615ecd1849548f$export$b91cec6bdc6b32a1 = /*@__PURE__*/(() => {
|
|
|
703
703
|
const $4690a06c8489dcd0$export$c3834fa86c616831 = [[4], [3, 1024], [2, 901]];
|
|
704
704
|
const $4690a06c8489dcd0$export$864d304a0bc46829 = "2%";
|
|
705
705
|
const $4690a06c8489dcd0$export$7bf543b9d9be2c22 = (0, $e4615ecd1849548f$export$b91cec6bdc6b32a1);
|
|
706
|
-
function $a458486f22b22f63$export$a2cc176055f8f08() {
|
|
707
|
-
const text = "Please try setting `columnsAtSize`/`gridSpacing` on the `SearchPage`/`CategoryPage` components to change the
|
|
706
|
+
function $a458486f22b22f63$export$a2cc176055f8f08(what = "grid") {
|
|
707
|
+
const text = "Please try setting `columnsAtSize`/`gridSpacing` on the `SearchPage`/`CategoryPage` components to change the " + what + " before setting it with CSS. If you do with CSS, set `columnsAtSize` to an empty array to ensure no declarations created by the SDK leak through.";
|
|
708
708
|
return (0, $9HbP8$isServer) ? {
|
|
709
709
|
t: `<!-- ${text} -->`
|
|
710
710
|
} : document.createComment(text);
|
|
@@ -5811,25 +5811,28 @@ function $511cc0abd9a64ce8$export$92f2da32c6e7e7ee({
|
|
|
5811
5811
|
price_formatting.decimal_places_delimiter_, price_formatting.thousands_delimiter_);
|
|
5812
5812
|
});
|
|
5813
5813
|
}
|
|
5814
|
-
function $8f9120a1ca151e6a$export$205efb947c7ffd78(handler, passive = true) {
|
|
5814
|
+
function $8f9120a1ca151e6a$export$205efb947c7ffd78(handler, passive = true, override_element) {
|
|
5815
5815
|
const catchified_handler = $9HbP8$catchify1(handler);
|
|
5816
5816
|
const owner = $9HbP8$getOwner();
|
|
5817
5817
|
// 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.
|
|
5818
5818
|
// Use observer in case that this gets called before body exists
|
|
5819
|
-
|
|
5820
|
-
|
|
5821
|
-
|
|
5822
|
-
|
|
5823
|
-
|
|
5819
|
+
if (!override_element) {
|
|
5820
|
+
const disconnect = (0, $9HbP8$observer).onexists("body", ({
|
|
5821
|
+
element: element
|
|
5822
|
+
}) => {
|
|
5823
|
+
element.addEventListener("scroll", catchified_handler, {
|
|
5824
|
+
passive: passive
|
|
5825
|
+
});
|
|
5826
|
+
$9HbP8$runWithOwner(owner, () => $9HbP8$onCleanup(() => element.removeEventListener("scroll", catchified_handler)));
|
|
5824
5827
|
});
|
|
5825
|
-
$9HbP8$
|
|
5826
|
-
}
|
|
5827
|
-
$9HbP8$onCleanup(disconnect);
|
|
5828
|
+
$9HbP8$onCleanup(disconnect);
|
|
5829
|
+
}
|
|
5828
5830
|
for (const event of ["resize", "orientationchange", "scroll"]) {
|
|
5829
|
-
|
|
5831
|
+
const listen_on = override_element ?? window;
|
|
5832
|
+
listen_on.addEventListener(event, catchified_handler, {
|
|
5830
5833
|
passive: passive
|
|
5831
5834
|
});
|
|
5832
|
-
$9HbP8$onCleanup(() => removeEventListener(event, catchified_handler));
|
|
5835
|
+
$9HbP8$onCleanup(() => listen_on.removeEventListener(event, catchified_handler));
|
|
5833
5836
|
}
|
|
5834
5837
|
}
|
|
5835
5838
|
const $6db49ca163afa2c3$var$_tmpl$ = /*#__PURE__*/$9HbP8$template(`<div class=scroll-status style=display:none><span class=text><b></b> \u{2013} <b></b> <!$><!/> <b>`);
|
|
@@ -5841,7 +5844,9 @@ function $6db49ca163afa2c3$export$83fd5de5504a7a67({
|
|
|
5841
5844
|
i18n_: {
|
|
5842
5845
|
price_formatting_: price_formatting_,
|
|
5843
5846
|
of_: of_
|
|
5844
|
-
}
|
|
5847
|
+
},
|
|
5848
|
+
get_scroll_position_ = () => scrollY,
|
|
5849
|
+
listen_to_scroll_on_: listen_to_scroll_on_
|
|
5845
5850
|
}) {
|
|
5846
5851
|
if (0, $9HbP8$isServer) return; // won't show in initial render and need scroll position
|
|
5847
5852
|
const [first_to_show, set_first_to_show] = $9HbP8$createSignal(0);
|
|
@@ -5856,12 +5861,12 @@ function $6db49ca163afa2c3$export$83fd5de5504a7a67({
|
|
|
5856
5861
|
let element;
|
|
5857
5862
|
let animation;
|
|
5858
5863
|
let last_pos_time = +new Date();
|
|
5859
|
-
let last_pos =
|
|
5864
|
+
let last_pos = get_scroll_position_();
|
|
5860
5865
|
let unpermit_when_possible = false;
|
|
5861
5866
|
let times_too_fast = 0;
|
|
5862
5867
|
const handle_scrollpos_change = () => {
|
|
5863
5868
|
if (animation) set_show_triggered(prev => !prev); // make sure that once we've decided to show the indicator it doesn't disappear before we stop scrolling
|
|
5864
|
-
const distance_travelled = Math.abs(
|
|
5869
|
+
const distance_travelled = Math.abs(get_scroll_position_() - last_pos);
|
|
5865
5870
|
const now = +new Date();
|
|
5866
5871
|
const age_of_distance = now - last_pos_time;
|
|
5867
5872
|
const velocity = distance_travelled / age_of_distance; // pixels per millisecond
|
|
@@ -5874,9 +5879,9 @@ function $6db49ca163afa2c3$export$83fd5de5504a7a67({
|
|
|
5874
5879
|
unpermit_when_possible = false;
|
|
5875
5880
|
} else if (animation) unpermit_when_possible = true;else set_permitted_to_show(false);
|
|
5876
5881
|
last_pos_time = now;
|
|
5877
|
-
last_pos =
|
|
5882
|
+
last_pos = get_scroll_position_();
|
|
5878
5883
|
};
|
|
5879
|
-
$8f9120a1ca151e6a$export$205efb947c7ffd78(handle_scrollpos_change);
|
|
5884
|
+
$8f9120a1ca151e6a$export$205efb947c7ffd78(handle_scrollpos_change, undefined, listen_to_scroll_on_);
|
|
5880
5885
|
$9HbP8$createEffect(() => {
|
|
5881
5886
|
show_triggered();
|
|
5882
5887
|
const first = get_first_result_in_viewport();
|
|
@@ -6529,7 +6534,8 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
|
|
|
6529
6534
|
product_card_template_: product_card_template_,
|
|
6530
6535
|
layout_options_: layout_options_,
|
|
6531
6536
|
id_currently_querying_for_: id_currently_querying_for_,
|
|
6532
|
-
content_blocks_by_row_: content_blocks_by_row_
|
|
6537
|
+
content_blocks_by_row_: content_blocks_by_row_,
|
|
6538
|
+
ConfiguredScrollStatus: ConfiguredScrollStatus
|
|
6533
6539
|
}) {
|
|
6534
6540
|
// The plp_results_ resource will be delayed because we're using createBatchedMemo to not make triplicate API requests, but we need to show the placeholders before already to match Chrome and Firefox's "content has to be there, ready for scroll restoration, before all popstate tasks have been completed"-requirement
|
|
6535
6541
|
const is_loading_ = $9HbP8$createMemo(() => plp_results_.loading || query_base_.loading);
|
|
@@ -6597,6 +6603,7 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
|
|
|
6597
6603
|
product_card_template_: product_card_template_,
|
|
6598
6604
|
num_placeholders_: num_placeholders_
|
|
6599
6605
|
}) : undefined);
|
|
6606
|
+
const layout = $9HbP8$createMemo(() => layout_options_().layout || "grid");
|
|
6600
6607
|
const [get_suspense_is_blocked, set_suspense_is_blocked] = $9HbP8$createSignal(false);
|
|
6601
6608
|
const block_suspense_if_needed = () => {
|
|
6602
6609
|
if (!is_just_after_plp_results_update) return;
|
|
@@ -6668,7 +6675,7 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
|
|
|
6668
6675
|
},
|
|
6669
6676
|
children: product_cards_when_data
|
|
6670
6677
|
});
|
|
6671
|
-
return [$9HbP8$memo((
|
|
6678
|
+
return [$9HbP8$memo(() => $a458486f22b22f63$export$a2cc176055f8f08(layout())), $9HbP8$createComponent((0, $9HbP8$Show), {
|
|
6672
6679
|
get when() {
|
|
6673
6680
|
return doesnt_have_content_blocks();
|
|
6674
6681
|
},
|
|
@@ -6691,22 +6698,79 @@ function $2d25e42846eac370$export$3925f87b1545cfc6({
|
|
|
6691
6698
|
});
|
|
6692
6699
|
},
|
|
6693
6700
|
get children() {
|
|
6694
|
-
return $9HbP8$createComponent((0, $
|
|
6695
|
-
get
|
|
6696
|
-
return
|
|
6697
|
-
},
|
|
6698
|
-
get override_vertical_spacing() {
|
|
6699
|
-
return layout_options_().override_vertical_spacing;
|
|
6700
|
-
},
|
|
6701
|
-
get grid_spacing() {
|
|
6702
|
-
return layout_options_().grid_spacing;
|
|
6701
|
+
return $9HbP8$createComponent((0, $9HbP8$Show), {
|
|
6702
|
+
get when() {
|
|
6703
|
+
return layout() === "grid";
|
|
6703
6704
|
},
|
|
6704
|
-
|
|
6705
|
-
|
|
6706
|
-
|
|
6707
|
-
|
|
6705
|
+
get fallback() {
|
|
6706
|
+
return $9HbP8$createComponent((0, $f32e14878e75af51$export$6649caad96ef8870), {
|
|
6707
|
+
arrow_height_: 25,
|
|
6708
|
+
arrow_width_: 12.5,
|
|
6709
|
+
disable_fading_: true,
|
|
6710
|
+
slider_ref_: slider => {
|
|
6711
|
+
const {
|
|
6712
|
+
insert_here: insert_here,
|
|
6713
|
+
container: container
|
|
6714
|
+
} = slider;
|
|
6715
|
+
const Layout = props => $c8d5ff4524619fcd$export$445d8d3f5f706a40(props, insert_here, true);
|
|
6716
|
+
// Do like this, so we don't have to call mergeProps ourselves
|
|
6717
|
+
$9HbP8$createComponent(Layout, $9HbP8$mergeProps({
|
|
6718
|
+
rows: "all"
|
|
6719
|
+
}, layout_options_, {
|
|
6720
|
+
get cols_at_size() {
|
|
6721
|
+
return modified_cols_at_size();
|
|
6722
|
+
},
|
|
6723
|
+
get layout() {
|
|
6724
|
+
return layout();
|
|
6725
|
+
}
|
|
6726
|
+
}));
|
|
6727
|
+
insert_here.classList.add("generated-spacing");
|
|
6728
|
+
$9HbP8$createEffect(
|
|
6729
|
+
// @ts-ignore
|
|
6730
|
+
$9HbP8$on(query_base_, () => insert_here.scrollTo({
|
|
6731
|
+
left: 0,
|
|
6732
|
+
behavior: "instant"
|
|
6733
|
+
}), {
|
|
6734
|
+
defer: true
|
|
6735
|
+
})); // Scroll to the beginning if a filter or the query changes
|
|
6736
|
+
$9HbP8$slider_fractional_factory(0, 0.75).constructor_plugin.call(slider, {}); // enable fractional scrolling
|
|
6737
|
+
if (ConfiguredScrollStatus) {
|
|
6738
|
+
// Put scroll status into slider container, so it's centered relatively to the products
|
|
6739
|
+
const rendered_scroll_status = ConfiguredScrollStatus({
|
|
6740
|
+
get_scroll_position_: () => insert_here.scrollLeft,
|
|
6741
|
+
listen_to_scroll_on_: insert_here
|
|
6742
|
+
});
|
|
6743
|
+
const {
|
|
6744
|
+
childNodes: childNodes
|
|
6745
|
+
} = container;
|
|
6746
|
+
// We have to use `insert` over Element.append, because ConfiguredScrollStatus is in an ErrorBoundary and therefore returns a function. `insert` will wipe all children, therefore save them first and then tell insert that the element should contain these elements + whatever ScrollStatus returns
|
|
6747
|
+
$9HbP8$insert(container, $9HbP8$createMemo(() => [...childNodes, rendered_scroll_status]));
|
|
6748
|
+
}
|
|
6749
|
+
},
|
|
6750
|
+
children: listing_contents
|
|
6751
|
+
});
|
|
6708
6752
|
},
|
|
6709
|
-
children
|
|
6753
|
+
get children() {
|
|
6754
|
+
return $9HbP8$createComponent((0, $c8d5ff4524619fcd$export$d21e32dfedac04be), {
|
|
6755
|
+
get cols_at_size() {
|
|
6756
|
+
return modified_cols_at_size();
|
|
6757
|
+
},
|
|
6758
|
+
get override_vertical_spacing() {
|
|
6759
|
+
return layout_options_().override_vertical_spacing;
|
|
6760
|
+
},
|
|
6761
|
+
get grid_spacing() {
|
|
6762
|
+
return layout_options_().grid_spacing;
|
|
6763
|
+
},
|
|
6764
|
+
rows: "all",
|
|
6765
|
+
get layout() {
|
|
6766
|
+
return layout();
|
|
6767
|
+
},
|
|
6768
|
+
element_attributes: {
|
|
6769
|
+
class: "cards"
|
|
6770
|
+
},
|
|
6771
|
+
children: listing_contents
|
|
6772
|
+
});
|
|
6773
|
+
}
|
|
6710
6774
|
});
|
|
6711
6775
|
}
|
|
6712
6776
|
})];
|
|
@@ -8000,8 +8064,11 @@ async function $641bba2917fe862b$export$cc42dd29bf655ab6({
|
|
|
8000
8064
|
const new_displays = last_response.displays;
|
|
8001
8065
|
displays.push(...new_displays);
|
|
8002
8066
|
next_cursor = last_response.cursor;
|
|
8003
|
-
if (new_displays.length < fetch_this_time && last_response.failed !== true) break;
|
|
8004
8067
|
const left_to_fetch = total_products_to_fetch - displays.length;
|
|
8068
|
+
if (!next_cursor) {
|
|
8069
|
+
if (left_to_fetch > 0) $9HbP8$dwarn("Got response without a cursor when attempting to restore scroll position, giving up", last_response, total_products_to_fetch, displays);
|
|
8070
|
+
break;
|
|
8071
|
+
}
|
|
8005
8072
|
fetch_this_time = left_to_fetch < $641bba2917fe862b$var$api_max_products_per_request ? left_to_fetch : $641bba2917fe862b$var$api_max_products_per_request;
|
|
8006
8073
|
}
|
|
8007
8074
|
return {
|
|
@@ -8314,6 +8381,20 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
8314
8381
|
// @ts-ignore - there's no type error here when writing the code, but parcel can't generate types that include the symbol, so we need to suppress the error that creates in our pipelines
|
|
8315
8382
|
const category_title_type = category_title_[(0, $4fb3a1cf207a7d5c$export$5c28802497c8a83c)];
|
|
8316
8383
|
const extra_sort_and_filter_args_ = {};
|
|
8384
|
+
const ConfiguredScrollStatus = (extraProps = {}) => $9HbP8$createComponent((0, $b7436a6d1fd64e3b$export$b69d0d92862de18b), {
|
|
8385
|
+
severity_: "error",
|
|
8386
|
+
message_: "Scroll status failed",
|
|
8387
|
+
get children() {
|
|
8388
|
+
return $6db49ca163afa2c3$export$83fd5de5504a7a67({
|
|
8389
|
+
first_result_in_viewport_: first_result_in_viewport_,
|
|
8390
|
+
last_result_in_viewport_: last_result_in_viewport_,
|
|
8391
|
+
formatted_number_of_results_: formatted_number_of_results_,
|
|
8392
|
+
i18n_: i18n_,
|
|
8393
|
+
number_of_results_: $9HbP8$createMemo(() => plp_products_()?.n_hits),
|
|
8394
|
+
...extraProps
|
|
8395
|
+
});
|
|
8396
|
+
}
|
|
8397
|
+
});
|
|
8317
8398
|
const make_product_count_ = () => (() => {
|
|
8318
8399
|
const _el$ = $9HbP8$getNextElement($df5d81d0fe61ff21$var$_tmpl$),
|
|
8319
8400
|
_el$3 = _el$.firstChild,
|
|
@@ -8532,6 +8613,7 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
8532
8613
|
sort_or_filter_open_: sort_or_filter_open_,
|
|
8533
8614
|
desktop_filter_elements_: desktop_filter_elements_,
|
|
8534
8615
|
content_blocks_by_row_: content_blocks_by_row_,
|
|
8616
|
+
ConfiguredScrollStatus: ConfiguredScrollStatus,
|
|
8535
8617
|
id_currently_querying_for_: id_to_query_for_,
|
|
8536
8618
|
no_results_options_: {
|
|
8537
8619
|
selected_filters_: selected_filters_,
|
|
@@ -8544,17 +8626,12 @@ function $df5d81d0fe61ff21$export$f7d2f673fc2f091d({
|
|
|
8544
8626
|
});
|
|
8545
8627
|
}
|
|
8546
8628
|
}), _el$26, _co$10);
|
|
8547
|
-
$9HbP8$insert(_el$13, $9HbP8$createComponent((0, $
|
|
8548
|
-
|
|
8549
|
-
|
|
8629
|
+
$9HbP8$insert(_el$13, $9HbP8$createComponent((0, $9HbP8$Show), {
|
|
8630
|
+
get when() {
|
|
8631
|
+
return layout_options_().layout === "grid";
|
|
8632
|
+
},
|
|
8550
8633
|
get children() {
|
|
8551
|
-
return $
|
|
8552
|
-
first_result_in_viewport_: first_result_in_viewport_,
|
|
8553
|
-
last_result_in_viewport_: last_result_in_viewport_,
|
|
8554
|
-
formatted_number_of_results_: formatted_number_of_results_,
|
|
8555
|
-
i18n_: i18n_,
|
|
8556
|
-
number_of_results_: $9HbP8$createMemo(() => plp_products_()?.n_hits)
|
|
8557
|
-
});
|
|
8634
|
+
return $9HbP8$createComponent(ConfiguredScrollStatus, {});
|
|
8558
8635
|
}
|
|
8559
8636
|
}), _el$28, _co$11);
|
|
8560
8637
|
$9HbP8$insert(_el$13, $9HbP8$createComponent((0, $b7436a6d1fd64e3b$export$b69d0d92862de18b), {
|
|
@@ -8946,7 +9023,8 @@ function $961b5c64bef4662f$export$e2bf8ce7779e827e(props) {
|
|
|
8946
9023
|
scroll_restoration_data_: scroll_restoration_data_,
|
|
8947
9024
|
layout_options_: $9HbP8$createMemo(() => ({
|
|
8948
9025
|
cols_at_size: $b5cccc8ee7d24677$export$6daf8749b65a1b77(props.cols_at_size),
|
|
8949
|
-
...grid_spacing_override()
|
|
9026
|
+
...grid_spacing_override(),
|
|
9027
|
+
layout: props.layout || "grid"
|
|
8950
9028
|
})),
|
|
8951
9029
|
product_card_template_: product_card_template,
|
|
8952
9030
|
sorting_query_param_: sorting_query_param_,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@depict-ai/ui",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.13",
|
|
4
4
|
"description": "Base package containing the actual UI of Depict UI along with translations, with a not-simplified API. We recommend using @depict-ai/js-ui or @depict-ai/react-ui instead.",
|
|
5
5
|
"packageManager": "yarn@3.2.2",
|
|
6
6
|
"sass": "styles.scss",
|