@propeller-commerce/propeller-v2-react-ui 0.4.7 → 0.4.9

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/CHANGELOG.md CHANGED
@@ -8,6 +8,41 @@ once it reaches 1.0. Until then (the `0.x` line) the public API may change
8
8
  between minor versions; breaking changes are called out below and in
9
9
  [MIGRATION.md](./MIGRATION.md).
10
10
 
11
+ ## [0.4.9] - 2026-06-19
12
+
13
+ ### Added
14
+
15
+ - **`GridFiltersPanel`** — a responsive wrapper around `GridFilters`. At `lg`
16
+ (1024px) and up it renders the filters as the inline sidebar; below `lg` it
17
+ collapses them behind a "Filters" button that opens a left slide-in drawer
18
+ (dimmed backdrop, close button, "Show results" to dismiss). A single
19
+ `GridFilters` instance backs both layouts — no duplicate fetch or state.
20
+ Replaces the host's `<aside><GridFilters/></aside>`. New label keys:
21
+ `filtersButton`, `applyFilters`, `closeFilters`. Optional `activeFilterCount`
22
+ shows a badge on the button.
23
+
24
+ ## [0.4.8] - 2026-06-19
25
+
26
+ ### Fixed
27
+
28
+ - **Product card list view broke on desktop after the 0.4.7 mobile
29
+ redesign.** The mobile-first footer (`flex-col`, full-width `AddToCart`
30
+ controls) leaked into the desktop row layout because the `md:` overrides
31
+ lost the cross-Tailwind cascade. The desktop (≥768px) row intent is now
32
+ restated on the BEM hook classes in `styles.css` — footer back to a row,
33
+ `__footer-meta` to `display: contents`, and the `AddToCart` controls back to
34
+ a single nowrap row with a fixed-width quantity input.
35
+ - **Price clipped in the mobile grid card.** The stock + price meta row could
36
+ overflow a narrow (~190px) grid card. The row now wraps and the price is
37
+ allowed to shrink (`min-w-0`, right-aligned) instead of being cut off.
38
+
39
+ ### Changed
40
+
41
+ - **`ClusterCard` gets the same responsive footer as `ProductCard`.** Below
42
+ 768px the list view uses a 2-row footer (stock/price, then full-width "View
43
+ cluster" button) and the grid view pairs stock/price in a wrapping meta row;
44
+ desktop (≥768px) is unchanged.
45
+
11
46
  ## [0.4.7] - 2026-06-19
12
47
 
13
48
  ### Changed
package/dist/index.cjs CHANGED
@@ -7600,22 +7600,28 @@ function ClusterCard(rawProps) {
7600
7600
  props.showManufacturer && manufacturer ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardManufacturer, {}) : null,
7601
7601
  props.showShortDescription && shortDescription ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardShortDescription, {}) : null
7602
7602
  ] }) }),
7603
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-cluster-card__footer w-full md:w-auto flex items-center gap-3 px-4 py-2 md:py-0 border-t md:border-t-0 border-border-subtle", children: [
7604
- props.showStock && defaultProductInventory ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardStock, {}) : null,
7605
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardPrice, {}) : null,
7606
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-cluster-card__cta flex-shrink-0 ml-auto", children: /* @__PURE__ */ jsxRuntime.jsx(ClusterCardViewClusterLink, {}) })
7603
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-cluster-card__footer w-full md:w-auto flex flex-col gap-2 md:flex-row md:items-center md:gap-3 px-4 py-2 md:py-0 border-t md:border-t-0 border-border-subtle", children: [
7604
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-cluster-card__footer-meta flex items-center justify-between gap-3 md:contents", children: [
7605
+ props.showStock && defaultProductInventory ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardStock, {}) : null,
7606
+ props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardPrice, {}) : null
7607
+ ] }),
7608
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-cluster-card__cta w-full md:w-auto md:flex-shrink-0 md:ml-auto", children: /* @__PURE__ */ jsxRuntime.jsx(ClusterCardViewClusterLink, {}) })
7607
7609
  ] })
7608
7610
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7609
7611
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-cluster-card__body flex flex-1 flex-col gap-1.5 p-3 sm:gap-2 sm:p-4", children: [
7610
7612
  props.showSku !== false && clusterSku ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardSku, {}) : null,
7611
7613
  props.showName !== false ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardName, { linkable: true }) : null,
