@stapel/search-react 0.4.0 → 0.7.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 +151 -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/FacetPanelPane.d.ts +54 -3
- package/dist/default/FacetPanelPane.d.ts.map +1 -1
- package/dist/default/FacetPanelPane.js +119 -19
- package/dist/default/FacetPanelPane.js.map +1 -1
- 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 +54 -16
- package/dist/default/SearchPage.d.ts.map +1 -1
- package/dist/default/SearchPage.js +155 -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 +42 -3
- package/dist/default/SearchResultsPane.d.ts.map +1 -1
- package/dist/default/SearchResultsPane.js +38 -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/index.d.ts +32 -15
- package/dist/default/index.d.ts.map +1 -1
- package/dist/default/index.js +26 -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 +30 -4
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/keys.d.ts +35 -0
- package/dist/i18n/keys.d.ts.map +1 -1
- package/dist/i18n/keys.js +72 -4
- package/dist/i18n/keys.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +34 -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 +15 -4
- package/manifest.json +238 -21
- 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/FacetPanelPane.tsx +343 -64
- 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 +351 -44
- package/src/default/SearchResultCard.tsx +231 -24
- package/src/default/SearchResultsPane.tsx +120 -70
- package/src/default/SortSelect.tsx +50 -37
- package/src/default/UrlIssueNotice.tsx +21 -3
- package/src/default/index.ts +38 -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 +37 -4
- package/src/i18n/keys.ts +83 -4
- package/src/i18n/ru.ts +41 -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
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How many results the page currently in cache holds, and whether that number
|
|
3
|
+
* may be spoken as a number.
|
|
4
|
+
*
|
|
5
|
+
* The same trick as {@link useAppliedSort}: `enabled: false` on the key
|
|
6
|
+
* `<SearchResults>` populates, so a control that wants to SAY the count
|
|
7
|
+
* subscribes to the answer already on screen instead of issuing a second
|
|
8
|
+
* search of its own. A filter sheet whose button reads "Show 25 results" is
|
|
9
|
+
* the difference between committing to a change and guessing at one, and it
|
|
10
|
+
* must not cost a request to know that.
|
|
11
|
+
*
|
|
12
|
+
* Not exported from the package entry: it is the shape `<SearchPage>` needs to
|
|
13
|
+
* label one button, and a public hook would be a second, thinner way to ask
|
|
14
|
+
* what `<SearchResults>` already answers in full.
|
|
15
|
+
*/
|
|
16
|
+
import { useSearchQuery } from "../model/queries.js";
|
|
17
|
+
import { countKind, parseDegradations } from "../state/degradations.js";
|
|
18
|
+
import { useSearchState } from "./SearchStateProvider.js";
|
|
19
|
+
export function useAppliedCount() {
|
|
20
|
+
const { state } = useSearchState();
|
|
21
|
+
const query = useSearchQuery(state, { enabled: false });
|
|
22
|
+
const data = query.data;
|
|
23
|
+
if (data === undefined)
|
|
24
|
+
return { count: null, kind: "unknown" };
|
|
25
|
+
return {
|
|
26
|
+
count: data.count,
|
|
27
|
+
kind: countKind(data.count, data.count_is_lower_bound, data.exact_total, parseDegradations(data.degraded)),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=useAppliedCount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAppliedCount.js","sourceRoot":"","sources":["../../src/headless/useAppliedCount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAChE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,SAAS,CACb,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,WAAW,EAChB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScorerNames.d.ts","sourceRoot":"","sources":["../../src/headless/useScorerNames.ts"],"names":[],"mappings":"AAqBA,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAEpE,wBAAgB,cAAc,IAAI,gBAAgB,CAWjD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scorer SLUGS turned into the names the disclosure already gives them.
|
|
3
|
+
*
|
|
4
|
+
* `degraded[]` reports a scorer the engine could not evaluate as
|
|
5
|
+
* `"scorer:geo_decay"` — a registry identifier, because that is the only
|
|
6
|
+
* handle the query envelope has. Printed straight into a sentence it reads
|
|
7
|
+
* "The ranking parameter “geo_decay” was not applied", which is a developer's
|
|
8
|
+
* word in a shopper's banner (class C-DEVCOPY).
|
|
9
|
+
*
|
|
10
|
+
* The name is not this pair's to invent: the backend already publishes one per
|
|
11
|
+
* scorer on `GET /ranking` (`description_key`, a translation key). So the
|
|
12
|
+
* lookup goes there — through the SAME cache entry `<RankingDisclosure>`
|
|
13
|
+
* fills, with `enabled: false`, so a result page never issues a second request
|
|
14
|
+
* for a label. When the disclosure has not been read the map is empty and the
|
|
15
|
+
* banner falls back to the slug, which is what it said before and is at least
|
|
16
|
+
* traceable.
|
|
17
|
+
*/
|
|
18
|
+
import { useT } from "@stapel/core";
|
|
19
|
+
import { useRankingDisclosure } from "../model/queries.js";
|
|
20
|
+
import { useSearchState } from "./SearchStateProvider.js";
|
|
21
|
+
export function useScorerNames() {
|
|
22
|
+
const t = useT();
|
|
23
|
+
const { state } = useSearchState();
|
|
24
|
+
const query = useRankingDisclosure(state.type, { enabled: false });
|
|
25
|
+
const scorers = query.data?.scorers;
|
|
26
|
+
return (slug) => {
|
|
27
|
+
const scorer = scorers?.find((candidate) => candidate.slug === slug);
|
|
28
|
+
if (scorer === undefined)
|
|
29
|
+
return undefined;
|
|
30
|
+
const named = t(scorer.description_key);
|
|
31
|
+
return named.length > 0 && named !== scorer.description_key ? named : undefined;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=useScorerNames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScorerNames.js","sourceRoot":"","sources":["../../src/headless/useScorerNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;IACpC,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACrE,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { LoadState } from "@stapel/core";
|
|
2
|
+
/** What a query box needs to read and move the search text. */
|
|
3
|
+
export interface SearchBoxBag {
|
|
4
|
+
/** What is in the input right now. */
|
|
5
|
+
readonly draft: string;
|
|
6
|
+
/** What the URL — and therefore the results — is about. */
|
|
7
|
+
readonly committed: string;
|
|
8
|
+
/** The draft has not reached the URL yet (a search is about to run). */
|
|
9
|
+
readonly pending: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Title prefixes for the typeahead — the READY answer only.
|
|
12
|
+
*
|
|
13
|
+
* A typeahead has no surface for "we could not fetch suggestions": the box
|
|
14
|
+
* must stay typeable and a person is mid-word. So a failed or in-flight
|
|
15
|
+
* suggest shows nothing, and the three answers stay distinguishable in
|
|
16
|
+
* {@link SearchBoxBag.suggestState} for a skin that wants to say more.
|
|
17
|
+
*/
|
|
18
|
+
readonly suggestions: readonly string[];
|
|
19
|
+
/** The suggest read as a state, unflattened. */
|
|
20
|
+
readonly suggestState: LoadState<readonly string[]>;
|
|
21
|
+
/** A suggestion request is in flight for a prefix nothing is shown for yet. */
|
|
22
|
+
readonly suggestLoading: boolean;
|
|
23
|
+
/** Characters a prefix needs before the index is asked. */
|
|
24
|
+
readonly minSuggestChars: number;
|
|
25
|
+
readonly maxLength: number;
|
|
26
|
+
/** Type. Commits after {@link SEARCH_BOX_DEBOUNCE_MS} of quiet. */
|
|
27
|
+
setDraft(next: string): void;
|
|
28
|
+
/** Commit now — Enter, the Search button, or picking a suggestion. */
|
|
29
|
+
submit(value?: string): void;
|
|
30
|
+
/** Empty the box AND the search (an empty `q` is a valid browse). */
|
|
31
|
+
clear(): void;
|
|
32
|
+
}
|
|
33
|
+
export interface UseSearchBoxOptions {
|
|
34
|
+
readonly debounceMs?: number;
|
|
35
|
+
/** Ask the index for prefixes. Default `true`. */
|
|
36
|
+
readonly suggest?: boolean;
|
|
37
|
+
/** Quiet time before the index is asked (default
|
|
38
|
+
* {@link SEARCH_BOX_SUGGEST_DEBOUNCE_MS}). */
|
|
39
|
+
readonly suggestDebounceMs?: number;
|
|
40
|
+
/** How many suggestions to ask for (backend clamps to 25). Default 8. */
|
|
41
|
+
readonly suggestLimit?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare function useSearchBox(options?: UseSearchBoxOptions): SearchBoxBag;
|
|
44
|
+
//# sourceMappingURL=useSearchBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSearchBox.d.ts","sourceRoot":"","sources":["../../src/headless/useSearchBox.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAU9C,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACpD,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,sEAAsE;IACtE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,qEAAqE;IACrE,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;kDAC8C;IAC9C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAKD,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CAyG5E"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The query box, headless — the state machine behind `<SearchBox>`.
|
|
3
|
+
*
|
|
4
|
+
* ── The one legitimate second copy of the state ────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* This pair's rule is that the URL is the state and no component keeps a copy.
|
|
7
|
+
* A text input is the single exception the rule has to make: what a person has
|
|
8
|
+
* TYPED is not yet what they have SEARCHED for, and committing every keystroke
|
|
9
|
+
* to the URL would make the address bar (and the request, and the query cache)
|
|
10
|
+
* chase the keyboard. So the draft lives here, for as long as it takes to stop
|
|
11
|
+
* typing, and the URL is still the only place a SEARCH is recorded.
|
|
12
|
+
*
|
|
13
|
+
* Two properties keep that honest:
|
|
14
|
+
*
|
|
15
|
+
* 1. **The URL wins whenever it moves on its own.** Back, a shared link
|
|
16
|
+
* opening, a host calling `setText` elsewhere — the draft is reset to the
|
|
17
|
+
* committed `q`. The box can never show a word the results are not about.
|
|
18
|
+
* 2. **Committing REPLACES the history entry** (`setText` already does), so a
|
|
19
|
+
* ten-letter word is one entry and Back still removes the last FILTER
|
|
20
|
+
* rather than the last letter.
|
|
21
|
+
*
|
|
22
|
+
* The suggestion list is asked for the DEBOUNCED prefix, not the draft — one
|
|
23
|
+
* request per pause, not per keystroke, on an endpoint the backend throttles.
|
|
24
|
+
*/
|
|
25
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
26
|
+
import { loadStateFromQuery, mapLoad } from "@stapel/core";
|
|
27
|
+
import { useSearchState } from "./SearchStateProvider.js";
|
|
28
|
+
import { useSuggest } from "../model/queries.js";
|
|
29
|
+
import { SEARCH_BOX_DEBOUNCE_MS, SEARCH_BOX_SUGGEST_DEBOUNCE_MS, SEARCH_QUERY_MAX_CHARS, SUGGEST_MIN_CHARS, } from "../state/limits.js";
|
|
30
|
+
/** One frozen empty list, so a render with no suggestions is a stable value. */
|
|
31
|
+
const NO_SUGGESTIONS = [];
|
|
32
|
+
export function useSearchBox(options = {}) {
|
|
33
|
+
const { state, setText } = useSearchState();
|
|
34
|
+
const committed = state.q;
|
|
35
|
+
const debounceMs = options.debounceMs ?? SEARCH_BOX_DEBOUNCE_MS;
|
|
36
|
+
const [draft, setDraftState] = useState(committed);
|
|
37
|
+
// What the URL said the last time we looked. When it changes underneath us
|
|
38
|
+
// — Back, a shared link, a host control — the draft follows it; when it
|
|
39
|
+
// changes BECAUSE we committed, `draft === committed` already and the reset
|
|
40
|
+
// is a no-op.
|
|
41
|
+
const lastCommitted = useRef(committed);
|
|
42
|
+
const timer = useRef(null);
|
|
43
|
+
if (lastCommitted.current !== committed) {
|
|
44
|
+
lastCommitted.current = committed;
|
|
45
|
+
if (draft !== committed)
|
|
46
|
+
setDraftState(committed);
|
|
47
|
+
}
|
|
48
|
+
const cancel = useCallback(() => {
|
|
49
|
+
if (timer.current !== null) {
|
|
50
|
+
clearTimeout(timer.current);
|
|
51
|
+
timer.current = null;
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
// A pending commit must not fire into an unmounted tree, and a box that is
|
|
55
|
+
// unmounted mid-word has not searched for that word.
|
|
56
|
+
useEffect(() => cancel, [cancel]);
|
|
57
|
+
const commit = useCallback((value) => {
|
|
58
|
+
cancel();
|
|
59
|
+
if (value !== committed)
|
|
60
|
+
setText(value);
|
|
61
|
+
}, [cancel, committed, setText]);
|
|
62
|
+
const setDraft = useCallback((next) => {
|
|
63
|
+
const clipped = next.slice(0, SEARCH_QUERY_MAX_CHARS);
|
|
64
|
+
setDraftState(clipped);
|
|
65
|
+
cancel();
|
|
66
|
+
timer.current = setTimeout(() => {
|
|
67
|
+
timer.current = null;
|
|
68
|
+
if (clipped !== committed)
|
|
69
|
+
setText(clipped);
|
|
70
|
+
}, debounceMs);
|
|
71
|
+
}, [cancel, committed, debounceMs, setText]);
|
|
72
|
+
const submit = useCallback((value) => {
|
|
73
|
+
const next = (value ?? draft).slice(0, SEARCH_QUERY_MAX_CHARS);
|
|
74
|
+
setDraftState(next);
|
|
75
|
+
commit(next);
|
|
76
|
+
}, [commit, draft]);
|
|
77
|
+
const clear = useCallback(() => {
|
|
78
|
+
setDraftState("");
|
|
79
|
+
commit("");
|
|
80
|
+
}, [commit]);
|
|
81
|
+
// The index is asked about the SETTLED prefix, never the keystroke: one
|
|
82
|
+
// request per pause on an endpoint the backend throttles. `useSuggest` then
|
|
83
|
+
// refuses anything below `SUGGEST_MIN_CHARS` and keys the rest by prefix, so
|
|
84
|
+
// backspacing to a prefix already asked about costs nothing.
|
|
85
|
+
const suggestDebounceMs = options.suggestDebounceMs ?? SEARCH_BOX_SUGGEST_DEBOUNCE_MS;
|
|
86
|
+
const [suggestPrefix, setSuggestPrefix] = useState(committed);
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
const handle = setTimeout(() => {
|
|
89
|
+
setSuggestPrefix(draft);
|
|
90
|
+
}, suggestDebounceMs);
|
|
91
|
+
return () => {
|
|
92
|
+
clearTimeout(handle);
|
|
93
|
+
};
|
|
94
|
+
}, [draft, suggestDebounceMs]);
|
|
95
|
+
const suggest = useSuggest({
|
|
96
|
+
type: state.type,
|
|
97
|
+
q: suggestPrefix,
|
|
98
|
+
...(options.suggestLimit !== undefined ? { limit: options.suggestLimit } : {}),
|
|
99
|
+
enabled: options.suggest !== false,
|
|
100
|
+
});
|
|
101
|
+
const suggestState = mapLoad(loadStateFromQuery(suggest), (data) => data.items);
|
|
102
|
+
return {
|
|
103
|
+
draft,
|
|
104
|
+
committed,
|
|
105
|
+
pending: draft !== committed,
|
|
106
|
+
suggestions: suggestState.status === "ready" ? suggestState.data : NO_SUGGESTIONS,
|
|
107
|
+
suggestState,
|
|
108
|
+
suggestLoading: suggest.isLoading && suggest.fetchStatus === "fetching",
|
|
109
|
+
minSuggestChars: SUGGEST_MIN_CHARS,
|
|
110
|
+
maxLength: SEARCH_QUERY_MAX_CHARS,
|
|
111
|
+
setDraft,
|
|
112
|
+
submit,
|
|
113
|
+
clear,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=useSearchBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSearchBox.js","sourceRoot":"","sources":["../../src/headless/useSearchBox.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/es.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"es.d.ts","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAiIhC,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE7D"}
|
package/dist/i18n/es.js
CHANGED
|
@@ -32,6 +32,12 @@ export const searchI18nBundleEs = {
|
|
|
32
32
|
"search.results.distance_km": "a {km} km",
|
|
33
33
|
"search.results.untitled": "Sin título",
|
|
34
34
|
"search.results.open": "Abrir",
|
|
35
|
+
"search.results.image_alt": "Foto de {title}",
|
|
36
|
+
"search.box.label": "Buscar",
|
|
37
|
+
"search.box.placeholder": "¿Qué estás buscando?",
|
|
38
|
+
"search.box.submit": "Buscar",
|
|
39
|
+
"search.box.clear": "Borrar la búsqueda",
|
|
40
|
+
"search.box.suggestions": "Sugerencias",
|
|
35
41
|
"search.sort.label": "Orden",
|
|
36
42
|
"search.sort.relevance": "Más relevantes",
|
|
37
43
|
"search.sort.newest": "Más recientes",
|
|
@@ -52,16 +58,36 @@ export const searchI18nBundleEs = {
|
|
|
52
58
|
"search.facets.range_from": "Desde",
|
|
53
59
|
"search.facets.range_to": "Hasta",
|
|
54
60
|
"search.facets.range_apply": "Aplicar",
|
|
61
|
+
"search.facets.range_clear": "Quitar",
|
|
62
|
+
"search.facets.range_from_aria": "{feature}, desde",
|
|
63
|
+
"search.facets.range_to_aria": "{feature}, hasta",
|
|
64
|
+
"search.facets.range_invalid": "«Desde» es mayor que «hasta», así que nada podría coincidir. Intercámbialos para aplicar el rango.",
|
|
65
|
+
"search.filters.open": "Filtros ({count})",
|
|
66
|
+
"search.filters.apply": "Ver resultados",
|
|
67
|
+
"search.filters.show_count.one": "Ver {count} resultado",
|
|
68
|
+
"search.filters.show_count.other": "Ver {count} resultados",
|
|
69
|
+
"search.filters.show_count_at_least.one": "Ver {count}+ resultado",
|
|
70
|
+
"search.filters.show_count_at_least.other": "Ver {count}+ resultados",
|
|
71
|
+
"search.filters.dismiss": "Cerrar los filtros",
|
|
72
|
+
"search.category.title": "Categoría",
|
|
73
|
+
"search.category.clear": "Buscar en todo el catálogo",
|
|
74
|
+
"search.category.current": "Buscando dentro de {path}",
|
|
75
|
+
"search.language.label": "Idioma de la consulta",
|
|
76
|
+
"search.language.any": "Cualquier idioma",
|
|
77
|
+
"search.limit.label": "Por página",
|
|
78
|
+
"search.limit.option": "{count} por página",
|
|
79
|
+
"search.limit.from_link": "Este enlace fija su propio tamaño de página.",
|
|
55
80
|
"search.geo.title": "Ubicación",
|
|
56
81
|
"search.geo.radius_km": "A menos de {km} km",
|
|
82
|
+
"search.geo.radius_label": "Radio, km",
|
|
57
83
|
"search.geo.clear": "En cualquier lugar",
|
|
58
84
|
"search.geo.box": "Dentro del área mostrada",
|
|
59
85
|
"search.geo.center": "Cerca de {lat}, {lon}",
|
|
60
86
|
"search.url.issues_title": "Parte de este enlace no se pudo leer",
|
|
61
|
-
"search.url.issue.not_a_number": "{param} no es un número
|
|
62
|
-
"search.url.issue.geo_incomplete": "la ubicación
|
|
63
|
-
"search.url.issue.bbox_malformed": "el área
|
|
64
|
-
"search.url.issue.range_malformed": "{param}
|
|
87
|
+
"search.url.issue.not_a_number": "«{param}» en este enlace no es un número, así que se ignoró",
|
|
88
|
+
"search.url.issue.geo_incomplete": "la ubicación de este enlace está incompleta, así que se ignoró",
|
|
89
|
+
"search.url.issue.bbox_malformed": "el área del mapa de este enlace está incompleta, así que se ignoró",
|
|
90
|
+
"search.url.issue.range_malformed": "al rango «{param}» de este enlace le faltan números, así que se ignoró",
|
|
65
91
|
"search.degraded.title": "Lo que esta búsqueda no pudo hacer",
|
|
66
92
|
"search.degraded.typo_tolerance": "No se corrigieron erratas: el motor de búsqueda configurado no puede hacerlo.",
|
|
67
93
|
"search.degraded.phrase_synonyms": "No se ampliaron sinónimos: el motor de búsqueda configurado no puede hacerlo.",
|
package/dist/i18n/es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,GAAG,mBAAmB;IAEtB,sBAAsB,EAAE,4BAA4B;IAEpD,sBAAsB,EAAE,YAAY;IACpC,wBAAwB,EAAE,WAAW;IACrC,4BAA4B,EAAE,oCAAoC;IAClE,sBAAsB,EAAE,6CAA6C;IACrE,sBAAsB,EAAE,YAAY;IACpC,sCAAsC,EAAE,mCAAmC;IAC3E,wCAAwC,EAAE,yBAAyB;IACnE,mCAAmC,EAAE,oBAAoB;IACzD,qCAAqC,EAAE,qBAAqB;IAC5D,gCAAgC,EAAE,mBAAmB;IACrD,kCAAkC,EAAE,oBAAoB;IACxD,wBAAwB,EAAE,SAAS;IACnC,qBAAqB,EAAE,kBAAkB;IACzC,qBAAqB,EAAE,iBAAiB;IACxC,+BAA+B,EAAE,0BAA0B;IAC3D,iCAAiC,EAAE,2BAA2B;IAC9D,gCAAgC,EAC9B,iHAAiH;IACnH,yBAAyB,EAAE,cAAc;IACzC,8BAA8B,EAC5B,yGAAyG;IAC3G,4BAA4B,EAAE,WAAW;IACzC,yBAAyB,EAAE,YAAY;IACvC,qBAAqB,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"es.js","sourceRoot":"","sources":["../../src/i18n/es.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/keys.d.ts
CHANGED
|
@@ -50,6 +50,14 @@ export declare const SEARCH_I18N_KEYS: {
|
|
|
50
50
|
readonly resultsDistanceKm: "search.results.distance_km";
|
|
51
51
|
readonly resultsUntitled: "search.results.untitled";
|
|
52
52
|
readonly resultsOpen: "search.results.open";
|
|
53
|
+
/** Alt text for the card photo — the card's own title, in a sentence. */
|
|
54
|
+
readonly resultsImageAlt: "search.results.image_alt";
|
|
55
|
+
readonly boxLabel: "search.box.label";
|
|
56
|
+
readonly boxPlaceholder: "search.box.placeholder";
|
|
57
|
+
readonly boxSubmit: "search.box.submit";
|
|
58
|
+
readonly boxClear: "search.box.clear";
|
|
59
|
+
/** Accessible name of the suggestion list under the box. */
|
|
60
|
+
readonly boxSuggestions: "search.box.suggestions";
|
|
53
61
|
readonly sortLabel: "search.sort.label";
|
|
54
62
|
readonly sortRelevance: "search.sort.relevance";
|
|
55
63
|
readonly sortNewest: "search.sort.newest";
|
|
@@ -71,8 +79,35 @@ export declare const SEARCH_I18N_KEYS: {
|
|
|
71
79
|
readonly facetsRangeFrom: "search.facets.range_from";
|
|
72
80
|
readonly facetsRangeTo: "search.facets.range_to";
|
|
73
81
|
readonly facetsRangeApply: "search.facets.range_apply";
|
|
82
|
+
readonly facetsRangeClear: "search.facets.range_clear";
|
|
83
|
+
/** Accessible names: the visible "From"/"To" repeat on every row, so the
|
|
84
|
+
* field's own name has to carry the feature it belongs to. */
|
|
85
|
+
readonly facetsRangeFromAria: "search.facets.range_from_aria";
|
|
86
|
+
readonly facetsRangeToAria: "search.facets.range_to_aria";
|
|
87
|
+
/** The reason "Apply" is off: the range reads backwards. */
|
|
88
|
+
readonly facetsRangeInvalid: "search.facets.range_invalid";
|
|
89
|
+
readonly filtersOpen: "search.filters.open";
|
|
90
|
+
/** The sheet's commit button when the count is unknown. */
|
|
91
|
+
readonly filtersApply: "search.filters.apply";
|
|
92
|
+
/** "Show N results" — an EXACT count on the sheet's commit button.
|
|
93
|
+
* A PLURAL FAMILY. */
|
|
94
|
+
readonly filtersShowCount: "search.filters.show_count";
|
|
95
|
+
/** "Show N+ results" — a FLOOR on the same button. A PLURAL FAMILY. */
|
|
96
|
+
readonly filtersShowCountAtLeast: "search.filters.show_count_at_least";
|
|
97
|
+
readonly filtersDismiss: "search.filters.dismiss";
|
|
98
|
+
readonly categoryTitle: "search.category.title";
|
|
99
|
+
readonly categoryClear: "search.category.clear";
|
|
100
|
+
readonly categoryCurrent: "search.category.current";
|
|
101
|
+
readonly languageLabel: "search.language.label";
|
|
102
|
+
readonly languageAny: "search.language.any";
|
|
103
|
+
readonly limitLabel: "search.limit.label";
|
|
104
|
+
readonly limitOption: "search.limit.option";
|
|
105
|
+
/** Said beside the control when the URL carries a size the ladder does not
|
|
106
|
+
* offer — otherwise the story of "we kept your link's size" is invisible. */
|
|
107
|
+
readonly limitFromLink: "search.limit.from_link";
|
|
74
108
|
readonly geoTitle: "search.geo.title";
|
|
75
109
|
readonly geoRadiusKm: "search.geo.radius_km";
|
|
110
|
+
readonly geoRadiusLabel: "search.geo.radius_label";
|
|
76
111
|
readonly geoClear: "search.geo.clear";
|
|
77
112
|
readonly geoBox: "search.geo.box";
|
|
78
113
|
readonly geoCenter: "search.geo.center";
|
package/dist/i18n/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;IAS3B;;;;;;;OAOG;;IAEH;kEAC8D;;IAE9D,sEAAsE;;;;;;;IAOtE,yDAAyD
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,gBAAgB;;;;;;;IAS3B;;;;;;;OAOG;;IAEH;kEAC8D;;IAE9D,sEAAsE;;;;;;;IAOtE,yDAAyD;;;;;;;IAOzD,yEAAyE;;;;;;IAQzE,4DAA4D;;;;;;;;;;;;;;;;;IAqB5D,oEAAoE;;;;;;;IAOpE;kEAC8D;;;IAG9D,4DAA4D;;;IAK5D,2DAA2D;;IAE3D;0BACsB;;IAEtB,uEAAuE;;;;;;;;;;IAgBvE;iFAC6E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCrE,CAAC;AAEX,MAAM,MAAM,aAAa,GACvB,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,aAAa,EAM3D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgIrD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAEzD"}
|
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",
|
|
@@ -74,9 +83,40 @@ export const SEARCH_I18N_KEYS = {
|
|
|
74
83
|
facetsRangeFrom: "search.facets.range_from",
|
|
75
84
|
facetsRangeTo: "search.facets.range_to",
|
|
76
85
|
facetsRangeApply: "search.facets.range_apply",
|
|
86
|
+
facetsRangeClear: "search.facets.range_clear",
|
|
87
|
+
/** Accessible names: the visible "From"/"To" repeat on every row, so the
|
|
88
|
+
* field's own name has to carry the feature it belongs to. */
|
|
89
|
+
facetsRangeFromAria: "search.facets.range_from_aria",
|
|
90
|
+
facetsRangeToAria: "search.facets.range_to_aria",
|
|
91
|
+
/** The reason "Apply" is off: the range reads backwards. */
|
|
92
|
+
facetsRangeInvalid: "search.facets.range_invalid",
|
|
93
|
+
// ── the filter panel as a whole (phone sheet + host slots) ───────────────
|
|
94
|
+
filtersOpen: "search.filters.open",
|
|
95
|
+
/** The sheet's commit button when the count is unknown. */
|
|
96
|
+
filtersApply: "search.filters.apply",
|
|
97
|
+
/** "Show N results" — an EXACT count on the sheet's commit button.
|
|
98
|
+
* A PLURAL FAMILY. */
|
|
99
|
+
filtersShowCount: "search.filters.show_count",
|
|
100
|
+
/** "Show N+ results" — a FLOOR on the same button. A PLURAL FAMILY. */
|
|
101
|
+
filtersShowCountAtLeast: "search.filters.show_count_at_least",
|
|
102
|
+
filtersDismiss: "search.filters.dismiss",
|
|
103
|
+
// ── category (a host slot, plus the control that removes it) ─────────────
|
|
104
|
+
categoryTitle: "search.category.title",
|
|
105
|
+
categoryClear: "search.category.clear",
|
|
106
|
+
categoryCurrent: "search.category.current",
|
|
107
|
+
// ── language of the query ────────────────────────────────────────────────
|
|
108
|
+
languageLabel: "search.language.label",
|
|
109
|
+
languageAny: "search.language.any",
|
|
110
|
+
// ── page size ────────────────────────────────────────────────────────────
|
|
111
|
+
limitLabel: "search.limit.label",
|
|
112
|
+
limitOption: "search.limit.option",
|
|
113
|
+
/** Said beside the control when the URL carries a size the ladder does not
|
|
114
|
+
* offer — otherwise the story of "we kept your link's size" is invisible. */
|
|
115
|
+
limitFromLink: "search.limit.from_link",
|
|
77
116
|
// ── geo ──────────────────────────────────────────────────────────────────
|
|
78
117
|
geoTitle: "search.geo.title",
|
|
79
118
|
geoRadiusKm: "search.geo.radius_km",
|
|
119
|
+
geoRadiusLabel: "search.geo.radius_label",
|
|
80
120
|
geoClear: "search.geo.clear",
|
|
81
121
|
geoBox: "search.geo.box",
|
|
82
122
|
geoCenter: "search.geo.center",
|
|
@@ -127,6 +167,8 @@ export const SEARCH_I18N_PLURAL_KEYS = [
|
|
|
127
167
|
SEARCH_I18N_KEYS.resultsCountApproximate,
|
|
128
168
|
SEARCH_I18N_KEYS.resultsCountAtLeast,
|
|
129
169
|
SEARCH_I18N_KEYS.resultsCountExact,
|
|
170
|
+
SEARCH_I18N_KEYS.filtersShowCount,
|
|
171
|
+
SEARCH_I18N_KEYS.filtersShowCountAtLeast,
|
|
130
172
|
];
|
|
131
173
|
/**
|
|
132
174
|
* English fallback bundle for search-react UI keys + backend error codes.
|
|
@@ -158,6 +200,12 @@ export const searchI18nBundleEn = {
|
|
|
158
200
|
"search.results.distance_km": "{km} km away",
|
|
159
201
|
"search.results.untitled": "Untitled",
|
|
160
202
|
"search.results.open": "Open",
|
|
203
|
+
"search.results.image_alt": "Photo of {title}",
|
|
204
|
+
"search.box.label": "Search",
|
|
205
|
+
"search.box.placeholder": "What are you looking for?",
|
|
206
|
+
"search.box.submit": "Search",
|
|
207
|
+
"search.box.clear": "Clear the search",
|
|
208
|
+
"search.box.suggestions": "Suggestions",
|
|
161
209
|
"search.sort.label": "Sort",
|
|
162
210
|
"search.sort.relevance": "Most relevant",
|
|
163
211
|
"search.sort.newest": "Newest first",
|
|
@@ -178,16 +226,36 @@ export const searchI18nBundleEn = {
|
|
|
178
226
|
"search.facets.range_from": "From",
|
|
179
227
|
"search.facets.range_to": "To",
|
|
180
228
|
"search.facets.range_apply": "Apply",
|
|
229
|
+
"search.facets.range_clear": "Clear",
|
|
230
|
+
"search.facets.range_from_aria": "{feature}, from",
|
|
231
|
+
"search.facets.range_to_aria": "{feature}, up to",
|
|
232
|
+
"search.facets.range_invalid": "“From” is larger than “to”, so nothing could match. Swap them to apply this range.",
|
|
233
|
+
"search.filters.open": "Filters ({count})",
|
|
234
|
+
"search.filters.apply": "Show results",
|
|
235
|
+
"search.filters.show_count.one": "Show {count} result",
|
|
236
|
+
"search.filters.show_count.other": "Show {count} results",
|
|
237
|
+
"search.filters.show_count_at_least.one": "Show {count}+ result",
|
|
238
|
+
"search.filters.show_count_at_least.other": "Show {count}+ results",
|
|
239
|
+
"search.filters.dismiss": "Close the filters",
|
|
240
|
+
"search.category.title": "Category",
|
|
241
|
+
"search.category.clear": "Search the whole catalogue",
|
|
242
|
+
"search.category.current": "Searching inside {path}",
|
|
243
|
+
"search.language.label": "Query language",
|
|
244
|
+
"search.language.any": "Any language",
|
|
245
|
+
"search.limit.label": "Per page",
|
|
246
|
+
"search.limit.option": "{count} per page",
|
|
247
|
+
"search.limit.from_link": "This link sets its own page size.",
|
|
181
248
|
"search.geo.title": "Location",
|
|
182
249
|
"search.geo.radius_km": "Within {km} km",
|
|
250
|
+
"search.geo.radius_label": "Radius, km",
|
|
183
251
|
"search.geo.clear": "Anywhere",
|
|
184
252
|
"search.geo.box": "Inside the shown area",
|
|
185
253
|
"search.geo.center": "Around {lat}, {lon}",
|
|
186
254
|
"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}
|
|
255
|
+
"search.url.issue.not_a_number": "“{param}” in this link is not a number, so it was ignored",
|
|
256
|
+
"search.url.issue.geo_incomplete": "the location in this link is only half there, so it was ignored",
|
|
257
|
+
"search.url.issue.bbox_malformed": "the map area in this link is incomplete, so it was ignored",
|
|
258
|
+
"search.url.issue.range_malformed": "the range “{param}” in this link needs two numbers, so it was ignored",
|
|
191
259
|
"search.degraded.title": "What this search could not do",
|
|
192
260
|
"search.degraded.typo_tolerance": "Typos were not corrected — the search engine in use cannot do it.",
|
|
193
261
|
"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,cA6IhC,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": "Сначала новые",
|
|
@@ -75,16 +81,40 @@ export const searchI18nBundleRu = {
|
|
|
75
81
|
"search.facets.range_from": "От",
|
|
76
82
|
"search.facets.range_to": "До",
|
|
77
83
|
"search.facets.range_apply": "Применить",
|
|
84
|
+
"search.facets.range_clear": "Сбросить",
|
|
85
|
+
"search.facets.range_from_aria": "{feature}, от",
|
|
86
|
+
"search.facets.range_to_aria": "{feature}, до",
|
|
87
|
+
"search.facets.range_invalid": "«От» больше, чем «до», — под такой диапазон ничего не подойдёт. Поменяйте значения местами.",
|
|
88
|
+
"search.filters.open": "Фильтры ({count})",
|
|
89
|
+
"search.filters.apply": "Показать результаты",
|
|
90
|
+
"search.filters.show_count.one": "Показать {count} объявление",
|
|
91
|
+
"search.filters.show_count.few": "Показать {count} объявления",
|
|
92
|
+
"search.filters.show_count.many": "Показать {count} объявлений",
|
|
93
|
+
"search.filters.show_count.other": "Показать {count} объявления",
|
|
94
|
+
"search.filters.show_count_at_least.one": "Показать {count}+ объявление",
|
|
95
|
+
"search.filters.show_count_at_least.few": "Показать {count}+ объявления",
|
|
96
|
+
"search.filters.show_count_at_least.many": "Показать {count}+ объявлений",
|
|
97
|
+
"search.filters.show_count_at_least.other": "Показать {count}+ объявления",
|
|
98
|
+
"search.filters.dismiss": "Закрыть фильтры",
|
|
99
|
+
"search.category.title": "Категория",
|
|
100
|
+
"search.category.clear": "Искать по всему каталогу",
|
|
101
|
+
"search.category.current": "Ищем внутри {path}",
|
|
102
|
+
"search.language.label": "Язык запроса",
|
|
103
|
+
"search.language.any": "Любой язык",
|
|
104
|
+
"search.limit.label": "На странице",
|
|
105
|
+
"search.limit.option": "{count} на странице",
|
|
106
|
+
"search.limit.from_link": "Размер страницы задан этой ссылкой.",
|
|
78
107
|
"search.geo.title": "Где искать",
|
|
79
108
|
"search.geo.radius_km": "В радиусе {km} км",
|
|
109
|
+
"search.geo.radius_label": "Радиус, км",
|
|
80
110
|
"search.geo.clear": "Везде",
|
|
81
111
|
"search.geo.box": "В показанной области",
|
|
82
112
|
"search.geo.center": "Рядом с {lat}, {lon}",
|
|
83
113
|
"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}
|
|
114
|
+
"search.url.issue.not_a_number": "«{param}» в этой ссылке — не число, поэтому параметр пропущен",
|
|
115
|
+
"search.url.issue.geo_incomplete": "точка в этой ссылке указана наполовину, поэтому она пропущена",
|
|
116
|
+
"search.url.issue.bbox_malformed": "область на карте в этой ссылке указана не полностью, поэтому она пропущена",
|
|
117
|
+
"search.url.issue.range_malformed": "диапазону «{param}» в этой ссылке не хватает чисел, поэтому он пропущен",
|
|
88
118
|
"search.degraded.title": "Что этот поиск не смог сделать",
|
|
89
119
|
"search.degraded.typo_tolerance": "Опечатки не исправлялись — используемый поисковый движок этого не умеет.",
|
|
90
120
|
"search.degraded.phrase_synonyms": "Синонимы не подставлялись — используемый поисковый движок этого не умеет.",
|