@diplodoc/client 3.11.0 → 4.0.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 +25 -0
  2. package/build/client/app-a0838f915fcfe0db.js +2 -0
  3. package/build/client/app-a0838f915fcfe0db.js.map +1 -0
  4. package/build/client/manifest.json +8 -8
  5. package/build/client/search-7dc3bfe50645287d.js +2 -0
  6. package/build/client/search-7dc3bfe50645287d.js.map +1 -0
  7. package/build/client/{vendor-9aa0609c11103fb0.rtl.css → vendor-4e1799a17201afc3.rtl.css} +2 -2
  8. package/build/client/{vendor-bc3eb63ddaa9dd73.js → vendor-6e21eae2c11cd197.js} +4 -4
  9. package/build/client/vendor-6e21eae2c11cd197.js.map +1 -0
  10. package/build/client/{vendor-5c42c2d82fe19c6e.css → vendor-fe111bf380adc637.css} +3 -3
  11. package/build/client/vendor-fe111bf380adc637.css.map +1 -0
  12. package/build/components/App/Page.d.ts +2 -9
  13. package/build/components/App/index.d.ts +1 -1
  14. package/build/components/App/useAvailableLangs.d.ts +3 -0
  15. package/build/components/ConstructorPage/useNavigation.d.ts +3 -1
  16. package/build/components/HeaderControls/index.d.ts +2 -1
  17. package/build/server/app.js +99 -90
  18. package/build/server/app.js.map +1 -1
  19. package/build/server/vendor.js +48 -68
  20. package/build/server/vendor.js.map +1 -1
  21. package/package.json +2 -2
  22. package/rspack/config.ts +1 -1
  23. package/rspack/rtl-css.ts +10 -23
  24. package/build/client/app-9912bc5fc2ea22c6.js +0 -2
  25. package/build/client/app-9912bc5fc2ea22c6.js.map +0 -1
  26. package/build/client/search-c72f8c6ef62ff42a.js +0 -2
  27. package/build/client/search-c72f8c6ef62ff42a.js.map +0 -1
  28. package/build/client/vendor-5c42c2d82fe19c6e.css.map +0 -1
  29. package/build/client/vendor-bc3eb63ddaa9dd73.js.map +0 -1
@@ -1,14 +1,8 @@
1
- import type { PropsWithChildren } from 'react';
2
- import type { AppProps, PageData, WithNavigation } from './index';
1
+ import type { AppProps, PageData } from './index';
3
2
  import type { Settings } from '../../utils';
4
3
  import type { DocBasePageData } from '@diplodoc/components';
5
4
  import type { Props as HeaderControlsProps } from '../HeaderControls';
6
5
  import React from 'react';
7
- type Props = PropsWithChildren<Partial<AppProps> & {
8
- data: PageData;
9
- headerHeight: number;
10
- }>;
11
- export declare function Page({ data, ...pageProps }: Props): React.JSX.Element;
12
6
  type PageProps<T extends {} = {}> = {
13
7
  data: DocBasePageData<T> & PageData;
14
8
  props: {
@@ -16,6 +10,5 @@ type PageProps<T extends {} = {}> = {
16
10
  } & Settings;
17
11
  controls: HeaderControlsProps;
18
12
  };
19
- export declare function LegacyNavPage({ data, props, controls }: PageProps): React.JSX.Element;
20
- export declare function RichNavPage({ data, props, controls }: PageProps<WithNavigation>): React.JSX.Element;
13
+ export declare function Page({ data, props, controls }: PageProps): React.JSX.Element;
21
14
  export {};
@@ -22,7 +22,7 @@ export interface AppProps {
22
22
  viewerInterface?: Record<string, boolean>;
23
23
  }
24
24
  export type WithNavigation = {
25
- navigation: NavigationData;
25
+ navigation?: NavigationData;
26
26
  };
27
27
  export type DocContentPageData = DocContentPageDataBase<PageContent>;
28
28
  export type PageData = DocPageData | DocLeadingPageData | DocContentPageData;
@@ -0,0 +1,3 @@
1
+ import type { PageData } from './index';
2
+ import { type Lang } from '@diplodoc/components';
3
+ export declare function useAvailableLangs(data: PageData, langs: (`${Lang}` | Lang)[]): Lang[];
@@ -16,6 +16,8 @@ export declare const useNavigation: (data: DocBasePageData<WithNavigation>, cont
16
16
  renderNavigation: () => React.JSX.Element;
17
17
  logo: {
18
18
  icon: import("@gravity-ui/page-constructor").ImageProps;
19
+ } | {
20
+ icon: import("@gravity-ui/page-constructor").ImageProps;
19
21
  text?: string;
20
22
  url?: string;
21
23
  urlTitle?: string;
@@ -28,6 +30,6 @@ export declare const useNavigation: (data: DocBasePageData<WithNavigation>, cont
28
30
  alt?: string;
29
31
  light: import("@gravity-ui/page-constructor").NavigationLogoData;
30
32
  };
31
- };
33
+ } | undefined;
32
34
  withControls: boolean;
33
35
  };
