svelte-markdown-pages
Version:
Build and render markdown-based content with distributed navigation for Svelte projects
96 lines (94 loc) • 2.67 kB
JavaScript
// src/renderer/components.ts
var DocsSidebarClass = class {
constructor(props) {
this.props = props;
}
render() {
return `
<nav class="docs-sidebar ${this.props.collapsed ? "collapsed" : ""}">
${this.renderNavigationItems(this.props.navigation.items)}
</nav>
`;
}
renderNavigationItems(items) {
return items.map((item) => {
if (item.type === "section") {
return `
<div class="nav-section">
<div class="nav-section-header">${item.label}</div>
${item.items ? this.renderNavigationItems(item.items) : ""}
</div>
`;
} else {
const isActive = this.props.currentPage === item.path;
return `
<a href="#"
class="nav-link ${isActive ? "active" : ""}"
data-path="${item.path}"
onclick="this.dispatchEvent(new CustomEvent('pageSelect', {detail: '${item.path}'}))">
${item.label}
</a>
`;
}
}).join("");
}
};
var DocsContentClass = class {
constructor(props) {
this.props = props;
}
render() {
if (this.props.loading) {
return '<div class="docs-content loading">Loading...</div>';
}
if (this.props.error) {
return `<div class="docs-content error">Error: ${this.props.error}</div>`;
}
if (!this.props.content) {
return '<div class="docs-content empty">No content selected</div>';
}
return `
<div class="docs-content">
${this.props.title ? `<h1>${this.props.title}</h1>` : ""}
<div class="content-body">
${this.props.content}
</div>
</div>
`;
}
};
function createDocsSidebar(props) {
return new DocsSidebarClass(props);
}
function createDocsContent(props) {
return new DocsContentClass(props);
}
function createDocsLayout(props) {
const sidebar = new DocsSidebarClass({
navigation: props.navigation,
currentPage: props.currentPage,
onPageSelect: props.onPageSelect,
collapsed: props.sidebarCollapsed
});
const content = new DocsContentClass({
content: props.content,
loading: false,
error: null
});
return `
<div class="docs-layout">
${sidebar.render()}
${content.render()}
</div>
`;
}
exports.DocsContent = DocsContentClass;
exports.DocsContentClass = DocsContentClass;
exports.DocsSidebar = DocsSidebarClass;
exports.DocsSidebarClass = DocsSidebarClass;
exports.createDocsContent = createDocsContent;
exports.createDocsLayout = createDocsLayout;
exports.createDocsSidebar = createDocsSidebar;
//# sourceMappingURL=components.cjs.map
//# sourceMappingURL=components.cjs.map
;