typedoc-theme-hierarchy
Version:
Hierarchy theme for typedoc
215 lines (207 loc) • 10.6 kB
JavaScript
;
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
});