@propeller-commerce/propeller-v2-react-ui 0.4.7 → 0.4.10
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 +51 -0
- package/dist/index.cjs +120 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -1
- package/dist/index.d.ts +28 -1
- package/dist/index.js +120 -26
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,57 @@ 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.10] - 2026-06-23
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- **`GridFiltersPanel` rendered full-width on desktop, pushing the product
|
|
16
|
+
grid off-screen.** The panel root carries `w-full lg:w-64 lg:flex-shrink-0`
|
|
17
|
+
in the markup, but a consumer's Tailwind sheet re-emits `.w-full`
|
|
18
|
+
(`width: 100%`) and — loading after this package's CSS — won the cascade on
|
|
19
|
+
equal specificity, leaving the panel at full width and causing horizontal
|
|
20
|
+
overflow on category/search pages. The desktop sidebar width is now restated
|
|
21
|
+
on the `.propeller-grid-filters-panel` BEM hook inside the `@media
|
|
22
|
+
(min-width: 64rem)` block (`width: 16rem; flex-shrink: 0`), so the package
|
|
23
|
+
stays authoritative for its own width regardless of sheet order. Same
|
|
24
|
+
cross-Tailwind cascade hardening already applied to the card row layouts in
|
|
25
|
+
0.4.8 — the panel root was the one element it missed.
|
|
26
|
+
|
|
27
|
+
## [0.4.9] - 2026-06-19
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- **`GridFiltersPanel`** — a responsive wrapper around `GridFilters`. At `lg`
|
|
32
|
+
(1024px) and up it renders the filters as the inline sidebar; below `lg` it
|
|
33
|
+
collapses them behind a "Filters" button that opens a left slide-in drawer
|
|
34
|
+
(dimmed backdrop, close button, "Show results" to dismiss). A single
|
|
35
|
+
`GridFilters` instance backs both layouts — no duplicate fetch or state.
|
|
36
|
+
Replaces the host's `<aside><GridFilters/></aside>`. New label keys:
|
|
37
|
+
`filtersButton`, `applyFilters`, `closeFilters`. Optional `activeFilterCount`
|
|
38
|
+
shows a badge on the button.
|
|
39
|
+
|
|
40
|
+
## [0.4.8] - 2026-06-19
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- **Product card list view broke on desktop after the 0.4.7 mobile
|
|
45
|
+
redesign.** The mobile-first footer (`flex-col`, full-width `AddToCart`
|
|
46
|
+
controls) leaked into the desktop row layout because the `md:` overrides
|
|
47
|
+
lost the cross-Tailwind cascade. The desktop (≥768px) row intent is now
|
|
48
|
+
restated on the BEM hook classes in `styles.css` — footer back to a row,
|
|
49
|
+
`__footer-meta` to `display: contents`, and the `AddToCart` controls back to
|
|
50
|
+
a single nowrap row with a fixed-width quantity input.
|
|
51
|
+
- **Price clipped in the mobile grid card.** The stock + price meta row could
|
|
52
|
+
overflow a narrow (~190px) grid card. The row now wraps and the price is
|
|
53
|
+
allowed to shrink (`min-w-0`, right-aligned) instead of being cut off.
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- **`ClusterCard` gets the same responsive footer as `ProductCard`.** Below
|
|
58
|
+
768px the list view uses a 2-row footer (stock/price, then full-width "View
|
|
59
|
+
cluster" button) and the grid view pairs stock/price in a wrapping meta row;
|
|
60
|
+
desktop (≥768px) is unchanged.
|
|
61
|
+
|
|
11
62
|
## [0.4.7] - 2026-06-19
|
|
12
63
|
|
|
13
64
|
### 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
|
-
|
|
7605
|
-
|
|
7606
|
-
|
|
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.
|
|
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
|
|
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:
|
|
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
|
-
|
|
8920
|
+
getLabel53("page"),
|
|
8915
8921
|
"\xA0",
|
|
8916
8922
|
currentPage,
|
|
8917
8923
|
"\xA0",
|
|
8918
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
10699
|
-
/* @__PURE__ */ jsxRuntime.jsx("option", { value: propellerSdkV2.SortOrder.DESC, children:
|
|
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" ?
|
|
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:
|
|
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
|
-
|
|
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;
|