@stapel/search-react 0.20.0 → 0.22.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.
Files changed (98) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/README.md +65 -2
  3. package/dist/api/generated/schema.d.ts +96 -4
  4. package/dist/api/generated/schema.d.ts.map +1 -1
  5. package/dist/api/types.d.ts +68 -6
  6. package/dist/api/types.d.ts.map +1 -1
  7. package/dist/api/types.js.map +1 -1
  8. package/dist/default/FacetGroupControl.d.ts +34 -4
  9. package/dist/default/FacetGroupControl.d.ts.map +1 -1
  10. package/dist/default/FacetGroupControl.js +112 -7
  11. package/dist/default/FacetGroupControl.js.map +1 -1
  12. package/dist/default/FacetPanelPane.d.ts.map +1 -1
  13. package/dist/default/FacetPanelPane.js +27 -1
  14. package/dist/default/FacetPanelPane.js.map +1 -1
  15. package/dist/default/LocationSummaryLine.d.ts +3 -0
  16. package/dist/default/LocationSummaryLine.d.ts.map +1 -1
  17. package/dist/default/LocationSummaryLine.js +55 -8
  18. package/dist/default/LocationSummaryLine.js.map +1 -1
  19. package/dist/default/PartitionChips.d.ts +23 -0
  20. package/dist/default/PartitionChips.d.ts.map +1 -0
  21. package/dist/default/PartitionChips.js +94 -0
  22. package/dist/default/PartitionChips.js.map +1 -0
  23. package/dist/default/PopularValues.d.ts +58 -0
  24. package/dist/default/PopularValues.d.ts.map +1 -0
  25. package/dist/default/PopularValues.js +46 -0
  26. package/dist/default/PopularValues.js.map +1 -0
  27. package/dist/default/SearchPage.d.ts.map +1 -1
  28. package/dist/default/SearchPage.js +5 -0
  29. package/dist/default/SearchPage.js.map +1 -1
  30. package/dist/default/index.d.ts +5 -1
  31. package/dist/default/index.d.ts.map +1 -1
  32. package/dist/default/index.js +6 -1
  33. package/dist/default/index.js.map +1 -1
  34. package/dist/headless/FacetPanel.d.ts +29 -1
  35. package/dist/headless/FacetPanel.d.ts.map +1 -1
  36. package/dist/headless/FacetPanel.js +14 -0
  37. package/dist/headless/FacetPanel.js.map +1 -1
  38. package/dist/headless/SearchStateProvider.d.ts +15 -0
  39. package/dist/headless/SearchStateProvider.d.ts.map +1 -1
  40. package/dist/headless/SearchStateProvider.js +38 -3
  41. package/dist/headless/SearchStateProvider.js.map +1 -1
  42. package/dist/headless/useFacetLabels.js +7 -7
  43. package/dist/headless/useFacetLabels.js.map +1 -1
  44. package/dist/i18n/es.d.ts.map +1 -1
  45. package/dist/i18n/es.js +12 -0
  46. package/dist/i18n/es.js.map +1 -1
  47. package/dist/i18n/keys.d.ts +72 -0
  48. package/dist/i18n/keys.d.ts.map +1 -1
  49. package/dist/i18n/keys.js +86 -0
  50. package/dist/i18n/keys.js.map +1 -1
  51. package/dist/i18n/ru.d.ts.map +1 -1
  52. package/dist/i18n/ru.js +14 -0
  53. package/dist/i18n/ru.js.map +1 -1
  54. package/dist/index.d.ts +4 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +2 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/state/degradations.d.ts +9 -0
  59. package/dist/state/degradations.d.ts.map +1 -1
  60. package/dist/state/degradations.js +13 -0
  61. package/dist/state/degradations.js.map +1 -1
  62. package/dist/state/facets.d.ts +29 -6
  63. package/dist/state/facets.d.ts.map +1 -1
  64. package/dist/state/facets.js +120 -16
  65. package/dist/state/facets.js.map +1 -1
  66. package/dist/state/translit.d.ts +58 -0
  67. package/dist/state/translit.d.ts.map +1 -0
  68. package/dist/state/translit.js +115 -0
  69. package/dist/state/translit.js.map +1 -0
  70. package/dist/state/urlState.d.ts +26 -1
  71. package/dist/state/urlState.d.ts.map +1 -1
  72. package/dist/state/urlState.js +43 -17
  73. package/dist/state/urlState.js.map +1 -1
  74. package/llms.txt +4 -2
  75. package/manifest.json +49 -2
  76. package/nav-manifest.json +1 -1
  77. package/package.json +8 -8
  78. package/src/analytics/generated/events.json +1 -1
  79. package/src/api/generated/schema.ts +96 -4
  80. package/src/api/types.ts +77 -5
  81. package/src/default/FacetGroupControl.tsx +213 -8
  82. package/src/default/FacetPanelPane.tsx +36 -1
  83. package/src/default/LocationSummaryLine.tsx +114 -53
  84. package/src/default/PartitionChips.tsx +161 -0
  85. package/src/default/PopularValues.tsx +151 -0
  86. package/src/default/SearchPage.tsx +5 -0
  87. package/src/default/index.ts +15 -0
  88. package/src/headless/FacetPanel.tsx +49 -1
  89. package/src/headless/SearchStateProvider.tsx +59 -3
  90. package/src/headless/useFacetLabels.ts +7 -7
  91. package/src/i18n/es.ts +16 -0
  92. package/src/i18n/keys.ts +91 -0
  93. package/src/i18n/ru.ts +20 -0
  94. package/src/index.ts +12 -0
  95. package/src/state/degradations.ts +14 -0
  96. package/src/state/facets.ts +154 -28
  97. package/src/state/translit.ts +113 -0
  98. package/src/state/urlState.ts +72 -13
