@stapel/listings-react 0.9.0 → 0.10.0

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/dist/api/generated/schema.d.ts +34 -2
  3. package/dist/api/generated/schema.d.ts.map +1 -1
  4. package/dist/default/FeedGrid.d.ts +42 -0
  5. package/dist/default/FeedGrid.d.ts.map +1 -0
  6. package/dist/default/FeedGrid.js +23 -0
  7. package/dist/default/FeedGrid.js.map +1 -0
  8. package/dist/default/ListingCard.d.ts +31 -0
  9. package/dist/default/ListingCard.d.ts.map +1 -1
  10. package/dist/default/ListingCard.js +12 -4
  11. package/dist/default/ListingCard.js.map +1 -1
  12. package/dist/default/ListingFeedCard.d.ts +77 -0
  13. package/dist/default/ListingFeedCard.d.ts.map +1 -0
  14. package/dist/default/ListingFeedCard.js +75 -0
  15. package/dist/default/ListingFeedCard.js.map +1 -0
  16. package/dist/default/ListingSerpCard.d.ts +114 -0
  17. package/dist/default/ListingSerpCard.d.ts.map +1 -0
  18. package/dist/default/ListingSerpCard.js +72 -0
  19. package/dist/default/ListingSerpCard.js.map +1 -0
  20. package/dist/default/favorite.d.ts +49 -0
  21. package/dist/default/favorite.d.ts.map +1 -0
  22. package/dist/default/favorite.js +25 -0
  23. package/dist/default/favorite.js.map +1 -0
  24. package/dist/default/icons.d.ts +17 -3
  25. package/dist/default/icons.d.ts.map +1 -1
  26. package/dist/default/icons.js +13 -1
  27. package/dist/default/icons.js.map +1 -1
  28. package/dist/default/index.d.ts +17 -1
  29. package/dist/default/index.d.ts.map +1 -1
  30. package/dist/default/index.js +14 -1
  31. package/dist/default/index.js.map +1 -1
  32. package/dist/i18n/es.d.ts.map +1 -1
  33. package/dist/i18n/es.js +4 -0
  34. package/dist/i18n/es.js.map +1 -1
  35. package/dist/i18n/keys.d.ts +11 -0
  36. package/dist/i18n/keys.d.ts.map +1 -1
  37. package/dist/i18n/keys.js +15 -0
  38. package/dist/i18n/keys.js.map +1 -1
  39. package/dist/i18n/ru.d.ts.map +1 -1
  40. package/dist/i18n/ru.js +4 -0
  41. package/dist/i18n/ru.js.map +1 -1
  42. package/llms.txt +3 -1
  43. package/manifest.json +45 -1
  44. package/nav-manifest.json +1 -1
  45. package/package.json +9 -9
  46. package/src/analytics/generated/events.json +1 -1
  47. package/src/api/generated/schema.ts +34 -2
  48. package/src/default/FeedGrid.tsx +70 -0
  49. package/src/default/ListingCard.tsx +21 -5
  50. package/src/default/ListingFeedCard.tsx +232 -0
  51. package/src/default/ListingSerpCard.tsx +374 -0
  52. package/src/default/favorite.tsx +91 -0
  53. package/src/default/icons.tsx +37 -3
  54. package/src/default/index.ts +24 -1
  55. package/src/i18n/es.ts +4 -0
  56. package/src/i18n/keys.ts +15 -0
  57. package/src/i18n/ru.ts +4 -0