7612
- props.showStock && defaultProductInventory ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardStock, {}) : null,
7614
+ props.showStock && defaultProductInventory ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden md:block", children: /* @__PURE__ */ jsxRuntime.jsx(ClusterCardStock, {}) }) : null,
7613
7615
  textLabelValues.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardTextLabels, {}) : null,
7614
7616
  props.showManufacturer && manufacturer ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardManufacturer, {}) : null,
7615
7617
  props.showShortDescription && shortDescription ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardShortDescription, {}) : null,
7616
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardPrice, {}) : null
7618
+ props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto hidden md:block", children: /* @__PURE__ */ jsxRuntime.jsx(ClusterCardPrice, {}) }) : null
7617
7619
  ] }),
7618
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-cluster-card__cta px-3 pb-3 sm:px-4 sm:pb-4", children: /* @__PURE__ */ jsxRuntime.jsx(ClusterCardViewClusterLink, {}) })
7620
+ props.showStock && defaultProductInventory || props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-cluster-card__footer-meta flex flex-wrap items-center justify-between gap-x-2 gap-y-1 px-3 pt-1 sm:px-4 md:hidden", children: [
7621
+ props.showStock && defaultProductInventory ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardStock, {}) : null,
7622
+ props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxRuntime.jsx(ClusterCardPrice, {}) : null
7623
+ ] }) : null,
7624
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-cluster-card__cta px-3 pb-3 pt-2 sm:px-4 sm:pb-4", children: /* @__PURE__ */ jsxRuntime.jsx(ClusterCardViewClusterLink, {}) })
7619
7625
  ] })
7620
7626
  ]
7621
7627
  }
@@ -8834,7 +8840,7 @@ var DEFAULT_LABELS = {
8834
8840
  of: "of"
8835
8841
  };
8836
8842
  function GridPagination(props) {
8837
- function getLabel52(key) {
8843
+ function getLabel53(key) {
8838
8844
  const labels = props.labels || {};
8839
8845
  return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS[key] || key;
8840
8846
  }
@@ -8907,15 +8913,15 @@ function GridPagination(props) {
8907
8913
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--prev inline-flex items-center rounded-control border border-input bg-card px-4 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
8908
8914
  disabled: currentPage === 1,
8909
8915
  onClick: () => handlePageChange(currentPage - 1),
8910
- children: getLabel52("previous")
8916
+ children: getLabel53("previous")
8911
8917
  }
8912
8918
  ),
8913
8919
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "propeller-grid-pagination__info px-2 text-sm font-medium text-muted-foreground", children: [
8914
- getLabel52("page"),
8920
+ getLabel53("page"),
8915
8921
  "\xA0",
8916
8922
  currentPage,
8917
8923
  "\xA0",
8918
- getLabel52("of"),
8924
+ getLabel53("of"),
8919
8925
  "\xA0",
8920
8926
  totalPages
8921
8927
  ] }),
@@ -8926,7 +8932,7 @@ function GridPagination(props) {
8926
8932
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--next inline-flex items-center rounded-control border border-input bg-card px-4 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
8927
8933
  disabled: currentPage === totalPages,
8928
8934
  onClick: () => handlePageChange(currentPage + 1),
8929
- children: getLabel52("next")
8935
+ children: getLabel53("next")
8930
8936
  }
8931
8937
  )
8932
8938
  ] }) : null,
@@ -8938,7 +8944,7 @@ function GridPagination(props) {
8938
8944
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--prev inline-flex items-center rounded-control border border-input bg-card px-3 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
8939
8945
  disabled: currentPage === 1,
8940
8946
  onClick: () => handlePageChange(currentPage - 1),
8941
- children: getLabel52("previous")
8947
+ children: getLabel53("previous")
8942
8948
  }
8943
8949
  ),
8944
8950
  getFullPages().map((item, idx) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -8965,7 +8971,7 @@ function GridPagination(props) {
8965
8971
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--next inline-flex items-center rounded-control border border-input bg-card px-3 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
8966
8972
  disabled: currentPage === totalPages,
8967
8973
  onClick: () => handlePageChange(currentPage + 1),
8968
- children: getLabel52("next")
8974
+ children: getLabel53("next")
8969
8975
  }
8970
8976
  )
8971
8977
  ] }) : null
