@brillout/docpress 0.7.9 → 0.7.10-commit-577cdcd

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 (93) hide show
  1. package/+config.ts +2 -10
  2. package/Layout.tsx +397 -67
  3. package/{navigation/NavigationHeader.tsx → Links.tsx} +6 -57
  4. package/MenuModal.tsx +146 -0
  5. package/autoScrollNav.ts +4 -5
  6. package/components/CodeBlockTransformer.tsx +0 -2
  7. package/components/Note.css +4 -4
  8. package/components/Note.tsx +0 -2
  9. package/components/Supporters.tsx +1 -0
  10. package/config/resolveHeadingsData.ts +20 -23
  11. package/config/resolvePageContext.ts +11 -1
  12. package/css/code/block.css +5 -5
  13. package/css/code/inline.css +1 -1
  14. package/css/code.css +9 -5
  15. package/css/index.css +0 -4
  16. package/css/reset.css +0 -6
  17. package/dist/+config.d.ts +1 -13
  18. package/dist/+config.js +0 -3
  19. package/dist/components/CodeBlockTransformer.d.ts +1 -0
  20. package/dist/components/CodeBlockTransformer.js +1 -0
  21. package/dist/components/Note.d.ts +1 -0
  22. package/dist/components/Note.js +1 -0
  23. package/dist/components/Supporters.js +1 -0
  24. package/dist/config/resolveHeadingsData.d.ts +5 -8
  25. package/dist/config/resolveHeadingsData.js +20 -22
  26. package/dist/config/resolvePageContext.d.ts +5 -7
  27. package/dist/config/resolvePageContext.js +2 -1
  28. package/dist/navigation/Navigation.d.ts +12 -11
  29. package/dist/navigation/Navigation.js +75 -73
  30. package/dist/renderer/getStyleColumnLayout.d.ts +7 -0
  31. package/dist/renderer/getStyleColumnLayout.js +169 -0
  32. package/dist/types/Heading.d.ts +2 -4
  33. package/dist/utils/client.d.ts +1 -0
  34. package/dist/utils/client.js +1 -0
  35. package/dist/utils/css.d.ts +1 -0
  36. package/dist/utils/css.js +27 -0
  37. package/dist/utils/getGlobalObject.d.ts +1 -0
  38. package/dist/utils/getGlobalObject.js +9 -0
  39. package/docsearch/DocSearchInstall.tsx +23 -0
  40. package/docsearch/SearchLink.tsx +48 -0
  41. package/docsearch/closeDocsearchModal.ts +29 -0
  42. package/initKeyBindings.ts +41 -0
  43. package/installSectionUrlHashs.ts +6 -5
  44. package/navigation/Navigation.css +101 -3
  45. package/navigation/Navigation.tsx +109 -124
  46. package/package.json +1 -8
  47. package/renderer/getPageContextCurrent.ts +16 -0
  48. package/renderer/getPageElement.tsx +19 -7
  49. package/renderer/getStyleColumnLayout.ts +189 -0
  50. package/renderer/onRenderClient.tsx +20 -24
  51. package/renderer/onRenderHtml.tsx +4 -0
  52. package/types/Heading.ts +2 -5
  53. package/types.d.ts +8 -0
  54. package/utils/client.ts +1 -0
  55. package/utils/css.ts +26 -0
  56. package/utils/getGlobalObject.ts +11 -0
  57. package/Layout.css +0 -63
  58. package/MobileHeader.tsx +0 -70
  59. package/algolia/DocSearch.css +0 -28
  60. package/components/FeatureList/FeatureList.client.ts +0 -60
  61. package/components/FeatureList/FeatureList.css +0 -119
  62. package/components/FeatureList/FeatureList.tsx +0 -114
  63. package/components/FeatureList/chevron.svg +0 -7
  64. package/css/block-design.css +0 -4
  65. package/dist/autoScrollNav.d.ts +0 -3
  66. package/dist/autoScrollNav.js +0 -36
  67. package/dist/components/Algolia/Hit.d.ts +0 -4
  68. package/dist/components/Algolia/Hit.js +0 -30
  69. package/dist/components/Algolia/SelectIcon.d.ts +0 -2
  70. package/dist/components/Algolia/SelectIcon.js +0 -7
  71. package/dist/components/Algolia/Snippet.d.ts +0 -13
  72. package/dist/components/Algolia/Snippet.js +0 -37
  73. package/dist/components/Algolia/SourceIcon.d.ts +0 -4
  74. package/dist/components/Algolia/SourceIcon.js +0 -23
  75. package/dist/components/Algolia/types.d.ts +0 -79
  76. package/dist/components/Algolia/types.js +0 -1
  77. package/dist/navigation/NavigationHeader.d.ts +0 -8
  78. package/dist/navigation/NavigationHeader.js +0 -75
  79. package/dist/navigation/navigation-fullscreen/NavigationFullscreenButton.d.ts +0 -6
  80. package/dist/navigation/navigation-fullscreen/NavigationFullscreenButton.js +0 -23
  81. package/dist/navigation/navigation-fullscreen/hotkeyLabel.d.ts +0 -1
  82. package/dist/navigation/navigation-fullscreen/hotkeyLabel.js +0 -1
  83. package/navigation/Navigation-highlight.css +0 -41
  84. package/navigation/Navigation-items.css +0 -119
  85. package/navigation/Navigation-layout.css +0 -127
  86. package/navigation/initMobileNavigation.ts +0 -23
  87. package/navigation/initPressKit.ts +0 -19
  88. package/navigation/navigation-fullscreen/NavigationFullscreenButton.css +0 -32
  89. package/navigation/navigation-fullscreen/NavigationFullscreenButton.tsx +0 -47
  90. package/navigation/navigation-fullscreen/chevron.svg +0 -1
  91. package/navigation/navigation-fullscreen/close.svg +0 -4
  92. package/navigation/navigation-fullscreen/hotkeyLabel.ts +0 -1
  93. package/navigation/navigation-fullscreen/initNavigationFullscreen.ts +0 -147
