@stapel/listings-react 0.19.0 → 0.21.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 +30 -0
- package/dist/default/GateReasonPopover.d.ts.map +1 -1
- package/dist/default/GateReasonPopover.js +71 -26
- package/dist/default/GateReasonPopover.js.map +1 -1
- package/dist/default/ListingCard.d.ts +11 -0
- package/dist/default/ListingCard.d.ts.map +1 -1
- package/dist/default/ListingCard.js +34 -4
- package/dist/default/ListingCard.js.map +1 -1
- package/dist/default/ListingDetailPane.d.ts.map +1 -1
- package/dist/default/ListingDetailPane.js +7 -3
- package/dist/default/ListingDetailPane.js.map +1 -1
- package/dist/default/ListingPhoto.d.ts +40 -0
- package/dist/default/ListingPhoto.d.ts.map +1 -1
- package/dist/default/ListingPhoto.js +53 -6
- package/dist/default/ListingPhoto.js.map +1 -1
- package/llms.txt +2 -2
- package/manifest.json +2 -2
- package/nav-manifest.json +1 -1
- package/package.json +3 -3
- package/src/analytics/generated/events.json +1 -1
- package/src/default/GateReasonPopover.tsx +77 -29
- package/src/default/ListingCard.tsx +44 -9
- package/src/default/ListingDetailPane.tsx +40 -15
- package/src/default/ListingPhoto.tsx +102 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# @stapel/listings-react
|
|
2
2
|
|
|
3
|
+
## 0.21.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8279cb6: **The picture opens the listing, and the card looks like something you can open.**
|
|
8
|
+
|
|
9
|
+
Measured on a live 1440px grid: `<ListingCard>`'s anchor covered only the 267×104 text block. The 267×200 photograph — the largest and most obvious target on the card — sat outside it, with `cursor: auto`, and clicking it left the visitor exactly where they were. The card had no hover state of any kind: `box-shadow: none`, `transform: none`, the border unchanged.
|
|
10
|
+
|
|
11
|
+
- `<ListingPhotoStrip href linkComponent>` links each SLIDE. The strip itself stays a sibling of the reading anchor — a swipeable scroller is a control and a link may not contain one — but the picture inside it is now part of the card's target. The slide links are `aria-hidden` + `tabIndex={-1}`, so the card is still one tab stop with one accessible name: a second way to reach a destination, not a second destination.
|
|
12
|
+
- `<ListingCard>` passes its own `href` through and carries `CARD_HOVER_CLASS`, which raises the theme's own `boxShadowSecondary` and the focus colour on the border. antd's `hoverable` was not used: it hard-codes one shadow, cannot state a border, and cannot stand still for somebody who asked their system for less motion — this rule does, under `prefers-reduced-motion`.
|
|
13
|
+
- A surface that passes no `href` to the strip renders exactly as before. `<ListingSerpCard>` passes none: a horizontal swipe is a real gesture on a phone, and it is the gesture that rule was written for.
|
|
14
|
+
|
|
15
|
+
## 0.20.0
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- 9c8ee74: listings: the gated heart's reason survives the gesture that opened it, and the view count leaves the specs table
|
|
20
|
+
|
|
21
|
+
**The anonymous heart, seventh pass, and the first one with a timeline.** Six walker passes read "tap the heart, nothing happens". The disclosure was there and correct — a popover carrying "Sign in to do this" and the door — and it was, in fact, opening on the tap. The instrumented run on the deployed build says so to the millisecond: `click` at +0 ms, `ant-popover-hidden` dropped at +7 ms, the finger lifts and the emulated hover ends at +10 ms, antd's `mouseLeaveDelay` expires at +110 ms, the leave motion finishes and the overlay is hidden again at +260 ms. A quarter-second flash on a phone is not a disclosure.
|
|
22
|
+
|
|
23
|
+
The previous fix made activation MONOTONIC for the duration of the click's own dispatch — a flag set in the capture phase and dropped one microtask later. That is the right rule against the click's own toggle, which is the failure a synthetic click can reproduce, and it is blind to this one: the closer is not part of the gesture, it is a timer a fifth of a second behind it.
|
|
24
|
+
|
|
25
|
+
So an activated disclosure now PINS. Once a click, a tap, Enter or Space has opened it, hover-out, blur and the trigger's own toggle may no longer close it; only a dismissal does, and because refusing antd's close takes those away, the component listens for them itself — a pointer down outside both the control and the overlay, or `Escape`. A pointer down INSIDE the overlay does not dismiss, or the sign-in link would be gone between the press and the click that follows it. A hover that was never clicked keeps its old, unpinned behaviour, so a cursor crossing a grid of twenty-four cards does not leave a trail of open popovers behind it.
|
|
26
|
+
|
|
27
|
+
Five tests, and the first of them fails on the previous implementation with the deployed symptom.
|
|
28
|
+
|
|
29
|
+
**The view count is a fact about the page, not a property of the goods.** It rendered as a `Descriptions.Item` in the same table as the location and the stock — on the measured phone page that put "Views 6" between the colour attribute and "Where it is", roughly 1600px down, read as a characteristic of the phone (walker D106). It now reads on a meta line under the title and above the price, where a reader looks for how much company they have. `data-testid="listings-detail-views"` still holds the bare number; the line around it is `listings-detail-meta`.
|
|
30
|
+
|
|
31
|
+
Two consequences worth stating. The specs table renders nothing at all when the listing carries neither stock nor a location — the view count used to hide that empty table by almost always being present. And there is still no favourite COUNT anywhere, because the wire has none: `is_favorited` is a per-reader boolean and the schema carries no aggregate, which the existing contract test pins under all five spellings.
|
|
32
|
+
|
|
3
33
|
## 0.19.0
|
|
4
34
|
|
|
5
35
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GateReasonPopover.d.ts","sourceRoot":"","sources":["../../src/default/GateReasonPopover.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GateReasonPopover.d.ts","sourceRoot":"","sources":["../../src/default/GateReasonPopover.tsx"],"names":[],"mappings":"AAqEA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C;0DAC0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;oDACgD;IAChD,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;6EACyE;IACzE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B;kFAC8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,wBAAwB,KAAK,SAAS,CAAC;CACrE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,CAqG7E"}
|
|
@@ -27,7 +27,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
27
27
|
* screen (see `ListingCardBlockedReason`). The rule's disables below are the
|
|
28
28
|
* documented decision §2.4 asks for, not a hole.
|
|
29
29
|
*
|
|
30
|
-
* ── Why the disclosure is CONTROLLED
|
|
30
|
+
* ── Why the disclosure is CONTROLLED, and why activation PINS it ──────────
|
|
31
31
|
*
|
|
32
32
|
* An uncontrolled popover triggered by hover AND click treats the click as a
|
|
33
33
|
* TOGGLE, so the natural pointer gesture — rest on the control, then press it
|
|
@@ -36,24 +36,38 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
36
36
|
* the one control that was supposed to explain itself and watched it go
|
|
37
37
|
* blank. Reproduced in jsdom and gated by `test/favoriteGesture.test.tsx`.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* click closes what the hover opened. The suite was green throughout because
|
|
44
|
-
* every existing test fired `click` alone — a synthetic click carries no
|
|
45
|
-
* hover in front of it, so it exercised the one ordering that worked.
|
|
39
|
+
* So `open` is this component's own state. The first version of that made
|
|
40
|
+
* activation MONOTONIC for the duration of the click's own dispatch — a flag
|
|
41
|
+
* set in the capture phase and dropped a microtask later — and it closed the
|
|
42
|
+
* toggle, which was the half of the problem a synthetic click can show.
|
|
46
43
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
44
|
+
* It was not the half a THUMB meets, and the deployed measurement (walker
|
|
45
|
+
* D72, pass 7, the whole timeline in `logs-fp8/fp8-d72-diag3.json`) is
|
|
46
|
+
* unambiguous about which half that is. A real tap DOES open this: the
|
|
47
|
+
* overlay loses `ant-popover-hidden` 7 ms after `click`. Then the emulated
|
|
48
|
+
* hover the tap carried ENDS — a finger that has lifted is hovering nothing —
|
|
49
|
+
* `mouseleave` arrives ~10 ms later, antd's `mouseLeaveDelay` runs its 0.1 s,
|
|
50
|
+
* the leave motion runs, and the overlay is hidden again ~260 ms after it
|
|
51
|
+
* appeared. A quarter-second flash on a phone is indistinguishable from a
|
|
52
|
+
* control that did nothing, which is exactly how six passes read it. The
|
|
53
|
+
* microtask flag could not see this: the closer is not the click's toggle,
|
|
54
|
+
* it is a TIMER two hundred milliseconds behind the gesture.
|
|
55
|
+
*
|
|
56
|
+
* A disclosure that a person deliberately opened therefore PINS: once
|
|
57
|
+
* activated it stays open until it is dismissed, and hover-out, blur and the
|
|
58
|
+
* trigger's own toggle may no longer close it. Dismissal is the two gestures
|
|
59
|
+
* that mean "I am done reading" — a pointer down outside the control and
|
|
60
|
+
* outside the overlay, or `Escape` — and this component listens for both
|
|
61
|
+
* itself, because refusing antd's close is what takes them away.
|
|
62
|
+
*
|
|
63
|
+
* Hover keeps its old, unpinned behaviour: a cursor that rests on the control
|
|
64
|
+
* opens it and a cursor that leaves closes it, with no click involved.
|
|
51
65
|
*
|
|
52
66
|
* Deliberately NOT exported from `src/default/index.ts`: it is how this
|
|
53
67
|
* pair's own gated hearts speak, not a control a host composes with — the
|
|
54
68
|
* same standing `favorite.tsx` has.
|
|
55
69
|
*/
|
|
56
|
-
import { useCallback, useId, useRef, useState } from "react";
|
|
70
|
+
import { useCallback, useEffect, useId, useRef, useState } from "react";
|
|
57
71
|
import { Flex, Typography } from "antd";
|
|
58
72
|
// eslint-disable-next-line stapel/no-tooltip-in-skin -- interaction disclosure, not a hover: opens on click/tap and focus too, anchored to a non-disabled control, with the reason kept in the a11y tree via aria-describedby (see this file's header)
|
|
59
73
|
import { Popover } from "antd";
|
|
@@ -63,26 +77,57 @@ import { SignInLink } from "./SignInLink.js";
|
|
|
63
77
|
export function GateReasonPopover(props) {
|
|
64
78
|
const reasonId = useId();
|
|
65
79
|
const [open, setOpen] = useState(false);
|
|
66
|
-
// Set
|
|
67
|
-
//
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
80
|
+
// Set by an ACTIVATION and cleared only by a dismissal. While it is set,
|
|
81
|
+
// every close antd asks for — the click's own toggle, the hover-out timer,
|
|
82
|
+
// a blur — is refused; see the file header.
|
|
83
|
+
const pinned = useRef(false);
|
|
84
|
+
// The two regions a dismissing gesture must NOT land in: the control itself
|
|
85
|
+
// (pressing it again restates the refusal) and the overlay (the sign-in
|
|
86
|
+
// door lives in there, and closing on its own pointerdown would take the
|
|
87
|
+
// link away before the click that follows it).
|
|
88
|
+
const anchorRef = useRef(null);
|
|
89
|
+
const overlayRef = useRef(null);
|
|
90
|
+
const dismiss = useCallback(() => {
|
|
91
|
+
pinned.current = false;
|
|
92
|
+
setOpen(false);
|
|
93
|
+
}, []);
|
|
71
94
|
const handleOpenChange = useCallback((next) => {
|
|
72
|
-
if (!next &&
|
|
95
|
+
if (!next && pinned.current)
|
|
73
96
|
return;
|
|
74
97
|
setOpen(next);
|
|
75
98
|
}, []);
|
|
76
99
|
const activate = useCallback(() => {
|
|
77
|
-
|
|
100
|
+
pinned.current = true;
|
|
78
101
|
setOpen(true);
|
|
79
|
-
// A microtask runs after the whole event dispatch, so the flag covers
|
|
80
|
-
// exactly this gesture and no later hover-out.
|
|
81
|
-
queueMicrotask(() => {
|
|
82
|
-
activating.current = false;
|
|
83
|
-
});
|
|
84
102
|
}, []);
|
|
85
|
-
|
|
103
|
+
// Antd closes an unpinned popover on an outside click of its own; a pinned
|
|
104
|
+
// one has to be given those gestures back, or it would be a panel with no
|
|
105
|
+
// way out on the one device that most needs the pin.
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (!open)
|
|
108
|
+
return undefined;
|
|
109
|
+
const doc = anchorRef.current?.ownerDocument ?? document;
|
|
110
|
+
const outside = (target) => target instanceof Node &&
|
|
111
|
+
anchorRef.current?.contains(target) !== true &&
|
|
112
|
+
overlayRef.current?.contains(target) !== true;
|
|
113
|
+
const onPointerDown = (event) => {
|
|
114
|
+
if (outside(event.target))
|
|
115
|
+
dismiss();
|
|
116
|
+
};
|
|
117
|
+
const onKeyDown = (event) => {
|
|
118
|
+
if (event.key === "Escape")
|
|
119
|
+
dismiss();
|
|
120
|
+
};
|
|
121
|
+
// Capture, so a handler that stops propagation on its own container
|
|
122
|
+
// cannot leave this stuck open.
|
|
123
|
+
doc.addEventListener("pointerdown", onPointerDown, true);
|
|
124
|
+
doc.addEventListener("keydown", onKeyDown, true);
|
|
125
|
+
return () => {
|
|
126
|
+
doc.removeEventListener("pointerdown", onPointerDown, true);
|
|
127
|
+
doc.removeEventListener("keydown", onKeyDown, true);
|
|
128
|
+
};
|
|
129
|
+
}, [open, dismiss]);
|
|
130
|
+
return (_jsxs(_Fragment, { children: [_jsx("span", { id: reasonId, style: visuallyHidden, children: props.reason }), _jsx(Popover, { trigger: ["hover", "focus", "click"], open: open, onOpenChange: handleOpenChange, content: _jsx("div", { ref: overlayRef, children: _jsxs(Flex, { vertical: true, gap: spacing[1], "data-testid": props.testId, children: [_jsx(Typography.Text, { children: props.reason }), _jsx(SignInLink, { cta: props.cta, testId: props.signInTestId })] }) }), children: _jsx("div", { ref: anchorRef, onClickCapture: activate, onKeyDownCapture: (event) => {
|
|
86
131
|
if (event.key === "Enter" || event.key === " ")
|
|
87
132
|
activate();
|
|
88
133
|
}, children: props.children({ "aria-describedby": reasonId }) }) })] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GateReasonPopover.js","sourceRoot":"","sources":["../../src/default/GateReasonPopover.tsx"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"GateReasonPopover.js","sourceRoot":"","sources":["../../src/default/GateReasonPopover.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACxC,uPAAuP;AACvP,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAwB7C,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC7D,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,yEAAyE;IACzE,2EAA2E;IAC3E,4CAA4C;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,4EAA4E;IAC5E,wEAAwE;IACxE,yEAAyE;IACzE,+CAA+C;IAC/C,MAAM,SAAS,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEvD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAS,EAAE;QACrC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,CAAC,IAAa,EAAQ,EAAE;QAC3D,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAS,EAAE;QACtC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,2EAA2E;IAC3E,0EAA0E;IAC1E,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,IAAI,QAAQ,CAAC;QACzD,MAAM,OAAO,GAAG,CAAC,MAA0B,EAAW,EAAE,CACtD,MAAM,YAAY,IAAI;YACtB,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI;YAC5C,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;QAChD,MAAM,aAAa,GAAG,CAAC,KAAY,EAAQ,EAAE;YAC3C,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,CAAC;QACvC,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAQ,EAAE;YAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAC;QACxC,CAAC,CAAC;QACF,oEAAoE;QACpE,gCAAgC;QAChC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QACzD,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACjD,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YAC5D,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,OAAO,CACL,8BAIE,eAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,YACtC,KAAK,CAAC,MAAM,GACR,EAEP,KAAC,OAAO,IACN,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACpC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,gBAAgB,EAC9B,OAAO,EACL,cAAK,GAAG,EAAE,UAAU,YAClB,MAAC,IAAI,IAAC,QAAQ,QAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAe,KAAK,CAAC,MAAM,aACvD,KAAC,UAAU,CAAC,IAAI,cAAE,KAAK,CAAC,MAAM,GAAmB,EACjD,KAAC,UAAU,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,GAAI,IACrD,GACH,YAeR,cACE,GAAG,EAAE,SAAS,EACd,cAAc,EAAE,QAAQ,EACxB,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;wBAC1B,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG;4BAAE,QAAQ,EAAE,CAAC;oBAC7D,CAAC,YAEA,KAAK,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,GAC7C,GACE,IACT,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -204,6 +204,17 @@ export declare const CARD_BLEED_CLASS = "stapel-listing-card-bleed";
|
|
|
204
204
|
* the card behind it is old news.
|
|
205
205
|
*/
|
|
206
206
|
export declare const CARD_VIEWED_CLASS = "stapel-listing-card-seen";
|
|
207
|
+
/**
|
|
208
|
+
* The class that makes a card LOOK like a target.
|
|
209
|
+
*
|
|
210
|
+
* Measured on a live 1440px grid before this pack: `box-shadow: none`,
|
|
211
|
+
* `transform: none`, the border unchanged and `cursor: auto` — a card that
|
|
212
|
+
* opens a listing and gives a person no reason to believe it does. antd's own
|
|
213
|
+
* `hoverable` was not used: it hard-codes `boxShadowCard` and nothing else, so
|
|
214
|
+
* it cannot state a border and cannot be told to stand still for somebody who
|
|
215
|
+
* asked their system for less motion.
|
|
216
|
+
*/
|
|
217
|
+
export declare const CARD_HOVER_CLASS = "stapel-listing-card-hoverable";
|
|
207
218
|
/**
|
|
208
219
|
* How far a seen card is dimmed.
|
|
209
220
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingCard.d.ts","sourceRoot":"","sources":["../../src/default/ListingCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyGG;AACH,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKpE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,KAAK,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAatE,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IACE;iEAC6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;8CAE0C;IAC1C,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B,GACD;IACE;wEACoE;IACpE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;CACpC,GACD;IACE;kBACc;IACd,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;CACpC,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE,0EAA0E;AAC1E,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAC9D;;0CAE0C;AAC1C,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,iDAAiD;AACjD,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAC5D,4CAA4C;AAC5C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D;gFACgF;AAChF,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,gCAAgC,CAAC;AAEpE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;wEACwE;AACxE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"ListingCard.d.ts","sourceRoot":"","sources":["../../src/default/ListingCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ import { LISTINGS_I18N_KEYS } from "../i18n/keys.js";
|
|
|
14
14
|
import { GateReasonPopover } from "./GateReasonPopover.js";
|
|
15
15
|
import { HeartIcon } from "./icons.js";
|
|
16
16
|
import { SignInLink } from "./SignInLink.js";
|
|
17
|
-
import { ListingPhotoStrip } from "./ListingPhoto.js";
|
|
17
|
+
import { PHOTO_LINK_CLASS, ListingPhotoStrip } from "./ListingPhoto.js";
|
|
18
18
|
import { ListingPrice } from "./ListingPrice.js";
|
|
19
19
|
/** The class the whole-card target carries, for {@link cardTargetCss}. */
|
|
20
20
|
export const CARD_TARGET_CLASS = "stapel-listing-card-target";
|
|
@@ -43,6 +43,17 @@ export const CARD_BLEED_CLASS = "stapel-listing-card-bleed";
|
|
|
43
43
|
* the card behind it is old news.
|
|
44
44
|
*/
|
|
45
45
|
export const CARD_VIEWED_CLASS = "stapel-listing-card-seen";
|
|
46
|
+
/**
|
|
47
|
+
* The class that makes a card LOOK like a target.
|
|
48
|
+
*
|
|
49
|
+
* Measured on a live 1440px grid before this pack: `box-shadow: none`,
|
|
50
|
+
* `transform: none`, the border unchanged and `cursor: auto` — a card that
|
|
51
|
+
* opens a listing and gives a person no reason to believe it does. antd's own
|
|
52
|
+
* `hoverable` was not used: it hard-codes `boxShadowCard` and nothing else, so
|
|
53
|
+
* it cannot state a border and cannot be told to stand still for somebody who
|
|
54
|
+
* asked their system for less motion.
|
|
55
|
+
*/
|
|
56
|
+
export const CARD_HOVER_CLASS = "stapel-listing-card-hoverable";
|
|
46
57
|
/**
|
|
47
58
|
* How far a seen card is dimmed.
|
|
48
59
|
*
|
|
@@ -98,6 +109,7 @@ export function cardTargetCss() {
|
|
|
98
109
|
const media = `.${CARD_MEDIA_CLASS}`;
|
|
99
110
|
const main = `.${CARD_MAIN_CLASS}`;
|
|
100
111
|
const bleed = `.${CARD_BLEED_CLASS}`;
|
|
112
|
+
const hover = CARD_HOVER_CLASS;
|
|
101
113
|
return [
|
|
102
114
|
`.${CARD_TARGET_CLASS}{display:block;color:inherit;text-decoration:none}`,
|
|
103
115
|
`.${CARD_TARGET_CLASS}:focus-visible{outline:2px solid var(--listing-card-focus);outline-offset:2px}`,
|
|
@@ -120,6 +132,18 @@ export function cardTargetCss() {
|
|
|
120
132
|
`${bleed}{padding-block:var(--listing-card-inset);` +
|
|
121
133
|
`padding-inline-start:var(--listing-card-inset)}` +
|
|
122
134
|
`}`,
|
|
135
|
+
// A linked slide. `display:block` kills the inline baseline gap under the
|
|
136
|
+
// picture, which on a grid of tiles reads as cards of unequal height; the
|
|
137
|
+
// ring is for a browser that focuses an `aria-hidden` anchor anyway.
|
|
138
|
+
`.${PHOTO_LINK_CLASS}{display:block}`,
|
|
139
|
+
`.${PHOTO_LINK_CLASS}:focus-visible{outline:2px solid var(--listing-card-focus);outline-offset:2px}`,
|
|
140
|
+
// The card says it is a target. Two properties, both from the theme's own
|
|
141
|
+
// tokens, and a transition that a person who asked for less motion does
|
|
142
|
+
// not get.
|
|
143
|
+
`.${hover}{transition:box-shadow 160ms ease,border-color 160ms ease}`,
|
|
144
|
+
`.${hover}:hover{box-shadow:var(--listing-card-hover-shadow);` +
|
|
145
|
+
`border-color:var(--listing-card-focus)}`,
|
|
146
|
+
`@media (prefers-reduced-motion:reduce){.${hover}{transition:none}}`,
|
|
123
147
|
// Already seen. The photo and everything inside the card's anchor dim
|
|
124
148
|
// together; the heart is outside the anchor and stays as it was — see
|
|
125
149
|
// CARD_VIEWED_CLASS.
|
|
@@ -238,9 +262,10 @@ export function ListingCard(props) {
|
|
|
238
262
|
listing.location_label.length > 0 ? (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-card-location", children: listing.location_label })) : null] }));
|
|
239
263
|
return (_jsxs(SkinTheme, { surface: "bare", ...(props.mode !== undefined ? { mode: props.mode } : {}), children: [_jsx("style", { href: CARD_TARGET_STYLE_HREF, precedence: "default", children: cardTargetCss() }), _jsx(Card, { size: "small", "data-testid": "listings-card", "data-listing-id": listing.id, ...(status !== undefined
|
|
240
264
|
? { "data-listing-status": status.status }
|
|
241
|
-
: {}), ...(viewed
|
|
242
|
-
? { className: CARD_VIEWED_CLASS, "data-listing-viewed": "true" }
|
|
243
265
|
: {}),
|
|
266
|
+
// `viewed` only when the server actually said so: absent and `null`
|
|
267
|
+
// leave the card's dimming exactly as it renders today.
|
|
268
|
+
className: viewed ? `${CARD_HOVER_CLASS} ${CARD_VIEWED_CLASS}` : CARD_HOVER_CLASS, ...(viewed ? { "data-listing-viewed": "true" } : {}),
|
|
244
269
|
// The body's own padding is zero because the frame fills the card and
|
|
245
270
|
// the photo runs edge to edge when it is stacked: padding here would
|
|
246
271
|
// be a strip of card around a picture. The text block inside the
|
|
@@ -249,7 +274,12 @@ export function ListingCard(props) {
|
|
|
249
274
|
styles: { body: { minWidth: 0, padding: 0 } }, style: {
|
|
250
275
|
["--listing-card-focus"]: token.colorPrimary,
|
|
251
276
|
["--listing-card-inset"]: `${String(token.paddingSM)}px`,
|
|
252
|
-
|
|
277
|
+
// The theme's own elevation, so the lift is the same one every
|
|
278
|
+
// raised surface in the skin uses and it is right in both modes.
|
|
279
|
+
["--listing-card-hover-shadow"]: token.boxShadowSecondary,
|
|
280
|
+
}, children: _jsx("div", { className: CARD_QUERY_CLASS, children: _jsxs("div", { className: `${CARD_FRAME_CLASS} ${CARD_BLEED_CLASS}`, children: [_jsx("div", { className: CARD_MEDIA_CLASS, children: _jsx(ListingPhotoStrip, { images: listing.images ?? [], title: title.length > 0 ? title : String(listing.id), testId: "listings-card-photos", ...(props.href !== undefined ? { href: props.href } : {}), ...(props.href !== undefined && props.linkComponent !== undefined
|
|
281
|
+
? { linkComponent: props.linkComponent }
|
|
282
|
+
: {}) }) }), _jsxs("div", { className: CARD_MAIN_CLASS, children: [_jsx(CardTarget, { ...props, listingId: listing.id, label: targetLabel, children: content }), props.showFavorite === false ? null : (_jsxs("div", { style: {
|
|
253
283
|
paddingInline: token.paddingSM,
|
|
254
284
|
paddingBlockEnd: token.paddingSM,
|
|
255
285
|
}, children: [blockedReason === "popover" &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingCard.js","sourceRoot":"","sources":["../../src/default/ListingCard.tsx"],"names":[],"mappings":";AA2GA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAClE,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAErG,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6EjD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAC9D;;0CAE0C;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACxD,iDAAiD;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAC5D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAC5D,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAC1D;gFACgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,iEAAiE;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEpE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;wEACwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACrC,OAAO;QACL,IAAI,iBAAiB,oDAAoD;QACzE,IAAI,iBAAiB,gFAAgF;QACrG,4DAA4D;QAC5D,0BAA0B;QAC1B,GAAG,CAAC,8BAA8B;QAClC,GAAG,KAAK,wDAAwD;QAChE,GAAG,KAAK,qBAAqB;QAC7B,GAAG,IAAI,sEAAsE;QAC7E,wEAAwE;QACxE,wEAAwE;QACxE,uDAAuD;QACvD,yBAAyB,MAAM,CAAC,oBAAoB,CAAC,MAAM;YACzD,GAAG,KAAK,6CAA6C;YACrD,GAAG,KAAK,aAAa,MAAM,CAAC,sBAAsB,CAAC,KAAK;YACxD,mBAAmB,MAAM,CAAC,sBAAsB,CAAC,KAAK;YACtD,sEAAsE;YACtE,sEAAsE;YACtE,0BAA0B;YAC1B,GAAG,KAAK,2CAA2C;YACnD,iDAAiD;YACjD,GAAG;QACL,sEAAsE;QACtE,sEAAsE;QACtE,qBAAqB;QACrB,IAAI,iBAAiB,KAAK,iBAAiB,GAAG;YAC5C,IAAI,iBAAiB,KAAK,gBAAgB,EAAE;YAC5C,yCAAyC,MAAM,CAAC,sBAAsB,CAAC,IAAI;KAC9E,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED;+CAC+C;AAC/C,MAAM,YAAY,GAAkB;IAClC,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,SAAS;IAChB,cAAc,EAAE,MAAM;CACvB,CAAC;AAEF;;6BAE6B;AAC7B,MAAM,mBAAmB,GAAkB;IACzC,GAAG,YAAY;IACf,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,SAAS;CAClB,CAAC;AAmBF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,UAAU,CACxB,KAUC;IAED,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,oBAAoB,CAAC;IAEpD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC;QACjC,yEAAyE;QACzE,yEAAyE;QACzE,8DAA8D;QAC9D,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAC1B,KAAC,IAAI,IACH,IAAI,EAAE,KAAK,CAAC,IAAI,gBACJ,KAAK,EACjB,SAAS,EAAE,iBAAiB,iBACf,MAAM,oBACJ,MAAM,2BACC,8DAAyD,YAE9E,QAAQ,GACJ,CACR,CAAC,CAAC,CAAC,CACF,YACE,IAAI,EAAE,KAAK,CAAC,IAAI,gBACJ,KAAK,EACjB,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,YAAY,iBACN,MAAM,oBACJ,MAAM,2BACC,8DAAyD,YAE9E,QAAQ,GACP,CACL,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,gBACD,KAAK,EACjB,SAAS,EAAE,iBAAiB,EAC5B,KAAK,EAAE,mBAAmB,iBACb,MAAM,oBACJ,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,GAAG,EAAE;gBACZ,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC,YAEA,QAAQ,GACF,CACV,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,OAAO,CACL,6BAAkB,KAAK,CAAC,UAAU,IAAI,oBAAoB,YAAG,QAAQ,GAAO,CAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,2EAA2E;IAC3E,mEAAmE;IACnE,qEAAqE;IACrE,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IAEvC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5D,qEAAqE;IACrE,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,IAAI,GACR,KAAK,CAAC,gBAAgB,KAAK,SAAS;QAClC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE;QAC9C,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,aAAa,GAAG,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3F,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC;IACpD,wEAAwE;IACxE,gEAAgE;IAChE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,0EAA0E;IAC1E,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,SAAS,GAAG,CAChB,KAAC,SAAS,IACR,MAAM,EAAE,QAAQ,CAAC,SAAS,KACtB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC7D,CACH,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CACrB,QAAQ,CAAC,SAAS;QAChB,CAAC,CAAC,kBAAkB,CAAC,kBAAkB;QACvC,CAAC,CAAC,kBAAkB,CAAC,eAAe,CACvC,CAAC;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,2EAA2E;IAC3E,4EAA4E;IAC5E,eAAe;IACf,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAEhE;;;;;;;;;;OAUG;IACH,MAAM,OAAO,GAAG,CACd,MAAC,IAAI,IACH,QAAQ,QACR,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EACf,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,aAE/C,KAAK,CAAC,KAAK,EAEZ,KAAC,UAAU,CAAC,IAAI,IAAC,MAAM,uBAAa,qBAAqB,YACvD,KAAC,YAAY,IACX,MAAM,EAAE,OAAO,CAAC,KAAK,KACjB,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAC1E,GACc,EAElB,KAAC,UAAU,CAAC,IAAI,IAAC,QAAQ,uBAAa,qBAAqB,YACxD,KAAK,GACU,EAIjB,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACtB,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,EAAC,QAAQ,kBACxC,KAAC,aAAa,IACZ,QAAQ,EAAE,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAChD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CACvB,EACD,MAAM,EAAE,sBAAsB,CAAC,SAAS,CAAC,GACzC,GACc,CACnB,CAAC,CAAC,CAAC,IAAI,EAEP,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1B,KAAC,aAAa,IACZ,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EACnD,MAAM,EAAE,WAAW,GACnB,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,CAAC,cAAc,KAAK,SAAS;gBACrC,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAClC,KAAC,UAAU,CAAC,IAAI,IAAC,IAAI,EAAC,WAAW,iBAAa,wBAAwB,YACnE,OAAO,CAAC,cAAc,GACP,CACnB,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;IAEF,OAAO,CACL,MAAC,SAAS,IACR,OAAO,EAAC,MAAM,KACV,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAE1D,gBAAO,IAAI,EAAE,sBAAsB,EAAE,UAAU,EAAC,SAAS,YACtD,aAAa,EAAE,GACV,EACR,KAAC,IAAI,IACH,IAAI,EAAC,OAAO,iBACA,eAAe,qBACV,OAAO,CAAC,EAAE,KACvB,CAAC,MAAM,KAAK,SAAS;oBACvB,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC1C,CAAC,CAAC,EAAE,CAAC,KAGH,CAAC,MAAM;oBACT,CAAC,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,EAAE;oBACjE,CAAC,CAAC,EAAE,CAAC;gBACP,sEAAsE;gBACtE,qEAAqE;gBACrE,iEAAiE;gBACjE,qEAAqE;gBACrE,yDAAyD;gBACzD,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAC7C,KAAK,EAAE;oBACL,CAAC,sBAAgC,CAAC,EAAE,KAAK,CAAC,YAAY;oBACtD,CAAC,sBAAgC,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;iBACnE,YAED,cAAK,SAAS,EAAE,gBAAgB,YAC9B,eAAK,SAAS,EAAE,GAAG,gBAAgB,IAAI,gBAAgB,EAAE,aAIvD,cAAK,SAAS,EAAE,gBAAgB,YAC9B,KAAC,iBAAiB,IAChB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,EAC5B,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EACpD,MAAM,EAAC,sBAAsB,GAC7B,GACE,EAEN,eAAK,SAAS,EAAE,eAAe,aAC7B,KAAC,UAAU,OAAK,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,YAC7D,OAAO,GACG,EAOZ,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACrC,eACE,KAAK,EAAE;4CACL,aAAa,EAAE,KAAK,CAAC,SAAS;4CAC9B,eAAe,EAAE,KAAK,CAAC,SAAS;yCACjC,aAEA,aAAa,KAAK,SAAS;gDAC5B,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;4CAClC;;;;;uGAK2D;4CAC3D,KAAC,iBAAiB,IAChB,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,GAAG,EAAE,KAAK,CAAC,MAAM,EACjB,MAAM,EAAC,+BAA+B,EACtC,YAAY,EAAC,uBAAuB,YAEnC,CAAC,IAAI,EAAE,EAAE,CAAC,CACT,KAAC,IAAI,IAAC,OAAO,EAAC,UAAU,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAC/C,KAAC,MAAM,8BAED,IAAI,gBACI,aAAa,kBACX,QAAQ,CAAC,SAAS,iBACpB,wBAAwB,oBACpB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,oBAC3B,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,QAAQ,CAAC,MAAM,EACxB,IAAI,EAAE,SAAS,GACf,GACG,CACR,GACiB,CACrB,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,YAAY,IACX,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,MAAM,EAAC,uBAAuB,EAC9B,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAEvB,CAAC,IAAI,EAAE,EAAE,CAAC,CACT,KAAC,IAAI,IAAC,OAAO,EAAC,UAAU,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAC/C,KAAC,MAAM;4DACL,gDAAgD;4DAChD,2CAA2C;4DAC3C,8CAA8C;4DAC9C,6CAA6C;4DAC7C,+BAA+B;mEAC3B,IAAI,gBACI,aAAa,kBACX,QAAQ,CAAC,SAAS,iBACpB,wBAAwB,oBACpB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,oBAC3B,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,QAAQ,CAAC,MAAM,EACxB,IAAI,EAAE,SAAS,GACf,GACG,CACR,GACY,EAQd,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACtE,KAAC,UAAU,CAAC,IAAI,IACd,IAAI,EAAC,WAAW,iBACJ,gCAAgC,YAE5C,KAAC,UAAU,IAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAC,uBAAuB,GAAG,GAChD,CACnB,IACA,CACJ,EAQD,KAAC,UAAU,IACT,MAAM,EAAC,8BAA8B,EACrC,MAAM,EAAE,QAAQ,CAAC,KAAK,EACtB,OAAO,EAAC,QAAQ,GAChB,IACE,CACP,IACG,IACF,GACF,GACD,IACG,CACb,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"ListingCard.js","sourceRoot":"","sources":["../../src/default/ListingCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingDetailPane.d.ts","sourceRoot":"","sources":["../../src/default/ListingDetailPane.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAc9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtE;;oBAEoB;AACpB,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C;;;;iCAIiC;AACjC,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,MAAM,WAAW,sBACf,SAAQ,aAAa,EACnB,oBAAoB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;6BAEyB;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACrC;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC;6EACyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;sDAEkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"ListingDetailPane.d.ts","sourceRoot":"","sources":["../../src/default/ListingDetailPane.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAc9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtE;;oBAEoB;AACpB,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C;;;;iCAIiC;AACjC,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,MAAM,WAAW,sBACf,SAAQ,aAAa,EACnB,oBAAoB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;6BAEyB;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACrC;;;;;;;;OAQG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC;6EACyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC;;sDAEkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,CAwiB7E"}
|
|
@@ -106,7 +106,7 @@ export function ListingDetailPane(props) {
|
|
|
106
106
|
.filter((view) => !isRedactedValue(view.value))
|
|
107
107
|
.map((view) => formatFeatureValue(view.feature, view.value, { t, locale }))
|
|
108
108
|
.filter((text) => text !== undefined)
|
|
109
|
-
.join(" · ") })) : null] }));
|
|
109
|
+
.join(" · ") })) : null, bag.viewCount !== undefined ? (_jsxs(Typography.Text, { type: "secondary", "data-testid": "listings-detail-meta", style: { display: "block" }, children: [t(LISTINGS_I18N_KEYS.detailViews), ":", " ", _jsx("span", { "data-testid": "listings-detail-views", children: bag.viewCount })] })) : null] }));
|
|
110
110
|
/* In the split the price leads the buy column at level 2 — the
|
|
111
111
|
measured page had it at 22px UNDER the title, smaller than the
|
|
112
112
|
thing it prices, which is backwards on the one line a buyer
|
|
@@ -157,8 +157,12 @@ export function ListingDetailPane(props) {
|
|
|
157
157
|
const specsSection = (_jsxs(_Fragment, { children: [_jsx(Typography.Title, { level: 5, children: t(LISTINGS_I18N_KEYS.detailSpecs) }), specs, bag.unreadableFeatures > 0 ? (_jsx(Typography.Text, { type: "warning", "data-testid": "listings-detail-unreadable", children: t(LISTINGS_I18N_KEYS.detailUnreadableFeatures, {
|
|
158
158
|
count: bag.unreadableFeatures,
|
|
159
159
|
}) })) : null] }));
|
|
160
|
-
const
|
|
161
|
-
|
|
160
|
+
const hasStock = listing.stock_quantity != null;
|
|
161
|
+
const hasPlace = listing.location_label !== undefined &&
|
|
162
|
+
listing.location_label.length > 0;
|
|
163
|
+
// Both rows absent draws an empty table, which the view count used
|
|
164
|
+
// to hide by almost always being there. Nothing is nothing.
|
|
165
|
+
const meta = !hasStock && !hasPlace ? null : (_jsxs(Descriptions, { size: "small", column: 1, children: [hasStock ? (_jsx(Descriptions.Item, { label: t(LISTINGS_I18N_KEYS.detailStock), children: _jsx("span", { "data-testid": "listings-detail-stock", children: listing.stock_quantity }) })) : null, hasPlace ? (_jsx(Descriptions.Item, { label: t(LISTINGS_I18N_KEYS.composeLocationLabel), children: listing.location_label })) : null] }));
|
|
162
166
|
const aside = props.aside !== undefined ? (_jsx("div", { "data-testid": "listings-detail-aside", children: props.aside })) : null;
|
|
163
167
|
if (!split) {
|
|
164
168
|
// The single column, in the order it has always read — the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingDetailPane.js","sourceRoot":"","sources":["../../src/default/ListingDetailPane.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListingDetailPane.js","sourceRoot":"","sources":["../../src/default/ListingDetailPane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,16 @@
|
|
|
22
22
|
* belongs here — it is why `@stapel/image` exists.
|
|
23
23
|
*/
|
|
24
24
|
import type { CSSProperties, ReactElement } from "react";
|
|
25
|
+
import type { LinkComponent } from "@stapel/core";
|
|
26
|
+
/**
|
|
27
|
+
* The class a linked slide carries.
|
|
28
|
+
*
|
|
29
|
+
* `display:block` is the load-bearing half: an inline anchor around a block
|
|
30
|
+
* image leaves a baseline gap under the picture, which on a grid of tiles is a
|
|
31
|
+
* visible row of mismatched card heights. The rule itself lives in
|
|
32
|
+
* `cardTargetCss()`, beside the card's other one-rule-per-defect entries.
|
|
33
|
+
*/
|
|
34
|
+
export declare const PHOTO_LINK_CLASS = "stapel-listing-photo-link";
|
|
25
35
|
/** The default shape of a listing photo box everywhere in this skin. Declared
|
|
26
36
|
* once so a card, a detail hero and a dashboard thumbnail cannot drift into
|
|
27
37
|
* three different crops. */
|
|
@@ -50,6 +60,28 @@ export declare function ListingPhoto(props: ListingPhotoProps): ReactElement;
|
|
|
50
60
|
* SERP was measured correct on while the desktop card (a still `<img>` inside
|
|
51
61
|
* the anchor, one photo, no dots) was not.
|
|
52
62
|
*
|
|
63
|
+
* ── …and why each SLIDE may still be one, when a card asks (`href`) ────────
|
|
64
|
+
*
|
|
65
|
+
* The rule above is about the STRIP, and it was read as a rule about the
|
|
66
|
+
* picture. It is not, and the difference was measured: on a 1440px grid the
|
|
67
|
+
* photo is 267x200 — the largest, most obvious target on the card — and
|
|
68
|
+
* clicking it did nothing at all. `cursor: auto`, no hover, and the visitor
|
|
69
|
+
* stayed on the page they were already on. A person who clicks a picture of a
|
|
70
|
+
* phone is asking to see the phone; there is no reading of that click in which
|
|
71
|
+
* the right answer is silence.
|
|
72
|
+
*
|
|
73
|
+
* So a card may hand this strip its own `href`, and each slide becomes a link
|
|
74
|
+
* around its picture. What that does NOT do is make the strip a link: the
|
|
75
|
+
* scroller, its arrows and its dots stay controls, outside every anchor,
|
|
76
|
+
* because they are what the header's rule is actually protecting. And the
|
|
77
|
+
* slide links are `tabIndex={-1}` + `aria-hidden`, so a card is still ONE tab
|
|
78
|
+
* stop and one accessible name — the reading anchor's — rather than one per
|
|
79
|
+
* photograph.
|
|
80
|
+
*
|
|
81
|
+
* A surface that does not pass `href` is byte-identical to before. The phone
|
|
82
|
+
* SERP passes none: a horizontal swipe is a real gesture there, and it is the
|
|
83
|
+
* gesture the header's rule was written for.
|
|
84
|
+
*
|
|
53
85
|
* A listing with no photos still gets one slide, so a row's height does not
|
|
54
86
|
* depend on whether a seller uploaded anything, and a ONE-photo strip gets
|
|
55
87
|
* neither peek nor dots: the sliver of a next slide is an affordance for
|
|
@@ -63,5 +95,13 @@ export declare function ListingPhotoStrip(props: {
|
|
|
63
95
|
/** The surface's own test id, so a screen holding two kinds of card does
|
|
64
96
|
* not hand a test two elements under one name. */
|
|
65
97
|
readonly testId: string;
|
|
98
|
+
/**
|
|
99
|
+
* Where a click on the PICTURE goes — the card's own `href`, when the card
|
|
100
|
+
* wants its photograph to be part of its target. Omitted, every slide is
|
|
101
|
+
* inert exactly as it has always been.
|
|
102
|
+
*/
|
|
103
|
+
readonly href?: string;
|
|
104
|
+
/** The host's `<Link>`, so the click stays inside the SPA. */
|
|
105
|
+
readonly linkComponent?: LinkComponent;
|
|
66
106
|
}): ReactElement;
|
|
67
107
|
//# sourceMappingURL=ListingPhoto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingPhoto.d.ts","sourceRoot":"","sources":["../../src/default/ListingPhoto.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ListingPhoto.d.ts","sourceRoot":"","sources":["../../src/default/ListingPhoto.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAMzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAMlD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D;;4BAE4B;AAC5B,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC;AAwBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAmEnE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;sDACkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CACxC,GAAG,YAAY,CA0Ef"}
|
|
@@ -7,6 +7,15 @@ import { useT } from "@stapel/core";
|
|
|
7
7
|
import { radii, spacing } from "@stapel/tokens";
|
|
8
8
|
import { useListingsRuntime } from "../model/context.js";
|
|
9
9
|
import { LISTINGS_I18N_KEYS } from "../i18n/keys.js";
|
|
10
|
+
/**
|
|
11
|
+
* The class a linked slide carries.
|
|
12
|
+
*
|
|
13
|
+
* `display:block` is the load-bearing half: an inline anchor around a block
|
|
14
|
+
* image leaves a baseline gap under the picture, which on a grid of tiles is a
|
|
15
|
+
* visible row of mismatched card heights. The rule itself lives in
|
|
16
|
+
* `cardTargetCss()`, beside the card's other one-rule-per-defect entries.
|
|
17
|
+
*/
|
|
18
|
+
export const PHOTO_LINK_CLASS = "stapel-listing-photo-link";
|
|
10
19
|
/** The default shape of a listing photo box everywhere in this skin. Declared
|
|
11
20
|
* once so a card, a detail hero and a dashboard thumbnail cannot drift into
|
|
12
21
|
* three different crops. */
|
|
@@ -72,6 +81,28 @@ export function ListingPhoto(props) {
|
|
|
72
81
|
* SERP was measured correct on while the desktop card (a still `<img>` inside
|
|
73
82
|
* the anchor, one photo, no dots) was not.
|
|
74
83
|
*
|
|
84
|
+
* ── …and why each SLIDE may still be one, when a card asks (`href`) ────────
|
|
85
|
+
*
|
|
86
|
+
* The rule above is about the STRIP, and it was read as a rule about the
|
|
87
|
+
* picture. It is not, and the difference was measured: on a 1440px grid the
|
|
88
|
+
* photo is 267x200 — the largest, most obvious target on the card — and
|
|
89
|
+
* clicking it did nothing at all. `cursor: auto`, no hover, and the visitor
|
|
90
|
+
* stayed on the page they were already on. A person who clicks a picture of a
|
|
91
|
+
* phone is asking to see the phone; there is no reading of that click in which
|
|
92
|
+
* the right answer is silence.
|
|
93
|
+
*
|
|
94
|
+
* So a card may hand this strip its own `href`, and each slide becomes a link
|
|
95
|
+
* around its picture. What that does NOT do is make the strip a link: the
|
|
96
|
+
* scroller, its arrows and its dots stay controls, outside every anchor,
|
|
97
|
+
* because they are what the header's rule is actually protecting. And the
|
|
98
|
+
* slide links are `tabIndex={-1}` + `aria-hidden`, so a card is still ONE tab
|
|
99
|
+
* stop and one accessible name — the reading anchor's — rather than one per
|
|
100
|
+
* photograph.
|
|
101
|
+
*
|
|
102
|
+
* A surface that does not pass `href` is byte-identical to before. The phone
|
|
103
|
+
* SERP passes none: a horizontal swipe is a real gesture there, and it is the
|
|
104
|
+
* gesture the header's rule was written for.
|
|
105
|
+
*
|
|
75
106
|
* A listing with no photos still gets one slide, so a row's height does not
|
|
76
107
|
* depend on whether a seller uploaded anything, and a ONE-photo strip gets
|
|
77
108
|
* neither peek nor dots: the sliver of a next slide is an affordance for
|
|
@@ -81,11 +112,27 @@ export function ListingPhotoStrip(props) {
|
|
|
81
112
|
const t = useT();
|
|
82
113
|
const { images, title } = props;
|
|
83
114
|
const many = images.length > 1;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
115
|
+
/**
|
|
116
|
+
* One slide, linked or not.
|
|
117
|
+
*
|
|
118
|
+
* `aria-hidden` + `tabIndex={-1}`: this is a SECOND way to reach a
|
|
119
|
+
* destination the card already names, not a second destination. Without it a
|
|
120
|
+
* grid of twenty-four cards grows twenty-four extra tab stops, each
|
|
121
|
+
* announcing the same listing the card announced a moment ago.
|
|
122
|
+
*/
|
|
123
|
+
const slide = (photo, key) => {
|
|
124
|
+
if (props.href === undefined)
|
|
125
|
+
return photo;
|
|
126
|
+
const Link = props.linkComponent;
|
|
127
|
+
return Link !== undefined ? (_jsx(Link, { href: props.href, className: PHOTO_LINK_CLASS, "aria-hidden": "true", tabIndex: -1, "data-testid": "listings-photo-link", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", children: photo }, key)) : (_jsx("a", { href: props.href, className: PHOTO_LINK_CLASS, "aria-hidden": "true", tabIndex: -1, "data-testid": "listings-photo-link", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", children: photo }, key));
|
|
128
|
+
};
|
|
129
|
+
return (_jsx(SkinCarousel, { label: t(LISTINGS_I18N_KEYS.cardPhotos), aspectRatio: LISTING_PHOTO_ASPECT, peek: many, dots: many, "data-testid": props.testId, children: images.length === 0
|
|
130
|
+
? slide(_jsx(ListingPhoto, { imageRef: undefined, alt: title }), "empty")
|
|
131
|
+
: images.map((reference, index) => slide(_jsx(ListingPhoto, { imageRef: reference, alt: many
|
|
132
|
+
? t(LISTINGS_I18N_KEYS.detailPhotoAlt, {
|
|
133
|
+
index: index + 1,
|
|
134
|
+
total: images.length,
|
|
135
|
+
})
|
|
136
|
+
: title }, reference), reference)) }));
|
|
90
137
|
}
|
|
91
138
|
//# sourceMappingURL=ListingPhoto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListingPhoto.js","sourceRoot":"","sources":["../../src/default/ListingPhoto.tsx"],"names":[],"mappings":";AAwBA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ListingPhoto.js","sourceRoot":"","sources":["../../src/default/ListingPhoto.tsx"],"names":[],"mappings":"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"}
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# @stapel/listings-react 0.
|
|
1
|
+
# @stapel/listings-react 0.21.0
|
|
2
2
|
|
|
3
|
-
Headless React flow pair for stapel-listings (contract >=0.
|
|
3
|
+
Headless React flow pair for stapel-listings (contract >=0.19 <0.20) — business + state, zero visual opinion.
|
|
4
4
|
Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
|
|
5
5
|
verification-403 interception, i18n engine, analytics facade, TanStack Query layer.
|
|
6
6
|
|
package/manifest.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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.
|
|
4
|
+
"version": "0.21.0",
|
|
5
5
|
"backend": {
|
|
6
6
|
"module": "stapel-listings",
|
|
7
|
-
"contract": ">=0.
|
|
7
|
+
"contract": ">=0.19 <0.20"
|
|
8
8
|
},
|
|
9
9
|
"layers": [
|
|
10
10
|
"api",
|
package/nav-manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stapel/listings-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.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": {
|
|
@@ -102,8 +102,8 @@
|
|
|
102
102
|
"size-limit": "^11.2.0",
|
|
103
103
|
"typescript": "^5.8.3",
|
|
104
104
|
"vitest": "^3.2.4",
|
|
105
|
-
"@stapel/attributes-react": "^0.
|
|
106
|
-
"@stapel/core": "^0.
|
|
105
|
+
"@stapel/attributes-react": "^0.14.1",
|
|
106
|
+
"@stapel/core": "^0.24.0",
|
|
107
107
|
"@stapel/currencies-react": "^0.3.0",
|
|
108
108
|
"@stapel/image": "^0.4.2",
|
|
109
109
|
"@stapel/showcase": "^0.3.0",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* screen (see `ListingCardBlockedReason`). The rule's disables below are the
|
|
27
27
|
* documented decision §2.4 asks for, not a hole.
|
|
28
28
|
*
|
|
29
|
-
* ── Why the disclosure is CONTROLLED
|
|
29
|
+
* ── Why the disclosure is CONTROLLED, and why activation PINS it ──────────
|
|
30
30
|
*
|
|
31
31
|
* An uncontrolled popover triggered by hover AND click treats the click as a
|
|
32
32
|
* TOGGLE, so the natural pointer gesture — rest on the control, then press it
|
|
@@ -35,24 +35,38 @@
|
|
|
35
35
|
* the one control that was supposed to explain itself and watched it go
|
|
36
36
|
* blank. Reproduced in jsdom and gated by `test/favoriteGesture.test.tsx`.
|
|
37
37
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* click closes what the hover opened. The suite was green throughout because
|
|
43
|
-
* every existing test fired `click` alone — a synthetic click carries no
|
|
44
|
-
* hover in front of it, so it exercised the one ordering that worked.
|
|
38
|
+
* So `open` is this component's own state. The first version of that made
|
|
39
|
+
* activation MONOTONIC for the duration of the click's own dispatch — a flag
|
|
40
|
+
* set in the capture phase and dropped a microtask later — and it closed the
|
|
41
|
+
* toggle, which was the half of the problem a synthetic click can show.
|
|
45
42
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
43
|
+
* It was not the half a THUMB meets, and the deployed measurement (walker
|
|
44
|
+
* D72, pass 7, the whole timeline in `logs-fp8/fp8-d72-diag3.json`) is
|
|
45
|
+
* unambiguous about which half that is. A real tap DOES open this: the
|
|
46
|
+
* overlay loses `ant-popover-hidden` 7 ms after `click`. Then the emulated
|
|
47
|
+
* hover the tap carried ENDS — a finger that has lifted is hovering nothing —
|
|
48
|
+
* `mouseleave` arrives ~10 ms later, antd's `mouseLeaveDelay` runs its 0.1 s,
|
|
49
|
+
* the leave motion runs, and the overlay is hidden again ~260 ms after it
|
|
50
|
+
* appeared. A quarter-second flash on a phone is indistinguishable from a
|
|
51
|
+
* control that did nothing, which is exactly how six passes read it. The
|
|
52
|
+
* microtask flag could not see this: the closer is not the click's toggle,
|
|
53
|
+
* it is a TIMER two hundred milliseconds behind the gesture.
|
|
54
|
+
*
|
|
55
|
+
* A disclosure that a person deliberately opened therefore PINS: once
|
|
56
|
+
* activated it stays open until it is dismissed, and hover-out, blur and the
|
|
57
|
+
* trigger's own toggle may no longer close it. Dismissal is the two gestures
|
|
58
|
+
* that mean "I am done reading" — a pointer down outside the control and
|
|
59
|
+
* outside the overlay, or `Escape` — and this component listens for both
|
|
60
|
+
* itself, because refusing antd's close is what takes them away.
|
|
61
|
+
*
|
|
62
|
+
* Hover keeps its old, unpinned behaviour: a cursor that rests on the control
|
|
63
|
+
* opens it and a cursor that leaves closes it, with no click involved.
|
|
50
64
|
*
|
|
51
65
|
* Deliberately NOT exported from `src/default/index.ts`: it is how this
|
|
52
66
|
* pair's own gated hearts speak, not a control a host composes with — the
|
|
53
67
|
* same standing `favorite.tsx` has.
|
|
54
68
|
*/
|
|
55
|
-
import { useCallback, useId, useRef, useState } from "react";
|
|
69
|
+
import { useCallback, useEffect, useId, useRef, useState } from "react";
|
|
56
70
|
import type { ReactElement, ReactNode } from "react";
|
|
57
71
|
import { Flex, Typography } from "antd";
|
|
58
72
|
// eslint-disable-next-line stapel/no-tooltip-in-skin -- interaction disclosure, not a hover: opens on click/tap and focus too, anchored to a non-disabled control, with the reason kept in the a11y tree via aria-describedby (see this file's header)
|
|
@@ -87,27 +101,58 @@ export interface GateReasonPopoverProps {
|
|
|
87
101
|
export function GateReasonPopover(props: GateReasonPopoverProps): ReactElement {
|
|
88
102
|
const reasonId = useId();
|
|
89
103
|
const [open, setOpen] = useState(false);
|
|
90
|
-
// Set
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
104
|
+
// Set by an ACTIVATION and cleared only by a dismissal. While it is set,
|
|
105
|
+
// every close antd asks for — the click's own toggle, the hover-out timer,
|
|
106
|
+
// a blur — is refused; see the file header.
|
|
107
|
+
const pinned = useRef(false);
|
|
108
|
+
// The two regions a dismissing gesture must NOT land in: the control itself
|
|
109
|
+
// (pressing it again restates the refusal) and the overlay (the sign-in
|
|
110
|
+
// door lives in there, and closing on its own pointerdown would take the
|
|
111
|
+
// link away before the click that follows it).
|
|
112
|
+
const anchorRef = useRef<HTMLDivElement | null>(null);
|
|
113
|
+
const overlayRef = useRef<HTMLDivElement | null>(null);
|
|
114
|
+
|
|
115
|
+
const dismiss = useCallback((): void => {
|
|
116
|
+
pinned.current = false;
|
|
117
|
+
setOpen(false);
|
|
118
|
+
}, []);
|
|
95
119
|
|
|
96
120
|
const handleOpenChange = useCallback((next: boolean): void => {
|
|
97
|
-
if (!next &&
|
|
121
|
+
if (!next && pinned.current) return;
|
|
98
122
|
setOpen(next);
|
|
99
123
|
}, []);
|
|
100
124
|
|
|
101
125
|
const activate = useCallback((): void => {
|
|
102
|
-
|
|
126
|
+
pinned.current = true;
|
|
103
127
|
setOpen(true);
|
|
104
|
-
// A microtask runs after the whole event dispatch, so the flag covers
|
|
105
|
-
// exactly this gesture and no later hover-out.
|
|
106
|
-
queueMicrotask(() => {
|
|
107
|
-
activating.current = false;
|
|
108
|
-
});
|
|
109
128
|
}, []);
|
|
110
129
|
|
|
130
|
+
// Antd closes an unpinned popover on an outside click of its own; a pinned
|
|
131
|
+
// one has to be given those gestures back, or it would be a panel with no
|
|
132
|
+
// way out on the one device that most needs the pin.
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
if (!open) return undefined;
|
|
135
|
+
const doc = anchorRef.current?.ownerDocument ?? document;
|
|
136
|
+
const outside = (target: EventTarget | null): boolean =>
|
|
137
|
+
target instanceof Node &&
|
|
138
|
+
anchorRef.current?.contains(target) !== true &&
|
|
139
|
+
overlayRef.current?.contains(target) !== true;
|
|
140
|
+
const onPointerDown = (event: Event): void => {
|
|
141
|
+
if (outside(event.target)) dismiss();
|
|
142
|
+
};
|
|
143
|
+
const onKeyDown = (event: KeyboardEvent): void => {
|
|
144
|
+
if (event.key === "Escape") dismiss();
|
|
145
|
+
};
|
|
146
|
+
// Capture, so a handler that stops propagation on its own container
|
|
147
|
+
// cannot leave this stuck open.
|
|
148
|
+
doc.addEventListener("pointerdown", onPointerDown, true);
|
|
149
|
+
doc.addEventListener("keydown", onKeyDown, true);
|
|
150
|
+
return () => {
|
|
151
|
+
doc.removeEventListener("pointerdown", onPointerDown, true);
|
|
152
|
+
doc.removeEventListener("keydown", onKeyDown, true);
|
|
153
|
+
};
|
|
154
|
+
}, [open, dismiss]);
|
|
155
|
+
|
|
111
156
|
return (
|
|
112
157
|
<>
|
|
113
158
|
{/* The floor: the reason reaches AT without a pointer, popover or no
|
|
@@ -122,10 +167,12 @@ export function GateReasonPopover(props: GateReasonPopoverProps): ReactElement {
|
|
|
122
167
|
open={open}
|
|
123
168
|
onOpenChange={handleOpenChange}
|
|
124
169
|
content={
|
|
125
|
-
<
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
170
|
+
<div ref={overlayRef}>
|
|
171
|
+
<Flex vertical gap={spacing[1]} data-testid={props.testId}>
|
|
172
|
+
<Typography.Text>{props.reason}</Typography.Text>
|
|
173
|
+
<SignInLink cta={props.cta} testId={props.signInTestId} />
|
|
174
|
+
</Flex>
|
|
175
|
+
</div>
|
|
129
176
|
}
|
|
130
177
|
>
|
|
131
178
|
{/* A plain wrapper takes the props Popover clones onto its direct
|
|
@@ -141,6 +188,7 @@ export function GateReasonPopover(props: GateReasonPopoverProps): ReactElement {
|
|
|
141
188
|
`aria-disabled` in every engine. Capture, so they run before the
|
|
142
189
|
popover's own toggle sees the same event. */}
|
|
143
190
|
<div
|
|
191
|
+
ref={anchorRef}
|
|
144
192
|
onClickCapture={activate}
|
|
145
193
|
onKeyDownCapture={(event) => {
|
|
146
194
|
if (event.key === "Enter" || event.key === " ") activate();
|
|
@@ -123,7 +123,7 @@ import { LISTINGS_I18N_KEYS } from "../i18n/keys.js";
|
|
|
123
123
|
import { GateReasonPopover } from "./GateReasonPopover.js";
|
|
124
124
|
import { HeartIcon } from "./icons.js";
|
|
125
125
|
import { SignInLink } from "./SignInLink.js";
|
|
126
|
-
import { ListingPhotoStrip } from "./ListingPhoto.js";
|
|
126
|
+
import { PHOTO_LINK_CLASS, ListingPhotoStrip } from "./ListingPhoto.js";
|
|
127
127
|
import { ListingPrice } from "./ListingPrice.js";
|
|
128
128
|
import type { CategoryFeaturesProp, ThemeModeProp } from "./types.js";
|
|
129
129
|
|
|
@@ -230,6 +230,18 @@ export const CARD_BLEED_CLASS = "stapel-listing-card-bleed";
|
|
|
230
230
|
*/
|
|
231
231
|
export const CARD_VIEWED_CLASS = "stapel-listing-card-seen";
|
|
232
232
|
|
|
233
|
+
/**
|
|
234
|
+
* The class that makes a card LOOK like a target.
|
|
235
|
+
*
|
|
236
|
+
* Measured on a live 1440px grid before this pack: `box-shadow: none`,
|
|
237
|
+
* `transform: none`, the border unchanged and `cursor: auto` — a card that
|
|
238
|
+
* opens a listing and gives a person no reason to believe it does. antd's own
|
|
239
|
+
* `hoverable` was not used: it hard-codes `boxShadowCard` and nothing else, so
|
|
240
|
+
* it cannot state a border and cannot be told to stand still for somebody who
|
|
241
|
+
* asked their system for less motion.
|
|
242
|
+
*/
|
|
243
|
+
export const CARD_HOVER_CLASS = "stapel-listing-card-hoverable";
|
|
244
|
+
|
|
233
245
|
/**
|
|
234
246
|
* How far a seen card is dimmed.
|
|
235
247
|
*
|
|
@@ -289,6 +301,7 @@ export function cardTargetCss(): string {
|
|
|
289
301
|
const media = `.${CARD_MEDIA_CLASS}`;
|
|
290
302
|
const main = `.${CARD_MAIN_CLASS}`;
|
|
291
303
|
const bleed = `.${CARD_BLEED_CLASS}`;
|
|
304
|
+
const hover = CARD_HOVER_CLASS;
|
|
292
305
|
return [
|
|
293
306
|
`.${CARD_TARGET_CLASS}{display:block;color:inherit;text-decoration:none}`,
|
|
294
307
|
`.${CARD_TARGET_CLASS}:focus-visible{outline:2px solid var(--listing-card-focus);outline-offset:2px}`,
|
|
@@ -311,6 +324,18 @@ export function cardTargetCss(): string {
|
|
|
311
324
|
`${bleed}{padding-block:var(--listing-card-inset);` +
|
|
312
325
|
`padding-inline-start:var(--listing-card-inset)}` +
|
|
313
326
|
`}`,
|
|
327
|
+
// A linked slide. `display:block` kills the inline baseline gap under the
|
|
328
|
+
// picture, which on a grid of tiles reads as cards of unequal height; the
|
|
329
|
+
// ring is for a browser that focuses an `aria-hidden` anchor anyway.
|
|
330
|
+
`.${PHOTO_LINK_CLASS}{display:block}`,
|
|
331
|
+
`.${PHOTO_LINK_CLASS}:focus-visible{outline:2px solid var(--listing-card-focus);outline-offset:2px}`,
|
|
332
|
+
// The card says it is a target. Two properties, both from the theme's own
|
|
333
|
+
// tokens, and a transition that a person who asked for less motion does
|
|
334
|
+
// not get.
|
|
335
|
+
`.${hover}{transition:box-shadow 160ms ease,border-color 160ms ease}`,
|
|
336
|
+
`.${hover}:hover{box-shadow:var(--listing-card-hover-shadow);` +
|
|
337
|
+
`border-color:var(--listing-card-focus)}`,
|
|
338
|
+
`@media (prefers-reduced-motion:reduce){.${hover}{transition:none}}`,
|
|
314
339
|
// Already seen. The photo and everything inside the card's anchor dim
|
|
315
340
|
// together; the heart is outside the anchor and stays as it was — see
|
|
316
341
|
// CARD_VIEWED_CLASS.
|
|
@@ -577,11 +602,12 @@ export function ListingCard(props: ListingCardProps): ReactElement {
|
|
|
577
602
|
{...(status !== undefined
|
|
578
603
|
? { "data-listing-status": status.status }
|
|
579
604
|
: {})}
|
|
580
|
-
//
|
|
581
|
-
// the card
|
|
582
|
-
{
|
|
583
|
-
? {
|
|
584
|
-
|
|
605
|
+
// `viewed` only when the server actually said so: absent and `null`
|
|
606
|
+
// leave the card's dimming exactly as it renders today.
|
|
607
|
+
className={
|
|
608
|
+
viewed ? `${CARD_HOVER_CLASS} ${CARD_VIEWED_CLASS}` : CARD_HOVER_CLASS
|
|
609
|
+
}
|
|
610
|
+
{...(viewed ? { "data-listing-viewed": "true" } : {})}
|
|
585
611
|
// The body's own padding is zero because the frame fills the card and
|
|
586
612
|
// the photo runs edge to edge when it is stacked: padding here would
|
|
587
613
|
// be a strip of card around a picture. The text block inside the
|
|
@@ -591,18 +617,27 @@ export function ListingCard(props: ListingCardProps): ReactElement {
|
|
|
591
617
|
style={{
|
|
592
618
|
["--listing-card-focus" as string]: token.colorPrimary,
|
|
593
619
|
["--listing-card-inset" as string]: `${String(token.paddingSM)}px`,
|
|
620
|
+
// The theme's own elevation, so the lift is the same one every
|
|
621
|
+
// raised surface in the skin uses and it is right in both modes.
|
|
622
|
+
["--listing-card-hover-shadow" as string]: token.boxShadowSecondary,
|
|
594
623
|
}}
|
|
595
624
|
>
|
|
596
625
|
<div className={CARD_QUERY_CLASS}>
|
|
597
626
|
<div className={`${CARD_FRAME_CLASS} ${CARD_BLEED_CLASS}`}>
|
|
598
|
-
{/* The
|
|
599
|
-
|
|
600
|
-
|
|
627
|
+
{/* The STRIP is outside the anchor — a swipeable scroller is a
|
|
628
|
+
control and a link may not contain one — but each SLIDE is
|
|
629
|
+
linked, so the 267x200 photograph is part of the card's target
|
|
630
|
+
instead of the one place on it where a click does nothing.
|
|
631
|
+
See `<ListingPhotoStrip>` for where that line is drawn. */}
|
|
601
632
|
<div className={CARD_MEDIA_CLASS}>
|
|
602
633
|
<ListingPhotoStrip
|
|
603
634
|
images={listing.images ?? []}
|
|
604
635
|
title={title.length > 0 ? title : String(listing.id)}
|
|
605
636
|
testId="listings-card-photos"
|
|
637
|
+
{...(props.href !== undefined ? { href: props.href } : {})}
|
|
638
|
+
{...(props.href !== undefined && props.linkComponent !== undefined
|
|
639
|
+
? { linkComponent: props.linkComponent }
|
|
640
|
+
: {})}
|
|
606
641
|
/>
|
|
607
642
|
</div>
|
|
608
643
|
|
|
@@ -344,6 +344,33 @@ export function ListingDetailPane(props: ListingDetailPaneProps): ReactElement {
|
|
|
344
344
|
.join(" · ")}
|
|
345
345
|
</Typography.Text>
|
|
346
346
|
) : null}
|
|
347
|
+
|
|
348
|
+
{/* How many people opened it — the listing's own meta line,
|
|
349
|
+
under the title, where a reader looks for how much company
|
|
350
|
+
they have. It spent one release as a row of the
|
|
351
|
+
`<Descriptions>` below (walker D106): wedged between the
|
|
352
|
+
colour attribute and the location row, two screens down,
|
|
353
|
+
read as a PROPERTY OF THE GOODS rather than a fact about
|
|
354
|
+
the page. A view count is not a characteristic of a phone.
|
|
355
|
+
|
|
356
|
+
`bag.viewCount` is `undefined` when the response carries
|
|
357
|
+
no such field, and then there is no line at all — never a
|
|
358
|
+
zero standing in for an absence. There is no favourite
|
|
359
|
+
count beside it because the wire has none: the schema
|
|
360
|
+
carries `is_favorited`, a per-reader boolean, and no
|
|
361
|
+
aggregate anywhere (asserted in test/engagementState). */}
|
|
362
|
+
{bag.viewCount !== undefined ? (
|
|
363
|
+
<Typography.Text
|
|
364
|
+
type="secondary"
|
|
365
|
+
data-testid="listings-detail-meta"
|
|
366
|
+
style={{ display: "block" }}
|
|
367
|
+
>
|
|
368
|
+
{t(LISTINGS_I18N_KEYS.detailViews)}:{" "}
|
|
369
|
+
<span data-testid="listings-detail-views">
|
|
370
|
+
{bag.viewCount}
|
|
371
|
+
</span>
|
|
372
|
+
</Typography.Text>
|
|
373
|
+
) : null}
|
|
347
374
|
</>
|
|
348
375
|
);
|
|
349
376
|
|
|
@@ -586,37 +613,35 @@ export function ListingDetailPane(props: ListingDetailPaneProps): ReactElement {
|
|
|
586
613
|
</>
|
|
587
614
|
);
|
|
588
615
|
|
|
589
|
-
const
|
|
616
|
+
const hasStock = listing.stock_quantity != null;
|
|
617
|
+
const hasPlace =
|
|
618
|
+
listing.location_label !== undefined &&
|
|
619
|
+
listing.location_label.length > 0;
|
|
620
|
+
|
|
621
|
+
// Both rows absent draws an empty table, which the view count used
|
|
622
|
+
// to hide by almost always being there. Nothing is nothing.
|
|
623
|
+
const meta = !hasStock && !hasPlace ? null : (
|
|
590
624
|
<Descriptions size="small" column={1}>
|
|
591
625
|
{/* Label cell and value cell, which is what a `<Descriptions>`
|
|
592
626
|
row IS: the label key carries no `{count}` (it did, and the
|
|
593
627
|
page printed the placeholder), the quantity is the value. */}
|
|
594
|
-
{
|
|
628
|
+
{hasStock ? (
|
|
595
629
|
<Descriptions.Item label={t(LISTINGS_I18N_KEYS.detailStock)}>
|
|
596
630
|
<span data-testid="listings-detail-stock">
|
|
597
631
|
{listing.stock_quantity}
|
|
598
632
|
</span>
|
|
599
633
|
</Descriptions.Item>
|
|
600
634
|
) : null}
|
|
601
|
-
{
|
|
602
|
-
listing.location_label.length > 0 ? (
|
|
635
|
+
{hasPlace ? (
|
|
603
636
|
<Descriptions.Item
|
|
604
637
|
label={t(LISTINGS_I18N_KEYS.composeLocationLabel)}
|
|
605
638
|
>
|
|
606
639
|
{listing.location_label}
|
|
607
640
|
</Descriptions.Item>
|
|
608
641
|
) : null}
|
|
609
|
-
{/*
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
zero stands in for the absence. */}
|
|
613
|
-
{bag.viewCount !== undefined ? (
|
|
614
|
-
<Descriptions.Item label={t(LISTINGS_I18N_KEYS.detailViews)}>
|
|
615
|
-
<span data-testid="listings-detail-views">
|
|
616
|
-
{bag.viewCount}
|
|
617
|
-
</span>
|
|
618
|
-
</Descriptions.Item>
|
|
619
|
-
) : null}
|
|
642
|
+
{/* The view count used to be a third row here. It is a fact
|
|
643
|
+
about the PAGE, not a property of the goods, so it now
|
|
644
|
+
reads on the meta line under the title — see `heading`. */}
|
|
620
645
|
</Descriptions>
|
|
621
646
|
);
|
|
622
647
|
|
|
@@ -27,10 +27,22 @@ import { Typography, theme as antdTheme } from "antd";
|
|
|
27
27
|
import { Image } from "@stapel/image";
|
|
28
28
|
import { SkinCarousel } from "@stapel/tokens-antd/skin";
|
|
29
29
|
import { useT } from "@stapel/core";
|
|
30
|
+
import type { LinkComponent } from "@stapel/core";
|
|
30
31
|
import { radii, spacing } from "@stapel/tokens";
|
|
31
32
|
import { useListingsRuntime } from "../model/context.js";
|
|
32
33
|
import { LISTINGS_I18N_KEYS } from "../i18n/keys.js";
|
|
33
34
|
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The class a linked slide carries.
|
|
38
|
+
*
|
|
39
|
+
* `display:block` is the load-bearing half: an inline anchor around a block
|
|
40
|
+
* image leaves a baseline gap under the picture, which on a grid of tiles is a
|
|
41
|
+
* visible row of mismatched card heights. The rule itself lives in
|
|
42
|
+
* `cardTargetCss()`, beside the card's other one-rule-per-defect entries.
|
|
43
|
+
*/
|
|
44
|
+
export const PHOTO_LINK_CLASS = "stapel-listing-photo-link";
|
|
45
|
+
|
|
34
46
|
/** The default shape of a listing photo box everywhere in this skin. Declared
|
|
35
47
|
* once so a card, a detail hero and a dashboard thumbnail cannot drift into
|
|
36
48
|
* three different crops. */
|
|
@@ -151,6 +163,28 @@ export function ListingPhoto(props: ListingPhotoProps): ReactElement {
|
|
|
151
163
|
* SERP was measured correct on while the desktop card (a still `<img>` inside
|
|
152
164
|
* the anchor, one photo, no dots) was not.
|
|
153
165
|
*
|
|
166
|
+
* ── …and why each SLIDE may still be one, when a card asks (`href`) ────────
|
|
167
|
+
*
|
|
168
|
+
* The rule above is about the STRIP, and it was read as a rule about the
|
|
169
|
+
* picture. It is not, and the difference was measured: on a 1440px grid the
|
|
170
|
+
* photo is 267x200 — the largest, most obvious target on the card — and
|
|
171
|
+
* clicking it did nothing at all. `cursor: auto`, no hover, and the visitor
|
|
172
|
+
* stayed on the page they were already on. A person who clicks a picture of a
|
|
173
|
+
* phone is asking to see the phone; there is no reading of that click in which
|
|
174
|
+
* the right answer is silence.
|
|
175
|
+
*
|
|
176
|
+
* So a card may hand this strip its own `href`, and each slide becomes a link
|
|
177
|
+
* around its picture. What that does NOT do is make the strip a link: the
|
|
178
|
+
* scroller, its arrows and its dots stay controls, outside every anchor,
|
|
179
|
+
* because they are what the header's rule is actually protecting. And the
|
|
180
|
+
* slide links are `tabIndex={-1}` + `aria-hidden`, so a card is still ONE tab
|
|
181
|
+
* stop and one accessible name — the reading anchor's — rather than one per
|
|
182
|
+
* photograph.
|
|
183
|
+
*
|
|
184
|
+
* A surface that does not pass `href` is byte-identical to before. The phone
|
|
185
|
+
* SERP passes none: a horizontal swipe is a real gesture there, and it is the
|
|
186
|
+
* gesture the header's rule was written for.
|
|
187
|
+
*
|
|
154
188
|
* A listing with no photos still gets one slide, so a row's height does not
|
|
155
189
|
* depend on whether a seller uploaded anything, and a ONE-photo strip gets
|
|
156
190
|
* neither peek nor dots: the sliver of a next slide is an affordance for
|
|
@@ -164,10 +198,59 @@ export function ListingPhotoStrip(props: {
|
|
|
164
198
|
/** The surface's own test id, so a screen holding two kinds of card does
|
|
165
199
|
* not hand a test two elements under one name. */
|
|
166
200
|
readonly testId: string;
|
|
201
|
+
/**
|
|
202
|
+
* Where a click on the PICTURE goes — the card's own `href`, when the card
|
|
203
|
+
* wants its photograph to be part of its target. Omitted, every slide is
|
|
204
|
+
* inert exactly as it has always been.
|
|
205
|
+
*/
|
|
206
|
+
readonly href?: string;
|
|
207
|
+
/** The host's `<Link>`, so the click stays inside the SPA. */
|
|
208
|
+
readonly linkComponent?: LinkComponent;
|
|
167
209
|
}): ReactElement {
|
|
168
210
|
const t = useT();
|
|
169
211
|
const { images, title } = props;
|
|
170
212
|
const many = images.length > 1;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* One slide, linked or not.
|
|
216
|
+
*
|
|
217
|
+
* `aria-hidden` + `tabIndex={-1}`: this is a SECOND way to reach a
|
|
218
|
+
* destination the card already names, not a second destination. Without it a
|
|
219
|
+
* grid of twenty-four cards grows twenty-four extra tab stops, each
|
|
220
|
+
* announcing the same listing the card announced a moment ago.
|
|
221
|
+
*/
|
|
222
|
+
const slide = (photo: ReactElement, key: string): ReactElement => {
|
|
223
|
+
if (props.href === undefined) return photo;
|
|
224
|
+
const Link = props.linkComponent;
|
|
225
|
+
return Link !== undefined ? (
|
|
226
|
+
<Link
|
|
227
|
+
key={key}
|
|
228
|
+
href={props.href}
|
|
229
|
+
className={PHOTO_LINK_CLASS}
|
|
230
|
+
aria-hidden="true"
|
|
231
|
+
tabIndex={-1}
|
|
232
|
+
data-testid="listings-photo-link"
|
|
233
|
+
data-analytics="none"
|
|
234
|
+
data-analytics-reason="business action — host app wraps with its own tracked()"
|
|
235
|
+
>
|
|
236
|
+
{photo}
|
|
237
|
+
</Link>
|
|
238
|
+
) : (
|
|
239
|
+
<a
|
|
240
|
+
key={key}
|
|
241
|
+
href={props.href}
|
|
242
|
+
className={PHOTO_LINK_CLASS}
|
|
243
|
+
aria-hidden="true"
|
|
244
|
+
tabIndex={-1}
|
|
245
|
+
data-testid="listings-photo-link"
|
|
246
|
+
data-analytics="none"
|
|
247
|
+
data-analytics-reason="business action — host app wraps with its own tracked()"
|
|
248
|
+
>
|
|
249
|
+
{photo}
|
|
250
|
+
</a>
|
|
251
|
+
);
|
|
252
|
+
};
|
|
253
|
+
|
|
171
254
|
return (
|
|
172
255
|
<SkinCarousel
|
|
173
256
|
label={t(LISTINGS_I18N_KEYS.cardPhotos)}
|
|
@@ -176,24 +259,25 @@ export function ListingPhotoStrip(props: {
|
|
|
176
259
|
dots={many}
|
|
177
260
|
data-testid={props.testId}
|
|
178
261
|
>
|
|
179
|
-
{images.length === 0
|
|
180
|
-
<ListingPhoto imageRef={undefined} alt={title}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
262
|
+
{images.length === 0
|
|
263
|
+
? slide(<ListingPhoto imageRef={undefined} alt={title} />, "empty")
|
|
264
|
+
: images.map((reference, index) =>
|
|
265
|
+
slide(
|
|
266
|
+
<ListingPhoto
|
|
267
|
+
key={reference}
|
|
268
|
+
imageRef={reference}
|
|
269
|
+
alt={
|
|
270
|
+
many
|
|
271
|
+
? t(LISTINGS_I18N_KEYS.detailPhotoAlt, {
|
|
272
|
+
index: index + 1,
|
|
273
|
+
total: images.length,
|
|
274
|
+
})
|
|
275
|
+
: title
|
|
276
|
+
}
|
|
277
|
+
/>,
|
|
278
|
+
reference
|
|
279
|
+
)
|
|
280
|
+
)}
|
|
197
281
|
</SkinCarousel>
|
|
198
282
|
);
|
|
199
283
|
}
|