@@ -10526,6 +10532,94 @@ function GridFilters(rawProps) {
10526
10532
  );
10527
10533
  }
10528
10534
  var GridFilters_default = GridFilters;
10535
+ function GridFiltersPanel(props) {
10536
+ const { activeFilterCount, wrapperClassName, labels, ...gridFiltersProps } = props;
10537
+ const [open, setOpen] = React6.useState(false);
10538
+ React6.useEffect(() => {
10539
+ if (!open) return;
10540
+ const onKey = (e) => {
10541
+ if (e.key === "Escape") setOpen(false);
10542
+ };
10543
+ document.addEventListener("keydown", onKey);
10544
+ const prevOverflow = document.body.style.overflow;
10545
+ document.body.style.overflow = "hidden";
10546
+ return () => {
10547
+ document.removeEventListener("keydown", onKey);
10548
+ document.body.style.overflow = prevOverflow;
10549
+ };
10550
+ }, [open]);
10551
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `propeller-grid-filters-panel w-full lg:w-64 lg:flex-shrink-0 ${wrapperClassName || ""}`, children: [
10552
+ /* @__PURE__ */ jsxRuntime.jsxs(
10553
+ "button",
10554
+ {
10555
+ type: "button",
10556
+ className: "propeller-grid-filters-panel__trigger lg:hidden inline-flex items-center justify-center gap-2 h-10 px-4 rounded-control border border-border bg-card text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover transition-colors",
10557
+ onClick: () => setOpen(true),
10558
+ "aria-haspopup": "dialog",
10559
+ "aria-expanded": open,
10560
+ children: [
10561
+ /* @__PURE__ */ jsxRuntime.jsx(
10562
+ "svg",
10563
+ {
10564
+ className: "propeller-grid-filters-panel__trigger-icon w-[1.1em] h-[1.1em] flex-shrink-0",
10565
+ viewBox: "0 0 24 24",
10566
+ fill: "none",
10567
+ stroke: "currentColor",
10568
+ strokeWidth: 2,
10569
+ strokeLinecap: "round",
10570
+ strokeLinejoin: "round",
10571
+ "aria-hidden": "true",
10572
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 3H2l8 9.46V19l4 2v-8.54L22 3z" })
10573
+ }
10574
+ ),
10575
+ propellerV2CoreUi.getLabel(labels, "filtersButton", "Filters"),
10576
+ activeFilterCount && activeFilterCount > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "propeller-grid-filters-panel__count inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1 rounded-full bg-secondary text-secondary-foreground text-xs font-semibold", children: activeFilterCount }) : null
10577
+ ]
10578
+ }
10579
+ ),
10580
+ /* @__PURE__ */ jsxRuntime.jsx(
10581
+ "div",
10582
+ {
10583
+ className: `propeller-grid-filters-panel__backdrop lg:hidden fixed inset-0 z-40 bg-foreground/40 transition-opacity ${open ? "opacity-100" : "pointer-events-none opacity-0"}`,
10584
+ onClick: () => setOpen(false),
10585
+ "aria-hidden": "true"
10586
+ }
10587
+ ),
10588
+ /* @__PURE__ */ jsxRuntime.jsxs(
10589
+ "div",
10590
+ {
10591
+ className: `propeller-grid-filters-panel__panel fixed inset-y-0 left-0 z-50 w-80 max-w-[85vw] bg-card shadow-xl flex flex-col transition-transform duration-300 lg:static lg:z-auto lg:w-auto lg:max-w-none lg:translate-x-0 lg:bg-transparent lg:shadow-none lg:block ${open ? "translate-x-0" : "-translate-x-full"}`,
10592
+ role: "dialog",
10593
+ "aria-modal": "true",
10594
+ children: [
10595
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-grid-filters-panel__header lg:hidden flex items-center justify-between gap-3 px-4 h-14 border-b border-border-subtle flex-shrink-0", children: [
10596
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "propeller-grid-filters-panel__title text-base font-semibold text-foreground", children: propellerV2CoreUi.getLabel(labels, "filtersButton", "Filters") }),
10597
+ /* @__PURE__ */ jsxRuntime.jsx(
10598
+ "button",
10599
+ {
10600
+ type: "button",
10601
+ className: "propeller-grid-filters-panel__close inline-flex items-center justify-center h-8 w-8 rounded-control text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors",
10602
+ onClick: () => setOpen(false),
10603
+ "aria-label": propellerV2CoreUi.getLabel(labels, "closeFilters", "Close"),
10604
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6 6 18M6 6l12 12" }) })
10605
+ }
10606
+ )
10607
+ ] }),
10608
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-grid-filters-panel__body flex-1 overflow-y-auto px-4 py-4 lg:flex-none lg:overflow-visible lg:p-0", children: /* @__PURE__ */ jsxRuntime.jsx(GridFilters_default, { ...gridFiltersProps, labels }) }),
10609
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-grid-filters-panel__footer lg:hidden px-4 py-3 border-t border-border-subtle flex-shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
10610
+ "button",
10611
+ {
10612
+ type: "button",
10613
+ className: "propeller-grid-filters-panel__apply w-full inline-flex justify-center items-center h-10 px-6 rounded-control text-sm font-medium text-secondary-foreground bg-secondary hover:bg-secondary/90 transition-colors",
10614
+ onClick: () => setOpen(false),
10615
+ children: propellerV2CoreUi.getLabel(labels, "applyFilters", "Show results")
10616
+ }
10617
+ ) })
10618
+ ]
10619
+ }
10620
+ )
10621
+ ] });
10622
+ }
10529
10623
  function GridTitle(props) {
10530
10624
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `propeller-grid-title mb-8 ${props.className || ""}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-grid-title__row flex items-baseline gap-3 mb-3", children: [
10531
10625
  props.headingLevel === "h2" ? /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "propeller-grid-title__heading text-3xl sm:text-4xl font-bold tracking-tight", children: props.title }) : null,
@@ -10578,7 +10672,7 @@ function GridToolbar(rawProps) {
10578
10672
  const [currentSortOrder, setCurrentSortOrder] = React6.useState(propellerSdkV2.SortOrder.DESC);
10579
10673
  const [currentOffset, setCurrentOffset] = React6.useState(12);
10580
10674
  const [currentViewMode, setCurrentViewMode] = React6.useState("grid");
10581
- function getLabel52(key) {
10675
+ function getLabel53(key) {
10582
10676
  const labels = props.labels || {};
10583
10677
  return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS2[key] || key;
10584
10678
  }
@@ -10655,7 +10749,7 @@ function GridToolbar(rawProps) {
10655
10749
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-grid-toolbar__bar flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4 mb-4", children: [
10656
10750
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-grid-toolbar__count text-sm text-muted-foreground font-medium", children: props.itemsFound > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
10657
10751
  props.itemsFound,
10658
- getLabel52("products")
10752
+ getLabel53("products")
10659
10753
  ] }) : null }),
10660
10754
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-grid-toolbar__controls flex flex-wrap items-center gap-3", children: [
10661
10755
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -10666,7 +10760,7 @@ function GridToolbar(rawProps) {
10666
10760
  onChange: (e) => handleOffsetChange(parseInt(e.target.value)),
10667
10761
  children: getOffsetOptions()?.map((n) => /* @__PURE__ */ jsxRuntime.jsxs("option", { value: n, children: [
10668
10762
  n,
10669
- getLabel52("perPage")
10763
+ getLabel53("perPage")
10670
10764
  ] }, n))
10671
10765
  }
10672
10766
  ),
@@ -10682,7 +10776,7 @@ function GridToolbar(rawProps) {
10682
10776
  {
10683
10777
  value: field,
10684
10778
  disabled: field === "PRICE" && isPriceSortDisabled(),
10685
- children: getLabel52(field)
10779
+ children: getLabel53(field)
10686
10780
  },
10687
10781
  field
10688
10782
  ))
@@ -10695,8 +10789,8 @@ function GridToolbar(rawProps) {
10695
10789
  value: currentSortOrder,
10696
10790
  onChange: (e) => handleSortOrderChange(e.target.value),
10697
10791
  children: [
10698
- /* @__PURE__ */ jsxRuntime.jsx("option", { value: propellerSdkV2.SortOrder.ASC, children: getLabel52("ASC") }),
10699
- /* @__PURE__ */ jsxRuntime.jsx("option", { value: propellerSdkV2.SortOrder.DESC, children: getLabel52("DESC") })
10792
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: propellerSdkV2.SortOrder.ASC, children: getLabel53("ASC") }),
10793
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: propellerSdkV2.SortOrder.DESC, children: getLabel53("DESC") })
10700
10794
  ]
10701
10795
  }
10702
10796
  ),
@@ -10706,7 +10800,7 @@ function GridToolbar(rawProps) {
10706
10800
  type: "button",
10707
10801
  className: "propeller-grid-toolbar__view-toggle h-9 w-9 flex items-center justify-center rounded-control border border-input bg-transparent hover:bg-accent hover:text-accent-foreground transition-colors",
10708
10802
  onClick: (event) => handleViewChange(),
10709
- title: currentViewMode === "grid" ? getLabel52("switchToList") : getLabel52("switchToGrid"),
10803
+ title: currentViewMode === "grid" ? getLabel53("switchToList") : getLabel53("switchToGrid"),
10710
10804
  children: [
10711
10805
  currentViewMode === "grid" ? /* @__PURE__ */ jsxRuntime.jsxs(
10712
10806
  "svg",
@@ -10764,7 +10858,7 @@ function GridToolbar(rawProps) {
10764
10858
  onClick: (event) => {
10765
10859
  if (props.onClearFilters) props.onClearFilters();
10766
10860
  },
10767
- children: getLabel52("clearAll")
10861
+ children: getLabel53("clearAll")
10768
10862
  }
10769
10863
  ),
10770
10864
  props.priceFilterMin !== void 0 || props.priceFilterMax !== void 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
@@ -10775,7 +10869,7 @@ function GridToolbar(rawProps) {
10775
10869
  if (props.onPriceFilterRemove) props.onPriceFilterRemove();
10776
10870
  },
10777
10871
  children: [
10778
- getLabel52("price"),
10872
+ getLabel53("price"),
10779
10873
  ": \u20AC",
10780
10874
  props.priceFilterMin ?? 0,
10781
10875
  " \u2013 \u20AC",
@@ -13297,9 +13391,9 @@ function ProductCardRoot(rawProps) {
13297
13391
  props.showShortDescription && shortDescription ? /* @__PURE__ */ jsxRuntime.jsx(ProductCardShortDescription, {}) : null,
13298
13392
  props.showPrice !== false && !!product?.price ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-product-card__price mt-auto pt-1 hidden md:block", children: /* @__PURE__ */ jsxRuntime.jsx(ProductCardPrice, { priceSize: "text-base sm:text-lg" }) }) : null
13299
13393
  ] }),
13300
- props.showStock && !!product.inventory || props.showPrice !== false && !!product?.price ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-product-card__footer-meta flex items-center justify-between gap-2 px-3 pt-1 sm:px-4 md:hidden", children: [
13394
+ props.showStock && !!product.inventory || props.showPrice !== false && !!product?.price ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "propeller-product-card__footer-meta flex flex-wrap items-center justify-between gap-x-2 gap-y-1 px-3 pt-1 sm:px-4 md:hidden", children: [
13301
13395
  props.showStock && !!product.inventory ? /* @__PURE__ */ jsxRuntime.jsx(ProductCardStock, {}) : null,
13302
- props.showPrice !== false && !!product?.price ? /* @__PURE__ */ jsxRuntime.jsx(ProductCardPrice, { priceSize: "text-base" }) : null
13396
+ props.showPrice !== false && !!product?.price ? /* @__PURE__ */ jsxRuntime.jsx(ProductCardPrice, { priceSize: "text-base", className: "propeller-product-card__price min-w-0 text-right" }) : null
13303
13397
  ] }) : null,
13304
13398
  props.allowAddToCart !== false ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "propeller-product-card__cta px-3 pb-3 pt-2 sm:px-4 sm:pb-4", children: /* @__PURE__ */ jsxRuntime.jsx(ProductCardAddToCart, {}) }) : null
13305
13399
  ] })
@@ -17293,6 +17387,7 @@ exports.FavoriteListItem = FavoriteListItem_default;
17293
17387
  exports.FavoriteLists = FavoriteLists_default;
17294
17388
  exports.ForgotPassword = ForgotPassword_default;
17295
17389
  exports.GridFilters = GridFilters_default;
17390
+ exports.GridFiltersPanel = GridFiltersPanel;
17296
17391
  exports.GridPagination = GridPagination_default;
17297
17392
  exports.GridTitle = GridTitleWithProvider_default;
17298
17393
  exports.GridToolbar = GridToolbar_default;