package/CHANGELOG.md CHANGED
@@ -1,5 +1,143 @@
1
1
  # @stapel/search-react
2
2
 
3
+ ## 0.22.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 65e0c9f: search: headings come from the server, a vocabulary becomes a dictionary, and two browse surfaces for a category page
8
+
9
+ **A heading is named, or it is marked.** Group headings and option captions now
10
+ resolve in one stated order — `facet_labels` from the answer, then the category
11
+ feature definition, then the raw slug. The slug arm is not a fallback anyone may
12
+ ship: it renders, because a heading a person cannot read still beats options
13
+ with no heading at all, and it renders MARKED — `labelSource: "none"` on the
14
+ group and the option, `data-label-source` on the drawn control, and one
15
+ `console.warn` per slug outside production, so a storefront's own test fails on
16
+ it. Measured on a live classified's cars branch the page passed an empty feature
17
+ list and the whole rail was raw index slugs: the make group was on screen,
18
+ unlabelled, and the complaint that came back was "I cannot pick a make".
19
+ `FacetGroup` and `FacetOption` both carry `labelSource`
20
+ (`"server" | "schema" | "host" | "none"`) — "did anybody actually name this?" is
21
+ a question two surfaces have to answer and neither can answer by reading the
22
+ string.
23
+
24
+ **A vocabulary level is a DICTIONARY.** Past eight counted buckets a
25
+ `ref_select` group — or an untyped group that long, which is the live case where
26
+ no schema was threaded through — stops being eight checkboxes plus a
27
+ `Show all (418)` and becomes the busiest values, a search box over the rest, and
28
+ the chosen values pinned above it where a filter cannot go invisible. The box
29
+ matches ACROSS ALPHABETS: `тойота` finds `Toyota`, `тимберленд` finds
30
+ `Timberland`, `ровер` finds `Land Rover`. That is a prefix rule over two keys
31
+ per word — a transliteration, and its consonant skeleton, because the two
32
+ scripts disagree exactly on the vowels of a borrowed name (`timberlend` vs
33
+ `timberland`, both `tmbrlnd`). Table-driven and dependency-free, and local: the
34
+ buckets are already in the answer, so nothing is requested per keystroke.
35
+ `facetGroupShape` gains a `"dictionary"` arm beside `segmented`/`nested`/
36
+ `checkbox`, and the threshold counts EVIDENCE buckets — a zero-filled option
37
+ table or a schema-only tail is still a list a person can read.
38
+
39
+ **`<PopularValues>`** prints the busiest values of one group as a multi-column
40
+ `Toyota 802` block that applies the filter on click — a table of contents for a
41
+ category, drawn from the same drill-down counts the panel shows, so a value
42
+ cannot read `802` in one place and `93` in the other. `hidden` is a PROP rather
43
+ than a media query inside: whether a 390px screen has room for forty links is a
44
+ fact about the page, and the page is the storefront's.
45
+
46
+ **`<PartitionChips>`** is the single-select row a `chips` category draws instead
47
+ of a tile grid: `Все | child…` from `{id, path, name}`, controlled — the choice
48
+ is a `category` in the URL, not state in a chip row. It is a real `radiogroup`
49
+ with roving tabindex and arrow keys, because exactly one of them is true at a
50
+ time and a row of `aria-pressed` toggles announces the opposite: independent
51
+ switches, with no reason why pressing one released another.
52
+
53
+ ## 0.21.0
54
+
55
+ ### Minor Changes
56
+
57
+ - 3059411: The location control is one control, it says how the search got there, and a radius in the URL means something
58
+
59
+ Three measurements on a live results page, and each one is a different way of
60
+ the same line not saying what is true.
61
+
62
+ - **Two red links at opposite ends of a 992px strip.** "Searching everywhere"
63
+ sat at x=370 and "Near me · Within 25 km" at x=776, both in the brand colour,
64
+ with 400px of air between them and nothing saying they were about the same
65
+ thing. They now share one bordered box at the leading edge, split by a
66
+ hairline; the place half is ordinary type because it is a STATEMENT, and the
67
+ offer keeps the colour because it is the action. The offer states its radius
68
+ compactly (`search.geo.radius_km_short`) — at 390px the long form made the
69
+ control 272px wide against 231px of room, so it was cut by the group's own
70
+ clip and the filters door overlapped it by 52px.
71
+ - **"A chosen place on the map", said to somebody who pressed a button.**
72
+ `SearchStateBag.geoIsOffer` is the provider reporting PROVENANCE — the one
73
+ fact a summary line cannot infer, because every way of arriving at a centre
74
+ produces the same three numbers.
75
+ - **`?radius_km=300` with no place.** The search that ran was the honest one (a
76
+ radius with no centre narrows nothing) and the control went on advertising
77
+ its own 25, with nothing on screen saying which number the page had used —
78
+ and pressing the offer then wrote 25 over the 300 the person had typed, the
79
+ one place the URL was rewritten behind a visitor. The codec now reports
80
+ `radius_without_place` through the same notice every other unreadable
81
+ parameter goes through, and the offer CARRIES that radius: what the link
82
+ asked for, what the button says, and what pressing it does are one number.
83
+
84
+ The `index` and `default` size caps move to 11.5 KB and 22.5 KB, and the
85
+ measurement is the reason rather than the aftermath. Re-measured on a clean
86
+ tree, this package's own `src` reverted to the previous commit with every
87
+ dependency held constant: `index` 10.70 -> 11.14 KB, `default` 21.64 -> 22.27
88
+ KB. Both were already through the old 11/22 caps before the caps were touched.
89
+
90
+ The ~250 B of new i18n sentences is not what did it. Collapsing all six new
91
+ English strings to a single character — the floor of what shrinking the copy
92
+ could ever buy — leaves `index` at 11.04 and `default` at 22.14, both still
93
+ over. The copy is worth ~100 B and ~130 B brotlied; the rest is the facet plan
94
+ reading `facet_meta`, the location control's one-box rewrite and the widened
95
+ response types. So the caps move, and the sentences keep their words.
96
+
97
+ ### Patch Changes
98
+
99
+ - 5604f1a: A facet group nothing in the result set carries is not drawn
100
+
101
+ Measured on the deployed phones leaf: `sim_config`, `device_history` and `set`
102
+ are authored `select` features that no listing in the leaf fills. All three
103
+ were drawn as full groups — a heading in the rail, a chip on a 390px row, and
104
+ between them seven checkboxes each guaranteed to return nothing. A buyer can
105
+ tap every one of them.
106
+
107
+ They are not a counting bug. The server's `fill_zero_options` creates the slug
108
+ and zero-fills every authored option on purpose, and the coverage floor that
109
+ would have withheld them (`FACET_MIN_COVERAGE`) governs only the slugs an
110
+ evidence plan BORROWED from sibling leaves — a slug the queried category
111
+ authored is exempt, because "a closed option set answering with its zeros is a
112
+ shipped decision". That is right about an OPTION and wrong about a GROUP: a
113
+ size chart showing `XL — 0` beside `M — 12` is telling the truth about a shape
114
+ worth seeing whole, while a group whose every option is 0 is not a shape at
115
+ all. Nothing on the wire separates the two — the client has to sum the buckets
116
+ itself, which is what `facetCoverage` already does for the chip row's order
117
+ and the rail's disclosures.
118
+
119
+ So `buildFacetGroups` now drops a group that is COUNTED and sums to zero, by
120
+ that same measure — the module already refuses to emit an empty group, on the
121
+ stated grounds that an empty group is still a heading and still a chip, and
122
+ this is the same defect with checkboxes in it. Three exemptions, each with a
123
+ test:
124
+
125
+ - an UNCOUNTED group sums to zero for the opposite reason — its options carry
126
+ `count: null`, nobody looked, and `/query` accepts `f.<slug>` regardless.
127
+ Dropping on that is the regression the `MAX_FACET_FIELDS` branch exists to
128
+ prevent (a live cars leaf: 26 facetable features declared, 12 counted).
129
+ - a group the reader has already filtered on, whatever its counts say, or the
130
+ URL narrows the search with no control left to widen it.
131
+ - a zero option beside a live one, which is drill-down working as designed.
132
+
133
+ A counted group that came back with no buckets at all (`video_file_url: {}` on
134
+ that same leaf) is dropped by the same rule rather than by each skin filtering
135
+ the model's output again downstream.
136
+
137
+ This does not fix the catalogue. A leaf declaring three features that nothing
138
+ in it fills is a category-authoring defect; this stops it reaching a buyer as
139
+ a dead control, on every leaf and every host, and it needs no server release.
140
+
3
141
  ## 0.20.0
