@stapel/listings-react 0.25.10 → 0.26.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 +208 -0
- package/README.md +77 -9
- package/dist/api/generated/schema.d.ts +2 -2
- package/dist/api/generated/schema.d.ts.map +1 -1
- package/dist/default/CardBadges.d.ts.map +1 -1
- package/dist/default/CardBadges.js +3 -1
- package/dist/default/CardBadges.js.map +1 -1
- package/dist/default/ListingActions.d.ts +108 -0
- package/dist/default/ListingActions.d.ts.map +1 -0
- package/dist/default/ListingActions.js +29 -0
- package/dist/default/ListingActions.js.map +1 -0
- package/dist/default/ListingCard.d.ts.map +1 -1
- package/dist/default/ListingCard.js +15 -8
- package/dist/default/ListingCard.js.map +1 -1
- package/dist/default/ListingDetailPane.d.ts +76 -56
- package/dist/default/ListingDetailPane.d.ts.map +1 -1
- package/dist/default/ListingDetailPane.js +164 -18
- package/dist/default/ListingDetailPane.js.map +1 -1
- package/dist/default/ListingFeedCard.d.ts.map +1 -1
- package/dist/default/ListingFeedCard.js +2 -1
- package/dist/default/ListingFeedCard.js.map +1 -1
- package/dist/default/ListingPhoto.d.ts.map +1 -1
- package/dist/default/ListingPhoto.js +5 -2
- package/dist/default/ListingPhoto.js.map +1 -1
- package/dist/default/ListingSerpCard.d.ts.map +1 -1
- package/dist/default/ListingSerpCard.js +18 -4
- package/dist/default/ListingSerpCard.js.map +1 -1
- package/dist/default/MyListingsPane.d.ts.map +1 -1
- package/dist/default/MyListingsPane.js +45 -21
- package/dist/default/MyListingsPane.js.map +1 -1
- package/dist/default/ShareAction.d.ts +32 -0
- package/dist/default/ShareAction.d.ts.map +1 -0
- package/dist/default/ShareAction.js +116 -0
- package/dist/default/ShareAction.js.map +1 -0
- package/dist/default/actionRow.d.ts +58 -0
- package/dist/default/actionRow.d.ts.map +1 -0
- package/dist/default/actionRow.js +128 -0
- package/dist/default/actionRow.js.map +1 -0
- package/dist/default/cardGallery.d.ts +2 -0
- package/dist/default/cardGallery.d.ts.map +1 -1
- package/dist/default/cardGallery.js +31 -0
- package/dist/default/cardGallery.js.map +1 -1
- package/dist/default/favorite.d.ts +25 -0
- package/dist/default/favorite.d.ts.map +1 -1
- package/dist/default/favorite.js +29 -3
- package/dist/default/favorite.js.map +1 -1
- package/dist/default/icons.d.ts +19 -0
- package/dist/default/icons.d.ts.map +1 -1
- package/dist/default/icons.js +23 -0
- package/dist/default/icons.js.map +1 -1
- package/dist/default/index.d.ts +8 -1
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +6 -1
- package/dist/default/index.js.map +1 -1
- package/dist/default/notice.d.ts +14 -0
- package/dist/default/notice.d.ts.map +1 -0
- package/dist/default/notice.js +62 -0
- package/dist/default/notice.js.map +1 -0
- package/dist/headless/MyListings.d.ts +39 -18
- package/dist/headless/MyListings.d.ts.map +1 -1
- package/dist/headless/MyListings.js +41 -19
- package/dist/headless/MyListings.js.map +1 -1
- package/dist/headless/Share.d.ts +103 -0
- package/dist/headless/Share.d.ts.map +1 -0
- package/dist/headless/Share.js +190 -0
- package/dist/headless/Share.js.map +1 -0
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +21 -0
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/generated/errors.es.gen.d.ts +1 -1
- package/dist/i18n/generated/errors.es.gen.js +1 -1
- package/dist/i18n/generated/errors.gen.d.ts +18 -0
- package/dist/i18n/generated/errors.gen.d.ts.map +1 -1
- package/dist/i18n/generated/errors.gen.js +9 -0
- package/dist/i18n/generated/errors.gen.js.map +1 -1
- package/dist/i18n/generated/errors.ru.gen.d.ts +1 -1
- package/dist/i18n/generated/errors.ru.gen.js +1 -1
- package/dist/i18n/keys.d.ts +45 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +60 -0
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +21 -0
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/model/cardBadges.d.ts +52 -3
- package/dist/model/cardBadges.d.ts.map +1 -1
- package/dist/model/cardBadges.js +74 -12
- package/dist/model/cardBadges.js.map +1 -1
- package/dist/model/mineSource.d.ts +9 -3
- package/dist/model/mineSource.d.ts.map +1 -1
- package/dist/model/mineSource.js.map +1 -1
- package/dist/model/status.d.ts +62 -13
- package/dist/model/status.d.ts.map +1 -1
- package/dist/model/status.js +69 -15
- package/dist/model/status.js.map +1 -1
- package/llms.txt +8 -3
- package/manifest.json +96 -4
- package/nav-manifest.json +1 -1
- package/package.json +10 -10
- package/src/analytics/generated/events.json +1 -1
- package/src/api/generated/schema.ts +2 -2
- package/src/default/CardBadges.tsx +3 -1
- package/src/default/ListingActions.tsx +196 -0
- package/src/default/ListingCard.tsx +79 -43
- package/src/default/ListingDetailPane.tsx +268 -81
- package/src/default/ListingFeedCard.tsx +2 -0
- package/src/default/ListingPhoto.tsx +28 -0
- package/src/default/ListingSerpCard.tsx +39 -12
- package/src/default/MyListingsPane.tsx +77 -44
- package/src/default/ShareAction.tsx +260 -0
- package/src/default/actionRow.ts +131 -0
- package/src/default/cardGallery.ts +31 -0
- package/src/default/favorite.tsx +68 -1
- package/src/default/icons.tsx +60 -0
- package/src/default/index.ts +23 -0
- package/src/default/notice.ts +68 -0
- package/src/headless/MyListings.tsx +89 -38
- package/src/headless/Share.tsx +278 -0
- package/src/i18n/es.ts +28 -0
- package/src/i18n/generated/errors.es.gen.ts +1 -1
- package/src/i18n/generated/errors.gen.ts +9 -0
- package/src/i18n/generated/errors.json +31 -0
- package/src/i18n/generated/errors.ru.gen.ts +1 -1
- package/src/i18n/keys.ts +63 -0
- package/src/i18n/ru.ts +28 -0
- package/src/index.ts +22 -0
- package/src/model/cardBadges.ts +124 -12
- package/src/model/mineSource.ts +9 -3
- package/src/model/status.ts +85 -18
|
@@ -16,12 +16,19 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
16
16
|
* listing is offline, or never tell them their edit is being screened.
|
|
17
17
|
* `moderation_status` is on the owner card, so the row reads the real
|
|
18
18
|
* value rather than the `"approved"` stand-in it used before 0.7.0.
|
|
19
|
-
* 2. **
|
|
20
|
-
* groupings and `blocked` is in none of them,
|
|
21
|
-
* it in none of them
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
19
|
+
* 2. **A takedown gets a tab of its own, and a count (D407).** The three
|
|
20
|
+
* tabs are the SERVER's status groupings and `blocked` is in none of them,
|
|
21
|
+
* because `my/counters` counts it in none of them — so a cabinet holding a
|
|
22
|
+
* listing a moderator had pulled read "Active 0 · Drafts 0 · Archived 0"
|
|
23
|
+
* over it, and said beside that that nothing of the seller's was live. The
|
|
24
|
+
* row was on the page (in a block above the tabs) and in no tab and in no
|
|
25
|
+
* number, and a person reads the numbers.
|
|
26
|
+
*
|
|
27
|
+
* So the takedowns are the fourth tab, counted from their own read — see
|
|
28
|
+
* `model/status.ts` for why a fourth tab and not the archive. The block
|
|
29
|
+
* above the tabs stays as one LINE, without the rows: a takedown must not
|
|
30
|
+
* need a click to be discovered, and printing the same row twice on one
|
|
31
|
+
* screen is not the way to say so.
|
|
25
32
|
* 3. **An empty tab says which emptiness it is.** "No drafts" and "nothing
|
|
26
33
|
* sold yet" are different sentences and one generic "nothing here" is
|
|
27
34
|
* neither.
|
|
@@ -71,12 +78,14 @@ const TAB_LABEL = {
|
|
|
71
78
|
active: LISTINGS_I18N_KEYS.mineTabActive,
|
|
72
79
|
drafts: LISTINGS_I18N_KEYS.mineTabDrafts,
|
|
73
80
|
archived: LISTINGS_I18N_KEYS.mineTabArchived,
|
|
81
|
+
removed: LISTINGS_I18N_KEYS.mineTabRemoved,
|
|
74
82
|
};
|
|
75
83
|
/** One empty sentence per tab — see the header, point 3. */
|
|
76
84
|
const TAB_EMPTY = {
|
|
77
85
|
active: LISTINGS_I18N_KEYS.mineEmptyActive,
|
|
78
86
|
drafts: LISTINGS_I18N_KEYS.mineEmptyDrafts,
|
|
79
87
|
archived: LISTINGS_I18N_KEYS.mineEmptyArchived,
|
|
88
|
+
removed: LISTINGS_I18N_KEYS.mineEmptyRemoved,
|
|
80
89
|
};
|
|
81
90
|
/** The thumbnail column. A photo marketplace whose seller dashboard is a
|
|
82
91
|
* column of text is missing the one thing that identifies a row at a glance;
|
|
@@ -199,9 +208,18 @@ export function MyListingsPane(props) {
|
|
|
199
208
|
// ONE confirmation for the whole list, keyed by the row that asked — not one
|
|
200
209
|
// mounted dialog per row.
|
|
201
210
|
const [removingId, setRemovingId] = useState(null);
|
|
202
|
-
const
|
|
203
|
-
? bag.rows.data.find((row) => row.id === removingId)
|
|
204
|
-
: undefined
|
|
211
|
+
const removingRow = bag.rows.status === "ready"
|
|
212
|
+
? bag.rows.data.find((row) => row.id === removingId)
|
|
213
|
+
: undefined;
|
|
214
|
+
const removal = useListingActions(removingId ?? 0, removingRow?.status, {
|
|
215
|
+
// The SERVER's answer for THIS row, exactly as the row's own controls
|
|
216
|
+
// take it. Without it this hook fell back to the mirror, and the mirror
|
|
217
|
+
// is a table about a status rather than about a listing — which is the
|
|
218
|
+
// difference between "a sold listing may be archived" and "this one may".
|
|
219
|
+
...(removingRow?.available_transitions !== undefined
|
|
220
|
+
? { available: removingRow.available_transitions }
|
|
221
|
+
: {}),
|
|
222
|
+
});
|
|
205
223
|
const paged = bag.prevPage.available || bag.nextPage.available;
|
|
206
224
|
const renderRow = (row) => (_jsx(MyListingRow, { listing: row, onEdit: props.onEdit, onAskRemove: setRemovingId, listingHref: props.listingHref, linkComponent: props.linkComponent }));
|
|
207
225
|
return (_jsx(SkinTheme, { surface: "base", style: {
|
|
@@ -213,14 +231,16 @@ export function MyListingsPane(props) {
|
|
|
213
231
|
// A refused pane is ONE state, not a banner above a live-looking
|
|
214
232
|
// dashboard: the tabs still advertised "Active 2 · Drafts 3" to a
|
|
215
233
|
// visitor who could not read a single row.
|
|
216
|
-
_jsx(EmptyState, { testId: "listings-mine-blocked", title: t(bag.gate.block.code, bag.gate.block.params), action: _jsx(SignInLink, { cta: props.signIn, testId: "listings-mine-sign-in" }) })) : (_jsxs(_Fragment, { children: [
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
234
|
+
_jsx(EmptyState, { testId: "listings-mine-blocked", title: t(bag.gate.block.code, bag.gate.block.params), action: _jsx(SignInLink, { cta: props.signIn, testId: "listings-mine-sign-in" }) })) : (_jsxs(_Fragment, { children: [bag.tab === "removed"
|
|
235
|
+
? null
|
|
236
|
+
: matchList(bag.blockedRows, {
|
|
237
|
+
loading: () => null,
|
|
238
|
+
failed: () => (_jsx(Typography.Text, { type: "secondary", "data-testid": "listings-mine-takedowns-failed", children: t(LISTINGS_I18N_KEYS.mineBlockedLoadFailed) })),
|
|
239
|
+
empty: () => null,
|
|
240
|
+
ready: (rows) => (_jsx(Typography.Text, { type: "warning", strong: true, "data-testid": "listings-mine-takedowns", children: tPlural(LISTINGS_I18N_KEYS.mineBlockedTitle, {
|
|
241
|
+
count: rows.length,
|
|
242
|
+
}) })),
|
|
243
|
+
}), _jsx(Tabs, { activeKey: bag.tab, "data-testid": "listings-mine-tabs", onChange: (key) => {
|
|
224
244
|
bag.setTab(key);
|
|
225
245
|
}, items: bag.tabs.map((tab) => ({
|
|
226
246
|
key: tab,
|
|
@@ -235,9 +255,11 @@ export function MyListingsPane(props) {
|
|
|
235
255
|
// phone instead of collapsing into an overflow menu.
|
|
236
256
|
//
|
|
237
257
|
// `tabCounts`, not `counters`: the badge is never allowed to
|
|
238
|
-
// read lower than the rows underneath it
|
|
239
|
-
//
|
|
240
|
-
|
|
258
|
+
// read lower than the rows underneath it, and the fourth tab
|
|
259
|
+
// has no server counter at all (D407 — a moderator-rejected
|
|
260
|
+
// listing sat in Drafts under a `0`, and a taken-down one
|
|
261
|
+
// under no number whatever).
|
|
262
|
+
ready: (counts) => (_jsx(Typography.Text, { type: tab === "removed" ? "warning" : "secondary", "data-testid": `listings-mine-count-${tab}`, children: ` ${String(counts[tab])}` })),
|
|
241
263
|
})] })),
|
|
242
264
|
})) }), matchLoad(bag.counters, {
|
|
243
265
|
loading: () => null,
|
|
@@ -270,7 +292,9 @@ export function MyListingsPane(props) {
|
|
|
270
292
|
// The gate itself is open: this pane's own refusal is `bag.gate`
|
|
271
293
|
// and it is answered far above, as one state.
|
|
272
294
|
_jsx(PaneGate, { gate: actionAvailable(), testId: "listings-mine-reasons", children: _jsx(List, { dataSource: [...rows], rowKey: (row) => row.id, renderItem: renderRow }) })),
|
|
273
|
-
}), paged ? (_jsxs(Flex, { gap: spacing[2], wrap: true, children: [_jsx(GatedButton, { gate: bag.prevPage, size: "small", layout: "inline", testId: "listings-mine-prev", "data-analytics": "none", "data-analytics-reason": "paging a list the person is already reading; not a business action", onClick: bag.goPrev, children: t(LISTINGS_I18N_KEYS.pagePrev) }), _jsx(GatedButton, { gate: bag.nextPage, size: "small", layout: "inline", testId: "listings-mine-next", "data-analytics": "none", "data-analytics-reason": "paging a list the person is already reading; not a business action", onClick: bag.goNext, children: t(LISTINGS_I18N_KEYS.pageNext) })] })) : null] })), _jsx(SkinConfirm, { open: removingId !== null, danger: true, title: t(LISTINGS_I18N_KEYS.mineDeleteConfirmTitle), body: t(
|
|
295
|
+
}), paged ? (_jsxs(Flex, { gap: spacing[2], wrap: true, children: [_jsx(GatedButton, { gate: bag.prevPage, size: "small", layout: "inline", testId: "listings-mine-prev", "data-analytics": "none", "data-analytics-reason": "paging a list the person is already reading; not a business action", onClick: bag.goPrev, children: t(LISTINGS_I18N_KEYS.pagePrev) }), _jsx(GatedButton, { gate: bag.nextPage, size: "small", layout: "inline", testId: "listings-mine-next", "data-analytics": "none", "data-analytics-reason": "paging a list the person is already reading; not a business action", onClick: bag.goNext, children: t(LISTINGS_I18N_KEYS.pageNext) })] })) : null] })), _jsx(SkinConfirm, { open: removingId !== null, danger: true, title: t(LISTINGS_I18N_KEYS.mineDeleteConfirmTitle), body: t(removal.moves.some((move) => move.to === "archived")
|
|
296
|
+
? LISTINGS_I18N_KEYS.mineDeleteConfirmBody
|
|
297
|
+
: LISTINGS_I18N_KEYS.mineDeleteConfirmBodyFinal), confirmLabel: t(LISTINGS_I18N_KEYS.mineDelete), confirming: removal.inFlight, "data-testid": "listings-mine-delete-confirm", onConfirm: () => {
|
|
274
298
|
removal.doRemove();
|
|
275
299
|
setRemovingId(null);
|
|
276
300
|
}, onCancel: () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MyListingsPane.js","sourceRoot":"","sources":["../../src/default/MyListingsPane.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MyListingsPane.js","sourceRoot":"","sources":["../../src/default/MyListingsPane.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CSSProperties, ReactElement } from "react";
|
|
2
|
+
import type { ShareChannel } from "../headless/Share.js";
|
|
3
|
+
export interface ShareActionProps {
|
|
4
|
+
/**
|
|
5
|
+
* The listing's CANONICAL address — the route the container built, absolute
|
|
6
|
+
* or a path. Given, it is what every arm shares and `window.location` is
|
|
7
|
+
* never consulted; see `useShare` for why that distinction is the whole
|
|
8
|
+
* point of the prop.
|
|
9
|
+
*/
|
|
10
|
+
readonly url?: string;
|
|
11
|
+
/** The listing's title: the platform sheet's heading and the networks'
|
|
12
|
+
* text. */
|
|
13
|
+
readonly title?: string;
|
|
14
|
+
/** A line under the title in the platform sheet — the price, typically. */
|
|
15
|
+
readonly text?: string;
|
|
16
|
+
/** Analytics, once per completed share. `"native"` never names the app the
|
|
17
|
+
* person chose, because the platform sheet does not tell the page. */
|
|
18
|
+
readonly onShared?: (channel: ShareChannel) => void;
|
|
19
|
+
/** This surface's own test id, so a screen holding a card and a listing
|
|
20
|
+
* page hands a test one element per name. Default `listings-share`. */
|
|
21
|
+
readonly testId?: string;
|
|
22
|
+
/**
|
|
23
|
+
* `"circle"` for the glyph pinned to the corner of a photograph (no room
|
|
24
|
+
* for a word, and the heart beside it is a circle); `"default"` (the
|
|
25
|
+
* default) draws the word beside the glyph wherever the viewport has room
|
|
26
|
+
* for it.
|
|
27
|
+
*/
|
|
28
|
+
readonly shape?: "default" | "circle";
|
|
29
|
+
readonly style?: CSSProperties;
|
|
30
|
+
}
|
|
31
|
+
export declare function ShareAction(props: ShareActionProps): ReactElement;
|
|
32
|
+
//# sourceMappingURL=ShareAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareAction.d.ts","sourceRoot":"","sources":["../../src/default/ShareAction.tsx"],"names":[],"mappings":"AAsDA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAQzD,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,sBAAsB,CAAC;AAkBvE,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;eACW;IACX,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;0EACsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD;2EACuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAsJjE"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* `<ShareAction>` — "share", the verb the storefront did not have.
|
|
4
|
+
*
|
|
5
|
+
* Measured by the owner on the live deployment (2026-09-06): **no share
|
|
6
|
+
* control anywhere in the product.** Not a badly placed one, not one behind a
|
|
7
|
+
* menu — none. The only way to send somebody a listing was the address bar,
|
|
8
|
+
* which on a phone is the hardest thing on the screen to reach and which
|
|
9
|
+
* carries the SERP's query string, the page anchor and whatever tracking
|
|
10
|
+
* parameters the visitor arrived with.
|
|
11
|
+
*
|
|
12
|
+
* ── One control, two renderings, and the DEVICE picks ─────────────────────
|
|
13
|
+
*
|
|
14
|
+
* Where `navigator.share` exists — which is every phone and almost no desktop
|
|
15
|
+
* — the press opens the PLATFORM's own sheet: the person's own apps, in their
|
|
16
|
+
* own order, including the ones we have never heard of. A library that drew
|
|
17
|
+
* its own list of four networks on a phone would be offering a worse version
|
|
18
|
+
* of something the operating system already does better.
|
|
19
|
+
*
|
|
20
|
+
* Where it does not, the press opens a small menu: copy the link, and the
|
|
21
|
+
* three networks a Russian-speaking marketplace actually receives traffic
|
|
22
|
+
* from. This is the DESKTOP rendering, not a fallback for old browsers, which
|
|
23
|
+
* is why it is built rather than apologised for.
|
|
24
|
+
*
|
|
25
|
+
* ── The menu is a Popover, and that is an exception with an argument ──────
|
|
26
|
+
*
|
|
27
|
+
* `stapel/no-tooltip-in-skin` bans `Popover` because of what a hover-triggered
|
|
28
|
+
* one does: it hides text a touch device can never reveal, and it anchors that
|
|
29
|
+
* text to a disabled control that swallows the events it needs. Neither
|
|
30
|
+
* applies here and both are structurally impossible:
|
|
31
|
+
*
|
|
32
|
+
* - the trigger is `"click"` ONLY — no hover arm at all, so a thumb and a
|
|
33
|
+
* cursor reach it by exactly the same gesture;
|
|
34
|
+
* - the anchor is a live, enabled, focusable button;
|
|
35
|
+
* - nothing is EXPLAINED in the overlay. It holds four controls. A menu is
|
|
36
|
+
* the shape this content has had since menus existed, and the alternative
|
|
37
|
+
* — four buttons standing permanently beside the title — is the "24 copies
|
|
38
|
+
* of one sentence" defect that `GateReasonPopover` was written to end,
|
|
39
|
+
* wearing a different hat.
|
|
40
|
+
*
|
|
41
|
+
* ── The word disappears on a phone; the NAME never does ───────────────────
|
|
42
|
+
*
|
|
43
|
+
* `aria-label` carries the verb in every arm and at every width. What the
|
|
44
|
+
* media query drops is the painted word beside the glyph, because at 390px
|
|
45
|
+
* the action row shares a line with a heart and a price. A screen reader
|
|
46
|
+
* announces the same verb on both.
|
|
47
|
+
*
|
|
48
|
+
* ── Every outbound link is `noopener noreferrer` ──────────────────────────
|
|
49
|
+
*
|
|
50
|
+
* `target="_blank"` without `rel="noopener"` hands the opened page a live
|
|
51
|
+
* `window.opener` handle to the storefront's tab, which is a one-line
|
|
52
|
+
* navigation hijack; `noreferrer` keeps the visitor's exact listing URL out of
|
|
53
|
+
* the network's referer log. Both, on all three, without exception.
|
|
54
|
+
*/
|
|
55
|
+
import { useCallback, useEffect, useState } from "react";
|
|
56
|
+
import { Flex, Typography } from "antd";
|
|
57
|
+
// eslint-disable-next-line stapel/no-tooltip-in-skin -- a MENU, not a hover explanation: trigger is click-only (a thumb and a cursor use one gesture), the anchor is a live enabled button, and the overlay holds four controls rather than a sentence. See this file's header.
|
|
58
|
+
import { Popover } from "antd";
|
|
59
|
+
import { SkinButton as Button, ErrorAlert } from "@stapel/tokens-antd/skin";
|
|
60
|
+
import { useT } from "@stapel/core";
|
|
61
|
+
import { spacing } from "@stapel/tokens";
|
|
62
|
+
import { useShare } from "../headless/Share.js";
|
|
63
|
+
import { LISTINGS_I18N_KEYS } from "../i18n/keys.js";
|
|
64
|
+
import { LISTING_ACTIONS_STYLE_HREF, LISTING_ACTION_CLASS, LISTING_ACTION_LABEL_CLASS, actionRowCss, } from "./actionRow.js";
|
|
65
|
+
import { LinkIcon, ShareIcon } from "./icons.js";
|
|
66
|
+
import { useNotice } from "./notice.js";
|
|
67
|
+
/** Which sentence names each network row. */
|
|
68
|
+
const NETWORK_LABEL = {
|
|
69
|
+
telegram: LISTINGS_I18N_KEYS.shareTelegram,
|
|
70
|
+
whatsapp: LISTINGS_I18N_KEYS.shareWhatsapp,
|
|
71
|
+
vk: LISTINGS_I18N_KEYS.shareVk,
|
|
72
|
+
};
|
|
73
|
+
export function ShareAction(props) {
|
|
74
|
+
const t = useT();
|
|
75
|
+
const testId = props.testId ?? "listings-share";
|
|
76
|
+
const [open, setOpen] = useState(false);
|
|
77
|
+
const share = useShare({
|
|
78
|
+
url: props.url,
|
|
79
|
+
title: props.title,
|
|
80
|
+
text: props.text,
|
|
81
|
+
...(props.onShared !== undefined ? { onShared: props.onShared } : {}),
|
|
82
|
+
});
|
|
83
|
+
const label = t(LISTINGS_I18N_KEYS.shareAction);
|
|
84
|
+
const circle = props.shape === "circle";
|
|
85
|
+
const notice = useNotice();
|
|
86
|
+
const copied = share.copied;
|
|
87
|
+
// The toast, and it is the AMPLIFIER of the sentence already standing in
|
|
88
|
+
// the menu — never the only copy of it. See `notice.ts`.
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (copied)
|
|
91
|
+
notice(t(LISTINGS_I18N_KEYS.shareCopied));
|
|
92
|
+
}, [copied, notice, t]);
|
|
93
|
+
const onNetwork = useCallback((channel) => {
|
|
94
|
+
share.report(channel);
|
|
95
|
+
setOpen(false);
|
|
96
|
+
}, [share]);
|
|
97
|
+
/**
|
|
98
|
+
* The button itself.
|
|
99
|
+
*
|
|
100
|
+
* In the MENU arm it carries no `onClick` of its own: the `Popover` clones
|
|
101
|
+
* its own click handler onto this child, and a second handler toggling the
|
|
102
|
+
* same controlled state would open the menu and close it again inside one
|
|
103
|
+
* gesture — the defect `GateReasonPopover` documents at length, reached
|
|
104
|
+
* from the other direction.
|
|
105
|
+
*/
|
|
106
|
+
const trigger = (_jsx(Button, { ...(circle ? { shape: "circle" } : {}), className: LISTING_ACTION_CLASS, "aria-label": label, "data-testid": testId, "data-share-mode": share.native ? "native" : "menu", "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", icon: _jsx(ShareIcon, {}), ...(props.style !== undefined ? { style: props.style } : {}), ...(share.native ? { onClick: share.shareNatively } : {}), children: circle ? null : (_jsx("span", { className: LISTING_ACTION_LABEL_CLASS, children: label })) }));
|
|
107
|
+
const sheet = (_jsxs(_Fragment, { children: [_jsx("style", { href: LISTING_ACTIONS_STYLE_HREF, precedence: "default", children: actionRowCss() }), trigger] }));
|
|
108
|
+
// The platform's own sheet: no overlay of ours, nothing to lay out.
|
|
109
|
+
if (share.native)
|
|
110
|
+
return sheet;
|
|
111
|
+
const menu = (_jsxs(Flex, { vertical: true, gap: spacing[1], "data-testid": `${testId}-menu`, children: [_jsx(Button, { type: "text", className: LISTING_ACTION_CLASS, icon: _jsx(LinkIcon, {}), "data-testid": `${testId}-copy`, "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", onClick: share.copy, children: t(LISTINGS_I18N_KEYS.shareCopy) }), share.copied ? (_jsx(Typography.Text, { type: "success", "aria-live": "polite", "data-testid": `${testId}-copied`, children: t(LISTINGS_I18N_KEYS.shareCopied) })) : null, share.copyFailed ? (_jsx(ErrorAlert, { testId: `${testId}-copy-error`, message: t(LISTINGS_I18N_KEYS.shareCopyFailed), variant: "inline" })) : null, share.links.map((link) => (_jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", className: LISTING_ACTION_CLASS, "data-testid": `${testId}-${link.channel}`, "data-analytics": "none", "data-analytics-reason": "business action \u2014 host app wraps with its own tracked()", onClick: () => {
|
|
112
|
+
onNetwork(link.channel);
|
|
113
|
+
}, children: t(NETWORK_LABEL[link.channel]) }, link.channel)))] }));
|
|
114
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { href: LISTING_ACTIONS_STYLE_HREF, precedence: "default", children: actionRowCss() }), _jsx(Popover, { trigger: ["click"], open: open, onOpenChange: setOpen, content: menu, "data-testid": `${testId}-popover`, children: trigger })] }));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=ShareAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareAction.js","sourceRoot":"","sources":["../../src/default/ShareAction.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACxC,gRAAgR;AAChR,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,6CAA6C;AAC7C,MAAM,aAAa,GAA2C;IAC5D,QAAQ,EAAE,kBAAkB,CAAC,aAAa;IAC1C,QAAQ,EAAE,kBAAkB,CAAC,aAAa;IAC1C,EAAE,EAAE,kBAAkB,CAAC,OAAO;CAC/B,CAAC;AA+BF,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,gBAAgB,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC;QACrB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;IACxC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,yEAAyE;IACzE,yDAAyD;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM;YAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAExB,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,OAAqB,EAAQ,EAAE;QAC9B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF;;;;;;;;OAQG;IACH,MAAM,OAAO,GAAG,CACd,KAAC,MAAM,OACD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAChD,SAAS,EAAE,oBAAoB,gBACnB,KAAK,iBACJ,MAAM,qBAKF,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,oBAClC,MAAM,2BACC,8DAAyD,EAC/E,IAAI,EAAE,KAAC,SAAS,KAAG,KACf,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KACzD,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAEzD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACf,eAAM,SAAS,EAAE,0BAA0B,YAAG,KAAK,GAAQ,CAC5D,GACM,CACV,CAAC;IAEF,MAAM,KAAK,GAAG,CACZ,8BACE,gBAAO,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAC,SAAS,YAC1D,YAAY,EAAE,GACT,EACP,OAAO,IACP,CACJ,CAAC;IAEF,oEAAoE;IACpE,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE/B,MAAM,IAAI,GAAG,CACX,MAAC,IAAI,IAAC,QAAQ,QAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAe,GAAG,MAAM,OAAO,aAC3D,KAAC,MAAM,IACL,IAAI,EAAC,MAAM,EACX,SAAS,EAAE,oBAAoB,EAC/B,IAAI,EAAE,KAAC,QAAQ,KAAG,iBACL,GAAG,MAAM,OAAO,oBACd,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,KAAK,CAAC,IAAI,YAElB,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,GACzB,EAOR,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACd,KAAC,UAAU,CAAC,IAAI,IACd,IAAI,EAAC,SAAS,eACJ,QAAQ,iBACL,GAAG,MAAM,SAAS,YAE9B,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAClB,CACnB,CAAC,CAAC,CAAC,IAAI,EAKP,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,KAAC,UAAU,IACT,MAAM,EAAE,GAAG,MAAM,aAAa,EAC9B,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAC9C,OAAO,EAAC,QAAQ,GAChB,CACH,CAAC,CAAC,CAAC,IAAI,EAEP,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,YAEE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAE,oBAAoB,iBAClB,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,oBACzB,MAAM,2BACC,8DAAyD,EAC/E,OAAO,EAAE,GAAG,EAAE;oBACZ,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC,YAEA,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAZ1B,IAAI,CAAC,OAAO,CAaf,CACL,CAAC,IACG,CACR,CAAC;IAEF,OAAO,CACL,8BACE,gBAAO,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAC,SAAS,YAC1D,YAAY,EAAE,GACT,EAER,KAAC,OAAO,IACN,OAAO,EAAE,CAAC,OAAO,CAAC,EAClB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,IAAI,iBACA,GAAG,MAAM,UAAU,YAE/B,OAAO,GACA,IACT,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** The class every control in the PAGE cluster carries: the 44px floor. */
|
|
2
|
+
export declare const LISTING_ACTION_CLASS = "stapel-listing-action";
|
|
3
|
+
/**
|
|
4
|
+
* The class a CARD's control carries — the same floor, one tier smaller on a
|
|
5
|
+
* pointer device.
|
|
6
|
+
*
|
|
7
|
+
* A card heart is drawn forty to a screen on a desktop grid, where the
|
|
8
|
+
* reference classified uses a 36px target and a cursor hits it every time;
|
|
9
|
+
* the same glyph on a phone is a thumb target and goes back to 44. Two tiers
|
|
10
|
+
* rather than one number, because a 44px circle in the corner of a 267px
|
|
11
|
+
* photograph is a fifth of the picture's height on a desktop — measured
|
|
12
|
+
* against the reference (§23), which is why this is not simply
|
|
13
|
+
* {@link LISTING_ACTION_CLASS}.
|
|
14
|
+
*
|
|
15
|
+
* The GLYPH does not change size in either tier; only the box around it does.
|
|
16
|
+
*/
|
|
17
|
+
export declare const LISTING_CARD_ACTION_CLASS = "stapel-listing-card-action";
|
|
18
|
+
/** The class the cluster's row carries. */
|
|
19
|
+
export declare const LISTING_ACTIONS_CLASS = "stapel-listing-actions";
|
|
20
|
+
/**
|
|
21
|
+
* The class that pins the cluster to the trailing TOP corner of the media it
|
|
22
|
+
* is drawn over.
|
|
23
|
+
*
|
|
24
|
+
* Top-trailing is the one corner of a card gallery that is free: the dots own
|
|
25
|
+
* the bottom centre (`SkinCarousel`) and the "3 of 16" counter owns the
|
|
26
|
+
* bottom trailing corner (`cardGalleryCss`). Nothing here may move into
|
|
27
|
+
* either, which is why this is a named constant with a comment rather than
|
|
28
|
+
* two numbers picked per surface.
|
|
29
|
+
*/
|
|
30
|
+
export declare const LISTING_ACTIONS_OVERLAY_CLASS = "stapel-listing-actions-over";
|
|
31
|
+
/** The class on the WORD beside a glyph — painted on a desktop, dropped on a
|
|
32
|
+
* phone, where the same word is still the control's accessible name. */
|
|
33
|
+
export declare const LISTING_ACTION_LABEL_CLASS = "stapel-listing-action-label";
|
|
34
|
+
/** The `href` the hoisted action-row stylesheet is deduplicated by. */
|
|
35
|
+
export declare const LISTING_ACTIONS_STYLE_HREF = "stapel-listings-action-row";
|
|
36
|
+
/**
|
|
37
|
+
* The minimum touch target for every control in the cluster, in CSS pixels.
|
|
38
|
+
*
|
|
39
|
+
* Exported so a host laying out beside the cluster measures against the same
|
|
40
|
+
* number — and so `test/shareAction.test.tsx` asserts the rule carries THIS
|
|
41
|
+
* value rather than a literal that could drift from the token.
|
|
42
|
+
*/
|
|
43
|
+
export declare const LISTING_ACTION_HIT: number;
|
|
44
|
+
/**
|
|
45
|
+
* A CARD control's minimum target on a pointer device, in CSS pixels.
|
|
46
|
+
*
|
|
47
|
+
* The reference classified's own desktop measurement (§23). It is not on the
|
|
48
|
+
* token scale, and it is not meant to be: the scale carries a control HEIGHT
|
|
49
|
+
* (32) and a touch FLOOR (44), and this is the third thing — the smallest box
|
|
50
|
+
* a cursor reliably hits around a 16px glyph. Named, with the measurement,
|
|
51
|
+
* rather than typed into a stylesheet as `36`.
|
|
52
|
+
*
|
|
53
|
+
* On a phone the card control goes back to {@link LISTING_ACTION_HIT}: there
|
|
54
|
+
* is no such thing as a small touch target.
|
|
55
|
+
*/
|
|
56
|
+
export declare const LISTING_CARD_ACTION_HIT = 36;
|
|
57
|
+
export declare function actionRowCss(): string;
|
|
58
|
+
//# sourceMappingURL=actionRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionRow.d.ts","sourceRoot":"","sources":["../../src/default/actionRow.ts"],"names":[],"mappings":"AA6BA,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAC5D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AACtE,2CAA2C;AAC3C,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAC9D;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,gCAAgC,CAAC;AAC3E;wEACwE;AACxE,eAAO,MAAM,0BAA0B,gCAAgC,CAAC;AACxE,uEAAuE;AACvE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAiC,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,wBAAgB,YAAY,IAAI,MAAM,CA0CrC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The geometry of a listing's action row — the heart, the share button, and
|
|
3
|
+
* the rules that make both of them reachable with a thumb.
|
|
4
|
+
*
|
|
5
|
+
* Split out of `<ListingActions>` so `<ShareAction>` can carry the same class
|
|
6
|
+
* without the two modules importing each other, and so the numbers below are
|
|
7
|
+
* something a test can READ rather than something a rendered button implies.
|
|
8
|
+
*
|
|
9
|
+
* ── Why a class and not an inline style ───────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* Three of the four rules here cannot be written inline at all: a media query
|
|
12
|
+
* (the label that disappears on a phone), a descendant selector (the hit area
|
|
13
|
+
* of whatever element the skin registry substituted for antd's button), and
|
|
14
|
+
* `:focus-visible`. The fourth — the 44px floor — is written here with them so
|
|
15
|
+
* that "how big is this control" has ONE answer in this package instead of one
|
|
16
|
+
* per surface, which is how the SERP heart ended up 32px while the feed
|
|
17
|
+
* heart was 40 and neither was the number the platform guidelines ask for.
|
|
18
|
+
*
|
|
19
|
+
* ── 44 px, and where the number comes from ────────────────────────────────
|
|
20
|
+
*
|
|
21
|
+
* `controls["height-phone"]` — the token dictionary's own touch floor, the
|
|
22
|
+
* same value `SkinTheme` feeds antd as `controlHeight` on a phone (WCAG 2.5.8
|
|
23
|
+
* and both platform HIGs land on 44 CSS px). It is applied here as a MINIMUM
|
|
24
|
+
* on every viewport rather than only on a phone: these two controls are small
|
|
25
|
+
* glyphs pinned to the corner of a photograph, and a 32px circle at the edge
|
|
26
|
+
* of an image is a miss on a touchscreen laptop as surely as on a phone.
|
|
27
|
+
*/
|
|
28
|
+
import { breakpoints, controls, radii, spacing } from "@stapel/tokens";
|
|
29
|
+
/** The class every control in the PAGE cluster carries: the 44px floor. */
|
|
30
|
+
export const LISTING_ACTION_CLASS = "stapel-listing-action";
|
|
31
|
+
/**
|
|
32
|
+
* The class a CARD's control carries — the same floor, one tier smaller on a
|
|
33
|
+
* pointer device.
|
|
34
|
+
*
|
|
35
|
+
* A card heart is drawn forty to a screen on a desktop grid, where the
|
|
36
|
+
* reference classified uses a 36px target and a cursor hits it every time;
|
|
37
|
+
* the same glyph on a phone is a thumb target and goes back to 44. Two tiers
|
|
38
|
+
* rather than one number, because a 44px circle in the corner of a 267px
|
|
39
|
+
* photograph is a fifth of the picture's height on a desktop — measured
|
|
40
|
+
* against the reference (§23), which is why this is not simply
|
|
41
|
+
* {@link LISTING_ACTION_CLASS}.
|
|
42
|
+
*
|
|
43
|
+
* The GLYPH does not change size in either tier; only the box around it does.
|
|
44
|
+
*/
|
|
45
|
+
export const LISTING_CARD_ACTION_CLASS = "stapel-listing-card-action";
|
|
46
|
+
/** The class the cluster's row carries. */
|
|
47
|
+
export const LISTING_ACTIONS_CLASS = "stapel-listing-actions";
|
|
48
|
+
/**
|
|
49
|
+
* The class that pins the cluster to the trailing TOP corner of the media it
|
|
50
|
+
* is drawn over.
|
|
51
|
+
*
|
|
52
|
+
* Top-trailing is the one corner of a card gallery that is free: the dots own
|
|
53
|
+
* the bottom centre (`SkinCarousel`) and the "3 of 16" counter owns the
|
|
54
|
+
* bottom trailing corner (`cardGalleryCss`). Nothing here may move into
|
|
55
|
+
* either, which is why this is a named constant with a comment rather than
|
|
56
|
+
* two numbers picked per surface.
|
|
57
|
+
*/
|
|
58
|
+
export const LISTING_ACTIONS_OVERLAY_CLASS = "stapel-listing-actions-over";
|
|
59
|
+
/** The class on the WORD beside a glyph — painted on a desktop, dropped on a
|
|
60
|
+
* phone, where the same word is still the control's accessible name. */
|
|
61
|
+
export const LISTING_ACTION_LABEL_CLASS = "stapel-listing-action-label";
|
|
62
|
+
/** The `href` the hoisted action-row stylesheet is deduplicated by. */
|
|
63
|
+
export const LISTING_ACTIONS_STYLE_HREF = "stapel-listings-action-row";
|
|
64
|
+
/**
|
|
65
|
+
* The minimum touch target for every control in the cluster, in CSS pixels.
|
|
66
|
+
*
|
|
67
|
+
* Exported so a host laying out beside the cluster measures against the same
|
|
68
|
+
* number — and so `test/shareAction.test.tsx` asserts the rule carries THIS
|
|
69
|
+
* value rather than a literal that could drift from the token.
|
|
70
|
+
*/
|
|
71
|
+
export const LISTING_ACTION_HIT = controls["height-phone"];
|
|
72
|
+
/**
|
|
73
|
+
* A CARD control's minimum target on a pointer device, in CSS pixels.
|
|
74
|
+
*
|
|
75
|
+
* The reference classified's own desktop measurement (§23). It is not on the
|
|
76
|
+
* token scale, and it is not meant to be: the scale carries a control HEIGHT
|
|
77
|
+
* (32) and a touch FLOOR (44), and this is the third thing — the smallest box
|
|
78
|
+
* a cursor reliably hits around a 16px glyph. Named, with the measurement,
|
|
79
|
+
* rather than typed into a stylesheet as `36`.
|
|
80
|
+
*
|
|
81
|
+
* On a phone the card control goes back to {@link LISTING_ACTION_HIT}: there
|
|
82
|
+
* is no such thing as a small touch target.
|
|
83
|
+
*/
|
|
84
|
+
export const LISTING_CARD_ACTION_HIT = 36;
|
|
85
|
+
export function actionRowCss() {
|
|
86
|
+
const action = `.${LISTING_ACTION_CLASS}`;
|
|
87
|
+
const cardAction = `.${LISTING_CARD_ACTION_CLASS}`;
|
|
88
|
+
const row = `.${LISTING_ACTIONS_CLASS}`;
|
|
89
|
+
const over = `.${LISTING_ACTIONS_OVERLAY_CLASS}`;
|
|
90
|
+
const label = `.${LISTING_ACTION_LABEL_CLASS}`;
|
|
91
|
+
const hit = String(LISTING_ACTION_HIT);
|
|
92
|
+
const phone = `(max-width:${String(breakpoints.tablet - 1)}px)`;
|
|
93
|
+
return [
|
|
94
|
+
// The floor. `min-*` rather than `width`/`height`: a share button with a
|
|
95
|
+
// word in it is wider than 44px and must stay so, and antd's own
|
|
96
|
+
// `controlHeight` already reaches the height on a phone — this is the
|
|
97
|
+
// guarantee for every OTHER viewport and for a host-registered button
|
|
98
|
+
// that never read the antd token at all.
|
|
99
|
+
`${action}{min-inline-size:${hit}px;min-block-size:${hit}px;` +
|
|
100
|
+
`display:inline-flex;align-items:center;justify-content:center}`,
|
|
101
|
+
// A card's control: one tier smaller where there is a cursor, the same
|
|
102
|
+
// 44px where there is a thumb. See LISTING_CARD_ACTION_HIT.
|
|
103
|
+
`${cardAction}{min-inline-size:${String(LISTING_CARD_ACTION_HIT)}px;` +
|
|
104
|
+
`min-block-size:${String(LISTING_CARD_ACTION_HIT)}px;` +
|
|
105
|
+
`display:inline-flex;align-items:center;justify-content:center}`,
|
|
106
|
+
`@media ${phone}{${cardAction}{min-inline-size:${hit}px;min-block-size:${hit}px}}`,
|
|
107
|
+
// The cluster. `align-items:flex-end` so a blocked heart's reason — the
|
|
108
|
+
// one thing here that can be two lines — stacks against the same edge
|
|
109
|
+
// instead of pushing the controls inwards (the arrangement
|
|
110
|
+
// `<ListingFeedCard>` already ships).
|
|
111
|
+
`${row}{display:flex;align-items:flex-end;gap:${String(spacing[2])}px}`,
|
|
112
|
+
// Over a photograph. `z-index:2` puts it above the counter's `1`; the two
|
|
113
|
+
// never meet anyway (top-trailing against bottom-trailing) and the layer
|
|
114
|
+
// is stated so a future third overlay has an order to join.
|
|
115
|
+
`${over}{position:absolute;inset-block-start:${String(spacing[2])}px;` +
|
|
116
|
+
`inset-inline-end:${String(spacing[2])}px;z-index:2;` +
|
|
117
|
+
`flex-direction:column;align-items:flex-end;` +
|
|
118
|
+
`border-radius:${String(radii.full)}px}`,
|
|
119
|
+
// THE WORD DISAPPEARS ON A PHONE, THE NAME NEVER DOES. Both controls
|
|
120
|
+
// carry their `aria-label` in every arm, so what a screen reader
|
|
121
|
+
// announces is identical at 390px and at 1440px; what changes is whether
|
|
122
|
+
// there is room to paint the word as well. A viewport query rather than a
|
|
123
|
+
// container one: this is chrome, not a layout that has to fit a track,
|
|
124
|
+
// and the question really is "is this a phone".
|
|
125
|
+
`@media ${phone}{${label}{display:none}}`,
|
|
126
|
+
].join("");
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=actionRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionRow.js","sourceRoot":"","sources":["../../src/default/actionRow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEvE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAC5D;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AACtE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAC9D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAC3E;wEACwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,6BAA6B,CAAC;AACxE,uEAAuE;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAW,QAAQ,CAAC,cAAc,CAAC,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAE1C,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,yBAAyB,EAAE,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,qBAAqB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,6BAA6B,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,0BAA0B,EAAE,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,cAAc,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO;QACL,yEAAyE;QACzE,iEAAiE;QACjE,sEAAsE;QACtE,sEAAsE;QACtE,yCAAyC;QACzC,GAAG,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,KAAK;YAC3D,gEAAgE;QAClE,uEAAuE;QACvE,4DAA4D;QAC5D,GAAG,UAAU,oBAAoB,MAAM,CAAC,uBAAuB,CAAC,KAAK;YACnE,kBAAkB,MAAM,CAAC,uBAAuB,CAAC,KAAK;YACtD,gEAAgE;QAClE,UAAU,KAAK,IAAI,UAAU,oBAAoB,GAAG,qBAAqB,GAAG,MAAM;QAClF,wEAAwE;QACxE,sEAAsE;QACtE,2DAA2D;QAC3D,sCAAsC;QACtC,GAAG,GAAG,0CAA0C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,4DAA4D;QAC5D,GAAG,IAAI,wCAAwC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;YACpE,oBAAoB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe;YACrD,6CAA6C;YAC7C,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;QAC1C,qEAAqE;QACrE,iEAAiE;QACjE,yEAAyE;QACzE,0EAA0E;QAC1E,uEAAuE;QACvE,gDAAgD;QAChD,UAAU,KAAK,IAAI,KAAK,iBAAiB;KAC1C,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { PointerEvent as ReactPointerEvent, RefObject } from "react";
|
|
2
2
|
/** The class the gallery's own box carries — see {@link cardGalleryCss}. */
|
|
3
3
|
export declare const CARD_GALLERY_CLASS = "stapel-listing-gallery";
|
|
4
|
+
/** The class the "3 of 16" pill carries — see {@link cardGalleryCss}. */
|
|
5
|
+
export declare const CARD_GALLERY_COUNTER_CLASS = "stapel-listing-gallery-count";
|
|
4
6
|
/** The `href` the hoisted gallery stylesheet is deduplicated by. */
|
|
5
7
|
export declare const CARD_GALLERY_STYLE_HREF = "stapel-listings-card-gallery";
|
|
6
8
|
/** The environment a hover scrub is allowed in, and the only one. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cardGallery.d.ts","sourceRoot":"","sources":["../../src/default/cardGallery.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,YAAY,IAAI,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"cardGallery.d.ts","sourceRoot":"","sources":["../../src/default/cardGallery.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,YAAY,IAAI,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG1E,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,yEAAyE;AACzE,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AACzE,oEAAoE;AACpE,eAAO,MAAM,uBAAuB,iCAAiC,CAAC;AAEtE,qEAAqE;AACrE,eAAO,MAAM,WAAW,uCAAuC,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAK5D;AAED;;;qDAGqD;AACrD,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,IAAI,OAAO,CA0BxC;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD;6DACyD;IACzD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC3E,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC3E,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACzE,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC7E;AAoBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAgIzD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CA2CvC"}
|
|
@@ -45,8 +45,11 @@
|
|
|
45
45
|
* anchor with one accessible name.
|
|
46
46
|
*/
|
|
47
47
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
48
|
+
import { fontSize, radii, spacing } from "@stapel/tokens";
|
|
48
49
|
/** The class the gallery's own box carries — see {@link cardGalleryCss}. */
|
|
49
50
|
export const CARD_GALLERY_CLASS = "stapel-listing-gallery";
|
|
51
|
+
/** The class the "3 of 16" pill carries — see {@link cardGalleryCss}. */
|
|
52
|
+
export const CARD_GALLERY_COUNTER_CLASS = "stapel-listing-gallery-count";
|
|
50
53
|
/** The `href` the hoisted gallery stylesheet is deduplicated by. */
|
|
51
54
|
export const CARD_GALLERY_STYLE_HREF = "stapel-listings-card-gallery";
|
|
52
55
|
/** The environment a hover scrub is allowed in, and the only one. */
|
|
@@ -297,7 +300,35 @@ export function useCardGallery(count) {
|
|
|
297
300
|
*/
|
|
298
301
|
export function cardGalleryCss() {
|
|
299
302
|
const box = `.${CARD_GALLERY_CLASS}`;
|
|
303
|
+
const counter = `.${CARD_GALLERY_COUNTER_CLASS}`;
|
|
300
304
|
return [
|
|
305
|
+
// The counter is placed against this box, so the box has to be the
|
|
306
|
+
// containing block. Nothing else about the gallery changes: a `relative`
|
|
307
|
+
// with no offsets moves no pixel of what is already in it.
|
|
308
|
+
`${box}{position:relative}`,
|
|
309
|
+
// "3 of 16", bottom-TRAILING corner — the dots own the bottom centre
|
|
310
|
+
// (`SkinCarousel`: `inset-inline:0; justify-content:center`) and two
|
|
311
|
+
// indicators fighting for one spot is worse than neither.
|
|
312
|
+
//
|
|
313
|
+
// `pointer-events:none` is load-bearing rather than tidy: this box owns
|
|
314
|
+
// the hover-scrub and the swipe, and an element that swallowed a pointer
|
|
315
|
+
// would make one corner of every card's photograph dead to both gestures.
|
|
316
|
+
//
|
|
317
|
+
// A FIXED scrim and white text, not a theme role, and this is the one
|
|
318
|
+
// place in the package where that is the right answer: the pill sits on
|
|
319
|
+
// an arbitrary PHOTOGRAPH, which is neither light nor dark, so a value
|
|
320
|
+
// that followed the page's theme would be unreadable on half the photos
|
|
321
|
+
// in either one.
|
|
322
|
+
`${counter}{position:absolute;inset-block-end:${String(spacing[2])}px;` +
|
|
323
|
+
`inset-inline-end:${String(spacing[2])}px;z-index:1;pointer-events:none;` +
|
|
324
|
+
`padding:${String(spacing[1] / 2)}px ${String(spacing[2])}px;` +
|
|
325
|
+
`border-radius:${String(radii.full)}px;` +
|
|
326
|
+
`background:rgba(0,0,0,0.55);color:#fff;` +
|
|
327
|
+
`font-size:${String(fontSize.xs.fontSize)}px;` +
|
|
328
|
+
`line-height:${String(fontSize.xs.lineHeight)}px;` +
|
|
329
|
+
// A counter whose digits change width makes the pill twitch on every
|
|
330
|
+
// swipe.
|
|
331
|
+
`font-variant-numeric:tabular-nums}`,
|
|
301
332
|
// THE VERTICAL AXIS IS THE BROWSER'S, and is not negotiable: a card is a
|
|
302
333
|
// small box in a long feed, and the one unacceptable outcome of a gallery
|
|
303
334
|
// gesture is a page that will not scroll. `pan-y` says so at the platform
|