@depict-ai/react-ui 4.1.2 → 4.1.4

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 CHANGED
@@ -42,7 +42,7 @@ $parcel$export(module.exports, "version", () => $efbdd2dab4314170$export$83d89fb
42
42
  $parcel$export(module.exports, "Navigation", () => $0d3a2413fdeb34b9$export$b8a61e5c71402559);
43
43
  /*! Depict.ai search and product listing react SDK wrapper */ // This is where the actual source of your React stuff should live
44
44
  // Note, if you add an export here, also add one in src-server/main.ts
45
- const $efbdd2dab4314170$export$83d89fbfd8236492 = "4.1.2";
45
+ const $efbdd2dab4314170$export$83d89fbfd8236492 = "4.1.4";
46
46
  const $ef516b1f92253963$export$8e769ad4338a911e = {
47
47
  usedLocale: $2kiy7$solidjs.createSignal((0, $2kiy7$depictaiuilocales.defaultLocale)),
48
48
  search_instances: new Map(),
@@ -512,20 +512,27 @@ async function $3441d987b5ea85cb$export$32024253978abdc7(_ref) {
512
512
  component_props: component_props,
513
513
  component_portals: component_portals,
514
514
  set_portals: set_portals,
515
- get_react_template: get_react_template
515
+ get_react_template: get_react_template,
516
+ set_on_index_change_: set_on_index_change_
516
517
  } = _ref;
517
518
  let set_react_has_ran_hooks;
518
519
  let was_cleaned_up = false;
519
520
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
520
521
  const solid_container = document.createElement("div");
522
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $2kiy7$solidjs.createSignal();
521
523
  let call_when_template_changes;
522
524
  const owner = $2kiy7$solidjs.getOwner();
523
525
  const reactProductCard = $2kiy7$reactjsxruntime.jsx(props => {
524
526
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
525
527
  $2kiy7$react.useEffect(set_react_has_ran_hooks, []);
526
528
  const [react_template, set_react_template] = $2kiy7$react.useState(() => $2kiy7$solidjs.untrack(get_react_template));
529
+ const [index, setIndex] = $2kiy7$react.useState(0);
530
+ setIndexFunctionSetter(() => setIndex);
527
531
  call_when_template_changes = set_react_template;
528
- return react_template(props);
532
+ return react_template(set_on_index_change_ ? {
533
+ ...props,
534
+ index: index
535
+ } : props);
529
536
  }, component_props);
530
537
  const reactProductCardInErrorBoundary = $2kiy7$reactjsxruntime.jsx((0, $e9048b15cf1e8792$export$d0f82e3ef89b1f22), {
531
538
  children: reactProductCard,
@@ -537,6 +544,10 @@ async function $3441d987b5ea85cb$export$32024253978abdc7(_ref) {
537
544
  const portal = $2kiy7$reactdom.createPortal(reactProductCardInErrorBoundary, solid_container);
538
545
  component_portals.add(portal);
539
546
  set_portals([...component_portals]);
547
+ set_on_index_change_ === null || set_on_index_change_ === void 0 || set_on_index_change_(newIndex => {
548
+ var _setIndexFunctionAcce;
549
+ return (_setIndexFunctionAcce = setIndexFunctionAccessor()) === null || _setIndexFunctionAcce === void 0 ? void 0 : _setIndexFunctionAcce(newIndex);
550
+ });
540
551
  $2kiy7$solidjs.createEffect($2kiy7$solidjs.on(get_react_template, new_template => queueMicrotask(() => {
541
552
  var _call_when_template_c;
542
553
  return (
@@ -676,13 +687,14 @@ function $a81b3f46133355c5$var$SolidSearchPage(props, set_portals) {
676
687
  return (_props$gridSpacing = props.gridSpacing) !== null && _props$gridSpacing !== void 0 ? _props$gridSpacing : (0, $2kiy7$depictaiui.defaultGridSpacing);
677
688
  },
678
689
  depict_search: depict_search(),
679
- product_card_template: display => $3441d987b5ea85cb$export$32024253978abdc7({
690
+ product_card_template: (display, info) => $3441d987b5ea85cb$export$32024253978abdc7({
680
691
  component_props: {
681
692
  display: display
682
693
  },
683
694
  get_react_template: () => props.productCard,
684
695
  component_portals: component_portals,
685
- set_portals: set_portals
696
+ set_portals: set_portals,
697
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
686
698
  }),
687
699
  get content_blocks_by_row() {
688
700
  return transformed_content_blocks();
@@ -779,13 +791,14 @@ function $b0f04d11b78e06c3$var$SolidCategoryPage(props, set_portals) {
779
791
  get layout() {
780
792
  return props.layout;
781
793
  },
782
- product_card_template: display => $3441d987b5ea85cb$export$32024253978abdc7({
794
+ product_card_template: (display, info) => $3441d987b5ea85cb$export$32024253978abdc7({
783
795
  component_props: {
784
796
  display: display
785
797
  },
786
798
  get_react_template: () => props.productCard,
787
799
  component_portals: component_portals,
788
- set_portals: set_portals
800
+ set_portals: set_portals,
801
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
789
802
  })
790
803
  });
791
804
  });
@@ -886,13 +899,14 @@ function $745b83c12baac3c0$export$5abb40edfde2a843(props, set_portals) {
886
899
  get recommendations() {
887
900
  return props.recommendations;
888
901
  },
889
- product_card_template: display => $3441d987b5ea85cb$export$32024253978abdc7({
902
+ product_card_template: (display, info) => $3441d987b5ea85cb$export$32024253978abdc7({
890
903
  component_props: {
891
904
  display: display
892
905
  },
893
906
  get_react_template: () => props.productCard,
894
907
  component_portals: component_portals,
895
- set_portals: set_portals
908
+ set_portals: set_portals,
909
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
896
910
  }),
897
911
  get cols_at_size() {
898
912
  return props.columnsAtSize || (0, $2kiy7$depictaiui.defaultColsAtSize);
@@ -912,7 +926,7 @@ function $3b36cc844440a979$export$e46079a2793e9ec7(props, set_portals) {
912
926
  get recommendations() {
913
927
  return props.recommendations;
914
928
  },
915
- product_card_template: display => {
929
+ product_card_template: (display, info) => {
916
930
  if (0, $2kiy7$solidjsweb.isServer) {
917
931
  // This function can't be async on the server
918
932
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -927,7 +941,8 @@ function $3b36cc844440a979$export$e46079a2793e9ec7(props, set_portals) {
927
941
  },
928
942
  get_react_template: () => props.productCard,
929
943
  component_portals: component_portals,
930
- set_portals: set_portals
944
+ set_portals: set_portals,
945
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
931
946
  });
932
947
  },
933
948
  get cols_at_size() {
package/ES10/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import React, { PropsWithChildren, FC, ReactNode, ReactPortal, ReactElement } fr
3
3
  import { BaseCategoryProviderConfig, BaseProviderConfig, BaseSearchProviderConfig, ModernDisplayWithPageUrl, BaseProductListingConfig, BaseSearchPageConfig, BaseCategoryPageConfig, CategoryTitle, embedded_num_products, ListingQuery, ImagePlaceholder as _ImagePlaceholder1, TextPlaceholder as _TextPlaceholder1, ExclusiveId, fetchDepictRecommendations, FilterWithData } from "@depict-ai/ui/ES10";
4
4
  import { Locale } from "@depict-ai/ui/locales/ES10";
5
5
  import { Display, ModernDisplay } from "@depict-ai/utilishared/ES10";
6
- export const version = "4.1.2";
6
+ export const version = "4.1.4";
7
7
  interface UsePerformanceClientReturn {
8
8
  dpc: DPC;
9
9
  }
@@ -162,6 +162,8 @@ interface PLPConfig<T extends Display> extends BaseProductListingConfig {
162
162
  export interface DepictProductCardProps<T extends Display> {
163
163
  /** The display data to render. */
164
164
  display: T | null;
165
+ /** The index of the product card. Please note that product cards may stay at the same place (not get re-rendered) or move around as the results change. */
166
+ index: number;
165
167
  }
166
168
  /**
167
169
  * Depict product card to use for rendering products.
package/ES10/index.js CHANGED
@@ -15,7 +15,7 @@ import { renderToString as $jb2Oo$renderToString } from "react-dom/server";
15
15
  // Note, if you add an export here, also add one in src-server/main.ts
16
16
  import { register_es_version } from "../multi_import_deduplicator.mjs";
17
17
  register_es_version("react-ui", "ES10");
18
- const $9bd9bb8700ab2ada$export$83d89fbfd8236492 = "4.1.2";
18
+ const $9bd9bb8700ab2ada$export$83d89fbfd8236492 = "4.1.4";
19
19
  const $8c691d7f86317052$export$8e769ad4338a911e = {
20
20
  usedLocale: $jb2Oo$createSignal((0, $jb2Oo$defaultLocale)),
21
21
  search_instances: new Map(),
@@ -485,20 +485,27 @@ async function $cce08f18e2476cbf$export$32024253978abdc7(_ref) {
485
485
  component_props: component_props,
486
486
  component_portals: component_portals,
487
487
  set_portals: set_portals,
488
- get_react_template: get_react_template
488
+ get_react_template: get_react_template,
489
+ set_on_index_change_: set_on_index_change_
489
490
  } = _ref;
490
491
  let set_react_has_ran_hooks;
491
492
  let was_cleaned_up = false;
492
493
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
493
494
  const solid_container = document.createElement("div");
495
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $jb2Oo$createSignal();
494
496
  let call_when_template_changes;
495
497
  const owner = $jb2Oo$getOwner();
496
498
  const reactProductCard = $jb2Oo$jsx(props => {
497
499
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
498
500
  $jb2Oo$useEffect(set_react_has_ran_hooks, []);
499
501
  const [react_template, set_react_template] = $jb2Oo$useState(() => $jb2Oo$untrack(get_react_template));
502
+ const [index, setIndex] = $jb2Oo$useState(0);
503
+ setIndexFunctionSetter(() => setIndex);
500
504
  call_when_template_changes = set_react_template;
501
- return react_template(props);
505
+ return react_template(set_on_index_change_ ? {
506
+ ...props,
507
+ index: index
508
+ } : props);
502
509
  }, component_props);
503
510
  const reactProductCardInErrorBoundary = $jb2Oo$jsx((0, $88d93ed7309e90d1$export$d0f82e3ef89b1f22), {
504
511
  children: reactProductCard,
@@ -510,6 +517,10 @@ async function $cce08f18e2476cbf$export$32024253978abdc7(_ref) {
510
517
  const portal = $jb2Oo$createPortal(reactProductCardInErrorBoundary, solid_container);
511
518
  component_portals.add(portal);
512
519
  set_portals([...component_portals]);
520
+ set_on_index_change_ === null || set_on_index_change_ === void 0 || set_on_index_change_(newIndex => {
521
+ var _setIndexFunctionAcce;
522
+ return (_setIndexFunctionAcce = setIndexFunctionAccessor()) === null || _setIndexFunctionAcce === void 0 ? void 0 : _setIndexFunctionAcce(newIndex);
523
+ });
513
524
  $jb2Oo$createEffect($jb2Oo$on(get_react_template, new_template => queueMicrotask(() => {
514
525
  var _call_when_template_c;
515
526
  return (
@@ -649,13 +660,14 @@ function $f33e2dee70c97da3$var$SolidSearchPage(props, set_portals) {
649
660
  return (_props$gridSpacing = props.gridSpacing) !== null && _props$gridSpacing !== void 0 ? _props$gridSpacing : (0, $jb2Oo$defaultGridSpacing);
650
661
  },
651
662
  depict_search: depict_search(),
652
- product_card_template: display => $cce08f18e2476cbf$export$32024253978abdc7({
663
+ product_card_template: (display, info) => $cce08f18e2476cbf$export$32024253978abdc7({
653
664
  component_props: {
654
665
  display: display
655
666
  },
656
667
  get_react_template: () => props.productCard,
657
668
  component_portals: component_portals,
658
- set_portals: set_portals
669
+ set_portals: set_portals,
670
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
659
671
  }),
660
672
  get content_blocks_by_row() {
661
673
  return transformed_content_blocks();
@@ -752,13 +764,14 @@ function $710dda89475e8c05$var$SolidCategoryPage(props, set_portals) {
752
764
  get layout() {
753
765
  return props.layout;
754
766
  },
755
- product_card_template: display => $cce08f18e2476cbf$export$32024253978abdc7({
767
+ product_card_template: (display, info) => $cce08f18e2476cbf$export$32024253978abdc7({
756
768
  component_props: {
757
769
  display: display
758
770
  },
759
771
  get_react_template: () => props.productCard,
760
772
  component_portals: component_portals,
761
- set_portals: set_portals
773
+ set_portals: set_portals,
774
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
762
775
  })
763
776
  });
764
777
  });
@@ -859,13 +872,14 @@ function $c02e9fd51f31a1bd$export$5abb40edfde2a843(props, set_portals) {
859
872
  get recommendations() {
860
873
  return props.recommendations;
861
874
  },
862
- product_card_template: display => $cce08f18e2476cbf$export$32024253978abdc7({
875
+ product_card_template: (display, info) => $cce08f18e2476cbf$export$32024253978abdc7({
863
876
  component_props: {
864
877
  display: display
865
878
  },
866
879
  get_react_template: () => props.productCard,
867
880
  component_portals: component_portals,
868
- set_portals: set_portals
881
+ set_portals: set_portals,
882
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
869
883
  }),
870
884
  get cols_at_size() {
871
885
  return props.columnsAtSize || (0, $jb2Oo$defaultColsAtSize);
@@ -885,7 +899,7 @@ function $cd68097a7ee08669$export$e46079a2793e9ec7(props, set_portals) {
885
899
  get recommendations() {
886
900
  return props.recommendations;
887
901
  },
888
- product_card_template: display => {
902
+ product_card_template: (display, info) => {
889
903
  if (0, $jb2Oo$isServer) {
890
904
  // This function can't be async on the server
891
905
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -900,7 +914,8 @@ function $cd68097a7ee08669$export$e46079a2793e9ec7(props, set_portals) {
900
914
  },
901
915
  get_react_template: () => props.productCard,
902
916
  component_portals: component_portals,
903
- set_portals: set_portals
917
+ set_portals: set_portals,
918
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
904
919
  });
905
920
  },
906
921
  get cols_at_size() {
package/latest/index.cjs CHANGED
@@ -42,7 +42,7 @@ $parcel$export(module.exports, "version", () => $db7b67857900028b$export$83d89fb
42
42
  $parcel$export(module.exports, "Navigation", () => $b742053c966024b4$export$b8a61e5c71402559);
43
43
  /*! Depict.ai search and product listing react SDK wrapper */ // This is where the actual source of your React stuff should live
44
44
  // Note, if you add an export here, also add one in src-server/main.ts
45
- const $db7b67857900028b$export$83d89fbfd8236492 = "4.1.2";
45
+ const $db7b67857900028b$export$83d89fbfd8236492 = "4.1.4";
46
46
  const $0b7cd4fb39fc3502$export$8e769ad4338a911e = {
47
47
  usedLocale: $2IzJs$solidjs.createSignal((0, $2IzJs$depictaiuilocales.defaultLocale)),
48
48
  search_instances: new Map(),
@@ -488,20 +488,27 @@ async function $6081519c185fcf70$export$32024253978abdc7({
488
488
  component_props: component_props,
489
489
  component_portals: component_portals,
490
490
  set_portals: set_portals,
491
- get_react_template: get_react_template
491
+ get_react_template: get_react_template,
492
+ set_on_index_change_: set_on_index_change_
492
493
  }) {
493
494
  let set_react_has_ran_hooks;
494
495
  let was_cleaned_up = false;
495
496
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
496
497
  const solid_container = document.createElement("div");
498
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $2IzJs$solidjs.createSignal();
497
499
  let call_when_template_changes;
498
500
  const owner = $2IzJs$solidjs.getOwner();
499
501
  const reactProductCard = $2IzJs$reactjsxruntime.jsx(props => {
500
502
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
501
503
  $2IzJs$react.useEffect(set_react_has_ran_hooks, []);
502
504
  const [react_template, set_react_template] = $2IzJs$react.useState(() => $2IzJs$solidjs.untrack(get_react_template));
505
+ const [index, setIndex] = $2IzJs$react.useState(0);
506
+ setIndexFunctionSetter(() => setIndex);
503
507
  call_when_template_changes = set_react_template;
504
- return react_template(props);
508
+ return react_template(set_on_index_change_ ? {
509
+ ...props,
510
+ index: index
511
+ } : props);
505
512
  }, component_props);
506
513
  const reactProductCardInErrorBoundary = $2IzJs$reactjsxruntime.jsx((0, $d7a14567b529586f$export$d0f82e3ef89b1f22), {
507
514
  children: reactProductCard,
@@ -513,6 +520,7 @@ async function $6081519c185fcf70$export$32024253978abdc7({
513
520
  const portal = $2IzJs$reactdom.createPortal(reactProductCardInErrorBoundary, solid_container);
514
521
  component_portals.add(portal);
515
522
  set_portals([...component_portals]);
523
+ set_on_index_change_?.(newIndex => setIndexFunctionAccessor()?.(newIndex));
516
524
  $2IzJs$solidjs.createEffect($2IzJs$solidjs.on(get_react_template, new_template => queueMicrotask(() =>
517
525
  // When the parent react component re-executes and provides a new product card, we want our react portal to also re-render
518
526
  // if we update the state inside the portal synchronously from the parent call react gets confused with "Warning: Cannot update a component (`Unknown`) while rendering a different component (`$48d7f568740a317d$export$f7d2f673fc2f091d`). To locate the bad setState() call inside `$48d7f568740a317d$export$f7d2f673fc2f091d`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render"
@@ -642,13 +650,14 @@ function $4e47e1e003da166e$var$SolidSearchPage(props, set_portals) {
642
650
  return props.gridSpacing ?? (0, $2IzJs$depictaiui.defaultGridSpacing);
643
651
  },
644
652
  depict_search: depict_search(),
645
- product_card_template: display => $6081519c185fcf70$export$32024253978abdc7({
653
+ product_card_template: (display, info) => $6081519c185fcf70$export$32024253978abdc7({
646
654
  component_props: {
647
655
  display: display
648
656
  },
649
657
  get_react_template: () => props.productCard,
650
658
  component_portals: component_portals,
651
- set_portals: set_portals
659
+ set_portals: set_portals,
660
+ set_on_index_change_: info?.set_on_index_change
652
661
  }),
653
662
  get content_blocks_by_row() {
654
663
  return transformed_content_blocks();
@@ -742,13 +751,14 @@ function $03d75efbc2476217$var$SolidCategoryPage(props, set_portals) {
742
751
  get layout() {
743
752
  return props.layout;
744
753
  },
745
- product_card_template: display => $6081519c185fcf70$export$32024253978abdc7({
754
+ product_card_template: (display, info) => $6081519c185fcf70$export$32024253978abdc7({
746
755
  component_props: {
747
756
  display: display
748
757
  },
749
758
  get_react_template: () => props.productCard,
750
759
  component_portals: component_portals,
751
- set_portals: set_portals
760
+ set_portals: set_portals,
761
+ set_on_index_change_: info?.set_on_index_change
752
762
  })
753
763
  });
754
764
  });
@@ -847,13 +857,14 @@ function $8ffd7da37fdd46be$export$5abb40edfde2a843(props, set_portals) {
847
857
  get recommendations() {
848
858
  return props.recommendations;
849
859
  },
850
- product_card_template: display => $6081519c185fcf70$export$32024253978abdc7({
860
+ product_card_template: (display, info) => $6081519c185fcf70$export$32024253978abdc7({
851
861
  component_props: {
852
862
  display: display
853
863
  },
854
864
  get_react_template: () => props.productCard,
855
865
  component_portals: component_portals,
856
- set_portals: set_portals
866
+ set_portals: set_portals,
867
+ set_on_index_change_: info?.set_on_index_change
857
868
  }),
858
869
  get cols_at_size() {
859
870
  return props.columnsAtSize || (0, $2IzJs$depictaiui.defaultColsAtSize);
@@ -872,7 +883,7 @@ function $c6b960f2a07285c8$export$e46079a2793e9ec7(props, set_portals) {
872
883
  get recommendations() {
873
884
  return props.recommendations;
874
885
  },
875
- product_card_template: display => {
886
+ product_card_template: (display, info) => {
876
887
  if (0, $2IzJs$solidjsweb.isServer) {
877
888
  // This function can't be async on the server
878
889
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -887,7 +898,8 @@ function $c6b960f2a07285c8$export$e46079a2793e9ec7(props, set_portals) {
887
898
  },
888
899
  get_react_template: () => props.productCard,
889
900
  component_portals: component_portals,
890
- set_portals: set_portals
901
+ set_portals: set_portals,
902
+ set_on_index_change_: info?.set_on_index_change
891
903
  });
892
904
  },
893
905
  get cols_at_size() {
package/latest/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import React, { PropsWithChildren, FC, ReactNode, ReactPortal, ReactElement } fr
3
3
  import { BaseCategoryProviderConfig, BaseProviderConfig, BaseSearchProviderConfig, ModernDisplayWithPageUrl, BaseProductListingConfig, BaseSearchPageConfig, BaseCategoryPageConfig, CategoryTitle, embedded_num_products, ListingQuery, ImagePlaceholder as _ImagePlaceholder1, TextPlaceholder as _TextPlaceholder1, ExclusiveId, fetchDepictRecommendations, FilterWithData } from "@depict-ai/ui/latest";
4
4
  import { Locale } from "@depict-ai/ui/locales/latest";
5
5
  import { Display, ModernDisplay } from "@depict-ai/utilishared/latest";
6
- export const version = "4.1.2";
6
+ export const version = "4.1.4";
7
7
  interface UsePerformanceClientReturn {
8
8
  dpc: DPC;
9
9
  }
@@ -162,6 +162,8 @@ interface PLPConfig<T extends Display> extends BaseProductListingConfig {
162
162
  export interface DepictProductCardProps<T extends Display> {
163
163
  /** The display data to render. */
164
164
  display: T | null;
165
+ /** The index of the product card. Please note that product cards may stay at the same place (not get re-rendered) or move around as the results change. */
166
+ index: number;
165
167
  }
166
168
  /**
167
169
  * Depict product card to use for rendering products.
package/latest/index.js CHANGED
@@ -15,7 +15,7 @@ import { renderToString as $2GFvs$renderToString } from "react-dom/server";
15
15
  // Note, if you add an export here, also add one in src-server/main.ts
16
16
  import { register_es_version } from "../multi_import_deduplicator.mjs";
17
17
  register_es_version("react-ui", "latest");
18
- const $c9c4d066f9a5b51b$export$83d89fbfd8236492 = "4.1.2";
18
+ const $c9c4d066f9a5b51b$export$83d89fbfd8236492 = "4.1.4";
19
19
  const $42858f023ef23dab$export$8e769ad4338a911e = {
20
20
  usedLocale: $2GFvs$createSignal((0, $2GFvs$defaultLocale)),
21
21
  search_instances: new Map(),
@@ -461,20 +461,27 @@ async function $bcf84a32dc612a43$export$32024253978abdc7({
461
461
  component_props: component_props,
462
462
  component_portals: component_portals,
463
463
  set_portals: set_portals,
464
- get_react_template: get_react_template
464
+ get_react_template: get_react_template,
465
+ set_on_index_change_: set_on_index_change_
465
466
  }) {
466
467
  let set_react_has_ran_hooks;
467
468
  let was_cleaned_up = false;
468
469
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
469
470
  const solid_container = document.createElement("div");
471
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $2GFvs$createSignal();
470
472
  let call_when_template_changes;
471
473
  const owner = $2GFvs$getOwner();
472
474
  const reactProductCard = $2GFvs$jsx(props => {
473
475
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
474
476
  $2GFvs$useEffect(set_react_has_ran_hooks, []);
475
477
  const [react_template, set_react_template] = $2GFvs$useState(() => $2GFvs$untrack(get_react_template));
478
+ const [index, setIndex] = $2GFvs$useState(0);
479
+ setIndexFunctionSetter(() => setIndex);
476
480
  call_when_template_changes = set_react_template;
477
- return react_template(props);
481
+ return react_template(set_on_index_change_ ? {
482
+ ...props,
483
+ index: index
484
+ } : props);
478
485
  }, component_props);
479
486
  const reactProductCardInErrorBoundary = $2GFvs$jsx((0, $d5c9e1f3545b4984$export$d0f82e3ef89b1f22), {
480
487
  children: reactProductCard,
@@ -486,6 +493,7 @@ async function $bcf84a32dc612a43$export$32024253978abdc7({
486
493
  const portal = $2GFvs$createPortal(reactProductCardInErrorBoundary, solid_container);
487
494
  component_portals.add(portal);
488
495
  set_portals([...component_portals]);
496
+ set_on_index_change_?.(newIndex => setIndexFunctionAccessor()?.(newIndex));
489
497
  $2GFvs$createEffect($2GFvs$on(get_react_template, new_template => queueMicrotask(() =>
490
498
  // When the parent react component re-executes and provides a new product card, we want our react portal to also re-render
491
499
  // if we update the state inside the portal synchronously from the parent call react gets confused with "Warning: Cannot update a component (`Unknown`) while rendering a different component (`$48d7f568740a317d$export$f7d2f673fc2f091d`). To locate the bad setState() call inside `$48d7f568740a317d$export$f7d2f673fc2f091d`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render"
@@ -615,13 +623,14 @@ function $2f377099d56e566c$var$SolidSearchPage(props, set_portals) {
615
623
  return props.gridSpacing ?? (0, $2GFvs$defaultGridSpacing);
616
624
  },
617
625
  depict_search: depict_search(),
618
- product_card_template: display => $bcf84a32dc612a43$export$32024253978abdc7({
626
+ product_card_template: (display, info) => $bcf84a32dc612a43$export$32024253978abdc7({
619
627
  component_props: {
620
628
  display: display
621
629
  },
622
630
  get_react_template: () => props.productCard,
623
631
  component_portals: component_portals,
624
- set_portals: set_portals
632
+ set_portals: set_portals,
633
+ set_on_index_change_: info?.set_on_index_change
625
634
  }),
626
635
  get content_blocks_by_row() {
627
636
  return transformed_content_blocks();
@@ -715,13 +724,14 @@ function $6e2ebc6b1506f2c7$var$SolidCategoryPage(props, set_portals) {
715
724
  get layout() {
716
725
  return props.layout;
717
726
  },
718
- product_card_template: display => $bcf84a32dc612a43$export$32024253978abdc7({
727
+ product_card_template: (display, info) => $bcf84a32dc612a43$export$32024253978abdc7({
719
728
  component_props: {
720
729
  display: display
721
730
  },
722
731
  get_react_template: () => props.productCard,
723
732
  component_portals: component_portals,
724
- set_portals: set_portals
733
+ set_portals: set_portals,
734
+ set_on_index_change_: info?.set_on_index_change
725
735
  })
726
736
  });
727
737
  });
@@ -820,13 +830,14 @@ function $4fd5dc0e231a60d9$export$5abb40edfde2a843(props, set_portals) {
820
830
  get recommendations() {
821
831
  return props.recommendations;
822
832
  },
823
- product_card_template: display => $bcf84a32dc612a43$export$32024253978abdc7({
833
+ product_card_template: (display, info) => $bcf84a32dc612a43$export$32024253978abdc7({
824
834
  component_props: {
825
835
  display: display
826
836
  },
827
837
  get_react_template: () => props.productCard,
828
838
  component_portals: component_portals,
829
- set_portals: set_portals
839
+ set_portals: set_portals,
840
+ set_on_index_change_: info?.set_on_index_change
830
841
  }),
831
842
  get cols_at_size() {
832
843
  return props.columnsAtSize || (0, $2GFvs$defaultColsAtSize);
@@ -845,7 +856,7 @@ function $4d5c3f13a5ae62a7$export$e46079a2793e9ec7(props, set_portals) {
845
856
  get recommendations() {
846
857
  return props.recommendations;
847
858
  },
848
- product_card_template: display => {
859
+ product_card_template: (display, info) => {
849
860
  if (0, $2GFvs$isServer) {
850
861
  // This function can't be async on the server
851
862
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -860,7 +871,8 @@ function $4d5c3f13a5ae62a7$export$e46079a2793e9ec7(props, set_portals) {
860
871
  },
861
872
  get_react_template: () => props.productCard,
862
873
  component_portals: component_portals,
863
- set_portals: set_portals
874
+ set_portals: set_portals,
875
+ set_on_index_change_: info?.set_on_index_change
864
876
  });
865
877
  },
866
878
  get cols_at_size() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@depict-ai/react-ui",
3
- "version": "4.1.2",
3
+ "version": "4.1.4",
4
4
  "packageManager": "yarn@3.2.2",
5
5
  "source": "src/index.ts",
6
6
  "types": "ES10/index.d.ts",
@@ -137,7 +137,7 @@
137
137
  "@babel/runtime-corejs3": "latest",
138
138
  "@depict-ai/dpc": "^2.0.8",
139
139
  "@depict-ai/plp-styling": "^3.0.14",
140
- "@depict-ai/ui": "^4.1.2",
140
+ "@depict-ai/ui": "^4.1.3",
141
141
  "@depict-ai/utilishared": "^2.0.16",
142
142
  "solid-js": "^1.8.12"
143
143
  },
@@ -96,20 +96,27 @@ async function $3441d987b5ea85cb$export$32024253978abdc7(_ref) {
96
96
  component_props: component_props,
97
97
  component_portals: component_portals,
98
98
  set_portals: set_portals,
99
- get_react_template: get_react_template
99
+ get_react_template: get_react_template,
100
+ set_on_index_change_: set_on_index_change_
100
101
  } = _ref;
101
102
  let set_react_has_ran_hooks;
102
103
  let was_cleaned_up = false;
103
104
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
104
105
  const solid_container = document.createElement("div");
106
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $aNCHr$solidjs.createSignal();
105
107
  let call_when_template_changes;
106
108
  const owner = $aNCHr$solidjs.getOwner();
107
109
  const reactProductCard = $aNCHr$reactjsxruntime.jsx(props => {
108
110
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
109
111
  $aNCHr$react.useEffect(set_react_has_ran_hooks, []);
110
112
  const [react_template, set_react_template] = $aNCHr$react.useState(() => $aNCHr$solidjs.untrack(get_react_template));
113
+ const [index, setIndex] = $aNCHr$react.useState(0);
114
+ setIndexFunctionSetter(() => setIndex);
111
115
  call_when_template_changes = set_react_template;
112
- return react_template(props);
116
+ return react_template(set_on_index_change_ ? {
117
+ ...props,
118
+ index: index
119
+ } : props);
113
120
  }, component_props);
114
121
  const reactProductCardInErrorBoundary = $aNCHr$reactjsxruntime.jsx((0, $e9048b15cf1e8792$export$d0f82e3ef89b1f22), {
115
122
  children: reactProductCard,
@@ -121,6 +128,10 @@ async function $3441d987b5ea85cb$export$32024253978abdc7(_ref) {
121
128
  const portal = $aNCHr$reactdom.createPortal(reactProductCardInErrorBoundary, solid_container);
122
129
  component_portals.add(portal);
123
130
  set_portals([...component_portals]);
131
+ set_on_index_change_ === null || set_on_index_change_ === void 0 || set_on_index_change_(newIndex => {
132
+ var _setIndexFunctionAcce;
133
+ return (_setIndexFunctionAcce = setIndexFunctionAccessor()) === null || _setIndexFunctionAcce === void 0 ? void 0 : _setIndexFunctionAcce(newIndex);
134
+ });
124
135
  $aNCHr$solidjs.createEffect($aNCHr$solidjs.on(get_react_template, new_template => queueMicrotask(() => {
125
136
  var _call_when_template_c;
126
137
  return (
@@ -147,7 +158,7 @@ function $3b36cc844440a979$export$e46079a2793e9ec7(props, set_portals) {
147
158
  get recommendations() {
148
159
  return props.recommendations;
149
160
  },
150
- product_card_template: display => {
161
+ product_card_template: (display, info) => {
151
162
  if (0, $aNCHr$solidjsweb.isServer) {
152
163
  // This function can't be async on the server
153
164
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -162,7 +173,8 @@ function $3b36cc844440a979$export$e46079a2793e9ec7(props, set_portals) {
162
173
  },
163
174
  get_react_template: () => props.productCard,
164
175
  component_portals: component_portals,
165
- set_portals: set_portals
176
+ set_portals: set_portals,
177
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
166
178
  });
167
179
  },
168
180
  get cols_at_size() {
@@ -191,7 +203,7 @@ function $3b36cc844440a979$export$e46079a2793e9ec7(props, set_portals) {
191
203
  }
192
204
  });
193
205
  }
194
- const $efbdd2dab4314170$export$83d89fbfd8236492 = "4.1.2";
206
+ const $efbdd2dab4314170$export$83d89fbfd8236492 = "4.1.4";
195
207
  function $202459d454907b31$export$9fac37a9c21c2f3b(props) {
196
208
  return props.children;
197
209
  }
@@ -3,7 +3,7 @@ import React, { PropsWithChildren, FC, ReactNode, ReactPortal, ReactElement } fr
3
3
  import { BaseCategoryProviderConfig, BaseProviderConfig, BaseSearchProviderConfig, ModernDisplayWithPageUrl, BaseProductListingConfig, BaseSearchPageConfig, BaseCategoryPageConfig, CategoryTitle, embedded_num_products, ListingQuery, ImagePlaceholder as _ImagePlaceholder1, TextPlaceholder as _TextPlaceholder1, ExclusiveId, fetchDepictRecommendations, FilterWithData } from "@depict-ai/ui/ES10";
4
4
  import { Locale } from "@depict-ai/ui/locales/ES10";
5
5
  import { Display, ModernDisplay } from "@depict-ai/utilishared/ES10";
6
- export const version = "4.1.2";
6
+ export const version = "4.1.4";
7
7
  interface UsePerformanceClientReturn {
8
8
  dpc: DPC;
9
9
  }
@@ -162,6 +162,8 @@ interface PLPConfig<T extends Display> extends BaseProductListingConfig {
162
162
  export interface DepictProductCardProps<T extends Display> {
163
163
  /** The display data to render. */
164
164
  display: T | null;
165
+ /** The index of the product card. Please note that product cards may stay at the same place (not get re-rendered) or move around as the results change. */
166
+ index: number;
165
167
  }
166
168
  /**
167
169
  * Depict product card to use for rendering products.
@@ -4,7 +4,7 @@ import { ImagePlaceholder as $7h5e1$ImagePlaceholder, TextPlaceholder as $7h5e1$
4
4
  import { generateHydrationScript as $7h5e1$generateHydrationScript, renderToString as $7h5e1$renderToString, isServer as $7h5e1$isServer, ssr as $7h5e1$ssr, ssrHydrationKey as $7h5e1$ssrHydrationKey } from "solid-js/web";
5
5
  import { dwarn as $7h5e1$dwarn } from "@depict-ai/utilishared/ES10";
6
6
  import { renderToString as $7h5e1$renderToString1 } from "react-dom/server";
7
- import { getOwner as $7h5e1$getOwner, untrack as $7h5e1$untrack, runWithOwner as $7h5e1$runWithOwner, createEffect as $7h5e1$createEffect, on as $7h5e1$on, onCleanup as $7h5e1$onCleanup } from "solid-js";
7
+ import { createSignal as $7h5e1$createSignal, getOwner as $7h5e1$getOwner, untrack as $7h5e1$untrack, runWithOwner as $7h5e1$runWithOwner, createEffect as $7h5e1$createEffect, on as $7h5e1$on, onCleanup as $7h5e1$onCleanup } from "solid-js";
8
8
  import { jsx as $7h5e1$jsx } from "react/jsx-runtime";
9
9
  import { createPortal as $7h5e1$createPortal } from "react-dom";
10
10
 
@@ -72,20 +72,27 @@ async function $cce08f18e2476cbf$export$32024253978abdc7(_ref) {
72
72
  component_props: component_props,
73
73
  component_portals: component_portals,
74
74
  set_portals: set_portals,
75
- get_react_template: get_react_template
75
+ get_react_template: get_react_template,
76
+ set_on_index_change_: set_on_index_change_
76
77
  } = _ref;
77
78
  let set_react_has_ran_hooks;
78
79
  let was_cleaned_up = false;
79
80
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
80
81
  const solid_container = document.createElement("div");
82
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $7h5e1$createSignal();
81
83
  let call_when_template_changes;
82
84
  const owner = $7h5e1$getOwner();
83
85
  const reactProductCard = $7h5e1$jsx(props => {
84
86
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
85
87
  $7h5e1$useEffect(set_react_has_ran_hooks, []);
86
88
  const [react_template, set_react_template] = $7h5e1$useState(() => $7h5e1$untrack(get_react_template));
89
+ const [index, setIndex] = $7h5e1$useState(0);
90
+ setIndexFunctionSetter(() => setIndex);
87
91
  call_when_template_changes = set_react_template;
88
- return react_template(props);
92
+ return react_template(set_on_index_change_ ? {
93
+ ...props,
94
+ index: index
95
+ } : props);
89
96
  }, component_props);
90
97
  const reactProductCardInErrorBoundary = $7h5e1$jsx((0, $88d93ed7309e90d1$export$d0f82e3ef89b1f22), {
91
98
  children: reactProductCard,
@@ -97,6 +104,10 @@ async function $cce08f18e2476cbf$export$32024253978abdc7(_ref) {
97
104
  const portal = $7h5e1$createPortal(reactProductCardInErrorBoundary, solid_container);
98
105
  component_portals.add(portal);
99
106
  set_portals([...component_portals]);
107
+ set_on_index_change_ === null || set_on_index_change_ === void 0 || set_on_index_change_(newIndex => {
108
+ var _setIndexFunctionAcce;
109
+ return (_setIndexFunctionAcce = setIndexFunctionAccessor()) === null || _setIndexFunctionAcce === void 0 ? void 0 : _setIndexFunctionAcce(newIndex);
110
+ });
100
111
  $7h5e1$createEffect($7h5e1$on(get_react_template, new_template => queueMicrotask(() => {
101
112
  var _call_when_template_c;
102
113
  return (
@@ -123,7 +134,7 @@ function $cd68097a7ee08669$export$e46079a2793e9ec7(props, set_portals) {
123
134
  get recommendations() {
124
135
  return props.recommendations;
125
136
  },
126
- product_card_template: display => {
137
+ product_card_template: (display, info) => {
127
138
  if (0, $7h5e1$isServer) {
128
139
  // This function can't be async on the server
129
140
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -138,7 +149,8 @@ function $cd68097a7ee08669$export$e46079a2793e9ec7(props, set_portals) {
138
149
  },
139
150
  get_react_template: () => props.productCard,
140
151
  component_portals: component_portals,
141
- set_portals: set_portals
152
+ set_portals: set_portals,
153
+ set_on_index_change_: info === null || info === void 0 ? void 0 : info.set_on_index_change
142
154
  });
143
155
  },
144
156
  get cols_at_size() {
@@ -167,7 +179,7 @@ function $cd68097a7ee08669$export$e46079a2793e9ec7(props, set_portals) {
167
179
  }
168
180
  });
169
181
  }
170
- const $9bd9bb8700ab2ada$export$83d89fbfd8236492 = "4.1.2";
182
+ const $9bd9bb8700ab2ada$export$83d89fbfd8236492 = "4.1.4";
171
183
  function $5c4add0a8fe94894$export$9fac37a9c21c2f3b(props) {
172
184
  return props.children;
173
185
  }
@@ -93,20 +93,27 @@ async function $6081519c185fcf70$export$32024253978abdc7({
93
93
  component_props: component_props,
94
94
  component_portals: component_portals,
95
95
  set_portals: set_portals,
96
- get_react_template: get_react_template
96
+ get_react_template: get_react_template,
97
+ set_on_index_change_: set_on_index_change_
97
98
  }) {
98
99
  let set_react_has_ran_hooks;
99
100
  let was_cleaned_up = false;
100
101
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
101
102
  const solid_container = document.createElement("div");
103
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $7QqFM$solidjs.createSignal();
102
104
  let call_when_template_changes;
103
105
  const owner = $7QqFM$solidjs.getOwner();
104
106
  const reactProductCard = $7QqFM$reactjsxruntime.jsx(props => {
105
107
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
106
108
  $7QqFM$react.useEffect(set_react_has_ran_hooks, []);
107
109
  const [react_template, set_react_template] = $7QqFM$react.useState(() => $7QqFM$solidjs.untrack(get_react_template));
110
+ const [index, setIndex] = $7QqFM$react.useState(0);
111
+ setIndexFunctionSetter(() => setIndex);
108
112
  call_when_template_changes = set_react_template;
109
- return react_template(props);
113
+ return react_template(set_on_index_change_ ? {
114
+ ...props,
115
+ index: index
116
+ } : props);
110
117
  }, component_props);
111
118
  const reactProductCardInErrorBoundary = $7QqFM$reactjsxruntime.jsx((0, $d7a14567b529586f$export$d0f82e3ef89b1f22), {
112
119
  children: reactProductCard,
@@ -118,6 +125,7 @@ async function $6081519c185fcf70$export$32024253978abdc7({
118
125
  const portal = $7QqFM$reactdom.createPortal(reactProductCardInErrorBoundary, solid_container);
119
126
  component_portals.add(portal);
120
127
  set_portals([...component_portals]);
128
+ set_on_index_change_?.(newIndex => setIndexFunctionAccessor()?.(newIndex));
121
129
  $7QqFM$solidjs.createEffect($7QqFM$solidjs.on(get_react_template, new_template => queueMicrotask(() =>
122
130
  // When the parent react component re-executes and provides a new product card, we want our react portal to also re-render
123
131
  // if we update the state inside the portal synchronously from the parent call react gets confused with "Warning: Cannot update a component (`Unknown`) while rendering a different component (`$48d7f568740a317d$export$f7d2f673fc2f091d`). To locate the bad setState() call inside `$48d7f568740a317d$export$f7d2f673fc2f091d`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render"
@@ -141,7 +149,7 @@ function $c6b960f2a07285c8$export$e46079a2793e9ec7(props, set_portals) {
141
149
  get recommendations() {
142
150
  return props.recommendations;
143
151
  },
144
- product_card_template: display => {
152
+ product_card_template: (display, info) => {
145
153
  if (0, $7QqFM$solidjsweb.isServer) {
146
154
  // This function can't be async on the server
147
155
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -156,7 +164,8 @@ function $c6b960f2a07285c8$export$e46079a2793e9ec7(props, set_portals) {
156
164
  },
157
165
  get_react_template: () => props.productCard,
158
166
  component_portals: component_portals,
159
- set_portals: set_portals
167
+ set_portals: set_portals,
168
+ set_on_index_change_: info?.set_on_index_change
160
169
  });
161
170
  },
162
171
  get cols_at_size() {
@@ -183,7 +192,7 @@ function $c6b960f2a07285c8$export$e46079a2793e9ec7(props, set_portals) {
183
192
  }
184
193
  });
185
194
  }
186
- const $db7b67857900028b$export$83d89fbfd8236492 = "4.1.2";
195
+ const $db7b67857900028b$export$83d89fbfd8236492 = "4.1.4";
187
196
  function $41e7e5d85b5e0d49$export$9fac37a9c21c2f3b(props) {
188
197
  return props.children;
189
198
  }
@@ -3,7 +3,7 @@ import React, { PropsWithChildren, FC, ReactNode, ReactPortal, ReactElement } fr
3
3
  import { BaseCategoryProviderConfig, BaseProviderConfig, BaseSearchProviderConfig, ModernDisplayWithPageUrl, BaseProductListingConfig, BaseSearchPageConfig, BaseCategoryPageConfig, CategoryTitle, embedded_num_products, ListingQuery, ImagePlaceholder as _ImagePlaceholder1, TextPlaceholder as _TextPlaceholder1, ExclusiveId, fetchDepictRecommendations, FilterWithData } from "@depict-ai/ui/latest";
4
4
  import { Locale } from "@depict-ai/ui/locales/latest";
5
5
  import { Display, ModernDisplay } from "@depict-ai/utilishared/latest";
6
- export const version = "4.1.2";
6
+ export const version = "4.1.4";
7
7
  interface UsePerformanceClientReturn {
8
8
  dpc: DPC;
9
9
  }
@@ -162,6 +162,8 @@ interface PLPConfig<T extends Display> extends BaseProductListingConfig {
162
162
  export interface DepictProductCardProps<T extends Display> {
163
163
  /** The display data to render. */
164
164
  display: T | null;
165
+ /** The index of the product card. Please note that product cards may stay at the same place (not get re-rendered) or move around as the results change. */
166
+ index: number;
165
167
  }
166
168
  /**
167
169
  * Depict product card to use for rendering products.
@@ -4,7 +4,7 @@ import { ImagePlaceholder as $eOXet$ImagePlaceholder, TextPlaceholder as $eOXet$
4
4
  import { generateHydrationScript as $eOXet$generateHydrationScript, renderToString as $eOXet$renderToString, isServer as $eOXet$isServer, ssr as $eOXet$ssr, ssrHydrationKey as $eOXet$ssrHydrationKey } from "solid-js/web";
5
5
  import { dwarn as $eOXet$dwarn } from "@depict-ai/utilishared/latest";
6
6
  import { renderToString as $eOXet$renderToString1 } from "react-dom/server";
7
- import { getOwner as $eOXet$getOwner, untrack as $eOXet$untrack, runWithOwner as $eOXet$runWithOwner, createEffect as $eOXet$createEffect, on as $eOXet$on, onCleanup as $eOXet$onCleanup } from "solid-js";
7
+ import { createSignal as $eOXet$createSignal, getOwner as $eOXet$getOwner, untrack as $eOXet$untrack, runWithOwner as $eOXet$runWithOwner, createEffect as $eOXet$createEffect, on as $eOXet$on, onCleanup as $eOXet$onCleanup } from "solid-js";
8
8
  import { jsx as $eOXet$jsx } from "react/jsx-runtime";
9
9
  import { createPortal as $eOXet$createPortal } from "react-dom";
10
10
 
@@ -69,20 +69,27 @@ async function $bcf84a32dc612a43$export$32024253978abdc7({
69
69
  component_props: component_props,
70
70
  component_portals: component_portals,
71
71
  set_portals: set_portals,
72
- get_react_template: get_react_template
72
+ get_react_template: get_react_template,
73
+ set_on_index_change_: set_on_index_change_
73
74
  }) {
74
75
  let set_react_has_ran_hooks;
75
76
  let was_cleaned_up = false;
76
77
  const react_has_ran_hooks = new Promise(r => set_react_has_ran_hooks = r);
77
78
  const solid_container = document.createElement("div");
79
+ const [setIndexFunctionAccessor, setIndexFunctionSetter] = $eOXet$createSignal();
78
80
  let call_when_template_changes;
79
81
  const owner = $eOXet$getOwner();
80
82
  const reactProductCard = $eOXet$jsx(props => {
81
83
  // Sneak in a hook into their product card component to know once react has finished rendering and running hooks
82
84
  $eOXet$useEffect(set_react_has_ran_hooks, []);
83
85
  const [react_template, set_react_template] = $eOXet$useState(() => $eOXet$untrack(get_react_template));
86
+ const [index, setIndex] = $eOXet$useState(0);
87
+ setIndexFunctionSetter(() => setIndex);
84
88
  call_when_template_changes = set_react_template;
85
- return react_template(props);
89
+ return react_template(set_on_index_change_ ? {
90
+ ...props,
91
+ index: index
92
+ } : props);
86
93
  }, component_props);
87
94
  const reactProductCardInErrorBoundary = $eOXet$jsx((0, $d5c9e1f3545b4984$export$d0f82e3ef89b1f22), {
88
95
  children: reactProductCard,
@@ -94,6 +101,7 @@ async function $bcf84a32dc612a43$export$32024253978abdc7({
94
101
  const portal = $eOXet$createPortal(reactProductCardInErrorBoundary, solid_container);
95
102
  component_portals.add(portal);
96
103
  set_portals([...component_portals]);
104
+ set_on_index_change_?.(newIndex => setIndexFunctionAccessor()?.(newIndex));
97
105
  $eOXet$createEffect($eOXet$on(get_react_template, new_template => queueMicrotask(() =>
98
106
  // When the parent react component re-executes and provides a new product card, we want our react portal to also re-render
99
107
  // if we update the state inside the portal synchronously from the parent call react gets confused with "Warning: Cannot update a component (`Unknown`) while rendering a different component (`$48d7f568740a317d$export$f7d2f673fc2f091d`). To locate the bad setState() call inside `$48d7f568740a317d$export$f7d2f673fc2f091d`, follow the stack trace as described in https://reactjs.org/link/setstate-in-render"
@@ -117,7 +125,7 @@ function $4d5c3f13a5ae62a7$export$e46079a2793e9ec7(props, set_portals) {
117
125
  get recommendations() {
118
126
  return props.recommendations;
119
127
  },
120
- product_card_template: display => {
128
+ product_card_template: (display, info) => {
121
129
  if (0, $eOXet$isServer) {
122
130
  // This function can't be async on the server
123
131
  // @ts-ignore emulate the wrapper div that we need in prod here too for consistency
@@ -132,7 +140,8 @@ function $4d5c3f13a5ae62a7$export$e46079a2793e9ec7(props, set_portals) {
132
140
  },
133
141
  get_react_template: () => props.productCard,
134
142
  component_portals: component_portals,
135
- set_portals: set_portals
143
+ set_portals: set_portals,
144
+ set_on_index_change_: info?.set_on_index_change
136
145
  });
137
146
  },
138
147
  get cols_at_size() {
@@ -159,7 +168,7 @@ function $4d5c3f13a5ae62a7$export$e46079a2793e9ec7(props, set_portals) {
159
168
  }
160
169
  });
161
170
  }
162
- const $c9c4d066f9a5b51b$export$83d89fbfd8236492 = "4.1.2";
171
+ const $c9c4d066f9a5b51b$export$83d89fbfd8236492 = "4.1.4";
163
172
  function $2b1fdeb83610500f$export$9fac37a9c21c2f3b(props) {
164
173
  return props.children;
165
174
  }