package/dist/i18n/keys.js CHANGED
@@ -70,6 +70,17 @@ export const LISTINGS_I18N_KEYS = {
70
70
  cardUntitled: "listings.card.untitled",
71
71
  /** The door beside a blocked favourite: the container supplies WHERE. */
72
72
  cardSignIn: "listings.card.sign_in",
73
+ /** The accessible name of `<ListingSerpCard>`'s photo strip. `SkinCarousel`
74
+ * requires one — an unnamed scrollable region is announced as nothing — and
75
+ * the token bridge owns no i18n engine, so the copy is this pair's. */
76
+ cardPhotos: "listings.card.photos",
77
+ /** The label on the struck-through previous price. The strike is styling and
78
+ * a screen reader announces none of it, so the word is on the line. */
79
+ cardPriceWas: "listings.card.price_was",
80
+ /** The name of the trend arrow — the whole message of a glyph that would
81
+ * otherwise be a decoration nobody can read. */
82
+ cardPriceDropped: "listings.card.price_dropped",
83
+ cardPriceRaised: "listings.card.price_raised",
73
84
  // ── detail ───────────────────────────────────────────────────────────────
74
85
  detailLoading: "listings.detail.loading",
75
86
  detailLoadFailed: "listings.detail.load_failed",
@@ -230,6 +241,10 @@ export const listingsI18nBundleEn = {
230
241
  "listings.card.favorite_remove": "Remove from favourites",
231
242
  "listings.card.untitled": "Untitled listing",
232
243
  "listings.card.sign_in": "Sign in",
244
+ "listings.card.photos": "Photos of this listing",
245
+ "listings.card.price_was": "Was",
246
+ "listings.card.price_dropped": "The price went down",
247
+ "listings.card.price_raised": "The price went up",
233
248
  "listings.detail.loading": "Loading the listing…",
234
249
  "listings.detail.load_failed": "We could not load this listing",
235
250
  "listings.detail.retry": "Try again",
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAwMlC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAG7D"}
1
+ {"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,oBAAoB,EAAE,cA4MlC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAG7D"}
package/dist/i18n/ru.js CHANGED
@@ -70,6 +70,10 @@ export const listingsI18nBundleRu = {
70
70
  "listings.card.favorite_remove": "Убрать из избранного",
71
71
  "listings.card.untitled": "Объявление без названия",
72
72
  "listings.card.sign_in": "Войти",
73
+ "listings.card.photos": "Фотографии объявления",
74
+ "listings.card.price_was": "Было",
75
+ "listings.card.price_dropped": "Цена снизилась",
76
+ "listings.card.price_raised": "Цена выросла",
73
77
  "listings.detail.loading": "Загружаем объявление…",
74
78
  "listings.detail.load_failed": "Не удалось загрузить объявление",
75
79
  "listings.detail.retry": "Повторить",
@@ -1 +1 @@
1
- {"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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"}
package/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # @stapel/listings-react 0.9.0
1
+ # @stapel/listings-react 0.10.0
2
2
 
3
3
  Headless React flow pair for stapel-listings (contract >=0.10 <0.11) — business + state, zero visual opinion.
4
4
  Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
@@ -110,8 +110,10 @@ const { tracked } = useTracked();
110
110
  - listings.composer → <ListingComposerPage> [default|unwired|photos-in-flight|unsupported-type] demo/ListingComposer.demo.tsx
111
111
  - listings.detail → <ListingDetailPane> [default|contact-unwired|owner|not-found] demo/ListingDetail.demo.tsx
112
112
  - listings.favorites → <FavoritesPane> [default|paged|empty|failed|visitor] demo/Favorites.demo.tsx
113
+ - listings.feed-card → <ListingFeedCard> [default|tile|visitor|wide] demo/ListingFeedCard.demo.tsx
113
114
  - listings.mine → <MyListingsPane> [default|no-editor|taken-down|visitor|failed] demo/MyListings.demo.tsx
114
115
  - listings.parts → <ListingStatusBlock> [default|tags|notes|media|door] demo/ListingParts.demo.tsx
116
+ - listings.serp-card → <ListingSerpCard> [default|trend|visitor|bare] demo/ListingSerpCard.demo.tsx
115
117
  Each source file is the canonical usage snippet (open the default variant).
116
118
 
117
119
  ## Snippets
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
3
3
  "package": "@stapel/listings-react",
4
- "version": "0.9.0",
4
+ "version": "0.10.0",
5
5
  "backend": {
6
6
  "module": "stapel-listings",
7
7
  "contract": ">=0.10 <0.11"
@@ -732,6 +732,26 @@
732
732
  ],
733
733
  "source": "demo/Favorites.demo.tsx"
734
734
  },
735
+ {
736
+ "id": "listings.feed-card",
737
+ "title": "Listing feed card",
738
+ "description": "The phone home feed: no border and no card surface, so the photo is the card and the rhythm of the grid is what separates one listing from the next. Two lines of title then a clamp, the price in bold, the place muted, and the favourite heart pinned over the photo's trailing corner — the one surface in this pair where the heart floats, because a two-column tile has no line to spare for a refusal. A container draws the grid inside a PaneGate so that refusal is said once for the whole feed.",
739
+ "component": "ListingFeedCard",
740
+ "covers": [
741
+ "FeedGrid",
742
+ "ListingsProvider"
743
+ ],
744
+ "tokens": [
745
+ "text-muted"
746
+ ],
747
+ "variants": [
748
+ "default",
749
+ "tile",
750
+ "visitor",
751
+ "wide"
752
+ ],
753
+ "source": "demo/ListingFeedCard.demo.tsx"
754
+ },
735
755
  {
736
756
  "id": "listings.mine",
737
757
  "title": "My listings",
@@ -774,6 +794,26 @@
774
794
  "door"
775
795
  ],
776
796
  "source": "demo/ListingParts.demo.tsx"
797
+ },
798
+ {
799
+ "id": "listings.serp-card",
800
+ "title": "Listing SERP card",
801
+ "description": "The one-column result card of a phone search page: a SkinCarousel photo strip that peeks, then the PRICE as the first and largest line, the title at regular weight, the seller's spec line, the stored badge projection, the seller slot and the place. The strip sits outside the card's anchor on purpose — a horizontal swipe that ends inside a link is a swipe the browser may deliver as a navigation — and the trailing rail carries the container's call and chat controls with the favourite heart at its end.",
802
+ "component": "ListingSerpCard",
803
+ "covers": [
804
+ "ListingsProvider"
805
+ ],
806
+ "tokens": [
807
+ "surface-raised",
808
+ "text-muted"
809
+ ],
810
+ "variants": [
811
+ "default",
812
+ "trend",
813
+ "visitor",
814
+ "bare"
815
+ ],
816
+ "source": "demo/ListingSerpCard.demo.tsx"
777
817
  }
778
818
  ],
