@qualcomm-ui/mdx-vite 3.6.1 → 3.7.1
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.
- package/dist/cli.js +45 -6
- package/dist/cli.js.map +2 -2
- package/dist/docs-plugin/link-validator.d.ts +8 -3
- package/dist/docs-plugin/link-validator.d.ts.map +1 -1
- package/dist/docs-plugin/markdown/markdown-file-reader.d.ts +2 -0
- package/dist/docs-plugin/markdown/markdown-file-reader.d.ts.map +1 -1
- package/dist/docs-plugin/mdx-plugins.d.ts.map +1 -1
- package/dist/docs-plugin/search-indexer.d.ts +1 -0
- package/dist/docs-plugin/search-indexer.d.ts.map +1 -1
- package/dist/index.js +47 -7
- package/dist/index.js.map +2 -2
- package/dist/tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -22,12 +22,17 @@ export declare function resolveLink(url: string, sourcePathname: string): {
|
|
|
22
22
|
* Walks the AST and collects all internal links from a parsed MDX page.
|
|
23
23
|
*/
|
|
24
24
|
export declare function collectLinks(tree: Root, sourceFile: string, sourcePathname: string): CollectedLink[];
|
|
25
|
+
/**
|
|
26
|
+
* Walks the MDX AST and collects explicit HTML anchor IDs that can be used as
|
|
27
|
+
* fragment targets but should not appear in the page ToC.
|
|
28
|
+
*/
|
|
29
|
+
export declare function collectAnchorIds(tree: Root): Set<string>;
|
|
25
30
|
/**
|
|
26
31
|
* Validates collected links against the fully assembled page map.
|
|
27
|
-
* The optional
|
|
28
|
-
*
|
|
32
|
+
* The optional ID maps provide additional valid fragment targets generated by
|
|
33
|
+
* TypeDocProps or explicit MDX anchor elements on each page.
|
|
29
34
|
*/
|
|
30
|
-
export declare function validateLinks(links: CollectedLink[], pageMap: PageMap, docPropIds?: Record<string, Set<string>>): InvalidLink[];
|
|
35
|
+
export declare function validateLinks(links: CollectedLink[], pageMap: PageMap, docPropIds?: Record<string, Set<string>>, anchorIds?: Record<string, Set<string>>): InvalidLink[];
|
|
31
36
|
/**
|
|
32
37
|
* Logs invalid links to the console grouped by source page.
|
|
33
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-validator.d.ts","sourceRoot":"","sources":["../../src/docs-plugin/link-validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAO,IAAI,EAAC,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"link-validator.d.ts","sourceRoot":"","sources":["../../src/docs-plugin/link-validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAO,IAAI,EAAC,MAAM,OAAO,CAAA;AASrC,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,yBAAyB,CAAA;AAEpD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,MAAM,EAAE,oBAAoB,GAAG,gBAAgB,CAAA;CAChD;AAQD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,GACrB;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CA0B9C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,aAAa,EAAE,CAmBjB;AAcD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAkBxD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EAAE,EACtB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACxC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GACtC,WAAW,EAAE,CAsBf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CA4BpE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { PageFrontmatter } from "@qualcomm-ui/mdx-common";
|
|
2
2
|
import type { QuiPropTypes } from "@qualcomm-ui/typedoc-common";
|
|
3
3
|
import type { PageTimestampMetadataMode } from "../config";
|
|
4
|
+
import type { CollectedLink } from "../link-validator";
|
|
4
5
|
import type { IndexedPage, IndexedSection } from "./markdown.types";
|
|
5
6
|
export interface GitMetadata {
|
|
6
7
|
updatedBy?: string;
|
|
@@ -12,6 +13,7 @@ export interface GitMetadata {
|
|
|
12
13
|
*/
|
|
13
14
|
export declare function buildGitMetadataMap(srcDir: string, mode: PageTimestampMetadataMode): Map<string, GitMetadata>;
|
|
14
15
|
interface PageCache {
|
|
16
|
+
collectedLinks: CollectedLink[];
|
|
15
17
|
frontmatter: PageFrontmatter;
|
|
16
18
|
md5: string;
|
|
17
19
|
page: IndexedPage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-file-reader.d.ts","sourceRoot":"","sources":["../../../src/docs-plugin/markdown/markdown-file-reader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAA;AAE7D,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"markdown-file-reader.d.ts","sourceRoot":"","sources":["../../../src/docs-plugin/markdown/markdown-file-reader.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAA;AAE7D,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,WAAW,CAAA;AACxD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAA;AAGpD,OAAO,KAAK,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAA;AAEjE,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,yBAAyB,GAC9B,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAsC1B;AAED,UAAU,SAAS;IACjB,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,WAAW,EAAE,eAAe,CAAA;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,WAAW,CAAA;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC1C,mBAAmB,EAAE,cAAc,EAAE,CAAA;CACtC;AAED,qBAAa,aAAa;IAOf,OAAO,EAAE,OAAO;IAChB,qBAAqB,EAAE,yBAAyB;IAPzD,eAAe,SAAI;IACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAY;IACpD,WAAW,UAAO;IAClB,OAAO,CAAC,QAAQ,CAAgC;gBAGvC,OAAO,EAAE,OAAO,EAChB,qBAAqB,GAAE,yBAAiC;IAGjE,OAAO,CAAC,IAAI;IAIZ,KAAK,IAAI,IAAI;IAIb,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI7C,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,gBAAgB;IAsDxB,OAAO,CAAC,qBAAqB;IA6B7B;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;QAC9B,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,SAAS,CAAA;QAC1C,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,eAAe,CAAA;KAC7B;IAYD,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAChC,IAAI;CAKR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdx-plugins.d.ts","sourceRoot":"","sources":["../../src/docs-plugin/mdx-plugins.ts"],"names":[],"mappings":"AAGA,OAAoB,EAAC,KAAK,kBAAkB,EAAC,MAAM,iBAAiB,CAAA;AAWpE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAA;AAW1C,OAAO,EAAe,KAAK,mBAAmB,EAAC,MAAM,UAAU,CAAA;AAa/D,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACjD;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAWzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,sBAA2B,GACnC,aAAa,
|
|
1
|
+
{"version":3,"file":"mdx-plugins.d.ts","sourceRoot":"","sources":["../../src/docs-plugin/mdx-plugins.ts"],"names":[],"mappings":"AAGA,OAAoB,EAAC,KAAK,kBAAkB,EAAC,MAAM,iBAAiB,CAAA;AAWpE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,SAAS,CAAA;AAW1C,OAAO,EAAe,KAAK,mBAAmB,EAAC,MAAM,UAAU,CAAA;AAa/D,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACjD;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,EAAE,CAWzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,sBAA2B,GACnC,aAAa,CA0Bf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAahD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-indexer.d.ts","sourceRoot":"","sources":["../../src/docs-plugin/search-indexer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,OAAO,EAEP,OAAO,EACP,WAAW,EAEZ,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAA;AAG7D,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,UAAU,CAAA;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"search-indexer.d.ts","sourceRoot":"","sources":["../../src/docs-plugin/search-indexer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,OAAO,EAEP,OAAO,EACP,WAAW,EAEZ,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAA;AAG7D,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,UAAU,CAAA;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;AAQ3C,OAAO,EAEL,KAAK,eAAe,EAKpB,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,EAEL,gBAAgB,EACjB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAML,UAAU,EAEX,MAAM,eAAe,CAAA;AAItB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2C;IACxE,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,WAAW,EAAE,OAAO,CAAA;IAEpB,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAE/D;IACD,OAAO,CAAC,aAAa,CAAmD;IAExE,IAAI,YAAY,IAAI,MAAM,CAEzB;IACD,OAAO,CAAC,aAAa,CAAY;IAEjC,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,OAAO,CAAC,QAAQ,CAAc;IAE9B,IAAI,WAAW,IAAI,WAAW,EAAE,CAE/B;IACD,OAAO,CAAC,YAAY,CAAoB;IAExC,KAAK,IAAI,IAAI;gBAUX,MAAM,EAAE,oBAAoB,EAC5B,WAAW,UAAO,EAElB,MAAM,GAAE;QACN,eAAe,CAAC,EAAE,eAAe,CAAA;QACjC,aAAa,CAAC,EAAE,aAAa,CAAA;QAC7B,UAAU,CAAC,EAAE,UAAU,CAAA;QACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;KAC/B;IA+BR;;;OAGG;IACH,OAAO,CAAC,YAAY;IAgEpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8KtB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,cAAc;IAqBtB,UAAU,CACR,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,GAAE,OAAc,GAC1B,eAAe,EAAE;CAuDrB"}
|
package/dist/index.js
CHANGED
|
@@ -297,6 +297,7 @@ var MdxFileReader = class {
|
|
|
297
297
|
}
|
|
298
298
|
this.cachedFileCount++;
|
|
299
299
|
return {
|
|
300
|
+
collectedLinks: cached.collectedLinks,
|
|
300
301
|
frontmatter: cached.frontmatter,
|
|
301
302
|
page: cached.page,
|
|
302
303
|
pageDocProps: cached.pageDocProps,
|
|
@@ -3249,7 +3250,28 @@ function collectLinks(tree, sourceFile, sourcePathname) {
|
|
|
3249
3250
|
});
|
|
3250
3251
|
return links;
|
|
3251
3252
|
}
|
|
3252
|
-
function
|
|
3253
|
+
function getLiteralAttributeValue(node, name) {
|
|
3254
|
+
const attr = node.attributes.find(
|
|
3255
|
+
(attribute) => attribute.type === "mdxJsxAttribute" && attribute.name === name
|
|
3256
|
+
);
|
|
3257
|
+
return typeof attr?.value === "string" ? attr.value : void 0;
|
|
3258
|
+
}
|
|
3259
|
+
function collectAnchorIds(tree) {
|
|
3260
|
+
const anchorIds = /* @__PURE__ */ new Set();
|
|
3261
|
+
const collectAnchorId = (node) => {
|
|
3262
|
+
if (node.name !== "a") {
|
|
3263
|
+
return;
|
|
3264
|
+
}
|
|
3265
|
+
const id = getLiteralAttributeValue(node, "id");
|
|
3266
|
+
if (id) {
|
|
3267
|
+
anchorIds.add(id);
|
|
3268
|
+
}
|
|
3269
|
+
};
|
|
3270
|
+
visit18(tree, "mdxJsxFlowElement", collectAnchorId);
|
|
3271
|
+
visit18(tree, "mdxJsxTextElement", collectAnchorId);
|
|
3272
|
+
return anchorIds;
|
|
3273
|
+
}
|
|
3274
|
+
function validateLinks(links, pageMap, docPropIds, anchorIds) {
|
|
3253
3275
|
const invalid = [];
|
|
3254
3276
|
for (const link of links) {
|
|
3255
3277
|
const page = pageMap[link.targetPathname];
|
|
@@ -3260,7 +3282,8 @@ function validateLinks(links, pageMap, docPropIds) {
|
|
|
3260
3282
|
if (link.fragment) {
|
|
3261
3283
|
const inToc = page.toc?.some((h) => h.id === link.fragment);
|
|
3262
3284
|
const inDocProps = docPropIds?.[link.targetPathname]?.has(link.fragment);
|
|
3263
|
-
|
|
3285
|
+
const inAnchorIds = anchorIds?.[link.targetPathname]?.has(link.fragment);
|
|
3286
|
+
if (!inToc && !inDocProps && !inAnchorIds) {
|
|
3264
3287
|
invalid.push({ ...link, reason: "fragment-not-found" });
|
|
3265
3288
|
}
|
|
3266
3289
|
}
|
|
@@ -3301,6 +3324,7 @@ var SearchIndexer = class {
|
|
|
3301
3324
|
allowedHeadings;
|
|
3302
3325
|
metaJson;
|
|
3303
3326
|
_collectedLinks = [];
|
|
3327
|
+
_anchorIds = {};
|
|
3304
3328
|
_docPropIds = {};
|
|
3305
3329
|
routeMetaNav = {};
|
|
3306
3330
|
config;
|
|
@@ -3330,6 +3354,7 @@ var SearchIndexer = class {
|
|
|
3330
3354
|
reset() {
|
|
3331
3355
|
this.mdxFileReader.reset();
|
|
3332
3356
|
this._collectedLinks = [];
|
|
3357
|
+
this._anchorIds = {};
|
|
3333
3358
|
this._docPropIds = {};
|
|
3334
3359
|
this._pageMap = {};
|
|
3335
3360
|
this._searchIndex = [];
|
|
@@ -3426,9 +3451,22 @@ var SearchIndexer = class {
|
|
|
3426
3451
|
}
|
|
3427
3452
|
this._pageMap[defaultSection.pathname] = defaultSection;
|
|
3428
3453
|
let indexedPage;
|
|
3454
|
+
let collectedLinks = [];
|
|
3429
3455
|
try {
|
|
3456
|
+
if (this.config.validatePageLinks) {
|
|
3457
|
+
const anchorTree = createRemarkProcessor({
|
|
3458
|
+
frontmatter: true,
|
|
3459
|
+
mdx: true
|
|
3460
|
+
}).parse(fileContents);
|
|
3461
|
+
const anchorIds = collectAnchorIds(anchorTree);
|
|
3462
|
+
if (anchorIds.size) {
|
|
3463
|
+
this._anchorIds[defaultSection.pathname] = anchorIds;
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3430
3466
|
if (cached?.page) {
|
|
3431
3467
|
indexedPage = cached.page;
|
|
3468
|
+
collectedLinks = cached.collectedLinks;
|
|
3469
|
+
this._collectedLinks.push(...collectedLinks);
|
|
3432
3470
|
} else {
|
|
3433
3471
|
const processor = createRemarkProcessor({
|
|
3434
3472
|
alerts: true,
|
|
@@ -3442,9 +3480,8 @@ var SearchIndexer = class {
|
|
|
3442
3480
|
});
|
|
3443
3481
|
const tree = processor.runSync(processor.parse(fileContents));
|
|
3444
3482
|
if (this.config.validatePageLinks) {
|
|
3445
|
-
|
|
3446
|
-
|
|
3447
|
-
);
|
|
3483
|
+
collectedLinks = collectLinks(tree, filePath, defaultSection.pathname);
|
|
3484
|
+
this._collectedLinks.push(...collectedLinks);
|
|
3448
3485
|
}
|
|
3449
3486
|
const pageInfo = {
|
|
3450
3487
|
frontmatter,
|
|
@@ -3504,6 +3541,7 @@ var SearchIndexer = class {
|
|
|
3504
3541
|
}
|
|
3505
3542
|
if (!cached) {
|
|
3506
3543
|
this.mdxFileReader.updateCache(filePath, fileContents, {
|
|
3544
|
+
collectedLinks,
|
|
3507
3545
|
frontmatter,
|
|
3508
3546
|
page: indexedPage,
|
|
3509
3547
|
pageDocProps: docProps,
|
|
@@ -3601,7 +3639,8 @@ var SearchIndexer = class {
|
|
|
3601
3639
|
const invalidLinks = validateLinks(
|
|
3602
3640
|
this._collectedLinks,
|
|
3603
3641
|
this._pageMap,
|
|
3604
|
-
this._docPropIds
|
|
3642
|
+
this._docPropIds,
|
|
3643
|
+
this._anchorIds
|
|
3605
3644
|
);
|
|
3606
3645
|
reportInvalidLinks(invalidLinks);
|
|
3607
3646
|
}
|
|
@@ -4356,7 +4395,8 @@ function getRehypePlugins(options = {}) {
|
|
|
4356
4395
|
merge(
|
|
4357
4396
|
{
|
|
4358
4397
|
defaultColor: "light-dark()",
|
|
4359
|
-
|
|
4398
|
+
defaultLanguage: "plaintext",
|
|
4399
|
+
fallbackLanguage: "plaintext",
|
|
4360
4400
|
themes: {
|
|
4361
4401
|
dark: quiCustomDarkTheme,
|
|
4362
4402
|
light: "github-light-high-contrast"
|