@diplodoc/client 3.10.3 → 3.12.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 (29) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/build/client/app-2c83962500db98f3.js +2 -0
  3. package/build/client/app-2c83962500db98f3.js.map +1 -0
  4. package/build/client/app-34c68624e23be7ce.css.map +1 -1
  5. package/build/client/manifest.json +8 -8
  6. package/build/client/search-7dc3bfe50645287d.js +2 -0
  7. package/build/client/search-7dc3bfe50645287d.js.map +1 -0
  8. package/build/client/search-b82629d53f2e437c.css.map +1 -1
  9. package/build/client/{vendor-9aa0609c11103fb0.rtl.css → vendor-133b7f840d4bd15c.rtl.css} +1 -1
  10. package/build/client/{vendor-5c42c2d82fe19c6e.css → vendor-14432c0205e2d1bb.css} +2 -2
  11. package/build/client/vendor-14432c0205e2d1bb.css.map +1 -0
  12. package/build/client/{vendor-0ca3ecbd78ee745e.js → vendor-f38539851c503793.js} +4 -4
  13. package/build/client/vendor-f38539851c503793.js.map +1 -0
  14. package/build/components/App/useAvailableLangs.d.ts +3 -0
  15. package/build/components/HeaderControls/index.d.ts +2 -1
  16. package/build/components/Search/Page.d.ts +3 -0
  17. package/build/components/Search/index.d.ts +9 -3
  18. package/build/server/app.js +462 -352
  19. package/build/server/app.js.map +1 -1
  20. package/build/server/vendor.js +38 -14
  21. package/build/server/vendor.js.map +1 -1
  22. package/package.json +2 -2
  23. package/build/client/app-5320a31c05d20641.js +0 -2
  24. package/build/client/app-5320a31c05d20641.js.map +0 -1
  25. package/build/client/search-81a7f828ef481c84.js +0 -2
  26. package/build/client/search-81a7f828ef481c84.js.map +0 -1
  27. package/build/client/vendor-0ca3ecbd78ee745e.js.map +0 -1
  28. package/build/client/vendor-5c42c2d82fe19c6e.css.map +0 -1
  29. package/build/components/Search/Search.d.ts +0 -3