779
819
  "i18nKeys": [
@@ -854,7 +894,11 @@
854
894
  "listings.card.favorite_remove",
855
895
  "listings.card.no_photo",
856
896
  "listings.card.photo_unavailable",
897
+ "listings.card.photos",
857
898
  "listings.card.price_absent",
899
+ "listings.card.price_dropped",
900
+ "listings.card.price_raised",
901
+ "listings.card.price_was",
858
902
  "listings.card.sign_in",
859
903
  "listings.card.untitled",
860
904
  "listings.compose.auto_republish",
package/nav-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@stapel/listings-react",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "entries": [
5
5
  {
6
6
  "id": "listings.detail",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stapel/listings-react",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Headless React pair for stapel-listings: a typed client over the draft twin, the composer that turns a category schema into a submittable listing, and the owner's dashboard. Two independent axes are rendered as two — lifecycle `status` decides visibility and `moderation_status` decides nothing about it, so an edit to a live listing stays live and says 'under review' instead of vanishing. Feature values are drawn and mirrored by @stapel/attributes-react; photos arrive as an injected upload bag whose `refs` ARE `images_draft` and whose `settled` gates the submit; a publish refusal is routed onto the control that caused it by slug. Zero visual opinion in the main entry; an opt-in /default subpath ships the antd skin.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -53,9 +53,9 @@
53
53
  "limit": "11.5 KB"
54
54
  },
55
55
  {
56
- "name": "default — the antd skin (card, detail, composer, dashboard, the four named slots and the delete confirmation) must stay out of the main bundle. Raised 16 -> 17 KB for attributes-react 0.4.0: the composer's <FeatureFields> now carries the rule pre-pass, the form sections and the two vocabulary-backed editors, and the skin re-exports them (15.86 -> 16.02 KB measured)",
56
+ "name": "default — the antd skin (three cards, detail, composer, dashboard, the named slots and the delete confirmation) must stay out of the main bundle. Raised 17 -> 19 KB for the mobile wave: <ListingSerpCard> (photo strip + price-first block + action rail), <ListingFeedCard> and <FeedGrid> are two more card surfaces on the same shared target/favourite/photo parts, not three copies of one",
57
57
  "path": "dist/default/index.js",
58
- "limit": "17 KB"
58
+ "limit": "19 KB"
59
59
  },
60
60
  {
61
61
  "name": "i18n/ru — the Russian bundle is opt-in, not carried by the main entry",
@@ -63,17 +63,17 @@
63
63
  "limit": "5 KB"
64
64
  },
65
65
  {
66
- "name": "i18n/es — the Spanish bundle is opt-in, not carried by the main entry",
66
+ "name": "i18n/es — the Spanish bundle is opt-in, not carried by the main entry. Raised 3.5 -> 4 KB: the mobile wave's four card keys landed the bundle exactly ON the old limit, and a budget a release passes by rounding is a budget that fails the next one",
67
67
  "path": "dist/i18n/es.js",
68
- "limit": "3.5 KB"
68
+ "limit": "4 KB"
69
69
  }
70
70
  ],