@@ -1,4 +1,4 @@
1
- import type { Lang, TextSizes, Theme } from '@diplodoc/components';
1
+ import type { AvailableLangs, Lang, TextSizes, Theme } from '@diplodoc/components';
2
2
  import React from 'react';
3
3
  type OnChangeCallback = (value: any) => void;
4
4
  export type Props = {
@@ -14,6 +14,7 @@ export type Props = {
14
14
  lang: Lang | `${Lang}`;
15
15
  langs: (Lang | `${Lang}`)[];
16
16
  onChangeLang?: (lang: `${Lang}` | Lang) => void;
17
+ availableLangs?: AvailableLangs;
17
18
  };
18
19
  export declare const HeaderControls: React.NamedExoticComponent<Props>;
19
20
  export {};
@@ -1,6 +1,6 @@
1
1
  (() => { // webpackBootstrap
2
2
  var __webpack_modules__ = ({
3
- 13543: (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__);
@@ -787,8 +787,6 @@ function useSearch() {
787
787
 
788
788
  // EXTERNAL MODULE: ./src/interceptors/leading-page-links.js
789
789
  var leading_page_links = __webpack_require__(90101);
790
- // EXTERNAL MODULE: ./node_modules/@swc/helpers/esm/_object_without_properties.js + 1 modules
791
- var _object_without_properties = __webpack_require__(98848);
792
790
  // EXTERNAL MODULE: ./node_modules/@gravity-ui/page-constructor/build/esm/containers/PageConstructor/Provider.js
793
791
  var Provider = __webpack_require__(77725);
794
792
  // EXTERNAL MODULE: ./node_modules/@gravity-ui/page-constructor/build/esm/containers/PageConstructor/PageConstructor.js + 18 modules
@@ -1023,7 +1021,7 @@ var Controls = __webpack_require__(80208);
1023
1021
 
1024
1022
 
1025
1023
  var HeaderControls = /*#__PURE__*/ (0,react.memo)(function(param) {
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;
1024
+ 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;
1027
1025
  return /*#__PURE__*/ (0,jsx_runtime.jsx)(ControlsLayout/* .ControlsLayout */.C, {
1028
1026
  controlClassName: 'Control',
1029
1027
  controlSize: models/* .ControlSizes.L */.$D.L,
@@ -1041,7 +1039,8 @@ var HeaderControls = /*#__PURE__*/ (0,react.memo)(function(param) {
1041
1039
  onChangeTextSize: onChangeTextSize,
1042
1040
  lang: lang,
1043
1041
  langs: langs,
1044
- onChangeLang: onChangeLang
1042
+ onChangeLang: onChangeLang,
1043
+ availableLangs: availableLangs
1045
1044
  })
1046
1045
  });
1047
1046
  });
@@ -1066,11 +1065,15 @@ function findItem(right, left, type) {
1066
1065
  return item.type === type;
1067
1066
  });
1068
1067
  }
1068
+ var EmptyNavigation = {};
1069
+ var EmptyHeader = {};
1070
+ var EmptyLeftItems = [];
1071
+ var EmptyRightItems = [];
1069
1072
  var useNavigation = function(data, controls, CustomControls, CustomSuggest, viewerInterface) {
1070
1073
  var toc = data.toc;
1071
- var navigation = toc.navigation;
1072
- var _navigation_header = navigation.header, header = _navigation_header === void 0 ? {} : _navigation_header, logo = navigation.logo;
1073
- var _header_leftItems = header.leftItems, leftItems = _header_leftItems === void 0 ? [] : _header_leftItems, _header_rightItems = header.rightItems, rightItems = _header_rightItems === void 0 ? [] : _header_rightItems;
1074
+ var navigation = toc.navigation || EmptyNavigation;
1075
+ var _navigation_header = navigation.header, header = _navigation_header === void 0 ? EmptyHeader : _navigation_header, logo = navigation.logo;
1076
+ var _header_leftItems = header.leftItems, leftItems = _header_leftItems === void 0 ? EmptyLeftItems : _header_leftItems, _header_rightItems = header.rightItems, rightItems = _header_rightItems === void 0 ? EmptyRightItems : _header_rightItems;
1074
1077
  var withControls = findItem(rightItems, leftItems, 'controls');
1075
1078
  var withSearch = findItem(rightItems, leftItems, 'search');
1076
1079
  var search = useSearch();
@@ -1117,7 +1120,7 @@ var useNavigation = function(data, controls, CustomControls, CustomSuggest, view
1117
1120
  ]);
1118
1121
  var layout = (0,react.useMemo)(function() {
1119
1122
  var _logo_icon;
1120
- return {
1123
+ return EmptyNavigation === navigation ? undefined : {
1121
1124
  header: {
1122
1125
  leftItems: []
1123
1126
  },
@@ -1140,7 +1143,8 @@ var useNavigation = function(data, controls, CustomControls, CustomSuggest, view
1140
1143
  navigationData,
1141
1144
  navigationTocData,
1142
1145
  mobileControlsData,
1143
- logo
1146
+ logo,
1147
+ navigation
1144
1148
  ]);
1145
1149
  var config = (0,react.useMemo)(function() {
1146
1150
  return {
@@ -1174,58 +1178,11 @@ var useNavigation = function(data, controls, CustomControls, CustomSuggest, view
1174
1178
 
1175
1179
 
1176
1180
 
1177
-
1178
- function App_Page_Page(_param) {
1179
- var data = _param.data, pageProps = (0,_object_without_properties._)(_param, [
1180
- "data"
1181
- ]);
1182
- var type = (0,utils/* .getPageType */.C2)(data);
1183
- var Page = (0,utils/* .getPageByType */.N7)(type);
1184
- return /*#__PURE__*/ (0,jsx_runtime.jsx)(Layout, {
1185
- headerHeight: pageProps.headerHeight,
1186
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Layout.Content, {
1187
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Page, (0,_object_spread._)({}, data, pageProps))
1188
- })
1189
- });
1190
- }
1191
- function LegacyNavPage(param) {
1192
- var data = param.data, props = param.props, controls = param.controls;
1193
- var theme = props.theme;
1194
- var CustomPage = (0,react.useCallback)(function() {
1195
- return /*#__PURE__*/ (0,jsx_runtime.jsx)(ConstructorPage, (0,_object_spread._)({}, data.data));
1196
- }, [
1197
- data
1198
- ]);
1199
- var content = useContent(data, CustomPage);
1200
- var custom = (0,react.useMemo)(function() {
1201
- return {
1202
- blocks: content.custom
1203
- };
1204
- }, [
1205
- content
1206
- ]);
1207
- return /*#__PURE__*/ (0,jsx_runtime.jsx)(App_Page_Page, (0,_object_spread_props._)((0,_object_spread._)({
1208
- data: data,
1209
- headerHeight: 0
1210
- }, props, controls), {
1211
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Provider/* .PageConstructorProvider */.W, {
1212
- theme: theme,
1213
- projectSettings: {
1214
- disableCompress: true
1215
- },
1216
- ssrConfig: {
1217
- isServer: Boolean(false)
1218
- },
1219
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(PageConstructor/* .PageConstructor */.C, {
1220
- custom: custom,
1221
- content: content.layout
1222
- })
1223
- })
1224
- }));
1225
- }
1226
- function RichNavPage(param) {
1181
+ function App_Page_Page(param) {
1227
1182
  var data = param.data, props = param.props, controls = param.controls;
1228
1183
  var theme = props.theme, fullScreen = props.fullScreen;
1184
+ var type = (0,utils/* .getPageType */.C2)(data);
1185
+ var Page = (0,utils/* .getPageByType */.N7)(type);
1229
1186
  var CustomSuggest = (0,react.useCallback)(function() {
1230
1187
  return /*#__PURE__*/ (0,jsx_runtime.jsx)(Suggest, {});
1231
1188
  }, []);
@@ -1236,29 +1193,32 @@ function RichNavPage(param) {
1236
1193
  ]);
1237
1194
  var navigation = useNavigation(data, controls, CustomControls, CustomSuggest);
1238
1195
  var CustomPage = (0,react.useCallback)(function() {
1239
- return /*#__PURE__*/ (0,jsx_runtime.jsx)(App_Page_Page, (0,_object_spread_props._)((0,_object_spread._)({
1240
- data: data,
1241
- headerHeight: fullScreen ? 0 : 64
1242
- }, props, navigation.withControls ? filterControls(controls, [
1243
- 'theme',
1244
- 'onChangeTheme',
1245
- 'textSize',
1246
- 'onChangeTextSize',
1247
- 'wideFormat',
1248
- 'onChangeWideFormat',
1249
- 'showMiniToc',
1250
- 'onChangeShowMiniToc',
1251
- 'langs',
1252
- 'onChangeLang'
1253
- ]) : controls), {
1254
- children: /*#__PURE__*/ (0,jsx_runtime.jsx)(ConstructorPage, (0,_object_spread._)({}, data.data))
1255
- }));
1196
+ return /*#__PURE__*/ (0,jsx_runtime.jsx)(Layout, {
1197
+ headerHeight: fullScreen || !navigation.layout ? 0 : 64,
1198
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Layout.Content, {
1199
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(Page, (0,_object_spread_props._)((0,_object_spread._)({}, data, props, navigation.withControls ? filterControls(controls, [
1200
+ 'theme',
1201
+ 'onChangeTheme',
1202
+ 'textSize',
1203
+ 'onChangeTextSize',
1204
+ 'wideFormat',
1205
+ 'onChangeWideFormat',
1206
+ 'showMiniToc',
1207
+ 'onChangeShowMiniToc',
1208
+ 'langs',
1209
+ 'onChangeLang'
1210
+ ]) : controls), {
1211
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(ConstructorPage, (0,_object_spread._)({}, data.data))
1212
+ }))
1213
+ })
1214
+ });
1256
1215
  }, [
1257
1216
  data,
1258
1217
  navigation,
1259
1218
  props,
1260
1219
  controls,
1261
- fullScreen
1220
+ fullScreen,
1221
+ Page
1262
1222
  ]);
1263
1223
  var content = useContent(data, CustomPage);
1264
1224
  var custom = (0,react.useMemo)(function() {
@@ -1359,6 +1319,58 @@ function useLangs(param) {
1359
1319
  ]);
1360
1320
  }
1361
1321
 
1322
+ ;// CONCATENATED MODULE: ./src/components/App/useAvailableLangs.ts
1323
+
1324
+
1325
+
1326
+ function useAvailableLangs(data, langs) {
1327
+ return (0,react.useMemo)(function() {
1328
+ if (!('meta' in data)) {
1329
+ return [];
1330
+ }
1331
+ var _data_meta = data.meta, canonical = _data_meta.canonical, _data_meta_alternate = _data_meta.alternate, alternate = _data_meta_alternate === void 0 ? [] : _data_meta_alternate;
1332
+ if (!canonical) {
1333
+ return [];
1334
+ }
1335
+ var langsSet = new Set();
1336
+ var _canonical_split = (0,esm_sliced_to_array._)(canonical.split('/'), 1), canonicalLang = _canonical_split[0];
1337
+ if (langs.includes(canonicalLang)) {
1338
+ langsSet.add(canonicalLang);
1339
+ }
1340
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1341
+ try {
1342
+ for(var _iterator = alternate[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1343
+ var alt = _step.value;
1344
+ var href = alt.href;
1345
+ if (!href || (0,utils/* .isExternalHref */.$2)(href)) {
1346
+ continue;
1347
+ }
1348
+ var _href_split = (0,esm_sliced_to_array._)(href.split('/'), 1), altLang = _href_split[0];
1349
+ if (langs.includes(altLang)) {
1350
+ langsSet.add(altLang);
1351
+ }
1352
+ }
1353
+ } catch (err) {
1354
+ _didIteratorError = true;
1355
+ _iteratorError = err;
1356
+ } finally{
1357
+ try {
1358
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1359
+ _iterator.return();
1360
+ }
1361
+ } finally{
1362
+ if (_didIteratorError) {
1363
+ throw _iteratorError;
1364
+ }
1365
+ }
1366
+ }
1367
+ return Array.from(langsSet);
1368
+ }, [
1369
+ data,
1370
+ langs
1371
+ ]);
1372
+ }
1373
+
1362
1374
  // EXTERNAL MODULE: ./node_modules/@diplodoc/mdx-extension/build/esm/hooks/useMdxSsr.js + 9 modules
1363
1375
  var useMdxSsr = __webpack_require__(2915);
1364
1376
  ;// CONCATENATED MODULE: ./src/components/App/withMdxInit.tsx
@@ -1416,15 +1428,14 @@ var withMdxInit = function(param) {
1416
1428
 
1417
1429
 
1418
1430
 
1419
- function hasNavigation(data) {
1420
- return Boolean(data.toc.navigation);
1421
- }
1431
+
1422
1432
  function App(props) {
1423
1433
  var _analytics_gtm, _analytics_gtm1;
1424
- var data = props.data, router = props.router, lang = props.lang, search = props.search, analytics = props.analytics, viewerInterface = props.viewerInterface;
1434
+ var data = props.data, router = props.router, lang = props.lang, langs = props.langs, search = props.search, analytics = props.analytics, viewerInterface = props.viewerInterface;
1425
1435
  var settings = useSettings_useSettings();
1426
1436
  var langData = useLangs(props);
1427
1437
  var mobileView = useMobile_useMobile();
1438
+ var availableLangs = useAvailableLangs(data, langs);
1428
1439
  var fixedLang = constants/* .SUPPORTED_LANGS.includes */.aP.includes(lang) ? lang : models/* .Lang.En */.Uo.En;
1429
1440
  (0,esm_config/* .configure */.jQ)({
1430
1441
  lang: fixedLang,
@@ -1464,12 +1475,14 @@ function App(props) {
1464
1475
  ]);
1465
1476
  var controls = (0,react.useMemo)(function() {
1466
1477
  return (0,_object_spread_props._)((0,_object_spread._)({}, settings, langData), {
1467
- mobileView: mobileView
1478
+ mobileView: mobileView,
1479
+ availableLangs: availableLangs
1468
1480
  });
1469
1481
  }, [
1470
1482
  langData,
1471
1483
  settings,
1472
- mobileView
1484
+ mobileView,
1485
+ availableLangs
1473
1486
  ]);
1474
1487
  var direction = utils_getDirection(lang);
1475
1488
  var landingPage = getLandingPage(data);
@@ -1507,11 +1520,7 @@ function App(props) {
1507
1520
  children: [
1508
1521
  /*#__PURE__*/ (0,jsx_runtime.jsx)(RenderBodyHooksContext/* .RenderBodyHooksContext.Provider */.Y.Provider, {
1509
1522
  value: renderHooks,
1510
- children: hasNavigation(data) ? /*#__PURE__*/ (0,jsx_runtime.jsx)(RichNavPage, {
1511
- data: data,
1512
- props: page,
1513
- controls: controls
1514
- }) : /*#__PURE__*/ (0,jsx_runtime.jsx)(LegacyNavPage, {
1523
+ children: /*#__PURE__*/ (0,jsx_runtime.jsx)(App_Page_Page, {
1515
1524
  data: data,
1516
1525
  props: page,
1517
1526
  controls: controls
@@ -1851,7 +1860,7 @@ __webpack_require__.m = __webpack_modules__;
1851
1860
  __webpack_require__.x = () => {
1852
1861
  // Load entry module and return exports
1853
1862
  // This entry module depends on other loaded chunks and execution need to be delayed
1854
- var __webpack_exports__ = __webpack_require__.O(undefined, ["966", "971"], function() { return __webpack_require__(13543) });
1863
+ var __webpack_exports__ = __webpack_require__.O(undefined, ["966", "971"], function() { return __webpack_require__(85978) });
1855
1864
  __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
1856
1865
  return __webpack_exports__
1857
1866
  };