@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.
Files changed (57) hide show
  1. package/out/components/header/{consts.js → components/header/consts.js} +0 -0
  2. package/out/components/header/components/header/full-search/chapters/chapters.js +56 -0
  3. package/out/components/header/components/header/full-search/chapters/chapters.module.pcss.js +11 -0
  4. package/out/components/header/components/header/full-search/empty/empty.js +22 -0
  5. package/out/components/header/components/header/full-search/empty/empty.module.pcss.js +6 -0
  6. package/out/components/header/components/header/full-search/empty/full-search-empty.svg.js +1539 -0
  7. package/out/components/header/components/header/full-search/full-search.js +70 -0
  8. package/out/components/header/components/header/full-search/full-search.module.pcss.js +9 -0
  9. package/out/components/header/components/header/full-search/hit-list/hit-list.js +44 -0
  10. package/out/components/header/components/header/full-search/hit-list/hit-list.module.pcss.js +5 -0
  11. package/out/components/header/components/header/full-search/loading/loading.js +11 -0
  12. package/out/components/header/components/header/full-search/loading/loading.module.pcss.js +4 -0
  13. package/out/components/header/components/header/full-search/result/get-extended-hits.js +55 -0
  14. package/out/components/header/components/header/full-search/results-list/results-list.js +25 -0
  15. package/out/components/header/{header.js → components/header/header.js} +49 -7
  16. package/out/components/header/{header.module.pcss.js → components/header/header.module.pcss.js} +0 -0
  17. package/out/components/header/{horizontal-menu → components/header/horizontal-menu}/horizontal-menu.js +0 -0
  18. package/out/components/header/{horizontal-menu → components/header/horizontal-menu}/horizontal-menu.module.pcss.js +0 -0
  19. package/out/components/header/{index.js → components/header/index.js} +0 -0
  20. package/out/components/header/{logo-large → components/header/logo-large}/kotlin-logo-large.svg.js +0 -0
  21. package/out/components/header/{logo-large → components/header/logo-large}/logo-large.js +0 -0
  22. package/out/components/header/{logo-large → components/header/logo-large}/logo-large.module.pcss.js +0 -0
  23. package/out/components/header/{logo-small → components/header/logo-small}/kotlin-logo-small.svg.js +0 -0
  24. package/out/components/header/{logo-small → components/header/logo-small}/logo-small.js +0 -0
  25. package/out/components/header/{logo-small → components/header/logo-small}/logo-small.module.pcss.js +0 -0
  26. package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/close-icon.svg.js +0 -0
  27. package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/hamburger-icon.svg.js +0 -0
  28. package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/menu-button.js +0 -0
  29. package/out/components/header/{menu-popup → components/header/menu-popup}/menu-button/menu-button.module.pcss.js +0 -0
  30. package/out/components/header/{menu-popup → components/header/menu-popup}/menu-popup.js +0 -0
  31. package/out/components/header/{menu-popup → components/header/menu-popup}/menu-popup.module.pcss.js +0 -0
  32. package/out/components/header/{nav-scheme.js → components/header/nav-scheme.js} +0 -0
  33. package/out/components/header/components/header/quick-search/empty/empty.js +16 -0
  34. package/out/components/header/components/header/quick-search/empty/empty.module.pcss.js +4 -0
  35. package/out/components/header/components/header/quick-search/list/list.js +31 -0
  36. package/out/components/header/components/header/quick-search/list/list.module.pcss.js +6 -0
  37. package/out/components/header/components/header/quick-search/loading/loading.js +14 -0
  38. package/out/components/header/components/header/quick-search/loading/loading.module.pcss.js +4 -0
  39. package/out/components/header/components/header/quick-search/quick-search.js +41 -0
  40. package/out/components/header/components/header/quick-search/quick-search.module.pcss.js +4 -0
  41. package/out/components/header/components/header/quick-search/result/result.js +30 -0
  42. package/out/components/header/components/header/quick-search/result/result.module.pcss.js +6 -0
  43. package/out/components/header/components/header/search-box/search-box.js +69 -0
  44. package/out/components/header/components/header/search-box/search-box.module.pcss.js +4 -0
  45. package/out/components/header/{search-button → components/header/search-button}/search-button.js +0 -0
  46. package/out/components/header/{search-button → components/header/search-button}/search-button.module.pcss.js +0 -0
  47. package/out/components/header/{search-button → components/header/search-button}/search.svg.js +0 -0
  48. package/out/components/header/components/header/search-wrapper/init-search.js +60 -0
  49. package/out/components/header/components/header/search-wrapper/search-const.js +13 -0
  50. package/out/components/header/components/header/search-wrapper/search-context.js +18 -0
  51. package/out/components/header/components/header/search-wrapper/search-with-algolia.js +58 -0
  52. package/out/components/header/components/header/search-wrapper/search-wrapper.js +40 -0
  53. package/out/components/header/components/header/search-wrapper/use-search.js +85 -0
  54. package/out/components/header/helper/is-macos.js +5 -0
  55. package/out/components/header/helper/key-codes.js +3 -0
  56. package/out/components/header/index.css +253 -0
  57. 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 };
@@ -0,0 +1,5 @@
1
+ function isMacOs() {
2
+ return window.navigator.appVersion.indexOf('Mac') !== -1;
3
+ }
4
+
5
+ export { isMacOs };
@@ -0,0 +1,3 @@
1
+ const ESC_CODE = 27;
2
+ const KEY_K_CODE = 75;
3
+ export { ESC_CODE, KEY_K_CODE };
@@ -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.0",
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",