@stapel/search-react 0.12.0 → 0.13.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 +58 -0
- package/MODULE.md +7 -3
- package/dist/default/SearchResultCard.d.ts.map +1 -1
- package/dist/default/SearchResultCard.js +83 -37
- package/dist/default/SearchResultCard.js.map +1 -1
- package/dist/default/cardPhotos.d.ts +65 -0
- package/dist/default/cardPhotos.d.ts.map +1 -0
- package/dist/default/cardPhotos.js +127 -0
- package/dist/default/cardPhotos.js.map +1 -0
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +3 -0
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/keys.d.ts +10 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +13 -0
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +3 -0
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/model/runtime.d.ts +40 -3
- package/dist/model/runtime.d.ts.map +1 -1
- package/dist/model/runtime.js +2 -1
- package/dist/model/runtime.js.map +1 -1
- package/llms.txt +2 -2
- package/manifest.json +12 -3
- package/nav-manifest.json +1 -1
- package/package.json +3 -3
- package/src/analytics/generated/events.json +1 -1
- package/src/default/SearchResultCard.tsx +157 -71
- package/src/default/cardPhotos.ts +195 -0
- package/src/i18n/es.ts +3 -0
- package/src/i18n/keys.ts +13 -0
- package/src/i18n/ru.ts +3 -0
- package/src/index.ts +1 -0
- package/src/model/runtime.ts +43 -4
package/dist/i18n/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,YAAY,EAAE,sBAAsB;IAEpC,4EAA4E;IAC5E,YAAY,EAAE,sBAAsB;IACpC,cAAc,EAAE,wBAAwB;IACxC,iBAAiB,EAAE,4BAA4B;IAC/C,YAAY,EAAE,sBAAsB;IACpC,YAAY,EAAE,sBAAsB;IACpC;;;;;;;OAOG;IACH,uBAAuB,EAAE,kCAAkC;IAC3D;kEAC8D;IAC9D,mBAAmB,EAAE,+BAA+B;IACpD,sEAAsE;IACtE,iBAAiB,EAAE,4BAA4B;IAC/C,aAAa,EAAE,wBAAwB;IACvC,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,qBAAqB;IAClC,mBAAmB,EAAE,+BAA+B;IACpD,qBAAqB,EAAE,iCAAiC;IACxD,yDAAyD;IACzD,qBAAqB,EAAE,gCAAgC;IACvD,eAAe,EAAE,yBAAyB;IAC1C,mBAAmB,EAAE,8BAA8B;IACnD,iBAAiB,EAAE,4BAA4B;IAC/C,eAAe,EAAE,yBAAyB;IAC1C,WAAW,EAAE,qBAAqB;IAClC,yEAAyE;IACzE,eAAe,EAAE,0BAA0B;
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/ru.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAqKhC,CAAC;AAEF;yDACyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE7D"}
|
package/dist/i18n/ru.js
CHANGED
|
@@ -56,6 +56,9 @@ export const searchI18nBundleRu = {
|
|
|
56
56
|
"search.results.untitled": "Без названия",
|
|
57
57
|
"search.results.open": "Открыть",
|
|
58
58
|
"search.results.image_alt": "Фото: {title}",
|
|
59
|
+
"search.results.photo_alt": "Фото {index} из {total}: {title}",
|
|
60
|
+
"search.results.photos": "Фотографии",
|
|
61
|
+
"search.results.photo_unavailable": "Фото недоступно",
|
|
59
62
|
"search.box.label": "Поиск",
|
|
60
63
|
"search.box.placeholder": "Что ищете?",
|
|
61
64
|
"search.box.submit": "Найти",
|
package/dist/i18n/ru.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,GAAG,mBAAmB;IAEtB,sBAAsB,EAAE,iCAAiC;IAEzD,sBAAsB,EAAE,YAAY;IACpC,wBAAwB,EAAE,OAAO;IACjC,4BAA4B,EAAE,6BAA6B;IAC3D,sBAAsB,EAAE,qCAAqC;IAC7D,sBAAsB,EAAE,WAAW;IACnC,yEAAyE;IACzE,4DAA4D;IAC5D,sCAAsC,EAAE,6BAA6B;IACrE,sCAAsC,EAAE,6BAA6B;IACrE,uCAAuC,EAAE,6BAA6B;IACtE,wCAAwC,EAAE,6BAA6B;IACvE,mCAAmC,EAAE,qBAAqB;IAC1D,mCAAmC,EAAE,qBAAqB;IAC1D,oCAAoC,EAAE,qBAAqB;IAC3D,qCAAqC,EAAE,qBAAqB;IAC5D,gCAAgC,EAAE,oBAAoB;IACtD,gCAAgC,EAAE,oBAAoB;IACtD,iCAAiC,EAAE,oBAAoB;IACvD,kCAAkC,EAAE,oBAAoB;IACxD,wBAAwB,EAAE,SAAS;IACnC,qBAAqB,EAAE,oBAAoB;IAC3C,qBAAqB,EAAE,qBAAqB;IAC5C,+BAA+B,EAAE,wBAAwB;IACzD,iCAAiC,EAAE,qBAAqB;IACxD,gCAAgC,EAC9B,uFAAuF;IACzF,yBAAyB,EAAE,cAAc;IACzC,8BAA8B,EAC5B,+GAA+G;IACjH,4BAA4B,EAAE,gBAAgB;IAC9C,yBAAyB,EAAE,cAAc;IACzC,qBAAqB,EAAE,SAAS;IAChC,0BAA0B,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export { RANGE_FEATURE_TYPES, buildRangeGroups, coreRangeLabelKey, isRangeFeatur
|
|
|
54
54
|
export type { BuildRangeGroupsInput, RangeGroup } from "./state/ranges.js";
|
|
55
55
|
export { SEARCH_BOX_DEBOUNCE_MS, SEARCH_BOX_SUGGEST_DEBOUNCE_MS, SEARCH_COUNT_DEBOUNCE_MS, SEARCH_COUNT_PAGE_SIZE, SEARCH_DEFAULT_PAGE_SIZE, SEARCH_MAX_PAGE_SIZE, SEARCH_QUERY_MAX_CHARS, SUGGEST_MAX_LIMIT, SUGGEST_MIN_CHARS, } from "./state/limits.js";
|
|
56
56
|
export { createSearchRuntime } from "./model/runtime.js";
|
|
57
|
-
export type { SearchRuntime, CreateSearchRuntimeOptions, } from "./model/runtime.js";
|
|
57
|
+
export type { SearchRuntime, SearchImageResolver, CreateSearchRuntimeOptions, } from "./model/runtime.js";
|
|
58
58
|
export { SearchRuntimeContext, useSearchRuntime, useSearchApi, useSearchAnalytics, } from "./model/context.js";
|
|
59
59
|
export { searchQueryKeys } from "./model/queryKeys.js";
|
|
60
60
|
export type { SearchQueryKeyParams } from "./model/queryKeys.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EACL,YAAY,EACZ,2BAA2B,EAC3B,uBAAuB,EACvB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAsBxB,gFAAgF;AAChF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGxE,OAAO,EACL,YAAY,EACZ,2BAA2B,EAC3B,uBAAuB,EACvB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAsBxB,gFAAgF;AAChF,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,GACb,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAMzD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEtF,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMxF,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAKlE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAM/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,gFAAgF;AAChF,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AAGxB,gFAAgF;AAChF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC"}
|
package/dist/model/runtime.d.ts
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
import type { CreateModuleRuntimeOptions, ModuleRuntime } from "@stapel/core";
|
|
2
|
+
import type { StapelImage } from "@stapel/image";
|
|
2
3
|
import type { SearchApi } from "../api/searchApi.js";
|
|
4
|
+
/**
|
|
5
|
+
* Turn a stored CDN reference into something renderable.
|
|
6
|
+
*
|
|
7
|
+
* ── Why this is a seam and not a URL builder ───────────────────────────────
|
|
8
|
+
*
|
|
9
|
+
* A search card's photo fields (`image`, `images`) hold what the indexed doc
|
|
10
|
+
* type stores, and in this fleet that is an OPAQUE `<type>/<hash>` reference —
|
|
11
|
+
* the same unit `Listing.images` holds. No contract here resolves a stranger's
|
|
12
|
+
* reference: stapel-cdn's `file/exists/` is owner-scoped, so
|
|
13
|
+
* `@stapel/cdn-react`'s `useCdnRef` answers for a person's OWN draft and can
|
|
14
|
+
* never render somebody else's gallery. A pair that guessed `${base}/${ref}`
|
|
15
|
+
* would be writing a contract nobody agreed to, and it would break the first
|
|
16
|
+
* deployment that signs its media paths.
|
|
17
|
+
*
|
|
18
|
+
* So the deployment hands its own knowledge in once, exactly as
|
|
19
|
+
* `@stapel/listings-react`'s `ListingImageResolver` does — one seam, one
|
|
20
|
+
* spelling, and a container that already has a resolver passes the SAME
|
|
21
|
+
* function to both runtimes.
|
|
22
|
+
*
|
|
23
|
+
* A `StapelImage` rather than a string is what buys the variant ladder: with
|
|
24
|
+
* `variants` populated, `@stapel/image`'s `<Image>` measures the slot and
|
|
25
|
+
* picks a tier. A resolver with nothing for a reference returns `undefined`,
|
|
26
|
+
* and the skin then says "photo unavailable" instead of drawing a broken
|
|
27
|
+
* `<img>`.
|
|
28
|
+
*/
|
|
29
|
+
export type SearchImageResolver = (ref: string) => StapelImage | undefined;
|
|
3
30
|
/**
|
|
4
31
|
* The wired search runtime — core's `ModuleRuntime` bound to this pair's API
|
|
5
32
|
* (slim wave §21/S2). The returned `client` is what the host injects into
|
|
@@ -10,7 +37,10 @@ import type { SearchApi } from "../api/searchApi.js";
|
|
|
10
37
|
* storefront's catalogue, category and search pages need nothing but:
|
|
11
38
|
*
|
|
12
39
|
* ```tsx
|
|
13
|
-
* const runtime = createSearchRuntime({
|
|
40
|
+
* const runtime = createSearchRuntime({
|
|
41
|
+
* baseUrl: "/search/api/v1/",
|
|
42
|
+
* resolveImage: (ref) => myCdn.describe(ref),
|
|
43
|
+
* });
|
|
14
44
|
* <SearchProvider runtime={runtime}>…</SearchProvider>
|
|
15
45
|
* ```
|
|
16
46
|
*
|
|
@@ -19,7 +49,14 @@ import type { SearchApi } from "../api/searchApi.js";
|
|
|
19
49
|
* calls carry it — this pair neither requires nor waits for one, which is why
|
|
20
50
|
* its read hooks are deliberately not gated on `useActiveSessionReady`.
|
|
21
51
|
*/
|
|
22
|
-
export
|
|
23
|
-
|
|
52
|
+
export interface SearchRuntime extends ModuleRuntime<SearchApi> {
|
|
53
|
+
/** See {@link SearchImageResolver}. Absent = a card that stores references
|
|
54
|
+
* draws the placeholder and names the reason. */
|
|
55
|
+
readonly resolveImage: SearchImageResolver | undefined;
|
|
56
|
+
}
|
|
57
|
+
export interface CreateSearchRuntimeOptions extends CreateModuleRuntimeOptions {
|
|
58
|
+
/** See {@link SearchImageResolver}. */
|
|
59
|
+
readonly resolveImage?: SearchImageResolver;
|
|
60
|
+
}
|
|
24
61
|
export declare function createSearchRuntime(options: CreateSearchRuntimeOptions): SearchRuntime;
|
|
25
62
|
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/model/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/model/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,aAAc,SAAQ,aAAa,CAAC,SAAS,CAAC;IAC7D;qDACiD;IACjD,QAAQ,CAAC,YAAY,EAAE,mBAAmB,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,0BAA2B,SAAQ,0BAA0B;IAC5E,uCAAuC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,0BAA0B,GAClC,aAAa,CAGf"}
|
package/dist/model/runtime.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createModuleRuntime } from "@stapel/core";
|
|
2
2
|
import { createSearchApi } from "../api/searchApi.js";
|
|
3
3
|
export function createSearchRuntime(options) {
|
|
4
|
-
|
|
4
|
+
const base = createModuleRuntime((client) => createSearchApi(client), options);
|
|
5
|
+
return { ...base, resolveImage: options.resolveImage };
|
|
5
6
|
}
|
|
6
7
|
//# sourceMappingURL=runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/model/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/model/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA+DtD,MAAM,UAAU,mBAAmB,CACjC,OAAmC;IAEnC,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/E,OAAO,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;AACzD,CAAC"}
|
package/llms.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @stapel/search-react 0.
|
|
1
|
+
# @stapel/search-react 0.13.0
|
|
2
2
|
|
|
3
3
|
Headless React flow pair for stapel-search (contract >=0.7 <0.8) — business + state, zero visual opinion.
|
|
4
4
|
Built on @stapel/core: typed client + StapelApiError envelope, auth token refresh,
|
|
@@ -86,7 +86,7 @@ const { tracked } = useTracked();
|
|
|
86
86
|
- search.page-size-select → <PageSizeSelect> [ladder|off-ladder] demo/PageSizeSelect.demo.tsx
|
|
87
87
|
- search.range-filter-row → <RangeFilterRow> [untouched|applied] demo/RangeFilterRow.demo.tsx
|
|
88
88
|
- search.ranking-pane → <RankingDisclosurePane> [desktop|phone] demo/RankingDisclosurePane.demo.tsx
|
|
89
|
-
- search.result-card → <SearchResultCard> [promoted|plain] demo/SearchResultCard.demo.tsx
|
|
89
|
+
- search.result-card → <SearchResultCard> [gallery|promoted|unresolved|plain] demo/SearchResultCard.demo.tsx
|
|
90
90
|
- search.results-pane → <SearchResultsPane> [desktop|phone|empty] demo/SearchResultsPane.demo.tsx
|
|
91
91
|
- search.sort-select → <SortSelect> [no-centre|with-centre] demo/SortSelect.demo.tsx
|
|
92
92
|
- search.url-issue-notice → <UrlIssueNotice> [two-issues|one-issue] demo/UrlIssueNotice.demo.tsx
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
|
|
3
3
|
"package": "@stapel/search-react",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.13.0",
|
|
5
5
|
"backend": {
|
|
6
6
|
"module": "stapel-search",
|
|
7
7
|
"contract": ">=0.7 <0.8"
|
|
@@ -586,16 +586,21 @@
|
|
|
586
586
|
{
|
|
587
587
|
"id": "search.result-card",
|
|
588
588
|
"title": "Result card",
|
|
589
|
-
"description": "The default card a doc type gets for free:
|
|
589
|
+
"description": "The default card a doc type gets for free: the card's whole photo gallery as a swipeable strip (references resolved through the runtime's resolveImage seam and drawn by @stapel/image, so the 4:3 well lands before the network does), the title, the price with its currency, the location and distance — and the promoted marking painted from a token role rather than an antd preset, with its explanation as ordinary text beneath it.",
|
|
590
590
|
"component": "SearchResultCard",
|
|
591
591
|
"tokens": [
|
|
592
592
|
"warning-bg",
|
|
593
593
|
"warning-on",
|
|
594
594
|
"warning-border",
|
|
595
|
-
"surface-sunken"
|
|
595
|
+
"surface-sunken",
|
|
596
|
+
"text-muted",
|
|
597
|
+
"border",
|
|
598
|
+
"focus-ring"
|
|
596
599
|
],
|
|
597
600
|
"variants": [
|
|
601
|
+
"gallery",
|
|
598
602
|
"promoted",
|
|
603
|
+
"unresolved",
|
|
599
604
|
"plain"
|
|
600
605
|
],
|
|
601
606
|
"source": "demo/SearchResultCard.demo.tsx"
|
|
@@ -801,6 +806,9 @@
|
|
|
801
806
|
"search.results.loading",
|
|
802
807
|
"search.results.next",
|
|
803
808
|
"search.results.open",
|
|
809
|
+
"search.results.photo_alt",
|
|
810
|
+
"search.results.photo_unavailable",
|
|
811
|
+
"search.results.photos",
|
|
804
812
|
"search.results.prev",
|
|
805
813
|
"search.results.promoted",
|
|
806
814
|
"search.results.promoted_hint",
|
|
@@ -937,6 +945,7 @@
|
|
|
937
945
|
"SearchGeoBox",
|
|
938
946
|
"SearchGeoCenter",
|
|
939
947
|
"SearchI18nKey",
|
|
948
|
+
"SearchImageResolver",
|
|
940
949
|
"SearchItem",
|
|
941
950
|
"SearchPageInfo",
|
|
942
951
|
"SearchParamsAdapter",
|
package/nav-manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stapel/search-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "Headless React pair for stapel-search: a typed query client, TanStack Query hooks, and a URL-first state codec that makes a search shareable by construction (filters, ranges, geo, sort and the keyset cursor all live in the query string). Drill-down facets rendered with their remaining counts and with the server's own honesty flags — approximate, skipped, degraded — never swallowed; keyset pagination with the window refusal named; DSA Art. 26 `promoted` marking carried into every card slot and the P2B Art. 5 ranking disclosure exposed as data. Zero visual opinion in the main entry; an opt-in /default subpath ships the antd skin, and /router binds the codec to react-router's useSearchParams.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
"limit": "10.5 KB"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
|
-
"name": "default — the antd skin (query box + a typeahead that offers CATEGORY destinations with their live counts, filters incl. ranges/geo/category slots + the phone chip row with its leading category chip and the location summary row, results incl. the view switch, ranking) must stay out of the main bundle",
|
|
60
|
+
"name": "default — the antd skin (query box + a typeahead that offers CATEGORY destinations with their live counts, filters incl. ranges/geo/category slots + the phone chip row with its leading category chip and the location summary row, results incl. the view switch, the card photo GALLERY as a SkinCarousel strip, ranking) must stay out of the main bundle",
|
|
61
61
|
"path": "dist/default/index.js",
|
|
62
|
-
"limit": "
|
|
62
|
+
"limit": "20 KB"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
"name": "router — the react-router binding is opt-in; the main entry must never pull a router",
|
|
@@ -18,11 +18,14 @@
|
|
|
18
18
|
*
|
|
19
19
|
* ── Two things this card used to get wrong ────────────────────────────────
|
|
20
20
|
*
|
|
21
|
-
* 1. **It
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
21
|
+
* 1. **It read a photo shape nothing in this fleet emits.** `card.image` was
|
|
22
|
+
* read as an object with a `url` key and `card.image_url` as the fallback;
|
|
23
|
+
* what the fleet actually stores is a `<type>/<hash>` CDN reference, and
|
|
24
|
+
* where it does store an object that object carries `ref` + `variants[]`
|
|
25
|
+
* and no top-level `url`. So every consumer that did not pass its own
|
|
26
|
+
* `renderCard` got a card with no photo at all. `cardPhotos.ts` reads the
|
|
27
|
+
* real shapes, through the runtime's `resolveImage` seam, and the whole
|
|
28
|
+
* `images[]` gallery rather than one photo.
|
|
26
29
|
* 2. **The marking's EXPLANATION was in a `Tooltip`.** Touch has no hover, so
|
|
27
30
|
* on the device most of this traffic arrives from, the sentence the law is
|
|
28
31
|
* actually about was unreachable — the tag said "Promoted" and nothing on
|
|
@@ -47,11 +50,14 @@ import { useMemo } from "react";
|
|
|
47
50
|
import type { CSSProperties, ReactElement, ReactNode } from "react";
|
|
48
51
|
import { Card, Flex, Typography } from "antd";
|
|
49
52
|
import { Image } from "@stapel/image";
|
|
50
|
-
import
|
|
53
|
+
import { SkinCarousel } from "@stapel/tokens-antd/skin";
|
|
51
54
|
import { useFormat, useT } from "@stapel/core";
|
|
52
55
|
import type { Format } from "@stapel/core";
|
|
53
56
|
import { cssVar, fontSize, fontWeight, radii, spacing } from "@stapel/tokens";
|
|
54
57
|
import type { SearchItem } from "../api/types.js";
|
|
58
|
+
import { useSearchRuntime } from "../model/context.js";
|
|
59
|
+
import { readCardPhotos } from "./cardPhotos.js";
|
|
60
|
+
import type { CardPhotos } from "./cardPhotos.js";
|
|
55
61
|
import { SEARCH_I18N_KEYS } from "../i18n/keys.js";
|
|
56
62
|
|
|
57
63
|
/** What the card slot is handed. */
|
|
@@ -78,7 +84,11 @@ export const GENERIC_CARD_FIELDS: readonly string[] = [
|
|
|
78
84
|
"price",
|
|
79
85
|
"currency",
|
|
80
86
|
"location",
|
|
81
|
-
|
|
87
|
+
// The gallery, and the singular first photo the projection keeps beside it
|
|
88
|
+
// (`images[0]`). Both hold CDN references; see `cardPhotos.ts`. The old
|
|
89
|
+
// `image_url` is gone — no backend in this fleet ever wrote it.
|
|
90
|
+
"images",
|
|
91
|
+
"image",
|
|
82
92
|
"url",
|
|
83
93
|
];
|
|
84
94
|
|
|
@@ -150,41 +160,130 @@ const PROMOTED_TAG: CSSProperties = {
|
|
|
150
160
|
whiteSpace: "nowrap",
|
|
151
161
|
};
|
|
152
162
|
|
|
153
|
-
/**
|
|
154
|
-
|
|
163
|
+
/**
|
|
164
|
+
* The shape of one photo well, everywhere on this card. Declared once so the
|
|
165
|
+
* placeholder and the loaded photo cannot drift into two different crops, and
|
|
166
|
+
* so the well is on screen before the network answers.
|
|
167
|
+
*/
|
|
168
|
+
const CARD_PHOTO_ASPECT = "4 / 3";
|
|
169
|
+
|
|
170
|
+
/** The placeholder well: the box the photo would have occupied. */
|
|
171
|
+
const PHOTO_ABSENT: CSSProperties = {
|
|
172
|
+
display: "flex",
|
|
173
|
+
flexDirection: "column",
|
|
174
|
+
alignItems: "center",
|
|
175
|
+
justifyContent: "center",
|
|
176
|
+
gap: spacing[1],
|
|
155
177
|
width: "100%",
|
|
156
|
-
aspectRatio:
|
|
178
|
+
aspectRatio: CARD_PHOTO_ASPECT,
|
|
157
179
|
overflow: "hidden",
|
|
158
180
|
borderRadius: radii.md,
|
|
159
181
|
background: cssVar("surface-sunken"),
|
|
182
|
+
color: cssVar("text-muted"),
|
|
160
183
|
};
|
|
161
184
|
|
|
185
|
+
/** The slide's own fill — the strip's well owns the shape. */
|
|
186
|
+
const PHOTO_FILL: CSSProperties = { width: "100%", height: "100%" };
|
|
187
|
+
|
|
188
|
+
/** A camera outline in `currentColor` — no icon dependency, and it inherits
|
|
189
|
+
* the theme rather than carrying a colour. `aria-hidden` because the sentence
|
|
190
|
+
* beside it is the label. */
|
|
191
|
+
function CameraGlyph(): ReactElement {
|
|
192
|
+
return (
|
|
193
|
+
<svg
|
|
194
|
+
width="24"
|
|
195
|
+
height="24"
|
|
196
|
+
viewBox="0 0 24 24"
|
|
197
|
+
fill="none"
|
|
198
|
+
stroke="currentColor"
|
|
199
|
+
strokeWidth="1.5"
|
|
200
|
+
strokeLinecap="round"
|
|
201
|
+
strokeLinejoin="round"
|
|
202
|
+
aria-hidden="true"
|
|
203
|
+
>
|
|
204
|
+
<path d="M3 8.5A2.5 2.5 0 0 1 5.5 6h1.7l1.2-2h6.2l1.2 2h1.7A2.5 2.5 0 0 1 20 8.5v8A2.5 2.5 0 0 1 17.5 19h-11A2.5 2.5 0 0 1 4 16.5z" />
|
|
205
|
+
<circle cx="12" cy="12.5" r="3.2" />
|
|
206
|
+
</svg>
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
|
|
162
210
|
/**
|
|
163
|
-
*
|
|
211
|
+
* The card's photos — the whole gallery, as a swipeable strip.
|
|
212
|
+
*
|
|
213
|
+
* ── Why the strip is OUTSIDE the card's anchor ────────────────────────────
|
|
214
|
+
*
|
|
215
|
+
* `<SkinCarousel>` is a scroll container with its own tab stop, and a
|
|
216
|
+
* horizontal swipe that ends inside an `<a>` is a swipe the browser may
|
|
217
|
+
* deliver as a click. Inside the anchor, every attempt to look at photo two
|
|
218
|
+
* would navigate to the result — the defect that makes phone galleries
|
|
219
|
+
* unusable. So it sits above the anchor as a sibling, exactly as
|
|
220
|
+
* `<ListingSerpCard>` does it, and the anchor still covers everything a
|
|
221
|
+
* person reads.
|
|
164
222
|
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
223
|
+
* Three states, and they are three different facts. No photo FIELD at all —
|
|
224
|
+
* a doc type that indexes text — draws nothing, because reserving a 4:3 well
|
|
225
|
+
* for a corpus that has no photos is a hole in every row. A field with
|
|
226
|
+
* nothing behind it draws the well and says the photo is unavailable: that is
|
|
227
|
+
* usually an unwired `resolveImage`, and a sentence gets it fixed where an
|
|
228
|
+
* empty grey box does not. Anything else is the strip.
|
|
169
229
|
*/
|
|
170
|
-
function
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
230
|
+
function CardPhotoStrip(props: {
|
|
231
|
+
photos: CardPhotos;
|
|
232
|
+
title: string;
|
|
233
|
+
}): ReactElement | null {
|
|
234
|
+
const t = useT();
|
|
235
|
+
const { photos, title } = props;
|
|
236
|
+
if (photos.stored === 0) return null;
|
|
237
|
+
|
|
238
|
+
if (photos.images.length === 0) {
|
|
239
|
+
const caption = t(SEARCH_I18N_KEYS.resultsPhotoUnavailable);
|
|
240
|
+
return (
|
|
241
|
+
<div
|
|
242
|
+
role="img"
|
|
243
|
+
aria-label={caption}
|
|
244
|
+
data-testid="search-result-photo-absent"
|
|
245
|
+
style={PHOTO_ABSENT}
|
|
246
|
+
>
|
|
247
|
+
<CameraGlyph />
|
|
248
|
+
<Typography.Text type="secondary" style={{ fontSize: fontSize.xs.fontSize }}>
|
|
249
|
+
{caption}
|
|
250
|
+
</Typography.Text>
|
|
251
|
+
</div>
|
|
252
|
+
);
|
|
174
253
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
254
|
+
|
|
255
|
+
const total = photos.images.length;
|
|
256
|
+
// A one-photo strip gets neither a peek nor dots: the sliver of a next
|
|
257
|
+
// slide is an affordance for something that is there.
|
|
258
|
+
const many = total > 1;
|
|
259
|
+
return (
|
|
260
|
+
<SkinCarousel
|
|
261
|
+
label={t(SEARCH_I18N_KEYS.resultsPhotos)}
|
|
262
|
+
aspectRatio={CARD_PHOTO_ASPECT}
|
|
263
|
+
peek={many}
|
|
264
|
+
dots={many}
|
|
265
|
+
data-testid="search-result-photos"
|
|
266
|
+
>
|
|
267
|
+
{photos.images.map((image, index) => (
|
|
268
|
+
<Image
|
|
269
|
+
key={`${String(index)}:${image.url}`}
|
|
270
|
+
meta={image}
|
|
271
|
+
alt={
|
|
272
|
+
many
|
|
273
|
+
? t(SEARCH_I18N_KEYS.resultsPhotoAlt, {
|
|
274
|
+
index: index + 1,
|
|
275
|
+
total,
|
|
276
|
+
title,
|
|
277
|
+
})
|
|
278
|
+
: t(SEARCH_I18N_KEYS.resultsImageAlt, { title })
|
|
279
|
+
}
|
|
280
|
+
fit="cover"
|
|
281
|
+
data-testid="search-result-photo"
|
|
282
|
+
style={PHOTO_FILL}
|
|
283
|
+
/>
|
|
284
|
+
))}
|
|
285
|
+
</SkinCarousel>
|
|
286
|
+
);
|
|
188
287
|
}
|
|
189
288
|
|
|
190
289
|
/**
|
|
@@ -208,6 +307,7 @@ export function SearchResultCard(props: SearchCardProps): ReactElement {
|
|
|
208
307
|
const t = useT();
|
|
209
308
|
const format = useFormat();
|
|
210
309
|
const card = props.item.card;
|
|
310
|
+
const resolve = useSearchRuntime().resolveImage;
|
|
211
311
|
const title = text(card["title"]) ?? t(SEARCH_I18N_KEYS.resultsUntitled);
|
|
212
312
|
const price = formatCardPrice(format, text(card["price"]), text(card["currency"]));
|
|
213
313
|
const href = text(card["url"]);
|
|
@@ -218,48 +318,32 @@ export function SearchResultCard(props: SearchCardProps): ReactElement {
|
|
|
218
318
|
km: props.item.distance_km.toFixed(1),
|
|
219
319
|
})
|
|
220
320
|
: undefined;
|
|
221
|
-
// Memoised on the
|
|
222
|
-
//
|
|
223
|
-
|
|
321
|
+
// Memoised on the card and the resolver: a host resolver is a plain
|
|
322
|
+
// function returning a fresh object, so resolving inline hands `<Image>` a
|
|
323
|
+
// new `meta` identity on every render — a load it then has to decide is or
|
|
324
|
+
// is not the same one.
|
|
325
|
+
const photos = useMemo(() => readCardPhotos(card, resolve), [card, resolve]);
|
|
224
326
|
|
|
225
327
|
const body = (
|
|
226
|
-
<Flex vertical gap={spacing[
|
|
227
|
-
{
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
328
|
+
<Flex vertical gap={spacing[1]}>
|
|
329
|
+
<Typography.Text strong>{title}</Typography.Text>
|
|
330
|
+
{/* The price is the strongest line on a catalogue card: it is what the
|
|
331
|
+
eye scans a grid for. It used to share a type step with the location
|
|
332
|
+
and sit under a disclosure three times its size. */}
|
|
333
|
+
{price !== undefined && (
|
|
334
|
+
<Typography.Text
|
|
335
|
+
strong
|
|
336
|
+
style={{ fontSize: fontSize.lg.fontSize }}
|
|
337
|
+
data-testid="search-result-price"
|
|
338
|
+
>
|
|
339
|
+
{price}
|
|
340
|
+
</Typography.Text>
|
|
341
|
+
)}
|
|
342
|
+
{(location !== undefined || distance !== undefined) && (
|
|
343
|
+
<Typography.Text type="secondary">
|
|
344
|
+
{[location, distance].filter((v) => v !== undefined).join(" · ")}
|
|
345
|
+
</Typography.Text>
|
|
242
346
|
)}
|
|
243
|
-
<Flex vertical gap={spacing[1]}>
|
|
244
|
-
<Typography.Text strong>{title}</Typography.Text>
|
|
245
|
-
{/* The price is the strongest line on a catalogue card: it is what
|
|
246
|
-
the eye scans a grid for. It used to share a type step with the
|
|
247
|
-
location and sit under a disclosure three times its size. */}
|
|
248
|
-
{price !== undefined && (
|
|
249
|
-
<Typography.Text
|
|
250
|
-
strong
|
|
251
|
-
style={{ fontSize: fontSize.lg.fontSize }}
|
|
252
|
-
data-testid="search-result-price"
|
|
253
|
-
>
|
|
254
|
-
{price}
|
|
255
|
-
</Typography.Text>
|
|
256
|
-
)}
|
|
257
|
-
{(location !== undefined || distance !== undefined) && (
|
|
258
|
-
<Typography.Text type="secondary">
|
|
259
|
-
{[location, distance].filter((v) => v !== undefined).join(" · ")}
|
|
260
|
-
</Typography.Text>
|
|
261
|
-
)}
|
|
262
|
-
</Flex>
|
|
263
347
|
</Flex>
|
|
264
348
|
);
|
|
265
349
|
|
|
@@ -272,6 +356,8 @@ export function SearchResultCard(props: SearchCardProps): ReactElement {
|
|
|
272
356
|
styles={{ body: { padding: spacing[3] } }}
|
|
273
357
|
>
|
|
274
358
|
<Flex vertical gap={spacing[2]}>
|
|
359
|
+
{/* A SIBLING of the anchor, never a child — see `CardPhotoStrip`. */}
|
|
360
|
+
<CardPhotoStrip photos={photos} title={title} />
|
|
275
361
|
{href === undefined ? (
|
|
276
362
|
body
|
|
277
363
|
) : (
|