rapidoc 11.0.1 → 12.0.0
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/README.md +46 -31
- package/dist/rapidoc-min.js +1424 -213
- package/dist/rapidoc-static-min.js +13542 -0
- package/package.json +47 -35
- package/src/components/api-request.ts +869 -0
- package/src/components/api-response.ts +509 -0
- package/src/components/json-tree.ts +171 -0
- package/src/components/schema-base-element.ts +315 -0
- package/src/components/schema-table.ts +430 -0
- package/src/components/schema-tree.ts +386 -0
- package/src/components/tag-input.ts +184 -0
- package/src/index.js +6 -0
- package/src/oauth-receiver.ts +29 -0
- package/src/rapidoc-mini.ts +582 -0
- package/src/rapidoc.ts +1808 -0
- package/src/static/index.d.ts +149 -0
- package/src/static/index.js +62 -0
- package/src/static/navigation.js +497 -0
- package/src/static/render.js +490 -0
- package/src/static/serializer.js +216 -0
- package/src/styles/auth-styles.js +318 -0
- package/src/styles/border-styles.js +24 -0
- package/src/styles/css-bundle.js +129 -0
- package/src/styles/custom-styles.js +8 -0
- package/src/styles/dialog-box-styles.js +102 -0
- package/src/styles/endpoint-styles.js +559 -0
- package/src/styles/flex-styles.js +16 -0
- package/src/styles/font-styles.js +432 -0
- package/src/styles/info-styles.js +36 -0
- package/src/styles/input-styles.js +555 -0
- package/src/styles/layout-styles.js +396 -0
- package/src/styles/microlighter-styles.js +99 -0
- package/src/styles/nav-styles.js +609 -0
- package/src/styles/param-list-styles.js +261 -0
- package/src/styles/schema-styles.js +288 -0
- package/src/styles/tab-styles.js +106 -0
- package/src/styles/theme-tokens.js +582 -0
- package/src/templates/advanced-search-dialog-template.js +94 -0
- package/src/templates/api-response-template.js +219 -0
- package/src/templates/callback-template.js +86 -0
- package/src/templates/code-samples-template.js +52 -0
- package/src/templates/components-template.js +86 -0
- package/src/templates/downloads-template.js +85 -0
- package/src/templates/endpoint-template.js +386 -0
- package/src/templates/expanded-endpoint-template.js +266 -0
- package/src/templates/focused-endpoint-template.js +145 -0
- package/src/templates/header-template.js +92 -0
- package/src/templates/logo-template.js +21 -0
- package/src/templates/main-body-template.js +102 -0
- package/src/templates/navbar-template.js +489 -0
- package/src/templates/overview-template.js +104 -0
- package/src/templates/request-body-template.js +651 -0
- package/src/templates/request-params-template.js +474 -0
- package/src/templates/security-scheme-template.js +1263 -0
- package/src/templates/server-template.js +152 -0
- package/src/utils/auto-color-scheme.js +99 -0
- package/src/utils/bind-navbar.js +175 -0
- package/src/utils/color-utils.js +59 -0
- package/src/utils/common-utils.js +191 -0
- package/src/utils/curl-utils.js +123 -0
- package/src/utils/highlighter.js +416 -0
- package/src/utils/markdown-utils.js +110 -0
- package/src/utils/mcp/common.js +467 -0
- package/src/utils/mcp/generators/csharp.js +242 -0
- package/src/utils/mcp/generators/go.js +298 -0
- package/src/utils/mcp/generators/java.js +330 -0
- package/src/utils/mcp/generators/python.js +248 -0
- package/src/utils/mcp/generators/rust.js +281 -0
- package/src/utils/mcp/generators/typescript.js +290 -0
- package/src/utils/mcp-generator.js +143 -0
- package/src/utils/mock-interceptor.js +508 -0
- package/src/utils/oauth-utils.js +87 -0
- package/src/utils/request-utils.js +203 -0
- package/src/utils/response-utils.js +203 -0
- package/src/utils/sanitize.js +57 -0
- package/src/utils/schema-utils.js +1927 -0
- package/src/utils/slugger.js +189 -0
- package/src/utils/spec-parser.js +915 -0
- package/src/utils/url-utils.js +211 -0
- package/src/utils/xml-utils.js +61 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the single active API operation, overview, or component in focused (3-column) rendering mode.
|
|
3
|
+
*/
|
|
4
|
+
import { fixRenderedAnchorLinks } from "~/utils/markdown-utils";
|
|
5
|
+
import { html } from "lit";
|
|
6
|
+
import { unsafeHTML } from "lit/directives/unsafe-html.js";
|
|
7
|
+
import { sanitizeHTML } from "../utils/sanitize.js";
|
|
8
|
+
import { marked } from "marked";
|
|
9
|
+
import Slugger from "github-slugger";
|
|
10
|
+
import { expandedEndpointBodyTemplate } from "~/templates/expanded-endpoint-template";
|
|
11
|
+
import "~/components/api-request";
|
|
12
|
+
import "~/components/api-response";
|
|
13
|
+
import componentsTemplate from "~/templates/components-template";
|
|
14
|
+
import overviewTemplate from "~/templates/overview-template";
|
|
15
|
+
import downloadsTemplate from "~/templates/downloads-template";
|
|
16
|
+
import serverTemplate from "~/templates/server-template";
|
|
17
|
+
import securitySchemeTemplate from "~/templates/security-scheme-template";
|
|
18
|
+
import { expandCollapseNavBarTag } from "~/templates/navbar-template";
|
|
19
|
+
|
|
20
|
+
function headingRenderer(tagElementId) {
|
|
21
|
+
const renderer = new marked.Renderer();
|
|
22
|
+
const slugger = new Slugger();
|
|
23
|
+
// renderer.heading = (text, level, raw, slugger) => `<h${level} class="observe-me" id="${tagElementId}--${slugger.slug(raw)}">${text}</h${level}>`;
|
|
24
|
+
renderer.heading = ({ text, depth }) =>
|
|
25
|
+
`<h${depth} class="observe-me" id="${tagElementId}--${slugger.slug(text)}">${text}</h${depth}>`;
|
|
26
|
+
fixRenderedAnchorLinks(renderer);
|
|
27
|
+
return renderer;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function wrapFocusedTemplate(templateToWrap) {
|
|
31
|
+
return html`<div class="regular-font section-gap--focused-mode" part="section-operations-in-tag">${templateToWrap}</div>`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function defaultContentTemplate() {
|
|
35
|
+
// In focused mode default content is overview or first path
|
|
36
|
+
if (this.showInfo === "true") {
|
|
37
|
+
return wrapFocusedTemplate(html`${overviewTemplate.call(this)}${downloadsTemplate.call(this)}`);
|
|
38
|
+
}
|
|
39
|
+
const selectedTagObj = this.resolvedSpec.tags[0];
|
|
40
|
+
const selectedPathObj = this.resolvedSpec.tags[0]?.paths[0];
|
|
41
|
+
return selectedTagObj && selectedPathObj
|
|
42
|
+
? wrapFocusedTemplate(
|
|
43
|
+
expandedEndpointBodyTemplate.call(
|
|
44
|
+
this,
|
|
45
|
+
selectedPathObj,
|
|
46
|
+
selectedTagObj.name || "",
|
|
47
|
+
selectedTagObj.description || "",
|
|
48
|
+
true,
|
|
49
|
+
),
|
|
50
|
+
)
|
|
51
|
+
: wrapFocusedTemplate("");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function focusedTagBodyTemplate(tag) {
|
|
55
|
+
return html`
|
|
56
|
+
<h2 id="${tag.elementId}" class="rapidoc-heading title tag" part="section-tag-title label-tag-title heading heading-2">
|
|
57
|
+
${tag.displayName || tag.name}
|
|
58
|
+
</h2>
|
|
59
|
+
${
|
|
60
|
+
tag.description
|
|
61
|
+
? html`<div class="m-markdown regular-font">
|
|
62
|
+
${unsafeHTML(
|
|
63
|
+
sanitizeHTML(
|
|
64
|
+
marked(
|
|
65
|
+
tag.description || "",
|
|
66
|
+
this.infoDescriptionHeadingsInNavBar === "true"
|
|
67
|
+
? { renderer: headingRenderer(tag.elementId) }
|
|
68
|
+
: undefined,
|
|
69
|
+
),
|
|
70
|
+
),
|
|
71
|
+
)}
|
|
72
|
+
</div>`
|
|
73
|
+
: ""
|
|
74
|
+
}
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export default function focusedEndpointTemplate() {
|
|
79
|
+
if (!this.focusedElementId && this.resolvedSpec) {
|
|
80
|
+
this.focusedElementId =
|
|
81
|
+
this.showInfo === "false" || this.showInfo === false
|
|
82
|
+
? this.resolvedSpec.tags?.[0]?.paths?.[0]?.elementId || ""
|
|
83
|
+
: "overview";
|
|
84
|
+
}
|
|
85
|
+
if (!this.focusedElementId || !this.resolvedSpec) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const focusElId = this.focusedElementId;
|
|
89
|
+
let selectedPathObj = null;
|
|
90
|
+
let selectedTagObj = null;
|
|
91
|
+
let focusedTemplate;
|
|
92
|
+
if (focusElId.startsWith("overview") && this.showInfo === "true") {
|
|
93
|
+
focusedTemplate = html`${overviewTemplate.call(this)}${downloadsTemplate.call(this)}`;
|
|
94
|
+
} else if (focusElId === "auth" && this.allowAuthentication === "true") {
|
|
95
|
+
focusedTemplate = securitySchemeTemplate.call(this, this.allowTry);
|
|
96
|
+
} else if (focusElId === "servers" && this.allowServerSelection === "true") {
|
|
97
|
+
focusedTemplate = serverTemplate.call(this);
|
|
98
|
+
} else if (focusElId === "operations-top") {
|
|
99
|
+
focusedTemplate = html`<div id="operations-top" class="observe-me"><slot name="operations-top"></slot></div>`;
|
|
100
|
+
} else if (focusElId.startsWith("cmp--") && this.showComponents === "true") {
|
|
101
|
+
focusedTemplate = componentsTemplate.call(this);
|
|
102
|
+
} else if (focusElId.startsWith("tag--")) {
|
|
103
|
+
const idToFocus =
|
|
104
|
+
focusElId.indexOf("--", 4) > 0
|
|
105
|
+
? focusElId.substring(0, focusElId.indexOf("--", 5))
|
|
106
|
+
: focusElId;
|
|
107
|
+
selectedTagObj = this.resolvedSpec.tags.find((v) => v.elementId === idToFocus);
|
|
108
|
+
if (selectedTagObj) {
|
|
109
|
+
focusedTemplate = wrapFocusedTemplate.call(
|
|
110
|
+
this,
|
|
111
|
+
focusedTagBodyTemplate.call(this, selectedTagObj),
|
|
112
|
+
);
|
|
113
|
+
} else {
|
|
114
|
+
focusedTemplate = defaultContentTemplate.call(this);
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
for (const tag of this.resolvedSpec.tags) {
|
|
118
|
+
selectedTagObj = tag;
|
|
119
|
+
selectedPathObj = tag.paths.find((v) => `${v.elementId}` === focusElId);
|
|
120
|
+
if (selectedPathObj) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (selectedPathObj) {
|
|
125
|
+
// In focused mode we must expand the nav-bar tag element if it is collapsed
|
|
126
|
+
const newNavEl = this.shadowRoot?.getElementById(`link-${focusElId}`); // no shadowRoot when pre-rendering
|
|
127
|
+
expandCollapseNavBarTag(newNavEl, "expand");
|
|
128
|
+
const isFirst = selectedTagObj?.paths?.[0]?.elementId === selectedPathObj.elementId;
|
|
129
|
+
focusedTemplate = wrapFocusedTemplate.call(
|
|
130
|
+
this,
|
|
131
|
+
expandedEndpointBodyTemplate.call(
|
|
132
|
+
this,
|
|
133
|
+
selectedPathObj,
|
|
134
|
+
selectedTagObj.name || "",
|
|
135
|
+
selectedTagObj.description || "",
|
|
136
|
+
isFirst,
|
|
137
|
+
),
|
|
138
|
+
);
|
|
139
|
+
} else {
|
|
140
|
+
// if focusedElementId is not found then show the default content (overview or first-path)
|
|
141
|
+
focusedTemplate = defaultContentTemplate.call(this);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return focusedTemplate;
|
|
145
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the top navigation header with logo, title, search trigger, server selector, theme switcher, and auth controls.
|
|
3
|
+
*/
|
|
4
|
+
import { html } from "lit";
|
|
5
|
+
import logoTemplate from "~/templates/logo-template";
|
|
6
|
+
|
|
7
|
+
export default function headerTemplate() {
|
|
8
|
+
return html`<header class="row main-header regular-font" part="section-header">
|
|
9
|
+
<div class="only-large-screen-flex" style="align-items: center;">
|
|
10
|
+
<slot name="logo" class="logo" part="section-logo">
|
|
11
|
+
${logoTemplate("height:36px;width:36px;margin-left:5px")}
|
|
12
|
+
<!-- m-logo style="height:36px;width:36px;margin-left:5px"></m-logo -->
|
|
13
|
+
</slot>
|
|
14
|
+
<div class="header-title" part="label-header-title">${this.headingText}</div>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="main-header-controls">
|
|
17
|
+
${
|
|
18
|
+
this.allowSpecUrlLoad === "false"
|
|
19
|
+
? ""
|
|
20
|
+
: html`
|
|
21
|
+
<input
|
|
22
|
+
id="spec-url"
|
|
23
|
+
type="text"
|
|
24
|
+
style="font-size:var(--font-size-small)"
|
|
25
|
+
class="header-input mono-font"
|
|
26
|
+
part="textbox textbox-spec-url"
|
|
27
|
+
placeholder="Spec URL"
|
|
28
|
+
value="${this.specUrl || ""}"
|
|
29
|
+
@change="${this.onSpecUrlChange}"
|
|
30
|
+
spellcheck="false"
|
|
31
|
+
/>
|
|
32
|
+
<div class="header-action-icon" @click="${this.onSpecUrlChange}">↩</div>
|
|
33
|
+
`
|
|
34
|
+
}
|
|
35
|
+
${
|
|
36
|
+
this.allowSpecFileLoad === "false"
|
|
37
|
+
? ""
|
|
38
|
+
: html`
|
|
39
|
+
<input
|
|
40
|
+
id="spec-file"
|
|
41
|
+
part="file-input"
|
|
42
|
+
type="file"
|
|
43
|
+
style="display:none"
|
|
44
|
+
value="${this.specFile || ""}"
|
|
45
|
+
@change="${this.onSpecFileChange}"
|
|
46
|
+
spellcheck="false"
|
|
47
|
+
/>
|
|
48
|
+
<button
|
|
49
|
+
class="btn btn-primary only-large-screen"
|
|
50
|
+
style="margin-left:10px;"
|
|
51
|
+
part="btn btn-fill"
|
|
52
|
+
@click="${this.onFileLoadClick}"
|
|
53
|
+
>
|
|
54
|
+
LOCAL JSON FILE
|
|
55
|
+
</button>
|
|
56
|
+
`
|
|
57
|
+
}
|
|
58
|
+
<slot name="header"></slot>
|
|
59
|
+
${
|
|
60
|
+
this.allowSearch === "false" || "read focused".includes(this.renderStyle)
|
|
61
|
+
? ""
|
|
62
|
+
: html`
|
|
63
|
+
<input
|
|
64
|
+
id="search"
|
|
65
|
+
class="header-input"
|
|
66
|
+
type="text"
|
|
67
|
+
part="textbox textbox-header-filter"
|
|
68
|
+
placeholder="Filter"
|
|
69
|
+
@change="${this.onSearchChange}"
|
|
70
|
+
style="max-width:130px;margin-left:10px;"
|
|
71
|
+
spellcheck="false"
|
|
72
|
+
/>
|
|
73
|
+
<div class="header-action-icon" @click="${this.onSearchChange}">↩</div>
|
|
74
|
+
`
|
|
75
|
+
}
|
|
76
|
+
${
|
|
77
|
+
this.allowAdvancedSearch === "false" || "read focused".includes(this.renderStyle)
|
|
78
|
+
? ""
|
|
79
|
+
: html`
|
|
80
|
+
<button
|
|
81
|
+
class="btn btn-primary only-large-screen"
|
|
82
|
+
part="btn btn-fill btn-search"
|
|
83
|
+
style="margin-left:10px;"
|
|
84
|
+
@click="${this.onShowAdvancedSearchClicked}"
|
|
85
|
+
>
|
|
86
|
+
Search
|
|
87
|
+
</button>
|
|
88
|
+
`
|
|
89
|
+
}
|
|
90
|
+
</div>
|
|
91
|
+
</header>`;
|
|
92
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders default RapiDoc SVG branding logo.
|
|
3
|
+
*/
|
|
4
|
+
import { html } from "lit";
|
|
5
|
+
|
|
6
|
+
export default function logoTemplate(style) {
|
|
7
|
+
return html`<svg style=${style} viewBox="1 0 511 512">
|
|
8
|
+
<path d="M351 411a202 202 0 01-350 0 203 203 0 01333-24 203 203 0 0117 24zm0 0" fill="#adc165" />
|
|
9
|
+
<path
|
|
10
|
+
d="M334 387a202 202 0 01-216-69 202 202 0 01216 69zm78 32H85a8 8 0 01-8-8 8 8 0 018-8h327a8 8 0 017 8 8 8 0 01-7 8zm0 0"
|
|
11
|
+
fill="#99aa52"
|
|
12
|
+
/>
|
|
13
|
+
<path d="M374 338l-5 30a202 202 0 01-248-248 203 203 0 01253 218zm0 0" fill="#ffc73b" />
|
|
14
|
+
<path
|
|
15
|
+
d="M374 338a202 202 0 01-100-197 203 203 0 01100 197zm38 81l-6-2-231-231a8 8 0 0111-11l231 230a8 8 0 01-5 14zm0 0"
|
|
16
|
+
fill="#efb025"
|
|
17
|
+
/>
|
|
18
|
+
<path d="M311 175c0 75 40 140 101 175a202 202 0 000-350 202 202 0 00-101 175zm0 0" fill="#ff903e" />
|
|
19
|
+
<path d="M412 419a8 8 0 01-8-8V85a8 8 0 0115 0v326a8 8 0 01-7 8zm0 0" fill="#e87425" />
|
|
20
|
+
</svg>`;
|
|
21
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the top-level main layout shell, orchestrating header, navbar, content panels, and modal dialogs based on renderStyle.
|
|
3
|
+
*/
|
|
4
|
+
import { html } from "lit";
|
|
5
|
+
|
|
6
|
+
// Templates
|
|
7
|
+
import expandedEndpointTemplate from "~/templates/expanded-endpoint-template";
|
|
8
|
+
import focusedEndpointTemplate from "~/templates/focused-endpoint-template";
|
|
9
|
+
import overviewTemplate from "~/templates/overview-template";
|
|
10
|
+
import endpointTemplate from "~/templates/endpoint-template";
|
|
11
|
+
import serverTemplate from "~/templates/server-template";
|
|
12
|
+
import securitySchemeTemplate, {
|
|
13
|
+
recoverPersistedApiKeys,
|
|
14
|
+
} from "~/templates/security-scheme-template";
|
|
15
|
+
import headerTemplate from "~/templates/header-template";
|
|
16
|
+
import navbarTemplate from "~/templates/navbar-template";
|
|
17
|
+
import advancedSearchDialogTemplate from "~/templates/advanced-search-dialog-template";
|
|
18
|
+
import componentsTemplate from "~/templates/components-template";
|
|
19
|
+
import downloadsTemplate from "~/templates/downloads-template";
|
|
20
|
+
|
|
21
|
+
export default function mainBodyTemplate(isMini = false, pathsExpanded = false) {
|
|
22
|
+
if (!this.resolvedSpec) {
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
if (this.persistAuth === "true") {
|
|
26
|
+
recoverPersistedApiKeys.call(this);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (this.resolvedSpec.specLoadError) {
|
|
30
|
+
return html` <div id="spec-not-found">${this.resolvedSpec.info.description}</div>`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (this.resolvedSpec.isSpecLoading) {
|
|
34
|
+
return html` <main class="main-content regular-font" part="section-main-content">
|
|
35
|
+
<slot></slot>
|
|
36
|
+
<div class="main-content-inner--${this.renderStyle}-mode">
|
|
37
|
+
<div class="loader"></div>
|
|
38
|
+
</div>
|
|
39
|
+
</main>`;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return html` <slot name="fixed-header"></slot>
|
|
43
|
+
<!-- Header -->
|
|
44
|
+
${this.showHeader === "false" ? "" : headerTemplate.call(this)}
|
|
45
|
+
|
|
46
|
+
<!-- Advanced Search -->
|
|
47
|
+
${this.allowAdvancedSearch === "false" ? "" : advancedSearchDialogTemplate.call(this)}
|
|
48
|
+
|
|
49
|
+
<div id="the-main-body" class="body ${this.cssClasses}" dir="${this.pageDirection}">
|
|
50
|
+
<!-- Side Nav -->
|
|
51
|
+
${
|
|
52
|
+
(this.renderStyle === "read" || this.renderStyle === "focused") &&
|
|
53
|
+
this.showSideNav === "true" &&
|
|
54
|
+
this.resolvedSpec
|
|
55
|
+
? navbarTemplate.call(this)
|
|
56
|
+
: ""
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
<!-- Main Content -->
|
|
60
|
+
<main class="main-content regular-font" tabindex="-1" part="section-main-content">
|
|
61
|
+
<slot></slot>
|
|
62
|
+
<div class="main-content-inner--${this.renderStyle}-mode">
|
|
63
|
+
${
|
|
64
|
+
this.loading === true
|
|
65
|
+
? html`<div class="loader"></div>`
|
|
66
|
+
: html` ${
|
|
67
|
+
this.loadFailed === true
|
|
68
|
+
? html`<div style="text-align: center;margin: 16px;">Unable to load the Spec</div>`
|
|
69
|
+
: html`
|
|
70
|
+
<div
|
|
71
|
+
class="operations-root"
|
|
72
|
+
@click="${(e) => {
|
|
73
|
+
this.handleHref(e);
|
|
74
|
+
}}"
|
|
75
|
+
>
|
|
76
|
+
${
|
|
77
|
+
this.renderStyle === "focused"
|
|
78
|
+
? html`${this.showInfo === "false" ? downloadsTemplate.call(this) : ""}${focusedEndpointTemplate.call(this)}`
|
|
79
|
+
: html`
|
|
80
|
+
${this.showInfo === "true" ? overviewTemplate.call(this) : ""} ${downloadsTemplate.call(this)}
|
|
81
|
+
${this.allowServerSelection === "true" ? serverTemplate.call(this) : ""}
|
|
82
|
+
${this.allowAuthentication === "true" ? securitySchemeTemplate.call(this, this.allowTry) : ""}
|
|
83
|
+
<div id="operations-top" class="observe-me">
|
|
84
|
+
<slot name="operations-top"></slot>
|
|
85
|
+
</div>
|
|
86
|
+
${
|
|
87
|
+
this.renderStyle === "read"
|
|
88
|
+
? expandedEndpointTemplate.call(this)
|
|
89
|
+
: endpointTemplate.call(this, isMini, pathsExpanded)
|
|
90
|
+
}
|
|
91
|
+
${this.showComponents === "true" ? componentsTemplate.call(this) : ""}
|
|
92
|
+
`
|
|
93
|
+
}
|
|
94
|
+
</div>
|
|
95
|
+
`
|
|
96
|
+
}`
|
|
97
|
+
}
|
|
98
|
+
</div>
|
|
99
|
+
<slot name="footer"></slot>
|
|
100
|
+
</main>
|
|
101
|
+
</div>`;
|
|
102
|
+
}
|