@stapel/listings-react 0.25.10 → 0.27.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.
- package/CHANGELOG.md +259 -0
- package/MODULE.md +3 -1
- package/README.md +122 -9
- package/dist/api/generated/schema.d.ts +22 -12
- package/dist/api/generated/schema.d.ts.map +1 -1
- package/dist/default/CardBadges.d.ts.map +1 -1
- package/dist/default/CardBadges.js +3 -1
- package/dist/default/CardBadges.js.map +1 -1
- package/dist/default/ListingActions.d.ts +108 -0
- package/dist/default/ListingActions.d.ts.map +1 -0
- package/dist/default/ListingActions.js +29 -0
- package/dist/default/ListingActions.js.map +1 -0
- package/dist/default/ListingCard.d.ts.map +1 -1
- package/dist/default/ListingCard.js +15 -8
- package/dist/default/ListingCard.js.map +1 -1
- package/dist/default/ListingDetailPane.d.ts +170 -62
- package/dist/default/ListingDetailPane.d.ts.map +1 -1
- package/dist/default/ListingDetailPane.js +284 -28
- package/dist/default/ListingDetailPane.js.map +1 -1
- package/dist/default/ListingFeedCard.d.ts.map +1 -1
- package/dist/default/ListingFeedCard.js +2 -1
- package/dist/default/ListingFeedCard.js.map +1 -1
- package/dist/default/ListingPhoto.d.ts.map +1 -1
- package/dist/default/ListingPhoto.js +5 -2
- package/dist/default/ListingPhoto.js.map +1 -1
- package/dist/default/ListingSerpCard.d.ts.map +1 -1
- package/dist/default/ListingSerpCard.js +18 -4
- package/dist/default/ListingSerpCard.js.map +1 -1
- package/dist/default/MyListingsPane.d.ts.map +1 -1
- package/dist/default/MyListingsPane.js +49 -21
- package/dist/default/MyListingsPane.js.map +1 -1
- package/dist/default/ShareAction.d.ts +32 -0
- package/dist/default/ShareAction.d.ts.map +1 -0
- package/dist/default/ShareAction.js +116 -0
- package/dist/default/ShareAction.js.map +1 -0
- package/dist/default/actionRow.d.ts +58 -0
- package/dist/default/actionRow.d.ts.map +1 -0
- package/dist/default/actionRow.js +128 -0
- package/dist/default/actionRow.js.map +1 -0
- package/dist/default/cardGallery.d.ts +2 -0
- package/dist/default/cardGallery.d.ts.map +1 -1
- package/dist/default/cardGallery.js +31 -0
- package/dist/default/cardGallery.js.map +1 -1
- package/dist/default/detailGallery.d.ts +77 -0
- package/dist/default/detailGallery.d.ts.map +1 -0
- package/dist/default/detailGallery.js +91 -0
- package/dist/default/detailGallery.js.map +1 -0
- package/dist/default/favorite.d.ts +25 -0
- package/dist/default/favorite.d.ts.map +1 -1
- package/dist/default/favorite.js +29 -3
- package/dist/default/favorite.js.map +1 -1
- package/dist/default/icons.d.ts +19 -0
- package/dist/default/icons.d.ts.map +1 -1
- package/dist/default/icons.js +23 -0
- package/dist/default/icons.js.map +1 -1
- package/dist/default/index.d.ts +11 -2
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +10 -1
- package/dist/default/index.js.map +1 -1
- package/dist/default/movableCluster.d.ts +18 -0
- package/dist/default/movableCluster.d.ts.map +1 -0
- package/dist/default/movableCluster.js +110 -0
- package/dist/default/movableCluster.js.map +1 -0
- package/dist/default/notice.d.ts +14 -0
- package/dist/default/notice.d.ts.map +1 -0
- package/dist/default/notice.js +62 -0
- package/dist/default/notice.js.map +1 -0
- package/dist/headless/MyListings.d.ts +61 -19
- package/dist/headless/MyListings.d.ts.map +1 -1
- package/dist/headless/MyListings.js +58 -19
- package/dist/headless/MyListings.js.map +1 -1
- package/dist/headless/Share.d.ts +103 -0
- package/dist/headless/Share.d.ts.map +1 -0
- package/dist/headless/Share.js +190 -0
- package/dist/headless/Share.js.map +1 -0
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +21 -0
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/generated/errors.es.gen.d.ts +1 -1
- package/dist/i18n/generated/errors.es.gen.js +1 -1
- package/dist/i18n/generated/errors.gen.d.ts +18 -0
- package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.gen.js +9 -0
- package/dist/i18n/generated/errors.gen.js.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.d.ts +1 -1
- package/dist/i18n/generated/errors.ru.gen.js +1 -1
- package/dist/i18n/keys.d.ts +45 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +60 -0
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +21 -0
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/model/cardBadges.d.ts +52 -3
- package/dist/model/cardBadges.d.ts.map +1 -1
- package/dist/model/cardBadges.js +74 -12
- package/dist/model/cardBadges.js.map +1 -1
- package/dist/model/mineSource.d.ts +9 -3
- package/dist/model/mineSource.d.ts.map +1 -1
- package/dist/model/mineSource.js.map +1 -1
- package/dist/model/status.d.ts +79 -15
- package/dist/model/status.d.ts.map +1 -1
- package/dist/model/status.js +86 -17
- package/dist/model/status.js.map +1 -1
- package/llms.txt +8 -3
- package/manifest.json +96 -4
- package/nav-manifest.json +1 -1
- package/package.json +10 -10
- package/src/analytics/generated/events.json +1 -1
- package/src/api/generated/schema.ts +22 -12
- package/src/default/CardBadges.tsx +3 -1
- package/src/default/ListingActions.tsx +196 -0
- package/src/default/ListingCard.tsx +79 -43
- package/src/default/ListingDetailPane.tsx +520 -89
- package/src/default/ListingFeedCard.tsx +2 -0
- package/src/default/ListingPhoto.tsx +28 -0
- package/src/default/ListingSerpCard.tsx +39 -12
- package/src/default/MyListingsPane.tsx +81 -44
- package/src/default/ShareAction.tsx +260 -0
- package/src/default/actionRow.ts +131 -0
- package/src/default/cardGallery.ts +31 -0
- package/src/default/detailGallery.ts +97 -0
- package/src/default/favorite.tsx +68 -1
- package/src/default/icons.tsx +60 -0
- package/src/default/index.ts +37 -1
- package/src/default/movableCluster.tsx +137 -0
- package/src/default/notice.ts +68 -0
- package/src/headless/MyListings.tsx +130 -39
- package/src/headless/Share.tsx +278 -0
- package/src/i18n/es.ts +28 -0
- package/src/i18n/generated/errors.es.gen.ts +1 -1
- package/src/i18n/generated/errors.gen.ts +9 -0
- package/src/i18n/generated/errors.json +31 -0
- package/src/i18n/generated/errors.ru.gen.ts +1 -1
- package/src/i18n/keys.ts +63 -0
- package/src/i18n/ru.ts +28 -0
- package/src/index.ts +22 -0
- package/src/model/cardBadges.ts +124 -12
- package/src/model/mineSource.ts +9 -3
- package/src/model/status.ts +102 -20
|
@@ -1,57 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `<ListingDetailPane>` — the listing page, and the page a marketplace makes
|
|
3
|
-
* its money on.
|
|
4
|
-
*
|
|
5
|
-
* Five distinct absences, five distinct sentences, and the whole point of the
|
|
6
|
-
* component is that none of them collapses into another:
|
|
7
|
-
*
|
|
8
|
-
* loading — we are asking
|
|
9
|
-
* failed — we could not ask (retry, never "nothing here")
|
|
10
|
-
* not found — no listing ever had this id
|
|
11
|
-
* removed — one did, and it is gone (the AllowAny status probe
|
|
12
|
-
* is the only read that can still say so)
|
|
13
|
-
* withdrawn — one did, and its owner took it off the shelf: the
|
|
14
|
-
* detail 404s while the probe still answers "not
|
|
15
|
-
* deleted". NO retry — nothing a retry could change.
|
|
16
|
-
*
|
|
17
|
-
* On top of that, a listing that IS returned may still not be on sale: the
|
|
18
|
-
* detail endpoint has no `published()` filter, so a draft answers 200 to
|
|
19
|
-
* anyone holding the id. The pane says which side of that it is on rather
|
|
20
|
-
* than dressing a draft up as a shop page.
|
|
21
|
-
*
|
|
22
|
-
* ── The page has ONE primary action, and it depends on who is reading ──────
|
|
23
|
-
*
|
|
24
|
-
* For two releases the only control here was "Save to favourites" — the money
|
|
25
|
-
* screen of a marketplace with no way to reach the seller, and the owner's own
|
|
26
|
-
* copy of the page offering to favourite their own listing. So:
|
|
27
|
-
*
|
|
28
|
-
* a buyer → `contactSlot` (the container's `@stapel/chat-react`
|
|
29
|
-
* "message the seller" button), with favouriting beside it as
|
|
30
|
-
* the secondary it always was;
|
|
31
|
-
* the owner → Edit and Take down, and no contact button at all — you do not
|
|
32
|
-
* message yourself.
|
|
33
|
-
*
|
|
34
|
-
* `contactSlot` is a SLOT because conversations belong to another L2 pair and
|
|
35
|
-
* L2 pairs do not import each other. Unfilled it renders `<SlotPlaceholder>`,
|
|
36
|
-
* so an app wired without a chat is a named gap in a dev build rather than a
|
|
37
|
-
* page whose only verb is "save".
|
|
38
|
-
*
|
|
39
|
-
* ── The page has a DESKTOP, when the host says so ──────────────────────────
|
|
40
|
-
*
|
|
41
|
-
* Measured on a live classified deployment at 1440×900: the whole listing
|
|
42
|
-
* page was a ~930px single column hugging the start edge, the price a 22px
|
|
43
|
-
* line UNDER the title and smaller than it, and the right half of the screen
|
|
44
|
-
* empty — while the reference design for this page is two columns: gallery +
|
|
45
|
-
* description + specs on the left, a sticky buy column on the right with the
|
|
46
|
-
* price LARGE at its top, then the actions, then the seller block.
|
|
47
|
-
*
|
|
48
|
-
* `layout="split"` is that design. The HOST states the axis — the same rule
|
|
49
|
-
* as CategoryPage's `subcategories`: a decision taken once by the component
|
|
50
|
-
* that knows the viewport it granted, never a media query guessed in a leaf —
|
|
51
|
-
* and the default `"column"` renders exactly what existing hosts already get.
|
|
52
|
-
*/
|
|
53
1
|
import type { ReactElement, ReactNode } from "react";
|
|
54
2
|
import type { SignInCta } from "@stapel/core";
|
|
3
|
+
import type { ShareChannel } from "../headless/Share.js";
|
|
4
|
+
import type { ListingActionsConfig } from "./ListingActions.js";
|
|
5
|
+
import type { ListingGalleryLayout } from "./detailGallery.js";
|
|
55
6
|
import type { CategoryFeaturesProp, ThemeModeProp } from "./types.js";
|
|
56
7
|
/** The reading measure of the page body. A detail page is prose plus a spec
|
|
57
8
|
* table; past this it stops being one column and starts being a stripe across
|
|
@@ -73,12 +24,30 @@ export declare const DETAIL_SPLIT_MEASURE = "75rem";
|
|
|
73
24
|
* `1fr` and this is not.
|
|
74
25
|
*/
|
|
75
26
|
export declare const DETAIL_SPLIT_ASIDE = "380px";
|
|
76
|
-
/**
|
|
77
|
-
*
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
*
|
|
81
|
-
|
|
27
|
+
/** Re-exported: the tile floor is declared beside the track it feeds, in
|
|
28
|
+
* `detailGallery.ts`. */
|
|
29
|
+
export { DETAIL_PHOTO_MIN } from "./detailGallery.js";
|
|
30
|
+
/**
|
|
31
|
+
* THE GUTTER BETWEEN TWO PHOTOGRAPHS, and it is the page's own (D418).
|
|
32
|
+
*
|
|
33
|
+
* The gallery painted a flat `spacing[3]` — 12px on a 390px phone and 12px on
|
|
34
|
+
* a 1280px desktop — while the page around it had already decided that its
|
|
35
|
+
* edge is 4px on a phone and 24px on a desktop. Measured on the live listing:
|
|
36
|
+
* `getComputedStyle(gallery).gap` answered `12px` at both widths, so neither
|
|
37
|
+
* of the two declared numbers was ever on screen and the tiles sat closer
|
|
38
|
+
* together than the page edge on a desktop and three times further apart than
|
|
39
|
+
* it on a phone.
|
|
40
|
+
*
|
|
41
|
+
* `--stapel-page-gutter` is a RESPONSIVE token role (`@stapel/tokens`: 4px
|
|
42
|
+
* phone, 8px tablet, 24px desktop, declared once with its own media arms), and
|
|
43
|
+
* reading it as a VAR rather than computing a number is the load-bearing half:
|
|
44
|
+
* a value picked in JS is applied at render, so a window resized between
|
|
45
|
+
* renders keeps the gutter it was drawn with, where a var reflows. Written
|
|
46
|
+
* through `cssVar` so a renamed role fails to compile instead of silently
|
|
47
|
+
* resolving to nothing, with the flat value this grid used before as the
|
|
48
|
+
* fallback for a host that loads no token stylesheet.
|
|
49
|
+
*/
|
|
50
|
+
export declare const DETAIL_GALLERY_GUTTER: string;
|
|
82
51
|
export interface ListingDetailPaneProps extends ThemeModeProp, CategoryFeaturesProp {
|
|
83
52
|
readonly id: number;
|
|
84
53
|
/** The reader's own uuid, when the host knows it. Enables the owner view —
|
|
@@ -147,10 +116,144 @@ export interface ListingDetailPaneProps extends ThemeModeProp, CategoryFeaturesP
|
|
|
147
116
|
/** Open the composer on this listing — the owner's primary. Absent is a real
|
|
148
117
|
* answer: the button then states that this app has no editing screen. */
|
|
149
118
|
readonly onEdit?: (id: number) => void;
|
|
150
|
-
/**
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
|
|
119
|
+
/**
|
|
120
|
+
* TWO THINGS UNDER ONE NAME, and the type tells them apart.
|
|
121
|
+
*
|
|
122
|
+
* - a NODE — extra chrome beside the primary (the seller's profile link, a
|
|
123
|
+
* control from another pair). What this prop has always been, unchanged,
|
|
124
|
+
* and still rendered at the end of the buy box. Cross-pair navigation is
|
|
125
|
+
* the container's job (spec §6.2 item 5), so this pair takes nodes
|
|
126
|
+
* rather than routes.
|
|
127
|
+
* - a CONFIG — `{ share: false }` / `{ favorite: false }`, switching off
|
|
128
|
+
* one of the page's own two reader actions.
|
|
129
|
+
*
|
|
130
|
+
* A union rather than a second prop, because they are the same question
|
|
131
|
+
* ("what is in the action row") asked from two sides, and it is
|
|
132
|
+
* unambiguous at runtime: a plain object that is not a React element was
|
|
133
|
+
* never a legal `ReactNode` in the first place — React refuses to render
|
|
134
|
+
* one — so `{ share: false }` cannot be a node that somebody meant.
|
|
135
|
+
*/
|
|
136
|
+
readonly actions?: ReactNode | ListingActionsConfig;
|
|
137
|
+
/**
|
|
138
|
+
* The listing's CANONICAL address, for the share sheet — the route the
|
|
139
|
+
* container built (`/l/7`, or an absolute URL), not the address bar.
|
|
140
|
+
*
|
|
141
|
+
* Absent, sharing falls back to `window.location.href`, which is honest for
|
|
142
|
+
* a bare mount and wrong for a real app: the address a visitor is standing
|
|
143
|
+
* on carries the SERP query they arrived from, the page anchor and whatever
|
|
144
|
+
* tracking parameters came with them, and none of that belongs in a link
|
|
145
|
+
* somebody sends to a friend. See `useShare`.
|
|
146
|
+
*/
|
|
147
|
+
readonly shareUrl?: string;
|
|
148
|
+
/** Analytics: which channel a completed share went through. */
|
|
149
|
+
readonly onShared?: (channel: ShareChannel) => void;
|
|
150
|
+
/**
|
|
151
|
+
* How many people saved this listing, when the host was told by something
|
|
152
|
+
* else. The listings wire carries `is_favorited` — a per-reader boolean —
|
|
153
|
+
* and no aggregate at all, so this pair never invents the number and never
|
|
154
|
+
* draws a zero in place of "nobody counted".
|
|
155
|
+
*/
|
|
156
|
+
readonly favoriteCount?: number;
|
|
157
|
+
/**
|
|
158
|
+
* WHERE THE READER'S TWO ACTIONS SIT.
|
|
159
|
+
*
|
|
160
|
+
* - `"header"` (default) — beside the title, at the trailing edge of the
|
|
161
|
+
* heading row, which is where the reference classified puts them and
|
|
162
|
+
* where a person looks for them on both a phone and a desktop;
|
|
163
|
+
* - `"gallery"` — pinned over the photographs' trailing top corner, for a
|
|
164
|
+
* phone-first host that wants them on the picture. The corner is chosen
|
|
165
|
+
* rather than free: the dots own the bottom centre of the strip and the
|
|
166
|
+
* photo counter owns the bottom trailing corner;
|
|
167
|
+
* - `"buy-box"` — inside `listings-detail-actions`, beside "message the
|
|
168
|
+
* seller", which is where the favourite alone used to live. The escape
|
|
169
|
+
* hatch for a host whose page was laid out around it;
|
|
170
|
+
* - `"bar"` — the condensed top bar the host draws through
|
|
171
|
+
* {@link renderActionsBar}. Only meaningful in a LIST beside one of the
|
|
172
|
+
* three above, and only with that render prop: it names a second place
|
|
173
|
+
* the one cluster may travel to, never a home of its own.
|
|
174
|
+
*
|
|
175
|
+
* A LIST is how a host says "both": `["header", "bar"]` keeps the cluster
|
|
176
|
+
* beside the title and lends it to the bar for as long as the bar is on
|
|
177
|
+
* screen. Exactly one home placement is honoured — the first non-`"bar"`
|
|
178
|
+
* entry — because two homes would need two instances, which is the defect
|
|
179
|
+
* this closes rather than the feature it adds.
|
|
180
|
+
*/
|
|
181
|
+
readonly actionsPlacement?: ListingActionsPlacement | readonly ListingActionsPlacement[];
|
|
182
|
+
/**
|
|
183
|
+
* THE SAME CLUSTER, IN A SECOND PLACE — a condensed bar, typically.
|
|
184
|
+
*
|
|
185
|
+
* Called with the bar's MOUNT POINT, not with a copy of the cluster: return
|
|
186
|
+
* it wrapped in whatever chrome the bar is (`position: fixed`, a back arrow,
|
|
187
|
+
* the title), and the pane moves its one `<ListingActions>` into it. Return
|
|
188
|
+
* `null` while the bar is not on screen and the cluster goes back where it
|
|
189
|
+
* came from — the same DOM node, the same hooks, an optimistic favourite
|
|
190
|
+
* still in flight uninterrupted.
|
|
191
|
+
*
|
|
192
|
+
* Requires `"bar"` in {@link actionsPlacement}. Pair it with
|
|
193
|
+
* {@link onTitleVisible} for the usual rule: the bar appears when the title
|
|
194
|
+
* leaves the fold.
|
|
195
|
+
*
|
|
196
|
+
* ```tsx
|
|
197
|
+
* <ListingDetailPane
|
|
198
|
+
* actionsPlacement={["header", "bar"]}
|
|
199
|
+
* onTitleVisible={(visible) => { setBarShown(!visible); }}
|
|
200
|
+
* renderActionsBar={(cluster) =>
|
|
201
|
+
* barShown ? <div className="topbar">{back}{title}{cluster}</div> : null
|
|
202
|
+
* }
|
|
203
|
+
* />
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* A container that mounted its own second `<ListingActions>` for this can
|
|
207
|
+
* delete it: two `useFavoriteToggle` instances on one page, two hearts that
|
|
208
|
+
* agree only after a refetch, and a second set of test ids to keep the
|
|
209
|
+
* pane's own single are all what this prop exists to end.
|
|
210
|
+
*/
|
|
211
|
+
readonly renderActionsBar?: (cluster: ReactNode) => ReactNode;
|
|
212
|
+
/**
|
|
213
|
+
* IS THE TITLE STILL IN THE FOLD?
|
|
214
|
+
*
|
|
215
|
+
* An `IntersectionObserver` on the pane's own `<h1>` — never a `scroll`
|
|
216
|
+
* listener, which asks the question on every frame of a page whose job is
|
|
217
|
+
* scrolling photographs and answers it no better. Called on each crossing
|
|
218
|
+
* and not on every scroll: `false` when the title leaves, `true` when it
|
|
219
|
+
* comes back.
|
|
220
|
+
*
|
|
221
|
+
* It exists because the chrome a host hangs on this had no way to ask. A
|
|
222
|
+
* container drawing a condensed bar found the title by the pane's published
|
|
223
|
+
* `data-testid` and waited for it with a `MutationObserver`, because the
|
|
224
|
+
* title lands with the listing and not with the first frame — a private
|
|
225
|
+
* selector and a subscription, for a boolean the pane already knows.
|
|
226
|
+
*
|
|
227
|
+
* NOT called at all where the environment has no `IntersectionObserver`:
|
|
228
|
+
* the honest answer there is "this page cannot tell", and a fabricated
|
|
229
|
+
* `true` would leave a host's bar wedged open on the arm that has no
|
|
230
|
+
* scrolling anyway.
|
|
231
|
+
*
|
|
232
|
+
* Pass a STABLE function (a `useState` setter, a `useCallback`). The
|
|
233
|
+
* observer is created once for the title node and reads the latest callback
|
|
234
|
+
* through a ref, so an inline arrow works and does not re-observe.
|
|
235
|
+
*/
|
|
236
|
+
readonly onTitleVisible?: (visible: boolean) => void;
|
|
237
|
+
/**
|
|
238
|
+
* WHAT SHAPE THE PHOTOGRAPHS ARE IN.
|
|
239
|
+
*
|
|
240
|
+
* - `"grid"` (default) — the element-width grid this pane has always drawn,
|
|
241
|
+
* `repeat(auto-fit, minmax(14rem, 1fr))`: three tiles across a desktop
|
|
242
|
+
* pane, one across a phone;
|
|
243
|
+
* - `"strip"` — a snap-scrolling horizontal strip, one photograph visible
|
|
244
|
+
* with the next peeking. On a 390px phone the grid resolves to one
|
|
245
|
+
* column, so a listing with three pictures pushes its own title and price
|
|
246
|
+
* nearly three screens down — the first thing a person sees after tapping
|
|
247
|
+
* a search result is a photograph with nothing beside it.
|
|
248
|
+
*
|
|
249
|
+
* The HOST names it, the same rule as {@link layout} and for the same
|
|
250
|
+
* reason: the side that knows the viewport it granted decides, and no media
|
|
251
|
+
* query is guessed in a leaf. A live storefront was carrying
|
|
252
|
+
* `display: flex !important` against this pane's inline `display: grid` to
|
|
253
|
+
* say exactly this; that declaration is a class now, so even a host wanting
|
|
254
|
+
* a third shape needs a selector rather than an `!important`.
|
|
255
|
+
*/
|
|
256
|
+
readonly galleryLayout?: ListingGalleryLayout;
|
|
154
257
|
/**
|
|
155
258
|
* The container's sign-in door, rendered beside the favourite's refusal —
|
|
156
259
|
* the same `SignInCta` seam the three card skins already take. The pane was
|
|
@@ -183,5 +286,10 @@ export interface ListingDetailPaneProps extends ThemeModeProp, CategoryFeaturesP
|
|
|
183
286
|
readonly headingLevel?: 1 | 2 | 3;
|
|
184
287
|
readonly footer?: ReactNode;
|
|
185
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Where the reader's cluster may sit. Three homes and one loan — see
|
|
291
|
+
* {@link ListingDetailPaneProps.actionsPlacement}.
|
|
292
|
+
*/
|
|
293
|
+
export type ListingActionsPlacement = "header" | "gallery" | "buy-box" | "bar";
|
|
186
294
|
export declare function ListingDetailPane(props: ListingDetailPaneProps): ReactElement;
|
|
187
295
|
//# sourceMappingURL=ListingDetailPane.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingDetailPane.d.ts","sourceRoot":"","sources":["../../src/default/ListingDetailPane.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ListingDetailPane.d.ts","sourceRoot":"","sources":["../../src/default/ListingDetailPane.tsx"],"names":[],"mappings":"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"}
|