@apify/docs-theme 1.0.73 → 1.0.75

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apify/docs-theme",
3
- "version": "1.0.73",
3
+ "version": "1.0.75",
4
4
  "description": "",
5
5
  "main": "./src/index.js",
6
6
  "files": [
package/src/config.js CHANGED
@@ -144,7 +144,8 @@ const themeConfig = ({
144
144
  darkTheme: require('prism-react-renderer/themes/dracula'),
145
145
  additionalLanguages: ['docker', 'log'],
146
146
  },
147
- image: 'img/docs-og.png',
147
+ // this needs to be absolute link otherwise it gets resolved wrongly in project docs
148
+ image: 'https://docs.apify.com/img/docs-og.png',
148
149
  footer: {
149
150
  links: [
150
151
  {
@@ -0,0 +1,457 @@
1
+ /* eslint-disable */
2
+ import React, { useEffect, useReducer, useRef, useState } from 'react';
3
+ import clsx from 'clsx';
4
+ import algoliaSearchHelper from 'algoliasearch-helper';
5
+ import algoliaSearch from 'algoliasearch/lite';
6
+ import ExecutionEnvironment from '@docusaurus/ExecutionEnvironment';
7
+ import Head from '@docusaurus/Head';
8
+ import Link from '@docusaurus/Link';
9
+ import { useAllDocsData } from '@docusaurus/plugin-content-docs/client';
10
+ import {
11
+ HtmlClassNameProvider,
12
+ useEvent,
13
+ usePluralForm,
14
+ } from '@docusaurus/theme-common';
15
+ import {
16
+ useSearchPage,
17
+ useTitleFormatter,
18
+ } from '@docusaurus/theme-common/internal';
19
+ import Translate, { translate } from '@docusaurus/Translate';
20
+ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
21
+ import {
22
+ useAlgoliaThemeConfig,
23
+ useSearchResultUrlProcessor,
24
+ } from '@docusaurus/theme-search-algolia/client';
25
+ import Layout from '@theme/Layout';
26
+ import styles from './styles.module.css';
27
+
28
+ // Very simple pluralization: probably good enough for now
29
+ function useDocumentsFoundPlural() {
30
+ const { selectMessage } = usePluralForm();
31
+ return (count) => selectMessage(
32
+ count,
33
+ translate(
34
+ {
35
+ id: 'theme.SearchPage.documentsFound.plurals',
36
+ description:
37
+ 'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',
38
+ message: 'One document found|{count} documents found',
39
+ },
40
+ { count },
41
+ ),
42
+ );
43
+ }
44
+
45
+ function useDocsSearchVersionsHelpers() {
46
+ const allDocsData = useAllDocsData();
47
+ // State of the version select menus / algolia facet filters
48
+ // docsPluginId -> versionName map
49
+ const [searchVersions, setSearchVersions] = useState(() => Object.entries(allDocsData).reduce(
50
+ (acc, [pluginId, pluginData]) => ({
51
+ ...acc,
52
+ [pluginId]: pluginData.versions[0].name,
53
+ }),
54
+ {},
55
+ ),
56
+ );
57
+ // Set the value of a single select menu
58
+ const setSearchVersion = (pluginId, searchVersion) => setSearchVersions((s) => ({ ...s, [pluginId]: searchVersion }));
59
+ const versioningEnabled = Object.values(allDocsData).some(
60
+ (docsData) => docsData.versions.length > 1,
61
+ );
62
+ return {
63
+ allDocsData,
64
+ versioningEnabled,
65
+ searchVersions,
66
+ setSearchVersion,
67
+ };
68
+ }
69
+
70
+ // We want to display one select per versioned docs plugin instance
71
+ function SearchVersionSelectList({ docsSearchVersionsHelpers }) {
72
+ const versionedPluginEntries = Object.entries(
73
+ docsSearchVersionsHelpers.allDocsData,
74
+ )
75
+ // Do not show a version select for unversioned docs plugin instances
76
+ .filter(([, docsData]) => docsData.versions.length > 1);
77
+ return (
78
+ <div
79
+ className={clsx(
80
+ 'col',
81
+ 'col--3',
82
+ 'padding-left--none',
83
+ styles.searchVersionColumn,
84
+ )}>
85
+ {versionedPluginEntries.map(([pluginId, docsData]) => {
86
+ const labelPrefix = versionedPluginEntries.length > 1 ? `${pluginId}: ` : '';
87
+ return (
88
+ <select
89
+ key={pluginId}
90
+ onChange={(e) => docsSearchVersionsHelpers.setSearchVersion(
91
+ pluginId,
92
+ e.target.value,
93
+ )
94
+ }
95
+ defaultValue={docsSearchVersionsHelpers.searchVersions[pluginId]}
96
+ className={styles.searchVersionInput}>
97
+ {docsData.versions.map((version, i) => (
98
+ <option
99
+ key={i}
100
+ label={`${labelPrefix}${version.label}`}
101
+ value={version.name}
102
+ />
103
+ ))}
104
+ </select>
105
+ );
106
+ })}
107
+ </div>
108
+ );
109
+ }
110
+
111
+ function SearchPageContent() {
112
+ const {
113
+ i18n: { currentLocale },
114
+ } = useDocusaurusContext();
115
+ const {
116
+ algolia: { appId, apiKey, indexName },
117
+ } = useAlgoliaThemeConfig();
118
+ const processSearchResultUrl = useSearchResultUrlProcessor();
119
+ const documentsFoundPlural = useDocumentsFoundPlural();
120
+ const docsSearchVersionsHelpers = useDocsSearchVersionsHelpers();
121
+ const { searchQuery, setSearchQuery } = useSearchPage();
122
+ const initialSearchResultState = {
123
+ items: [],
124
+ query: null,
125
+ totalResults: null,
126
+ totalPages: null,
127
+ lastPage: null,
128
+ hasMore: null,
129
+ loading: null,
130
+ };
131
+ const [searchResultState, searchResultStateDispatcher] = useReducer(
132
+ (prevState, data) => {
133
+ switch (data.type) {
134
+ case 'reset': {
135
+ return initialSearchResultState;
136
+ }
137
+ case 'loading': {
138
+ return { ...prevState, loading: true };
139
+ }
140
+ case 'update': {
141
+ if (searchQuery !== data.value.query) {
142
+ return prevState;
143
+ }
144
+ return {
145
+ ...data.value,
146
+ items:
147
+ data.value.lastPage === 0
148
+ ? data.value.items
149
+ : prevState.items.concat(data.value.items),
150
+ };
151
+ }
152
+ case 'advance': {
153
+ const hasMore = prevState.totalPages > prevState.lastPage + 1;
154
+ return {
155
+ ...prevState,
156
+ lastPage: hasMore ? prevState.lastPage + 1 : prevState.lastPage,
157
+ hasMore,
158
+ };
159
+ }
160
+ default:
161
+ return prevState;
162
+ }
163
+ },
164
+ initialSearchResultState,
165
+ );
166
+ const algoliaClient = algoliaSearch(appId, apiKey);
167
+ const algoliaHelper = algoliaSearchHelper(algoliaClient, indexName, {
168
+ hitsPerPage: 15,
169
+ advancedSyntax: true,
170
+ disjunctiveFacets: ['language', 'docusaurus_tag'],
171
+ });
172
+
173
+ algoliaHelper.on(
174
+ 'result',
175
+ ({ results: { query, hits, page, nbHits, nbPages } }) => {
176
+ if (query === '' || !Array.isArray(hits)) {
177
+ searchResultStateDispatcher({ type: 'reset' });
178
+ return;
179
+ }
180
+ const sanitizeValue = (value) => value.replace(
181
+ /algolia-docsearch-suggestion--highlight/g,
182
+ 'search-result-match',
183
+ );
184
+ const items = hits.map(
185
+ ({
186
+ url,
187
+ _highlightResult: { hierarchy },
188
+ _snippetResult: snippet = {},
189
+ }) => {
190
+ const titles = Object.keys(hierarchy).map((key) => sanitizeValue(hierarchy[key].value),
191
+ );
192
+ return {
193
+ title: titles.pop(),
194
+ url: processSearchResultUrl(url),
195
+ summary: snippet.content
196
+ ? `${sanitizeValue(snippet.content.value)}...`
197
+ : '',
198
+ breadcrumbs: titles,
199
+ };
200
+ },
201
+ );
202
+ searchResultStateDispatcher({
203
+ type: 'update',
204
+ value: {
205
+ items,
206
+ query,
207
+ totalResults: nbHits,
208
+ totalPages: nbPages,
209
+ lastPage: page,
210
+ hasMore: nbPages > page + 1,
211
+ loading: false,
212
+ },
213
+ });
214
+ },
215
+ );
216
+ const [loaderRef, setLoaderRef] = useState(null);
217
+ const prevY = useRef(0);
218
+ const observer = useRef(
219
+ ExecutionEnvironment.canUseIntersectionObserver
220
+ && new IntersectionObserver(
221
+ (entries) => {
222
+ const {
223
+ isIntersecting,
224
+ boundingClientRect: { y: currentY },
225
+ } = entries[0];
226
+ if (isIntersecting && prevY.current > currentY) {
227
+ searchResultStateDispatcher({ type: 'advance' });
228
+ }
229
+ prevY.current = currentY;
230
+ },
231
+ { threshold: 1 },
232
+ ),
233
+ );
234
+ const getTitle = () => (searchQuery
235
+ ? translate(
236
+ {
237
+ id: 'theme.SearchPage.existingResultsTitle',
238
+ message: 'Search results for "{query}"',
239
+ description: 'The search page title for non-empty query',
240
+ },
241
+ {
242
+ query: searchQuery,
243
+ },
244
+ )
245
+ : translate({
246
+ id: 'theme.SearchPage.emptyResultsTitle',
247
+ message: 'Search the documentation',
248
+ description: 'The search page title for empty query',
249
+ }));
250
+ const makeSearch = useEvent((page = 0) => {
251
+ algoliaHelper.addDisjunctiveFacetRefinement('docusaurus_tag', 'default-latest');
252
+ algoliaHelper.addDisjunctiveFacetRefinement('language', currentLocale);
253
+ Object.entries(docsSearchVersionsHelpers.searchVersions).forEach(
254
+ ([pluginId, searchVersion]) => {
255
+ algoliaHelper.addDisjunctiveFacetRefinement(
256
+ 'docusaurus_tag',
257
+ `docs-${pluginId}-${searchVersion}`,
258
+ );
259
+ },
260
+ );
261
+ algoliaHelper.setQuery(searchQuery).setPage(page).search();
262
+ });
263
+ useEffect(() => {
264
+ if (!loaderRef) {
265
+ return undefined;
266
+ }
267
+ const currentObserver = observer.current;
268
+ if (currentObserver) {
269
+ currentObserver.observe(loaderRef);
270
+ return () => currentObserver.unobserve(loaderRef);
271
+ }
272
+ return () => true;
273
+ }, [loaderRef]);
274
+ useEffect(() => {
275
+ searchResultStateDispatcher({ type: 'reset' });
276
+ if (searchQuery) {
277
+ searchResultStateDispatcher({ type: 'loading' });
278
+ setTimeout(() => {
279
+ makeSearch();
280
+ }, 300);
281
+ }
282
+ }, [searchQuery, docsSearchVersionsHelpers.searchVersions, makeSearch]);
283
+ useEffect(() => {
284
+ if (!searchResultState.lastPage || searchResultState.lastPage === 0) {
285
+ return;
286
+ }
287
+ makeSearch(searchResultState.lastPage);
288
+ }, [makeSearch, searchResultState.lastPage]);
289
+ return (
290
+ <Layout>
291
+ <Head>
292
+ <title>{useTitleFormatter(getTitle())}</title>
293
+ {/*
294
+ We should not index search pages
295
+ See https://github.com/facebook/docusaurus/pull/3233
296
+ */}
297
+ <meta property="robots" content="noindex, follow"/>
298
+ </Head>
299
+
300
+ <div className="container margin-vert--lg">
301
+ <h1>{getTitle()}</h1>
302
+
303
+ <form className="row" onSubmit={(e) => e.preventDefault()}>
304
+ <div
305
+ className={clsx('col', styles.searchQueryColumn, {
306
+ 'col--9': docsSearchVersionsHelpers.versioningEnabled,
307
+ 'col--12': !docsSearchVersionsHelpers.versioningEnabled,
308
+ })}>
309
+ <input
310
+ type="search"
311
+ name="q"
312
+ className={styles.searchQueryInput}
313
+ placeholder={translate({
314
+ id: 'theme.SearchPage.inputPlaceholder',
315
+ message: 'Type your search here',
316
+ description: 'The placeholder for search page input',
317
+ })}
318
+ aria-label={translate({
319
+ id: 'theme.SearchPage.inputLabel',
320
+ message: 'Search',
321
+ description: 'The ARIA label for search page input',
322
+ })}
323
+ onChange={(e) => setSearchQuery(e.target.value)}
324
+ value={searchQuery}
325
+ autoComplete="off"
326
+ autoFocus
327
+ />
328
+ </div>
329
+
330
+ {docsSearchVersionsHelpers.versioningEnabled && (
331
+ <SearchVersionSelectList
332
+ docsSearchVersionsHelpers={docsSearchVersionsHelpers}
333
+ />
334
+ )}
335
+ </form>
336
+
337
+ <div className="row">
338
+ <div className={clsx('col', 'col--8', styles.searchResultsColumn)}>
339
+ {!!searchResultState.totalResults
340
+ && documentsFoundPlural(searchResultState.totalResults)}
341
+ </div>
342
+
343
+ <div
344
+ className={clsx(
345
+ 'col',
346
+ 'col--4',
347
+ 'text--right',
348
+ styles.searchLogoColumn,
349
+ )}>
350
+ <a
351
+ target="_blank"
352
+ rel="noopener noreferrer"
353
+ href="https://www.algolia.com/"
354
+ aria-label={translate({
355
+ id: 'theme.SearchPage.algoliaLabel',
356
+ message: 'Search by Algolia',
357
+ description: 'The ARIA label for Algolia mention',
358
+ })}>
359
+ <svg viewBox="0 0 168 24" className={styles.algoliaLogo}>
360
+ <g fill="none">
361
+ <path
362
+ className={styles.algoliaLogoPathFill}
363
+ d="M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"
364
+ />
365
+ <path
366
+ fill="#5468FF"
367
+ d="M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"
368
+ />
369
+ <path
370
+ fill="white"
371
+ d="M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"
372
+ />
373
+ </g>
374
+ </svg>
375
+ </a>
376
+ </div>
377
+ </div>
378
+
379
+ {searchResultState.items.length > 0 ? (
380
+ <main>
381
+ {searchResultState.items.map(
382
+ ({ title, url, summary, breadcrumbs }, i) => (
383
+ <article key={i} className={styles.searchResultItem}>
384
+ <h2 className={styles.searchResultItemHeading}>
385
+ <Link to={url} dangerouslySetInnerHTML={{ __html: title }}/>
386
+ </h2>
387
+
388
+ {breadcrumbs.length > 0 && (
389
+ <nav aria-label="breadcrumbs">
390
+ <ul
391
+ className={clsx(
392
+ 'breadcrumbs',
393
+ styles.searchResultItemPath,
394
+ )}>
395
+ {breadcrumbs.map((html, index) => (
396
+ <li
397
+ key={index}
398
+ className="breadcrumbs__item"
399
+ // Developer provided the HTML, so assume it's safe.
400
+ // eslint-disable-next-line react/no-danger
401
+ dangerouslySetInnerHTML={{ __html: html }}
402
+ />
403
+ ))}
404
+ </ul>
405
+ </nav>
406
+ )}
407
+
408
+ {summary && (
409
+ <p
410
+ className={styles.searchResultItemSummary}
411
+ // Developer provided the HTML, so assume it's safe.
412
+ // eslint-disable-next-line react/no-danger
413
+ dangerouslySetInnerHTML={{ __html: summary }}
414
+ />
415
+ )}
416
+ </article>
417
+ ),
418
+ )}
419
+ </main>
420
+ ) : (
421
+ [
422
+ searchQuery && !searchResultState.loading && (
423
+ <p key="no-results">
424
+ <Translate
425
+ id="theme.SearchPage.noResultsText"
426
+ description="The paragraph for empty search result">
427
+ No results were found
428
+ </Translate>
429
+ </p>
430
+ ),
431
+ !!searchResultState.loading && (
432
+ <div key="spinner" className={styles.loadingSpinner}/>
433
+ ),
434
+ ]
435
+ )}
436
+
437
+ {searchResultState.hasMore && (
438
+ <div className={styles.loader} ref={setLoaderRef}>
439
+ <Translate
440
+ id="theme.SearchPage.fetchingNewResults"
441
+ description="The paragraph for fetching new search results">
442
+ Fetching new results...
443
+ </Translate>
444
+ </div>
445
+ )}
446
+ </div>
447
+ </Layout>
448
+ );
449
+ }
450
+
451
+ export default function SearchPage() {
452
+ return (
453
+ <HtmlClassNameProvider className="search-page-wrapper">
454
+ <SearchPageContent/>
455
+ </HtmlClassNameProvider>
456
+ );
457
+ }
@@ -0,0 +1,112 @@
1
+ .searchQueryInput,
2
+ .searchVersionInput {
3
+ border-radius: var(--ifm-global-radius);
4
+ border: 2px solid var(--ifm-toc-border-color);
5
+ font: var(--ifm-font-size-base) var(--ifm-font-family-base);
6
+ padding: 0.8rem;
7
+ width: 100%;
8
+ background: var(--docsearch-searchbox-focus-background);
9
+ color: var(--docsearch-text-color);
10
+ margin-bottom: 0.5rem;
11
+ transition: border var(--ifm-transition-fast) ease;
12
+ }
13
+
14
+ .searchQueryInput:focus,
15
+ .searchVersionInput:focus {
16
+ border-color: var(--docsearch-primary-color);
17
+ outline: none;
18
+ }
19
+
20
+ .searchQueryInput::placeholder {
21
+ color: var(--docsearch-muted-color);
22
+ }
23
+
24
+ .searchResultsColumn {
25
+ font-size: 0.9rem;
26
+ font-weight: bold;
27
+ }
28
+
29
+ .algoliaLogo {
30
+ max-width: 150px;
31
+ }
32
+
33
+ .algoliaLogoPathFill {
34
+ fill: var(--ifm-font-color-base);
35
+ }
36
+
37
+ .searchResultItem {
38
+ padding: 1rem 0;
39
+ border-bottom: 1px solid var(--ifm-toc-border-color);
40
+ }
41
+
42
+ .searchResultItemHeading {
43
+ font-weight: 400;
44
+ margin-bottom: 0;
45
+ }
46
+
47
+ .searchResultItemPath {
48
+ font-size: 0.8rem;
49
+ color: var(--ifm-color-content-secondary);
50
+ --ifm-breadcrumb-separator-size-multiplier: 1;
51
+ }
52
+
53
+ .searchResultItemSummary {
54
+ margin: 0.5rem 0 0;
55
+ font-style: italic;
56
+ }
57
+
58
+ @media only screen and (max-width: 996px) {
59
+ .searchQueryColumn {
60
+ max-width: 60% !important;
61
+ }
62
+
63
+ .searchVersionColumn {
64
+ max-width: 40% !important;
65
+ }
66
+
67
+ .searchResultsColumn {
68
+ max-width: 60% !important;
69
+ }
70
+
71
+ .searchLogoColumn {
72
+ max-width: 40% !important;
73
+ padding-left: 0 !important;
74
+ }
75
+ }
76
+
77
+ @media screen and (max-width: 576px) {
78
+ .searchQueryColumn {
79
+ max-width: 100% !important;
80
+ }
81
+
82
+ .searchVersionColumn {
83
+ max-width: 100% !important;
84
+ padding-left: var(--ifm-spacing-horizontal) !important;
85
+ }
86
+ }
87
+
88
+ .loadingSpinner {
89
+ width: 3rem;
90
+ height: 3rem;
91
+ border: 0.4em solid #eee;
92
+ border-top-color: var(--ifm-color-primary);
93
+ border-radius: 50%;
94
+ animation: loading-spin 1s linear infinite;
95
+ margin: 0 auto;
96
+ }
97
+
98
+ @keyframes loading-spin {
99
+ 100% {
100
+ transform: rotate(360deg);
101
+ }
102
+ }
103
+
104
+ .loader {
105
+ margin-top: 2rem;
106
+ }
107
+
108
+ :global(.search-result-match) {
109
+ color: var(--docsearch-hit-color);
110
+ background: rgb(255 215 142 / 25%);
111
+ padding: 0.09em 0;
112
+ }