@stapel/search-react 0.4.0 → 0.8.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 +191 -0
- package/README.md +1 -1
- package/dist/default/DegradationNotice.d.ts +7 -0
- package/dist/default/DegradationNotice.d.ts.map +1 -1
- package/dist/default/DegradationNotice.js +17 -6
- package/dist/default/DegradationNotice.js.map +1 -1
- package/dist/default/FacetGroupControl.d.ts +40 -0
- package/dist/default/FacetGroupControl.d.ts.map +1 -0
- package/dist/default/FacetGroupControl.js +176 -0
- package/dist/default/FacetGroupControl.js.map +1 -0
- package/dist/default/FacetPanelPane.d.ts +54 -3
- package/dist/default/FacetPanelPane.d.ts.map +1 -1
- package/dist/default/FacetPanelPane.js +116 -22
- package/dist/default/FacetPanelPane.js.map +1 -1
- package/dist/default/FilterChips.d.ts +28 -0
- package/dist/default/FilterChips.d.ts.map +1 -0
- package/dist/default/FilterChips.js +204 -0
- package/dist/default/FilterChips.js.map +1 -0
- package/dist/default/LanguageSelect.d.ts +9 -0
- package/dist/default/LanguageSelect.d.ts.map +1 -0
- package/dist/default/LanguageSelect.js +72 -0
- package/dist/default/LanguageSelect.js.map +1 -0
- package/dist/default/PageSizeSelect.d.ts +29 -0
- package/dist/default/PageSizeSelect.d.ts.map +1 -0
- package/dist/default/PageSizeSelect.js +25 -0
- package/dist/default/PageSizeSelect.js.map +1 -0
- package/dist/default/RangeFilterRow.d.ts +12 -0
- package/dist/default/RangeFilterRow.d.ts.map +1 -0
- package/dist/default/RangeFilterRow.js +75 -0
- package/dist/default/RangeFilterRow.js.map +1 -0
- package/dist/default/RankingDisclosurePane.d.ts +5 -0
- package/dist/default/RankingDisclosurePane.d.ts.map +1 -1
- package/dist/default/RankingDisclosurePane.js +15 -15
- package/dist/default/RankingDisclosurePane.js.map +1 -1
- package/dist/default/SearchBox.d.ts +13 -0
- package/dist/default/SearchBox.d.ts.map +1 -0
- package/dist/default/SearchBox.js +67 -0
- package/dist/default/SearchBox.js.map +1 -0
- package/dist/default/SearchPage.d.ts +94 -16
- package/dist/default/SearchPage.d.ts.map +1 -1
- package/dist/default/SearchPage.js +191 -8
- package/dist/default/SearchPage.js.map +1 -1
- package/dist/default/SearchResultCard.d.ts +19 -18
- package/dist/default/SearchResultCard.d.ts.map +1 -1
- package/dist/default/SearchResultCard.js +178 -5
- package/dist/default/SearchResultCard.js.map +1 -1
- package/dist/default/SearchResultsPane.d.ts +61 -3
- package/dist/default/SearchResultsPane.d.ts.map +1 -1
- package/dist/default/SearchResultsPane.js +51 -21
- package/dist/default/SearchResultsPane.js.map +1 -1
- package/dist/default/SortSelect.d.ts +10 -2
- package/dist/default/SortSelect.d.ts.map +1 -1
- package/dist/default/SortSelect.js +27 -24
- package/dist/default/SortSelect.js.map +1 -1
- package/dist/default/UrlIssueNotice.d.ts.map +1 -1
- package/dist/default/UrlIssueNotice.js +19 -1
- package/dist/default/UrlIssueNotice.js.map +1 -1
- package/dist/default/ViewSwitch.d.ts +66 -0
- package/dist/default/ViewSwitch.d.ts.map +1 -0
- package/dist/default/ViewSwitch.js +49 -0
- package/dist/default/ViewSwitch.js.map +1 -0
- package/dist/default/index.d.ts +38 -15
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +29 -12
- package/dist/default/index.js.map +1 -1
- package/dist/default/sortLabels.d.ts +5 -0
- package/dist/default/sortLabels.d.ts.map +1 -0
- package/dist/default/sortLabels.js +32 -0
- package/dist/default/sortLabels.js.map +1 -0
- package/dist/headless/FacetPanel.d.ts +17 -0
- package/dist/headless/FacetPanel.d.ts.map +1 -1
- package/dist/headless/FacetPanel.js +23 -2
- package/dist/headless/FacetPanel.js.map +1 -1
- package/dist/headless/useAppliedCount.d.ts +8 -0
- package/dist/headless/useAppliedCount.d.ts.map +1 -0
- package/dist/headless/useAppliedCount.js +30 -0
- package/dist/headless/useAppliedCount.js.map +1 -0
- package/dist/headless/useScorerNames.d.ts +4 -0
- package/dist/headless/useScorerNames.d.ts.map +1 -0
- package/dist/headless/useScorerNames.js +34 -0
- package/dist/headless/useScorerNames.js.map +1 -0
- package/dist/headless/useSearchBox.d.ts +44 -0
- package/dist/headless/useSearchBox.d.ts.map +1 -0
- package/dist/headless/useSearchBox.js +116 -0
- package/dist/headless/useSearchBox.js.map +1 -0
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +38 -4
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/keys.d.ts +55 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +101 -4
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +42 -4
- package/dist/i18n/ru.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/model/queries.d.ts +26 -2
- package/dist/model/queries.d.ts.map +1 -1
- package/dist/model/queries.js +38 -1
- package/dist/model/queries.js.map +1 -1
- package/dist/state/limits.d.ts +44 -0
- package/dist/state/limits.d.ts.map +1 -0
- package/dist/state/limits.js +44 -0
- package/dist/state/limits.js.map +1 -0
- package/dist/state/ranges.d.ts +52 -0
- package/dist/state/ranges.d.ts.map +1 -0
- package/dist/state/ranges.js +108 -0
- package/dist/state/ranges.js.map +1 -0
- package/llms.txt +16 -4
- package/manifest.json +268 -22
- package/nav-manifest.json +1 -1
- package/package.json +15 -10
- package/src/analytics/generated/events.json +1 -1
- package/src/default/DegradationNotice.tsx +34 -12
- package/src/default/FacetGroupControl.tsx +312 -0
- package/src/default/FacetPanelPane.tsx +320 -87
- package/src/default/FilterChips.tsx +415 -0
- package/src/default/LanguageSelect.tsx +93 -0
- package/src/default/PageSizeSelect.tsx +80 -0
- package/src/default/RangeFilterRow.tsx +148 -0
- package/src/default/RankingDisclosurePane.tsx +67 -35
- package/src/default/SearchBox.tsx +130 -0
- package/src/default/SearchPage.tsx +454 -44
- package/src/default/SearchResultCard.tsx +231 -24
- package/src/default/SearchResultsPane.tsx +158 -71
- package/src/default/SortSelect.tsx +50 -37
- package/src/default/UrlIssueNotice.tsx +21 -3
- package/src/default/ViewSwitch.tsx +147 -0
- package/src/default/index.ts +55 -15
- package/src/default/sortLabels.ts +34 -0
- package/src/headless/FacetPanel.tsx +30 -2
- package/src/headless/useAppliedCount.ts +41 -0
- package/src/headless/useScorerNames.ts +36 -0
- package/src/headless/useSearchBox.ts +189 -0
- package/src/i18n/es.ts +46 -4
- package/src/i18n/keys.ts +114 -4
- package/src/i18n/ru.ts +50 -4
- package/src/index.ts +22 -2
- package/src/model/queries.ts +51 -1
- package/src/state/limits.ts +50 -0
- package/src/state/ranges.ts +144 -0
- package/dist/default/ErrorAlert.d.ts +0 -9
- package/dist/default/ErrorAlert.d.ts.map +0 -1
- package/dist/default/ErrorAlert.js +0 -27
- package/dist/default/ErrorAlert.js.map +0 -1
- package/dist/default/theme.d.ts +0 -24
- package/dist/default/theme.d.ts.map +0 -1
- package/dist/default/theme.js +0 -39
- package/dist/default/theme.js.map +0 -1
- package/src/default/ErrorAlert.tsx +0 -46
- package/src/default/theme.tsx +0 -66
package/dist/i18n/keys.js
CHANGED
|
@@ -51,6 +51,15 @@ export const SEARCH_I18N_KEYS = {
|
|
|
51
51
|
resultsDistanceKm: "search.results.distance_km",
|
|
52
52
|
resultsUntitled: "search.results.untitled",
|
|
53
53
|
resultsOpen: "search.results.open",
|
|
54
|
+
/** Alt text for the card photo — the card's own title, in a sentence. */
|
|
55
|
+
resultsImageAlt: "search.results.image_alt",
|
|
56
|
+
// ── the query box ────────────────────────────────────────────────────────
|
|
57
|
+
boxLabel: "search.box.label",
|
|
58
|
+
boxPlaceholder: "search.box.placeholder",
|
|
59
|
+
boxSubmit: "search.box.submit",
|
|
60
|
+
boxClear: "search.box.clear",
|
|
61
|
+
/** Accessible name of the suggestion list under the box. */
|
|
62
|
+
boxSuggestions: "search.box.suggestions",
|
|
54
63
|
// ── sort ─────────────────────────────────────────────────────────────────
|
|
55
64
|
sortLabel: "search.sort.label",
|
|
56
65
|
sortRelevance: "search.sort.relevance",
|
|
@@ -59,6 +68,12 @@ export const SEARCH_I18N_KEYS = {
|
|
|
59
68
|
sortPriceDesc: "search.sort.price_desc",
|
|
60
69
|
sortDistance: "search.sort.distance",
|
|
61
70
|
sortServerChose: "search.sort.server_chose",
|
|
71
|
+
// ── how the results are ARRANGED (see ViewSwitch) ────────────────────────
|
|
72
|
+
/** The switch's own accessible name — a `Segmented` renders a radiogroup
|
|
73
|
+
* with no `<label for>` to name it. */
|
|
74
|
+
viewLabel: "search.view.label",
|
|
75
|
+
viewList: "search.view.list",
|
|
76
|
+
viewGrid: "search.view.grid",
|
|
62
77
|
// ── facets ───────────────────────────────────────────────────────────────
|
|
63
78
|
facetsTitle: "search.facets.title",
|
|
64
79
|
facetsLoading: "search.facets.loading",
|
|
@@ -74,9 +89,55 @@ export const SEARCH_I18N_KEYS = {
|
|
|
74
89
|
facetsRangeFrom: "search.facets.range_from",
|
|
75
90
|
facetsRangeTo: "search.facets.range_to",
|
|
76
91
|
facetsRangeApply: "search.facets.range_apply",
|
|
92
|
+
facetsRangeClear: "search.facets.range_clear",
|
|
93
|
+
/** Accessible names: the visible "From"/"To" repeat on every row, so the
|
|
94
|
+
* field's own name has to carry the feature it belongs to. */
|
|
95
|
+
facetsRangeFromAria: "search.facets.range_from_aria",
|
|
96
|
+
facetsRangeToAria: "search.facets.range_to_aria",
|
|
97
|
+
/** The reason "Apply" is off: the range reads backwards. */
|
|
98
|
+
facetsRangeInvalid: "search.facets.range_invalid",
|
|
99
|
+
/** The fold on a long facet group: "Show all (46)". The number is in
|
|
100
|
+
* brackets and not a counted noun, so this is one message and not a plural
|
|
101
|
+
* family — "(1)" never renders, because a group is only folded when the
|
|
102
|
+
* tail is longer than one row. */
|
|
103
|
+
facetsShowAll: "search.facets.show_all",
|
|
104
|
+
facetsShowLess: "search.facets.show_less",
|
|
105
|
+
// ── the filter panel as a whole (phone sheet + host slots) ───────────────
|
|
106
|
+
filtersOpen: "search.filters.open",
|
|
107
|
+
/** The sheet's commit button when the count is unknown. */
|
|
108
|
+
filtersApply: "search.filters.apply",
|
|
109
|
+
/** "Show N results" — an EXACT count on the sheet's commit button.
|
|
110
|
+
* A PLURAL FAMILY. */
|
|
111
|
+
filtersShowCount: "search.filters.show_count",
|
|
112
|
+
/** "Show N+ results" — a FLOOR on the same button. A PLURAL FAMILY. */
|
|
113
|
+
filtersShowCountAtLeast: "search.filters.show_count_at_least",
|
|
114
|
+
filtersDismiss: "search.filters.dismiss",
|
|
115
|
+
/** The accessible name of the phone chip ROW — a `role="group"` holding a
|
|
116
|
+
* dozen buttons is announced as nothing at all without one. */
|
|
117
|
+
filtersChipsLabel: "search.filters.chips_label",
|
|
118
|
+
/** The leading, icon-only chip: the whole panel. Icon-only means the name
|
|
119
|
+
* exists ONLY here, so this key is the control's entire accessibility. */
|
|
120
|
+
filtersAll: "search.filters.all",
|
|
121
|
+
/** A chip filtering on more than one value: "Bosch, +2". Not a plural
|
|
122
|
+
* family — nothing is being counted in words. */
|
|
123
|
+
filtersChipMore: "search.filters.chip_more",
|
|
124
|
+
// ── category (a host slot, plus the control that removes it) ─────────────
|
|
125
|
+
categoryTitle: "search.category.title",
|
|
126
|
+
categoryClear: "search.category.clear",
|
|
127
|
+
categoryCurrent: "search.category.current",
|
|
128
|
+
// ── language of the query ────────────────────────────────────────────────
|
|
129
|
+
languageLabel: "search.language.label",
|
|
130
|
+
languageAny: "search.language.any",
|
|
131
|
+
// ── page size ────────────────────────────────────────────────────────────
|
|
132
|
+
limitLabel: "search.limit.label",
|
|
133
|
+
limitOption: "search.limit.option",
|
|
134
|
+
/** Said beside the control when the URL carries a size the ladder does not
|
|
135
|
+
* offer — otherwise the story of "we kept your link's size" is invisible. */
|
|
136
|
+
limitFromLink: "search.limit.from_link",
|
|
77
137
|
// ── geo ──────────────────────────────────────────────────────────────────
|
|
78
138
|
geoTitle: "search.geo.title",
|
|
79
139
|
geoRadiusKm: "search.geo.radius_km",
|
|
140
|
+
geoRadiusLabel: "search.geo.radius_label",
|
|
80
141
|
geoClear: "search.geo.clear",
|
|
81
142
|
geoBox: "search.geo.box",
|
|
82
143
|
geoCenter: "search.geo.center",
|
|
@@ -127,6 +188,8 @@ export const SEARCH_I18N_PLURAL_KEYS = [
|
|
|
127
188
|
SEARCH_I18N_KEYS.resultsCountApproximate,
|
|
128
189
|
SEARCH_I18N_KEYS.resultsCountAtLeast,
|
|
129
190
|
SEARCH_I18N_KEYS.resultsCountExact,
|
|
191
|
+
SEARCH_I18N_KEYS.filtersShowCount,
|
|
192
|
+
SEARCH_I18N_KEYS.filtersShowCountAtLeast,
|
|
130
193
|
];
|
|
131
194
|
/**
|
|
132
195
|
* English fallback bundle for search-react UI keys + backend error codes.
|
|
@@ -158,6 +221,12 @@ export const searchI18nBundleEn = {
|
|
|
158
221
|
"search.results.distance_km": "{km} km away",
|
|
159
222
|
"search.results.untitled": "Untitled",
|
|
160
223
|
"search.results.open": "Open",
|
|
224
|
+
"search.results.image_alt": "Photo of {title}",
|
|
225
|
+
"search.box.label": "Search",
|
|
226
|
+
"search.box.placeholder": "What are you looking for?",
|
|
227
|
+
"search.box.submit": "Search",
|
|
228
|
+
"search.box.clear": "Clear the search",
|
|
229
|
+
"search.box.suggestions": "Suggestions",
|
|
161
230
|
"search.sort.label": "Sort",
|
|
162
231
|
"search.sort.relevance": "Most relevant",
|
|
163
232
|
"search.sort.newest": "Newest first",
|
|
@@ -165,6 +234,9 @@ export const searchI18nBundleEn = {
|
|
|
165
234
|
"search.sort.price_desc": "Price: high to low",
|
|
166
235
|
"search.sort.distance": "Nearest first",
|
|
167
236
|
"search.sort.server_chose": "Sorted by {sort}",
|
|
237
|
+
"search.view.label": "View",
|
|
238
|
+
"search.view.list": "List",
|
|
239
|
+
"search.view.grid": "Grid",
|
|
168
240
|
"search.facets.title": "Filters",
|
|
169
241
|
"search.facets.loading": "Loading filters…",
|
|
170
242
|
"search.facets.load_failed": "We could not load the filters",
|
|
@@ -178,16 +250,41 @@ export const searchI18nBundleEn = {
|
|
|
178
250
|
"search.facets.range_from": "From",
|
|
179
251
|
"search.facets.range_to": "To",
|
|
180
252
|
"search.facets.range_apply": "Apply",
|
|
253
|
+
"search.facets.range_clear": "Clear",
|
|
254
|
+
"search.facets.range_from_aria": "{feature}, from",
|
|
255
|
+
"search.facets.range_to_aria": "{feature}, up to",
|
|
256
|
+
"search.facets.show_all": "Show all ({count})",
|
|
257
|
+
"search.facets.show_less": "Show fewer",
|
|
258
|
+
"search.facets.range_invalid": "“From” is larger than “to”, so nothing could match. Swap them to apply this range.",
|
|
259
|
+
"search.filters.open": "Filters ({count})",
|
|
260
|
+
"search.filters.apply": "Show results",
|
|
261
|
+
"search.filters.show_count.one": "Show {count} result",
|
|
262
|
+
"search.filters.show_count.other": "Show {count} results",
|
|
263
|
+
"search.filters.show_count_at_least.one": "Show {count}+ result",
|
|
264
|
+
"search.filters.show_count_at_least.other": "Show {count}+ results",
|
|
265
|
+
"search.filters.dismiss": "Close the filters",
|
|
266
|
+
"search.filters.chips_label": "Filters",
|
|
267
|
+
"search.filters.all": "All filters",
|
|
268
|
+
"search.filters.chip_more": ", +{count}",
|
|
269
|
+
"search.category.title": "Category",
|
|
270
|
+
"search.category.clear": "Search the whole catalogue",
|
|
271
|
+
"search.category.current": "Searching inside {path}",
|
|
272
|
+
"search.language.label": "Query language",
|
|
273
|
+
"search.language.any": "Any language",
|
|
274
|
+
"search.limit.label": "Per page",
|
|
275
|
+
"search.limit.option": "{count} per page",
|
|
276
|
+
"search.limit.from_link": "This link sets its own page size.",
|
|
181
277
|
"search.geo.title": "Location",
|
|
182
278
|
"search.geo.radius_km": "Within {km} km",
|
|
279
|
+
"search.geo.radius_label": "Radius, km",
|
|
183
280
|
"search.geo.clear": "Anywhere",
|
|
184
281
|
"search.geo.box": "Inside the shown area",
|
|
185
282
|
"search.geo.center": "Around {lat}, {lon}",
|
|
186
283
|
"search.url.issues_title": "Part of this link could not be read",
|
|
187
|
-
"search.url.issue.not_a_number": "{param} is not a number
|
|
188
|
-
"search.url.issue.geo_incomplete": "the location
|
|
189
|
-
"search.url.issue.bbox_malformed": "the area
|
|
190
|
-
"search.url.issue.range_malformed": "{param}
|
|
284
|
+
"search.url.issue.not_a_number": "“{param}” in this link is not a number, so it was ignored",
|
|
285
|
+
"search.url.issue.geo_incomplete": "the location in this link is only half there, so it was ignored",
|
|
286
|
+
"search.url.issue.bbox_malformed": "the map area in this link is incomplete, so it was ignored",
|
|
287
|
+
"search.url.issue.range_malformed": "the range “{param}” in this link needs two numbers, so it was ignored",
|
|
191
288
|
"search.degraded.title": "What this search could not do",
|
|
192
289
|
"search.degraded.typo_tolerance": "Typos were not corrected — the search engine in use cannot do it.",
|
|
193
290
|
"search.degraded.phrase_synonyms": "Synonyms were not expanded — the search engine in use cannot do it.",
|
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;
|
|
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,cAsJhC,CAAC;AAEF;yDACyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE7D"}
|
package/dist/i18n/ru.js
CHANGED
|
@@ -55,6 +55,12 @@ export const searchI18nBundleRu = {
|
|
|
55
55
|
"search.results.distance_km": "{km} км от вас",
|
|
56
56
|
"search.results.untitled": "Без названия",
|
|
57
57
|
"search.results.open": "Открыть",
|
|
58
|
+
"search.results.image_alt": "Фото: {title}",
|
|
59
|
+
"search.box.label": "Поиск",
|
|
60
|
+
"search.box.placeholder": "Что ищете?",
|
|
61
|
+
"search.box.submit": "Найти",
|
|
62
|
+
"search.box.clear": "Очистить запрос",
|
|
63
|
+
"search.box.suggestions": "Подсказки",
|
|
58
64
|
"search.sort.label": "Сортировка",
|
|
59
65
|
"search.sort.relevance": "По релевантности",
|
|
60
66
|
"search.sort.newest": "Сначала новые",
|
|
@@ -62,6 +68,9 @@ export const searchI18nBundleRu = {
|
|
|
62
68
|
"search.sort.price_desc": "Сначала дороже",
|
|
63
69
|
"search.sort.distance": "Сначала ближние",
|
|
64
70
|
"search.sort.server_chose": "Отсортировано: {sort}",
|
|
71
|
+
"search.view.label": "Вид",
|
|
72
|
+
"search.view.list": "Списком",
|
|
73
|
+
"search.view.grid": "Плиткой",
|
|
65
74
|
"search.facets.title": "Фильтры",
|
|
66
75
|
"search.facets.loading": "Загружаем фильтры…",
|
|
67
76
|
"search.facets.load_failed": "Не удалось загрузить фильтры.",
|
|
@@ -75,16 +84,45 @@ export const searchI18nBundleRu = {
|
|
|
75
84
|
"search.facets.range_from": "От",
|
|
76
85
|
"search.facets.range_to": "До",
|
|
77
86
|
"search.facets.range_apply": "Применить",
|
|
87
|
+
"search.facets.range_clear": "Сбросить",
|
|
88
|
+
"search.facets.range_from_aria": "{feature}, от",
|
|
89
|
+
"search.facets.range_to_aria": "{feature}, до",
|
|
90
|
+
"search.facets.show_all": "Показать все ({count})",
|
|
91
|
+
"search.facets.show_less": "Свернуть",
|
|
92
|
+
"search.facets.range_invalid": "«От» больше, чем «до», — под такой диапазон ничего не подойдёт. Поменяйте значения местами.",
|
|
93
|
+
"search.filters.open": "Фильтры ({count})",
|
|
94
|
+
"search.filters.apply": "Показать результаты",
|
|
95
|
+
"search.filters.show_count.one": "Показать {count} объявление",
|
|
96
|
+
"search.filters.show_count.few": "Показать {count} объявления",
|
|
97
|
+
"search.filters.show_count.many": "Показать {count} объявлений",
|
|
98
|
+
"search.filters.show_count.other": "Показать {count} объявления",
|
|
99
|
+
"search.filters.show_count_at_least.one": "Показать {count}+ объявление",
|
|
100
|
+
"search.filters.show_count_at_least.few": "Показать {count}+ объявления",
|
|
101
|
+
"search.filters.show_count_at_least.many": "Показать {count}+ объявлений",
|
|
102
|
+
"search.filters.show_count_at_least.other": "Показать {count}+ объявления",
|
|
103
|
+
"search.filters.dismiss": "Закрыть фильтры",
|
|
104
|
+
"search.filters.chips_label": "Фильтры",
|
|
105
|
+
"search.filters.all": "Все фильтры",
|
|
106
|
+
"search.filters.chip_more": ", +{count}",
|
|
107
|
+
"search.category.title": "Категория",
|
|
108
|
+
"search.category.clear": "Искать по всему каталогу",
|
|
109
|
+
"search.category.current": "Ищем внутри {path}",
|
|
110
|
+
"search.language.label": "Язык запроса",
|
|
111
|
+
"search.language.any": "Любой язык",
|
|
112
|
+
"search.limit.label": "На странице",
|
|
113
|
+
"search.limit.option": "{count} на странице",
|
|
114
|
+
"search.limit.from_link": "Размер страницы задан этой ссылкой.",
|
|
78
115
|
"search.geo.title": "Где искать",
|
|
79
116
|
"search.geo.radius_km": "В радиусе {km} км",
|
|
117
|
+
"search.geo.radius_label": "Радиус, км",
|
|
80
118
|
"search.geo.clear": "Везде",
|
|
81
119
|
"search.geo.box": "В показанной области",
|
|
82
120
|
"search.geo.center": "Рядом с {lat}, {lon}",
|
|
83
121
|
"search.url.issues_title": "Часть этой ссылки прочитать не удалось",
|
|
84
|
-
"search.url.issue.not_a_number": "{param} — не число, параметр пропущен",
|
|
85
|
-
"search.url.issue.geo_incomplete": "
|
|
86
|
-
"search.url.issue.bbox_malformed": "
|
|
87
|
-
"search.url.issue.range_malformed": "{param}
|
|
122
|
+
"search.url.issue.not_a_number": "«{param}» в этой ссылке — не число, поэтому параметр пропущен",
|
|
123
|
+
"search.url.issue.geo_incomplete": "точка в этой ссылке указана наполовину, поэтому она пропущена",
|
|
124
|
+
"search.url.issue.bbox_malformed": "область на карте в этой ссылке указана не полностью, поэтому она пропущена",
|
|
125
|
+
"search.url.issue.range_malformed": "диапазону «{param}» в этой ссылке не хватает чисел, поэтому он пропущен",
|
|
88
126
|
"search.degraded.title": "Что этот поиск не смог сделать",
|
|
89
127
|
"search.degraded.typo_tolerance": "Опечатки не исправлялись — используемый поисковый движок этого не умеет.",
|
|
90
128
|
"search.degraded.phrase_synonyms": "Синонимы не подставлялись — используемый поисковый движок этого не умеет.",
|
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;
|
|
1
|
+
{"version":3,"file":"ru.js","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -50,20 +50,25 @@ export { countIsEstimate, countKind, degradationMessageKey, isCountNuanceOnly, p
|
|
|
50
50
|
export type { SearchCountKind } from "./state/degradations.js";
|
|
51
51
|
export { buildFacetGroups, facetOptionLabel } from "./state/facets.js";
|
|
52
52
|
export type { BuildFacetGroupsInput, FacetGroup, FacetOption, } from "./state/facets.js";
|
|
53
|
+
export { RANGE_FEATURE_TYPES, buildRangeGroups, isRangeFeature, isRangeUsable, } from "./state/ranges.js";
|
|
54
|
+
export type { BuildRangeGroupsInput, RangeGroup } from "./state/ranges.js";
|
|
55
|
+
export { SEARCH_BOX_DEBOUNCE_MS, SEARCH_BOX_SUGGEST_DEBOUNCE_MS, SEARCH_DEFAULT_PAGE_SIZE, SEARCH_MAX_PAGE_SIZE, SEARCH_QUERY_MAX_CHARS, SUGGEST_MAX_LIMIT, SUGGEST_MIN_CHARS, } from "./state/limits.js";
|
|
53
56
|
export { createSearchRuntime } from "./model/runtime.js";
|
|
54
57
|
export type { SearchRuntime, CreateSearchRuntimeOptions, } from "./model/runtime.js";
|
|
55
58
|
export { SearchRuntimeContext, useSearchRuntime, useSearchApi, useSearchAnalytics, } from "./model/context.js";
|
|
56
59
|
export { searchQueryKeys } from "./model/queryKeys.js";
|
|
57
60
|
export type { SearchQueryKeyParams } from "./model/queryKeys.js";
|
|
58
|
-
export { useRankingDisclosure, useSearchQuery } from "./model/queries.js";
|
|
61
|
+
export { useRankingDisclosure, useSearchQuery, useSuggest } from "./model/queries.js";
|
|
59
62
|
export { SearchProvider } from "./headless/SearchProvider.js";
|
|
60
63
|
export { SearchStateProvider, useSearchState } from "./headless/SearchStateProvider.js";
|
|
61
64
|
export type { SearchParamsAdapter, SearchStateBag, SearchStateProviderProps, } from "./headless/SearchStateProvider.js";
|
|
62
65
|
export { SearchResults } from "./headless/SearchResults.js";
|
|
63
66
|
export type { SearchPageInfo, SearchResultsBag } from "./headless/SearchResults.js";
|
|
64
|
-
export { FacetPanel } from "./headless/FacetPanel.js";
|
|
67
|
+
export { FacetPanel, useFacetPanel } from "./headless/FacetPanel.js";
|
|
65
68
|
export type { FacetPanelBag } from "./headless/FacetPanel.js";
|
|
66
69
|
export { useAppliedSort } from "./headless/useAppliedSort.js";
|
|
70
|
+
export { useSearchBox } from "./headless/useSearchBox.js";
|
|
71
|
+
export type { SearchBoxBag, UseSearchBoxOptions } from "./headless/useSearchBox.js";
|
|
67
72
|
export { RankingDisclosure } from "./headless/RankingDisclosure.js";
|
|
68
73
|
export type { RankingDisclosureBag } from "./headless/RankingDisclosure.js";
|
|
69
74
|
export { navEntries } from "./nav/manifest.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAGH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,SAAS,EACT,cAAc,EACd,eAAe,EACf,MAAM,EACN,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,EACT,YAAY,EACZ,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAGxB,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;AAC7B,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EACV,qBAAqB,EACrB,UAAU,EACV,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EACV,aAAa,EACb,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -46,17 +46,20 @@ export { SEARCH_SORTS } from "./api/types.js";
|
|
|
46
46
|
export { FILTER_PREFIX, RANGE_PREFIX, SEARCH_PARAM, activeFilterCount, clearFilters, ownsParam, parseSearchState, patchSearchState, setFilterValues, setRangeValue, toggleFilterValue, writeSearchState, } from "./state/urlState.js";
|
|
47
47
|
export { countIsEstimate, countKind, degradationMessageKey, isCountNuanceOnly, parseDegradations, } from "./state/degradations.js";
|
|
48
48
|
export { buildFacetGroups, facetOptionLabel } from "./state/facets.js";
|
|
49
|
+
export { RANGE_FEATURE_TYPES, buildRangeGroups, isRangeFeature, isRangeUsable, } from "./state/ranges.js";
|
|
50
|
+
export { SEARCH_BOX_DEBOUNCE_MS, SEARCH_BOX_SUGGEST_DEBOUNCE_MS, SEARCH_DEFAULT_PAGE_SIZE, SEARCH_MAX_PAGE_SIZE, SEARCH_QUERY_MAX_CHARS, SUGGEST_MAX_LIMIT, SUGGEST_MIN_CHARS, } from "./state/limits.js";
|
|
49
51
|
// ── model (runtime wiring, query keys, context, hooks) ───────────────────────
|
|
50
52
|
export { createSearchRuntime } from "./model/runtime.js";
|
|
51
53
|
export { SearchRuntimeContext, useSearchRuntime, useSearchApi, useSearchAnalytics, } from "./model/context.js";
|
|
52
54
|
export { searchQueryKeys } from "./model/queryKeys.js";
|
|
53
|
-
export { useRankingDisclosure, useSearchQuery } from "./model/queries.js";
|
|
55
|
+
export { useRankingDisclosure, useSearchQuery, useSuggest } from "./model/queries.js";
|
|
54
56
|
// ── headless (renderless components) ─────────────────────────────────────────
|
|
55
57
|
export { SearchProvider } from "./headless/SearchProvider.js";
|
|
56
58
|
export { SearchStateProvider, useSearchState } from "./headless/SearchStateProvider.js";
|
|
57
59
|
export { SearchResults } from "./headless/SearchResults.js";
|
|
58
|
-
export { FacetPanel } from "./headless/FacetPanel.js";
|
|
60
|
+
export { FacetPanel, useFacetPanel } from "./headless/FacetPanel.js";
|
|
59
61
|
export { useAppliedSort } from "./headless/useAppliedSort.js";
|
|
62
|
+
export { useSearchBox } from "./headless/useSearchBox.js";
|
|
60
63
|
export { RankingDisclosure } from "./headless/RankingDisclosure.js";
|
|
61
64
|
// ── nav manifest (the pair's public surface declaration) ─────────────────────
|
|
62
65
|
export { navEntries } from "./nav/manifest.js";
|
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,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmB9C,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,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAOvE,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAKzD,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,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,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmB9C,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,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAOvE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,gFAAgF;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAKzD,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,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,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/queries.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { UseQueryResult } from "@tanstack/react-query";
|
|
2
2
|
import type { StapelApiError } from "@stapel/core";
|
|
3
|
-
import type { RankingResponse, SearchQueryState, SearchResponse } from "../api/types.js";
|
|
3
|
+
import type { RankingResponse, SearchQueryState, SearchResponse, SuggestResponse } from "../api/types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Read hooks over the search API (frontend-standard §2). Keys are namespaced
|
|
6
6
|
* (see `searchQueryKeys`).
|
|
@@ -38,11 +38,35 @@ import type { RankingResponse, SearchQueryState, SearchResponse } from "../api/t
|
|
|
38
38
|
export declare function useSearchQuery(state: SearchQueryState, options?: {
|
|
39
39
|
readonly enabled?: boolean;
|
|
40
40
|
}): UseQueryResult<SearchResponse, StapelApiError>;
|
|
41
|
+
/**
|
|
42
|
+
* Title prefixes from the index, for the search box's typeahead.
|
|
43
|
+
*
|
|
44
|
+
* Not from a query log: stapel-search keeps none, which is a privacy decision
|
|
45
|
+
* before it is a product one (`services.suggest`). So the list is what exists
|
|
46
|
+
* in the catalogue, and choosing one is always a search that has results.
|
|
47
|
+
*
|
|
48
|
+
* `enabled` is the debounce's partner, not its replacement: the CALLER holds a
|
|
49
|
+
* debounced prefix (see `useSearchBox`) and this hook refuses to ask about a
|
|
50
|
+
* prefix too short to mean anything. `placeholderData: keepPreviousData` keeps
|
|
51
|
+
* the previous list under the cursor while the next one is in flight — a menu
|
|
52
|
+
* that empties and refills on every keystroke is a menu nobody can click.
|
|
53
|
+
*
|
|
54
|
+
* `staleTime` is a minute: the index changes when something is published, not
|
|
55
|
+
* between two letters of one word.
|
|
56
|
+
*/
|
|
57
|
+
export declare function useSuggest(params: {
|
|
58
|
+
readonly type: string;
|
|
59
|
+
readonly q: string;
|
|
60
|
+
readonly limit?: number;
|
|
61
|
+
readonly enabled?: boolean;
|
|
62
|
+
}): UseQueryResult<SuggestResponse, StapelApiError>;
|
|
41
63
|
/**
|
|
42
64
|
* The P2B Art. 5 ranking disclosure.
|
|
43
65
|
*
|
|
44
66
|
* `staleTime: Infinity`: the scorer registry changes when somebody deploys,
|
|
45
67
|
* not while a person reads the page it explains.
|
|
46
68
|
*/
|
|
47
|
-
export declare function useRankingDisclosure(type?: string
|
|
69
|
+
export declare function useRankingDisclosure(type?: string, options?: {
|
|
70
|
+
readonly enabled?: boolean;
|
|
71
|
+
}): UseQueryResult<RankingResponse, StapelApiError>;
|
|
48
72
|
//# sourceMappingURL=queries.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAKzB;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,gBAAgB,EACvB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,cAAc,CAAC,cAAc,EAAE,cAAc,CAAC,CAUhD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC,CAuBlD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,cAAc,CAAC,eAAe,EAAE,cAAc,CAAC,CASjD"}
|
package/dist/model/queries.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { keepPreviousData, useQuery } from "@tanstack/react-query";
|
|
2
2
|
import { searchQueryParams } from "../api/searchApi.js";
|
|
3
|
+
import { SUGGEST_MAX_LIMIT, SUGGEST_MIN_CHARS } from "../state/limits.js";
|
|
3
4
|
import { useSearchApi } from "./context.js";
|
|
4
5
|
import { searchQueryKeys } from "./queryKeys.js";
|
|
5
6
|
/**
|
|
@@ -47,17 +48,53 @@ export function useSearchQuery(state, options) {
|
|
|
47
48
|
retry: false,
|
|
48
49
|
});
|
|
49
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Title prefixes from the index, for the search box's typeahead.
|
|
53
|
+
*
|
|
54
|
+
* Not from a query log: stapel-search keeps none, which is a privacy decision
|
|
55
|
+
* before it is a product one (`services.suggest`). So the list is what exists
|
|
56
|
+
* in the catalogue, and choosing one is always a search that has results.
|
|
57
|
+
*
|
|
58
|
+
* `enabled` is the debounce's partner, not its replacement: the CALLER holds a
|
|
59
|
+
* debounced prefix (see `useSearchBox`) and this hook refuses to ask about a
|
|
60
|
+
* prefix too short to mean anything. `placeholderData: keepPreviousData` keeps
|
|
61
|
+
* the previous list under the cursor while the next one is in flight — a menu
|
|
62
|
+
* that empties and refills on every keystroke is a menu nobody can click.
|
|
63
|
+
*
|
|
64
|
+
* `staleTime` is a minute: the index changes when something is published, not
|
|
65
|
+
* between two letters of one word.
|
|
66
|
+
*/
|
|
67
|
+
export function useSuggest(params) {
|
|
68
|
+
const api = useSearchApi();
|
|
69
|
+
const q = params.q.trim();
|
|
70
|
+
const limit = params.limit;
|
|
71
|
+
return useQuery({
|
|
72
|
+
queryKey: searchQueryKeys.suggest(params.type, q, limit),
|
|
73
|
+
queryFn: ({ signal }) => api.suggest({
|
|
74
|
+
type: params.type,
|
|
75
|
+
q,
|
|
76
|
+
...(limit !== undefined ? { limit: Math.min(limit, SUGGEST_MAX_LIMIT) } : {}),
|
|
77
|
+
}, { signal }),
|
|
78
|
+
enabled: (params.enabled ?? true) &&
|
|
79
|
+
params.type.length > 0 &&
|
|
80
|
+
q.length >= SUGGEST_MIN_CHARS,
|
|
81
|
+
placeholderData: keepPreviousData,
|
|
82
|
+
staleTime: 60_000,
|
|
83
|
+
retry: false,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
50
86
|
/**
|
|
51
87
|
* The P2B Art. 5 ranking disclosure.
|
|
52
88
|
*
|
|
53
89
|
* `staleTime: Infinity`: the scorer registry changes when somebody deploys,
|
|
54
90
|
* not while a person reads the page it explains.
|
|
55
91
|
*/
|
|
56
|
-
export function useRankingDisclosure(type) {
|
|
92
|
+
export function useRankingDisclosure(type, options) {
|
|
57
93
|
const api = useSearchApi();
|
|
58
94
|
return useQuery({
|
|
59
95
|
queryKey: searchQueryKeys.ranking(type),
|
|
60
96
|
queryFn: ({ signal }) => api.ranking(type, { signal }),
|
|
97
|
+
enabled: options?.enabled ?? true,
|
|
61
98
|
staleTime: Number.POSITIVE_INFINITY,
|
|
62
99
|
retry: false,
|
|
63
100
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/model/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAOxD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAuB,EACvB,OAAwC;IAExC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAC5D,eAAe,EAAE,gBAAgB;QACjC,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,MAK1B;IACC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;QACxD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CACtB,GAAG,CAAC,OAAO,CACT;YACE,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,CAAC;YACD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E,EACD,EAAE,MAAM,EAAE,CACX;QACH,OAAO,EACL,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,MAAM,IAAI,iBAAiB;QAC/B,eAAe,EAAE,gBAAgB;QACjC,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAa,EACb,OAAwC;IAExC,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,OAAO,QAAQ,CAAC;QACd,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;QACtD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACjC,SAAS,EAAE,MAAM,CAAC,iBAAiB;QACnC,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The backend's own limits, in one place — and the two timings the client
|
|
3
|
+
* chooses so that it never provokes them.
|
|
4
|
+
*
|
|
5
|
+
* Every number here is a fact about stapel-search's `conf.py` (or, for the
|
|
6
|
+
* debounces, a decision taken because of one). They live in the state layer,
|
|
7
|
+
* beside the codec, because they are properties of the CONTRACT rather than of
|
|
8
|
+
* any component: a control that caps its input at `SEARCH_QUERY_MAX_CHARS`
|
|
9
|
+
* cannot produce `error.400.search_query_too_long`, and a typeahead that waits
|
|
10
|
+
* for `SEARCH_BOX_SUGGEST_DEBOUNCE_MS` does not earn a 429 from a throttled
|
|
11
|
+
* endpoint for typing quickly.
|
|
12
|
+
*
|
|
13
|
+
* They are DEFAULTS, not assertions: a deployment may raise `MAX_PAGE_SIZE` or
|
|
14
|
+
* lower `MAX_QUERY_CHARS`, and nothing here is sent to the server as a claim.
|
|
15
|
+
* The server remains the one entitled to refuse.
|
|
16
|
+
*/
|
|
17
|
+
/** `MAX_QUERY_CHARS` — the longest `q` (and suggest prefix) the server reads. */
|
|
18
|
+
export declare const SEARCH_QUERY_MAX_CHARS = 200;
|
|
19
|
+
/** `DEFAULT_PAGE_SIZE` — what a request with no `limit` gets. */
|
|
20
|
+
export declare const SEARCH_DEFAULT_PAGE_SIZE = 24;
|
|
21
|
+
/** `MAX_PAGE_SIZE` — the server clamps anything above this. */
|
|
22
|
+
export declare const SEARCH_MAX_PAGE_SIZE = 100;
|
|
23
|
+
/** `services.suggest` clamps `limit` into `1..25`. */
|
|
24
|
+
export declare const SUGGEST_MAX_LIMIT = 25;
|
|
25
|
+
/**
|
|
26
|
+
* The shortest prefix worth asking the index about.
|
|
27
|
+
*
|
|
28
|
+
* One and two letters match nearly everything, so the answer is noise and the
|
|
29
|
+
* request is a keystroke tax on a throttled endpoint (`SuggestThrottle`,
|
|
30
|
+
* scope `search-suggest`). Three is where a prefix starts to mean something.
|
|
31
|
+
*/
|
|
32
|
+
export declare const SUGGEST_MIN_CHARS = 3;
|
|
33
|
+
/** How long the typing has to stop before the SEARCH runs. */
|
|
34
|
+
export declare const SEARCH_BOX_DEBOUNCE_MS = 350;
|
|
35
|
+
/**
|
|
36
|
+
* How long it has to stop before the INDEX is asked for prefixes.
|
|
37
|
+
*
|
|
38
|
+
* Shorter than the commit: a suggestion is only worth having while you are
|
|
39
|
+
* still typing, and it costs a cheap read of one column. Longer than zero: the
|
|
40
|
+
* endpoint is throttled per client, and a request per keystroke is how a person
|
|
41
|
+
* gets 429s for typing quickly.
|
|
42
|
+
*/
|
|
43
|
+
export declare const SEARCH_BOX_SUGGEST_DEBOUNCE_MS = 150;
|
|
44
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/state/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC,8DAA8D;AAC9D,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,MAAM,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The backend's own limits, in one place — and the two timings the client
|
|
3
|
+
* chooses so that it never provokes them.
|
|
4
|
+
*
|
|
5
|
+
* Every number here is a fact about stapel-search's `conf.py` (or, for the
|
|
6
|
+
* debounces, a decision taken because of one). They live in the state layer,
|
|
7
|
+
* beside the codec, because they are properties of the CONTRACT rather than of
|
|
8
|
+
* any component: a control that caps its input at `SEARCH_QUERY_MAX_CHARS`
|
|
9
|
+
* cannot produce `error.400.search_query_too_long`, and a typeahead that waits
|
|
10
|
+
* for `SEARCH_BOX_SUGGEST_DEBOUNCE_MS` does not earn a 429 from a throttled
|
|
11
|
+
* endpoint for typing quickly.
|
|
12
|
+
*
|
|
13
|
+
* They are DEFAULTS, not assertions: a deployment may raise `MAX_PAGE_SIZE` or
|
|
14
|
+
* lower `MAX_QUERY_CHARS`, and nothing here is sent to the server as a claim.
|
|
15
|
+
* The server remains the one entitled to refuse.
|
|
16
|
+
*/
|
|
17
|
+
/** `MAX_QUERY_CHARS` — the longest `q` (and suggest prefix) the server reads. */
|
|
18
|
+
export const SEARCH_QUERY_MAX_CHARS = 200;
|
|
19
|
+
/** `DEFAULT_PAGE_SIZE` — what a request with no `limit` gets. */
|
|
20
|
+
export const SEARCH_DEFAULT_PAGE_SIZE = 24;
|
|
21
|
+
/** `MAX_PAGE_SIZE` — the server clamps anything above this. */
|
|
22
|
+
export const SEARCH_MAX_PAGE_SIZE = 100;
|
|
23
|
+
/** `services.suggest` clamps `limit` into `1..25`. */
|
|
24
|
+
export const SUGGEST_MAX_LIMIT = 25;
|
|
25
|
+
/**
|
|
26
|
+
* The shortest prefix worth asking the index about.
|
|
27
|
+
*
|
|
28
|
+
* One and two letters match nearly everything, so the answer is noise and the
|
|
29
|
+
* request is a keystroke tax on a throttled endpoint (`SuggestThrottle`,
|
|
30
|
+
* scope `search-suggest`). Three is where a prefix starts to mean something.
|
|
31
|
+
*/
|
|
32
|
+
export const SUGGEST_MIN_CHARS = 3;
|
|
33
|
+
/** How long the typing has to stop before the SEARCH runs. */
|
|
34
|
+
export const SEARCH_BOX_DEBOUNCE_MS = 350;
|
|
35
|
+
/**
|
|
36
|
+
* How long it has to stop before the INDEX is asked for prefixes.
|
|
37
|
+
*
|
|
38
|
+
* Shorter than the commit: a suggestion is only worth having while you are
|
|
39
|
+
* still typing, and it costs a cheap read of one column. Longer than zero: the
|
|
40
|
+
* endpoint is throttled per client, and a request per keystroke is how a person
|
|
41
|
+
* gets 429s for typing quickly.
|
|
42
|
+
*/
|
|
43
|
+
export const SEARCH_BOX_SUGGEST_DEBOUNCE_MS = 150;
|
|
44
|
+
//# sourceMappingURL=limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/state/limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,iEAAiE;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,sDAAsD;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC"}
|