@@ -10,24 +10,22 @@ type Exports = {
10
10
  type PageContextOriginal = PageContextServer;
11
11
  type PageContextResolved = ReturnType<typeof resolvePageContext>;
12
12
  declare function resolvePageContext(pageContext: PageContextOriginal): {
13
- navigationData: {
14
- navItems: import("../navigation/Navigation").NavItem[];
15
- navItemsAll: import("../navigation/Navigation").NavItem[];
16
- currentUrl: string;
17
- isDetachedPage: boolean;
18
- };
13
+ isDetachedPage: boolean;
14
+ navItems: import("../navigation/Navigation").NavItem[];
15
+ navItemsAll: import("../navigation/Navigation").NavItemAll[];
19
16
  linksAll: import("../components").LinkData[];
20
17
  isLandingPage: boolean;
21
18
  pageTitle: string | null;
22
19
  documentTitle: string;
23
- noSideNavigation: (true | "no-logo") | undefined;
24
20
  topNavigationList: {
25
21
  title: string;
26
22
  url: string | null | undefined;
27
23
  }[];
24
+ columnLayouts: number[][];
28
25
  } & {
29
26
  urlPathname: string;
30
27
  meta: {
28
+ projectName: string;
31
29
  faviconUrl: string;
32
30
  twitterHandle: string;
33
31
  bannerUrl: string | undefined;
@@ -6,10 +6,11 @@ function resolvePageContext(pageContext) {
6
6
  var pageContextResolved = {};
7
7
  objectAssign(pageContextResolved, resolveHeadingsData(pageContext));
8
8
  var config = getConfig();
9
- var faviconUrl = config.faviconUrl, algolia = config.algolia, tagline = config.tagline, twitterHandle = config.twitterHandle, bannerUrl = config.bannerUrl, websiteUrl = config.websiteUrl, topNavigationStyle = config.topNavigationStyle;
9
+ var faviconUrl = config.faviconUrl, algolia = config.algolia, tagline = config.tagline, twitterHandle = config.twitterHandle, bannerUrl = config.bannerUrl, websiteUrl = config.websiteUrl, topNavigationStyle = config.topNavigationStyle, projectName = config.projectInfo.projectName;
10
10
  objectAssign(pageContextResolved, {
11
11
  urlPathname: pageContext.urlPathname, // TODO: remove
12
12
  meta: {
13
+ projectName: projectName,
13
14
  faviconUrl: faviconUrl,
14
15
  twitterHandle: twitterHandle,
15
16
  bannerUrl: bannerUrl,
@@ -1,20 +1,21 @@
1
- export { Navigation };
2
- export { NavigationMask };
3
- export type { NavigationData };
1
+ export { NavigationContent };
4
2
  export type { NavItem };
3
+ export type { NavItemAll };
5
4
  import React from 'react';
6
5
  import './Navigation.css';
7
- type NavigationData = Parameters<typeof Navigation>[0];
8
- declare function Navigation({ navItems, navItemsAll, currentUrl, isDetachedPage, }: {
9
- navItems: NavItem[];
10
- navItemsAll: NavItem[];
11
- currentUrl: string;
12
- isDetachedPage: boolean;
13
- }): React.JSX.Element;
14
- declare function NavigationMask(): React.JSX.Element;
6
+ import '@docsearch/css';
15
7
  type NavItem = {
16
8
  level: number;
17
9
  url?: string | null;
18
10
  title: string;
19
11
  titleInNav: string;
12
+ menuModalFullWidth?: true;
13
+ };
14
+ type NavItemAll = NavItem & {
15
+ columnLayoutEntry?: true;
20
16
  };
17
+ declare function NavigationContent(props: {
18
+ navItems: NavItem[];
19
+ showOnlyRelevant?: true;
20
+ columnLayout?: true;
21
+ }): React.JSX.Element;
@@ -9,38 +9,42 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- export { Navigation };
13
- export { NavigationMask };
12
+ // TODO/refactor: rename file and/or component
13
+ export { NavigationContent };
14
14
  import React from 'react';
15
- import { NavigationHeader } from './NavigationHeader';
16
- import { assert, Emoji, assertWarning, jsxToTextContent } from '../utils/server';
15
+ import { assert, assertWarning, jsxToTextContent } from '../utils/server';
17
16
  import './Navigation.css';
18
- import { NavigationFullscreenClose } from './navigation-fullscreen/NavigationFullscreenButton';
19
17
  import { parseTitle } from '../parseTitle';
20
- import { autoScrollNav_SSR } from '../autoScrollNav';
21
- function Navigation(_a) {
22
- var navItems = _a.navItems, navItemsAll = _a.navItemsAll, currentUrl = _a.currentUrl, isDetachedPage = _a.isDetachedPage;
23
- return (React.createElement(React.Fragment, null,
24
- React.createElement("div", { id: "navigation-container" },
25
- React.createElement(NavigationHeader, null),
26
- React.createElement("div", { id: "navigation-body" },
27
- isDetachedPage && (React.createElement(React.Fragment, null,
28
- navItems.length > 1 && (React.createElement(NavigationContent, { id: "navigation-content-detached", navItems: navItems, currentUrl: currentUrl })),
29
- React.createElement(DetachedPageNote, null))),
30
- React.createElement(NavigationContent, { id: "navigation-content-main", navItems: navItemsAll, currentUrl: currentUrl }),
31
- React.createElement(NavigationFullscreenClose, null))),
32
- React.createElement("script", { dangerouslySetInnerHTML: { __html: autoScrollNav_SSR } })));
33
- }
34
- function NavigationMask() {
35
- return React.createElement("div", { id: "mobile-navigation-mask" });
36
- }
18
+ import { usePageContext } from '../renderer/usePageContext';
19
+ import '@docsearch/css';
37
20
  function NavigationContent(props) {
38
- var navItemsWithComputed = addComputedProps(props.navItems, props.currentUrl);
39
- var navItemsGrouped = groupByLevelMin(navItemsWithComputed);
40
- return (React.createElement("div", { id: props.id, className: "navigation-content" },
41
- React.createElement("div", { className: "nav-column", style: { position: 'relative' } }, navItemsGrouped.map(function (navItemGroup, i) { return (React.createElement("div", { className: "nav-items-group", key: i },
42
- React.createElement(NavItemComponent, { navItem: navItemGroup }),
43
- navItemGroup.navItemChilds.map(function (navItem, j) { return (React.createElement(NavItemComponent, { navItem: navItem, key: j })); }))); }))));
21
+ var pageContext = usePageContext();
22
+ var navItemsWithComputed = getNavItemsWithComputed(props.navItems, pageContext.urlPathname);
23
+ var navContent;
24
+ if (!props.columnLayout) {
25
+ navContent = navItemsWithComputed
26
+ .filter(function (navItemGroup) { return !props.showOnlyRelevant || navItemGroup.isRelevant; })
27
+ .map(function (navItem, i) { return React.createElement(NavItemComponent, { navItem: navItem, key: i }); });
28
+ }
29
+ else {
30
+ assert(!props.showOnlyRelevant);
31
+ var navItemsColumnLayout = groupByColumns(navItemsWithComputed);
32
+ navContent = (React.createElement(React.Fragment, null, navItemsColumnLayout.map(function (columns, i) { return (React.createElement("div", { key: i, style: {
33
+ display: 'flex',
34
+ justifyContent: 'center',
35
+ } },
36
+ React.createElement("div", { className: "column-layout-".concat(i), style: {
37
+ flexGrow: 1,
38
+ columnGap: 20,
39
+ } }, columns.map(function (navItemColumnEntry, k) { return (React.createElement("div", { key: k, className: "column-layout-entry", style: {
40
+ breakInside: 'avoid',
41
+ paddingBottom: !navItemColumnEntry.isFullWidth ? 40 : undefined,
42
+ width: '100%',
43
+ } },
44
+ React.createElement(NavItemComponent, { navItem: navItemColumnEntry }),
45
+ navItemColumnEntry.navItemChilds.map(function (navItem, k) { return (React.createElement(NavItemComponent, { navItem: navItem, key: k })); }))); })))); })));
46
+ }
47
+ return (React.createElement("div", { className: "navigation-content", style: { marginTop: 10 } }, navContent));
44
48
  }
45
49
  function NavItemComponent(_a) {
46
50
  var _b;
@@ -65,72 +69,70 @@ function NavItemComponent(_a) {
65
69
  'nav-item',
66
70
  'nav-item-level-' + navItem.level,
67
71
  navItem.url && navItem.isActive && ' is-active',
68
- navItem.url && navItem.isActiveFirst && ' is-active-first',
69
- navItem.url && navItem.isActiveLast && ' is-active-last',
70
72
  navItem.isFirstOfItsKind && 'nav-item-first-of-its-kind',
71
73
  navItem.isLastOfItsKind && 'nav-item-last-of-its-kind',
72
74
  ]
73
75
  .filter(Boolean)
74
76
  .join(' '), href: (_b = navItem.url) !== null && _b !== void 0 ? _b : undefined }, titleInNavJsx));
75
77
  }
76
- function groupByLevelMin(navItems) {
77
- var navItemsGrouped = [];
78
- var levelMin = Math.min.apply(Math, navItems.map(function (h) { return h.level; }));
78
+ function groupByColumns(navItems) {
79
+ var navItemsColumnLayout = [];
80
+ var navItemsColumnEntries = [];
81
+ var isFullWidth;
79
82
  navItems.forEach(function (navItem) {
80
- if (navItem.level === levelMin) {
81
- navItemsGrouped.push(__assign(__assign({}, navItem), { navItemChilds: [] }));
83
+ if (navItem.level === 1) {
84
+ var isFullWidthPrevious = isFullWidth;
85
+ isFullWidth = !!navItem.menuModalFullWidth;
86
+ if (isFullWidthPrevious !== undefined && isFullWidthPrevious !== isFullWidth) {
87
+ navItemsColumnLayout.push(navItemsColumnEntries);
88
+ navItemsColumnEntries = [];
89
+ }
90
+ }
91
+ assert(isFullWidth !== undefined);
92
+ if (navItem.columnLayoutEntry) {
93
+ assert(navItem.level === 1 || navItem.level === 4);
94
+ var navItemColumnEntry = __assign(__assign({}, navItem), { navItemChilds: [], isFullWidth: isFullWidth });
95
+ navItemsColumnEntries.push(navItemColumnEntry);
82
96
  }
83
97
  else {
84
- navItemsGrouped[navItemsGrouped.length - 1].navItemChilds.push(navItem);
98
+ assert(navItem.level !== 1);
99
+ navItemsColumnEntries[navItemsColumnEntries.length - 1].navItemChilds.push(navItem);
85
100
  }
86
101
  });
87
- return navItemsGrouped;
102
+ navItemsColumnLayout.push(navItemsColumnEntries);
103
+ return navItemsColumnLayout;
88
104
  }
89
- function addComputedProps(navItems, currentUrl) {
90
- return navItems.map(function (navItem, i) {
105
+ function getNavItemsWithComputed(navItems, currentUrl) {
106
+ var navItemIdx;
107
+ var navItemsWithComputed = navItems.map(function (navItem, i) {
91
108
  assert([1, 2, 3, 4].includes(navItem.level), navItem);
92
109
  var navItemPrevious = navItems[i - 1];
93
110
  var navItemNext = navItems[i + 1];
94
- var isActiveFirst = false;
95
- var isActiveLast = false;
96
111
  var isActive = false;
97
112
  if (navItem.url === currentUrl) {
98
113
  assert(navItem.level === 2, { currentUrl: currentUrl });
114
+ assert(navItemIdx === undefined);
115
+ navItemIdx = i;
99
116
  isActive = true;
100
- isActiveFirst = true;
101
- if ((navItemNext === null || navItemNext === void 0 ? void 0 : navItemNext.level) !== 3) {
102
- isActiveLast = true;
103
- }
104
- }
105
- if (navItem.level === 3) {
106
- isActive = true;
107
- if ((navItemNext === null || navItemNext === void 0 ? void 0 : navItemNext.level) !== 3) {
108
- isActiveLast = true;
109
- }
110
117
  }
111
118
  var isFirstOfItsKind = navItem.level !== (navItemPrevious === null || navItemPrevious === void 0 ? void 0 : navItemPrevious.level);
112
119
  var isLastOfItsKind = navItem.level !== (navItemNext === null || navItemNext === void 0 ? void 0 : navItemNext.level);
113
- return __assign(__assign({}, navItem), { isActive: isActive, isActiveFirst: isActiveFirst, isActiveLast: isActiveLast, isFirstOfItsKind: isFirstOfItsKind, isLastOfItsKind: isLastOfItsKind });
120
+ var navItemComputed = __assign(__assign({}, navItem), { isActive: isActive, isRelevant: false, isFirstOfItsKind: isFirstOfItsKind, isLastOfItsKind: isLastOfItsKind });
121
+ return navItemComputed;
114
122
  });
115
- }
116
- function DetachedPageNote() {
117
- return (React.createElement("div", { id: "detached-note", style: {
118
- backgroundColor: 'var(--background-color)',
119
- textAlign: 'left',
120
- marginLeft: 10,
121
- marginRight: 10,
122
- marginTop: 25,
123
- marginBottom: -5,
124
- borderRadius: 5,
125
- padding: 10,
126
- } },
127
- React.createElement(Emoji, { name: "info" }),
128
- ' ',
129
- React.createElement("b", null,
130
- React.createElement("em", null, "Detached")),
131
- React.createElement("span", { style: {
132
- opacity: 0.8,
133
- } },
134
- ' ',
135
- "\u2014 this page isn't listed in the navigation below.")));
123
+ // Set `isRelevant`
124
+ assert(navItemIdx !== undefined);
125
+ for (var i = navItemIdx; i >= 0; i--) {
126
+ var navItem = navItemsWithComputed[i];
127
+ navItem.isRelevant = true;
128
+ if (navItem.level === 1)
129
+ break;
130
+ }
131
+ for (var i = navItemIdx; i < navItemsWithComputed.length; i++) {
132
+ var navItem = navItemsWithComputed[i];
133
+ if (navItem.level === 1)
134
+ break;
135
+ navItem.isRelevant = true;
136
+ }
137
+ return navItemsWithComputed;
136
138
  }
@@ -0,0 +1,7 @@
1
+ export { getStyleColumnLayout };
2
+ export { determineColumnLayoutEntries };
3
+ import { type NavItemAll } from '../navigation/Navigation';
4
+ declare function determineColumnLayoutEntries(navItems: NavItemAll[]): {
5
+ columnLayouts: number[][];
6
+ };
7
+ declare function getStyleColumnLayout(columnLayouts: number[][]): string;
@@ -0,0 +1,169 @@
1
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
2
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
+ return cooked;
4
+ };
5
+ var __assign = (this && this.__assign) || function () {
6
+ __assign = Object.assign || function(t) {
7
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
8
+ s = arguments[i];
9
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
10
+ t[p] = s[p];
11
+ }
12
+ return t;
13
+ };
14
+ return __assign.apply(this, arguments);
15
+ };
16
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
17
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
18
+ if (ar || !(i in from)) {
19
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
20
+ ar[i] = from[i];
21
+ }
22
+ }
23
+ return to.concat(ar || Array.prototype.slice.call(from));
24
+ };
25
+ export { getStyleColumnLayout };
26
+ export { determineColumnLayoutEntries };
27
+ import { css } from '../utils/css';
28
+ import { assert, isBrowser } from '../utils/server';
29
+ assert(!isBrowser());
30
+ var columnWidthMin = 300;
31
+ var columnWidthMax = 350;
32
+ function determineColumnLayoutEntries(navItems) {
33
+ var navItemsWithLength = navItems.map(function (navItem) { return (__assign(__assign({}, navItem), { numberOfHeadings: navItem.level === 1 || navItem.level === 4 ? 0 : null })); });
34
+ var navItemLevel1;
35
+ var navItemLevel4;
36
+ navItemsWithLength.forEach(function (navItem) {
37
+ if (navItem.level === 1) {
38
+ navItemLevel1 = navItem;
39
+ return;
40
+ }
41
+ if (navItem.level === 4) {
42
+ navItemLevel4 = navItem;
43
+ return;
44
+ }
45
+ var bumpNavItemLength = function (navItem) {
46
+ assert(navItem.numberOfHeadings !== null && navItem.numberOfHeadings >= 0);
47
+ navItem.numberOfHeadings++;
48
+ };
49
+ assert(navItemLevel1);
50
+ bumpNavItemLength(navItemLevel1);
51
+ if (navItemLevel4) {
52
+ bumpNavItemLength(navItemLevel4);
53
+ }
54
+ });
55
+ var columnLayouts = [];
56
+ var columns = [];
57
+ var isFullWidth;
58
+ navItemsWithLength.forEach(function (navItem, i) {
59
+ var isFullWidthBegin = false;
60
+ if (navItem.level === 1) {
61
+ var isFullWidthPrevious = isFullWidth;
62
+ isFullWidth = !!navItem.menuModalFullWidth;
63
+ if (isFullWidth)
64
+ isFullWidthBegin = true;
65
+ if (isFullWidthPrevious !== undefined && isFullWidthPrevious !== isFullWidth) {
66
+ columnLayouts.push(columns);
67
+ columns = [];
68
+ }
69
+ }
70
+ if ((!isFullWidth && navItem.level === 1) ||
71
+ (isFullWidth && navItem.level === 4 && navItemsWithLength[i - 1].level !== 1) ||
72
+ isFullWidthBegin) {
73
+ assert(navItem.numberOfHeadings !== null);
74
+ columns.push(navItem.numberOfHeadings);
75
+ navItems[i].columnLayoutEntry = true;
76
+ }
77
+ });
78
+ columnLayouts.push(columns);
79
+ return { columnLayouts: columnLayouts };
80
+ }
81
+ function getStyleColumnLayout(columnLayouts) {
82
+ var style = '\n';
83
+ columnLayouts.forEach(function (columns, i) {
84
+ var _loop_1 = function (numberOfColumns) {
85
+ var styleGivenNumberOfColumns = [];
86
+ styleGivenNumberOfColumns.push(css(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n.column-layout-", " {\n column-count: ", ";\n max-width: min(100%, ", "px);\n}\n"], ["\n.column-layout-", " {\n column-count: ", ";\n max-width: min(100%, ", "px);\n}\n"])), i, numberOfColumns, columnWidthMax * numberOfColumns));
87
+ console.log('columnLayouts', columnLayouts);
88
+ var columnsIdMap = determineColumns(columns, numberOfColumns);
89
+ console.log('columnsIdMap', columnsIdMap);
90
+ var columnBreakPoints = determineColumnBreakPoints(columnsIdMap);
91
+ columnBreakPoints.forEach(function (columnBreakPoint, columnUngroupedId) {
92
+ styleGivenNumberOfColumns.push(css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n.column-layout-entry:nth-child(", ") {\n break-before: ", ";\n}\n"], ["\n.column-layout-entry:nth-child(", ") {\n break-before: ", ";\n}\n"])), columnUngroupedId + 1, columnBreakPoint ? 'column' : 'avoid'));
93
+ });
94
+ var noContainerQuery = numberOfColumns === columns.length;
95
+ if (!noContainerQuery) {
96
+ var maxWidth = (numberOfColumns + 1) * columnWidthMin - 1;
97
+ styleGivenNumberOfColumns = __spreadArray(__spreadArray([
98
+ //
99
+ "@container(max-width: ".concat(maxWidth, "px) {")
100
+ ], styleGivenNumberOfColumns, true), [
101
+ "}",
102
+ ], false);
103
+ }
104
+ style += styleGivenNumberOfColumns.join('\n') + '\n';
105
+ };
106
+ for (var numberOfColumns = columns.length; numberOfColumns >= 1; numberOfColumns--) {
107
+ _loop_1(numberOfColumns);
108
+ }
109
+ });
110
+ return style;
111
+ }
112
+ function determineColumnBreakPoints(columnsIdMap) {
113
+ assert(columnsIdMap[0] === 0);
114
+ var columnGroupedIdBefore = -1;
115
+ var columnBreakPoints = columnsIdMap.map(function (columnGroupedId) {
116
+ assert([
117
+ //
118
+ columnGroupedIdBefore,
119
+ columnGroupedIdBefore + 1,
120
+ ].includes(columnGroupedId));
121
+ var val = columnGroupedId !== columnGroupedIdBefore;
122
+ columnGroupedIdBefore = columnGroupedId;
123
+ return val;
124
+ });
125
+ return columnBreakPoints;
126
+ }
127
+ function determineColumns(columnsUnmerged, numberOfColumns) {
128
+ assert(numberOfColumns <= columnsUnmerged.length);
129
+ var columnsMergingInit = columnsUnmerged.map(function (columnHeight, i) { return ({
130
+ columnIdsMerged: [i],
131
+ heightTotal: columnHeight,
132
+ }); });
133
+ var columnsMerged = mergeColumns(columnsMergingInit, numberOfColumns);
134
+ var columnsIdMap = new Array(columnsUnmerged.length);
135
+ assert(columnsMerged.length === numberOfColumns);
136
+ columnsMerged.forEach(function (columnMerged, columnMergedId) {
137
+ columnMerged.columnIdsMerged.forEach(function (columnId) {
138
+ columnsIdMap[columnId] = columnMergedId;
139
+ });
140
+ });
141
+ assert(columnsIdMap.length === columnsUnmerged.length);
142
+ return columnsIdMap;
143
+ }
144
+ function mergeColumns(columnsMerging, numberOfColumns) {
145
+ if (columnsMerging.length <= numberOfColumns)
146
+ return columnsMerging;
147
+ var mergeCandidate = null;
148
+ for (var i_1 = 0; i_1 <= columnsMerging.length - 2; i_1++) {
149
+ var column1 = columnsMerging[i_1 + 0];
150
+ var column2 = columnsMerging[i_1 + 1];
151
+ var heightTotal = column1.heightTotal + column2.heightTotal;
152
+ if (!mergeCandidate || mergeCandidate.heightTotal > heightTotal) {
153
+ mergeCandidate = {
154
+ i: i_1,
155
+ columnIdsMerged: __spreadArray(__spreadArray([], column1.columnIdsMerged, true), column2.columnIdsMerged, true),
156
+ heightTotal: heightTotal,
157
+ };
158
+ }
159
+ }
160
+ assert(mergeCandidate);
161
+ var i = mergeCandidate.i;
162
+ assert(-1 < i && i < columnsMerging.length - 1);
163
+ var columnsMergingMod = __spreadArray(__spreadArray(__spreadArray([], columnsMerging.slice(0, i), true), [
164
+ mergeCandidate
165
+ ], false), columnsMerging.slice(i + 2), true);
166
+ assert(columnsMergingMod.length === columnsMerging.length - 1);
167
+ return mergeColumns(columnsMergingMod, numberOfColumns);
168
+ }
169
+ var templateObject_1, templateObject_2;
@@ -7,10 +7,10 @@ type HeadingResolved = {
7
7
  level: number;
8
8
  title: string;
9
9
  titleInNav: string;
10
- noSideNavigation?: NoSideNavigation;
11
10
  topNavigation?: true | string;
12
11
  linkBreadcrumb: string[];
13
12
  sectionTitles?: string[];
13
+ menuModalFullWidth?: true;
14
14
  } & Tmp;
15
15
  type HeadingDetachedResolved = Omit<HeadingResolved, 'level' | 'linkBreadcrumb'> & {
16
16
  level: 2;
@@ -19,6 +19,7 @@ type HeadingDetachedResolved = Omit<HeadingResolved, 'level' | 'linkBreadcrumb'>
19
19
  type HeadingDefinitionCommon = {
20
20
  title: string;
21
21
  topNavigation?: true | string;
22
+ menuModalFullWidth?: true;
22
23
  };
23
24
  type HeadingDetachedDefinition = HeadingDefinitionCommon & {
24
25
  url: string;
@@ -27,13 +28,11 @@ type HeadingDetachedDefinition = HeadingDefinitionCommon & {
27
28
  type HeadingDefinition = HeadingDefinitionCommon & {
28
29
  url?: null | string;
29
30
  titleInNav?: string;
30
- noSideNavigation?: NoSideNavigation;
31
31
  } & HeadingDefinitionLevel & Tmp;
32
32
  type IsCategory = {
33
33
  url?: undefined;
34
34
  titleDocument?: undefined;
35
35
  titleInNav?: undefined;
36
- noSideNavigation?: undefined;
37
36
  };
38
37
  type HeadingDefinitionLevel = ({
39
38
  level: 1;
@@ -47,4 +46,3 @@ type HeadingDefinitionLevel = ({
47
46
  type Tmp = {
48
47
  titleDocument?: string;
49
48
  };
50
- type NoSideNavigation = true | 'no-logo';
@@ -1,2 +1,3 @@
1
1
  export * from './assert';
2
2
  export * from './isBrowser';
3
+ export * from './getGlobalObject';
@@ -1,2 +1,3 @@
1
1
  export * from './assert';
2
2
  export * from './isBrowser';
3
+ export * from './getGlobalObject';
@@ -0,0 +1 @@
1
+ export declare function css(strings: TemplateStringsArray | string[], ...values: (string | number)[]): string;
@@ -0,0 +1,27 @@
1
+ export function css(strings) {
2
+ var values = [];
3
+ for (var _i = 1; _i < arguments.length; _i++) {
4
+ values[_i - 1] = arguments[_i];
5
+ }
6
+ // The boring part
7
+ var result = strings
8
+ .map(function (str, i) {
9
+ var s = str;
10
+ if (i !== strings.length - 1) {
11
+ s += values[i];
12
+ }
13
+ return s;
14
+ })
15
+ .join('');
16
+ // Remove comments
17
+ result = result
18
+ .split('\n')
19
+ .filter(function (line) { return !line.startsWith('// '); })
20
+ .join('\n');
21
+ // Minifiy
22
+ result = result
23
+ .replace(/\s+/g, ' ') // Replace all whitespace sequences with a single space
24
+ .replace(/\s*([{}:;])\s*/g, '$1') // Remove space around {, }, :, ;
25
+ .trim(); // Trim any leading/trailing whitespace
26
+ return result;
27
+ }
@@ -0,0 +1 @@
1
+ export declare function getGlobalObject<T extends Record<string, unknown> = never>(key: `${string}.ts`, defaultValue: T): T;
@@ -0,0 +1,9 @@
1
+ export function getGlobalObject(
2
+ // We use the filename as key; each `getGlobalObject()` call should live inside a file with a unique filename.
3
+ key, defaultValue) {
4
+ // @ts-ignore
5
+ var globalObjectsAll = (globalThis[projectKey] = globalThis[projectKey] || {});
6
+ var globalObject = (globalObjectsAll[key] = globalObjectsAll[key] || defaultValue);
7
+ return globalObject;
8
+ }
9
+ var projectKey = '_docpress';
@@ -0,0 +1,23 @@
1
+ export { DocSearchInstall }
2
+
3
+ import React from 'react'
4
+ import { usePageContext } from '../renderer/usePageContext'
5
+ import { DocSearch as DocSearchButton } from '@docsearch/react'
6
+ import { Hit } from '../components/Algolia/Hit'
7
+
8
+ function DocSearchInstall() {
9
+ const pageContext = usePageContext()
10
+ const { algolia } = pageContext.meta
11
+ if (!algolia) return null
12
+ return (
13
+ <div style={{ display: 'none' }}>
14
+ <DocSearchButton
15
+ appId={algolia.appId}
16
+ indexName={algolia.indexName}
17
+ apiKey={algolia.apiKey}
18
+ insights={true}
19
+ hitComponent={Hit}
20
+ />
21
+ </div>
22
+ )
23
+ }
@@ -0,0 +1,48 @@
1
+ export { SearchLink }
2
+
3
+ import React from 'react'
4
+ import { openDocsearchModal } from './closeDocsearchModal'
5
+
6
+ type PropsDiv = React.HTMLProps<HTMLDivElement>
7
+ function SearchLink(props: PropsDiv) {
8
+ return (
9
+ <div
10
+ {...props}
11
+ style={{
12
+ height: '100%',
13
+ display: 'flex',
14
+ alignItems: 'center',
15
+ cursor: 'pointer',
16
+ ...props.style,
17
+ }}
18
+ className="colorize-on-hover"
19
+ onClick={(ev) => {
20
+ ev.preventDefault()
21
+ openDocsearchModal()
22
+ }}
23
+ aria-label="Ctrl + K"
24
+ data-balloon-pos="left"
25
+ data-balloon-blunt
26
+ data-balloon-nofocus
27
+ >
28
+ <SearchIcon />
29
+ Search
30
+ </div>
31
+ )
32
+ }
33
+ function SearchIcon() {
34
+ return (
35
+ <svg
36
+ style={{ marginRight: 'var(--icon-padding)', lineHeight: 0, width: '1.3em' }}
37
+ className="decolorize-6"
38
+ viewBox="0 0 20 20"
39
+ >
40
+ <path
41
+ d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z"
42
+ fill="none"
43
+ stroke="currentColor"
44
+ strokeWidth="2"
45
+ ></path>
46
+ </svg>
47
+ )
48
+ }
@@ -0,0 +1,29 @@
1
+ export { closeDocsearchModal }
2
+ export { openDocsearchModal }
3
+
4
+ import { assert } from '../utils/client'
5
+
6
+ function closeDocsearchModal() {
7
+ if (isClosed()) return
8
+ toggle()
9
+ }
10
+
11
+ function openDocsearchModal() {
12
+ if (!isClosed()) return
13
+ toggle()
14
+ }
15
+
16
+ // There doesn't seem be an official API to open/close the DocSearch modal:
17
+ // - https://github.com/algolia/docsearch/issues/2321
18
+ // - https://github.com/algolia/docsearch/blob/90f3c6aabbc324fe49e9a1dfe0906fcd4d90f27b/packages/docsearch-react/src/DocSearch.tsx#L52
19
+ function toggle() {
20
+ // Trigger https://github.com/algolia/docsearch/blob/90f3c6aabbc324fe49e9a1dfe0906fcd4d90f27b/packages/docsearch-react/src/useDocSearchKeyboardEvents.ts#L71
21
+ window.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', ctrlKey: true }))
22
+ }
23
+
24
+ function isClosed() {
25
+ const test1 = !document.body.classList.contains('DocSearch--active')
26
+ const test2 = document.getElementsByClassName('DocSearch-Modal').length === 0
27
+ assert(test1 === test2)
28
+ return test1 || test2
29
+ }