@brillout/docpress 0.2.2 → 0.2.3

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 (40) hide show
  1. package/dist/{chunk-TTLAZ2T2.js → chunk-3QC7HYIF.js} +0 -1
  2. package/dist/{chunk-G2A5MZJA.js → chunk-4G4ACGLN.js} +0 -1
  3. package/dist/{chunk-JS5BGVDK.js → chunk-D4PNWSRD.js} +2 -3
  4. package/dist/{chunk-7HKDCMSZ.js → chunk-MSIQIC6B.js} +4 -3
  5. package/dist/{chunk-OEVBWUR6.js → chunk-NVJING6T.js} +0 -1
  6. package/dist/{chunk-XUTBTIEE.js → chunk-RZAPSH5Z.js} +20 -19
  7. package/dist/cli/index.js +5 -6
  8. package/dist/components/features/FeatureList.css +0 -1
  9. package/dist/components/features/FeatureList.d.ts +1 -1
  10. package/dist/components/features/FeatureList.js +2 -3
  11. package/dist/components/features/initFeatureList.js +2 -3
  12. package/dist/{devServer-534L4U45.js → devServer-UKWIENKN.js} +4 -5
  13. package/dist/index.css +0 -1
  14. package/dist/index.d.ts +11 -10
  15. package/dist/index.js +38 -15
  16. package/dist/languages-KXPKJFQL.svg +1 -0
  17. package/dist/renderer/_default.page.client.css +22 -4
  18. package/dist/renderer/_default.page.client.js +6 -6
  19. package/dist/renderer/_default.page.server.css +2 -4
  20. package/dist/renderer/_default.page.server.d.ts +5 -5
  21. package/dist/renderer/_default.page.server.js +28 -14
  22. package/dist/repora-UNKQZ6QP.svg +10 -0
  23. package/package.json +3 -3
  24. package/dist/chunk-7HKDCMSZ.js.map +0 -1
  25. package/dist/chunk-G2A5MZJA.js.map +0 -1
  26. package/dist/chunk-JS5BGVDK.js.map +0 -1
  27. package/dist/chunk-OEVBWUR6.js.map +0 -1
  28. package/dist/chunk-TTLAZ2T2.js.map +0 -1
  29. package/dist/chunk-XUTBTIEE.js.map +0 -1
  30. package/dist/cli/index.js.map +0 -1
  31. package/dist/components/features/FeatureList.css.map +0 -1
  32. package/dist/components/features/FeatureList.js.map +0 -1
  33. package/dist/components/features/initFeatureList.js.map +0 -1
  34. package/dist/devServer-534L4U45.js.map +0 -1
  35. package/dist/index.css.map +0 -1
  36. package/dist/index.js.map +0 -1
  37. package/dist/renderer/_default.page.client.css.map +0 -1
  38. package/dist/renderer/_default.page.client.js.map +0 -1
  39. package/dist/renderer/_default.page.server.css.map +0 -1
  40. package/dist/renderer/_default.page.server.js.map +0 -1
@@ -5,4 +5,3 @@ var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __f
5
5
  export {
6
6
  __template
7
7
  };
8
- //# sourceMappingURL=chunk-TTLAZ2T2.js.map
@@ -45,4 +45,3 @@ export {
45
45
  assertUsage,
46
46
  isBrowser
47
47
  };
48
- //# sourceMappingURL=chunk-G2A5MZJA.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Emoji
3
- } from "./chunk-7HKDCMSZ.js";
3
+ } from "./chunk-MSIQIC6B.js";
4
4
  import {
5
5
  assert
6
- } from "./chunk-G2A5MZJA.js";
6
+ } from "./chunk-4G4ACGLN.js";
7
7
 
8
8
  // src/components/RepoLink.tsx
9
9
  import React2 from "react";
@@ -175,4 +175,3 @@ export {
175
175
  getHeadings,
176
176
  parseTitle
177
177
  };
178
- //# sourceMappingURL=chunk-JS5BGVDK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  assert
3
- } from "./chunk-G2A5MZJA.js";
3
+ } from "./chunk-4G4ACGLN.js";
4
4
 
5
5
  // src/utils/filter.ts
6
6
  function filter(obj, predicate) {
@@ -15,7 +15,9 @@ function filter(obj, predicate) {
15
15
 
16
16
  // src/utils/determineSectionUrlHash.ts
17
17
  function determineSectionUrlHash(title) {
18
- const urlHash = title.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).join("-");
18
+ const urlHash = title.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").split(/[^a-z0-9]+/).filter(Boolean).join("-");
19
+ if (urlHash === "")
20
+ return null;
19
21
  return urlHash;
20
22
  }
21
23
  function determineSectionTitle(urlWithHash, titleNormalCase) {
@@ -151,4 +153,3 @@ export {
151
153
  crawlAllFiles,
152
154
  Emoji
153
155
  };
154
- //# sourceMappingURL=chunk-7HKDCMSZ.js.map
@@ -89,4 +89,3 @@ function LearnMore({ children, name, rightSide }) {
89
89
  export {
90
90
  FeatureList
91
91
  };
92
- //# sourceMappingURL=chunk-OEVBWUR6.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  determineSectionUrlHash
3
- } from "./chunk-7HKDCMSZ.js";
3
+ } from "./chunk-MSIQIC6B.js";
4
4
  import {
5
5
  assert
6
- } from "./chunk-G2A5MZJA.js";
6
+ } from "./chunk-4G4ACGLN.js";
7
7
 
8
8
  // src/vite.config.ts
9
9
  import mdx from "@mdx-js/rollup";
@@ -36,13 +36,10 @@ function transform(code) {
36
36
  return line;
37
37
  }
38
38
  if (line.startsWith("#")) {
39
- const { id, headingLevel, title, headingHtml } = parseMarkdownHeading(line);
40
- headings.push({ id, headingLevel, title });
39
+ const { headingId, headingLevel, title, headingHtml } = parseMarkdownHeading(line);
40
+ headings.push({ headingId, headingLevel, title });
41
41
  return headingHtml;
42
42
  }
43
- if (line.startsWith("<h")) {
44
- assert(false, { line });
45
- }
46
43
  return line;
47
44
  }).join("\n");
48
45
  const headingsExportCode = `export const headings = [${headings.map((heading) => JSON.stringify(heading)).join(", ")}];`;
@@ -59,10 +56,13 @@ function parseMarkdownHeading(line) {
59
56
  const titleMdx = lineWords.join(" ");
60
57
  assert(!titleMdx.startsWith(" "), { line, lineWords });
61
58
  assert(titleMdx, { line, lineWords });
62
- const id = determineSectionUrlHash(titleMdx);
59
+ const headingId = determineSectionUrlHash(titleMdx);
63
60
  const title = titleMdx;
64
- const headingHtml = `<h${headingLevel} id="${id}">${parseTitle(title)}</h${headingLevel}>`;
65
- const heading = { headingLevel, title, id, headingHtml };
61
+ const titleParsed = parseTitle(title);
62
+ assert(headingId === null || headingId.length > 0);
63
+ const headingAttrId = headingId === null ? "" : ` id="${headingId}"`;
64
+ const headingHtml = `<h${headingLevel}${headingAttrId}>${titleParsed}</h${headingLevel}>`;
65
+ const heading = { headingLevel, title, headingId, headingHtml };
66
66
  return heading;
67
67
  }
68
68
  function parseTitle(titleMarkdown) {
@@ -121,14 +121,16 @@ var config = {
121
121
  prerender: {
122
122
  noExtraDir: true
123
123
  },
124
- extensions: [{
125
- npmPackageName: "@brillout/docpress",
126
- pageFilesDist: [
127
- "@brillout/docpress/renderer/_default.page.server.js",
128
- "@brillout/docpress/renderer/_default.page.client.js"
129
- ],
130
- assetsDir: "/dist/"
131
- }],
124
+ extensions: [
125
+ {
126
+ npmPackageName: "@brillout/docpress",
127
+ pageFilesDist: [
128
+ "@brillout/docpress/renderer/_default.page.server.js",
129
+ "@brillout/docpress/renderer/_default.page.client.js"
130
+ ],
131
+ assetsDir: "/dist/"
132
+ }
133
+ ],
132
134
  includeAssetsImportedByServer: true,
133
135
  disableAutoFullBuild: true
134
136
  })
@@ -144,4 +146,3 @@ var vite_config_default = config;
144
146
  export {
145
147
  vite_config_default
146
148
  };
147
- //# sourceMappingURL=chunk-XUTBTIEE.js.map
package/dist/cli/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  vite_config_default
3
- } from "../chunk-XUTBTIEE.js";
4
- import "../chunk-7HKDCMSZ.js";
5
- import "../chunk-G2A5MZJA.js";
6
- import "../chunk-TTLAZ2T2.js";
3
+ } from "../chunk-RZAPSH5Z.js";
4
+ import "../chunk-MSIQIC6B.js";
5
+ import "../chunk-4G4ACGLN.js";
6
+ import "../chunk-3QC7HYIF.js";
7
7
 
8
8
  // src/cli/index.ts
9
9
  import { build, preview } from "vite";
@@ -16,7 +16,7 @@ Error.stackTraceLimit = Infinity;
16
16
  cli();
17
17
  async function cli() {
18
18
  if (isDev) {
19
- await import("../devServer-534L4U45.js");
19
+ await import("../devServer-UKWIENKN.js");
20
20
  } else if (isBuild) {
21
21
  await build(vite_config_default);
22
22
  await build({ ...vite_config_default, build: { ssr: true } });
@@ -32,4 +32,3 @@ async function cli() {
32
32
  );
33
33
  }
34
34
  }
35
- //# sourceMappingURL=index.js.map
@@ -109,4 +109,3 @@ aside.learn-more.right-side {
109
109
  .feature.selected .chevron {
110
110
  transform: rotate(180deg);
111
111
  }
112
- /*# sourceMappingURL=FeatureList.css.map */
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
 
3
- declare type FeatureProps = {
3
+ type FeatureProps = {
4
4
  title: React.ReactNode;
5
5
  desc: React.ReactNode;
6
6
  learnMore?: React.ReactNode;
@@ -1,8 +1,7 @@
1
1
  import {
2
2
  FeatureList
3
- } from "../../chunk-OEVBWUR6.js";
4
- import "../../chunk-TTLAZ2T2.js";
3
+ } from "../../chunk-NVJING6T.js";
4
+ import "../../chunk-3QC7HYIF.js";
5
5
  export {
6
6
  FeatureList
7
7
  };
8
- //# sourceMappingURL=FeatureList.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  assert
3
- } from "../../chunk-G2A5MZJA.js";
4
- import "../../chunk-TTLAZ2T2.js";
3
+ } from "../../chunk-4G4ACGLN.js";
4
+ import "../../chunk-3QC7HYIF.js";
5
5
 
6
6
  // src/components/features/initFeatureList.ts
7
7
  addTwitterWidgets();
@@ -57,4 +57,3 @@ function loadScript(scriptUrl) {
57
57
  function getComputedStyle(el, styleProp) {
58
58
  return window.document.defaultView.getComputedStyle(el).getPropertyValue(styleProp);
59
59
  }
60
- //# sourceMappingURL=initFeatureList.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  vite_config_default
3
- } from "./chunk-XUTBTIEE.js";
4
- import "./chunk-7HKDCMSZ.js";
5
- import "./chunk-G2A5MZJA.js";
6
- import "./chunk-TTLAZ2T2.js";
3
+ } from "./chunk-RZAPSH5Z.js";
4
+ import "./chunk-MSIQIC6B.js";
5
+ import "./chunk-4G4ACGLN.js";
6
+ import "./chunk-3QC7HYIF.js";
7
7
 
8
8
  // src/cli/devServer.ts
9
9
  import express from "express";
@@ -32,4 +32,3 @@ async function startServer() {
32
32
  app.listen(port);
33
33
  console.log(`Server running at http://localhost:${port}`);
34
34
  }