@@ -1,6 +1,6 @@
1
1
  (() => { // webpackBootstrap
2
2
  var __webpack_modules__ = ({
3
- 11301: (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
3
+ 85978: (function (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
4
4
  "use strict";
5
5
  // ESM COMPAT FLAG
6
6
  __webpack_require__.r(__webpack_exports__);
@@ -25,7 +25,7 @@ var server_node = __webpack_require__(9680);
25
25
  // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_object_spread_props.js
26
26
  var _object_spread_props = __webpack_require__(99282);
27
27
  // EXTERNAL MODULE: ./node_modules/@gravity-ui/uikit/build/esm/components/theme/ThemeProvider.js + 7 modules
28
- var ThemeProvider = __webpack_require__(12956);
28
+ var theme_ThemeProvider = __webpack_require__(12956);
29
29
  // EXTERNAL MODULE: ./node_modules/@diplodoc/components/build/esm/constants.js
30
30
  var constants = __webpack_require__(53816);
31
31
  // EXTERNAL MODULE: ./node_modules/@diplodoc/components/build/esm/models/index.js
@@ -40,8 +40,6 @@ var RenderBodyHooksContext = __webpack_require__(65848);
40
40
  var ConsentPopup = __webpack_require__(74311);
41
41
  // EXTERNAL MODULE: ./node_modules/@diplodoc/transform/dist/js/yfm.js
42
42
  var yfm = __webpack_require__(68648);
43
- // EXTERNAL MODULE: ./node_modules/bem-cn-lite/lib/index.js
44
- var lib = __webpack_require__(22853);
45
43
  ;// CONCATENATED MODULE: ./src/components/Router/index.ts
46
44
 
47
45
  var RouterContext = (0,react.createContext)({
@@ -49,36 +47,334 @@ var RouterContext = (0,react.createContext)({
49
47
  depth: 0
50
48
  });
51
49
  RouterContext.displayName = 'RouterContext';
52
- var RouterProvider = RouterContext.Provider;
50
+ var Router_RouterProvider = RouterContext.Provider;
53
51
  function Router_useRouter() {
54
52
  return (0,react.useContext)(RouterContext);
55
53
  }
56
54
 
55
+ ;// CONCATENATED MODULE: ./src/hooks/useLang.ts
56
+
57
+
58
+ var LangContext = (0,react.createContext)(models/* .Lang.En */.Uo.En);
59
+ LangContext.displayName = 'Lang';
60
+ var useLang_LangProvider = LangContext.Provider;
61
+ function useLang() {
62
+ return (0,react.useContext)(LangContext);
63
+ }
64
+
65
+ // EXTERNAL MODULE: ./node_modules/@diplodoc/components/build/esm/utils/index.js + 63 modules
66
+ var utils = __webpack_require__(20935);
67
+ // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_to_consumable_array.js + 3 modules
68
+ var _to_consumable_array = __webpack_require__(55210);
69
+ ;// CONCATENATED MODULE: ./src/constants.ts
70
+
71
+
72
+ var HEADER_HEIGHT = 64;
73
+ var MOBILE_VIEW_WIDTH_BREAKPOINT = 769;
74
+ var DEFAULT_USER_SETTINGS = {
75
+ theme: models/* .Theme.Light */.Q2.Light,
76
+ textSize: models/* .TextSizes.M */.tF.M,
77
+ showMiniToc: true,
78
+ wideFormat: true,
79
+ fullScreen: false
80
+ };
81
+ var RTL_LANGS = [
82
+ 'ar',
83
+ 'arc',
84
+ 'ckb',
85
+ 'dv',
86
+ 'fa',
87
+ 'ha',
88
+ 'he',
89
+ 'khw',
90
+ 'ks',
91
+ 'ps',
92
+ 'sd',
93
+ 'ur',
94
+ 'uz_AF',
95
+ 'yi'
96
+ ];
97
+ var constants_TextDirection = /*#__PURE__*/ function(TextDirection) {
98
+ TextDirection["RTL"] = "rtl";
99
+ TextDirection["LTR"] = "ltr";
100
+ return TextDirection;
101
+ }({});
102
+ var LINK_KEYS_LEADING_CONFIG = [
103
+ 'href'
104
+ ];
105
+ var LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [
106
+ 'src',
107
+ 'url',
108
+ 'href',
109
+ 'icon',
110
+ 'image',
111
+ 'desktop',
112
+ 'mobile',
113
+ 'tablet',
114
+ 'previewImg',
115
+ 'image',
116
+ 'avatar',
117
+ 'logo',
118
+ 'light',
119
+ 'dark'
120
+ ];
121
+ var LINK_KEYS = (0,_to_consumable_array._)(new Set((0,_to_consumable_array._)(LINK_KEYS_LEADING_CONFIG).concat((0,_to_consumable_array._)(LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG))));
122
+
123
+ ;// CONCATENATED MODULE: ./src/utils.ts
124
+
125
+
126
+ function isBrowser() {
127
+ return typeof document !== 'undefined';
128
+ }
129
+ function utils_updateThemeClassName(param) {
130
+ var theme = param.theme;
131
+ if (typeof document === 'undefined') {
132
+ return;
133
+ }
134
+ document.querySelectorAll('.g-root').forEach(function(el) {
135
+ el.classList.toggle('g-root_theme_light', theme === 'light');
136
+ el.classList.toggle('g-root_theme_dark', theme === 'dark');
137
+ });
138
+ }
139
+ function utils_updateRootClassName(states) {
140
+ if (!isBrowser()) {
141
+ return;
142
+ }
143
+ document.body.classList.add('g-root');
144
+ var toggle = function(name, state) {
145
+ return document.body.classList.toggle(name, Boolean(state));
146
+ };
147
+ Object.keys(states).forEach(function(state) {
148
+ switch(state){
149
+ case 'wideFormat':
150
+ toggle('dc-root_wide-format', states[state]);
151
+ break;
152
+ case 'focusSearch':
153
+ toggle('dc-root_focused-search', states[state]);
154
+ break;
155
+ case 'fullScreen':
156
+ toggle('dc-root_full-screen', states[state]);
157
+ break;
158
+ case 'landingPage':
159
+ toggle('dc-root_document-page', !states[state]);
160
+ toggle('dc-root_landing-page', states[state]);
161
+ break;
162
+ case 'mobileView':
163
+ toggle('mobile', states[state]);
164
+ toggle('desktop', !states[state]);
165
+ break;
166
+ }
167
+ });
168
+ }
169
+ function utils_getDirection(lang) {
170
+ var isRTL = RTL_LANGS.includes(lang);
171
+ return isRTL ? constants_TextDirection.RTL : constants_TextDirection.LTR;
172
+ }
173
+ var toBoolean = function(str) {
174
+ if (typeof str === 'boolean') {
175
+ return str;
176
+ }
177
+ return str ? str === 'true' : false;
178
+ };
179
+ function getSettings() {
180
+ var theme = getSetting('theme');
181
+ var textSize = getSetting('textSize');
182
+ var showMiniToc = getSetting('showMiniToc');
183
+ var wideFormat = getSetting('wideFormat');
184
+ var fullScreen = getSetting('fullScreen');
185
+ return {
186
+ theme: theme,
187
+ textSize: textSize,
188
+ showMiniToc: toBoolean(showMiniToc),
189
+ wideFormat: toBoolean(wideFormat),
190
+ fullScreen: toBoolean(fullScreen)
191
+ };
192
+ }
193
+ function getLandingPage(data) {
194
+ return (0,utils/* .getPageType */.C2)(data) === 'PAGE_CONSTRUCTOR';
195
+ }
196
+ function getMobileView() {
197
+ if (!isBrowser()) {
198
+ return false;
199
+ }
200
+ return document.body.clientWidth < MOBILE_VIEW_WIDTH_BREAKPOINT;
201
+ }
202
+ function getSetting(name) {
203
+ if (!isBrowser()) {
204
+ return DEFAULT_USER_SETTINGS[name];
205
+ }
206
+ try {
207
+ return sessionStorage.getItem(name) || DEFAULT_USER_SETTINGS[name];
208
+ } catch (e) {
209
+ return DEFAULT_USER_SETTINGS[name];
210
+ }
211
+ }
212
+ function utils_setSetting(name, value) {
213
+ if (!isBrowser()) {
214
+ return;
215
+ }
216
+ try {
217
+ sessionStorage.setItem(name, String(value));
218
+ } catch (e) {}
219
+ }
220
+ function isDetailsTag(el) {
221
+ return (el === null || el === void 0 ? void 0 : el.tagName.toLowerCase()) === 'details';
222
+ }
223
+ function isHeaderTag(el) {
224
+ return [
225
+ 'H1',
226
+ 'H2',
227
+ 'H3',
228
+ 'H4',
229
+ 'H5',
230
+ 'H6'
231
+ ].indexOf(el.tagName) !== -1;
232
+ }
233
+ /**
234
+ * Scrolls to the element.
235
+ * If the element is a heading - simply scrolls to it, since needed offset is already in css.
236
+ * If the element is of any other type - calculate the offset form the element position in heading and scroll to it.
237
+ * @param {HTMLElement} el
238
+ */ function scrollToElement(el) {
239
+ var offset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 200;
240
+ if (isInViewport(el)) {
241
+ return;
242
+ }
243
+ if (isHeaderTag(el)) {
244
+ // Header already includes the offset in css
245
+ // That puts it where we want it when it's scrolled to
246
+ el.scrollIntoView();
247
+ } else {
248
+ var elementPosition = el.getBoundingClientRect().top;
249
+ var offsetPosition = elementPosition + window.scrollY - offset;
250
+ window.scrollTo({
251
+ top: offsetPosition
252
+ });
253
+ }
254
+ }
255
+ function getLangPath(lang, href) {
256
+ var path = href.replace(/^https?:\/\/[^/]+/, '').replace(/^\/[a-z]{2}\//, '/');
257
+ return "".concat(lang).concat(path);
258
+ }
259
+ function isInViewport(el) {
260
+ var rect = el.getBoundingClientRect();
261
+ return rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight);
262
+ }
263
+ function scrollToHash() {
264
+ var hash = window.location.hash.substring(1);
265
+ if (!hash) {
266
+ return;
267
+ }
268
+ var element = document.getElementById(hash);
269
+ if (!element) {
270
+ return;
271
+ }
272
+ var node = element === null || element === void 0 ? void 0 : element.parentElement;
273
+ while(node){
274
+ if (isDetailsTag(node)) {
275
+ node.open = true;
276
+ }
277
+ node = node.parentElement;
278
+ }
279
+ element.focus();
280
+ setTimeout(function() {
281
+ scrollToElement(element);
282
+ }, 10);
283
+ }
284
+
285
+ // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_define_property.js
286
+ var _define_property = __webpack_require__(27412);
57
287
  // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_sliced_to_array.js + 3 modules
58
288
  var esm_sliced_to_array = __webpack_require__(24460);
59
- ;// CONCATENATED MODULE: ./src/components/index.ts
289
+ ;// CONCATENATED MODULE: ./src/components/App/useSettings.ts
60
290
 
61
291
 
62
292
 
63
293
 
64
- ;// CONCATENATED MODULE: ./src/hooks/useLang.ts
65
294
 
295
+ var capitalize = function(string) {
296
+ return string.replace(/^./, function(ch) {
297
+ return ch.toUpperCase();
298
+ });
299
+ };
300
+ function useSettings_useSettings() {
301
+ var settings = getSettings();
302
+ var theme = useSetting('theme', settings);
303
+ var textSize = useSetting('textSize', settings);
304
+ var wideFormat = useSetting('wideFormat', settings);
305
+ var fullScreen = useSetting('fullScreen', settings);
306
+ var showMiniToc = useSetting('showMiniToc', settings);
307
+ var controls = (0,react.useMemo)(function() {
308
+ return (0,_object_spread._)({}, theme, textSize, wideFormat, showMiniToc, fullScreen);
309
+ }, [
310
+ theme,
311
+ textSize,
312
+ wideFormat,
313
+ showMiniToc,
314
+ fullScreen
315
+ ]);
316
+ return controls;
317
+ }
318
+ function useSetting(name, settings) {
319
+ var _useState = (0,esm_sliced_to_array._)((0,react.useState)(settings[name]), 2), setting = _useState[0], setSetting = _useState[1];
320
+ var onChangeSetting = (0,react.useMemo)(function() {
321
+ return withSavingSetting(name, setSetting);
322
+ }, [
323
+ name,
324
+ setSetting
325
+ ]);
326
+ return (0,react.useMemo)(function() {
327
+ var _obj;
328
+ return _obj = {}, (0,_define_property._)(_obj, name, setting), (0,_define_property._)(_obj, 'onChange' + capitalize(name), onChangeSetting), _obj;
329
+ }, [
330
+ name,
331
+ setting,
332
+ onChangeSetting
333
+ ]);
334
+ }
335
+ function withSavingSetting(settingName, onChange) {
336
+ return function(value) {
337
+ utils_setSetting(settingName, value);
338
+ onChange(value);
339
+ };
340
+ }
66
341
 
67
- var LangContext = (0,react.createContext)(models/* .Lang.En */.Uo.En);
68
- LangContext.displayName = 'Lang';
69
- var LangProvider = LangContext.Provider;
70
- function useLang() {
71
- return (0,react.useContext)(LangContext);
342
+ ;// CONCATENATED MODULE: ./src/components/App/useMobile.ts
343
+
344
+
345
+
346
+ function useMobile_useMobile() {
347
+ var _useState = (0,esm_sliced_to_array._)((0,react.useState)(getMobileView()), 2), mobileView = _useState[0], setMobileView = _useState[1];
348
+ var onResizeHandler = (0,react.useCallback)(function() {
349
+ setMobileView(getMobileView());
350
+ }, []);
351
+ (0,react.useEffect)(onResizeHandler, [
352
+ onResizeHandler
353
+ ]);
354
+ (0,react.useEffect)(function() {
355
+ window.addEventListener('resize', onResizeHandler);
356
+ return function() {
357
+ return window.removeEventListener('resize', onResizeHandler);
358
+ };
359
+ }, [
360
+ onResizeHandler
361
+ ]);
362
+ return mobileView;
72
363
  }
73
364
 
365
+ // EXTERNAL MODULE: ./node_modules/bem-cn-lite/lib/index.js
366
+ var lib = __webpack_require__(22853);
367
+ ;// CONCATENATED MODULE: ./src/components/index.ts
368
+
369
+
370
+
371
+
74
372
  // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_async_to_generator.js
75
373
  var _async_to_generator = __webpack_require__(76150);
76
374
  // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_class_call_check.js
77
375
  var _class_call_check = __webpack_require__(43830);
78
376
  // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_create_class.js
79
377
  var _create_class = __webpack_require__(52062);
80
- // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_define_property.js
81
- var _define_property = __webpack_require__(27412);
82
378
  // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_instanceof.js
83
379
  var _instanceof = __webpack_require__(41196);
84
380
  // EXTERNAL MODULE: ./node_modules/tslib/tslib.es6.mjs
@@ -317,9 +613,9 @@ function useProvider_useProvider() {
317
613
  return provider;
318
614
  }
319
615
 
320
- ;// CONCATENATED MODULE: ./src/components/Search/Search.scss
616
+ ;// CONCATENATED MODULE: ./src/components/Search/Page.scss
321
617
 
322
- ;// CONCATENATED MODULE: ./src/components/Search/Search.tsx
618
+ ;// CONCATENATED MODULE: ./src/components/Search/Page.tsx
323
619
 
324
620
 
325
621
 
@@ -355,7 +651,7 @@ function formatResults(searchResults) {
355
651
  });
356
652
  }
357
653
  var ITEMS_PER_PAGE = 10;
358
- var Search = function() {
654
+ var Page_Page = function() {
359
655
  var provider = useProvider();
360
656
  var router = useRouter();
361
657
  var _useState = _sliced_to_array(useState(''), 2), query = _useState[0], setQuery = _useState[1];
@@ -401,259 +697,92 @@ var Search = function() {
401
697
  page,
402
698
  provider
403
699
  ]);
404
- var handlePageChange = useCallback(function(newPage) {
405
- setUrlParams(query, newPage);
406
- setPage(newPage);
407
- }, [
408
- query
409
- ]);
410
- var handleQueryChange = useCallback(function(newQuery) {
411
- setUrlParams(newQuery, 1);
412
- setQuery(newQuery);
413
- setPage(1);
414
- }, []);
415
- return /*#__PURE__*/ _jsx("div", {
416
- className: b(),
417
- children: /*#__PURE__*/ _jsx(SearchPage, {
418
- query: query,
419
- items: results,
420
- page: page,
421
- totalItems: total,
422
- onPageChange: handlePageChange,
423
- onSubmit: handleQueryChange,
424
- loading: loading
425
- })
426
- });
427
- };
428
-
429
- ;// CONCATENATED MODULE: ./src/components/Search/index.ts
430
-
431
- var SearchContext = (0,react.createContext)(null);
432
- SearchContext.displayName = 'SearchContext';
433
- var Search_SearchProvider = SearchContext.Provider;
434
-
435
- function useSearch() {
436
- return (0,react.useContext)(SearchContext);
437
- }
438
-
439
- // EXTERNAL MODULE: ./node_modules/@diplodoc/components/build/esm/utils/index.js + 63 modules
440
- var utils = __webpack_require__(20935);
441
- // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_to_consumable_array.js + 3 modules
442
- var _to_consumable_array = __webpack_require__(55210);
443
- ;// CONCATENATED MODULE: ./src/constants.ts
444
-
445
-
446
- var HEADER_HEIGHT = 64;
447
- var MOBILE_VIEW_WIDTH_BREAKPOINT = 769;
448
- var DEFAULT_USER_SETTINGS = {
449
- theme: models/* .Theme.Light */.Q2.Light,
450
- textSize: models/* .TextSizes.M */.tF.M,
451
- showMiniToc: true,
452
- wideFormat: true,
453
- fullScreen: false
454
- };
455
- var RTL_LANGS = [
456
- 'ar',
457
- 'arc',
458
- 'ckb',
459
- 'dv',
460
- 'fa',
461
- 'ha',
462
- 'he',
463
- 'khw',
464
- 'ks',
465
- 'ps',
466
- 'sd',
467
- 'ur',
468
- 'uz_AF',
469
- 'yi'
470
- ];
471
- var constants_TextDirection = /*#__PURE__*/ function(TextDirection) {
472
- TextDirection["RTL"] = "rtl";
473
- TextDirection["LTR"] = "ltr";
474
- return TextDirection;
475
- }({});
476
- var LINK_KEYS_LEADING_CONFIG = [
477
- 'href'
478
- ];
479
- var LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG = [
480
- 'src',
481
- 'url',
482
- 'href',
483
- 'icon',
484
- 'image',
485
- 'desktop',
486
- 'mobile',
487
- 'tablet',
488
- 'previewImg',
489
- 'image',
490
- 'avatar',
491
- 'logo',
492
- 'light',
493
- 'dark'
494
- ];
495
- var LINK_KEYS = (0,_to_consumable_array._)(new Set((0,_to_consumable_array._)(LINK_KEYS_LEADING_CONFIG).concat((0,_to_consumable_array._)(LINK_KEYS_PAGE_CONSTRUCTOR_CONFIG))));
496
-
497
- ;// CONCATENATED MODULE: ./src/utils.ts
498
-
499
-
500
- function isBrowser() {
501
- return typeof document !== 'undefined';
502
- }
503
- function updateThemeClassName(param) {
504
- var theme = param.theme;
505
- if (typeof document === 'undefined') {
506
- return;
507
- }
508
- document.querySelectorAll('.g-root').forEach(function(el) {
509
- el.classList.toggle('g-root_theme_light', theme === 'light');
510
- el.classList.toggle('g-root_theme_dark', theme === 'dark');
511
- });
512
- }
513
- function updateRootClassName(states) {
514
- if (!isBrowser()) {
515
- return;
516
- }
517
- document.body.classList.add('g-root');
518
- var toggle = function(name, state) {
519
- return document.body.classList.toggle(name, Boolean(state));
520
- };
521
- Object.keys(states).forEach(function(state) {
522
- switch(state){
523
- case 'wideFormat':
524
- toggle('dc-root_wide-format', states[state]);
525
- break;
526
- case 'focusSearch':
527
- toggle('dc-root_focused-search', states[state]);
528
- break;
529
- case 'fullScreen':
530
- toggle('dc-root_full-screen', states[state]);
531
- break;
532
- case 'landingPage':
533
- toggle('dc-root_document-page', !states[state]);
534
- toggle('dc-root_landing-page', states[state]);
535
- break;
536
- case 'mobileView':
537
- toggle('mobile', states[state]);
538
- toggle('desktop', !states[state]);
539
- break;
540
- }
700
+ var handlePageChange = useCallback(function(newPage) {
701
+ setUrlParams(query, newPage);
702
+ setPage(newPage);
703
+ }, [
704
+ query
705
+ ]);
706
+ var handleQueryChange = useCallback(function(newQuery) {
707
+ setUrlParams(newQuery, 1);
708
+ setQuery(newQuery);
709
+ setPage(1);
710
+ }, []);
711
+ return /*#__PURE__*/ _jsx("div", {
712
+ className: b(),
713
+ children: /*#__PURE__*/ _jsx(SearchPage, {
714
+ query: query,
715
+ items: results,
716
+ page: page,
717
+ totalItems: total,
718
+ onPageChange: handlePageChange,
719
+ onSubmit: handleQueryChange,
720
+ loading: loading
721
+ })
541
722
  });
542
- }
543
- function getDirection(lang) {
544
- var isRTL = RTL_LANGS.includes(lang);
545
- return isRTL ? constants_TextDirection.RTL : constants_TextDirection.LTR;
546
- }
547
- var toBoolean = function(str) {
548
- if (typeof str === 'boolean') {
549
- return str;
550
- }
551
- return str ? str === 'true' : false;
552
723
  };
553
- function getSettings() {
554
- var theme = getSetting('theme');
555
- var textSize = getSetting('textSize');
556
- var showMiniToc = getSetting('showMiniToc');
557
- var wideFormat = getSetting('wideFormat');
558
- var fullScreen = getSetting('fullScreen');
559
- return {
560
- theme: theme,
561
- textSize: textSize,
562
- showMiniToc: toBoolean(showMiniToc),
563
- wideFormat: toBoolean(wideFormat),
564
- fullScreen: toBoolean(fullScreen)
724
+
725
+ ;// CONCATENATED MODULE: ./src/components/Search/index.tsx
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+ var SearchContext = /*#__PURE__*/ (0,react.createContext)(null);
737
+ SearchContext.displayName = 'SearchContext';
738
+ var Search_SearchProvider = SearchContext.Provider;
739
+ function Search(props) {
740
+ var data = props.data, url = props.url;
741
+ var searchData = data.search;
742
+ var lang = (searchData === null || searchData === void 0 ? void 0 : searchData.lang) || Lang.En;
743
+ var settings = useSettings();
744
+ var mobileView = useMobile();
745
+ var fixedLang = SUPPORTED_LANGS.includes(lang) ? lang : Lang.En;
746
+ var direction = getDirection(fixedLang);
747
+ configure({
748
+ lang: fixedLang,
749
+ localeCode: fixedLang
750
+ });
751
+ var routerConfig = {
752
+ pathname: url.pathname,
753
+ depth: 3
565
754
  };
566
- }
567
- function getLandingPage(data) {
568
- return (0,utils/* .getPageType */.C2)(data) === 'PAGE_CONSTRUCTOR';
569
- }
570
- function getMobileView() {
571
- if (!isBrowser()) {
572
- return false;
573
- }
574
- return document.body.clientWidth < MOBILE_VIEW_WIDTH_BREAKPOINT;
575
- }
576
- function getSetting(name) {
577
- if (!isBrowser()) {
578
- return DEFAULT_USER_SETTINGS[name];
579
- }
580
- try {
581
- return sessionStorage.getItem(name) || DEFAULT_USER_SETTINGS[name];
582
- } catch (e) {
583
- return DEFAULT_USER_SETTINGS[name];
584
- }
585
- }
586
- function utils_setSetting(name, value) {
587
- if (!isBrowser()) {
588
- return;
589
- }
590
- try {
591
- sessionStorage.setItem(name, String(value));
592
- } catch (e) {}
593
- }
594
- function isDetailsTag(el) {
595
- return (el === null || el === void 0 ? void 0 : el.tagName.toLowerCase()) === 'details';
596
- }
597
- function isHeaderTag(el) {
598
- return [
599
- 'H1',
600
- 'H2',
601
- 'H3',
602
- 'H4',
603
- 'H5',
604
- 'H6'
605
- ].indexOf(el.tagName) !== -1;
606
- }
607
- /**
608
- * Scrolls to the element.
609
- * If the element is a heading - simply scrolls to it, since needed offset is already in css.
610
- * If the element is of any other type - calculate the offset form the element position in heading and scroll to it.
611
- * @param {HTMLElement} el
612
- */ function scrollToElement(el) {
613
- var offset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 200;
614
- if (isInViewport(el)) {
615
- return;
616
- }
617
- if (isHeaderTag(el)) {
618
- // Header already includes the offset in css
619
- // That puts it where we want it when it's scrolled to
620
- el.scrollIntoView();
621
- } else {
622
- var elementPosition = el.getBoundingClientRect().top;
623
- var offsetPosition = elementPosition + window.scrollY - offset;
624
- window.scrollTo({
625
- top: offsetPosition
755
+ var theme = settings.theme, wideFormat = settings.wideFormat;
756
+ useEffect(function() {
757
+ updateRootClassName({
758
+ mobileView: mobileView,
759
+ wideFormat: wideFormat
626
760
  });
627
- }
628
- }
629
- function getLangPath(lang, href) {
630
- var path = href.replace(/^https?:\/\/[^/]+/, '').replace(/^\/[a-z]{2}\//, '/');
631
- return "".concat(lang).concat(path);
632
- }
633
- function isInViewport(el) {
634
- var rect = el.getBoundingClientRect();
635
- return rect.top >= 0 && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight);
761
+ updateThemeClassName({
762
+ theme: theme
763
+ });
764
+ }, [
765
+ theme,
766
+ mobileView,
767
+ wideFormat
768
+ ]);
769
+ return /*#__PURE__*/ _jsx(ThemeProvider, {
770
+ theme: theme,
771
+ direction: direction,
772
+ children: /*#__PURE__*/ _jsx(LangProvider, {
773
+ value: fixedLang,
774
+ children: /*#__PURE__*/ _jsx(RouterProvider, {
775
+ value: routerConfig,
776
+ children: /*#__PURE__*/ _jsx(Search_SearchProvider, {
777
+ value: searchData,
778
+ children: /*#__PURE__*/ _jsx(Page, {})
779
+ })
780
+ })
781
+ })
782
+ });
636
783
  }
637
- function scrollToHash() {
638
- var hash = window.location.hash.substring(1);
639
- if (!hash) {
640
- return;
641
- }
642
- var element = document.getElementById(hash);
643
- if (!element) {
644
- return;
645
- }
646
- var node = element === null || element === void 0 ? void 0 : element.parentElement;
647
- while(node){
648
- if (isDetailsTag(node)) {
649
- node.open = true;
650
- }
651
- node = node.parentElement;
652
- }
653
- element.focus();
654
- setTimeout(function() {
655
- scrollToElement(element);
656
- }, 10);
784
+ function useSearch() {
785
+ return (0,react.useContext)(SearchContext);
657
786
  }
658
787
 
659
788
  // EXTERNAL MODULE: ./src/interceptors/leading-page-links.js
@@ -855,12 +984,12 @@ function Suggest() {
855
984
  var suggest = (0,react.useRef)(null);
856
985
  var isSearchHidden = (0,useInterface/* .useInterface */.I)('search');
857
986
  var onFocus = (0,react.useCallback)(function() {
858
- updateRootClassName({
987
+ utils_updateRootClassName({
859
988
  focusSearch: true
860
989
  });
861
990
  }, []);
862
991
  var onBlur = (0,react.useCallback)(function() {
863
- updateRootClassName({
992
+ utils_updateRootClassName({
864
993
  focusSearch: false
865
994
  });
866
995
  setTimeout(function() {
@@ -894,7 +1023,7 @@ var Controls = __webpack_require__(80208);
894
1023
 
895
1024
 
896
1025
  var HeaderControls = /*#__PURE__*/ (0,react.memo)(function(param) {
897
- var mobileView = param.mobileView, theme = param.theme, onChangeTheme = param.onChangeTheme, textSize = param.textSize, onChangeTextSize = param.onChangeTextSize, wideFormat = param.wideFormat, onChangeWideFormat = param.onChangeWideFormat, showMiniToc = param.showMiniToc, onChangeShowMiniToc = param.onChangeShowMiniToc, lang = param.lang, langs = param.langs, onChangeLang = param.onChangeLang;
1026
+ var mobileView = param.mobileView, theme = param.theme, onChangeTheme = param.onChangeTheme, textSize = param.textSize, onChangeTextSize = param.onChangeTextSize, wideFormat = param.wideFormat, onChangeWideFormat = param.onChangeWideFormat, showMiniToc = param.showMiniToc, onChangeShowMiniToc = param.onChangeShowMiniToc, lang = param.lang, langs = param.langs, onChangeLang = param.onChangeLang, _param_availableLangs = param.availableLangs, availableLangs = _param_availableLangs === void 0 ? [] : _param_availableLangs;
898
1027
  return /*#__PURE__*/ (0,jsx_runtime.jsx)(ControlsLayout/* .ControlsLayout */.C, {
899
1028
  controlClassName: 'Control',
900
1029
  controlSize: models/* .ControlSizes.L */.$D.L,
@@ -912,7 +1041,8 @@ var HeaderControls = /*#__PURE__*/ (0,react.memo)(function(param) {
912
1041
  onChangeTextSize: onChangeTextSize,
913
1042
  lang: lang,
914
1043
  langs: langs,
915
- onChangeLang: onChangeLang
1044
+ onChangeLang: onChangeLang,
1045
+ availableLangs: availableLangs
916
1046
  })
917
1047
  });
918
1048
  });
@@ -1046,7 +1176,7 @@ var useNavigation = function(data, controls, CustomControls, CustomSuggest, view
1046
1176
 
1047
1177
 
1048
1178
 
1049
- function Page_Page(_param) {
1179
+ function App_Page_Page(_param) {
1050
1180
  var data = _param.data, pageProps = (0,_object_without_properties._)(_param, [
1051
1181
  "data"
1052
1182
  ]);
@@ -1075,7 +1205,7 @@ function LegacyNavPage(param) {
1075
1205
  }, [
1076
1206
  content
1077
1207
  ]);
1078
- return /*#__PURE__*/ (0,jsx_runtime.jsx)(Page_Page, (0,_object_spread_props._)((0,_object_spread._)({
1208
+ return /*#__PURE__*/ (0,jsx_runtime.jsx)(App_Page_Page, (0,_object_spread_props._)((0,_object_spread._)({
1079
1209
  data: data,
1080
1210
  headerHeight: 0
1081
1211
  }, props, controls), {
@@ -1107,7 +1237,7 @@ function RichNavPage(param) {
1107
1237
  ]);
1108
1238
  var navigation = useNavigation(data, controls, CustomControls, CustomSuggest);
1109
1239
  var CustomPage = (0,react.useCallback)(function() {
1110
- return /*#__PURE__*/ (0,jsx_runtime.jsx)(Page_Page, (0,_object_spread_props._)((0,_object_spread._)({
1240
+ return /*#__PURE__*/ (0,jsx_runtime.jsx)(App_Page_Page, (0,_object_spread_props._)((0,_object_spread._)({
1111
1241
  data: data,
1112
1242
  headerHeight: fullScreen ? 0 : 64
1113
1243
  }, props, navigation.withControls ? filterControls(controls, [
@@ -1230,80 +1360,56 @@ function useLangs(param) {
1230
1360
  ]);
1231
1361
  }
1232
1362
 
1233
- ;// CONCATENATED MODULE: ./src/components/App/useSettings.ts
1234
-
1363
+ ;// CONCATENATED MODULE: ./src/components/App/useAvailableLangs.ts
1235
1364
 
1236
1365
 
1237
1366
 
1238
-
1239
- var capitalize = function(string) {
1240
- return string.replace(/^./, function(ch) {
1241
- return ch.toUpperCase();
1242
- });
1243
- };
1244
- function useSettings() {
1245
- var settings = getSettings();
1246
- var theme = useSetting('theme', settings);
1247
- var textSize = useSetting('textSize', settings);
1248
- var wideFormat = useSetting('wideFormat', settings);
1249
- var fullScreen = useSetting('fullScreen', settings);
1250
- var showMiniToc = useSetting('showMiniToc', settings);
1251
- var controls = (0,react.useMemo)(function() {
1252
- return (0,_object_spread._)({}, theme, textSize, wideFormat, showMiniToc, fullScreen);
1253
- }, [
1254
- theme,
1255
- textSize,
1256
- wideFormat,
1257
- showMiniToc,
1258
- fullScreen
1259
- ]);
1260
- return controls;
1261
- }
1262
- function useSetting(name, settings) {
1263
- var _useState = (0,esm_sliced_to_array._)((0,react.useState)(settings[name]), 2), setting = _useState[0], setSetting = _useState[1];
1264
- var onChangeSetting = (0,react.useMemo)(function() {
1265
- return withSavingSetting(name, setSetting);
1266
- }, [
1267
- name,
1268
- setSetting
1269
- ]);
1367
+ function useAvailableLangs(data, langs) {
1270
1368
  return (0,react.useMemo)(function() {
1271
- var _obj;
1272
- return _obj = {}, (0,_define_property._)(_obj, name, setting), (0,_define_property._)(_obj, 'onChange' + capitalize(name), onChangeSetting), _obj;
1273
- }, [
1274
- name,
1275
- setting,
1276
- onChangeSetting
1277
- ]);
1278
- }
1279
- function withSavingSetting(settingName, onChange) {
1280
- return function(value) {
1281
- utils_setSetting(settingName, value);
1282
- onChange(value);
1283
- };
1284
- }
1285
-
1286
- ;// CONCATENATED MODULE: ./src/components/App/useMobile.ts
1287
-
1288
-
1289
-
1290
- function useMobile() {
1291
- var _useState = (0,esm_sliced_to_array._)((0,react.useState)(getMobileView()), 2), mobileView = _useState[0], setMobileView = _useState[1];
1292
- var onResizeHandler = (0,react.useCallback)(function() {
1293
- setMobileView(getMobileView());
1294
- }, []);
1295
- (0,react.useEffect)(onResizeHandler, [
1296
- onResizeHandler
1297
- ]);
1298
- (0,react.useEffect)(function() {
1299
- window.addEventListener('resize', onResizeHandler);
1300
- return function() {
1301
- return window.removeEventListener('resize', onResizeHandler);
1302
- };
1369
+ if (!('meta' in data)) {
1370
+ return [];
1371
+ }
1372
+ var _data_meta = data.meta, canonical = _data_meta.canonical, _data_meta_alternate = _data_meta.alternate, alternate = _data_meta_alternate === void 0 ? [] : _data_meta_alternate;
1373
+ if (!canonical) {
1374
+ return [];
1375
+ }
1376
+ var langsSet = new Set();
1377
+ var _canonical_split = (0,esm_sliced_to_array._)(canonical.split('/'), 1), canonicalLang = _canonical_split[0];
1378
+ if (langs.includes(canonicalLang)) {
1379
+ langsSet.add(canonicalLang);
1380
+ }
1381
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1382
+ try {
1383
+ for(var _iterator = alternate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1384
+ var alt = _step.value;
1385
+ var href = alt.href;
1386
+ if (!href || (0,utils/* .isExternalHref */.$2)(href)) {
1387
+ continue;
1388
+ }
1389
+ var _href_split = (0,esm_sliced_to_array._)(href.split('/'), 1), altLang = _href_split[0];
1390
+ if (langs.includes(altLang)) {
1391
+ langsSet.add(altLang);
1392
+ }
1393
+ }
1394
+ } catch (err) {
1395
+ _didIteratorError = true;
1396
+ _iteratorError = err;
1397
+ } finally{
1398
+ try {
1399
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1400
+ _iterator.return();
1401
+ }
1402
+ } finally{
1403
+ if (_didIteratorError) {
1404
+ throw _iteratorError;
1405
+ }
1406
+ }
1407
+ }
1408
+ return Array.from(langsSet);
1303
1409
  }, [
1304
- onResizeHandler
1410
+ data,
1411
+ langs
1305
1412
  ]);
1306
- return mobileView;
1307
1413
  }
1308
1414
 
1309
1415
  // EXTERNAL MODULE: ./node_modules/@diplodoc/mdx-extension/build/esm/hooks/useMdxSsr.js + 9 modules
@@ -1363,15 +1469,17 @@ var withMdxInit = function(param) {
1363
1469
 
1364
1470
 
1365
1471
 
1472
+
1366
1473
  function hasNavigation(data) {
1367
1474
  return Boolean(data.toc.navigation);
1368
1475
  }
1369
1476
  function App(props) {
1370
1477
  var _analytics_gtm, _analytics_gtm1;
1371
- var data = props.data, router = props.router, lang = props.lang, search = props.search, analytics = props.analytics, viewerInterface = props.viewerInterface;
1372
- var settings = useSettings();
1478
+ var data = props.data, router = props.router, lang = props.lang, langs = props.langs, search = props.search, analytics = props.analytics, viewerInterface = props.viewerInterface;
1479
+ var settings = useSettings_useSettings();
1373
1480
  var langData = useLangs(props);
1374
- var mobileView = useMobile();
1481
+ var mobileView = useMobile_useMobile();
1482
+ var availableLangs = useAvailableLangs(data, langs);
1375
1483
  var fixedLang = constants/* .SUPPORTED_LANGS.includes */.aP.includes(lang) ? lang : models/* .Lang.En */.Uo.En;
1376
1484
  (0,esm_config/* .configure */.jQ)({
1377
1485
  lang: fixedLang,
@@ -1411,23 +1519,25 @@ function App(props) {
1411
1519
  ]);
1412
1520
  var controls = (0,react.useMemo)(function() {
1413
1521
  return (0,_object_spread_props._)((0,_object_spread._)({}, settings, langData), {
1414
- mobileView: mobileView
1522
+ mobileView: mobileView,
1523
+ availableLangs: availableLangs
1415
1524
  });
1416
1525
  }, [
1417
1526
  langData,
1418
1527
  settings,
1419
- mobileView
1528
+ mobileView,
1529
+ availableLangs
1420
1530
  ]);
1421
- var direction = getDirection(lang);
1531
+ var direction = utils_getDirection(lang);
1422
1532
  var landingPage = getLandingPage(data);
1423
1533
  (0,react.useEffect)(function() {
1424
- updateRootClassName({
1534
+ utils_updateRootClassName({
1425
1535
  mobileView: mobileView,
1426
1536
  wideFormat: wideFormat,
1427
1537
  fullScreen: fullScreen,
1428
1538
  landingPage: landingPage
1429
1539
  });
1430
- updateThemeClassName({
1540
+ utils_updateThemeClassName({
1431
1541
  theme: theme
1432
1542
  });
1433
1543
  scrollToHash();
@@ -1440,12 +1550,12 @@ function App(props) {
1440
1550
  ]);
1441
1551
  return /*#__PURE__*/ (0,jsx_runtime.jsx)("div", {
1442
1552
  className: "App",
1443
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(ThemeProvider/* .ThemeProvider */.f, {
1553
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(theme_ThemeProvider/* .ThemeProvider */.f, {
1444
1554
  theme: theme,
1445
1555
  direction: direction,
1446
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(LangProvider, {
1556
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(useLang_LangProvider, {
1447
1557
  value: lang,
1448
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(RouterProvider, {
1558
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Router_RouterProvider, {
1449
1559
  value: router,
1450
1560
  children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Search_SearchProvider, {
1451
1561
  value: search,
@@ -1798,7 +1908,7 @@ __webpack_require__.m = __webpack_modules__;
1798
1908
  __webpack_require__.x = () => {
1799
1909
  // Load entry module and return exports
1800
1910
  // This entry module depends on other loaded chunks and execution need to be delayed
1801
- var __webpack_exports__ = __webpack_require__.O(undefined, ["966", "971"], function() { return __webpack_require__(11301) });
1911
+ var __webpack_exports__ = __webpack_require__.O(undefined, ["966", "971"], function() { return __webpack_require__(85978) });
1802
1912
  __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
1803
1913
  return __webpack_exports__
1804
1914
  };