71
71
  "peerDependencies": {
72
- "@stapel/attributes-react": ">=0.4.0",
72
+ "@stapel/attributes-react": ">=0.5.0",
73
73
  "@stapel/core": ">=0.19.0 <1.0.0",
74
74
  "@stapel/currencies-react": ">=0.2.0",
75
75
  "@stapel/image": ">=0.2.0",
76
- "@stapel/tokens-antd": ">=0.7.0",
76
+ "@stapel/tokens-antd": ">=0.9.0",
77
77
  "@tanstack/react-query": "^5.0.0",
78
78
  "antd": ">=5.20.0 <7",
79
79
  "react": ">=19"
@@ -102,13 +102,13 @@
102
102
  "size-limit": "^11.2.0",
103
103
  "typescript": "^5.8.3",
104
104
  "vitest": "^3.2.4",
105
- "@stapel/attributes-react": "^0.4.0",
105
+ "@stapel/attributes-react": "^0.5.0",
106
106
  "@stapel/core": "^0.20.0",
107
107
  "@stapel/currencies-react": "^0.2.0",
108
108
  "@stapel/image": "^0.4.2",
109
109
  "@stapel/showcase": "^0.3.0",
110
110
  "@stapel/tokens": "^0.6.0",
111
- "@stapel/tokens-antd": "^0.8.1"
111
+ "@stapel/tokens-antd": "^0.9.0"
112
112
  },
113
113
  "engines": {
114
114
  "node": ">=22"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$generated": "by scripts/gen-events.mjs — do not edit; drift-gated (pnpm gen:events:check)",
3
3
  "package": "@stapel/listings-react",
4
- "version": "0.9.0",
4
+ "version": "0.10.0",
5
5
  "defined": [],
6
6
  "flows": []
7
7
  }
@@ -510,8 +510,8 @@ export interface components {
510
510
  favorited: boolean;
511
511
  listing_id: number;
512
512
  };
513
- FeatureDao: components["schemas"]["IntDao"] | components["schemas"]["FloatDao"] | components["schemas"]["StringDao"] | components["schemas"]["BoolDao"] | components["schemas"]["HexColorDao"] | components["schemas"]["SelectDao"] | components["schemas"]["DateDao"] | components["schemas"]["HeaderDao"] | components["schemas"]["HierarchicalSelectDao"] | components["schemas"]["ConvertibleUnitDao"] | components["schemas"]["RefSelectDao"] | components["schemas"]["RefHierarchicalSelectDao"];
514
- FeatureDto: components["schemas"]["IntDto"] | components["schemas"]["FloatDto"] | components["schemas"]["StringDto"] | components["schemas"]["BoolDto"] | components["schemas"]["HexColorDto"] | components["schemas"]["SelectDto"] | components["schemas"]["DateDto"] | components["schemas"]["HeaderDto"] | components["schemas"]["HierarchicalSelectDto"] | components["schemas"]["ConvertibleUnitDto"] | components["schemas"]["RefSelectDto"] | components["schemas"]["RefHierarchicalSelectDto"];
513
+ FeatureDao: components["schemas"]["IntDao"] | components["schemas"]["FloatDao"] | components["schemas"]["StringDao"] | components["schemas"]["BoolDao"] | components["schemas"]["HexColorDao"] | components["schemas"]["SelectDao"] | components["schemas"]["DateDao"] | components["schemas"]["HeaderDao"] | components["schemas"]["HierarchicalSelectDao"] | components["schemas"]["ConvertibleUnitDao"] | components["schemas"]["RefSelectDao"] | components["schemas"]["RefHierarchicalSelectDao"] | components["schemas"]["GroupDao"];
514
+ FeatureDto: components["schemas"]["IntDto"] | components["schemas"]["FloatDto"] | components["schemas"]["StringDto"] | components["schemas"]["BoolDto"] | components["schemas"]["HexColorDto"] | components["schemas"]["SelectDto"] | components["schemas"]["DateDto"] | components["schemas"]["HeaderDto"] | components["schemas"]["HierarchicalSelectDto"] | components["schemas"]["ConvertibleUnitDto"] | components["schemas"]["RefSelectDto"] | components["schemas"]["RefHierarchicalSelectDto"] | components["schemas"]["GroupDto"];
515
515
  /** @description Serializer for FeatureValidationResult. */
