UNPKG

typedoc-theme-hierarchy

Version:
215 lines (207 loc) 10.6 kB
"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.tsx var index_exports = {}; __export(index_exports, { load: () => load }); module.exports = __toCommonJS(index_exports); var import_typedoc4 = require("typedoc"); // src/themes/OverrideTheme.tsx var import_fs_extra = __toESM(require("fs-extra"), 1); var import_path2 = __toESM(require("path"), 1); var import_typedoc3 = require("typedoc"); // src/themes/OverrideThemeContext.tsx var import_typedoc2 = require("typedoc"); // src/partials/navigation.tsx var import_path = __toESM(require("path"), 1); var process = __toESM(require("process"), 1); var import_typedoc = require("typedoc"); var navigation = (context) => (props) => { const categories = formatFileHierarchy(props.model.project.children || []); return /* @__PURE__ */ import_typedoc.JSX.createElement("div", { class: "tree" }, /* @__PURE__ */ import_typedoc.JSX.createElement("div", { class: "tree-config" }, /* @__PURE__ */ import_typedoc.JSX.createElement("button", { class: "tree-config__button tree-config__button--expand js-tree-expand", title: "Expand All" }, /* @__PURE__ */ import_typedoc.JSX.createElement( "svg", { xmlns: "http://www.w3.org/2000/svg", x: "0px", y: "0px", viewBox: "0 0 490.72 490.72", fill: "currentColor" }, /* @__PURE__ */ import_typedoc.JSX.createElement("path", { d: "M480.027,288.027H10.693c-5.867,0-10.667,4.8-10.667,10.667c0,5.867,4.8,10.667,10.667,10.667h213.333v144.96l-45.76-45.76c-4.267-4.053-10.987-3.947-15.04,0.213c-3.947,4.16-3.947,10.667,0,14.827l64,64c4.16,4.16,10.88,4.16,15.04,0l64-64c4.053-4.267,3.947-10.987-0.213-15.04c-4.16-3.947-10.667-3.947-14.827,0l-45.867,45.76V309.36h234.667c5.867,0,10.667-4.8,10.667-10.667C490.693,292.827,485.893,288.027,480.027,288.027z" }), /* @__PURE__ */ import_typedoc.JSX.createElement("path", { d: "M10.693,224.027h469.333c5.867,0,10.667-4.8,10.667-10.667c0-5.867-4.8-10.667-10.667-10.667H245.36V36.4l45.76,45.76c4.267,4.053,10.987,3.947,15.04-0.213c3.947-4.16,3.947-10.667,0-14.827l-64-64c-4.16-4.16-10.88-4.16-15.04,0l-64,64c-4.053,4.267-3.947,10.987,0.213,15.04c4.16,3.947,10.667,3.947,14.827,0l45.867-45.76v166.293H10.693c-5.867,0-10.667,4.8-10.667,10.667C0.027,219.227,4.827,224.027,10.693,224.027z" }) )), /* @__PURE__ */ import_typedoc.JSX.createElement( "button", { class: "tree-config__button tree-config__button--collapse js-tree-collapse", title: "Collapse All" }, /* @__PURE__ */ import_typedoc.JSX.createElement("svg", { viewBox: "0 0 16 16", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor" }, /* @__PURE__ */ import_typedoc.JSX.createElement( "path", { "fill-rule": "evenodd", d: "M1 8a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 0 1h-13A.5.5 0 0 1 1 8zm7-8a.5.5 0 0 1 .5.5v3.793l1.146-1.147a.5.5 0 0 1 .708.708l-2 2a.5.5 0 0 1-.708 0l-2-2a.5.5 0 1 1 .708-.708L7.5 4.293V.5A.5.5 0 0 1 8 0zm-.5 11.707-1.146 1.147a.5.5 0 0 1-.708-.708l2-2a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1-.708.708L8.5 11.707V15.5a.5.5 0 0 1-1 0v-3.793z" } )) ), /* @__PURE__ */ import_typedoc.JSX.createElement( "button", { class: "tree-config__button tree-config__button--target js-tree-target", title: "Scroll to current file" }, /* @__PURE__ */ import_typedoc.JSX.createElement("svg", { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor" }, /* @__PURE__ */ import_typedoc.JSX.createElement("circle", { cx: "12", cy: "12", r: "3" }), /* @__PURE__ */ import_typedoc.JSX.createElement("path", { d: "M13 4.069V2h-2v2.069A8.008 8.008 0 0 0 4.069 11H2v2h2.069A8.007 8.007 0 0 0 11 19.931V22h2v-2.069A8.007 8.007 0 0 0 19.931 13H22v-2h-2.069A8.008 8.008 0 0 0 13 4.069zM12 18c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6z" })) )), /* @__PURE__ */ import_typedoc.JSX.createElement("div", { class: "tree-content" }, /* @__PURE__ */ import_typedoc.JSX.createElement(Navigation, { ...categories, context }))); }; var Navigation = ({ id, categories, items, context }) => /* @__PURE__ */ import_typedoc.JSX.createElement("ul", { class: "js-category-list category", "data-id": id }, Object.entries(categories).map(([key, item]) => /* @__PURE__ */ import_typedoc.JSX.createElement("li", null, /* @__PURE__ */ import_typedoc.JSX.createElement("span", { class: "js-category-title category__title", "data-id": item.id }, /* @__PURE__ */ import_typedoc.JSX.createElement("div", { class: "category__folder", "data-id": item.id }), key), /* @__PURE__ */ import_typedoc.JSX.createElement(Navigation, { id: item.id, categories: item.categories, items: item.items, context }))), items.map((item) => /* @__PURE__ */ import_typedoc.JSX.createElement("li", null, /* @__PURE__ */ import_typedoc.JSX.createElement(Item, { item, context })))); var Item = ({ item, context }) => { if (`id` in item) { return /* @__PURE__ */ import_typedoc.JSX.createElement(import_typedoc.JSX.Fragment, null, /* @__PURE__ */ import_typedoc.JSX.createElement( "a", { class: "category__link js-category-link category__link--ts", href: context.urlTo(item), "data-id": `/${context.router.getFullUrl(item)}` }, item.title ), /* @__PURE__ */ import_typedoc.JSX.createElement("ul", null, item.children?.map((subItem) => /* @__PURE__ */ import_typedoc.JSX.createElement("li", null, /* @__PURE__ */ import_typedoc.JSX.createElement( "a", { class: "category__link js-category-link", href: context.urlTo(subItem), "data-id": `/${context.router.getFullUrl(subItem)}` }, context.icons[subItem.kind](), subItem.name ))))); } return /* @__PURE__ */ import_typedoc.JSX.createElement(import_typedoc.JSX.Fragment, null, /* @__PURE__ */ import_typedoc.JSX.createElement("span", { class: "category__link category__link--disable js-category-link category__link--ts" }, item.title), /* @__PURE__ */ import_typedoc.JSX.createElement("ul", null, item.children.map((subItem) => /* @__PURE__ */ import_typedoc.JSX.createElement("li", null, /* @__PURE__ */ import_typedoc.JSX.createElement( "a", { class: "category__link js-category-link", href: context.urlTo(subItem), "data-id": `/${context.router.getFullUrl(subItem)}` }, context.icons[subItem.kind](), subItem.name ))))); }; var getName = (item) => { const fullFileName = item.sources?.[0]?.fullFileName || ``; const targetFileName = fullFileName.replaceAll(import_path.default.sep, `/`); const currentDirName = process.cwd().replaceAll(import_path.default.sep, `/`); return targetFileName.replace(currentDirName, ``).slice(1); }; var formatFileHierarchy = (values) => { const result = { items: [], categories: {}, id: `root` }; for (const item of values) { const titleSplit = getName(item).split(`/`); addToCategory(result, item, titleSplit, 0); } return result; }; var addToCategory = (category, item, titleSplit, idx) => { if (idx === titleSplit.length - 1) { if (item.kind === import_typedoc.ReflectionKind.Module) { item.title = titleSplit[idx] || ``; item.children = item.children || []; category.items.push(item); return; } const existsFile = category.items.find((existItem) => existItem.title === titleSplit[idx]); if (!existsFile) { category.items.push({ title: titleSplit[idx] ?? ``, children: [item] }); return; } existsFile.children?.push(item); return; } const title = titleSplit[idx]; if (!title) { return; } if (!category.categories[title]) { category.categories[title] = { items: [], categories: {}, id: `${category.id}-${title}` }; } const categoryToAdd = category.categories[title]; if (!categoryToAdd) { return; } addToCategory(categoryToAdd, item, titleSplit, idx + 1); }; // src/themes/OverrideThemeContext.tsx var OverrideThemeContext = class extends import_typedoc2.DefaultThemeRenderContext { navigation = (context) => navigation(this)(context); }; // src/themes/OverrideTheme.tsx var OverrideTheme = class extends import_typedoc3.DefaultTheme { constructor(renderer) { super(renderer); this.owner.on(import_typedoc3.RendererEvent.END, (event) => { import_fs_extra.default.copySync( import_path2.default.join(require.resolve("typedoc-theme-hierarchy"), `../assets`), import_path2.default.join(event.outputDirectory, `assets`) ); }); } getRenderContext(page) { return new OverrideThemeContext(this.router, this, page, this.application.options); } }; // src/index.tsx var load = (app) => { app.renderer.hooks.on( `head.end`, (context) => /* @__PURE__ */ import_typedoc4.JSX.createElement("link", { rel: "stylesheet", href: context.relativeURL(`assets/hierarchy.css`) }) ); app.renderer.hooks.on( `body.end`, (context) => /* @__PURE__ */ import_typedoc4.JSX.createElement("script", { src: context.relativeURL(`assets/hierarchy-theme.js`) }) ); app.renderer.defineTheme(`hierarchy`, OverrideTheme); }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { load });