4
142
 
5
143
  ### Minor Changes
package/README.md CHANGED
@@ -141,6 +141,69 @@ the raw value; a value nobody names keeps printing itself. `renderCategoryFilter
141
141
  also becomes the leading chip of the phone filter row, which is where the
142
142
  catalogue's deeper levels are chosen on a result list.
143
143
 
144
+ ## A heading is named by the server, or it is marked
145
+
146
+ Group headings and option captions resolve in one order and one only:
147
+ `facet_labels` from the answer → the category feature definition → the raw
148
+ slug. The last arm is not a fallback anyone ships: it renders (a heading a
149
+ person cannot read still beats options with no heading), and it renders
150
+ **marked** — `labelSource: "none"` on the group, `data-label-source="none"` on
151
+ the drawn control, and one `console.warn` per slug outside production. A
152
+ storefront's own test asserts on that attribute; measured on a live cars branch
153
+ the whole rail was raw slugs and the complaint that came back was "I cannot
154
+ pick a make".
155
+
156
+ Every `FacetGroup` and every `FacetOption` carries `labelSource:
157
+ "server" | "schema" | "host" | "none"`, so "did anybody actually name this?" is
158
+ answerable without looking at the string.
159
+
160
+ ## A vocabulary is a dictionary, not a checkbox list
161
+
162
+ Past eight **evidence buckets** a `ref_select` group (or an untyped group that
163
+ long — the live case, where no schema was threaded through) stops being a list
164
+ and becomes a dictionary: the busiest values, a search box that filters them
165
+ locally, and the chosen values pinned above the box so a filter is never
166
+ invisible. The box matches **across alphabets** — `тойота` finds `Toyota`,
167
+ `тимберленд` finds `Timberland`, `ровер` finds `Land Rover` — by a prefix rule
168
+ over two keys per word, a transliteration and its consonant skeleton
169
+ (`translitPrefixMatch`, `translitKey`, `consonantKey`; table-driven, no
170
+ dependency). No request per keystroke: the whole bucket list is already in the
171
+ answer — stapel-search caps a vocabulary-backed group at
172
+ `MAX_FACET_VALUES_VOCABULARY` (1000, raised from the shared 200 for exactly
173
+ this), so a 418-term make dictionary arrives whole and the box has everything
174
+ it filters.
175
+
176
+ ```tsx
177
+ facetGroupShape(group) // "segmented" | "nested" | "checkbox" | "dictionary"
178
+ isDictionaryFacet(group) // > FACET_DICTIONARY_THRESHOLD counted buckets
179
+ ```
180
+
181
+ ## Two browse surfaces the page places
182
+
183
+ Both are exported from `./default` and neither lays itself out — where they
184
+ belong on a category page is the storefront's decision.
185
+
186
+ `<PopularValues>` prints the busiest values of one group as a multi-column
187
+ `Toyota 802` list that applies the filter on click — a table of contents for a
188
+ category, from the same drill-down counts the panel shows. `hidden` is a prop,
189
+ not a media query: whether a 390px screen has room is a fact about the page.
190
+
191
+ ```tsx
192
+ <PopularValues group={firstRefSelect} onApply={toggle} hidden={isPhone}
193
+ onShowAll={openPanel} />
194
+ ```
195
+
196
+ `<PartitionChips>` is the single-select row a `chips` category draws instead of
197
+ a tile grid: `Все | child…` from `{id, path, name}`, controlled (the choice is
198
+ a `category` in the URL), a real `radiogroup` with roving tabindex and arrow
199
+ keys — because exactly one of them is true at a time, and `aria-pressed`
200
+ toggles say the opposite.
201
+
202
+ ```tsx
203
+ <PartitionChips items={children} value={state.category ?? null}
204
+ onChange={(path) => patch({ category: path })} />
205
+ ```
206
+
144
207
  ## What the server admits, the screen repeats
145
208
 
146
209
  | The envelope says | The page says |
@@ -191,10 +254,10 @@ the configured engine cannot evaluate.
191
254
  | Layer | Exports |
192
255
  |---|---|
193
256
  | api | `createSearchApi`, `searchQueryParams`, `SEARCH_SORTS`, wire types |
194
- | state (pure) | `parseSearchState`, `writeSearchState`, `patchSearchState`, `toggleFilterValue`, `setFilterValues`, `setRangeValue`, `clearFilters`, `activeFilterCount`, `parseDegradations`, `countIsEstimate`, `buildFacetGroups`, `facetOptionLabel` |
257
+ | state (pure) | `parseSearchState`, `writeSearchState`, `patchSearchState`, `toggleFilterValue`, `setFilterValues`, `setRangeValue`, `clearFilters`, `activeFilterCount`, `parseDegradations`, `countIsEstimate`, `buildFacetGroups`, `facetOptionLabel`, `translitPrefixMatch`, `translitKey`, `consonantKey` |
195
258
  | model | `createSearchRuntime`, `searchQueryKeys`, `useSearchQuery`, `useRankingDisclosure` |
196
259
  | headless | `SearchProvider`, `SearchStateProvider`/`useSearchState`, `SearchResults`, `FacetPanel`, `RankingDisclosure` |
197
- | `./default` | `SearchPage`, `SearchResultsPane`, `FacetPanelPane`, `RankingDisclosurePane`, `SearchBox`, `SortSelect`, `PageSizeSelect`, `LanguageSelect`, `SearchResultCard`, `RangeFilterRow`, `DegradationNotice`, `UrlIssueNotice` (the skin themes itself through `SkinTheme` from `@stapel/tokens-antd/skin`; the pair's own `SearchSkinTheme` is gone as of 0.6.0) |
260
+ | `./default` | `SearchPage`, `SearchResultsPane`, `FacetPanelPane`, `RankingDisclosurePane`, `SearchBox`, `SortSelect`, `PageSizeSelect`, `LanguageSelect`, `SearchResultCard`, `RangeFilterRow`, `DegradationNotice`, `UrlIssueNotice`, `PopularValues`, `PartitionChips`, `facetGroupShape`, `isDictionaryFacet` (the skin themes itself through `SkinTheme` from `@stapel/tokens-antd/skin`; the pair's own `SearchSkinTheme` is gone as of 0.6.0) |
198
261
  | `./router` | `useRouterSearchParams` |
199
262
  | i18n | `registerSearchI18n` (+ `./i18n/ru`, `./i18n/es`) |
200
263
  | errors | `SEARCH_ERRORS`, `explainSearchError`, `SEARCH_WINDOW_EXCEEDED`, `SEARCH_BACKEND_UNAVAILABLE` |
@@ -132,6 +132,19 @@ export interface paths {
132
132
  export type webhooks = Record<string, never>;
133
133
  export interface components {
134
134
  schemas: {
135
+ /** @description One partition of the answer — a heading, never a filter over it. */
136
+ BandSummary: {
137
+ id: components["schemas"]["IdEnum"];
138
+ /** @description How many rows are in this band. `null` when the engine cannot say. The two counts add up to the top-level `count`, which is the machine-checkable form of 'nothing is hidden by distance'. */
139
+ count: number | null;
140
+ /** @description True when `count` is a floor (a capped count). Render 'N+'. */
141
+ count_is_lower_bound: boolean;
142
+ /**
143
+ * Format: double
144
+ * @description Present on `nearby` only: the edge, in km, the band was cut at. `all` has no edge — it is everything else, which is the promise.
145
+ */
146
+ radius_km?: number;
147
+ };
135
148
  /** @description One destination in the dropdown, ready to render and ready to follow. */
136
149
  CategorySuggestion: {
137
150
  /** @description Category id. A `listings`-graded row derives it from the path's leaf segment. */
@@ -146,6 +159,17 @@ export interface components {
146
159
  category: string;
147
160
  /** @description Live listings a buyer would see under this category, descendants included — the same number the SERP reports for it. On a `listings`-graded row: how many of them match the typed query, which is the count a `?q=…&category=…` tap will show. */
148
161
  count: number;
162
+ /**
163
+ * @description What `count` counted. `category`: everything live under this category, the typed text ignored — the row is a PLACE. `query_in_category`: only the documents matching the typed text, which is what a `listings`-graded row is about. The two are different numbers about different pages, which is why the row says which one it is instead of leaving a storefront to guess.
164
+ *
165
+ * * `category` - category
166
+ * * `query_in_category` - query_in_category
167
+ */
168
+ count_scope: components["schemas"]["CountScopeEnum"];
169
+ /** @description The /query parameters this row's `count` was computed for — send them VERBATIM (plus your own `type`/`lang`/paging) when the buyer follows the row. Always carries `category`; carries `q` only when `count_scope` is `query_in_category`. Assembling these yourself re-opens the defect this field exists to close: a place row followed with the typed text opens an empty page while its count promised stock. */
170
+ query: {
171
+ [key: string]: string;
172
+ };
149
173
  /** @description Number of segments in `path`. */
150
174
  depth: number;
151
175
  /**
@@ -160,6 +184,28 @@ export interface components {
160
184
  */
161
185
  match: components["schemas"]["MatchEnum"];
162
186
  };
187
+ /**
188
+ * @description * `category` - category
189
+ * * `query_in_category` - query_in_category
190
+ * @enum {string}
191
+ */
192
+ CountScopeEnum: "category" | "query_in_category";
193
+ /** @description One filter the query's own words produced, ready to be replayed. */
194
+ ExtractedFilter: {
195
+ slug: string;
196
+ value: string;
197
+ label: string;
198
+ value_label: string;
199
+ method: components["schemas"]["MethodEnum"];
200
+ /** Format: double */
201
+ confidence: number;
202
+ /** @description `[start, end)` into the RAW query, so a UI can underline the words that became this chip. */
203
+ span: number[];
204
+ /** @description The literal query parameter this filter IS — e.g. `f.color=krasnyy`. Re-send it verbatim to KEEP the chip, omit it to remove it, and send `qu=off` alongside so the server does not extract it again. Nothing about extraction is remembered server-side, which is why the parameter has to be complete. */
205
+ param: string;
206
+ /** @description True when this filter actually narrowed the answer. A false one still contributed to each row's `match_count`. */
207
+ applied: boolean;
208
+ };
163
209
  /** @description Captions for one slug's option codes. */
164
210
  FacetLabels: {
165
211
  /** @description True when `values` holds translation KEYS to run through the catalogue; false when it holds literal captions. The reader cannot tell by looking — `b.apple` and `Б/у` are both strings. */
@@ -180,6 +226,16 @@ export interface components {
180
226
  dropped_filters: string[];
181
227
  /** @description Range slugs that address a core document column rather than an attribute (`r.price`). Offer them as filters unconditionally: they exist for every document in every category, which is why they are not in the category's own plan. */
182
228
  core_ranges: string[];
229
+ /** @description Where the plan came from. `category` — the queried category's own authored schema. `evidence` — the categories the CANDIDATE SET actually contains, used when that schema did not fill MAX_FACET_FIELDS, which is every branch category and every text query (`categories.features` resolves own + ANCESTOR-inherited features, so a branch owns no axes; its leaves do). */
230
+ plan: string;
231
+ /** @description `{slug, coverage, candidates}` for groups that were counted and then withheld because they describe too little of the result set (FACET_MIN_COVERAGE). Present so a panel can say «3 filters apply to too few of these» instead of «no filters» — the second is false whenever this list is not empty. Only slugs the evidence plan borrowed from another category are ever here, and never one the reader has already filtered on. */
232
+ withheld: {
233
+ [key: string]: unknown;
234
+ }[];
235
+ /** @description `{category, count}` — the categories this answer's candidate set is made of, busiest first, `category` being the same slash-joined id path the `category` filter takes. The evidence the plan was drawn from, and what a panel needs to offer the CATEGORY itself as the first filter on a text search. Empty when the plan is the queried category's own. */
236
+ categories: {
237
+ [key: string]: unknown;
238
+ }[];
183
239
  };
184
240
  HealthResponse: {
185
241
  backend: string;
@@ -193,6 +249,12 @@ export interface components {
193
249
  lag_seconds?: number | null;
194
250
  stale_reason?: string;
195
251
  };
252
+ /**
253
+ * @description * `nearby` - nearby
254
+ * * `all` - all
255
+ * @enum {string}
256
+ */
257
+ IdEnum: "nearby" | "all";
196
258
  /**
197
259
  * @description * `exact` - exact
198
260
  * * `prefix` - prefix
@@ -203,6 +265,24 @@ export interface components {
203
265
  * @enum {string}
204
266
  */
205
267
  MatchEnum: "exact" | "prefix" | "word" | "substring" | "listings" | "vector";
268
+ /**
269
+ * @description * `exact` - exact
270
+ * * `translit` - translit
271
+ * * `alias` - alias
272
+ * * `vector` - vector
273
+ * @enum {string}
274
+ */
275
+ MethodEnum: "exact" | "translit" | "alias" | "vector";
276
+ /** @description What a free-text query turned out to be ABOUT, beside its words. */
277
+ QueryUnderstanding: {
278
+ filters: components["schemas"]["ExtractedFilter"][];
279
+ category_path: string[];
280
+ /** Format: double */
281
+ category_confidence: number;
282
+ /** @description The query with every extracted span removed — the text the engine still had to match. Empty is normal and correct: «красный» is entirely a filter, and the answer is then the filters' set. */
283
+ residual: string;
284
+ degraded: string[];
285
+ };
206
286
  /** @description The P2B Art. 5 disclosure, generated from the scorer registry. */
207
287
  RankingResponse: {
208
288
  doc_type: string;
@@ -249,10 +329,14 @@ export interface components {
249
329
  promoted: boolean;
250
330
  /**
251
331
  * Format: double
252
- * @description Great-circle distance from the searched centre.
332
+ * @description Great-circle distance from the searched centre, in km. For an ANONYMOUS reader it is measured from the same ~1.1km grid point the card publishes and floored to that grid's quantum (the cell's diagonal, ~1.574km): a distance finer than the position it came from is the position, three requests away. The listing's own owner, staff and the service transport get the exact number. Coarse is enough for what it drives — a card saying «12 км» does not need metres — and it never overstates proximity, being floored rather than rounded.
253
333
  */
254
334
  distance_km: number | null;
255
- /** @description Stored row fields, so a result page costs one query. */
335
+ /** @description `nearby` | `all` | `""`. Which partition this row sits in, present only under `geo_mode=rank`. A LABEL, never a filter: `all` carries every remaining row, including rows with no coordinates at all, so a query never returns fewer results because of distance. `""` means the request ranked by proximity but gave no centre, which is not an error. */
336
+ band?: string;
337
+ /** @description How many of the filters the QUERY's own words produced this row satisfies — including the soft ones that were not applied as filters. Orders rows within a band, strongest first. Present only when the query produced signals. */
338
+ match_count?: number;
339
+ /** @description Stored row fields, so a result page costs one query. For an ANONYMOUS reader the card never carries full-precision coordinates, on every path and whatever the flags: a key naming half a pair (`lat`, `latitude`, `lon`, `lng`, `*_lat`…) is rewritten onto the ~1.1km public grid from the row's own columns, and a key carrying a position this module cannot turn into an area (`geohash`, `location`, `coordinates`…) is removed rather than truncated — two differently-aligned areas around one point intersect down to a sliver. `geo_precision_km` says how wide the area is: draw a CIRCLE, never a marker. Under `geo_mode=rank` the pair is ADDED even to a card that carried no position at all. */
256
340
  card: {
257
341
  [key: string]: unknown;
258
342
  };
@@ -260,6 +344,10 @@ export interface components {
260
344
  /** @description The query envelope: AnchorPagination's keys, plus what search owes. */
261
345
  SearchResponse: {
262
346
  items: components["schemas"]["SearchItem"][];
347
+ /** @description Per-band counts in render order — `nearby` («Объявления поблизости») then `all` («Все объявления»). Present only under `geo_mode=rank`; empty when no centre was given. The rows themselves carry `band`; this is the summary a heading needs. The top-level `count` remains the WHOLE matching total, never the nearby one. */
348
+ bands?: components["schemas"]["BandSummary"][];
349
+ /** @description What the query's words became. Absent entirely while QUERY_UNDERSTANDING is off or `qu=off` was sent. */
350
+ query_understanding?: components["schemas"]["QueryUnderstanding"];
263
351
  /** @description {slug: {value: count}}, counted with the slug's own filter removed. */
264
352
  facets: {
265
353
  [key: string]: {
@@ -335,7 +423,7 @@ export interface operations {
335
423
  query: {
336
424
  /** @description Opaque keyset cursor from a previous answer. */
337
425
  anchor?: string;
338
- /** @description minLat,minLon,maxLat,maxLon. minLon > maxLon means the box crosses +/-180. */
426
+ /** @description minLat,minLon,maxLat,maxLon. minLon > maxLon means the box crosses +/-180. For an anonymous caller the rectangle is grown OUTWARD to whole ~1.1km cells of the public geo grid, so it can only ever ask about the area a public card publishes: a box EXCLUDES rows, and halving one around a listing would otherwise converge on the seller's pin in a few dozen requests. */
339
427
  bbox?: string;
340
428
  /** @description root/leaf path; a prefix filter, so a parent finds its descendants. */
341
429
  category?: string;
@@ -345,6 +433,8 @@ export interface operations {
345
433
  "f.<slug>"?: string;
346
434
  /** @description on | off | comma-separated slugs. Default is the category's plan. */
347
435
  facets?: string;
436
+ /** @description rank | filter. What `radius_km` means. `rank` PARTITIONS: the answer comes back as `nearby` (inside the radius) then `all` (every remaining row), nothing is withheld, and `count` stays the whole matching total — a query can never come back empty because of distance. `filter` is the historical hard cut, for a caller that genuinely wants only what is within N km. `rank` is the default inside the feature; while STAPEL_SEARCH['GEO_BANDS'] is off this parameter is inert and `radius_km` filters as it always has. */
437
+ geo_mode?: string;
348
438
  /** @description Language of the query: selects the analyzer AND narrows the corpus. Omit it and only the analyzer is chosen (from Accept-Language) — a header must not hide a catalogue. */
349
439
  lang?: string;
350
440
  /** @description Centre latitude (with lon). */
@@ -356,9 +446,11 @@ export interface operations {
356
446
  owner?: string;
357
447
  /** @description Free text. Dictionary-normalized here; morphology belongs to the engine. */
358
448
  q?: string;
449
+ /** @description auto | off. Whether the query's own words may become filters. `auto` (the default while QUERY_UNDERSTANDING is on) extracts and reports what it extracted under `query_understanding`; each filter carries the literal `param` to replay. Send `qu=off` with those replayed params afterwards — extraction is stateless, so without it a removed chip comes straight back. */
450
+ qu?: string;
359
451
  /** @description Range filter, `from..to`; either end may be omitted. */
360
452
  "r.<slug>"?: string;
361
- /** @description Radius around the centre. */
453
+ /** @description Distance around the centre, in km. Its MEANING is `geo_mode`'s: under `rank` it is the edge of the `nearby` band and excludes nothing; under `filter` it is a hard cut. Defaults to NEAR_BAND_RADIUS_KM under `rank`. */
362
454
  radius_km?: number;
363
455
  /** @description relevance | newest | price_asc | price_desc | distance. An explicit sort never receives a promotional boost. */
364
456
  sort?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/api/generated/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/api/generated/schema.ts"],"names":[],"mappings":"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"}
@@ -11,15 +11,73 @@
11
11
  import type { components } from "./generated/schema.js";
12
12
  /** The generated schema table — the one source of truth for wire shapes. */
13
13
  export type Schemas = components["schemas"];
14
- /** `GET /query` 200 — the whole envelope. */
15
- export type SearchResponse = Schemas["SearchResponse"];
14
+ /**
15
+ * One slug's captions: the GROUP's own name, and the words for its values.
16
+ *
17
+ * `label` is the group heading the server resolved from the category's
18
+ * feature definition, in the request's own language. It is the only source
19
+ * that always exists — `categoryFeatures` is an optional slot a live
20
+ * classified board never filled, and without it every heading in the panel
21
+ * was the raw index slug. `null` is the server saying it has no name for the
22
+ * slug either; ABSENT is a server too old to send one, and both read the same
23
+ * way here (fall through to the schema).
24
+ *
25
+ * WHAT THE GENERATOR LOST: the field is newer than this pair's pinned
26
+ * `schema.json`, so it is declared here as optional-and-nullable rather than
27
+ * regenerated into a shape a deployed older server does not send.
28
+ */
29
+ export type FacetLabels = Schemas["FacetLabels"] & {
30
+ readonly label?: string | null;
31
+ };
32
+ /** `facet_labels` as a whole: `{slug: {label, translatable, values}}`. */
33
+ export type FacetLabelsMap = Readonly<Record<string, FacetLabels>>;
34
+ /** `GET /query` 200 — the whole envelope. Corrected in two places: see
35
+ * {@link FacetMeta} and {@link FacetLabels}. */
36
+ export type SearchResponse = Omit<Schemas["SearchResponse"], "facet_meta" | "facet_labels"> & {
37
+ readonly facet_meta: FacetMeta;
38
+ readonly facet_labels: FacetLabelsMap;
39
+ };
16
40
  /** One result row. `promoted` is present on EVERY item under EVERY sort — a
17
41
  * mandatory marking (DSA Art. 26), not an optional field, which is why the
18
42
  * card slot's contract carries it and why the default skin renders it. */
19
43
  export type SearchItem = Schemas["SearchItem"];
20
- /** The honesty block beside the counts: `approximate`, `candidates`,
21
- * `counted`, `skipped`. Rendered, never swallowed (spec §4.2). */
22
- export type FacetMeta = Schemas["FacetMeta"];
44
+ /**
45
+ * One group the counter COUNTED and then held back, because its buckets
46
+ * describe too little of the result set (`FACET_MIN_COVERAGE`).
47
+ *
48
+ * The existence of this list is what makes "this search offers no filters"
49
+ * a false sentence whenever it is not empty (D175).
50
+ */
51
+ export interface FacetWithheldGroup {
52
+ readonly slug: string;
53
+ /** Sum of that group's bucket counts — how much of the set it describes. */
54
+ readonly coverage: number;
55
+ /** Size of the candidate set `coverage` is a fraction of. */
56
+ readonly candidates: number;
57
+ }
58
+ /** One category the candidate set is made of. */
59
+ export interface FacetCategoryCount {
60
+ /** The slash-joined id path (`"32/149/163"`) — the SAME string the
61
+ * `category` filter and `SearchQueryState.category` already take, so a
62
+ * panel can offer it as a filter without translating anything. */
63
+ readonly category: string;
64
+ readonly count: number;
65
+ }
66
+ /**
67
+ * The honesty block beside the counts: `approximate`, `candidates`,
68
+ * `counted`, `skipped`, and (stapel-search 0.12.0+) where the facet plan came
69
+ * from. Rendered, never swallowed (spec §4.2).
70
+ *
71
+ * WHAT THE GENERATOR LOST: drf-spectacular describes `withheld` and
72
+ * `categories` as bare `object` arrays, so the generated members are
73
+ * `{[key: string]: unknown}[]` — the two fields a panel has to read
74
+ * field-by-field are the two it cannot. Both are corrected here to the
75
+ * documented row shapes; nothing else about `FacetMeta` is hand-written.
76
+ */
77
+ export type FacetMeta = Omit<Schemas["FacetMeta"], "withheld" | "categories"> & {
78
+ readonly withheld: readonly FacetWithheldGroup[];
79
+ readonly categories: readonly FacetCategoryCount[];
80
+ };
23
81
  /** `GET /suggest` 200, as the CURRENT generated schema describes it. */
24
82
  export type SuggestResponse = Schemas["SuggestResponse"];
25
83
  /**
@@ -223,7 +281,11 @@ export interface SuggestParams {
223
281
  * can arrive twice; {@link SearchDegradation} values are de-duplicated by
224
282
  * `raw` when parsed.
225
283
  */
226
- export type SearchDegradationKind = "typo_tolerance" | "phrase_synonyms" | "exact_total" | "exact_facet_counts" | "category_rollup" | "scorer" | "unknown";
284
+ export type SearchDegradationKind = "typo_tolerance" | "phrase_synonyms" | "exact_total" | "exact_facet_counts" | "category_rollup"
285
+ /** The engine has no `category_counts` verb, so the categories the result
286
+ * set is made of are unknown and no evidence facet plan could be drawn.
287
+ * An empty filter panel then means "we do not know", not "there are none". */
288
+ | "facet_plan_evidence" | "scorer" | "unknown";
227
289
  export interface SearchDegradation {
228
290
  readonly kind: SearchDegradationKind;
229
291
  /** The literal the server sent — shown for an `unknown` kind, because a
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAgHA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,sBAAsB,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiC;IAC5D,OAAO,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;AAC9C,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,WAAW;IACX,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,UAAU;CACX,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAoLA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,sBAAsB,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiC;IAC5D,OAAO,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;AAC9C,CAAC;AAQD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,WAAW;IACX,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,UAAU;CACX,CAAC"}
@@ -9,8 +9,14 @@ import type { FacetGroup, FacetOption } from "../state/facets.js";
9
9
  * leaves a group of seven whole rather than truncated by one row.
10
10
  */
11
11
  export declare const FACET_VISIBLE_OPTIONS = 8;
12
- /** The three shapes a facet group takes. */
13
- export type FacetGroupShape = "segmented" | "nested" | "checkbox";
12
+ /**
13
+ * From how many values a group stops being a list and becomes a DICTIONARY —
14
+ * the same eight, because it is the same fold: past it the group is drawn as
15
+ * its busiest values plus a box that searches the rest.
16
+ */
17
+ export declare const FACET_DICTIONARY_THRESHOLD: number;
18
+ /** The four shapes a facet group takes. */
19
+ export type FacetGroupShape = "segmented" | "nested" | "checkbox" | "dictionary";
14
20
  /** The option rows of a group, already nested where the schema nests them. */
15
21
  export interface FacetOptionNode {
16
22
  readonly option: FacetOption;
@@ -18,10 +24,34 @@ export interface FacetOptionNode {
18
24
  readonly depth: number;
19
25
  }
20
26
  /**
21
- * Which of the three shapes a group takes.
27
+ * Is this group a DICTIONARY a vocabulary's level, too long to scroll?
28
+ *
29
+ * Two ways to be one, because the schema is an optional slot and the live
30
+ * case is the one where it is empty:
31
+ *
32
+ * - the def types the slug `ref_select`/`ref_hierarchical_select`, i.e. its
33
+ * config is a POINTER into a vocabulary and there was never an option
34
+ * table to draw;
35
+ * - there is NO def at all and the answer came back with more values than a
36
+ * fold. At a live classified's cars branch the storefront passed an empty
37
+ * feature list, so the 418 makes arrived as an unnamed, untyped group of
38
+ * 418 checkboxes behind "Show all (418)". A box is the only control that
39
+ * answers that, and refusing to draw one because the schema is missing
40
+ * punishes the buyer for the wiring.
41
+ *
42
+ * Either way it takes more than {@link FACET_DICTIONARY_THRESHOLD} EVIDENCE
43
+ * buckets — values the answer actually counted. A zero-filled option table or
44
+ * a schema-only tail is a list a person can already read, and a box over it
45
+ * would search for values no document carries.
46
+ */
47
+ export declare function isDictionaryFacet(group: FacetGroup): boolean;
48
+ /**
49
+ * Which of the four shapes a group takes.
22
50
  *
23
51
  * Order matters: a hierarchical facet is nested even when it is single-choice,
24
- * because losing the tree costs more than losing the pills.
52
+ * because losing the tree costs more than losing the pills; and a dictionary
53
+ * is a dictionary before it is a checkbox list, because the checkbox list is
54
+ * the shape it was drawn as when nobody could pick a make.
25
55
  */
26
56
  export declare function facetGroupShape(group: FacetGroup): FacetGroupShape;
27
57
  /** The group's options in render order, carrying the depth the schema gives. */