516
516
  FeatureValidationResult: {
517
517
  id?: unknown;
@@ -561,6 +561,33 @@ export interface components {
561
561
  /** Format: double */
562
562
  value?: number;
563
563
  };
564
+ /** @description Serializer for group feature DAO. */
565
+ GroupDao: {
566
+ name?: string | null;
567
+ order?: number | null;
568
+ title?: boolean | null;
569
+ badge?: boolean | null;
570
+ translate?: string | null;
571
+ /**
572
+ * @description discriminator enum property added by openapi-typescript
573
+ * @enum {string}
574
+ */
575
+ type: "group";
576
+ value?: {
577
+ [key: string]: unknown;
578
+ }[];
579
+ };
580
+ /** @description Serializer for group feature DTO. */
581
+ GroupDto: {
582
+ /**
583
+ * @description discriminator enum property added by openapi-typescript
584
+ * @enum {string}
585
+ */
586
+ type: "group";
587
+ value?: {
588
+ [key: string]: unknown;
589
+ }[];
590
+ };
564
591
  /** @description Serializer for header feature DAO. */
565
592
  HeaderDao: {
566
593
  name?: string | null;
@@ -1047,6 +1074,11 @@ export interface components {
1047
1074
  * @enum {string}
1048
1075
  */
1049
1076
  Type104Enum: "convertible_unit";
1077
+ /**
1078
+ * @description * `group` - group
1079
+ * @enum {string}
1080
+ */
1081
+ Type312Enum: "group";
1050
1082
  /**
1051
1083
  * @description * `date` - date
1052
1084
  * @enum {string}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `<FeedGrid>` — the two-column wall a phone home feed is laid out on.
3
+ *
4
+ * ── Why this is not `<SearchResultsPane>`'s grid ──────────────────────────
5
+ *
6
+ * The results grid is `repeat(auto-fill, minmax(280px, 1fr))`: as many columns
7
+ * as FIT, each at least a readable card. That is right for a catalogue and
8
+ * wrong for a feed — 280px is wider than half of a 390px phone, so a feed laid
9
+ * out that way collapses to one column exactly where the ref calls for two.
10
+ * A feed's column count is a DESIGN decision ("two, side by side, small"), not
11
+ * a consequence of a minimum card width, and the two rules cannot be spelled
12
+ * with one declaration.
13
+ *
14
+ * ── No masonry ────────────────────────────────────────────────────────────
15
+ *
16
+ * The refs' feed looks staggered because the photos have different heights.
17
+ * They do not here: `<ListingFeedCard>` draws every photo in the same 4:3 well
18
+ * (`LISTING_PHOTO_ASPECT`), so the tiles line up in rows on their own and the
19
+ * grid stays a grid. Nothing in this package will pull in a masonry polyfill
20
+ * to reproduce a raggedness that is a property of unconstrained images —
21
+ * `columns: 2` (the CSS multi-column route) was the other candidate and was
22
+ * rejected because it breaks reading order: a screen reader and a keyboard
23
+ * would walk the whole left column before reaching the top of the right one.
24
+ *
25
+ * ── Desktop is not this wave's consumer, and is not broken either ─────────
26
+ *
27
+ * `columns` defaults to 2 because a phone feed is the surface this exists for.
28
+ * A wider surface passes its own number; the declaration is the same one, so
29
+ * there is no second layout to keep in step and no breakpoint in this file.
30
+ */
31
+ import type { CSSProperties, ReactElement, ReactNode } from "react";
32
+ import { spacing } from "@stapel/tokens";
33
+
34
+ /** The ref's phone feed: two tiles across. */
35
+ export const FEED_GRID_COLUMNS = 2;
36
+
37
+ export interface FeedGridProps {
38
+ /** How many tiles across. Default {@link FEED_GRID_COLUMNS}. */
39
+ readonly columns?: number;
40
+ /** The tiles — `<ListingFeedCard>`s, conventionally. */
41
+ readonly children: ReactNode;
42
+ readonly style?: CSSProperties;
43
+ }
44
+
45
+ export function FeedGrid(props: FeedGridProps): ReactElement {
46
+ const columns = props.columns ?? FEED_GRID_COLUMNS;
47
+ return (
48
+ <div
49
+ data-testid="listings-feed-grid"
50
+ data-columns={String(columns)}
51
+ style={{
52
+ display: "grid",
53
+ // `minmax(0, 1fr)` rather than `1fr`: a bare `1fr` is `minmax(auto,
54
+ // 1fr)`, and `auto` refuses to shrink below its content — one long
55
+ // unbroken word in a title then widens the whole column and pushes the
56
+ // grid past the screen.
57
+ gridTemplateColumns: `repeat(${String(columns)}, minmax(0, 1fr))`,
58
+ columnGap: spacing[3],
59
+ // Rows breathe more than columns do: the tiles carry no border, so the
60
+ // gap between two rows is the only thing saying where one card's
61
+ // location line ends and the next card's photo begins.
62
+ rowGap: spacing[5],
63
+ alignItems: "start",
64
+ ...props.style,
65
+ }}
66
+ >
67
+ {props.children}
68
+ </div>
69
+ );
70
+ }
@@ -221,15 +221,29 @@ export type ListingCardProps = ListingCardBaseProps & ListingCardOpenProps;
221
221
  * same content in a `<button>` reset to look like nothing, rather than drawing
222
222
  * a separate captioned control: a card that is a target on one deployment and
223
223
  * a card-plus-a-button on another would be two different products.
224
+ *
225
+ * Exported for this pair's OTHER card surfaces (`<ListingSerpCard>`,
226
+ * `<ListingFeedCard>`) and for no one else — it is deliberately absent from
227
+ * `src/default/index.ts`. Three cards each re-deriving "which of the three
228
+ * arms is this" is three places for the double-navigation defect to come back;
229
+ * one function is one place. The card surfaces differ in what they PUT inside
230
+ * the target, never in how the target is made.
224
231
  */
225
- function CardTarget(
232
+ export function CardTarget(
226
233
  props: ListingCardOpenProps & {
227
234
  readonly listingId: number;
228
235
  readonly label: string;
236
+ /** The target's own test id. Each card surface names its own, so a screen
237
+ * holding two kinds of card does not hand a test two elements under one
238
+ * name. Default: the original card's. */
239
+ readonly testId?: string;
240
+ /** The body's test id on the arm where nothing opens. */
241
+ readonly bodyTestId?: string;
229
242
  readonly children: ReactNode;
230
243
  }
231
244
  ): ReactElement {
232
245
  const { label, children } = props;
246
+ const testId = props.testId ?? "listings-card-open";
233
247
 
234
248
  if (props.href !== undefined) {
235
249
  const Link = props.linkComponent;
@@ -241,7 +255,7 @@ function CardTarget(
241
255
  href={props.href}
242
256
  aria-label={label}
243
257
  className={CARD_TARGET_CLASS}
244
- data-testid="listings-card-open"
258
+ data-testid={testId}
245
259
  data-analytics="none"
246
260
  data-analytics-reason="business action — host app wraps with its own tracked()"
247
261
  >
@@ -253,7 +267,7 @@ function CardTarget(
253
267
  aria-label={label}
254
268
  className={CARD_TARGET_CLASS}
255
269
  style={TARGET_STYLE}
256
- data-testid="listings-card-open"
270
+ data-testid={testId}
257
271
  data-analytics="none"
258
272
  data-analytics-reason="business action — host app wraps with its own tracked()"
259
273
  >
@@ -270,7 +284,7 @@ function CardTarget(
270
284
  aria-label={label}
271
285
  className={CARD_TARGET_CLASS}
272
286
  style={BUTTON_TARGET_STYLE}
273
- data-testid="listings-card-open"
287
+ data-testid={testId}
274
288
  data-analytics="none"
275
289
  data-analytics-reason="business action — host app wraps with its own tracked()"
276
290
  onClick={() => {
@@ -283,7 +297,9 @@ function CardTarget(
283
297
  }
284
298
 
285
299
  // No open control at all — a card inside a screen that IS the listing.
286
- return <div data-testid="listings-card-body">{children}</div>;
300
+ return (
301
+ <div data-testid={props.bodyTestId ?? "listings-card-body"}>{children}</div>
302
+ );
287
303
  }
288
304
 
289
305
  export function ListingCard(props: ListingCardProps): ReactElement {