35
- //# sourceMappingURL=devServer-534L4U45.js.map
package/dist/index.css CHANGED
@@ -118,4 +118,3 @@ aside.learn-more.right-side {
118
118
  .feature.selected .chevron {
119
119
  transform: rotate(180deg);
120
120
  }
121
- /*# sourceMappingURL=index.css.map */
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ declare function isBrowser(): boolean;
8
8
 
9
9
  declare function filter<T extends object>(obj: T, predicate: <K extends keyof T>(value: T[K], key: K) => boolean): T;
10
10
 
11
- declare function determineSectionUrlHash(title: string): string;
11
+ declare function determineSectionUrlHash(title: string): string | null;
12
12
  declare function determineSectionTitle(urlWithHash: string, titleNormalCase: boolean): string;
13
13
 
14
14
  declare function jsxToTextContent(node: JSX.Element | string): string;
@@ -17,17 +17,17 @@ declare function objectAssign<Obj extends Object, ObjAddendum>(obj: Obj, objAdde
17
17
 
18
18
  declare function crawlAllFiles(dir: string): Promise<string[]>;
19
19
 
20
- declare type EmojiName = 'warning' | 'typescript' | 'shield' | 'mechanical-arm' | 'mountain' | 'rocket' | 'wrench' | 'compass' | 'seedling' | 'books' | 'plug' | 'earth' | 'gear' | 'red-heart' | 'high-voltage' | 'gem-stone' | 'dizzy' | 'sparkles' | 'writing-hang' | 'road-fork' | 'engine' | 'red-circle' | 'sparkling-heart' | 'gift' | 'package' | 'info' | 'lab' | 'trophy';
20
+ type EmojiName = 'warning' | 'typescript' | 'shield' | 'mechanical-arm' | 'mountain' | 'rocket' | 'wrench' | 'compass' | 'seedling' | 'books' | 'plug' | 'earth' | 'gear' | 'red-heart' | 'high-voltage' | 'gem-stone' | 'dizzy' | 'sparkles' | 'writing-hang' | 'road-fork' | 'engine' | 'red-circle' | 'sparkling-heart' | 'gift' | 'package' | 'info' | 'lab' | 'trophy';
21
21
  declare function Emoji({ name, style }: {
22
22
  name: EmojiName;
23
23
  style?: React$1.CSSProperties;
24
24
  }): JSX.Element;
25
25
 
26
- declare type HeadingWithoutLink = {
26
+ type HeadingWithoutLink = {
27
27
  url: string;
28
28
  title: string | JSX.Element;
29
29
  };
30
- declare type HeadingDefinition = HeadingBase & (({
30
+ type HeadingDefinition = HeadingBase & (({
31
31
  level: 1;
32
32
  titleEmoji: EmojiName;
33
33
  } & HeadingAbstract) | ({
@@ -36,25 +36,25 @@ declare type HeadingDefinition = HeadingBase & (({
36
36
  level: 2;
37
37
  isListTitle?: true;
38
38
  sectionTitles?: string[];
39
- url: string;
39
+ url: null | string;
40
40
  } | {
41
41
  level: 3;
42
- url: string;
42
+ url: null | string;
43
43
  });
44
- declare type HeadingBase = {
44
+ type HeadingBase = {
45
45
  title: string;
46
46
  level: number;
47
- url?: string;
47
+ url?: null | string;
48
48
  titleDocument?: string;
49
49
  titleInNav?: string;
50
50
  };
51
- declare type HeadingAbstract = {
51
+ type HeadingAbstract = {
52
52
  url?: undefined;
53
53
  titleDocument?: undefined;
54
54
  titleInNav?: undefined;
55
55
  };
56
56
 
57
- declare type Config = {
57
+ type Config = {
58
58
  projectInfo: {
59
59
  githubRepository: string;
60
60
  githubIssues: string;
@@ -79,6 +79,7 @@ declare type Config = {
79
79
  websiteUrl: string;
80
80
  bannerUrl?: string;
81
81
  twitterHandle: string;
82
+ i18n?: true;
82
83
  };
83
84
 
84
85
  declare function Link(props: {
package/dist/index.js CHANGED
@@ -4,10 +4,10 @@ import {
4
4
  isRepoLink,
5
5
  parseTitle,
6
6
  usePageContext
7
- } from "./chunk-JS5BGVDK.js";
7
+ } from "./chunk-D4PNWSRD.js";
8
8
  import {
9
9
  FeatureList
10
- } from "./chunk-OEVBWUR6.js";
10
+ } from "./chunk-NVJING6T.js";
11
11
  import {
12
12
  Emoji,
13
13
  crawlAllFiles,
@@ -16,13 +16,13 @@ import {
16
16
  filter,
17
17
  jsxToTextContent,
18
18
  objectAssign
19
- } from "./chunk-7HKDCMSZ.js";
19
+ } from "./chunk-MSIQIC6B.js";
20
20
  import {
21
21
  assert,
22
22
  assertUsage,
23
23
  isBrowser
24
- } from "./chunk-G2A5MZJA.js";
25
- import "./chunk-TTLAZ2T2.js";
24
+ } from "./chunk-4G4ACGLN.js";
25
+ import "./chunk-3QC7HYIF.js";
26
26
 
27
27
  // src/components/Link.tsx
28
28
  import React2 from "react";
@@ -225,15 +225,6 @@ import React9 from "react";
225
225
  // src/icons/heart.svg
226
226
  var heart_default = "/assets/heart-OINVKOXO.svg";
227
227
 
228
- // src/components/Sponsors/companyLogos/ccoli.svg
229
- var ccoli_default = "/assets/ccoli-CHW3TQKS.svg";
230
-
231
- // src/components/Sponsors/companyLogos/contra.svg
232
- var contra_default = "/assets/contra-WLZBOPBV.svg";
233
-
234
- // src/components/Sponsors/companyLogos/mfqs.svg
235
- var mfqs_default = "/assets/mfqs-2EAEE7N6.svg";
236
-
237
228
  // src/components/Sponsors/medalGold.svg
238
229
  var medalGold_default = "/assets/medalGold-UP6A73FL.svg";
239
230
 
@@ -246,6 +237,18 @@ var medalBronze_default = "/assets/medalBronze-CO4CTUR4.svg";
246
237
  // src/components/Sponsors/label.svg
247
238
  var label_default = "/assets/label-MP75CTIA.svg";
248
239
 
240
+ // src/components/Sponsors/companyLogos/ccoli.svg
241
+ var ccoli_default = "/assets/ccoli-CHW3TQKS.svg";
242
+
243
+ // src/components/Sponsors/companyLogos/contra.svg
244
+ var contra_default = "/assets/contra-WLZBOPBV.svg";
245
+
246
+ // src/components/Sponsors/companyLogos/mfqs.svg
247
+ var mfqs_default = "/assets/mfqs-2EAEE7N6.svg";
248
+
249
+ // src/components/Sponsors/companyLogos/repora.svg
250
+ var repora_default = "/assets/repora-UNKQZ6QP.svg";
251
+
249
252
  // src/components/Sponsors.tsx
250
253
  var sponsors = [
251
254
  {
@@ -266,9 +269,30 @@ var sponsors = [
266
269
  plan: "bronze",
267
270
  website: "https://myfavoritequiltstore.com"
268
271
  },
272
+ {
273
+ companyName: "Repora",
274
+ companyLogo: repora_default,
275
+ plan: "bronze",
276
+ website: "https://www.repora.com"
277
+ },
278
+ {
279
+ username: "DannyZB"
280
+ },
281
+ {
282
+ username: "pieperz"
283
+ },
284
+ {
285
+ username: "hemengke1997"
286
+ },
269
287
  {
270
288
  username: "spacedawwwg"
271
289
  },
290
+ {
291
+ username: "arthurgailes"
292
+ },
293
+ {
294
+ username: "stackblitz"
295
+ },
272
296
  {
273
297
  username: "codthing"
274
298
  },
@@ -486,4 +510,3 @@ export {
486
510
  jsxToTextContent,
487
511
  objectAssign
488
512
  };
489
- //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewBox="0 0 24 24" class="option-icon" data-v-fe4c30c3=""><path d="M0 0h24v24H0z" fill="none"></path><path d=" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z " class="css-c4d79v"></path></svg>
@@ -95,7 +95,7 @@ body {
95
95
  font-weight: 100 900;
96
96
  font-stretch: 75% 125%;
97
97
  font-style: oblique 0deg 12deg;
98
- src: url(/assets/Inter-Var-IOAEQULN.ttf) format("truetype-variations");
98
+ src: url(../Inter-Var-IOAEQULN.ttf) format("truetype-variations");
99
99
  }
100
100
 
101
101
  /* src/css/code/inline.css */
@@ -233,15 +233,34 @@ table th {
233
233
  }
234
234
 
235
235
  /* src/algolia/DocSearch.css */
236
+ .DocSearch-Button-Keys {
237
+ margin-left: 6px !important;
238
+ }
239
+ .DocSearch-Search-Icon {
240
+ margin-right: 0 !important;
241
+ }
242
+ .DocSearch-Button-Placeholder {
243
+ padding-right: 6px !important;
244
+ }
236
245
  #docsearch-desktop {
237
246
  max-width: 110px !important;
238
247
  }
239
- #docsearch-desktop .DocSearch-Button-Placeholder {
248
+ #docsearch-desktop .DocSearch-Button-Placeholder,
249
+ #docsearch-desktop .DocSearch-Button-Keys {
240
250
  display: none;
251
+ }
252
+ #docsearch-desktop .DocSearch-Button {
253
+ background: transparent !important;
241
254
  padding: 0 !important;
255
+ position: relative;
256
+ top: -1px;
257
+ outline: none !important;
258
+ border: none !important;
259
+ box-shadow: none !important;
242
260
  }
243
261
  #docsearch-desktop .DocSearch-Search-Icon {
244
- margin-right: 6px !important;
262
+ height: 21px !important;
263
+ width: 21px !important;
245
264
  }
246
265
  #docsearch-desktop .DocSearch-Button {
247
266
  margin-right: 3px !important;
@@ -261,4 +280,3 @@ table th {
261
280
  }
262
281
 
263
282
  /* src/css/index.css */
264
- /*# sourceMappingURL=_default.page.client.css.map */
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  assert
3
- } from "../chunk-G2A5MZJA.js";
4
- import "../chunk-TTLAZ2T2.js";
3
+ } from "../chunk-4G4ACGLN.js";
4
+ import "../chunk-3QC7HYIF.js";
5
5
 
6
6
  // src/autoScrollNav.ts
7
7
  autoScrollNav();
@@ -33,9 +33,8 @@ function installSectionUrlHashs() {
33
33
  assert(navigationEl);
34
34
  const docSections = Array.from(document.querySelectorAll("h2"));
35
35
  docSections.forEach((docSection) => {
36
- const docTitle = docSection.textContent;
37
- assert(docTitle);
38
- assert(docSection.id, { docSection });
36
+ if (!docSection.id)
37
+ return;
39
38
  const urlHash = "#" + docSection.id;
40
39
  assertNavLink(navigationEl, urlHash);
41
40
  docSection.onclick = () => {
@@ -75,6 +74,8 @@ function initNavigationFullscreen() {
75
74
  document.addEventListener(
76
75
  "keydown",
77
76
  (ev) => {
77
+ if (document.body.classList.contains("DocSearch--active"))
78
+ return;
78
79
  if (ev.key === "Escape")
79
80
  toggleNavExpend();
80
81
  },
@@ -177,4 +178,3 @@ function activateNavigationMask() {
177
178
  function toggleNavigation() {
178
179
  document.body.classList.toggle("show-menu");
179
180
  }
180
- //# sourceMappingURL=_default.page.client.js.map
@@ -48,8 +48,7 @@
48
48
  margin-left: calc(-1 * var(--navigation-fullscreen-button-width));
49
49
  }
50
50
  @media screen and (max-width: 1139px) {
51
- #navigation-header-logo,
52
- #docsearch {
51
+ #navigation-header-logo {
53
52
  display: none !important;
54
53
  }
55
54
  #navigation-wrapper {
@@ -260,7 +259,7 @@ html.navigation-fullscreen #detached-note {
260
259
  height: 100%;
261
260
  width: 100%;
262
261
  background-color: #eee !important;
263
- background: url(/assets/chevron-K3WPYLOP.svg);
262
+ background: url(../chevron-K3WPYLOP.svg);
264
263
  background-repeat: no-repeat;
265
264
  background-position: center center;
266
265
  }
@@ -309,4 +308,3 @@ html.navigation-fullscreen #page-content {
309
308
  --main-view-padding: 10px;
310
309
  }
311
310
  }
312
- /*# sourceMappingURL=_default.page.server.css.map */
@@ -1,18 +1,18 @@
1
1
  import * as vite_plugin_ssr_dist_cjs_node_html_renderHtml from 'vite-plugin-ssr/dist/cjs/node/html/renderHtml';
2
2
  import { PageContextBuiltIn } from 'vite-plugin-ssr';
3
3
 
4
- declare type MarkdownHeading = {
4
+ type MarkdownHeading = {
5
5
  title: string;
6
- id: string;
6
+ headingId: string | null;
7
7
  headingLevel: number;
8
8
  titleAddendum?: string;
9
9
  };
10
10
 
11
- declare type ReactComponent = () => JSX.Element;
12
- declare type Exports = {
11
+ type ReactComponent = () => JSX.Element;
12
+ type Exports = {
13
13
  headings?: MarkdownHeading[];
14
14
  };
15
- declare type PageContextOriginal = PageContextBuiltIn & {
15
+ type PageContextOriginal = PageContextBuiltIn & {
16
16
  Page: ReactComponent;
17
17
  exports: Exports;
18
18
  };
@@ -4,19 +4,19 @@ import {
4
4
  getHeadings,
5
5
  parseTitle,
6
6
  usePageContext
7
- } from "../chunk-JS5BGVDK.js";
7
+ } from "../chunk-D4PNWSRD.js";
8
8
  import {
9
9
  Emoji,
10
10
  jsxToTextContent,
11
11
  objectAssign
12
- } from "../chunk-7HKDCMSZ.js";
12
+ } from "../chunk-MSIQIC6B.js";
13
13
  import {
14
14
  assert,
15
15
  assertUsage
16
- } from "../chunk-G2A5MZJA.js";
16
+ } from "../chunk-4G4ACGLN.js";
17
17
  import {
18
18
  __template
19
- } from "../chunk-TTLAZ2T2.js";
19
+ } from "../chunk-3QC7HYIF.js";
20
20
 
21
21
  // src/renderer/_default.page.server.tsx
22
22
  import ReactDOMServer from "react-dom/server";
@@ -44,6 +44,9 @@ var discord_default = "/assets/discord-JD33TUSF.svg";
44
44
  // src/icons/changelog.svg
45
45
  var changelog_default = "/assets/changelog-IPI5F42D.svg";
46
46
 
47
+ // src/icons/languages.svg
48
+ var languages_default = "/assets/languages-KXPKJFQL.svg";
49
+
47
50
  // src/navigation/NavigationHeader.tsx
48
51
  function NavigationHeader() {
49
52
  const pageContext = usePageContext();
@@ -71,7 +74,13 @@ function NavigationHeader() {
71
74
  }
72
75
  function Links() {
73
76
  const pageContext = usePageContext();
74
- const { projectInfo } = pageContext.config;
77
+ const { projectInfo, i18n } = pageContext.config;
78
+ const iconI18n = !i18n ? null : /* @__PURE__ */ React.createElement(LinkIcon, {
79
+ className: "decolorize-4",
80
+ icon: languages_default,
81
+ href: "/languages",
82
+ style: { height: 21, position: "relative", top: 0, left: 0 }
83
+ });
75
84
  return /* @__PURE__ */ React.createElement("div", {
76
85
  style: {
77
86
  display: "flex",
@@ -79,21 +88,22 @@ function Links() {
79
88
  paddingTop: 0,
80
89
  justifyContent: "left"
81
90
  }
82
- }, /* @__PURE__ */ React.createElement(SocialLink, {
91
+ }, /* @__PURE__ */ React.createElement(LinkIcon, {
83
92
  className: "decolorize-4",
84
93
  icon: github_default,
85
94
  href: projectInfo.githubRepository
86
- }), /* @__PURE__ */ React.createElement(SocialLink, {
95
+ }), /* @__PURE__ */ React.createElement(LinkIcon, {
87
96
  className: "decolorize-6",
88
97
  icon: discord_default,
89
98
  href: projectInfo.discordInvite
90
- }), /* @__PURE__ */ React.createElement(SocialLink, {
99
+ }), /* @__PURE__ */ React.createElement(LinkIcon, {
91
100
  className: "decolorize-7",
92
101
  icon: twitter_default,
93
102
  href: projectInfo.twitterProfile
94
103
  }), /* @__PURE__ */ React.createElement("div", {
104
+ className: "decolorize-6 colorize-on-hover",
95
105
  id: "docsearch-desktop"
96
- }), /* @__PURE__ */ React.createElement(ChangelogButton, null));
106
+ }), iconI18n, /* @__PURE__ */ React.createElement(ChangelogButton, null));
97
107
  }
98
108
  function ChangelogButton() {
99
109
  const pageContext = usePageContext();
@@ -119,7 +129,7 @@ function ChangelogButton() {
119
129
  style: { marginLeft: 5 }
120
130
  }));
121
131
  }
122
- function SocialLink({ className, icon, href }) {
132
+ function LinkIcon({ className, icon, href, style }) {
123
133
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("a", {
124
134
  className: "colorize-on-hover " + className,
125
135
  href,
@@ -127,7 +137,7 @@ function SocialLink({ className, icon, href }) {
127
137
  }, /* @__PURE__ */ React.createElement("img", {
128
138
  src: icon,
129
139
  height: "20",
130
- style: {}
140
+ style
131
141
  })));
132
142
  }
133
143
 
@@ -209,6 +219,11 @@ function Heading({
209
219
  heading
210
220
  }) {
211
221
  assert([1, 2, 3, 4].includes(heading.level), heading);
222
+ if (heading.level === 1 || heading.level === 4) {
223
+ assert(heading.url === void 0);
224
+ } else {
225
+ assert(heading.url);
226
+ }
212
227
  return /* @__PURE__ */ React3.createElement("a", {
213
228
  className: [
214
229
  "nav-item",
@@ -220,7 +235,7 @@ function Heading({
220
235
  heading.computed.isFirstOfItsKind && "nav-item-first-of-its-kind",
221
236
  heading.computed.isLastOfItsKind && "nav-item-last-of-its-kind"
222
237
  ].filter(Boolean).join(" "),
223
- href: heading.url || void 0
238
+ href: heading.url ?? void 0
224
239
  }, heading.titleInNav);
225
240
  }
226
241
  function groupHeadings(headings) {
@@ -486,7 +501,7 @@ function getHeadingsWithSubHeadings(headings, pageContext, activeHeading) {
486
501
  const pageHeadings = pageContext.exports.headings || [];
487
502
  pageHeadings.forEach((pageHeading, i) => {
488
503
  const title = parseTitle(pageHeading.title);
489
- const url = "#" + pageHeading.id;
504
+ const url = pageHeading.headingId && "#" + pageHeading.headingId;
490
505
  assert(
491
506
  pageHeading.headingLevel !== 3,
492
507
  "Wrong page heading level `" + pageHeading.headingLevel + "` (it should be `<h2>`) for sub-heading `" + pageHeading.title + "` of page `" + pageContext.urlOriginal + "`."
@@ -600,4 +615,3 @@ function getOpenGraphTags(url, meta) {
600
615
  export {
601
616
  render
602
617
  };
603
- //# sourceMappingURL=_default.page.server.js.map
@@ -0,0 +1,10 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 178.84 55.522">
2
+ <defs>
3
+ <style>
4
+ .a {
5
+ fill: #00204f;
6
+ }
7
+ </style>
8
+ </defs>
9
+ <path class="a" d="M27.761,0A27.761,27.761,0,1,0,55.522,27.761,27.793,27.793,0,0,0,27.761,0Zm0,52.262a24.5,24.5,0,1,1,24.5-24.5A24.529,24.529,0,0,1,27.761,52.262Zm-5.543-8.536H35.3L22.218,28.358Zm5.9-30.856h-5.9V27.242h5.9a7.186,7.186,0,1,0,0-14.372Zm75.168,22.755a1.825,1.825,0,0,0-1.239.656A6.35,6.35,0,0,1,97.2,38.467a6.762,6.762,0,0,1-6.668-6.959,6.762,6.762,0,0,1,6.668-6.96,5.551,5.551,0,0,1,3.5,1.166l-3.844,4.245a1.23,1.23,0,0,0-.328.911,1.37,1.37,0,0,0,2.405.838l4.646-5.3a1.468,1.468,0,0,0-.074-2.223,9.326,9.326,0,0,0-6.3-2.332,9.656,9.656,0,0,0,0,19.312,9.22,9.22,0,0,0,7.105-3.17,1.7,1.7,0,0,0,.438-.984A1.38,1.38,0,0,0,103.286,35.625ZM117.543,22.01a9.019,9.019,0,0,0-6.622,2.833,10.116,10.116,0,0,0-1.843,2.566,9.363,9.363,0,0,0-.99,4.172v14.4a1.406,1.406,0,0,0,1.416,1.452,1.428,1.428,0,0,0,1.417-1.452V37.947a8.885,8.885,0,0,0,6.622,2.833,9.156,9.156,0,0,0,9.173-9.385A9.156,9.156,0,0,0,117.543,22.01Zm-.177,16.149a6.5,6.5,0,0,1-6.445-6.481v-.566a6.466,6.466,0,1,1,12.926.283A6.55,6.55,0,0,1,117.366,38.159ZM139.83,22.01a9.385,9.385,0,0,0,0,18.77,9.208,9.208,0,0,0,9.314-9.385A9.209,9.209,0,0,0,139.83,22.01Zm0,16.149a6.593,6.593,0,0,1-6.481-6.764,6.47,6.47,0,1,1,12.926,0A6.565,6.565,0,0,1,139.83,38.159Zm38.292-10.041a10.174,10.174,0,0,0-2.116-3.275A9.17,9.17,0,0,0,160.211,31.4a9.156,9.156,0,0,0,9.173,9.385,8.942,8.942,0,0,0,6.622-2.833v1.31a1.429,1.429,0,0,0,1.417,1.452,1.407,1.407,0,0,0,1.417-1.452V31.581A10.176,10.176,0,0,0,178.122,28.118Zm-2.116,3.56A6.466,6.466,0,1,1,163.08,31.4a6.466,6.466,0,1,1,12.926-.283ZM158.27,22.15a4.873,4.873,0,0,0-3.208.735,4.992,4.992,0,0,0-2.182,3.663l-.006.067V39.3a1.415,1.415,0,1,0,2.829,0V26.761a2.183,2.183,0,0,1,.9-1.5,2.076,2.076,0,0,1,1.336-.3,1.414,1.414,0,1,0,.331-2.809ZM77.577,28.959l.732-.037A6.319,6.319,0,0,0,83.8,22.369c0-4.063-3.038-7.322-7.688-7.322h-5.93a1.547,1.547,0,0,0-1.538,1.538V39.393a1.556,1.556,0,1,0,3.112,0V17.939H76a4.414,4.414,0,1,1,0,8.823H74.794A1.4,1.4,0,0,0,73.4,28.19a1.927,1.927,0,0,0,.476,1.208l9.226,10.983a1.489,1.489,0,0,0,1.208.586,1.547,1.547,0,0,0,1.538-1.537,1.424,1.424,0,0,0-.366-1.025Z"/>
10
+ </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brillout/docpress",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "exports": {
5
5
  "./renderer/_default.page.server.js": "./dist/renderer/_default.page.server.js",
6
6
  "./renderer/_default.page.client.js": "./dist/renderer/_default.page.client.js",
@@ -57,7 +57,7 @@
57
57
  "react-dom": "18"
58
58
  },
59
59
  "devDependencies": {
60
- "@brillout/framework-builder": "^0.0.2",
60
+ "@brillout/framework-builder": "^0.1.1",
61
61
  "@brillout/docpress": "link:.",
62
62
  "@types/express": "^4.17.13",
63
63
  "@types/node": "^15.12.1",
@@ -68,7 +68,7 @@
68
68
  "react-dom": "^18.1.0",
69
69
  "rollup": "^2.74.1",
70
70
  "tsx": "^3.12.1",
71
- "typescript": "^4.8.4"
71
+ "typescript": "^4.9.4"
72
72
  },
73
73
  "bin": {
74
74
  "docpress": "./bin.js"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/filter.ts","../src/utils/determineSectionUrlHash.ts","../src/utils/jsxToTextContent.ts","../src/utils/objectAssign.ts","../src/utils/crawlAllFiles.ts","../src/utils/filesystemPathHandling.ts","../src/utils/Emoji/Emoji.ts"],"sourcesContent":["export { filter }\n\n// https://stackoverflow.com/questions/66341757/typescript-how-to-filter-the-object\nfunction filter<T extends object>(obj: T, predicate: <K extends keyof T>(value: T[K], key: K) => boolean): T {\n const result: { [K in keyof T]?: T[K] } = {}\n ;(Object.keys(obj) as Array<keyof T>).forEach((name) => {\n if (predicate(obj[name], name)) {\n result[name] = obj[name]\n }\n })\n return result as T\n}\n","import { assert } from './assert'\n\nexport { determineSectionUrlHash }\nexport { determineSectionTitle }\n\nfunction determineSectionUrlHash(title: string): string {\n const urlHash = title\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter(Boolean)\n .join('-')\n return urlHash\n}\n\nfunction determineSectionTitle(urlWithHash: string, titleNormalCase: boolean): string {\n assert(urlWithHash.includes('#'), { urlWithHash })\n const urlHash = urlWithHash.split('#')[1]\n const title = urlHash\n .split('-')\n .map((word, i) => {\n if (i === 0) {\n return capitalizeFirstLetter(word)\n }\n if (!titleNormalCase && word.length >= 4) {\n return capitalizeFirstLetter(word)\n }\n return word\n })\n .join(' ')\n return title\n}\n\nfunction capitalizeFirstLetter(word: string): string {\n return word[0].toUpperCase() + word.slice(1)\n}\n","import { assert } from './assert'\n\nexport { jsxToTextContent }\n\n// https://stackoverflow.com/questions/34204975/react-is-there-something-similar-to-node-textcontent/60564620#60564620\nfunction jsxToTextContent(node: JSX.Element | string): string {\n if (['string', 'number'].includes(typeof node)) return String(node)\n if (node instanceof Array) return node.map(jsxToTextContent).join('')\n if (typeof node === 'object' && node) return jsxToTextContent(node.props.children)\n assert(false)\n}\n","export { objectAssign }\n\n// Same as `Object.assign()` but with type inference\nfunction objectAssign<Obj extends Object, ObjAddendum>(\n obj: Obj,\n objAddendum: ObjAddendum\n): asserts obj is Obj & ObjAddendum {\n Object.assign(obj, objAddendum)\n}\n","export { crawlAllFiles }\n\nimport path from 'path'\nimport { promises as fsp } from 'fs'\nimport { toPosixPath } from './filesystemPathHandling'\n\n// Adapted from https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search/45130990#45130990\nasync function crawlAllFiles(dir: string): Promise<string[]> {\n const dirFiles = await fsp.readdir(dir, { withFileTypes: true })\n const allFiles = await Promise.all(\n dirFiles.map((file) => {\n const filePath = path.resolve(dir, file.name)\n return file.isDirectory() ? crawlAllFiles(filePath) : filePath\n })\n )\n return allFiles.flat().map(toPosixPath)\n}\n","export { toPosixPath }\nexport { assertPosixPath }\nexport { toSystemPath }\n\nimport assert from 'assert'\n\nconst sepPosix = '/'\nconst sepWin32 = '\\\\'\n\nfunction toPosixPath(path: string) {\n if (isPosix()) {\n assertPosixPath(path)\n return path\n }\n if (isWin32()) {\n const pathPosix = path.split(sepWin32).join(sepPosix)\n assertPosixPath(pathPosix)\n return pathPosix\n }\n assert(false)\n}\n\nfunction assertPosixPath(path: string) {\n assert(path && !path.includes(sepWin32), `Wrongly formatted path: ${path}`)\n}\n\nfunction toSystemPath(path: string) {\n if (isPosix()) {\n return toPosixPath(path)\n }\n if (isWin32()) {\n return path.split(sepPosix).join(sepWin32)\n }\n assert(false)\n}\n\nfunction isWin32() {\n return process.platform === 'win32'\n}\nfunction isPosix() {\n return !isWin32()\n}\n","import React from 'react'\nimport { assert } from '../assert'\n\nimport { iconMechanicalArm, iconCompass, iconRoadFork, iconShield, iconTypescript, iconEngine } from './assets'\n\nexport { Emoji }\nexport type { EmojiName }\n\ntype EmojiName =\n | 'warning'\n | 'typescript'\n | 'shield'\n | 'mechanical-arm'\n | 'mountain'\n | 'rocket'\n | 'wrench'\n | 'compass'\n | 'seedling'\n | 'books'\n | 'plug'\n | 'earth'\n | 'gear'\n | 'red-heart'\n | 'high-voltage'\n | 'gem-stone'\n | 'dizzy'\n | 'sparkles'\n | 'writing-hang'\n | 'road-fork'\n | 'engine'\n | 'red-circle'\n | 'sparkling-heart'\n | 'gift'\n | 'package'\n | 'info'\n | 'lab'\n | 'trophy'\n\nfunction Emoji({ name, style }: { name: EmojiName; style?: React.CSSProperties }): JSX.Element {\n const emoji =\n // ***\n // U+26A0\n // https://emojipedia.org/warning/\n // https://www.unicompat.com/26A0 => 94.1%\n // https://www.unicompat.com/26A0-FE0F => 92.4%\n // https://www.unicompat.com/2697 => 94.1%\n (name === 'warning' && Unicode(0x26a0, { fontFamily: 'emoji' })) ||\n // ***\n // U+2697\n // https://emojipedia.org/alembic/\n // https://www.unicompat.com/2697 => 94.1%\n (name === 'lab' && Unicode(0x2697)) ||\n // ***\n // U+2139\n // https://emojipedia.org/information/\n // https://www.unicompat.com/2139 => 94.8%\n // https://www.unicompat.com/2139-FE0F => 92.4%\n (name === 'info' && Unicode(0x2139, { fontFamily: 'emoji' })) ||\n // ***\n // U+1F4E6\n // https://emojipedia.org/package/\n // https://www.unicompat.com/1F4E6 => 94.1%\n (name === 'package' && Unicode(0x1f4e6)) ||\n // ***\n // U+1F381\n // https://emojipedia.org/wrapped-gift/\n // https://www.unicompat.com/1F381 => 94.1%\n (name === 'gift' && Unicode(0x1f381)) ||\n // ***\n // U+1F496\n // https://emojipedia.org/sparkling-heart/\n // https://www.unicompat.com/1F496 => 94.1%\n (name === 'sparkling-heart' && Unicode(0x1f496)) ||\n // ***\n // U+2B55\n // https://emojipedia.org/hollow-red-circle/\n // https://www.unicompat.com/2B55 => 94.1%\n (name === 'red-circle' && Unicode(0x2b55)) ||\n // ***\n (name === 'engine' && Img(iconEngine)) ||\n // ***\n // https://www.typescriptlang.org/branding/\n (name === 'typescript' && Img(iconTypescript)) ||\n // ***\n // U+FE0F\n // https://emojipedia.org/shield/\n // https://www.unicompat.com/FE0F => 46.5%\n // https://icon-sets.iconify.design/noto/shield/\n (name === 'shield' && Img(iconShield)) ||\n // ***\n // Custom\n (name === 'road-fork' && Img(iconRoadFork, '1.4em')) ||\n // ***\n // U+270D\n // https://emojipedia.org/writing-hand/\n // https://www.unicompat.com/270D => 93.8%\n (name === 'writing-hang' && Unicode(0x270d)) ||\n // ***\n // U+1F4AB\n // https://emojipedia.org/dizzy/\n // https://www.unicompat.com/1F4AB => 94.1%\n (name === 'dizzy' && Unicode(0x1f4ab)) ||\n // ***\n // U+1F9BE\n // https://iconify.design/icon-sets/noto/mechanical-arm.html\n // https://emojipedia.org/mechanical-arm/\n // https://www.unicompat.com/1f9be => 65.5%\n (name === 'mechanical-arm' && Img(iconMechanicalArm)) ||\n // ***\n // U+1F680\n // https://www.unicompat.com/1F680 => 94.1\n (name === 'rocket' && Unicode(0x1f680)) ||\n // ***\n // U+1F527\n // https://emojipedia.org/wrench/\n // https://www.unicompat.com/1F527 => 94.1%\n (name === 'wrench' && Unicode(0x1f527)) ||\n // ***\n // U+1F9ED\n // https://iconify.design/icon-sets/noto/compass.html\n // https://www.unicompat.com/1F9ED => 67.1%\n (name === 'compass' && Img(iconCompass, '1.4em')) ||\n // ***\n // U+1F331\n // https://www.unicompat.com/1F331 => 94.1%\n (name === 'seedling' && Unicode(0x1f331)) ||\n // ***\n // U+1F4DA\n // https://www.unicompat.com/1F4DA => 94.1%\n (name === 'books' && Unicode(0x1f4da)) ||\n // ***\n // U+1F50C\n // https://www.unicompat.com/1F50C => 94.1%\n (name === 'plug' && Unicode(0x1f50c)) ||\n // ***\n // U+1F30D\n // https://www.unicompat.com/1F30D => 88.8%\n (name === 'earth' && Unicode(0x1f30d)) ||\n // ***\n // U+2699\n // https://www.unicompat.com/2699 => 94.1%\n (name === 'gear' && Unicode(0x2699)) ||\n // ***\n // U+2764\n // https://emojipedia.org/red-heart/\n // https://www.unicompat.com/2764 => 94.4%\n // https://www.unicompat.com/2764-FE0F => 92.4%\n (name === 'red-heart' && Unicode(0x2764, { fontFamily: 'emoji' })) ||\n // U+26A1\n // https://www.unicompat.com/26A1 => 94.1%\n (name === 'high-voltage' && Unicode(0x26a1)) ||\n // U+2728\n // https://emojipedia.org/sparkles/\n // https://www.unicompat.com/2728 => 94.1%\n (name === 'sparkles' && Unicode(0x2728)) ||\n // ***\n // U+1F48E\n // https://emojipedia.org/gem-stone/\n // https://www.unicompat.com/1F48E => 94.1%\n (name === 'gem-stone' && Unicode(0x1f48e)) ||\n // ***\n // 0x1F3C6\n // https://emojipedia.org/trophy/\n // https://www.unicompat.com/1F3C6 => 94.1%\n (name === 'trophy' && Unicode(0x1f3c6)) ||\n false\n /* ======= Unused ========\n // ***\n // U+1FAA8\n // https://emojipedia.org/rock/\n // https://www.unicompat.com/1faa8 => 20.7%\n //\n // ***\n // U+26F0\n // https://emojipedia.org/mountain/\n // https://iconify.design/icon-sets/noto/mountain.html\n // https://www.unicompat.com/26F0 => 89.3%\n (name === 'mountain' && Img(iconMountain)) ||\n //\n // ***\n // U+2194\n // https://emojipedia.org/left-right-arrow/\n // https://www.unicompat.com/2194 => 95.0%\n // Couldn't manage to show colored version\n (name === 'left-right-arrow' && Unicode(0x2194)) ||\n (name === 'left-right-arrow' && Unicode(0x2194, { fontFamily: 'reset' })) ||\n (name === 'left-right-arrow' && Unicode(0xFE0F)) ||\n (name === 'left-right-arrow' && Unicode(0xFE0F, { fontFamily: 'reset' })) ||\n ======================== */\n\n assert(emoji, { name })\n\n return emoji\n\n function Unicode(codePoint: number, styleAddendum?: React.CSSProperties) {\n const text = String.fromCodePoint(codePoint)\n if (style || styleAddendum) {\n return React.createElement('span', { style: { ...style, ...styleAddendum } }, text)\n } else {\n return React.createElement(React.Fragment, null, text)\n }\n }\n\n function Img(imgSrc: string, width: string = '1.15em') {\n const props = {\n src: imgSrc,\n style: {\n verticalAlign: 'text-top',\n fontSize: '1em',\n width,\n ...style\n }\n }\n return React.createElement('img', props)\n }\n}\n"],"mappings":"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","names":["assert","path","assert"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/assert.ts","../src/utils/isBrowser.ts"],"sourcesContent":["export { assert }\nexport { assertUsage }\n\nfunction assert(condition: unknown, debugInfo?: unknown): asserts condition {\n if (condition) {\n return\n }\n const hasDebugInfo = debugInfo !== undefined\n if (hasDebugInfo) {\n console.log(debugInfo)\n if (typeof debugInfo === 'object') {\n debugInfo = JSON.stringify(debugInfo)\n }\n }\n let errMsg = '[DocPress] Bug. Contact DocPress maintainer.'\n if (hasDebugInfo) {\n errMsg += ' Debug info: ' + String(debugInfo)\n }\n const err = new Error(errMsg)\n if (isBrowserAndDev()) {\n alert(err.stack)\n }\n throw err\n}\n\nfunction assertUsage(condition: unknown, msg: string): asserts condition {\n if (condition) {\n return\n }\n const err = new Error('[DocPress][Wrong Usage] ' + msg)\n if (isBrowserAndDev()) {\n alert(err.stack)\n }\n throw err\n}\n\nfunction isBrowserAndDev() {\n return typeof window !== 'undefined' && window?.location?.port !== ''\n}\n","export { isBrowser }\n\nfunction isBrowser() {\n return typeof window !== 'undefined'\n}\n"],"mappings":";AAGA,SAAS,OAAO,WAAoB,WAAwC;AAC1E,MAAI,WAAW;AACb;AAAA,EACF;AACA,QAAM,eAAe,cAAc;AACnC,MAAI,cAAc;AAChB,YAAQ,IAAI,SAAS;AACrB,QAAI,OAAO,cAAc,UAAU;AACjC,kBAAY,KAAK,UAAU,SAAS;AAAA,IACtC;AAAA,EACF;AACA,MAAI,SAAS;AACb,MAAI,cAAc;AAChB,cAAU,kBAAkB,OAAO,SAAS;AAAA,EAC9C;AACA,QAAM,MAAM,IAAI,MAAM,MAAM;AAC5B,MAAI,gBAAgB,GAAG;AACrB,UAAM,IAAI,KAAK;AAAA,EACjB;AACA,QAAM;AACR;AAEA,SAAS,YAAY,WAAoB,KAAgC;AACvE,MAAI,WAAW;AACb;AAAA,EACF;AACA,QAAM,MAAM,IAAI,MAAM,6BAA6B,GAAG;AACtD,MAAI,gBAAgB,GAAG;AACrB,UAAM,IAAI,KAAK;AAAA,EACjB;AACA,QAAM;AACR;AAEA,SAAS,kBAAkB;AApC3B;AAqCE,SAAO,OAAO,WAAW,iBAAe,sCAAQ,aAAR,mBAAkB,UAAS;AACrE;;;ACpCA,SAAS,YAAY;AACnB,SAAO,OAAO,WAAW;AAC3B;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/RepoLink.tsx","../src/renderer/usePageContext.tsx","../src/headings.ts"],"sourcesContent":["import React from 'react'\nimport { assert } from '../utils/server'\nimport { usePageContext } from '../renderer/usePageContext'\n\nexport { RepoLink }\nexport { isRepoLink }\n\nfunction isRepoLink(href: string) {\n return ['/examples/', '/docs/', '/boilerplates/', '.github/', '/test/'].some((start) => href.startsWith(start))\n}\n\nfunction RepoLink({ path, text, editMode }: { path: string; text?: string | JSX.Element; editMode?: true }) {\n const pageContext = usePageContext()\n assert(isRepoLink(path), { path })\n text = text || path\n if (!path.startsWith('/')) {\n path = '/' + path\n }\n const viewMode = (editMode && 'edit') || (path.endsWith('/') && 'tree') || 'blob'\n const { githubRepository } = pageContext.config.projectInfo\n assert(githubRepository.startsWith('https://github.com/'))\n const href = `${githubRepository}/${viewMode}/main${path}`\n return <a href={href}>{text}</a>\n}\n","// `usePageContext` allows us to access `pageContext` in any React component.\n// More infos: https://vite-plugin-ssr.com/pageContext-anywhere\n\nimport React, { useContext } from 'react'\nimport type { PageContextResolved } from '../config/resolvePageContext'\n\nexport { PageContextProvider }\nexport { usePageContext }\n\nconst Context = React.createContext<PageContextResolved>(undefined as any)\n\nfunction PageContextProvider({\n pageContext,\n children\n}: {\n pageContext: PageContextResolved\n children: React.ReactNode\n}) {\n return <Context.Provider value={pageContext}>{children}</Context.Provider>\n}\n\nfunction usePageContext(): PageContextResolved {\n const pageContext = useContext(Context)\n return pageContext\n}\n","import React from 'react'\nimport { assert, Emoji, EmojiName } from './utils/server'\n\nexport { getHeadings }\nexport { parseTitle }\n\nexport type Heading = Omit<HeadingDefinition, 'title' | 'titleInNav'> & {\n title: JSX.Element\n titleInNav: JSX.Element\n parentHeadings: Heading[]\n // Not sure why this is needed\n isListTitle?: true\n sectionTitles?: string[]\n}\nexport type HeadingWithoutLink = {\n url: string\n title: string | JSX.Element\n}\nexport type HeadingDefinition = HeadingBase &\n (\n | ({ level: 1; titleEmoji: EmojiName } & HeadingAbstract)\n | ({ level: 4 } & HeadingAbstract)\n | {\n level: 2\n isListTitle?: true\n sectionTitles?: string[]\n url: string\n }\n | {\n level: 3\n url: string\n }\n )\ntype HeadingBase = {\n title: string\n level: number\n url?: string\n titleDocument?: string\n titleInNav?: string\n // titleSize?: string\n}\ntype HeadingAbstract = {\n url?: undefined\n titleDocument?: undefined\n titleInNav?: undefined\n}\n\nfunction getHeadings(config: { headings: HeadingDefinition[]; headingsWithoutLink: HeadingWithoutLink[] }): {\n headings: Heading[]\n headingsWithoutLink: HeadingWithoutLink[]\n} {\n const headingsWithoutParent: Omit<Heading, 'parentHeadings'>[] = config.headings.map((heading: HeadingDefinition) => {\n const titleProcessed: JSX.Element = parseTitle(heading.title)\n\n const titleInNav = heading.titleInNav || heading.title\n let titleInNavProcessed: JSX.Element\n if ('isListTitle' in heading) {\n assert(heading.isListTitle === true)\n let titleParsed: JSX.Element = parseTitle(titleInNav)\n // if (heading.titleSize) {\n // titleParsed = React.createElement('span', { style: { fontSize: heading.titleSize } }, titleParsed)\n // }\n titleInNavProcessed = React.createElement(React.Fragment, {}, getListPrefix(), titleParsed)\n } else {\n titleInNavProcessed = parseTitle(titleInNav)\n }\n if ('titleEmoji' in heading) {\n assert(heading.titleEmoji)\n titleInNavProcessed = withEmoji(heading.titleEmoji, titleInNavProcessed)\n }\n\n const headingProcessed: Omit<Heading, 'parentHeadings'> = {\n ...heading,\n title: titleProcessed,\n titleInNav: titleInNavProcessed\n }\n return headingProcessed\n })\n\n const headings: Heading[] = []\n headingsWithoutParent.forEach((heading) => {\n const parentHeadings = findParentHeadings(heading, headings)\n headings.push({ ...heading, parentHeadings })\n })\n\n const headingsWithoutLink = config.headingsWithoutLink.map((headingsWithoutLink) => {\n const { url, title } = headingsWithoutLink\n assert(\n headings.find((heading) => heading.url === url) === undefined,\n `remove ${headingsWithoutLink.url} from headingsWithoutLink`\n )\n const titleProcessed = typeof title === 'string' ? parseTitle(title) : title\n return {\n ...headingsWithoutLink,\n title: titleProcessed\n }\n })\n\n assertHeadingsUrl([...headings, ...headingsWithoutLink])\n return { headings, headingsWithoutLink }\n}\n\nfunction findParentHeadings(heading: Omit<Heading, 'parentHeadings'>, headings: Heading[]) {\n const parentHeadings: Heading[] = []\n let levelCurrent = heading.level\n let listTitleParentFound = false\n headings\n .slice()\n .reverse()\n .forEach((parentCandidate) => {\n let isListTitleParent = false\n if (\n !listTitleParentFound &&\n levelCurrent === heading.level &&\n parentCandidate.level === heading.level &&\n !parentCandidate.isListTitle &&\n heading.isListTitle\n ) {\n isListTitleParent = true\n listTitleParentFound = true\n }\n\n const isParent = parentCandidate.level < levelCurrent\n\n if (isParent || isListTitleParent) {\n levelCurrent = parentCandidate.level\n parentHeadings.push(parentCandidate)\n }\n })\n return parentHeadings\n}\n\nfunction assertHeadingsUrl(headings: { url?: string }[]) {\n const urls: Record<string, true> = {}\n headings.forEach((heading) => {\n if (heading.url) {\n const { url } = heading\n assert(url.startsWith('/'))\n assert(!urls[url], { url })\n urls[url] = true\n }\n })\n}\n\nfunction getListPrefix() {\n const nonBreakingSpace = String.fromCodePoint(0x00a0)\n const bulletPoint = String.fromCodePoint(0x2022)\n return nonBreakingSpace + bulletPoint + nonBreakingSpace\n}\n\nfunction parseTitle(title: string): JSX.Element {\n type Part = { nodeType: 'text' | 'code'; content: string }\n const parts: Part[] = []\n let current: Part | undefined\n title.split('').forEach((letter) => {\n if (letter === '`') {\n if (current?.nodeType === 'code') {\n // </code>\n parts.push(current)\n current = undefined\n } else {\n // <code>\n if (current) {\n parts.push(current)\n }\n current = { nodeType: 'code', content: '' }\n }\n } else {\n if (!current) {\n current = { nodeType: 'text', content: '' }\n }\n current.content += letter\n }\n })\n if (current) {\n parts.push(current)\n }\n\n const titleJsx = React.createElement(\n React.Fragment,\n {},\n ...parts.map((part, i) =>\n React.createElement(part.nodeType === 'code' ? 'code' : React.Fragment, { key: i }, part.content)\n )\n )\n\n return titleJsx\n}\n\nfunction withEmoji(name: EmojiName, title: string | JSX.Element): JSX.Element {\n const style = { fontSize: '1.4em' }\n //return React.createElement(React.Fragment, null, Emoji({ name, style }), ' ', title)\n return React.createElement(\n 'span',\n { style },\n Emoji({ name }),\n ' ',\n React.createElement('span', { style: { fontSize: '1rem' } }, title)\n )\n}\n"],"mappings":"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","names":["React","React","React","React","headingsWithoutLink"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/features/FeatureList.tsx"],"sourcesContent":["import React from 'react'\nimport './FeatureList.css'\nimport iconChevron from './chevron.svg'\n\nexport { FeatureList }\n\ntype FeatureProps = {\n title: React.ReactNode\n desc: React.ReactNode\n learnMore?: React.ReactNode\n isSecondaryFeature?: true\n}\n\nfunction FeatureList({ features }: { features: FeatureProps[] }) {\n const numberOfFeatures = features.length\n const numberOfRows = Math.ceil(numberOfFeatures / 2)\n return (\n <div id=\"features\">\n {Array.from({ length: numberOfRows }, (_, i) => {\n const feature1Id = 2 * i + 0\n const feature2Id = 2 * i + 1\n const feature1 = features[feature1Id]\n const feature2 = features[feature2Id]\n const className = ['features-row', feature2 ? '' : 'single-column'].filter(Boolean).join(' ')\n return (\n <div className={className} key={i}>\n <Feature {...{ ...feature1, featureId: feature1Id }} />\n {feature2 && <Feature {...{ ...feature2, featureId: feature2Id }} />}\n </div>\n )\n })}\n </div>\n )\n}\n\nfunction Feature({ title, desc, learnMore, isSecondaryFeature, featureId }: FeatureProps & { featureId: number }) {\n const name = `feature-${featureId}`\n const rightSide = featureId % 2 === 1\n return (\n <>\n <FeatureHead name={name} hasLearnMore={!!learnMore} isSecondaryFeature={isSecondaryFeature}>\n {' '}\n <h2>{title}</h2>\n {desc}\n </FeatureHead>\n {!!learnMore && (\n <LearnMore name={name} rightSide={rightSide}>\n {learnMore}\n </LearnMore>\n )}\n </>\n )\n}\n\nfunction FeatureHead({\n children,\n name,\n hasLearnMore,\n isSecondaryFeature,\n className = ''\n}: {\n className?: string\n name?: string\n hasLearnMore?: boolean\n isSecondaryFeature?: true\n children: any\n}) {\n return (\n <summary\n className={[\n className,\n 'feature',\n 'colorize-on-hover',\n hasLearnMore && 'has-learn-more',\n isSecondaryFeature && 'secondary-feature'\n ]\n .filter(Boolean)\n .join(' ')}\n id={name && `feature-${name}`}\n style={{ cursor: (hasLearnMore && 'pointer') || undefined }}\n >\n {children}\n {hasLearnMore && (\n <div style={{ textAlign: 'center', marginTop: '1em' }}>\n <button\n type=\"button\"\n style={{\n textAlign: 'center',\n padding: '0 7px',\n paddingTop: 3,\n paddingBottom: 1,\n display: 'inline-block',\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '1px',\n fontWeight: 600\n }}\n >\n <span className=\"decolorize-5\">Learn more</span>\n <br />\n <img className=\"decolorize-4 chevron\" src={iconChevron} height=\"7\" style={{ marginTop: 2 }} />\n </button>\n </div>\n )}\n </summary>\n )\n}\nfunction LearnMore({ children, name, rightSide }: { name: string; children: any; rightSide: boolean }) {\n return (\n <aside className={'learn-more ' + (rightSide ? 'right-side' : '')} id={`learn-more-${name}`}>\n {children}\n </aside>\n )\n}\n"],"mappings":";AAAA,OAAO,WAAW;;;;;;AAalB,SAAS,YAAY,EAAE,SAAS,GAAiC;AAC/D,QAAM,mBAAmB,SAAS;AAClC,QAAM,eAAe,KAAK,KAAK,mBAAmB,CAAC;AACnD,SACE,oCAAC;AAAA,IAAI,IAAG;AAAA,KACL,MAAM,KAAK,EAAE,QAAQ,aAAa,GAAG,CAAC,GAAG,MAAM;AAC9C,UAAM,aAAa,IAAI,IAAI;AAC3B,UAAM,aAAa,IAAI,IAAI;AAC3B,UAAM,WAAW,SAAS;AAC1B,UAAM,WAAW,SAAS;AAC1B,UAAM,YAAY,CAAC,gBAAgB,WAAW,KAAK,eAAe,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC5F,WACE,oCAAC;AAAA,MAAI;AAAA,MAAsB,KAAK;AAAA,OAC9B,oCAAC;AAAA,MAAS,GAAG,EAAE,GAAG,UAAU,WAAW,WAAW;AAAA,KAAG,GACpD,YAAY,oCAAC;AAAA,MAAS,GAAG,EAAE,GAAG,UAAU,WAAW,WAAW;AAAA,KAAG,CACpE;AAAA,EAEJ,CAAC,CACH;AAEJ;AAEA,SAAS,QAAQ,EAAE,OAAO,MAAM,WAAW,oBAAoB,UAAU,GAAyC;AAChH,QAAM,OAAO,WAAW;AACxB,QAAM,YAAY,YAAY,MAAM;AACpC,SACE,0DACE,oCAAC;AAAA,IAAY;AAAA,IAAY,cAAc,CAAC,CAAC;AAAA,IAAW;AAAA,KACjD,KACD,oCAAC,YAAI,KAAM,GACV,IACH,GACC,CAAC,CAAC,aACD,oCAAC;AAAA,IAAU;AAAA,IAAY;AAAA,KACpB,SACH,CAEJ;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,GAMG;AACD,SACE,oCAAC;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,sBAAsB;AAAA,IACxB,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACX,IAAI,QAAQ,WAAW;AAAA,IACvB,OAAO,EAAE,QAAS,gBAAgB,aAAc,OAAU;AAAA,KAEzD,UACA,gBACC,oCAAC;AAAA,IAAI,OAAO,EAAE,WAAW,UAAU,WAAW,MAAM;AAAA,KAClD,oCAAC;AAAA,IACC,MAAK;AAAA,IACL,OAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,SAAS;AAAA,MACT,UAAU;AAAA,MACV,eAAe;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,IACd;AAAA,KAEA,oCAAC;AAAA,IAAK,WAAU;AAAA,KAAe,YAAU,GACzC,oCAAC,UAAG,GACJ,oCAAC;AAAA,IAAI,WAAU;AAAA,IAAuB,KAAK;AAAA,IAAa,QAAO;AAAA,IAAI,OAAO,EAAE,WAAW,EAAE;AAAA,GAAG,CAC9F,CACF,CAEJ;AAEJ;AACA,SAAS,UAAU,EAAE,UAAU,MAAM,UAAU,GAAwD;AACrG,SACE,oCAAC;AAAA,IAAM,WAAW,iBAAiB,YAAY,eAAe;AAAA,IAAK,IAAI,cAAc;AAAA,KAClF,QACH;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/vite.config.ts","../src/markdownHeadingsVitePlugin.ts"],"sourcesContent":["import mdx from '@mdx-js/rollup'\nimport react from '@vitejs/plugin-react-swc'\nimport ssr from 'vite-plugin-ssr/plugin'\nimport { UserConfig } from 'vite'\nimport { markdownHeadingsVitePlugin } from './markdownHeadingsVitePlugin'\nimport rehypePrettyCode from 'rehype-pretty-code'\nimport remarkGfm from 'remark-gfm'\n\nconst root = process.cwd()\nconst prettyCode = [rehypePrettyCode, { theme: 'github-light' }]\nconst rehypePlugins: any = [prettyCode]\nconst remarkPlugins = [remarkGfm]\n\nconst config: UserConfig = {\n root,\n plugins: [\n react(),\n markdownHeadingsVitePlugin(),\n mdx({ rehypePlugins, remarkPlugins }),\n ssr({\n prerender: {\n noExtraDir: true\n },\n // @ts-ignore until new version is released TODO\n extensions: [{\n npmPackageName: '@brillout/docpress',\n pageFilesDist: [\n '@brillout/docpress/renderer/_default.page.server.js',\n '@brillout/docpress/renderer/_default.page.client.js'\n ],\n assetsDir: '/dist/'\n }],\n includeAssetsImportedByServer: true,\n disableAutoFullBuild: true\n })\n ],\n // TODO: remove `react`?\n optimizeDeps: { include: ['@mdx-js/react', 'react', 'react-dom'] },\n // @ts-ignore\n ssr: {\n noExternal: ['@brillout/docpress']\n },\n clearScreen: false\n}\n\nexport default config\n","import { assert, determineSectionUrlHash } from '../src/utils/server'\n\nexport { markdownHeadingsVitePlugin }\nexport type { MarkdownHeading }\n\ntype MarkdownHeading = {\n title: string\n id: string\n headingLevel: number\n titleAddendum?: string\n}\n\nfunction markdownHeadingsVitePlugin() {\n return {\n name: 'mdx-headings',\n enforce: 'pre',\n transform: async (code: string, id: string) => {\n if (!id.includes('.page.') || !id.endsWith('.mdx')) {\n return\n }\n const codeNew = transform(code)\n return codeNew\n }\n }\n}\n\nfunction transform(code: string) {\n const headings: MarkdownHeading[] = []\n let isCodeBlock = false\n let codeNew = code\n .split('\\n')\n .map((line) => {\n // Skip code blocks, e.g.\n // ~~~md\n // # Markdown Example\n // Bla\n // ~~~\n if (line.startsWith('~~~') || line.startsWith('```')) {\n isCodeBlock = !isCodeBlock\n return line\n }\n if (isCodeBlock) {\n return line\n }\n\n if (line.startsWith('#')) {\n const { id, headingLevel, title, headingHtml } = parseMarkdownHeading(line)\n headings.push({ id, headingLevel, title })\n return headingHtml\n }\n if (line.startsWith('<h')) {\n assert(false, { line })\n }\n\n return line\n })\n .join('\\n')\n const headingsExportCode = `export const headings = [${headings\n .map((heading) => JSON.stringify(heading))\n .join(', ')}];`\n codeNew += `\\n\\n${headingsExportCode}\\n`\n return codeNew\n}\n\nfunction parseMarkdownHeading(line: string): MarkdownHeading & { headingHtml: string } {\n const [lineBegin, ...lineWords] = line.split(' ')\n assert(lineBegin.split('#').join('') === '', { line, lineWords })\n const headingLevel = lineBegin.length\n\n const titleMdx = lineWords.join(' ')\n assert(!titleMdx.startsWith(' '), { line, lineWords })\n assert(titleMdx, { line, lineWords })\n\n const id = determineSectionUrlHash(titleMdx)\n const title = titleMdx\n\n const headingHtml = `<h${headingLevel} id=\"${id}\">${parseTitle(title)}</h${headingLevel}>`\n\n const heading = { headingLevel, title, id, headingHtml }\n return heading\n}\n\nfunction parseTitle(titleMarkdown: string): string {\n type Part = { nodeType: 'text' | 'code'; content: string }\n const parts: Part[] = []\n let current: Part | undefined\n titleMarkdown.split('').forEach((letter) => {\n if (letter === '`') {\n if (current?.nodeType === 'code') {\n // </code>\n parts.push(current)\n current = undefined\n } else {\n // <code>\n if (current) {\n parts.push(current)\n }\n current = { nodeType: 'code', content: '' }\n }\n } else {\n if (!current) {\n current = { nodeType: 'text', content: '' }\n }\n current.content += letter\n }\n })\n if (current) {\n parts.push(current)\n }\n\n const titleHtml = parts\n .map((part) => {\n if (part.nodeType === 'code') {\n return `<code>${serializeText(part.content)}</code>`\n } else {\n assert(part.nodeType === 'text', { parts })\n return serializeText(part.content)\n }\n })\n .join('')\n\n return titleHtml\n\n function serializeText(text: string) {\n const textEscaped = text.split(\"'\").join(\"\\\\'\")\n return `{'${textEscaped}'}`\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/cli/index.ts"],"sourcesContent":["import { build, preview } from 'vite'\nimport config from '../vite.config'\nimport { prerender } from 'vite-plugin-ssr/prerender'\nconst args = process.argv.filter(Boolean).slice(2)\nconst isDev = args.includes('dev')\nconst isPreview = args.includes('preview')\nconst isBuild = args.includes('build')\nError.stackTraceLimit = Infinity\n\ncli()\n\nasync function cli() {\n if (isDev) {\n await import('./devServer')\n } else if (isBuild) {\n await build(config)\n await build({ ...config, build: { ssr: true } })\n await prerender({ viteConfig: (config as any) })\n } else if (isPreview) {\n const server = await preview({ ...config, preview: { host: true } })\n server.printUrls()\n } else {\n throw new Error(\n `DocPress: unknown command \\`$ docpress ${args.join(\n ' '\n )}\\`. Known commands: \\`$ docpress dev\\` and \\`$ docpress preview\\`.`\n )\n }\n}\n"],"mappings":";;;;;;;;AAAA,SAAS,OAAO,eAAe;AAE/B,SAAS,iBAAiB;AAC1B,IAAM,OAAO,QAAQ,KAAK,OAAO,OAAO,EAAE,MAAM,CAAC;AACjD,IAAM,QAAQ,KAAK,SAAS,KAAK;AACjC,IAAM,YAAY,KAAK,SAAS,SAAS;AACzC,IAAM,UAAU,KAAK,SAAS,OAAO;AACrC,MAAM,kBAAkB;AAExB,IAAI;AAEJ,eAAe,MAAM;AACnB,MAAI,OAAO;AACT,UAAM,OAAO;AAAA,EACf,WAAW,SAAS;AAClB,UAAM,MAAM,mBAAM;AAClB,UAAM,MAAM,EAAE,GAAG,qBAAQ,OAAO,EAAE,KAAK,KAAK,EAAE,CAAC;AAC/C,UAAM,UAAU,EAAE,YAAa,oBAAe,CAAC;AAAA,EACjD,WAAW,WAAW;AACpB,UAAM,SAAS,MAAM,QAAQ,EAAE,GAAG,qBAAQ,SAAS,EAAE,MAAM,KAAK,EAAE,CAAC;AACnE,WAAO,UAAU;AAAA,EACnB,OAAO;AACL,UAAM,IAAI;AAAA,MACR,0CAA0C,KAAK;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/features/FeatureList.css"],"sourcesContent":["@media screen and (min-width: 840px) {\n .features-row {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n }\n .features-row summary:nth-of-type(1) {\n grid-row: 1;\n grid-column: 1 / 2;\n }\n .features-row summary:nth-of-type(2) {\n grid-row: 1;\n grid-column: 2 / 3;\n }\n .features-row aside {\n grid-row: 2;\n grid-column: 1 / 3;\n }\n}\n\n@media screen and (min-width: 840px) {\n .features-row.single-column .feature {\n grid-column: 1 / span 2 !important;\n width: 100% !important;\n max-width: calc(1010px / 2) !important;\n margin: auto !important;\n }\n}\n\n#features {\n margin: auto;\n margin-top: 0;\n max-width: 1080px;\n}\n\n#features summary p {\n margin: 10px 0;\n}\n#features h2 {\n margin-bottom: 0.7em;\n margin-top: 0.5em;\n}\n#features .secondary-feature h2 {\n font-size: 1.1em;\n margin-bottom: 0.7em;\n}\n.learn-more h3:first-of-type {\n margin-top: 15px;\n}\n\n.learn-more {\n border: var(--border-width) solid var(--border-color);\n padding: 10px 8px;\n}\n@media screen and (min-width: 840px) {\n .learn-more {\n max-width: 886px;\n border-radius: var(--border-radius);\n }\n}\naside.learn-more:not(.right-side) {\n border-top-left-radius: 0;\n}\naside.learn-more.right-side {\n border-top-right-radius: 0;\n justify-self: end;\n width: 100%;\n}\n@media screen and (max-width: 340px) {\n .learn-more {\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n.learn-more {\n display: none;\n}\n.learn-more.selected {\n display: block;\n}\n#features {\n --border-radius: 20px;\n --border-width: 10px;\n --border-color: #f6f6f6;\n}\n.feature {\n padding: 8px;\n border-width: var(--border-width);\n border-style: solid;\n border-color: transparent;\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n}\n.selected {\n border-color: var(--border-color);\n background-color: #fcfcfc;\n}\n.feature.selected {\n border-bottom: 0 !important;\n z-index: 1;\n}\n\n/* Hide top border of .learn-more */\n.learn-more {\n position: relative;\n top: calc(-1 * var(--border-width));\n}\n.feature {\n position: relative;\n z-index: 1;\n}\n\n.feature .chevron {\n transition: filter 0.3s ease-in-out, transform 0.3s ease-in-out !important;\n}\n.feature.selected .chevron {\n transform: rotate(180deg);\n}\n"],"mappings":";AAAA;AACE;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAAA;AAIJ;AACE;AACE;AACA;AACA;AACA;AAAA;AAAA;AAIJ;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAEF;AACE;AACE;AACA;AAAA;AAAA;AAGJ;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACE;AACA;AAAA;AAAA;AAGJ;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAIF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/features/initFeatureList.ts"],"sourcesContent":["import { assert } from '../../utils/client'\n\naddTwitterWidgets()\naddFeatureClickHandlers()\nwindow.__docpress_hydrationFinished = true\n\nfunction addTwitterWidgets() {\n loadScript('https://platform.twitter.com/widgets.js')\n}\n\nfunction addFeatureClickHandlers() {\n const featureEls: HTMLElement[] = Array.from(\n document.getElementById('features')!.querySelectorAll('.feature.has-learn-more')\n )\n featureEls.forEach((featureEl) => {\n featureEl.onclick = () => {\n expandLearnMore(featureEl)\n }\n })\n}\n\nfunction expandLearnMore(featureEl: HTMLElement) {\n const featureId = featureEl.id\n assert(featureId.startsWith('feature-'), { featureId })\n const featureName = featureId.slice('feature-'.length)\n\n const selectedClass = 'selected'\n const learnId = 'learn-more-' + featureName\n const learnEl = document.getElementById(learnId)\n assert(learnEl, { learnId })\n\n const isExpanded = featureEl.classList.contains(selectedClass)\n\n if (!isExpanded) {\n const rowEl = featureEl.parentNode as HTMLElement\n if (getComputedStyle(rowEl, 'display') === 'grid') {\n ;[\n ...(rowEl.querySelectorAll('.learn-more') as any as HTMLElement[]),\n ...(rowEl.querySelectorAll('.feature') as any as HTMLElement[])\n ].forEach((el) => {\n el.classList.remove(selectedClass)\n })\n }\n }\n\n ;[featureEl, learnEl].forEach((el) => {\n el.classList.toggle(selectedClass)\n })\n}\n\nfunction loadScript(scriptUrl: string): void {\n assert(scriptUrl.startsWith('https://'))\n const scriptEl = document.createElement('script')\n scriptEl.src = scriptUrl\n scriptEl.async = true\n scriptEl.setAttribute('charset', 'utf-8')\n document.getElementsByTagName('head')[0].appendChild(scriptEl)\n}\n\nfunction getComputedStyle(el: HTMLElement, styleProp: string) {\n return window.document.defaultView!.getComputedStyle(el).getPropertyValue(styleProp)\n}\n\ndeclare global {\n var __docpress_hydrationFinished: undefined | true\n}\n"],"mappings":";;;;;;AAEA,kBAAkB;AAClB,wBAAwB;AACxB,OAAO,+BAA+B;AAEtC,SAAS,oBAAoB;AAC3B,aAAW,yCAAyC;AACtD;AAEA,SAAS,0BAA0B;AACjC,QAAM,aAA4B,MAAM;AAAA,IACtC,SAAS,eAAe,UAAU,EAAG,iBAAiB,yBAAyB;AAAA,EACjF;AACA,aAAW,QAAQ,CAAC,cAAc;AAChC,cAAU,UAAU,MAAM;AACxB,sBAAgB,SAAS;AAAA,IAC3B;AAAA,EACF,CAAC;AACH;AAEA,SAAS,gBAAgB,WAAwB;AAC/C,QAAM,YAAY,UAAU;AAC5B,SAAO,UAAU,WAAW,UAAU,GAAG,EAAE,UAAU,CAAC;AACtD,QAAM,cAAc,UAAU,MAAM,WAAW,MAAM;AAErD,QAAM,gBAAgB;AACtB,QAAM,UAAU,gBAAgB;AAChC,QAAM,UAAU,SAAS,eAAe,OAAO;AAC/C,SAAO,SAAS,EAAE,QAAQ,CAAC;AAE3B,QAAM,aAAa,UAAU,UAAU,SAAS,aAAa;AAE7D,MAAI,CAAC,YAAY;AACf,UAAM,QAAQ,UAAU;AACxB,QAAI,iBAAiB,OAAO,SAAS,MAAM,QAAQ;AACjD;AAAC;AAAA,QACC,GAAI,MAAM,iBAAiB,aAAa;AAAA,QACxC,GAAI,MAAM,iBAAiB,UAAU;AAAA,MACvC,EAAE,QAAQ,CAAC,OAAO;AAChB,WAAG,UAAU,OAAO,aAAa;AAAA,MACnC,CAAC;AAAA,IACH;AAAA,EACF;AAEA;AAAC,GAAC,WAAW,OAAO,EAAE,QAAQ,CAAC,OAAO;AACpC,OAAG,UAAU,OAAO,aAAa;AAAA,EACnC,CAAC;AACH;AAEA,SAAS,WAAW,WAAyB;AAC3C,SAAO,UAAU,WAAW,UAAU,CAAC;AACvC,QAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,WAAS,MAAM;AACf,WAAS,QAAQ;AACjB,WAAS,aAAa,WAAW,OAAO;AACxC,WAAS,qBAAqB,MAAM,EAAE,GAAG,YAAY,QAAQ;AAC/D;AAEA,SAAS,iBAAiB,IAAiB,WAAmB;AAC5D,SAAO,OAAO,SAAS,YAAa,iBAAiB,EAAE,EAAE,iBAAiB,SAAS;AACrF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/devServer.ts"],"sourcesContent":["import express from 'express'\nimport * as vite from 'vite'\nimport { renderPage } from 'vite-plugin-ssr'\nimport config from '../vite.config'\nconst viteVersion = (vite as { version?: string }).version || '2.?.?'\n\nstartServer()\n\nasync function startServer() {\n const app = express()\n\n const viteDevServer = await vite.createServer({\n ...config,\n server: { middlewareMode: viteVersion.startsWith('2') ? 'ssr' : true }\n })\n app.use(viteDevServer.middlewares)\n\n app.get('*', async (req, res, next) => {\n const pageContextInit = {\n urlOriginal: req.originalUrl\n }\n const pageContext = await renderPage(pageContextInit)\n if (!pageContext.httpResponse) return next()\n const { body, statusCode, contentType } = pageContext.httpResponse\n res.status(statusCode).type(contentType).send(body)\n })\n\n const port = 3000\n app.listen(port)\n console.log(`Server running at http://localhost:${port}`)\n}\n"],"mappings":";;;;;;;;AAAA,OAAO,aAAa;AACpB,YAAY,UAAU;AACtB,SAAS,kBAAkB;AAE3B,IAAM,cAA6C,gBAAW;AAE9D,YAAY;AAEZ,eAAe,cAAc;AAC3B,QAAM,MAAM,QAAQ;AAEpB,QAAM,gBAAgB,MAAW,kBAAa;AAAA,IAC5C,GAAG;AAAA,IACH,QAAQ,EAAE,gBAAgB,YAAY,WAAW,GAAG,IAAI,QAAQ,KAAK;AAAA,EACvE,CAAC;AACD,MAAI,IAAI,cAAc,WAAW;AAEjC,MAAI,IAAI,KAAK,OAAO,KAAK,KAAK,SAAS;AACrC,UAAM,kBAAkB;AAAA,MACtB,aAAa,IAAI;AAAA,IACnB;AACA,UAAM,cAAc,MAAM,WAAW,eAAe;AACpD,QAAI,CAAC,YAAY;AAAc,aAAO,KAAK;AAC3C,UAAM,EAAE,MAAM,YAAY,YAAY,IAAI,YAAY;AACtD,QAAI,OAAO,UAAU,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI;AAAA,EACpD,CAAC;AAED,QAAM,OAAO;AACb,MAAI,OAAO,IAAI;AACf,UAAQ,IAAI,sCAAsC,MAAM;AAC1D;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/P.css","../src/components/features/FeatureList.css"],"sourcesContent":["/* Copied from Chrome's user agent stylesheet */\ndiv.paragraph {\n display: block;\n margin-block-start: 1em;\n margin-block-end: 1em;\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n}\n","@media screen and (min-width: 840px) {\n .features-row {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n }\n .features-row summary:nth-of-type(1) {\n grid-row: 1;\n grid-column: 1 / 2;\n }\n .features-row summary:nth-of-type(2) {\n grid-row: 1;\n grid-column: 2 / 3;\n }\n .features-row aside {\n grid-row: 2;\n grid-column: 1 / 3;\n }\n}\n\n@media screen and (min-width: 840px) {\n .features-row.single-column .feature {\n grid-column: 1 / span 2 !important;\n width: 100% !important;\n max-width: calc(1010px / 2) !important;\n margin: auto !important;\n }\n}\n\n#features {\n margin: auto;\n margin-top: 0;\n max-width: 1080px;\n}\n\n#features summary p {\n margin: 10px 0;\n}\n#features h2 {\n margin-bottom: 0.7em;\n margin-top: 0.5em;\n}\n#features .secondary-feature h2 {\n font-size: 1.1em;\n margin-bottom: 0.7em;\n}\n.learn-more h3:first-of-type {\n margin-top: 15px;\n}\n\n.learn-more {\n border: var(--border-width) solid var(--border-color);\n padding: 10px 8px;\n}\n@media screen and (min-width: 840px) {\n .learn-more {\n max-width: 886px;\n border-radius: var(--border-radius);\n }\n}\naside.learn-more:not(.right-side) {\n border-top-left-radius: 0;\n}\naside.learn-more.right-side {\n border-top-right-radius: 0;\n justify-self: end;\n width: 100%;\n}\n@media screen and (max-width: 340px) {\n .learn-more {\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n.learn-more {\n display: none;\n}\n.learn-more.selected {\n display: block;\n}\n#features {\n --border-radius: 20px;\n --border-width: 10px;\n --border-color: #f6f6f6;\n}\n.feature {\n padding: 8px;\n border-width: var(--border-width);\n border-style: solid;\n border-color: transparent;\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n}\n.selected {\n border-color: var(--border-color);\n background-color: #fcfcfc;\n}\n.feature.selected {\n border-bottom: 0 !important;\n z-index: 1;\n}\n\n/* Hide top border of .learn-more */\n.learn-more {\n position: relative;\n top: calc(-1 * var(--border-width));\n}\n.feature {\n position: relative;\n z-index: 1;\n}\n\n.feature .chevron {\n transition: filter 0.3s ease-in-out, transform 0.3s ease-in-out !important;\n}\n.feature.selected .chevron {\n transform: rotate(180deg);\n}\n"],"mappings":";AACA;AACE;AACA;AACA;AACA;AACA;AAAA;;;ACNF;AACE;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAAA;AAIJ;AACE;AACE;AACA;AACA;AACA;AAAA;AAAA;AAIJ;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAEF;AACE;AACE;AACA;AAAA;AAAA;AAGJ;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACE;AACA;AAAA;AAAA;AAGJ;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAIF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AAAA;","names":[]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Link.tsx","../src/components/DocLink.tsx","../src/components/P.tsx","../src/components/Info.tsx","../src/components/ReadingRecommendation.tsx","../src/components/Note.tsx","../src/components/ImportMeta.tsx","../src/components/HorizontalLine.tsx","../src/components/Sponsors.tsx","../src/components/CodeBlock.tsx"],"sourcesContent":["import React from 'react'\nimport { DocLink } from './DocLink'\nimport { isRepoLink, RepoLink } from './RepoLink'\n\nexport { Link }\n\nfunction Link(props: {\n href: string\n text?: string | JSX.Element\n noBreadcrumb?: true\n doNotInferSectionTitle?: true\n}) {\n if (isRepoLink(props.href)) {\n return <RepoLink path={props.href} text={props.text} />\n } else {\n return <DocLink {...props} />\n }\n}\n","import React from 'react'\nimport { getHeadings, parseTitle, Heading, HeadingWithoutLink } from '../headings'\nimport { PageContextResolved } from '../config/resolvePageContext'\nimport { usePageContext } from '../renderer/usePageContext'\nimport { assert, assertUsage, determineSectionTitle, determineSectionUrlHash } from '../utils/server'\n\nexport { DocLink }\n\nfunction DocLink({\n href,\n text,\n noBreadcrumb,\n doNotInferSectionTitle\n}: {\n href: string\n text?: string | JSX.Element\n noBreadcrumb?: true\n doNotInferSectionTitle?: true\n}) {\n const pageContext = usePageContext()\n return <a href={href}>{text || getTitle({ href, noBreadcrumb, pageContext, doNotInferSectionTitle })}</a>\n}\n\nfunction getTitle({\n href,\n noBreadcrumb,\n pageContext,\n doNotInferSectionTitle\n}: {\n href: string\n noBreadcrumb: true | undefined\n pageContext: PageContextResolved\n doNotInferSectionTitle: true | undefined\n}): string | JSX.Element {\n let urlHash: string | null = null\n let hrefWithoutHash: string = href\n if (href.includes('#')) {\n ;[hrefWithoutHash, urlHash] = href.split('#')\n }\n const heading = findHeading(hrefWithoutHash, pageContext)\n\n const breadcrumbs: (string | JSX.Element)[] = []\n\n if ('parentHeadings' in heading) {\n breadcrumbs.push(\n ...heading.parentHeadings\n .slice()\n .reverse()\n .map(({ title }) => title)\n )\n }\n\n breadcrumbs.push(heading.title)\n\n if (urlHash) {\n let sectionTitle: string | JSX.Element | undefined = undefined\n if ('sectionTitles' in heading && heading.sectionTitles) {\n heading.sectionTitles.forEach((title) => {\n if (determineSectionUrlHash(title) === urlHash) {\n sectionTitle = parseTitle(title)\n }\n })\n }\n if (!sectionTitle) {\n assertUsage(\n !doNotInferSectionTitle,\n `Page section title not found for <Link href=\"\\`${href}\\`\" doNotInferSectionTitle={true} />.`\n )\n sectionTitle = determineSectionTitle(href, pageContext.config.titleNormalCase)\n }\n breadcrumbs.push(sectionTitle)\n }\n\n {\n const linkIsOnSamePage = heading.url === pageContext.urlPathname\n if (noBreadcrumb || linkIsOnSamePage) {\n return breadcrumbs[breadcrumbs.length - 1]\n }\n }\n\n return (\n <>\n {breadcrumbs.map((title, i) => {\n const seperator = i === 0 ? <></> : ' > '\n return (\n <React.Fragment key={i}>\n {seperator}\n {title}\n </React.Fragment>\n )\n })}\n </>\n )\n}\n\nfunction findHeading(href: string, pageContext: PageContextResolved): Heading | HeadingWithoutLink {\n assert(href.startsWith('/'), `\\`href==='${href}'\\` but should start with \\`/\\`.`)\n const { headings, headingsWithoutLink } = getHeadings(pageContext.config)\n {\n const heading = headingsWithoutLink.find(({ url }) => href === url)\n if (heading) {\n return heading\n }\n }\n const heading = headings.find(({ url }) => href === url)\n assert(heading, `Could not find page \\`${href}\\`. Does it exist?`)\n return heading\n}\n","import React from 'react'\nimport './P.css'\n\nexport { P }\n\nfunction P(props: React.HTMLProps<HTMLDivElement>) {\n return <div {...props} className={'paragraph'} />\n}\n","import React from 'react'\nimport { P } from './P'\n\nexport { Info }\n\nfunction Info({ children }: { children: React.ReactNode }) {\n return (\n <blockquote>\n <P>{children}</P>\n </blockquote>\n )\n}\n","import React from 'react'\nimport { Info } from './Info'\nimport { Link } from './Link'\n\nexport { ReadingRecommendation }\n\nfunction ReadingRecommendation({ tour, links }: { tour?: true; links: string[] }) {\n const multiple = links.length + (tour ? 1 : 0) > 1\n return (\n <Info>\n {multiple ? ' ' : ''}\n <b>Reading Recommendation{multiple ? '.' : ': '}</b>\n {(() => {\n if (!multiple) {\n const link = tour ? <TourLink /> : <Link href={links[0]} />\n return (\n <>\n {link}\n {'.'}\n </>\n )\n }\n return (\n <ul\n style={{\n marginLeft: 18,\n marginTop: 11\n }}\n >\n {tour && (\n <li>\n <TourLink />\n </li>\n )}\n {links.map((link, i) => (\n <li key={i}>\n <Link href={link} />\n </li>\n ))}\n </ul>\n )\n })()}\n </Info>\n )\n}\n\nfunction TourLink() {\n return (\n <>\n <Link href={'/react-tour'} noBreadcrumb={true} /> or <Link href={'/vue-tour'} noBreadcrumb={true} />\n </>\n )\n}\n","export { Note }\n\nimport React from 'react'\nimport { assert } from '../utils/server'\n\nfunction Note({\n type,\n icon,\n children\n}: {\n icon: JSX.Element | string\n type?: 'error' | 'warning'\n children: JSX.Element\n}) {\n assert(type === undefined || ['error', 'warning'].includes(type))\n if (!icon) {\n if (type === 'error') {\n icon = ':no_entry:'\n }\n if (type === 'warning') {\n icon = ':warning:'\n }\n }\n return (\n <blockquote className={type}>\n <div style={{ marginBottom: 20 }} />\n {icon} {children}\n <div style={{ marginTop: 20 }} />\n </blockquote>\n )\n}\n","import React from 'react'\nimport { assert } from '../utils/server'\n\nexport { ImportMeta }\n\nfunction ImportMeta({ prop }: { prop: string }) {\n assert(!prop.startsWith('import'))\n assert(!prop.startsWith('.'))\n const text = 'imp' + 'ort.meta.' + prop\n return <code>{text}</code>\n}\n","import React from 'react'\n\nexport { HorizontalLine }\n\nfunction HorizontalLine({ primary }: { primary?: true }) {\n return (\n <div className={'header-separator-line ' + (primary ? 'primary' : '')} style={{ textAlign: 'center' }}>\n <hr\n style={{\n display: 'inline-block',\n margin: 0,\n border: 0,\n borderTop: '1px solid #eee',\n maxWidth: 500,\n width: '80%'\n }}\n />\n </div>\n )\n}\n","import React from 'react'\nimport iconHeart from '../icons/heart.svg'\nimport { usePageContext } from '../renderer/usePageContext'\nimport { assert, Emoji } from '../utils/server'\nimport ccoliLogo from './Sponsors/companyLogos/ccoli.svg'\nimport contraLogo from './Sponsors/companyLogos/contra.svg'\nimport mfqsLogo from './Sponsors/companyLogos/mfqs.svg'\nimport medalGold from './Sponsors/medalGold.svg'\nimport medalSilver from './Sponsors/medalSilver.svg'\nimport medalBronze from './Sponsors/medalBronze.svg'\nimport labelBgImg from './Sponsors/label.svg'\n\nexport { Sponsors }\n\ntype Plan = 'FREE_SLOT' | 'bronze' | 'silver' | 'gold' | 'platinum'\n\ntype SponsorCompany = {\n companyName: string\n companyLogo: string\n website: string\n plan: Plan\n}\ntype SponsorIndividual = {\n username: string\n}\ntype Sponsor = SponsorCompany | SponsorIndividual\n\nconst sponsors: Sponsor[] = [\n {\n companyName: 'Contra',\n companyLogo: contraLogo,\n plan: 'gold',\n website: 'https://contra.com'\n },\n {\n companyName: 'ccoli',\n companyLogo: ccoliLogo,\n plan: 'silver',\n website: 'https://ccoli.co'\n },\n {\n companyName: 'My Favorite Quilt Store',\n companyLogo: mfqsLogo,\n plan: 'bronze',\n website: 'https://myfavoritequiltstore.com'\n },\n {\n username: 'spacedawwwg'\n },\n {\n username: 'codthing'\n },\n {\n username: 'Junaidhkn'\n },\n {\n username: 'zgfdev'\n }\n]\n\nfunction Sponsors() {\n const pageContext = usePageContext()\n const { projectInfo } = pageContext.config\n return (\n <div style={{ textAlign: 'center', marginTop: 19 }}>\n <a\n className=\"button\"\n href=\"https://github.com/sponsors/brillout\"\n style={{\n color: 'inherit',\n display: 'inline-flex',\n alignItems: 'center',\n padding: '5px 10px',\n marginBottom: 10\n }}\n >\n <img src={iconHeart} height={22} /> <span style={{ marginLeft: 7, fontSize: '1.07em' }}>Sponsor</span>\n </a>\n <div></div>\n <div style={{ maxWidth: 400, display: 'inline-block', marginTop: 12, marginBottom: 12 }}>\n {projectInfo.projectNameJsx || projectInfo.projectName} is free and open source, made possible by wonderful\n sponsors.\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', justifyContent: 'center', alignItems: 'end' }}>\n {sponsors.map((sponsor, i) => (\n <SponsorDiv sponsor={sponsor} key={i} />\n ))}\n </div>\n </div>\n )\n}\n\nfunction SponsorDiv({ sponsor }: { sponsor: Sponsor }) {\n let imgSrc: string\n let imgAlt: string | undefined\n let width: number\n let height: number\n let website: string\n let padding: number\n let backgroundColor = '#f0f0f0'\n let label: null | JSX.Element = null\n if ('username' in sponsor) {\n website = `https://github.com/${sponsor.username}`\n imgSrc = `https://github.com/${sponsor.username}.png?size=30`\n width = 30\n height = 30\n padding = 0\n backgroundColor = 'none'\n } else {\n imgSrc = sponsor.companyLogo\n website = sponsor.website\n const size = getSize(sponsor.plan)\n width = size.width\n height = size.height\n padding = size.padding\n imgAlt = sponsor.companyName\n label = <Label sponsor={sponsor} />\n }\n const marginWidth = 5\n return (\n <a\n href={website}\n style={{\n margin: `10px ${marginWidth}px`\n }}\n >\n {label}\n <div\n style={{\n backgroundColor,\n borderRadius: 7,\n overflow: 'hidden',\n width,\n maxWidth: `calc(100vw - 2 * var(--main-view-padding) - 2 * ${marginWidth}px)`,\n height,\n display: 'flex',\n alignItems: 'center',\n flexDirection: 'column',\n justifyContent: 'center'\n }}\n >\n <img\n style={{ width: `calc(100% - ${padding}px)`, height: height - padding, zIndex: 2 }}\n src={imgSrc}\n alt={imgAlt}\n />\n </div>\n </a>\n )\n}\n\nfunction Label({ sponsor }: { sponsor: Sponsor }) {\n assert(!('username' in sponsor))\n const labelBg = getLabelBg(sponsor)\n const labelIcon = getLabelIcon(sponsor)\n const labelText = getLabelText(sponsor)\n return (\n <div\n style={{\n top: 0,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n position: 'relative',\n paddingBottom: 1\n }}\n >\n {labelBg}\n {labelIcon}\n {labelText}\n </div>\n )\n}\n\nfunction getLabelBg(sponsor: SponsorCompany) {\n const height = sponsor.plan === 'platinum' ? 32 : 24\n return <img src={labelBgImg} style={{ height, position: 'absolute', bottom: 0, zIndex: -1 }} />\n}\n\nfunction getLabelText(sponsor: SponsorCompany) {\n if (sponsor.plan === 'platinum') {\n return <></>\n }\n const letterSpacing = ['bronze', 'silver', 'gold'].includes(sponsor.plan) ? 1 : undefined\n return (\n <>\n {' '}\n <span\n style={{\n zIndex: 1,\n fontSize: '0.82em',\n position: 'relative',\n top: 0,\n fontWeight: 500,\n color: '#666',\n letterSpacing\n }}\n >\n {capitalizeFirstLetter(sponsor.plan)}\n </span>\n </>\n )\n}\n\nfunction getLabelIcon(sponsor: SponsorCompany) {\n let medalSrc: string\n if (sponsor.plan === 'platinum') {\n return <Emoji name=\"trophy\" style={{ fontSize: '1.3em' }} />\n } else if (sponsor.plan === 'gold') {\n medalSrc = medalGold\n } else if (sponsor.plan === 'silver') {\n medalSrc = medalSilver\n } else if (sponsor.plan === 'bronze') {\n medalSrc = medalBronze\n } else {\n assert(false)\n }\n return <img src={medalSrc} style={{ height: 15, zIndex: 1, marginRight: 5 }} />\n}\n\nfunction getSize(plan: Plan) {\n if (plan === 'platinum') {\n assert(false)\n }\n if (plan === 'gold') {\n return { width: 400, height: 150, padding: 95 }\n }\n if (plan === 'silver') {\n return { width: 300, height: 100, padding: 45 }\n }\n if (plan === 'bronze') {\n return { width: 200, height: 70, padding: 30 }\n }\n if (plan === 'FREE_SLOT') {\n return { width: 150, height: 40, padding: 15 }\n }\n assert(false)\n}\n\nfunction capitalizeFirstLetter(word: string): string {\n return word[0].toUpperCase() + word.slice(1)\n}\n","export { CodeBlock }\n\nimport React from 'react'\nimport { assert, objectAssign } from '../utils/server'\n\nfunction CodeBlock({ children, lineBreak }: { children: any; lineBreak?: true }) {\n assert(lineBreak, '`lineBreak: true` is currently the only use case for <CodeBlock>')\n const style = {}\n if (lineBreak) {\n objectAssign(style, {\n wordWrap: 'break-word',\n wordBreak: 'break-all',\n whiteSpace: 'initial',\n paddingRight: '16px !important'\n })\n }\n return (\n <pre>\n <code style={style}>{children}</code>\n </pre>\n )\n}\n"],"mappings":"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","names":["React","heading","React","React","React","React","React","React","React","React","React","React","React","React","React","React","React","React","React"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/css/reset.css","../../src/css/colorize-on-hover.css","../../src/css/heading.css","../../src/css/button.css","../../src/css/link.css","../../src/css/font.css","../../src/css/code/inline.css","../../src/css/code/block.css","../../src/css/code.css","../../src/css/note.css","../../src/css/table.css","../../src/css/tooltip.css","../../src/algolia/DocSearch.css"],"sourcesContent":["* {\n box-sizing: border-box;\n}\nbody {\n margin: 0;\n}\n\n/* Avoid tweet embeds to overflow the body width.\n * Settings `overflow: hidden` to a container doesn't work (This is a CSS bug?) */\niframe {\n max-width: 100%;\n}\n",".colorize-on-hover,\n.colorize-on-hover [class^='decolorize-'],\n.colorize-on-hover [class*=' decolorize-'] {\n transition: filter 0.3s ease-in-out;\n}\n.colorize-on-hover:hover,\n.colorize-on-hover:hover [class^='decolorize-'],\n.colorize-on-hover:hover [class*=' decolorize-'] {\n filter: grayscale(0) opacity(1) !important;\n}\n\n.decolorize-7 {\n filter: grayscale(1) opacity(0.7);\n}\n.decolorize-6 {\n filter: grayscale(1) opacity(0.6);\n}\n.decolorize-5 {\n filter: grayscale(1) opacity(0.5);\n}\n.decolorize-4 {\n filter: grayscale(1) opacity(0.4);\n}\n\n/*\n * Twitter opacity(0.7): #ababab > #868686\n * == Following computation does NOT work ==\n * Discord opacity(0.7): #6c6c6c > (0.7 * (#fff - #ababab) = #868686 = x * (#fff - #6c6c6c) <=> x = 0.7 * ((#fff - #ababab) / (#fff - #6c6c6c)) = 0.7 * ((255 - 171) / (255 - 108)) = 0.4)\n */\n",".doc-page h2 {\n margin-top: 50px;\n margin-bottom: 16px;\n}\n.doc-page h2[id] {\n cursor: pointer;\n position: relative;\n padding-left: 20px;\n margin-left: -20px;\n}\n.doc-page h2[id]:hover::before {\n content: '#';\n position: absolute;\n left: calc(-1 * (0.75em - 20px));\n color: #aaa;\n}\n\n.doc-page h1 + h2 {\n margin-top: 0;\n}\n\n.doc-page h4 {\n margin-top: 32px;\n margin-bottom: 16px;\n}\n","button,\na.button {\n background-color: #fafafa;\n border: 1px solid #aaa;\n border-radius: 5px;\n cursor: pointer;\n}\n","/*\n:root {\n --link-color: #4747ff;\n}\n*/\n\na {\n /*\n color: inherit;\n color: var(--link-color);\n */\n color: #4747ff;\n text-decoration: none;\n}\na > button {\n color: var(--color-text);\n}\n","body {\n font-family: 'Inter';\n}\nbutton {\n font-family: inherit;\n}\nbody {\n --color-text: #323d48;\n color: var(--color-text);\n line-height: 1.5;\n}\n\n@font-face {\n font-family: 'Inter';\n font-weight: 100 900;\n font-stretch: 75% 125%;\n font-style: oblique 0deg 12deg;\n src: url('./Inter-Var.ttf') format('truetype-variations');\n}\n","code {\n padding: 2px 5px;\n}\n\n/*\n * Line breaks in `<code>`:\n * - Avoid them on desktop\n * - Allow them on mobile\n * - Allo them for `<code long>`\n */\ncode {\n display: inline-block;\n}\n@media screen and (max-width: 500px) {\n code {\n word-break: break-word;\n display: inline;\n }\n}\n.inline-code-break code {\n display: inline;\n word-break: break-word;\n}\ncode.long {\n word-break: break-word;\n display: inline;\n}\n","pre > code {\n padding: 16px !important;\n}\n@media screen and (max-width: 900px) {\n pre > code {\n font-size: 0.7em;\n }\n}\npre {\n display: grid;\n}\npre > code {\n padding-right: 0px !important;\n overflow-x: auto;\n}\n\n@media screen and (max-width: 1139px) {\n pre > code {\n font-size: 0.95em;\n }\n}\n@media screen and (max-width: 1040px) {\n pre > code {\n font-size: 0.8em;\n }\n}\n@media screen and (max-width: 940px) {\n pre > code {\n font-size: 0.7em;\n }\n}\n\npre > code {\n display: reset;\n word-break: reset;\n}\n","@import './code/inline.css';\n@import './code/block.css';\n\ncode {\n /*\n background-color: #f4f4f4;\n 0.043137255 = 1 - (#f4 / #ff)\n */\n background-color: rgba(0, 0, 0, 0.043137255);\n border-radius: 4px;\n}\n\n/* Inline */\ncode {\n font-size: 1.1em;\n}\n/* Block */\npre > code {\n font-size: 1em;\n}\n","blockquote {\n --color: 0, 0, 0;\n --color-strengh-bg: 0.7;\n --color-strengh-border: 1.5;\n border-left: 8px solid rgba(var(--color), calc(0.06 * var(--color-strengh-border)));\n background-color: rgba(var(--color), calc(0.03 * var(--color-strengh-bg)));\n margin-left: 0;\n margin-right: 0;\n padding: 4px 16px;\n}\nblockquote.error {\n --color-strengh-bg: 1.7;\n --color-strengh-border: 6;\n --color: 190, 25, 49;\n}\nblockquote.warning {\n --color-strengh-bg: 4;\n --color-strengh-border: 8;\n --color: 255, 204, 50;\n}\nblockquote > p:first-child::before,\n/* blockquote > p:first-of-type::before, */\nblockquote > div.paragraph:first-child::before {\n font-family: emoji;\n content: 'ℹ️';\n margin-right: 4px;\n}\n","table th {\n background-color: #f7f7f7;\n}\ntable {\n border-collapse: collapse;\n}\ntable td,\ntable th {\n padding: 8px;\n border: 1px solid #ccc;\n}\ntable th {\n text-align: left;\n}\n","@import 'balloon-css';\n\n:root {\n --balloon-color: #444;\n --balloon-move: 2px;\n --balloon-font-size: 14px;\n --balloon-border-radius: 5px;\n}\n[aria-label][data-balloon-pos]:after {\n font-family: 'Inter';\n}\n","#docsearch-desktop {\n max-width: 110px !important;\n}\n#docsearch-desktop .DocSearch-Button-Placeholder {\n display: none;\n padding: 0 !important;\n}\n#docsearch-desktop .DocSearch-Search-Icon {\n margin-right: 6px !important;\n}\n#docsearch-desktop .DocSearch-Button {\n margin-right: 3px !important;\n margin-left: 1px !important;\n}\n\n#docsearch-mobile {\n margin-left: auto !important;\n padding-right: 20px !important;\n}\n\n#docsearch-mobile .DocSearch-Button {\n margin-left: 0px !important;\n}\n\n@media screen and (max-width: 339px) {\n #docsearch-mobile {\n padding-right: 6px !important;\n }\n}\n"],"mappings":";;;AAAA;AACE;AAAA;AAEF;AACE;AAAA;AAKF;AACE;AAAA;;;ACVF;AAAA;AAAA;AAGE;AAAA;AAEF;AAAA;AAAA;AAGE;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;;;ACrBF;AACE;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;;;ACvBF;AAAA;AAEE;AACA;AACA;AACA;AAAA;;;ACCF;AAKE;AACA;AAAA;AAEF;AACE;AAAA;;;ACfF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;;;ACjBF;AACE;AAAA;AASF;AACE;AAAA;AAEF;AACE;AACE;AACA;AAAA;AAAA;AAGJ;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;;;ACzBF;AACE;AAAA;AAEF;AACE;AACE;AAAA;AAAA;AAGJ;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAGF;AACE;AACE;AAAA;AAAA;AAGJ;AACE;AACE;AAAA;AAAA;AAGJ;AACE;AACE;AAAA;AAAA;AAIJ;AACE;AACA;AAAA;;;AC/BF;AAKE;AACA;AAAA;AAIF;AACE;AAAA;AAGF;AACE;AAAA;;;AClBF;AACE;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEF;AAAA;AAGE;AACA;AACA;AAAA;;;ACzBF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AAAA;AAEE;AACA;AAAA;AAEF;AACE;AAAA;;;ACVF;AACE;AACA;AACA;AACA;AAAA;AAEF;AACE;AAAA;;;ACTF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACE;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/autoScrollNav.ts","../../src/installSectionUrlHashs.ts","../../src/navigation/navigation-fullscreen/initNavigationFullscreen.ts","../../src/navigation/Navigation.client.ts"],"sourcesContent":["import { assert } from './utils/client'\n\nautoScrollNav()\n\nfunction autoScrollNav() {\n const navigationEl = document.getElementById('navigation-content')\n assert(navigationEl)\n const href = window.location.pathname\n const navLinks: HTMLElement[] = Array.from(navigationEl.querySelectorAll(`a[href=\"${href}\"]`))\n assert(navLinks.length <= 1, { navLinks, href })\n const navLink = navLinks[0]\n if (!navLink) return\n navLink.scrollIntoView({\n /*\n behavior: 'smooth',\n /*/\n behavior: 'auto',\n //*/\n block: 'center',\n inline: 'center'\n })\n}\n","import { assert } from './utils/client'\n\ninstallSectionUrlHashs()\n/* Let browser restore previous scroll\njumpToSection()\n*/\n\nfunction installSectionUrlHashs() {\n const pageContainer = document.querySelector('.doc-page #page-container')\n if (!pageContainer) {\n assert(window.location.pathname === '/')\n return\n }\n const navigationEl = document.getElementById('navigation-content')\n assert(navigationEl)\n const docSections = Array.from(document.querySelectorAll('h2'))\n docSections.forEach((docSection) => {\n const docTitle = docSection.textContent\n assert(docTitle)\n assert(docSection.id, { docSection })\n const urlHash = '#' + docSection.id\n assertNavLink(navigationEl, urlHash)\n docSection.onclick = () => {\n window.location.hash = urlHash\n // The browser doesn't jump if hash doesn't change\n jumpToSection()\n }\n })\n}\n\nfunction assertNavLink(navigationEl: HTMLElement, urlHash: string) {\n const parentNavLinkMatch = Array.from(navigationEl.querySelectorAll(`a[href=\"${window.location.pathname}\"]`))\n assert(parentNavLinkMatch.length <= 1)\n if (parentNavLinkMatch.length === 0) return\n const navLinks: HTMLElement[] = Array.from(navigationEl.querySelectorAll(`a[href=\"${urlHash}\"]`))\n assert(navLinks.length === 1, { urlHash })\n}\n\nfunction jumpToSection() {\n const { hash } = window.location\n if (hash === '' || hash === '#') {\n return\n }\n assert(hash.startsWith('#'))\n const target = document.getElementById(hash.slice(1))\n if (!target) {\n return\n }\n target.scrollIntoView()\n}\n","export { initNavigationFullscreen }\n\nimport { assert } from '../../utils/client'\n\nlet scrollPositionBeforeToggle: number = 0\n\nfunction initNavigationFullscreen() {\n updateColumnWidth()\n window.addEventListener('resize', updateColumnWidth, { passive: true })\n document.getElementById('navigation-fullscreen-button')!.onclick = toggleNavExpend\n document.getElementById('navigation-fullscreen-close')!.onclick = toggleNavExpend\n document.addEventListener(\n // We don't use keydown to not interfere with user pressing `<Esc>` for closing the browser's `<Ctrl-F>` search diablog, see https://stackoverflow.com/questions/66595035/how-to-detect-escape-key-if-search-bar-of-browser-is-open\n 'keydown',\n (ev) => {\n if (ev.key === 'Escape') toggleNavExpend()\n },\n false\n )\n}\n\nfunction toggleNavExpend() {\n const navContainer = document.getElementById('navigation-container')!\n const scrollPos = navContainer.scrollTop\n document.documentElement.classList.toggle('navigation-fullscreen')\n if (scrollPositionBeforeToggle !== undefined) {\n navContainer.scrollTop = scrollPositionBeforeToggle\n }\n scrollPositionBeforeToggle = scrollPos\n}\n\nfunction updateColumnWidth() {\n const navMinWidth = 299\n const navH1Groups = Array.from(document.querySelectorAll('.nav-h1-group'))\n const numberOfColumnsMax = navH1Groups.length\n\n const widthAvailable = getViewportWidth()\n const numberOfColumns = Math.max(1, Math.min(numberOfColumnsMax, Math.floor(widthAvailable / navMinWidth)))\n\n let columns = navH1Groups.map((navH1Group) => {\n const column = [\n {\n element: navH1Group,\n elementHeight: navH1Group.children.length\n }\n ]\n return column\n })\n\n mergeColumns(columns, numberOfColumns)\n\n const navContent = document.getElementById('navigation-content')!\n\n Array.from(navContent.children).forEach((child) => {\n assert(child.className === 'nav-column')\n })\n navContent.innerHTML = ''\n\n columns.forEach((column) => {\n const columnEl = document.createElement('div')\n columnEl.className = 'nav-column'\n column.forEach(({ element }) => {\n columnEl.appendChild(element)\n })\n navContent.appendChild(columnEl)\n })\n\n const navItemMaxWidth = 350\n navContent.style.maxWidth = `${numberOfColumns * navItemMaxWidth}px`\n}\nfunction getViewportWidth(): number {\n // `window.innerWidth` inlcudes scrollbar width: https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n return document.documentElement.clientWidth\n}\n\nfunction mergeColumns<T>(columns: { element: T; elementHeight: number }[][], maxNumberOfColumns: number) {\n assert(columns.length > 0)\n assert(maxNumberOfColumns > 0)\n if (columns.length <= maxNumberOfColumns) {\n return columns\n }\n\n let mergeCandidate = {\n i: -1,\n mergeHeight: Infinity\n }\n for (let i = 0; i <= columns.length - 2; i++) {\n const column1 = columns[i + 0]\n const column2 = columns[i + 1]\n const column1Height = sum(column1.map((c) => c.elementHeight))\n const column2Height = sum(column2.map((c) => c.elementHeight))\n const mergeHeight = column1Height + column2Height\n if (mergeCandidate.mergeHeight > mergeHeight) {\n mergeCandidate = {\n i,\n mergeHeight\n }\n }\n }\n\n {\n const { i } = mergeCandidate\n assert(-1 < i && i < columns.length - 1, { i, columnsLength: columns.length, maxNumberOfColumns })\n columns[i] = [...columns[i], ...columns[i + 1]]\n columns.splice(i + 1, 1)\n }\n\n mergeColumns(columns, maxNumberOfColumns)\n}\n\nfunction sum(arr: number[]): number {\n let total = 0\n arr.forEach((n) => (total += n))\n return total\n}\n","import { initNavigationFullscreen } from './navigation-fullscreen/initNavigationFullscreen'\n\nactivateNavigationMask()\nactivateMenuToggle()\ninitNavigationFullscreen()\n\nfunction activateMenuToggle() {\n const menuToggle = document.getElementById('menu-toggle')!\n menuToggle.onclick = toggleNavigation\n}\n\nfunction activateNavigationMask() {\n const navigationMask = document.getElementById('navigation-mask')!\n navigationMask.onclick = toggleNavigation\n}\n\nfunction toggleNavigation() {\n document.body.classList.toggle('show-menu')\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/navigation/Navigation-layout.css","../../src/navigation/Navigation-items.css","../../src/navigation/Navigation.css","../../src/navigation/navigation-fullscreen/NavigationFullscreenButton.css","../../src/PageLayout.css"],"sourcesContent":[":root {\n --mobile-header-height: 60px;\n --navigation-min-height: 300px;\n --navigation-max-height: 350px;\n}\n#navigation-wrapper {\n min-width: var(--navigation-min-height);\n}\n.doc-page #navigation-wrapper {\n max-width: var(--navigation-max-height);\n}\n.landing-page #navigation-wrapper {\n /* prettier-ignore */\n max-width: min(var(--navigation-max-height), max(var(--navigation-min-height), calc(var(--navigation-min-height) + 100vw - 1240px)));\n}\n#navigation-container {\n /* `position: fixed` doesn't inherit the parent's width */\n position: sticky;\n overflow-y: auto;\n overscroll-behavior: contain;\n border-right: 1px solid #eee;\n}\n#navigation-mask {\n position: fixed;\n width: 100vw;\n height: 100vh;\n top: 0;\n left: 0;\n z-index: 2;\n}\n/* `1140px` is the breaking point that preserves the width of code blocks. */\n/* BEFORE EDITING THIS: also change the `1139px` value below */\n@media screen and (min-width: 1140px) {\n #mobile-header {\n display: none !important;\n }\n #navigation-container {\n height: 100vh;\n top: 0;\n }\n #navigation-mask {\n display: none;\n }\n}\n#navigation-container {\n transition: transform 0.25s ease;\n background: white;\n z-index: 3;\n}\n#page-wrapper {\n margin-left: calc(-1 * var(--navigation-fullscreen-button-width));\n}\n@media screen and (max-width: 1139px) {\n #navigation-header-logo,\n #docsearch {\n display: none !important;\n }\n #navigation-wrapper {\n min-width: 0px !important;\n max-width: 0px !important;\n }\n #navigation-fullscreen-button {\n display: none;\n }\n #page-wrapper {\n margin-left: 0 !important;\n }\n #navigation-container {\n --width: min(100vw, 350px);\n width: var(--width);\n left: 0;\n height: calc(100vh - var(--mobile-header-height));\n top: var(--mobile-header-height);\n padding-top: 20px;\n /* `position: sticky` doesn't seem to work on mobile */\n position: fixed;\n }\n body:not(.show-menu) #navigation-container {\n transform: translateX(calc(-1 * var(--width)));\n }\n body:not(.show-menu) #navigation-mask {\n display: none;\n }\n #mobile-header {\n display: inherit;\n }\n .doc-page h2 {\n --padding-top: calc(var(--mobile-header-height) + 12px) !important;\n }\n}\n\nhtml.navigation-fullscreen #navigation-container {\n width: 100vw;\n height: 100vh;\n overflow-y: scroll;\n position: fixed;\n top: 0;\n left: 0;\n background-color: white;\n}\nhtml.navigation-fullscreen #navigation-header {\n display: none !important;\n}\nhtml.navigation-fullscreen #navigation-content {\n display: flex;\n margin: auto; /* A `max-width` is set by src/navigation/navigation-fullscreen/initNavigationFullscreen.ts */\n}\nhtml.navigation-fullscreen #navigation-content > .nav-column {\n flex-grow: 1;\n max-width: 350px;\n}\nhtml.navigation-fullscreen .nav-column > .nav-h1-group:first-child > .nav-item-h1:first-child {\n margin-top: 0px;\n}\nhtml.navigation-fullscreen {\n /* disable scroll of main view */\n overflow: hidden !important;\n}\n",".nav-item {\n display: block;\n white-space: nowrap;\n overflow-x: hidden;\n --padding-left-global: 9px;\n --padding-left-additional: 0px;\n}\n.nav-item code {\n font-size: 0.9em;\n}\n.nav-item-h1 + .nav-item-h4 {\n margin-top: -2px;\n}\n.nav-item-h4 {\n margin-top: 14px;\n margin-bottom: -1px;\n color: #999;\n font-size: 12px;\n font-weight: 400;\n letter-spacing: 0.15ch;\n padding-left: var(--padding-left-global);\n padding-right: 4px;\n text-decoration: none;\n}\n.nav-column:first-of-type > .nav-h1-group:first-of-type > .nav-item-h1:first-of-type {\n margin-top: 20px;\n}\n.nav-item-h1 {\n margin-top: 30px;\n font-size: 15.4px;\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.15ch;\n color: var(--color-text);\n padding: 12px 0;\n padding-left: calc(var(--padding-left-global) - 2px);\n padding-right: 4px;\n text-decoration: none;\n}\n.nav-item-h2 {\n text-decoration: none;\n font-size: 14.4px;\n font-weight: 400;\n letter-spacing: 0.15ch;\n color: var(--color-text);\n padding-left: var(--padding-left-global);\n padding-right: 0;\n --padding: 4px;\n padding-top: var(--padding);\n padding-bottom: var(--padding);\n}\n.nav-item-h3 {\n font-size: 12px;\n font-weight: 400;\n letter-spacing: 0.15ch;\n color: var(--color-text);\n text-decoration: none;\n --padding: 5px;\n\n background-color: #f9f9f9;\n padding: var(--padding) 0;\n padding-left: calc(var(--padding-left-global) + var(--padding-left-additional));\n}\nhtml.navigation-fullscreen .nav-item-h3 {\n border-right: 4px solid #eee;\n}\n.nav-item-h3.nav-item-first-of-its-kind {\n padding-top: calc(var(--padding) * 1.6);\n}\n.nav-item-h3.nav-item-last-of-its-kind {\n padding-bottom: calc(var(--padding) * 2);\n}\n.nav-item-h2,\n.nav-item-h3 {\n position: relative;\n}\n/*\n.nav-item-h2.is-active .nav-item-text{\n background-color: var(--background-color);\n}\n*/\n.nav-item-h2.is-active {\n background-color: var(--background-color);\n}\n.nav-item-h3.is-active:before {\n display: block;\n content: '';\n position: absolute;\n width: 4px;\n left: 0;\n top: 0;\n height: 100%;\n background-color: var(--background-color);\n z-index: 10;\n}\n.nav-item-h3.is-active-last:after {\n display: block;\n content: '';\n position: absolute;\n height: 4px;\n left: 0;\n bottom: 0;\n width: 100%;\n background-color: var(--background-color);\n z-index: 10;\n border-bottom-left-radius: 5px;\n}\nhtml.navigation-fullscreen .nav-item {\n --expend-border-radius: 5px;\n}\n.nav-item.is-active-first {\n border-top-left-radius: 5px;\n border-top-right-radius: var(--expend-border-radius);\n}\n.nav-item.is-active-last,\n.nav-item.is-active-last:before {\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: var(--expend-border-radius);\n}\n.nav-item-h3.nav-item-parent-is-list-heading {\n --padding-left-additional: 21px;\n}\n","@import './Navigation-layout.css';\n@import './Navigation-items.css';\n@import './Navigation-highlight.css';\n\n#navigation-container {\n --background-color: #f0f0f0;\n padding-bottom: 70px;\n}\n\nhtml.navigation-fullscreen #detached-note {\n display: none;\n}\n",":root {\n --navigation-fullscreen-button-width: 20px;\n}\n#navigation-fullscreen-button {\n width: var(--navigation-fullscreen-button-width);\n position: relative;\n z-index: 2;\n}\n#navigation-wrapper:hover + #navigation-fullscreen-button > div > div,\n#navigation-fullscreen-button:hover > div > div {\n left: 0px;\n}\n#navigation-fullscreen-button > div > div {\n transition: all 0.3s ease-in-out;\n left: -20px;\n position: absolute;\n height: 100%;\n width: 100%;\n background-color: #eee !important;\n background: url('./chevron.svg');\n background-repeat: no-repeat;\n background-position: center center;\n}\n\nhtml:not(.navigation-fullscreen) #navigation-fullscreen-close {\n display: none;\n}\n\nhtml.navigation-fullscreen #page-content {\n /* Make `Ctrl-F` browser search only crawl the navigation menu */\n visibility: hidden;\n}\n",".doc-page #page-container {\n padding-bottom: 100px;\n}\n\n#page-layout {\n display: flex;\n justify-content: center;\n}\n#page-layout > #navigation-wrapper,\n#page-layout > #page-wrapper {\n flex-grow: 1;\n}\n/* Avoid overflow, see https://stackoverflow.com/questions/36230944/prevent-flex-items-from-overflowing-a-container/66689926#66689926 */\n#page-layout > #page-wrapper {\n min-width: 0;\n}\n\n.doc-page #page-wrapper {\n --main-view-max-width: 800px;\n}\n.landing-page #page-wrapper {\n --main-view-max-width: 1010px;\n}\n#page-wrapper {\n max-width: calc(var(--main-view-max-width) + 80px);\n}\n#page-content {\n box-sizing: content-box;\n max-width: var(--main-view-max-width);\n padding: 20px var(--main-view-padding);\n margin: auto;\n}\n\n#page-content {\n --main-view-padding: 20px;\n}\n@media screen and (max-width: 1139px) {\n #page-content {\n --main-view-padding: 10px;\n }\n}\n"],"mappings":";AAAA;AACE;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AAEE;AAAA;AAEF;AAEE;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAIF;AACE;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAAA;AAGJ;AACE;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAAA;AAIJ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AAEE;AAAA;;;ACpHF;AACE;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AAAA;AAEE;AAAA;AAOF;AACE;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AAAA;AAEF;AAAA;AAEE;AACA;AAAA;AAEF;AACE;AAAA;;;;;ACpHF;AACE;AACA;AAAA;AAGF;AACE;AAAA;;;ACVF;AACE;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AAAA;AAEE;AAAA;AAEF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAEE;AAAA;;;AC9BF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAEF;AAAA;AAEE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AAAA;AAEF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAEF;AACE;AACE;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/renderer/_default.page.server.tsx","../../src/PageLayout.tsx","../../src/navigation/Navigation.tsx","../../src/navigation/NavigationHeader.tsx","../../src/navigation/navigation-fullscreen/NavigationFullscreenButton.tsx","../../src/MobileHeader.tsx","../../src/components/EditPageNote.tsx","../../src/config/getConfig.ts","../../src/config/resolvePageContext.ts","../../src/algolia/DocSearch.ts","../../src/parseEmojis.ts"],"sourcesContent":["import ReactDOMServer from 'react-dom/server'\nimport React from 'react'\nimport { escapeInject, dangerouslySkipEscape } from 'vite-plugin-ssr'\nimport { PageLayout } from '../PageLayout'\nimport { resolvePageContext, PageContextOriginal } from '../config/resolvePageContext'\nimport { getDocSearchJS, getDocSearchCSS } from '../algolia/DocSearch'\nimport { parseEmojis } from '../parseEmojis'\nimport { assert } from '../utils/server'\n\nexport { render }\n\nasync function render(pageContextOriginal: PageContextOriginal) {\n const { Page } = pageContextOriginal\n const pageContextResolved = resolvePageContext(pageContextOriginal)\n\n const page = (\n <PageLayout pageContext={pageContextResolved}>\n <Page />\n </PageLayout>\n )\n\n const descriptionTag = pageContextResolved.isLandingPage\n ? dangerouslySkipEscape(`<meta name=\"description\" content=\"${pageContextResolved.meta.tagline}\" />`)\n : ''\n\n const docSearchJS = getDocSearchJS(pageContextResolved)\n const docSearchCSS = getDocSearchCSS(pageContextResolved)\n\n let pageHtml = ReactDOMServer.renderToString(page)\n pageHtml = parseEmojis(pageHtml)\n\n return escapeInject`<!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" href=\"${pageContextResolved.meta.faviconUrl}\" />\n <title>${pageContextResolved.meta.title}</title>\n ${descriptionTag}\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1,user-scalable=no\" />\n ${docSearchCSS}\n ${getOpenGraphTags(pageContextOriginal.urlPathname, pageContextResolved.meta)}\n </head>\n <body>\n <div id=\"page-view\">${dangerouslySkipEscape(pageHtml)}</div>\n ${docSearchJS}\n </body>\n </html>`\n}\n\nfunction getOpenGraphTags(\n url: string,\n meta: { title: string; tagline: string; websiteUrl: string; twitterHandle: string; bannerUrl?: string }\n) {\n const { title, tagline, websiteUrl, twitterHandle, bannerUrl } = meta\n\n assert(url.startsWith('/'))\n if (url !== '/' || !bannerUrl) return ''\n\n // See view-source:https://vitejs.dev/\n return escapeInject`\n <meta property=\"og:type\" content=\"website\">\n <meta property=\"og:title\" content=\"${title}\">\n <meta property=\"og:image\" content=\"${bannerUrl}\">\n <meta property=\"og:url\" content=\"${websiteUrl}\">\n <meta property=\"og:description\" content=\"${tagline}\">\n <meta name=\"twitter:card\" content=\"summary_large_image\">\n <meta name=\"twitter:site\" content=\"${twitterHandle}\">\n `\n}\n","import React from 'react'\nimport { Navigation, NavigationMask } from './navigation/Navigation'\nimport type { PageContextResolved } from './config/resolvePageContext'\nimport { MobileHeader } from './MobileHeader'\nimport { EditPageNote } from './components/EditPageNote'\nimport { PageContextProvider } from './renderer/usePageContext'\nimport './PageLayout.css'\nimport { NavigationFullscreenButton } from './navigation/navigation-fullscreen/NavigationFullscreenButton'\n\nexport { PageLayout }\n\nfunction PageLayout({ pageContext, children }: { pageContext: PageContextResolved; children: JSX.Element }) {\n const { isLandingPage, pageTitle } = pageContext\n return (\n <React.StrictMode>\n <PageContextProvider pageContext={pageContext}>\n <div id=\"page-layout\" className={isLandingPage ? 'landing-page' : 'doc-page'}>\n <div id=\"navigation-wrapper\">\n <Navigation pageContext={pageContext} />\n </div>\n <NavigationFullscreenButton />\n <div id=\"page-wrapper\">\n <div id=\"page-container\">\n <MobileHeader />\n <div id=\"page-content\">\n {pageTitle && <h1>{pageTitle}</h1>}\n {children}\n {!isLandingPage && <EditPageNote pageContext={pageContext} />}\n </div>\n </div>\n <NavigationMask />\n </div>\n </div>\n </PageContextProvider>\n </React.StrictMode>\n )\n}\n","export { Navigation }\nexport { NavigationMask }\n\nimport React from 'react'\nimport { NavigationHeader } from './NavigationHeader'\nimport { Heading } from '../headings'\nimport { assert, Emoji } from '../utils/server'\nimport './Navigation.css'\nimport { NavigationFullscreenClose } from './navigation-fullscreen/NavigationFullscreenButton'\n\nfunction Navigation({\n pageContext\n}: {\n pageContext: {\n headingsWithSubHeadings: Heading[]\n urlPathname: string\n isDetachedPage: boolean\n }\n}) {\n const { isDetachedPage } = pageContext\n return (\n <>\n <div id=\"navigation-container\">\n <NavigationHeader />\n {isDetachedPage && <DetachedPageNote />}\n <NavigationContent pageContext={pageContext} />\n {/* <ScrollOverlay /> */}\n <NavigationFullscreenClose />\n </div>\n </>\n )\n}\n\nfunction NavigationMask() {\n return <div id=\"navigation-mask\" />\n}\n\nfunction NavigationContent({\n pageContext\n}: {\n pageContext: {\n headingsWithSubHeadings: Heading[]\n urlPathname: string\n isDetachedPage: boolean\n }\n}) {\n const headings = getHeadingsWithComputedProps(pageContext)\n const headingsGrouped = groupHeadings(headings)\n return (\n <div id=\"navigation-content\">\n <div className=\"nav-column\" style={{ position: 'relative' }}>\n {headingsGrouped.map((headingsH1, i) => (\n <div className=\"nav-h1-group\" key={i}>\n <Heading heading={headingsH1} />\n {headingsH1.headings.map((heading, j) => (\n <Heading heading={heading} key={j} />\n ))}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction Heading({\n heading\n}: {\n heading: {\n level: number\n url?: string\n titleInNav: string | JSX.Element\n computed: {\n isActive: boolean\n isActiveFirst: boolean\n isActiveLast: boolean\n isChildOfListHeading: boolean\n isFirstOfItsKind: boolean\n isLastOfItsKind: boolean\n }\n }\n}) {\n assert([1, 2, 3, 4].includes(heading.level), heading)\n return (\n <a\n className={[\n 'nav-item',\n 'nav-item-h' + heading.level,\n heading.computed.isActive && ' is-active',\n heading.computed.isActiveFirst && ' is-active-first',\n heading.computed.isActiveLast && ' is-active-last',\n heading.computed.isChildOfListHeading && 'nav-item-parent-is-list-heading',\n heading.computed.isFirstOfItsKind && 'nav-item-first-of-its-kind',\n heading.computed.isLastOfItsKind && 'nav-item-last-of-its-kind'\n ]\n .filter(Boolean)\n .join(' ')}\n href={heading.url || undefined}\n >\n {/* <span className=\"nav-item-text\">{heading.titleInNav}</span> */}\n {heading.titleInNav}\n </a>\n )\n}\n\nfunction groupHeadings<T extends { level: number }>(headings: T[]) {\n const headingsGrouped: (T & { headings: T[] })[] = []\n headings.forEach((heading) => {\n if (heading.level === 1) {\n headingsGrouped.push({ ...heading, headings: [] })\n } else {\n headingsGrouped[headingsGrouped.length - 1].headings.push(heading)\n }\n })\n return headingsGrouped\n}\n\nfunction getHeadingsWithComputedProps(pageContext: {\n headingsWithSubHeadings: Heading[]\n urlPathname: string\n isDetachedPage: boolean\n}) {\n const { headingsWithSubHeadings, urlPathname } = pageContext\n return headingsWithSubHeadings.map((heading, i) => {\n assert([1, 2, 3, 4].includes(heading.level), heading)\n\n const headingPrevious = headingsWithSubHeadings[i - 1]\n const headingNext = headingsWithSubHeadings[i + 1]\n\n let isActiveFirst = false\n let isActiveLast = false\n let isActive = false\n if (heading.url === urlPathname) {\n assert(heading.level === 2, { urlPathname })\n isActive = true\n isActiveFirst = true\n if (headingNext?.level !== 3) {\n isActiveLast = true\n }\n }\n if (heading.level === 3) {\n isActive = true\n if (headingNext?.level !== 3) {\n isActiveLast = true\n }\n }\n\n const isFirstOfItsKind = heading.level !== headingPrevious?.level\n const isLastOfItsKind = heading.level !== headingNext?.level\n const isChildOfListHeading = !!heading.parentHeadings[0]?.isListTitle\n\n return {\n ...heading,\n computed: {\n isActive,\n isActiveFirst,\n isActiveLast,\n isFirstOfItsKind,\n isLastOfItsKind,\n isChildOfListHeading\n }\n }\n })\n}\n\nfunction ScrollOverlay() {\n // const width = '1px'\n // const color = '#aaa'\n return (\n <div\n id=\"scroll-overlay\"\n style={{\n pointerEvents: 'none',\n position: 'absolute',\n left: '0',\n width: '100%',\n /*\n background: `linear-gradient(to right, ${color} ${width}, transparent ${width}) 0 0,\n linear-gradient(to right, ${color} ${width}, transparent ${width}) 0 100%,\n linear-gradient(to left, ${color} ${width}, transparent ${width}) 100% 0,\n linear-gradient(to left, ${color} ${width}, transparent ${width}) 100% 100%,\n linear-gradient(to bottom, ${color} ${width}, transparent ${width}) 0 0,\n linear-gradient(to bottom, ${color} ${width}, transparent ${width}) 100% 0,\n linear-gradient(to top, ${color} ${width}, transparent ${width}) 0 100%,\n linear-gradient(to top, ${color} ${width}, transparent ${width}) 100% 100%`,\n //*/\n //borderRight: `5px solid ${color}`,\n borderRight: `3px solid #666`,\n //border: `1px solid ${color}`,\n boxSizing: 'border-box',\n // backgroundColor: 'rgba(0,0,0,0.03)',\n backgroundRepeat: 'no-repeat',\n\n backgroundSize: '10px 10px'\n }}\n />\n )\n}\n\nfunction DetachedPageNote() {\n return (\n <div\n id=\"detached-note\"\n style={{\n backgroundColor: 'var(--background-color)',\n textAlign: 'left',\n marginLeft: 10,\n marginRight: 10,\n marginTop: 30,\n marginBottom: -8,\n borderRadius: 5,\n padding: 10\n }}\n >\n <Emoji name=\"info\" />{' '}\n <b>\n <em>Detached</em>\n </b>\n <span\n style={{\n opacity: 0.8\n }}\n >\n {' '}\n &mdash; this page isn't listed in the navigation menu below.\n </span>\n </div>\n )\n}\n","import React from 'react'\nimport iconGithub from '../icons/github.svg'\nimport iconTwitter from '../icons/twitter.svg'\nimport iconDiscord from '../icons/discord.svg'\nimport iconChangelog from '../icons/changelog.svg'\nimport { usePageContext } from '../renderer/usePageContext'\n\nexport { NavigationHeader }\n\nfunction NavigationHeader() {\n const pageContext = usePageContext()\n return (\n <div\n id=\"navigation-header\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n marginBottom: -5\n }}\n >\n <a\n id=\"navigation-header-logo\"\n style={{\n display: 'flex',\n alignItems: 'center',\n color: 'inherit',\n justifyContent: 'left',\n textDecoration: 'none',\n paddingTop: 12,\n paddingBottom: 7\n }}\n href=\"/\"\n >\n {pageContext.config.navHeader}\n </a>\n <Links />\n </div>\n )\n}\n\nfunction Links() {\n const pageContext = usePageContext()\n const { projectInfo } = pageContext.config\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n paddingTop: 0,\n justifyContent: 'left'\n }}\n >\n <SocialLink className=\"decolorize-4\" icon={iconGithub} href={projectInfo.githubRepository} />\n <SocialLink className=\"decolorize-6\" icon={iconDiscord} href={projectInfo.discordInvite} />\n <SocialLink className=\"decolorize-7\" icon={iconTwitter} href={projectInfo.twitterProfile} />\n <div id=\"docsearch-desktop\" />\n <ChangelogButton />\n </div>\n )\n}\n\nfunction ChangelogButton() {\n const pageContext = usePageContext()\n const { projectInfo } = pageContext.config\n return (\n <a\n href={`${projectInfo.githubRepository}/blob/main/CHANGELOG.md`}\n className=\"button colorize-on-hover\"\n style={{\n display: 'flex',\n alignItems: 'center',\n padding: '1px 7px',\n marginLeft: 2,\n fontSize: '0.97em',\n color: 'inherit'\n }}\n >\n <span id=\"version-number\" className=\"decolorize-7\">v{projectInfo.projectVersion}</span>\n <img className=\"decolorize-6\" src={iconChangelog} height={16} style={{ marginLeft: 5 }} />\n </a>\n )\n}\n\nfunction SocialLink({ className, icon, href }: { className: string; icon: string; href: string }) {\n return (\n <>\n <a\n className={'colorize-on-hover ' + className}\n href={href}\n style={{ padding: 3, display: 'inline-block', lineHeight: 0 }}\n >\n <img src={icon} height=\"20\" style={{}} />\n </a>\n </>\n )\n}\n","export { NavigationFullscreenButton }\nexport { NavigationFullscreenClose }\n\nimport React from 'react'\nimport './NavigationFullscreenButton.css'\nimport closeIcon from './close.svg'\n\nfunction NavigationFullscreenButton() {\n return (\n <>\n <a id=\"navigation-fullscreen-button\">\n <div\n style={{\n position: 'fixed',\n cursor: 'pointer',\n height: '100vh',\n width: 20,\n overflow: 'hidden'\n }}\n >\n <div></div>\n </div>\n <div\n style={{ position: 'fixed', height: '100vh', width: 20 }}\n aria-label=\"Press <Esc>\"\n data-balloon-pos=\"right\"\n ></div>\n </a>\n </>\n )\n}\n\nfunction NavigationFullscreenClose() {\n return (\n <a\n id=\"navigation-fullscreen-close\"\n style={{ position: 'fixed', top: 11, right: 15, zIndex: 10 }}\n aria-label=\"Press <Esc>\"\n data-balloon-pos=\"left\"\n >\n <img src={closeIcon} height={50} width={50} style={{ display: 'block' }} />\n </a>\n )\n}\n","import React from 'react'\nimport { usePageContext } from './renderer/usePageContext'\n\nexport { MobileHeader }\n\nfunction MobileHeader() {\n const pageContext = usePageContext()\n return (\n <div\n id=\"mobile-header\"\n style={{\n height: 'var(--mobile-header-height)',\n width: '100vw',\n position: 'relative'\n }}\n >\n <div\n style={{\n position: 'fixed',\n display: 'flex',\n alignItems: 'center',\n background: 'white',\n zIndex: 99,\n top: 0,\n left: 0,\n height: 'var(--mobile-header-height)',\n width: '100%',\n borderBottom: '1px solid #ddd'\n }}\n >\n <MenuToggle />\n <a\n href=\"/\"\n style={{\n color: 'inherit',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'left',\n textDecoration: 'none'\n }}\n >\n {pageContext.config.navHeaderMobile}\n </a>\n <div id=\"docsearch-mobile\" />\n </div>\n </div>\n )\n}\n\nfunction MenuToggle() {\n return (\n <div style={{ padding: 20, lineHeight: 0 }} id=\"menu-toggle\">\n <svg\n style={{ width: 20 }}\n className=\"icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n role=\"img\"\n viewBox=\"0 0 448 512\"\n >\n <path\n fill=\"currentColor\"\n d=\"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z\"\n ></path>\n </svg>\n </div>\n )\n}\n","import React from 'react'\nimport { RepoLink } from './RepoLink'\nimport { Emoji } from '../utils/server'\n\nexport { EditPageNote }\n\nfunction EditPageNote({ pageContext }: { pageContext: { urlPathname: string } }) {\n const text = (\n <>\n <Emoji name=\"writing-hang\" /> Edit this page\n </>\n )\n return (\n <div style={{ marginTop: 50 }}>\n <RepoLink path={'/docs/pages' + pageContext.urlPathname + '.page.server.mdx'} text={text} editMode={true} />\n </div>\n )\n}\n","export { getConfig }\nimport { assert, assertUsage } from '../utils/server'\nimport { Config } from './Config'\n\nfunction getConfig(): Config {\n // We use `@ts-ignore` because the DocPress user most likely didn't add `vite/client` in his `tsconfig.json`.\n // @ts-ignore\n const globResult = import.meta.glob('/**/docpress.config.*([a-zA-Z0-9])', { eager: true })\n const files = Object.keys(globResult)\n assertUsage(files.length >= 1, 'No DocPress config file found `docpress.config.(js|ts|tsx|...)`')\n assertUsage(\n files.length === 1,\n `Found multiple \\`docpress.config.js\\` files: ${files.map((f) => `\\`${f}\\``).join(', ')}. Define only one instead.`\n )\n const config = (Object.values(globResult)[0] as any).default as Config\n assert(config)\n return config\n}\n","import { assert, jsxToTextContent, objectAssign } from '../utils/server'\nimport { getHeadings, HeadingWithoutLink, parseTitle } from '../headings'\nimport type { Heading } from '../headings'\nimport type { PageContextBuiltIn } from 'vite-plugin-ssr'\nimport type { MarkdownHeading } from '../markdownHeadingsVitePlugin'\nimport type { Config } from './Config'\nimport { getConfig } from './getConfig'\n\nexport { resolvePageContext }\nexport type { PageContextOriginal }\nexport type { PageContextResolved }\nexport type { Heading }\n\ntype ReactComponent = () => JSX.Element\ntype Exports = {\n headings?: MarkdownHeading[]\n}\ntype PageContextOriginal = PageContextBuiltIn & {\n Page: ReactComponent\n exports: Exports\n}\ntype PageContextResolved = ReturnType<typeof resolvePageContext>\n\nfunction resolvePageContext(pageContext: PageContextOriginal) {\n const config = getConfig()\n const { headings, headingsWithoutLink } = getHeadings(config)\n const activeHeading = findActiveHeading(headings, headingsWithoutLink, pageContext)\n const headingsWithSubHeadings = getHeadingsWithSubHeadings(headings, pageContext, activeHeading)\n const { title, isLandingPage, pageTitle, isDetachedPage } = getMetaData(\n headingsWithoutLink,\n activeHeading,\n pageContext,\n config\n )\n const { faviconUrl, algolia, tagline, twitterHandle, bannerUrl, websiteUrl } = config\n const pageContextResolved = {}\n objectAssign(pageContextResolved, {\n ...pageContext,\n meta: {\n title,\n faviconUrl,\n twitterHandle,\n bannerUrl,\n websiteUrl,\n tagline,\n algolia\n },\n headings,\n headingsWithSubHeadings,\n isLandingPage,\n isDetachedPage,\n pageTitle,\n config\n })\n return pageContextResolved\n}\n\nfunction getMetaData(\n headingsWithoutLink: HeadingWithoutLink[],\n activeHeading: Heading | null,\n pageContext: { urlOriginal: string; exports: Exports },\n config: Config\n) {\n const url = pageContext.urlOriginal\n\n let title: string\n let pageTitle: string | JSX.Element | null\n let isDetachedPage: boolean\n if (activeHeading) {\n title = activeHeading.titleDocument || jsxToTextContent(activeHeading.title)\n pageTitle = activeHeading.title\n isDetachedPage = false\n } else {\n pageTitle = headingsWithoutLink.find((h) => h.url === url)!.title\n title = jsxToTextContent(pageTitle)\n isDetachedPage = true\n }\n\n const isLandingPage = url === '/'\n if (!isLandingPage) {\n title += ' | ' + config.projectInfo.projectName\n }\n\n if (isLandingPage) {\n pageTitle = null\n }\n\n return { title, isLandingPage, pageTitle, isDetachedPage }\n}\n\nfunction findActiveHeading(\n headings: Heading[],\n headingsWithoutLink: HeadingWithoutLink[],\n pageContext: { urlOriginal: string; exports: Exports }\n): Heading | null {\n let activeHeading: Heading | null = null\n assert(pageContext.urlOriginal)\n const pageUrl = pageContext.urlOriginal\n headings.forEach((heading) => {\n if (heading.url === pageUrl) {\n activeHeading = heading\n assert(heading.level === 2, { pageUrl, heading })\n }\n })\n const debugInfo = {\n msg: 'Heading not found for url: ' + pageUrl,\n urls: headings.map((h) => h.url),\n url: pageUrl\n }\n assert(activeHeading || headingsWithoutLink.find(({ url }) => pageUrl === url), debugInfo)\n return activeHeading\n}\n\nfunction getHeadingsWithSubHeadings(\n headings: Heading[],\n pageContext: { exports: Exports; urlOriginal: string },\n activeHeading: Heading | null\n): Heading[] {\n const headingsWithSubHeadings = headings.slice()\n if (activeHeading === null) return headingsWithSubHeadings\n const activeHeadingIdx = headingsWithSubHeadings.indexOf(activeHeading)\n assert(activeHeadingIdx >= 0)\n const pageHeadings = pageContext.exports.headings || []\n pageHeadings.forEach((pageHeading, i) => {\n const title = parseTitle(pageHeading.title)\n const url = '#' + pageHeading.id\n assert(\n pageHeading.headingLevel !== 3,\n 'Wrong page heading level `' +\n pageHeading.headingLevel +\n '` (it should be `<h2>`) for sub-heading `' +\n pageHeading.title +\n '` of page `' +\n pageContext.urlOriginal +\n '`.'\n )\n if (pageHeading.headingLevel === 2) {\n const heading: Heading = {\n url,\n title,\n parentHeadings: [activeHeading, ...activeHeading.parentHeadings],\n titleInNav: title,\n level: 3\n }\n headingsWithSubHeadings.splice(activeHeadingIdx + 1 + i, 0, heading)\n }\n })\n\n if (activeHeading?.sectionTitles) {\n activeHeading.sectionTitles.forEach((sectionTitle) => {\n const pageHeadingTitles = pageHeadings.map((h) => h.title)\n assert(pageHeadingTitles.includes(sectionTitle), { pageHeadingTitles, sectionTitle })\n })\n }\n\n return headingsWithSubHeadings\n}\n","import { escapeInject } from 'vite-plugin-ssr'\nimport { PageContextResolved } from '../config/resolvePageContext'\n\nexport { getDocSearchCSS }\nexport { getDocSearchJS }\n\nfunction getDocSearchCSS(pageContext: PageContextResolved) {\n const docSearchCSS = !pageContext.meta.algolia\n ? ''\n : escapeInject`\n <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@docsearch/css@alpha\" />\n `\n return docSearchCSS\n}\n\nfunction getDocSearchJS(pageContext: PageContextResolved) {\n const docSearchJS = !pageContext.meta.algolia\n ? ''\n : escapeInject`\n <script type=\"text/javascript\" src=\"https://cdn.jsdelivr.net/npm/@docsearch/js@alpha\"></script>\n <script type=\"text/javascript\">\n docsearch({\n appId: '${pageContext.meta.algolia.appId}',\n apiKey: '${pageContext.meta.algolia.apiKey}',\n indexName: '${pageContext.meta.algolia.indexName}',\n container: '#docsearch-desktop',\n })\n docsearch({\n appId: '${pageContext.meta.algolia.appId}',\n apiKey: '${pageContext.meta.algolia.apiKey}',\n indexName: '${pageContext.meta.algolia.indexName}',\n container: '#docsearch-mobile',\n })\n </script>\n `\n return docSearchJS\n}\n","export { parseEmojis }\n\nimport twemoji from 'twemoji'\n\nconst emojiList = {\n // https://emojipedia.org/no-entry/\n ':no_entry:': 0x26d4,\n // https://emojipedia.org/warning/\n ':warning:': 0x26a0,\n // https://emojipedia.org/trophy/\n ':trophy:': 0x1f3c6\n /*\n // https://emojipedia.org/red-heart/\n ':heart:': 0x2764,\n */\n}\n\nfunction parseEmojis(html: string) {\n Object.entries(emojiList).forEach(([shortcode, codepoint]) => {\n if (!html.includes(shortcode)) {\n return\n }\n const emojiStr = twemoji.convert.fromCodePoint(codepoint as any)\n let emojiImg: any = twemoji.parse(emojiStr, {\n folder: 'svg',\n ext: '.svg'\n })\n const style = 'height: 1.275em; width: 1.275em; vertical-align: -20%'\n emojiImg = emojiImg.replace('<img class=\"emoji\" ', `<img style=\"${style}\" `)\n html = html.split(shortcode).join(emojiImg)\n })\n return html\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,oBAAoB;AAC3B,OAAOA,YAAW;AAClB,SAAS,gBAAAC,eAAc,6BAA6B;;;ACFpD,OAAOC,YAAW;;;ACGlB,OAAOC,YAAW;;;ACHlB,OAAO,WAAW;;;;;;;;;;;;;;;AASlB,SAAS,mBAAmB;AAC1B,QAAM,cAAc,eAAe;AACnC,SACE,oCAAC;AAAA,IACC,IAAG;AAAA,IACH,OAAO;AAAA,MACL,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB;AAAA,KAEA,oCAAC;AAAA,IACC,IAAG;AAAA,IACH,OAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,eAAe;AAAA,IACjB;AAAA,IACA,MAAK;AAAA,KAEJ,YAAY,OAAO,SACtB,GACA,oCAAC,WAAM,CACT;AAEJ;AAEA,SAAS,QAAQ;AACf,QAAM,cAAc,eAAe;AACnC,QAAM,EAAE,YAAY,IAAI,YAAY;AACpC,SACE,oCAAC;AAAA,IACC,OAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,gBAAgB;AAAA,IAClB;AAAA,KAEA,oCAAC;AAAA,IAAW,WAAU;AAAA,IAAe,MAAM;AAAA,IAAY,MAAM,YAAY;AAAA,GAAkB,GAC3F,oCAAC;AAAA,IAAW,WAAU;AAAA,IAAe,MAAM;AAAA,IAAa,MAAM,YAAY;AAAA,GAAe,GACzF,oCAAC;AAAA,IAAW,WAAU;AAAA,IAAe,MAAM;AAAA,IAAa,MAAM,YAAY;AAAA,GAAgB,GAC1F,oCAAC;AAAA,IAAI,IAAG;AAAA,GAAoB,GAC5B,oCAAC,qBAAgB,CACnB;AAEJ;AAEA,SAAS,kBAAkB;AACzB,QAAM,cAAc,eAAe;AACnC,QAAM,EAAE,YAAY,IAAI,YAAY;AACpC,SACE,oCAAC;AAAA,IACC,MAAM,GAAG,YAAY;AAAA,IACrB,WAAU;AAAA,IACV,OAAO;AAAA,MACL,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,OAAO;AAAA,IACT;AAAA,KAEA,oCAAC;AAAA,IAAK,IAAG;AAAA,IAAiB,WAAU;AAAA,KAAe,KAAE,YAAY,cAAe,GAChF,oCAAC;AAAA,IAAI,WAAU;AAAA,IAAe,KAAK;AAAA,IAAe,QAAQ;AAAA,IAAI,OAAO,EAAE,YAAY,EAAE;AAAA,GAAG,CAC1F;AAEJ;AAEA,SAAS,WAAW,EAAE,WAAW,MAAM,KAAK,GAAsD;AAChG,SACE,0DACE,oCAAC;AAAA,IACC,WAAW,uBAAuB;AAAA,IAClC;AAAA,IACA,OAAO,EAAE,SAAS,GAAG,SAAS,gBAAgB,YAAY,EAAE;AAAA,KAE5D,oCAAC;AAAA,IAAI,KAAK;AAAA,IAAM,QAAO;AAAA,IAAK,OAAO,CAAC;AAAA,GAAG,CACzC,CACF;AAEJ;;;AC7FA,OAAOC,YAAW;;;;;;AAIlB,SAAS,6BAA6B;AACpC,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC;AAAA,IAAE,IAAG;AAAA,KACJ,gBAAAA,OAAA,cAAC;AAAA,IACC,OAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,KAEA,gBAAAA,OAAA,cAAC,WAAI,CACP,GACA,gBAAAA,OAAA,cAAC;AAAA,IACC,OAAO,EAAE,UAAU,SAAS,QAAQ,SAAS,OAAO,GAAG;AAAA,IACvD,cAAW;AAAA,IACX,oBAAiB;AAAA,GAClB,CACH,CACF;AAEJ;AAEA,SAAS,4BAA4B;AACnC,SACE,gBAAAA,OAAA,cAAC;AAAA,IACC,IAAG;AAAA,IACH,OAAO,EAAE,UAAU,SAAS,KAAK,IAAI,OAAO,IAAI,QAAQ,GAAG;AAAA,IAC3D,cAAW;AAAA,IACX,oBAAiB;AAAA,KAEjB,gBAAAA,OAAA,cAAC;AAAA,IAAI,KAAK;AAAA,IAAW,QAAQ;AAAA,IAAI,OAAO;AAAA,IAAI,OAAO,EAAE,SAAS,QAAQ;AAAA,GAAG,CAC3E;AAEJ;;;AFjCA,SAAS,WAAW;AAAA,EAClB;AACF,GAMG;AACD,QAAM,EAAE,eAAe,IAAI;AAC3B,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,KACN,gBAAAA,OAAA,cAAC,sBAAiB,GACjB,kBAAkB,gBAAAA,OAAA,cAAC,sBAAiB,GACrC,gBAAAA,OAAA,cAAC;AAAA,IAAkB;AAAA,GAA0B,GAE7C,gBAAAA,OAAA,cAAC,+BAA0B,CAC7B,CACF;AAEJ;AAEA,SAAS,iBAAiB;AACxB,SAAO,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,GAAkB;AACnC;AAEA,SAAS,kBAAkB;AAAA,EACzB;AACF,GAMG;AACD,QAAM,WAAW,6BAA6B,WAAW;AACzD,QAAM,kBAAkB,cAAc,QAAQ;AAC9C,SACE,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,KACN,gBAAAA,OAAA,cAAC;AAAA,IAAI,WAAU;AAAA,IAAa,OAAO,EAAE,UAAU,WAAW;AAAA,KACvD,gBAAgB,IAAI,CAAC,YAAY,MAChC,gBAAAA,OAAA,cAAC;AAAA,IAAI,WAAU;AAAA,IAAe,KAAK;AAAA,KACjC,gBAAAA,OAAA,cAAC;AAAA,IAAQ,SAAS;AAAA,GAAY,GAC7B,WAAW,SAAS,IAAI,CAAC,SAAS,MACjC,gBAAAA,OAAA,cAAC;AAAA,IAAQ;AAAA,IAAkB,KAAK;AAAA,GAAG,CACpC,CACH,CACD,CACH,CACF;AAEJ;AAEA,SAAS,QAAQ;AAAA,EACf;AACF,GAcG;AACD,SAAO,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,SAAS,QAAQ,KAAK,GAAG,OAAO;AACpD,SACE,gBAAAA,OAAA,cAAC;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA,eAAe,QAAQ;AAAA,MACvB,QAAQ,SAAS,YAAY;AAAA,MAC7B,QAAQ,SAAS,iBAAiB;AAAA,MAClC,QAAQ,SAAS,gBAAgB;AAAA,MACjC,QAAQ,SAAS,wBAAwB;AAAA,MACzC,QAAQ,SAAS,oBAAoB;AAAA,MACrC,QAAQ,SAAS,mBAAmB;AAAA,IACtC,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IACX,MAAM,QAAQ,OAAO;AAAA,KAGpB,QAAQ,UACX;AAEJ;AAEA,SAAS,cAA2C,UAAe;AACjE,QAAM,kBAA6C,CAAC;AACpD,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,QAAQ,UAAU,GAAG;AACvB,sBAAgB,KAAK,EAAE,GAAG,SAAS,UAAU,CAAC,EAAE,CAAC;AAAA,IACnD,OAAO;AACL,sBAAgB,gBAAgB,SAAS,GAAG,SAAS,KAAK,OAAO;AAAA,IACnE;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,6BAA6B,aAInC;AACD,QAAM,EAAE,yBAAyB,YAAY,IAAI;AACjD,SAAO,wBAAwB,IAAI,CAAC,SAAS,MAAM;AA1HrD,QAAAC;AA2HI,WAAO,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,SAAS,QAAQ,KAAK,GAAG,OAAO;AAEpD,UAAM,kBAAkB,wBAAwB,IAAI;AACpD,UAAM,cAAc,wBAAwB,IAAI;AAEhD,QAAI,gBAAgB;AACpB,QAAI,eAAe;AACnB,QAAI,WAAW;AACf,QAAI,QAAQ,QAAQ,aAAa;AAC/B,aAAO,QAAQ,UAAU,GAAG,EAAE,YAAY,CAAC;AAC3C,iBAAW;AACX,sBAAgB;AAChB,WAAI,2CAAa,WAAU,GAAG;AAC5B,uBAAe;AAAA,MACjB;AAAA,IACF;AACA,QAAI,QAAQ,UAAU,GAAG;AACvB,iBAAW;AACX,WAAI,2CAAa,WAAU,GAAG;AAC5B,uBAAe;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,mBAAmB,QAAQ,WAAU,mDAAiB;AAC5D,UAAM,kBAAkB,QAAQ,WAAU,2CAAa;AACvD,UAAM,uBAAuB,CAAC,GAACA,MAAA,QAAQ,eAAe,OAAvB,gBAAAA,IAA2B;AAE1D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAoCA,SAAS,mBAAmB;AAC1B,SACE,gBAAAC,OAAA,cAAC;AAAA,IACC,IAAG;AAAA,IACH,OAAO;AAAA,MACL,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,KAEA,gBAAAA,OAAA,cAAC;AAAA,IAAM,MAAK;AAAA,GAAO,GAAG,KACtB,gBAAAA,OAAA,cAAC,WACC,gBAAAA,OAAA,cAAC,YAAG,UAAQ,CACd,GACA,gBAAAA,OAAA,cAAC;AAAA,IACC,OAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,KAEC,KAAI,6DAEP,CACF;AAEJ;;;AGnOA,OAAOC,YAAW;AAKlB,SAAS,eAAe;AACtB,QAAM,cAAc,eAAe;AACnC,SACE,gBAAAC,OAAA,cAAC;AAAA,IACC,IAAG;AAAA,IACH,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,KAEA,gBAAAA,OAAA,cAAC;AAAA,IACC,OAAO;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,cAAc;AAAA,IAChB;AAAA,KAEA,gBAAAA,OAAA,cAAC,gBAAW,GACZ,gBAAAA,OAAA,cAAC;AAAA,IACC,MAAK;AAAA,IACL,OAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,IAClB;AAAA,KAEC,YAAY,OAAO,eACtB,GACA,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,GAAmB,CAC7B,CACF;AAEJ;AAEA,SAAS,aAAa;AACpB,SACE,gBAAAA,OAAA,cAAC;AAAA,IAAI,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE;AAAA,IAAG,IAAG;AAAA,KAC7C,gBAAAA,OAAA,cAAC;AAAA,IACC,OAAO,EAAE,OAAO,GAAG;AAAA,IACnB,WAAU;AAAA,IACV,OAAM;AAAA,IACN,eAAY;AAAA,IACZ,MAAK;AAAA,IACL,SAAQ;AAAA,KAER,gBAAAA,OAAA,cAAC;AAAA,IACC,MAAK;AAAA,IACL,GAAE;AAAA,GACH,CACH,CACF;AAEJ;;;ACnEA,OAAOC,YAAW;AAMlB,SAAS,aAAa,EAAE,YAAY,GAA6C;AAC/E,QAAM,OACJ,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC;AAAA,IAAM,MAAK;AAAA,GAAe,GAAE,iBAC/B;AAEF,SACE,gBAAAA,OAAA,cAAC;AAAA,IAAI,OAAO,EAAE,WAAW,GAAG;AAAA,KAC1B,gBAAAA,OAAA,cAAC;AAAA,IAAS,MAAM,gBAAgB,YAAY,cAAc;AAAA,IAAoB;AAAA,IAAY,UAAU;AAAA,GAAM,CAC5G;AAEJ;;;ALNA,SAAS,WAAW,EAAE,aAAa,SAAS,GAAgE;AAC1G,QAAM,EAAE,eAAe,UAAU,IAAI;AACrC,SACE,gBAAAC,OAAA,cAACA,OAAM,YAAN,MACC,gBAAAA,OAAA,cAAC;AAAA,IAAoB;AAAA,KACnB,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,IAAc,WAAW,gBAAgB,iBAAiB;AAAA,KAChE,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,KACN,gBAAAA,OAAA,cAAC;AAAA,IAAW;AAAA,GAA0B,CACxC,GACA,gBAAAA,OAAA,cAAC,gCAA2B,GAC5B,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,KACN,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,KACN,gBAAAA,OAAA,cAAC,kBAAa,GACd,gBAAAA,OAAA,cAAC;AAAA,IAAI,IAAG;AAAA,KACL,aAAa,gBAAAA,OAAA,cAAC,YAAI,SAAU,GAC5B,UACA,CAAC,iBAAiB,gBAAAA,OAAA,cAAC;AAAA,IAAa;AAAA,GAA0B,CAC7D,CACF,GACA,gBAAAA,OAAA,cAAC,oBAAe,CAClB,CACF,CACF,CACF;AAEJ;;;AMhCA,SAAS,YAAoB;AAG3B,QAAM,aAAa,YAAY,KAAK,sCAAsC,EAAE,OAAO,KAAK,CAAC;AACzF,QAAM,QAAQ,OAAO,KAAK,UAAU;AACpC,cAAY,MAAM,UAAU,GAAG,iEAAiE;AAChG;AAAA,IACE,MAAM,WAAW;AAAA,IACjB,gDAAgD,MAAM,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,KAAK,IAAI;AAAA,EACxF;AACA,QAAM,SAAU,OAAO,OAAO,UAAU,EAAE,GAAW;AACrD,SAAO,MAAM;AACb,SAAO;AACT;;;ACMA,SAAS,mBAAmB,aAAkC;AAC5D,QAAM,SAAS,UAAU;AACzB,QAAM,EAAE,UAAU,oBAAoB,IAAI,YAAY,MAAM;AAC5D,QAAM,gBAAgB,kBAAkB,UAAU,qBAAqB,WAAW;AAClF,QAAM,0BAA0B,2BAA2B,UAAU,aAAa,aAAa;AAC/F,QAAM,EAAE,OAAO,eAAe,WAAW,eAAe,IAAI;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,EAAE,YAAY,SAAS,SAAS,eAAe,WAAW,WAAW,IAAI;AAC/E,QAAM,sBAAsB,CAAC;AAC7B,eAAa,qBAAqB;AAAA,IAChC,GAAG;AAAA,IACH,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,YACP,qBACA,eACA,aACA,QACA;AACA,QAAM,MAAM,YAAY;AAExB,MAAI;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI,eAAe;AACjB,YAAQ,cAAc,iBAAiB,iBAAiB,cAAc,KAAK;AAC3E,gBAAY,cAAc;AAC1B,qBAAiB;AAAA,EACnB,OAAO;AACL,gBAAY,oBAAoB,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,EAAG;AAC5D,YAAQ,iBAAiB,SAAS;AAClC,qBAAiB;AAAA,EACnB;AAEA,QAAM,gBAAgB,QAAQ;AAC9B,MAAI,CAAC,eAAe;AAClB,aAAS,QAAQ,OAAO,YAAY;AAAA,EACtC;AAEA,MAAI,eAAe;AACjB,gBAAY;AAAA,EACd;AAEA,SAAO,EAAE,OAAO,eAAe,WAAW,eAAe;AAC3D;AAEA,SAAS,kBACP,UACA,qBACA,aACgB;AAChB,MAAI,gBAAgC;AACpC,SAAO,YAAY,WAAW;AAC9B,QAAM,UAAU,YAAY;AAC5B,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,QAAQ,QAAQ,SAAS;AAC3B,sBAAgB;AAChB,aAAO,QAAQ,UAAU,GAAG,EAAE,SAAS,QAAQ,CAAC;AAAA,IAClD;AAAA,EACF,CAAC;AACD,QAAM,YAAY;AAAA,IAChB,KAAK,gCAAgC;AAAA,IACrC,MAAM,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,IAC/B,KAAK;AAAA,EACP;AACA,SAAO,iBAAiB,oBAAoB,KAAK,CAAC,EAAE,IAAI,MAAM,YAAY,GAAG,GAAG,SAAS;AACzF,SAAO;AACT;AAEA,SAAS,2BACP,UACA,aACA,eACW;AACX,QAAM,0BAA0B,SAAS,MAAM;AAC/C,MAAI,kBAAkB;AAAM,WAAO;AACnC,QAAM,mBAAmB,wBAAwB,QAAQ,aAAa;AACtE,SAAO,oBAAoB,CAAC;AAC5B,QAAM,eAAe,YAAY,QAAQ,YAAY,CAAC;AACtD,eAAa,QAAQ,CAAC,aAAa,MAAM;AACvC,UAAM,QAAQ,WAAW,YAAY,KAAK;AAC1C,UAAM,MAAM,MAAM,YAAY;AAC9B;AAAA,MACE,YAAY,iBAAiB;AAAA,MAC7B,+BACE,YAAY,eACZ,8CACA,YAAY,QACZ,gBACA,YAAY,cACZ;AAAA,IACJ;AACA,QAAI,YAAY,iBAAiB,GAAG;AAClC,YAAM,UAAmB;AAAA,QACvB;AAAA,QACA;AAAA,QACA,gBAAgB,CAAC,eAAe,GAAG,cAAc,cAAc;AAAA,QAC/D,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AACA,8BAAwB,OAAO,mBAAmB,IAAI,GAAG,GAAG,OAAO;AAAA,IACrE;AAAA,EACF,CAAC;AAED,MAAI,+CAAe,eAAe;AAChC,kBAAc,cAAc,QAAQ,CAAC,iBAAiB;AACpD,YAAM,oBAAoB,aAAa,IAAI,CAAC,MAAM,EAAE,KAAK;AACzD,aAAO,kBAAkB,SAAS,YAAY,GAAG,EAAE,mBAAmB,aAAa,CAAC;AAAA,IACtF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AC5JA,SAAS,oBAAoB;AAM7B,SAAS,gBAAgB,aAAkC;AACzD,QAAM,eAAe,CAAC,YAAY,KAAK,UACnC,KACA;AAAA;AAAA;AAGJ,SAAO;AACT;AAbA;AAeA,SAAS,eAAe,aAAkC;AACxD,QAAM,cAAc,CAAC,YAAY,KAAK,UAClC,KACA,yBAAY;AAAA;AAAA;AAAA;AAAA,mBAI8B,yBACE,4BACM,+FAIR,yBACE,4BACM,gFARtC,YAAY,KAAK,QAAQ,OACxB,YAAY,KAAK,QAAQ,QACtB,YAAY,KAAK,QAAQ,WAI7B,YAAY,KAAK,QAAQ,OACxB,YAAY,KAAK,QAAQ,QACtB,YAAY,KAAK,QAAQ;AAK7C,SAAO;AACT;;;AClCA,OAAO,aAAa;AAEpB,IAAM,YAAY;AAAA,EAEhB,cAAc;AAAA,EAEd,aAAa;AAAA,EAEb,YAAY;AAKd;AAEA,SAAS,YAAY,MAAc;AACjC,SAAO,QAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC,WAAW,SAAS,MAAM;AAC5D,QAAI,CAAC,KAAK,SAAS,SAAS,GAAG;AAC7B;AAAA,IACF;AACA,UAAM,WAAW,QAAQ,QAAQ,cAAc,SAAgB;AAC/D,QAAI,WAAgB,QAAQ,MAAM,UAAU;AAAA,MAC1C,QAAQ;AAAA,MACR,KAAK;AAAA,IACP,CAAC;AACD,UAAM,QAAQ;AACd,eAAW,SAAS,QAAQ,uBAAuB,eAAe,SAAS;AAC3E,WAAO,KAAK,MAAM,SAAS,EAAE,KAAK,QAAQ;AAAA,EAC5C,CAAC;AACD,SAAO;AACT;;;AVrBA,eAAe,OAAO,qBAA0C;AAC9D,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,sBAAsB,mBAAmB,mBAAmB;AAElE,QAAM,OACJ,gBAAAC,OAAA,cAAC;AAAA,IAAW,aAAa;AAAA,KACvB,gBAAAA,OAAA,cAAC,UAAK,CACR;AAGF,QAAM,iBAAiB,oBAAoB,gBACvC,sBAAsB,qCAAqC,oBAAoB,KAAK,aAAa,IACjG;AAEJ,QAAM,cAAc,eAAe,mBAAmB;AACtD,QAAM,eAAe,gBAAgB,mBAAmB;AAExD,MAAI,WAAW,eAAe,eAAe,IAAI;AACjD,aAAW,YAAY,QAAQ;AAE/B,SAAOC;AAAA;AAAA;AAAA;AAAA,iCAIwB,oBAAoB,KAAK;AAAA,iBACzC,oBAAoB,KAAK;AAAA,UAChC;AAAA;AAAA,UAEA;AAAA,UACA,iBAAiB,oBAAoB,aAAa,oBAAoB,IAAI;AAAA;AAAA;AAAA,8BAGtD,sBAAsB,QAAQ;AAAA,UAClD;AAAA;AAAA;AAGV;AAEA,SAAS,iBACP,KACA,MACA;AACA,QAAM,EAAE,OAAO,SAAS,YAAY,eAAe,UAAU,IAAI;AAEjE,SAAO,IAAI,WAAW,GAAG,CAAC;AAC1B,MAAI,QAAQ,OAAO,CAAC;AAAW,WAAO;AAGtC,SAAOA;AAAA;AAAA,yCAEgC;AAAA,yCACA;AAAA,uCACF;AAAA,+CACQ;AAAA;AAAA,yCAEN;AAAA;AAEzC;","names":["React","escapeInject","React","React","React","React","React","_a","React","React","React","React","React","React","React","escapeInject"]}