@stapel/listings-react 0.29.0 → 0.30.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 +145 -0
- package/MODULE.md +9 -7
- package/README.md +5 -4
- package/dist/default/CardBadges.d.ts +32 -0
- package/dist/default/CardBadges.d.ts.map +1 -1
- package/dist/default/CardBadges.js +41 -3
- package/dist/default/CardBadges.js.map +1 -1
- package/dist/default/ListingDetailPane.d.ts +115 -8
- package/dist/default/ListingDetailPane.d.ts.map +1 -1
- package/dist/default/ListingDetailPane.js +358 -177
- package/dist/default/ListingDetailPane.js.map +1 -1
- package/dist/default/ListingRelated.d.ts +88 -0
- package/dist/default/ListingRelated.d.ts.map +1 -0
- package/dist/default/ListingRelated.js +41 -0
- package/dist/default/ListingRelated.js.map +1 -0
- package/dist/default/ListingSpecList.d.ts +29 -34
- package/dist/default/ListingSpecList.d.ts.map +1 -1
- package/dist/default/ListingSpecList.js +67 -12
- package/dist/default/ListingSpecList.js.map +1 -1
- package/dist/default/condensedBar.d.ts +17 -0
- package/dist/default/condensedBar.d.ts.map +1 -0
- package/dist/default/condensedBar.js +73 -0
- package/dist/default/condensedBar.js.map +1 -0
- package/dist/default/detailGallery.d.ts +40 -40
- package/dist/default/detailGallery.d.ts.map +1 -1
- package/dist/default/detailGallery.js +129 -0
- package/dist/default/detailGallery.js.map +1 -1
- package/dist/default/detailRhythm.d.ts +15 -0
- package/dist/default/detailRhythm.d.ts.map +1 -0
- package/dist/default/detailRhythm.js +74 -0
- package/dist/default/detailRhythm.js.map +1 -0
- package/dist/default/icons.d.ts +13 -0
- package/dist/default/icons.d.ts.map +1 -1
- package/dist/default/icons.js +15 -0
- package/dist/default/icons.js.map +1 -1
- package/dist/default/index.d.ts +9 -5
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +13 -4
- package/dist/default/index.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +12 -6
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/generated/errors.es.gen.js +1 -1
- package/dist/i18n/generated/errors.es.gen.js.map +1 -1
- package/dist/i18n/generated/errors.gen.d.ts +2 -2
- package/dist/i18n/generated/errors.gen.js +2 -2
- package/dist/i18n/generated/errors.gen.js.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.js +1 -1
- package/dist/i18n/generated/errors.ru.gen.js.map +1 -1
- package/dist/i18n/keys.d.ts +23 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +38 -7
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +14 -9
- package/dist/i18n/ru.js.map +1 -1
- package/llms.txt +3 -3
- package/manifest.json +29 -4
- package/nav-manifest.json +1 -1
- package/package.json +8 -8
- package/src/analytics/generated/events.json +1 -1
- package/src/default/CardBadges.tsx +65 -4
- package/src/default/ListingDetailPane.tsx +490 -52
- package/src/default/ListingRelated.tsx +154 -0
- package/src/default/ListingSpecList.tsx +64 -1
- package/src/default/condensedBar.ts +74 -0
- package/src/default/detailGallery.ts +141 -0
- package/src/default/detailRhythm.ts +78 -0
- package/src/default/icons.tsx +32 -0
- package/src/default/index.ts +45 -2
- package/src/i18n/es.ts +12 -7
- package/src/i18n/generated/errors.es.gen.ts +1 -1
- package/src/i18n/generated/errors.gen.ts +2 -2
- package/src/i18n/generated/errors.json +2 -4
- package/src/i18n/generated/errors.ru.gen.ts +1 -1
- package/src/i18n/keys.ts +38 -7
- package/src/i18n/ru.ts +14 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,150 @@
|
|
|
1
1
|
# @stapel/listings-react
|
|
2
2
|
|
|
3
|
+
## 0.30.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 0421227: The listing page gets the four things the reference has and it did not.
|
|
8
|
+
|
|
9
|
+
Four rows of the closing-wave comparison inventory, all on
|
|
10
|
+
`<ListingDetailPane>`, plus one verdict that is not a defect in this package.
|
|
11
|
+
|
|
12
|
+
**A condensed bar the pane draws itself.** Past the first screen the reference
|
|
13
|
+
classified pins back / title / heart / share to the top of a phone listing;
|
|
14
|
+
this pane offered `renderActionsBar` and left every container to write the
|
|
15
|
+
same four things. `actionsPlacement={["header", "condensed-top"]}` is the pane
|
|
16
|
+
drawing it — `onBack` is the arrow (absent, there is none: a listing opened in
|
|
17
|
+
a new tab has nowhere to go back to), the title is one ellipsised line, and
|
|
18
|
+
the cluster is the SAME travelling `<ListingActions>` the movable-cluster
|
|
19
|
+
portal already moves, so the page still mounts one `useFavoriteToggle` and one
|
|
20
|
+
`aria-pressed` heart. The threshold is the title leaving the fold rather than
|
|
21
|
+
the reference's "~160px", which is a fact about its own header height. A host
|
|
22
|
+
that also passes `renderActionsBar` keeps it: the specific answer beats the
|
|
23
|
+
default one, and two bars never stack.
|
|
24
|
+
|
|
25
|
+
**The strip says where it is.** `galleryLayout="strip"` is a native scroll
|
|
26
|
+
container and the page had no active-photo indicator at all (§20b: a full
|
|
27
|
+
slide of `scrollLeft` moved the strip and moved nothing else).
|
|
28
|
+
`useGalleryPosition` reads the strip's own `scroll`, throttled to one
|
|
29
|
+
measurement per animation frame, from live rectangles rather than
|
|
30
|
+
`scrollLeft / slideWidth` — and the "3 of 16" pill stands in a frame BESIDE
|
|
31
|
+
the strip, because an absolutely positioned child of a scroller scrolls away
|
|
32
|
+
with the content it is counting. Nothing here is keyed off a tap: the gesture
|
|
33
|
+
that changes the photograph is not one.
|
|
34
|
+
|
|
35
|
+
**Four canned questions above the contact control.** `quickQuestions` (the
|
|
36
|
+
pair's own four, in en/ru/es; a host's own list; `[]` to switch off, capped at
|
|
37
|
+
four) with `onQuickQuestion` reporting the press. The press is a callback and
|
|
38
|
+
not a prefilled composer on purpose: `@stapel/chat-react` 0.12.1's door takes
|
|
39
|
+
no initial message — `<StartDirectChat>` takes a seller and a subject,
|
|
40
|
+
`useStartDirectChat` posts `{userId, subject}`, `<MessageComposer>` opens on an
|
|
41
|
+
empty string — so a pane that claimed to seed it would be inventing a seam the
|
|
42
|
+
other pair does not have. Without the callback the block is not drawn, and the
|
|
43
|
+
owner never sees it: the owner is the person being asked.
|
|
44
|
+
|
|
45
|
+
**Two "find more" strips.** `similar` / `fromSeller` take rows and draw
|
|
46
|
+
`<ListingRelatedStrip>`; `renderSimilar` / `renderFromSeller` take the whole
|
|
47
|
+
section and are handed `{listingId, categoryId, ownerKey, axes}` to build a
|
|
48
|
+
query with. Two sections and not one rail, because the reference draws two and
|
|
49
|
+
they answer different questions. The rows come from the host's search: this
|
|
50
|
+
pair does not read search, and the detail wire carries a category id, not a
|
|
51
|
+
slug. Neither strip is drawn empty.
|
|
52
|
+
|
|
53
|
+
**And the characteristics table, which was not the bug.** The comparison
|
|
54
|
+
measured ~2.5× fewer fields than the reference on the same kind of listing.
|
|
55
|
+
Read against a live answer: the pane applies no cap and no filter beyond
|
|
56
|
+
dropping form `header` rows, and it counts what it cannot key
|
|
57
|
+
(`listings-detail-unreadable`). The shortfall is in the DATA — the listing the
|
|
58
|
+
comparison measured carries seven feature rows on the wire, and a
|
|
59
|
+
fully-filled one in the same category carries twenty-eight, all of which the
|
|
60
|
+
pane draws. What is added is the reference's FOLD, not rows:
|
|
61
|
+
`<ListingSpecList limit>` / `<ListingDetailPane characteristicsLimit>`, default
|
|
62
|
+
unlimited, folding only when it saves at least two rows, opening in place.
|
|
63
|
+
|
|
64
|
+
Also fixed on the way past: `useTitleVisibility` attached a fresh
|
|
65
|
+
`IntersectionObserver` to the heading on every render. `<Typography.Title ref>`
|
|
66
|
+
is antd's, which merges refs and invokes them itself, and a ref callback's
|
|
67
|
+
return value means nothing to a caller that is not React — so the cleanup was
|
|
68
|
+
dropped. Three live observers on one `<h1>` after two crossings, each
|
|
69
|
+
announcing the crossing again to `onTitleVisible`. The hook now holds the one
|
|
70
|
+
live observer by the node it watches and disconnects from an effect as well.
|
|
71
|
+
|
|
72
|
+
`test/detailCondensedBar`, `test/detailGalleryPosition`,
|
|
73
|
+
`test/detailQuickQuestions` and `test/detailRelated` are the four; the bar's
|
|
74
|
+
cluster is asserted by ELEMENT IDENTITY across the move, the gallery by a faked
|
|
75
|
+
strip scroll, and the observer by the count of LIVE observers after three
|
|
76
|
+
crossings.
|
|
77
|
+
|
|
78
|
+
The `/default` size budget is raised 31 → 33 KB (measured 31.84) — the note in
|
|
79
|
+
`package.json` says what was bought and what was measured against what.
|
|
80
|
+
|
|
81
|
+
**And the page's own rhythm, which was the sum of two systems.** The stand's
|
|
82
|
+
tidiness probe measured the gaps INSIDE `<ListingDetailPane>`'s column at 1440
|
|
83
|
+
and 390: 111.05, 53.59, 42.39, 29 and 27 pixels, in a container that declares
|
|
84
|
+
16 (12 in the buy column). Five distances, none of them chosen. A flex `gap`
|
|
85
|
+
governs only the space a container puts BETWEEN its children, and half the
|
|
86
|
+
children here are antd components carrying an outer margin of their own —
|
|
87
|
+
`<Divider>` 24 above and 24 below, `<Typography.Title>` its level's
|
|
88
|
+
margin-block-start, `<Typography.Paragraph>` about a line — and a margin and a
|
|
89
|
+
gap add.
|
|
90
|
+
|
|
91
|
+
`detailRhythm.ts` is the answer, and it is deliberately the same three-line
|
|
92
|
+
answer `@stapel/categories-react`'s `blockRhythm.ts` gives a catalogue page:
|
|
93
|
+
`margin-block: 0` on every direct child of each of the pane's three block
|
|
94
|
+
columns (the page column, and the split layout's reading and buy columns). The
|
|
95
|
+
section rule is the one exception, because a horizontal rule is a BREAK and
|
|
96
|
+
not a block: `DETAIL_RULE_CLASS` gives it one token step on each side
|
|
97
|
+
(`DETAIL_RULE_SPACE`, `spacing[2]`), so the break lands at `gap + step` and the
|
|
98
|
+
number is a decision rather than whatever antd's 24 summed to. Specificity, not
|
|
99
|
+
`!important`: `.column > .rule` beats `.column > *`, and a host can still
|
|
100
|
+
out-specify both.
|
|
101
|
+
|
|
102
|
+
**The card's spec line was a correct picture over a wrong box.**
|
|
103
|
+
`listings-card-specs-text` measured 57px wider than the element it sits in.
|
|
104
|
+
`<Typography.Text ellipsis>` clips on ITSELF and the badge row's `<span>` is a
|
|
105
|
+
separate inline box that lays out at its natural width regardless — so the
|
|
106
|
+
overflow was hidden and the geometry was still wrong, which is what a container
|
|
107
|
+
measuring the card reads. The line is a flex container now and the span a flex
|
|
108
|
+
child with `min-inline-size: 0` — the declaration without which a flex item
|
|
109
|
+
stays pinned at `min-width: auto` and every other rule is decoration — with the
|
|
110
|
+
`overflow`/`white-space`/`text-overflow` moved onto the span that holds the
|
|
111
|
+
words.
|
|
112
|
+
|
|
113
|
+
`test/detailRhythm.tsx` enumerates every direct child of each column and
|
|
114
|
+
asserts the reset's selector matches it (jsdom resolves no `margin-block` from
|
|
115
|
+
a sheet, so the claim is the scope plus the absence of any inline margin that
|
|
116
|
+
would beat it), and `test/cardSpecLineBox.tsx` asserts the flex child and its
|
|
117
|
+
`min-inline-size`. Both were red before: four of the eight assertions fail with
|
|
118
|
+
the classes removed.
|
|
119
|
+
|
|
120
|
+
No budget change: `/default` measures 31.98 of 33.
|
|
121
|
+
|
|
122
|
+
## 0.29.1
|
|
123
|
+
|
|
124
|
+
### Patch Changes
|
|
125
|
+
|
|
126
|
+
- 68d5906: The last hand-written error override is gone, because upstream fixed the text.
|
|
127
|
+
|
|
128
|
+
`error.409.invalid_listing_transition` interpolated `{from_status}` — the wire
|
|
129
|
+
value, `draft` / `archived` — into translated prose, so a seller read an English
|
|
130
|
+
status word inside a Russian sentence two lines under a status tag rendered in
|
|
131
|
+
their own language. This pair carried a local override for exactly that, with a
|
|
132
|
+
note saying to remove it when upstream dropped the placeholder.
|
|
133
|
+
|
|
134
|
+
stapel-listings 0.22.10 dropped it, in all three languages including the en
|
|
135
|
+
canon, so the contract pin moves to `v0.22.10` and the refusal is regenerated:
|
|
136
|
+
|
|
137
|
+
- en `Invalid status transition for {from_status}` → `This listing cannot move to that status from the one it is in now`
|
|
138
|
+
- ru `Недопустимая смена статуса для «{from_status}»` → `Из текущего статуса объявление нельзя перевести в выбранный`
|
|
139
|
+
- es `Cambio de estado no válido para {from_status}` → `El anuncio no puede pasar de su estado actual al estado elegido`
|
|
140
|
+
|
|
141
|
+
The override is deleted and this pair now authors nothing at all under
|
|
142
|
+
`error.*`. The assertion that guarded the override — `toContain("{from_status}")`
|
|
143
|
+
over the generated bundle — is **inverted rather than removed**, so both ways
|
|
144
|
+
this could regress stay red: a re-added placeholder upstream, and a re-added
|
|
145
|
+
hand-written copy here. `params.from_status` is unchanged and is still what
|
|
146
|
+
`ListingActions` reads.
|
|
147
|
+
|
|
3
148
|
## 0.29.0
|
|
4
149
|
|
|
5
150
|
### Minor Changes
|
package/MODULE.md
CHANGED
|
@@ -279,13 +279,15 @@ and the 17 `stapel_listings` ones from the module's own, merged under it by
|
|
|
279
279
|
`src/i18n/{ru,es}.ts` are deleted in the same change: a key with two sources
|
|
280
280
|
drifts, and neither file could say which one a screen had shown.
|
|
281
281
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
282
|
+
No override survives. One did until stapel-listings 0.22.10:
|
|
283
|
+
`error.409.invalid_listing_transition` interpolated `params.from_status` — the
|
|
284
|
+
WIRE value — into translated prose, which is the sentence a live cabinet showed
|
|
285
|
+
a seller. The upstream ask filed here ("drop `{from_status}` from the ru and es
|
|
286
|
+
texts, and the override goes with it") was answered in 0.22.10, which dropped
|
|
287
|
+
the slot from all three languages including the en canon; the override is
|
|
288
|
+
deleted and the assertion that guarded it is inverted rather than removed. The
|
|
289
|
+
value still travels in `params.from_status`, which is what `ListingActions`
|
|
290
|
+
reads.
|
|
289
291
|
|
|
290
292
|
The 13 `stapel_attributes` codes stay with `@stapel/attributes-react`.
|
|
291
293
|
stapel-attributes 0.9.3 ships a catalogue of its own now, but merging it into
|
package/README.md
CHANGED
|
@@ -490,10 +490,11 @@ half-translated submission form is visible immediately.
|
|
|
490
490
|
The seventeen `stapel_listings` error keys are no longer among them.
|
|
491
491
|
stapel-listings 0.22.8 ships `translations/errors.{ru,es}.json`, so they arrive
|
|
492
492
|
generated, from the module, and the seventeen strings this pair used to author
|
|
493
|
-
are deleted: one string, one source, and the drift gate owns it.
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
493
|
+
are deleted: one string, one source, and the drift gate owns it. Nothing is
|
|
494
|
+
overridden by hand any more either — the single survivor,
|
|
495
|
+
`error.409.invalid_listing_transition`, was overridden because upstream
|
|
496
|
+
interpolated the raw wire status into translated prose, and stapel-listings
|
|
497
|
+
0.22.10 dropped that placeholder in every language.
|
|
497
498
|
|
|
498
499
|
The thirteen `stapel_attributes` keys are deliberately NOT here either:
|
|
499
500
|
`@stapel/attributes-react` owns and translates them, and one refusal must not
|
|
@@ -36,6 +36,38 @@ export interface CardBadgesProps {
|
|
|
36
36
|
readonly variant: "badges" | "line";
|
|
37
37
|
readonly testId?: string;
|
|
38
38
|
}
|
|
39
|
+
/** The class the spec line's own box carries. */
|
|
40
|
+
export declare const CARD_SPEC_LINE_CLASS = "stapel-listing-spec-line";
|
|
41
|
+
/** The class the spec line's TEXT carries — see {@link cardSpecLineCss}. */
|
|
42
|
+
export declare const CARD_SPEC_TEXT_CLASS = "stapel-listing-spec-line-text";
|
|
43
|
+
/** The `href` the hoisted spec-line stylesheet is deduplicated by. */
|
|
44
|
+
export declare const CARD_SPEC_STYLE_HREF = "stapel-listings-card-spec-line";
|
|
45
|
+
/**
|
|
46
|
+
* THE SPEC LINE TRUNCATES, AND THE THING THAT TRUNCATES IS THE THING THAT
|
|
47
|
+
* HOLDS THE TEXT.
|
|
48
|
+
*
|
|
49
|
+
* `<Typography.Text ellipsis>` writes `overflow:hidden`, `white-space:nowrap`
|
|
50
|
+
* and `text-overflow:ellipsis` on ITSELF, and the text inside it is a separate
|
|
51
|
+
* `<span>` — the badge row's own element. An inline span lays out at its
|
|
52
|
+
* natural width regardless of what its parent clips, so the line was drawn
|
|
53
|
+
* correctly (the overflow is hidden) over a box that is wrong: the stand's
|
|
54
|
+
* tidiness probe measured `listings-card-specs-text` 57px wider than the
|
|
55
|
+
* element it sits in. A box that reports a width nothing on screen has is a
|
|
56
|
+
* defect whether or not a pixel of it is visible — it is what a container
|
|
57
|
+
* measuring the card, a sticky-header calculation or the next layout rule
|
|
58
|
+
* reads.
|
|
59
|
+
*
|
|
60
|
+
* So the truncation moves ONTO the span. The line becomes a flex container
|
|
61
|
+
* and the span a flex child with `min-inline-size: 0`, which is the
|
|
62
|
+
* declaration that lets a flex child shrink below its content at all — without
|
|
63
|
+
* it `min-width:auto` keeps the box at the text's natural width and every
|
|
64
|
+
* other rule here is decoration.
|
|
65
|
+
*
|
|
66
|
+
* A sheet rather than inline styles because the span is rendered by
|
|
67
|
+
* `<CardBadges>` and the box by antd, and an inline style cannot reach a
|
|
68
|
+
* child.
|
|
69
|
+
*/
|
|
70
|
+
export declare function cardSpecLineCss(): string;
|
|
39
71
|
export declare function CardBadges(props: CardBadgesProps): ReactElement | null;
|
|
40
72
|
/** The spec line under a card's title, wrapped in the secondary, truncating
|
|
41
73
|
* text every surface already draws it in. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardBadges.d.ts","sourceRoot":"","sources":["../../src/default/CardBadges.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C;8EAC0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"CardBadges.d.ts","sourceRoot":"","sources":["../../src/default/CardBadges.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C;8EAC0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAC/D,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,kCAAkC,CAAC;AACpE,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,GAAG,IAAI,CA2CtE;AAED;6CAC6C;AAC7C,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GAAG,YAAY,GAAG,IAAI,CAyBtB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Flex, Tag, Typography } from "antd";
|
|
3
3
|
import { SkinTheme } from "@stapel/tokens-antd/skin";
|
|
4
4
|
import { useI18n } from "@stapel/core";
|
|
@@ -8,6 +8,44 @@ import { cardBadgeTexts, hasCardBadgeContract } from "../model/cardBadges.js";
|
|
|
8
8
|
import { featuresDtoFromDaoList, featuresFromDaoList } from "../model/features.js";
|
|
9
9
|
/** The separator of a spec line — the one every classified uses. */
|
|
10
10
|
const LINE_SEPARATOR = " · ";
|
|
11
|
+
/** The class the spec line's own box carries. */
|
|
12
|
+
export const CARD_SPEC_LINE_CLASS = "stapel-listing-spec-line";
|
|
13
|
+
/** The class the spec line's TEXT carries — see {@link cardSpecLineCss}. */
|
|
14
|
+
export const CARD_SPEC_TEXT_CLASS = "stapel-listing-spec-line-text";
|
|
15
|
+
/** The `href` the hoisted spec-line stylesheet is deduplicated by. */
|
|
16
|
+
export const CARD_SPEC_STYLE_HREF = "stapel-listings-card-spec-line";
|
|
17
|
+
/**
|
|
18
|
+
* THE SPEC LINE TRUNCATES, AND THE THING THAT TRUNCATES IS THE THING THAT
|
|
19
|
+
* HOLDS THE TEXT.
|
|
20
|
+
*
|
|
21
|
+
* `<Typography.Text ellipsis>` writes `overflow:hidden`, `white-space:nowrap`
|
|
22
|
+
* and `text-overflow:ellipsis` on ITSELF, and the text inside it is a separate
|
|
23
|
+
* `<span>` — the badge row's own element. An inline span lays out at its
|
|
24
|
+
* natural width regardless of what its parent clips, so the line was drawn
|
|
25
|
+
* correctly (the overflow is hidden) over a box that is wrong: the stand's
|
|
26
|
+
* tidiness probe measured `listings-card-specs-text` 57px wider than the
|
|
27
|
+
* element it sits in. A box that reports a width nothing on screen has is a
|
|
28
|
+
* defect whether or not a pixel of it is visible — it is what a container
|
|
29
|
+
* measuring the card, a sticky-header calculation or the next layout rule
|
|
30
|
+
* reads.
|
|
31
|
+
*
|
|
32
|
+
* So the truncation moves ONTO the span. The line becomes a flex container
|
|
33
|
+
* and the span a flex child with `min-inline-size: 0`, which is the
|
|
34
|
+
* declaration that lets a flex child shrink below its content at all — without
|
|
35
|
+
* it `min-width:auto` keeps the box at the text's natural width and every
|
|
36
|
+
* other rule here is decoration.
|
|
37
|
+
*
|
|
38
|
+
* A sheet rather than inline styles because the span is rendered by
|
|
39
|
+
* `<CardBadges>` and the box by antd, and an inline style cannot reach a
|
|
40
|
+
* child.
|
|
41
|
+
*/
|
|
42
|
+
export function cardSpecLineCss() {
|
|
43
|
+
return [
|
|
44
|
+
`.${CARD_SPEC_LINE_CLASS}{display:flex;min-inline-size:0}`,
|
|
45
|
+
`.${CARD_SPEC_TEXT_CLASS}{flex:1 1 auto;min-inline-size:0;` +
|
|
46
|
+
`overflow:hidden;white-space:nowrap;text-overflow:ellipsis}`,
|
|
47
|
+
].join("");
|
|
48
|
+
}
|
|
11
49
|
export function CardBadges(props) {
|
|
12
50
|
const { locale } = useI18n();
|
|
13
51
|
const rows = props.rows;
|
|
@@ -20,7 +58,7 @@ export function CardBadges(props) {
|
|
|
20
58
|
if (printed.length === 0)
|
|
21
59
|
return null;
|
|
22
60
|
if (props.variant === "line") {
|
|
23
|
-
return (_jsx("span", { "data-testid": props.testId ?? "listings-card-badges", children: printed.map((one) => one.text).join(LINE_SEPARATOR) }));
|
|
61
|
+
return (_jsx("span", { className: CARD_SPEC_TEXT_CLASS, "data-testid": props.testId ?? "listings-card-badges", children: printed.map((one) => one.text).join(LINE_SEPARATOR) }));
|
|
24
62
|
}
|
|
25
63
|
return (_jsx(SkinTheme, { surface: "bare", children: _jsx(Flex, { gap: spacing[1], wrap: true, "data-testid": props.testId ?? "listings-card-badges", children: printed.map((one) => (_jsx(Tag, { "data-testid": `listings-card-badge-${one.slug}`, children: one.text }, one.slug))) }) }));
|
|
26
64
|
}
|
|
@@ -35,6 +73,6 @@ export function CardBadges(props) {
|
|
|
35
73
|
export function CardSpecLine(props) {
|
|
36
74
|
if (props.rows.length === 0)
|
|
37
75
|
return null;
|
|
38
|
-
return (_jsx(Typography.Text, { type: "secondary", ellipsis: true, "data-testid": props.testId, children: _jsx(CardBadges, { rows: props.rows, copy: props.copy, variant: "line", testId: `${props.testId}-text` }) }));
|
|
76
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { href: CARD_SPEC_STYLE_HREF, precedence: "default", children: cardSpecLineCss() }), _jsx(Typography.Text, { type: "secondary", ellipsis: true, className: CARD_SPEC_LINE_CLASS, "data-testid": props.testId, children: _jsx(CardBadges, { rows: props.rows, copy: props.copy, variant: "line", testId: `${props.testId}-text` }) })] }));
|
|
39
77
|
}
|
|
40
78
|
//# sourceMappingURL=CardBadges.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardBadges.js","sourceRoot":"","sources":["../../src/default/CardBadges.tsx"],"names":[],"mappings":";AAsBA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAGjE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAkBnF,oEAAoE;AACpE,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAA+B,CAAC;IAEnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,CACL,
|
|
1
|
+
{"version":3,"file":"CardBadges.js","sourceRoot":"","sources":["../../src/default/CardBadges.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { ReactElement, ReactNode } from "react";
|
|
2
|
-
import type { SignInCta } from "@stapel/core";
|
|
2
|
+
import type { LinkComponent, SignInCta } from "@stapel/core";
|
|
3
3
|
import type { ShareChannel, SharePreference } from "../headless/Share.js";
|
|
4
4
|
import type { ListingActionsConfig } from "./ListingActions.js";
|
|
5
5
|
import type { ListingGalleryLayout } from "./detailGallery.js";
|
|
6
|
+
import type { ListingRelatedContext } from "./ListingRelated.js";
|
|
7
|
+
import type { ListingCard as ListingCardData } from "../api/types.js";
|
|
6
8
|
import type { CategoryFeaturesProp, ThemeModeProp } from "./types.js";
|
|
7
9
|
/** The reading measure of the page body. A detail page is prose plus a spec
|
|
8
10
|
* table; past this it stops being one column and starts being a stripe across
|
|
@@ -178,13 +180,21 @@ export interface ListingDetailPaneProps extends ThemeModeProp, CategoryFeaturesP
|
|
|
178
180
|
* - `"bar"` — the condensed top bar the host draws through
|
|
179
181
|
* {@link renderActionsBar}. Only meaningful in a LIST beside one of the
|
|
180
182
|
* three above, and only with that render prop: it names a second place
|
|
181
|
-
* the one cluster may travel to, never a home of its own
|
|
183
|
+
* the one cluster may travel to, never a home of its own;
|
|
184
|
+
* - `"condensed-top"` — the same second place, drawn by the PANE: a fixed
|
|
185
|
+
* strip carrying {@link onBack}, the title on one line and the cluster,
|
|
186
|
+
* on screen exactly while the title is off it. Also a loan and never a
|
|
187
|
+
* home. See `condensedBar.ts` for what it is and why the pane draws it
|
|
188
|
+
* rather than leaving every container to write the same four things.
|
|
182
189
|
*
|
|
183
|
-
* A LIST is how a host says "both": `["header", "
|
|
184
|
-
* beside the title and lends it to the bar for as long as the bar is
|
|
185
|
-
* screen. Exactly one home placement is honoured — the first
|
|
186
|
-
*
|
|
187
|
-
* this closes rather than the feature it adds.
|
|
190
|
+
* A LIST is how a host says "both": `["header", "condensed-top"]` keeps the
|
|
191
|
+
* cluster beside the title and lends it to the bar for as long as the bar is
|
|
192
|
+
* on screen. Exactly one home placement is honoured — the first entry that
|
|
193
|
+
* is neither loan — because two homes would need two instances, which is the
|
|
194
|
+
* defect this closes rather than the feature it adds.
|
|
195
|
+
*
|
|
196
|
+
* Asking for BOTH loans is a host that said something specific and a pair
|
|
197
|
+
* that has a default: `renderActionsBar` wins, and the pane draws nothing.
|
|
188
198
|
*/
|
|
189
199
|
readonly actionsPlacement?: ListingActionsPlacement | readonly ListingActionsPlacement[];
|
|
190
200
|
/**
|
|
@@ -217,6 +227,94 @@ export interface ListingDetailPaneProps extends ThemeModeProp, CategoryFeaturesP
|
|
|
217
227
|
* pane's own single are all what this prop exists to end.
|
|
218
228
|
*/
|
|
219
229
|
readonly renderActionsBar?: (cluster: ReactNode) => ReactNode;
|
|
230
|
+
/**
|
|
231
|
+
* LEAVE THIS PAGE — the back arrow of the pane's own condensed bar.
|
|
232
|
+
*
|
|
233
|
+
* A callback and not an `href`, for the reason the cards' open arm states:
|
|
234
|
+
* "back" is the HISTORY's, not an address, and a pair that called
|
|
235
|
+
* `history.back()` itself would move a router it does not own. Absent, the
|
|
236
|
+
* bar draws no arrow at all — a listing opened in a new tab has nowhere to
|
|
237
|
+
* go back to, and an arrow that reloads the home page is worse than none.
|
|
238
|
+
*
|
|
239
|
+
* Only read with `"condensed-top"` in {@link actionsPlacement}.
|
|
240
|
+
*/
|
|
241
|
+
readonly onBack?: () => void;
|
|
242
|
+
/**
|
|
243
|
+
* THE FOUR QUESTIONS EVERY BUYER ASKS, as chips above the contact control.
|
|
244
|
+
*
|
|
245
|
+
* The reference classified puts a "ask the seller" block on every listing —
|
|
246
|
+
* four canned questions and a free-text box — and it is the one thing on
|
|
247
|
+
* that page that turns a reader into a conversation (§16, all four
|
|
248
|
+
* comparisons). This pair ships the four in its own three locales; a host
|
|
249
|
+
* with a category that wants different ones passes its own, and `[]`
|
|
250
|
+
* switches the block off.
|
|
251
|
+
*
|
|
252
|
+
* At most four are drawn. A fifth is not a longer row, it is a wrapped
|
|
253
|
+
* second row of chips above the primary action.
|
|
254
|
+
*
|
|
255
|
+
* Requires {@link onQuickQuestion} — see there for why the pair cannot wire
|
|
256
|
+
* the press itself.
|
|
257
|
+
*/
|
|
258
|
+
readonly quickQuestions?: readonly string[];
|
|
259
|
+
/**
|
|
260
|
+
* WHAT A PRESSED CHIP DOES, and why it is the host's.
|
|
261
|
+
*
|
|
262
|
+
* The chip's whole job is to put its text in the composer of the thread with
|
|
263
|
+
* this seller, and neither half of that is this pair's: the thread belongs to
|
|
264
|
+
* `@stapel/chat-react` (it arrives here as `contactSlot`, because L2 pairs do
|
|
265
|
+
* not import each other), and as of chat-react 0.12.1 its own door takes no
|
|
266
|
+
* initial message — `<StartDirectChat>` takes `sellerId` and a subject,
|
|
267
|
+
* `useStartDirectChat` posts `{userId, subject}`, and `<MessageComposer>`
|
|
268
|
+
* opens on an empty string with no seed. So there is nothing for this pane to
|
|
269
|
+
* hand a text to.
|
|
270
|
+
*
|
|
271
|
+
* The honest seam is therefore the callback: the pane draws the chips and
|
|
272
|
+
* reports the press, the container opens the thread and seeds the composer
|
|
273
|
+
* the way it already navigates to one. Without this prop the block is not
|
|
274
|
+
* drawn — a chip that does nothing is worse than no chip.
|
|
275
|
+
*/
|
|
276
|
+
readonly onQuickQuestion?: (text: string) => void;
|
|
277
|
+
/**
|
|
278
|
+
* MORE LIKE THIS ONE — rows the host fetched from search
|
|
279
|
+
* (`category=` plus the main axes), drawn as a strip under the description.
|
|
280
|
+
*
|
|
281
|
+
* Empty or absent: no section at all. See `<ListingRelatedStrip>` for why
|
|
282
|
+
* the rows arrive rather than being read here.
|
|
283
|
+
*/
|
|
284
|
+
readonly similar?: readonly ListingCardData[];
|
|
285
|
+
/** More from the same seller — the `owner=` search, same contract as
|
|
286
|
+
* {@link similar}. */
|
|
287
|
+
readonly fromSeller?: readonly ListingCardData[];
|
|
288
|
+
/** Where the "show all" link of each strip goes — the search the strip is a
|
|
289
|
+
* sample of. Absent: the strip has no link. */
|
|
290
|
+
readonly similarHref?: string;
|
|
291
|
+
readonly fromSellerHref?: string;
|
|
292
|
+
/**
|
|
293
|
+
* The whole "more like this" section, built by the host — handed everything
|
|
294
|
+
* the pane knows about this listing. Overrides {@link similar}: a host with
|
|
295
|
+
* a renderer has already decided what the section is.
|
|
296
|
+
*/
|
|
297
|
+
readonly renderSimilar?: (context: ListingRelatedContext) => ReactNode;
|
|
298
|
+
/** The same, for the seller's other listings. Overrides {@link fromSeller}. */
|
|
299
|
+
readonly renderFromSeller?: (context: ListingRelatedContext) => ReactNode;
|
|
300
|
+
/** Where one card of either strip leads. Absent, the cards are inert. */
|
|
301
|
+
readonly listingHref?: (id: number) => string;
|
|
302
|
+
/** The host's `<Link>`, for those cards and the two "show all" links. */
|
|
303
|
+
readonly linkComponent?: LinkComponent;
|
|
304
|
+
/**
|
|
305
|
+
* HOW MANY SPEC ROWS STAND BEFORE THE FOLD — handed to
|
|
306
|
+
* `<ListingSpecList limit>`, which is where the argument for a fold and the
|
|
307
|
+
* rule about when it is worth one are written.
|
|
308
|
+
*
|
|
309
|
+
* Default: no fold, which is every existing mount unchanged. `10` is the
|
|
310
|
+
* phone answer.
|
|
311
|
+
*
|
|
312
|
+
* It does NOT change which rows exist. A live read was measured against the
|
|
313
|
+
* reference here (§16 comparison 1) and the shortfall was in the DATA, not
|
|
314
|
+
* in this component: the pane draws every stored row the build can key, and
|
|
315
|
+
* says how many it could not (`listings-detail-unreadable`).
|
|
316
|
+
*/
|
|
317
|
+
readonly characteristicsLimit?: number;
|
|
220
318
|
/**
|
|
221
319
|
* IS THE TITLE STILL IN THE FOLD?
|
|
222
320
|
*
|
|
@@ -341,6 +439,15 @@ export interface ListingDetailPaneProps extends ThemeModeProp, CategoryFeaturesP
|
|
|
341
439
|
* Where the reader's cluster may sit. Three homes and one loan — see
|
|
342
440
|
* {@link ListingDetailPaneProps.actionsPlacement}.
|
|
343
441
|
*/
|
|
344
|
-
export type ListingActionsPlacement = "header" | "gallery" | "buy-box" | "bar";
|
|
442
|
+
export type ListingActionsPlacement = "header" | "gallery" | "buy-box" | "bar" | "condensed-top";
|
|
443
|
+
/**
|
|
444
|
+
* How many canned questions the page draws, whoever supplies them.
|
|
445
|
+
*
|
|
446
|
+
* Four is the reference's own count and it is not arbitrary: the chips stand
|
|
447
|
+
* between the price and the one primary action on the page, and a fifth does
|
|
448
|
+
* not lengthen the row on a 390px phone — it wraps, and pushes "message the
|
|
449
|
+
* seller" a line further down.
|
|
450
|
+
*/
|
|
451
|
+
export declare const QUICK_QUESTIONS_MAX = 4;
|
|
345
452
|
export declare function ListingDetailPane(props: ListingDetailPaneProps): ReactElement;
|
|
346
453
|
//# 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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"}
|