@jetbrains/kotlin-web-site-ui 4.0.0 → 4.1.0-alpha.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/out/components/header/{consts.js → components/header/consts.js} +0 -0
- package/out/components/header/components/header/full-search/chapters/chapters.js +56 -0
- package/out/components/header/components/header/full-search/chapters/chapters.module.pcss.js +11 -0
- package/out/components/header/components/header/full-search/empty/empty.js +22 -0
- package/out/components/header/components/header/full-search/empty/empty.module.pcss.js +6 -0
- package/out/components/header/components/header/full-search/empty/full-search-empty.svg.js +1539 -0
- package/out/components/header/components/header/full-search/full-search.js +70 -0
- package/out/components/header/components/header/full-search/full-search.module.pcss.js +9 -0
- package/out/components/header/components/header/full-search/hit-list/hit-list.js +44 -0
- package/out/components/header/components/header/full-search/hit-list/hit-list.module.pcss.js +5 -0
- package/out/components/header/components/header/full-search/loading/loading.js +11 -0
- package/out/components/header/components/header/full-search/loading/loading.module.pcss.js +4 -0
- package/out/components/header/components/header/full-search/result/get-extended-hits.js +55 -0
- package/out/components/header/components/header/full-search/results-list/results-list.js +25 -0
- package/out/components/header/{header.js → components/header/header.js} +49 -7
- package/out/components/header/{header.module.pcss.js → components/header/header.module.pcss.js} +0 -0
- package/out/components/header/{horizontal-menu → components/header/horizontal-menu}/horizontal-menu.js +0 -0
- package/out/components/header/{horizontal-menu → components/header/horizontal-menu}/horizontal-menu.module.pcss.js +0 -0
- package/out/components/header/{index.js → components/header/index.js} +0 -0
- package/out/components/header/{logo-large → components/header/logo-large}/kotlin-logo-large.svg.js +0 -0
- package/out/components/header/{logo-large → components/header/logo-large}/logo-large.js +0 -0
- package/out/components/header/{logo-large → components/header/logo-large}/logo-large.module.pcss.js +0 -0
- package/out/components/header/{logo-small → components/header/logo-small}/kotlin-logo-small.svg.js +0 -0
- package/out/components/header/{logo-small → components/header/logo-small}/logo-small.js +0 -0
- package/out/components/header/{logo-small → components/header/logo-small}/logo-small.module.pcss.js +0 -0
- package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/close-icon.svg.js +0 -0
- package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/hamburger-icon.svg.js +0 -0
- package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/menu-button.js +0 -0
- package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/menu-button.module.pcss.js +0 -0
- package/out/components/header/{menu-popup → components/header/menu-popup}/menu-popup.js +0 -0
- package/out/components/header/{menu-popup → components/header/menu-popup}/menu-popup.module.pcss.js +0 -0
- package/out/components/header/{nav-scheme.js → components/header/nav-scheme.js} +0 -0
- package/out/components/header/components/header/quick-search/empty/empty.js +16 -0
- package/out/components/header/components/header/quick-search/empty/empty.module.pcss.js +4 -0
- package/out/components/header/components/header/quick-search/list/list.js +31 -0
- package/out/components/header/components/header/quick-search/list/list.module.pcss.js +6 -0
- package/out/components/header/components/header/quick-search/loading/loading.js +14 -0
- package/out/components/header/components/header/quick-search/loading/loading.module.pcss.js +4 -0
- package/out/components/header/components/header/quick-search/quick-search.js +41 -0
- package/out/components/header/components/header/quick-search/quick-search.module.pcss.js +4 -0
- package/out/components/header/components/header/quick-search/result/result.js +30 -0
- package/out/components/header/components/header/quick-search/result/result.module.pcss.js +6 -0
- package/out/components/header/components/header/search-box/search-box.js +69 -0
- package/out/components/header/components/header/search-box/search-box.module.pcss.js +4 -0
- package/out/components/header/{search-button → components/header/search-button}/search-button.js +0 -0
- package/out/components/header/{search-button → components/header/search-button}/search-button.module.pcss.js +0 -0
- package/out/components/header/{search-button → components/header/search-button}/search.svg.js +0 -0
- package/out/components/header/components/header/search-wrapper/init-search.js +60 -0
- package/out/components/header/components/header/search-wrapper/search-const.js +13 -0
- package/out/components/header/components/header/search-wrapper/search-context.js +18 -0
- package/out/components/header/components/header/search-wrapper/search-with-algolia.js +58 -0
- package/out/components/header/components/header/search-wrapper/search-wrapper.js +40 -0
- package/out/components/header/components/header/search-wrapper/use-search.js +85 -0
- package/out/components/header/helper/is-macos.js +5 -0
- package/out/components/header/helper/key-codes.js +3 -0
- package/out/components/header/index.css +253 -0
- package/package.json +8 -2
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import algoliasearch from 'algoliasearch/lite';
|
|
2
|
+
import { EXACT_MATCH } from './search-const.js';
|
|
3
|
+
import { searchWithAlgolia } from './search-with-algolia.js';
|
|
4
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
5
|
+
const attributesToRetrieve = ['pageTitle', 'url', 'breadcrumbs', 'mainTitle'];
|
|
6
|
+
const attributesToSnippet = ['content:25'];
|
|
7
|
+
|
|
8
|
+
function initSearch({
|
|
9
|
+
searchAlgoliaId,
|
|
10
|
+
searchAlgoliaApiKey,
|
|
11
|
+
searchAlgoliaIndexName
|
|
12
|
+
}) {
|
|
13
|
+
const [searchIndex, setSearchIndex] = useState(null);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (searchAlgoliaId && searchAlgoliaApiKey && searchAlgoliaIndexName) {
|
|
16
|
+
const algoliaClient = algoliasearch(searchAlgoliaId, searchAlgoliaApiKey);
|
|
17
|
+
setSearchIndex(algoliaClient.initIndex(searchAlgoliaIndexName));
|
|
18
|
+
}
|
|
19
|
+
}, []);
|
|
20
|
+
const search = useMemo(() => async (query, matching, maxHits) => {
|
|
21
|
+
try {
|
|
22
|
+
const isExactSearch = matching === EXACT_MATCH.value;
|
|
23
|
+
const searchArgs = {
|
|
24
|
+
attributesToRetrieve,
|
|
25
|
+
attributesToSnippet,
|
|
26
|
+
isExactSearch,
|
|
27
|
+
maxHits,
|
|
28
|
+
query
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
if (!searchIndex) {
|
|
32
|
+
throw new Error('ConfigData is empty');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const searchData = await searchWithAlgolia({ ...searchArgs,
|
|
36
|
+
searchIndex
|
|
37
|
+
});
|
|
38
|
+
const {
|
|
39
|
+
hits,
|
|
40
|
+
totalHits
|
|
41
|
+
} = searchData;
|
|
42
|
+
return {
|
|
43
|
+
hits,
|
|
44
|
+
totalHits
|
|
45
|
+
};
|
|
46
|
+
} catch (error) {
|
|
47
|
+
//reportError(error, { component: 'search' });
|
|
48
|
+
return {
|
|
49
|
+
hits: [],
|
|
50
|
+
totalHits: 0
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}, [searchIndex]);
|
|
54
|
+
return {
|
|
55
|
+
searchIndex,
|
|
56
|
+
search
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export { initSearch };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const FULL_SEARCH = 'full';
|
|
2
|
+
const QUICK_SEARCH = 'quick';
|
|
3
|
+
const DEBOUNCE_SEARCH = 500;
|
|
4
|
+
const DEBOUNCE_QUERY_UPDATE = 100;
|
|
5
|
+
const ALL_RESULTS = {
|
|
6
|
+
label: 'All results',
|
|
7
|
+
value: 'All results'
|
|
8
|
+
};
|
|
9
|
+
const EXACT_MATCH = {
|
|
10
|
+
label: 'Exact match',
|
|
11
|
+
value: 'Exact match'
|
|
12
|
+
};
|
|
13
|
+
export { ALL_RESULTS, DEBOUNCE_QUERY_UPDATE, DEBOUNCE_SEARCH, EXACT_MATCH, FULL_SEARCH, QUICK_SEARCH };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
const searchParamsInitValue = {
|
|
3
|
+
query: '',
|
|
4
|
+
type: '',
|
|
5
|
+
setType: () => null,
|
|
6
|
+
search: () => new Promise(() => ({
|
|
7
|
+
hits: [],
|
|
8
|
+
totalHits: 0
|
|
9
|
+
})),
|
|
10
|
+
matching: '',
|
|
11
|
+
matchingOptions: [],
|
|
12
|
+
setMatching: () => null,
|
|
13
|
+
updateQueryString: () => null,
|
|
14
|
+
searchQueryState: '',
|
|
15
|
+
setSearchQueryState: () => null
|
|
16
|
+
};
|
|
17
|
+
const SearchContext = React__default.createContext(searchParamsInitValue);
|
|
18
|
+
export { SearchContext as default };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const snippetEllipsisText = '…';
|
|
2
|
+
|
|
3
|
+
const searchWithAlgolia = async ({
|
|
4
|
+
attributesToRetrieve = [],
|
|
5
|
+
attributesToSnippet = [],
|
|
6
|
+
isExactSearch = false,
|
|
7
|
+
maxHits = 0,
|
|
8
|
+
query = '',
|
|
9
|
+
searchIndex
|
|
10
|
+
}) => {
|
|
11
|
+
try {
|
|
12
|
+
if (searchIndex?.indexName) {
|
|
13
|
+
const searchResponse = await searchIndex.search(query, {
|
|
14
|
+
attributesToRetrieve,
|
|
15
|
+
attributesToSnippet,
|
|
16
|
+
clickAnalytics: true,
|
|
17
|
+
hitsPerPage: maxHits,
|
|
18
|
+
query,
|
|
19
|
+
snippetEllipsisText,
|
|
20
|
+
typoTolerance: !isExactSearch
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
hits: mapResponseToHits(searchResponse.hits),
|
|
24
|
+
totalHits: searchResponse.nbHits
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
throw new Error(`Algolia client can't be initialized`);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
return {
|
|
31
|
+
totalHits: 0,
|
|
32
|
+
hits: []
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
function mapResponseToHits(results) {
|
|
38
|
+
return results.map(({
|
|
39
|
+
_highlightResult,
|
|
40
|
+
_snippetResult,
|
|
41
|
+
breadcrumbs,
|
|
42
|
+
mainTitle,
|
|
43
|
+
objectID,
|
|
44
|
+
pageTitle,
|
|
45
|
+
url
|
|
46
|
+
}) => ({
|
|
47
|
+
breadcrumb: breadcrumbs,
|
|
48
|
+
highlightedTitle: _highlightResult.pageTitle.value,
|
|
49
|
+
hitId: objectID,
|
|
50
|
+
mainTitle,
|
|
51
|
+
pageId: _highlightResult.parent.value,
|
|
52
|
+
snippet: _snippetResult.content.value,
|
|
53
|
+
title: pageTitle,
|
|
54
|
+
url
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { searchWithAlgolia };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React__default, { useState } from 'react';
|
|
2
|
+
import { initSearch } from './init-search.js';
|
|
3
|
+
import SearchContext from './search-context.js';
|
|
4
|
+
import { QUICK_SEARCH, ALL_RESULTS, EXACT_MATCH } from './search-const.js';
|
|
5
|
+
const matchingOptions = [{
|
|
6
|
+
label: ALL_RESULTS.label,
|
|
7
|
+
value: ALL_RESULTS.value
|
|
8
|
+
}, {
|
|
9
|
+
label: EXACT_MATCH.label,
|
|
10
|
+
value: EXACT_MATCH.value
|
|
11
|
+
}];
|
|
12
|
+
|
|
13
|
+
const SearchWrapper = ({
|
|
14
|
+
children,
|
|
15
|
+
searchConfig
|
|
16
|
+
}) => {
|
|
17
|
+
const {
|
|
18
|
+
search
|
|
19
|
+
} = initSearch(searchConfig);
|
|
20
|
+
const [type, setType] = useState(QUICK_SEARCH);
|
|
21
|
+
const [matching, setMatching] = useState(matchingOptions[0].value);
|
|
22
|
+
const [searchQueryState, setSearchQueryState] = useState(''); // router
|
|
23
|
+
|
|
24
|
+
return React__default.createElement(SearchContext.Provider, {
|
|
25
|
+
value: {
|
|
26
|
+
query: '',
|
|
27
|
+
type,
|
|
28
|
+
setType,
|
|
29
|
+
search,
|
|
30
|
+
matching,
|
|
31
|
+
matchingOptions,
|
|
32
|
+
setMatching,
|
|
33
|
+
updateQueryString: () => {},
|
|
34
|
+
searchQueryState,
|
|
35
|
+
setSearchQueryState
|
|
36
|
+
}
|
|
37
|
+
}, children);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { SearchWrapper };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { useState, useContext, useEffect } from 'react';
|
|
2
|
+
import SearchContext from './search-context.js';
|
|
3
|
+
import { DEBOUNCE_QUERY_UPDATE, DEBOUNCE_SEARCH, FULL_SEARCH, QUICK_SEARCH } from './search-const.js';
|
|
4
|
+
let updateQueryTimeout = 0;
|
|
5
|
+
let searchTimeout = 0;
|
|
6
|
+
|
|
7
|
+
const useSearch = (inputValue = '', maxHits = 25) => {
|
|
8
|
+
const [hits, setHits] = useState([]);
|
|
9
|
+
const [totalHits, setTotalHits] = useState(0);
|
|
10
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
11
|
+
const [queryId, setQueryId] = useState('');
|
|
12
|
+
const [placeholder, setPlaceholder] = useState('');
|
|
13
|
+
const {
|
|
14
|
+
matching,
|
|
15
|
+
updateQueryString,
|
|
16
|
+
type,
|
|
17
|
+
search,
|
|
18
|
+
setSearchQueryState
|
|
19
|
+
} = useContext(SearchContext);
|
|
20
|
+
const isFullSearch = type === FULL_SEARCH;
|
|
21
|
+
const isQuickSearch = type === QUICK_SEARCH;
|
|
22
|
+
|
|
23
|
+
const debouncedSearch = () => {
|
|
24
|
+
if (updateQueryTimeout) {
|
|
25
|
+
clearTimeout(updateQueryTimeout);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (searchTimeout) {
|
|
29
|
+
clearTimeout(searchTimeout);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
updateQueryTimeout = window.setTimeout(() => {
|
|
33
|
+
if (isQuickSearch) {
|
|
34
|
+
setSearchQueryState(inputValue);
|
|
35
|
+
} else if (isFullSearch) {
|
|
36
|
+
updateQueryString(inputValue, type);
|
|
37
|
+
}
|
|
38
|
+
}, DEBOUNCE_QUERY_UPDATE);
|
|
39
|
+
searchTimeout = window.setTimeout(async () => {
|
|
40
|
+
if (inputValue) {
|
|
41
|
+
setIsLoading(true);
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
const results = await search(inputValue, matching, maxHits);
|
|
45
|
+
|
|
46
|
+
if (results.hits.length === 0) {
|
|
47
|
+
setPlaceholder(`We’re sorry! We could’t find results for «${inputValue}»`);
|
|
48
|
+
} else {
|
|
49
|
+
setPlaceholder('');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
setHits(results.hits);
|
|
53
|
+
setTotalHits(results.totalHits);
|
|
54
|
+
|
|
55
|
+
if (results.queryId) {
|
|
56
|
+
setQueryId(results.queryId);
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error(error);
|
|
60
|
+
} finally {
|
|
61
|
+
setIsLoading(false);
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
// Clear hits and placeholder when search string is empty.
|
|
65
|
+
// It prevents show previous negative result when searching from scratch
|
|
66
|
+
setPlaceholder('');
|
|
67
|
+
setHits([]);
|
|
68
|
+
}
|
|
69
|
+
}, DEBOUNCE_SEARCH);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
debouncedSearch();
|
|
74
|
+
return () => clearTimeout(updateQueryTimeout);
|
|
75
|
+
}, [inputValue, matching]);
|
|
76
|
+
return {
|
|
77
|
+
hits,
|
|
78
|
+
totalHits,
|
|
79
|
+
isLoading,
|
|
80
|
+
queryId,
|
|
81
|
+
placeholder
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export { useSearch };
|
|
@@ -272,6 +272,259 @@
|
|
|
272
272
|
}
|
|
273
273
|
}
|
|
274
274
|
|
|
275
|
+
.ktl-result-module_result_EKhUw {
|
|
276
|
+
box-sizing: border-box;
|
|
277
|
+
display: block;
|
|
278
|
+
padding: 16px 32px;
|
|
279
|
+
text-decoration: none;
|
|
280
|
+
}
|
|
281
|
+
.ktl-result-module_result_EKhUw:hover {
|
|
282
|
+
background: rgba(255, 255, 255, 0.1);
|
|
283
|
+
}
|
|
284
|
+
.ktl-result-module_result_EKhUw:focus {
|
|
285
|
+
outline: none;
|
|
286
|
+
background: rgba(255, 255, 255, 0.1);
|
|
287
|
+
}
|
|
288
|
+
.ktl-result-module_result_EKhUw em {
|
|
289
|
+
background-color: rgba(127,82,255,0.3);
|
|
290
|
+
font-style: normal;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.ktl-result-module_resultTitle_DSpAT {
|
|
294
|
+
margin-bottom: 6px;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.ktl-result-module_text_fWBKG {
|
|
298
|
+
display: -webkit-box;
|
|
299
|
+
-webkit-line-clamp: 2;
|
|
300
|
+
-webkit-box-orient: vertical;
|
|
301
|
+
overflow: hidden;
|
|
302
|
+
}
|
|
303
|
+
.ktl-list-module_results_LlxqY {
|
|
304
|
+
box-sizing: border-box;
|
|
305
|
+
max-height: 305px;
|
|
306
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
307
|
+
background: #323236;
|
|
308
|
+
color: #fff;
|
|
309
|
+
overflow-y: scroll;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.ktl-list-module_topBar_OO0XT {
|
|
313
|
+
display: none;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
.ktl-list-module_advancedSearch_XNy88 {
|
|
317
|
+
display: inline-block;
|
|
318
|
+
background: transparent;
|
|
319
|
+
border: 0;
|
|
320
|
+
padding: 6px 16px;
|
|
321
|
+
border-radius: 24px;
|
|
322
|
+
cursor: pointer;
|
|
323
|
+
flex-shrink: 0;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.ktl-list-module_advancedSearch_XNy88:hover {
|
|
327
|
+
background: rgba(255, 255, 255, .1);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.ktl-list-module_advancedSearch_XNy88:focus {
|
|
331
|
+
outline: none;
|
|
332
|
+
box-shadow: rgba(107, 87, 255, 0.8) 0 0 0 4px;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
@media (min-width: 768px) {
|
|
336
|
+
.ktl-list-module_results_LlxqY {
|
|
337
|
+
max-height: 434px;
|
|
338
|
+
}
|
|
339
|
+
.ktl-list-module_topBar_OO0XT {
|
|
340
|
+
display: flex;
|
|
341
|
+
align-items: center;
|
|
342
|
+
justify-content: space-between;
|
|
343
|
+
padding: 34px 32px 14px 32px;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
.ktl-empty-module_empty_xh1i- {
|
|
347
|
+
box-sizing: border-box;
|
|
348
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
349
|
+
background: #323236;
|
|
350
|
+
padding: 32px;
|
|
351
|
+
}
|
|
352
|
+
.ktl-loading-module_loading_CtOhW {
|
|
353
|
+
box-sizing: border-box;
|
|
354
|
+
height: 92px;
|
|
355
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
356
|
+
background: #323236;
|
|
357
|
+
display: flex;
|
|
358
|
+
justify-content: center;
|
|
359
|
+
align-items: center;
|
|
360
|
+
text-align: left;
|
|
361
|
+
}
|
|
362
|
+
.ktl-loading-module_loading_CtOhW > svg {
|
|
363
|
+
fill: #6B57FF;
|
|
364
|
+
}
|
|
365
|
+
.ktl-quick-search-module_wrapper_kkbQQ {
|
|
366
|
+
box-sizing: border-box;
|
|
367
|
+
position: absolute;
|
|
368
|
+
left: 8px;
|
|
369
|
+
right: 8px;
|
|
370
|
+
bottom: -8px;
|
|
371
|
+
transform: translateY(100%);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
@media (min-width: 768px) {
|
|
375
|
+
.ktl-quick-search-module_wrapper_kkbQQ {
|
|
376
|
+
left: 0;
|
|
377
|
+
right: 0;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
.ktl-full-search-module_fullSearch_MTU8t {
|
|
381
|
+
display: none;
|
|
382
|
+
box-sizing: border-box;
|
|
383
|
+
position: fixed;
|
|
384
|
+
width: 100%;
|
|
385
|
+
height: 100%;
|
|
386
|
+
top: 0;
|
|
387
|
+
left: 0;
|
|
388
|
+
background: #ffffff;
|
|
389
|
+
overflow: scroll;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
.ktl-full-search-module_closeSearch_5vYDG {
|
|
393
|
+
padding: 0;
|
|
394
|
+
margin: 0;
|
|
395
|
+
border: 0;
|
|
396
|
+
background: none;
|
|
397
|
+
cursor: pointer;
|
|
398
|
+
position: absolute;
|
|
399
|
+
top: 40px;
|
|
400
|
+
right: 40px;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.ktl-full-search-module_wrapper_9rxXb {
|
|
404
|
+
max-width: 704px;
|
|
405
|
+
margin: 0 auto;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.ktl-full-search-module_header_Wltw0 {
|
|
409
|
+
width: 100%;
|
|
410
|
+
padding-top: 120px;
|
|
411
|
+
padding-bottom: 24px;
|
|
412
|
+
position: sticky;
|
|
413
|
+
top: 0;
|
|
414
|
+
left: 0;
|
|
415
|
+
background: #ffffff;
|
|
416
|
+
z-index: 10;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.ktl-full-search-module_switcher_o1RgM {
|
|
420
|
+
margin-top: 14px;
|
|
421
|
+
display: flex;
|
|
422
|
+
justify-content: flex-end;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
.ktl-full-search-module_results_svcSE {
|
|
426
|
+
margin-top: 14px;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
@media (min-width: 768px) {
|
|
430
|
+
.ktl-full-search-module_fullSearch_MTU8t {
|
|
431
|
+
display: block;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
.ktl-loading-module_loader_B2IQl {
|
|
435
|
+
margin: 24px 0;
|
|
436
|
+
}
|
|
437
|
+
.ktl-loading-module_loader_B2IQl > svg {
|
|
438
|
+
fill: #6B57FF;
|
|
439
|
+
}
|
|
440
|
+
.ktl-empty-module_wrapper_cNB8Y {
|
|
441
|
+
display: block;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.ktl-empty-module_title_p2FMj {
|
|
445
|
+
margin-bottom: 24px;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.ktl-empty-module_image_6Xr6L {
|
|
449
|
+
display: flex;
|
|
450
|
+
justify-content: flex-end;
|
|
451
|
+
margin-top: 16px;
|
|
452
|
+
}
|
|
453
|
+
.ktl-chapters-module_chapters_J0wLB {
|
|
454
|
+
border-left: 1px solid var(--ktl-light-dark-20);
|
|
455
|
+
padding-left: 12px;
|
|
456
|
+
margin-top: 24px;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.ktl-chapters-module_chapterTitle_b6Rdz {
|
|
460
|
+
border-bottom-color: transparent;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.ktl-chapters-module_chapterTitle_b6Rdz em {
|
|
464
|
+
background: rgba(127, 82, 255, 0.2);
|
|
465
|
+
font-style: normal;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.ktl-chapters-module_singleChapter_zSmx2:not(:last-child) {
|
|
469
|
+
margin-bottom: 12px;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.ktl-chapters-module_headliner_ZBuf9 {
|
|
473
|
+
margin: 0;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.ktl-chapters-module_snippet_yROJo {
|
|
477
|
+
margin-top: 8px;
|
|
478
|
+
color: rgba(39, 40, 44, 0.7);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
.ktl-chapters-module_snippet_yROJo em {
|
|
482
|
+
background: rgba(127, 82, 255, 0.2);
|
|
483
|
+
font-style: normal;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.ktl-chapters-module_extraSection_lsZfw {
|
|
487
|
+
display: none;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.ktl-chapters-module_visibleSection_wQyvM {
|
|
491
|
+
display: block;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.ktl-chapters-module_moreButton_98oqy {
|
|
495
|
+
margin-top: 12px;
|
|
496
|
+
}
|
|
497
|
+
.ktl-hit-list-module_hitList_1MP6m {
|
|
498
|
+
margin: 24px 0;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
.ktl-hit-list-module_titleLink_rdJ6u {
|
|
502
|
+
border-bottom-color: transparent;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
.ktl-hit-list-module_titleLink_rdJ6u em {
|
|
506
|
+
background: rgba(127, 82, 255, 0.2);
|
|
507
|
+
font-style: normal;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
.ktl-search-box-module_searchBox_0SgE9 {
|
|
511
|
+
position: relative;
|
|
512
|
+
width: 408px;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
@media (max-width: 767px) {
|
|
516
|
+
.ktl-search-box-module_searchBox_0SgE9 {
|
|
517
|
+
background: var(--ktl-dark-100);
|
|
518
|
+
width: auto;
|
|
519
|
+
position: absolute;
|
|
520
|
+
top: 0;
|
|
521
|
+
left: 0;
|
|
522
|
+
right: 0;
|
|
523
|
+
bottom: 0;
|
|
524
|
+
padding: 4px;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
275
528
|
:root {
|
|
276
529
|
--ktl-light-grey: #f4f4f4;
|
|
277
530
|
--ktl-dark-100: rgba(39, 40, 44, 1);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jetbrains/kotlin-web-site-ui",
|
|
3
3
|
"description": "UI components for Kotlin web sites development",
|
|
4
|
-
"version": "4.0.0",
|
|
4
|
+
"version": "4.1.0-alpha.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "JetBrains",
|
|
7
7
|
"files": [
|
|
@@ -29,9 +29,11 @@
|
|
|
29
29
|
"@rescui/tooltip": "0.x",
|
|
30
30
|
"@rescui/typography": "0.x",
|
|
31
31
|
"@rescui/ui-contexts": "0.x",
|
|
32
|
+
"algoliasearch": "4.x",
|
|
32
33
|
"formik": "2.x",
|
|
33
34
|
"react": ">= 16.8.6 < 18",
|
|
34
35
|
"react-dom": ">= 16.8.6 < 18",
|
|
36
|
+
"react-outside-click-handler": "^1.3.0",
|
|
35
37
|
"react-swipeable-views": "0.x",
|
|
36
38
|
"sha.js": "2.x"
|
|
37
39
|
},
|
|
@@ -47,8 +49,9 @@
|
|
|
47
49
|
"@rescui/checkbox": "^0.1.0",
|
|
48
50
|
"@rescui/icons": "^0.2.0",
|
|
49
51
|
"@rescui/input": "^0.1.2",
|
|
52
|
+
"@rescui/switcher": "^0.2.2",
|
|
50
53
|
"@rescui/tooltip": "^0.1.2",
|
|
51
|
-
"@rescui/typography": "^0.3
|
|
54
|
+
"@rescui/typography": "^0.7.3",
|
|
52
55
|
"@rescui/ui-contexts": "^0.1.3",
|
|
53
56
|
"@rollup/plugin-babel": "^5.3.1",
|
|
54
57
|
"@rollup/plugin-json": "^4.1.0",
|
|
@@ -65,11 +68,13 @@
|
|
|
65
68
|
"@types/react": "^17.0.0",
|
|
66
69
|
"@types/react-dom": "^17.0.0",
|
|
67
70
|
"@types/react-modal": "^3.13.1",
|
|
71
|
+
"@types/react-outside-click-handler": "^1.3.1",
|
|
68
72
|
"@types/react-swipeable-views": "^0.13.1",
|
|
69
73
|
"@types/sha.js": "^2.4.0",
|
|
70
74
|
"@types/youtube": "^0.0.45",
|
|
71
75
|
"@typescript-eslint/eslint-plugin": "^4.22.0",
|
|
72
76
|
"@typescript-eslint/parser": "^4.22.0",
|
|
77
|
+
"algoliasearch": "^4.13.1",
|
|
73
78
|
"autoprefixer": "^10.2.5",
|
|
74
79
|
"babel-loader": "^8.2.2",
|
|
75
80
|
"babel-plugin-module-resolver": "^4.1.0",
|
|
@@ -103,6 +108,7 @@
|
|
|
103
108
|
"react": "^16.8.6",
|
|
104
109
|
"react-dom": "^16.8.6",
|
|
105
110
|
"react-modal": "^3.14.4",
|
|
111
|
+
"react-outside-click-handler": "^1.3.0",
|
|
106
112
|
"react-remove-scroll-bar": "^2.2.0",
|
|
107
113
|
"react-swipeable-views": "^0.14.0",
|
|
108
114
|
"rollup": "^2.70.1",
|