@salesforcedevs/docs-components 0.3.11 → 0.3.14-banner-alpha1

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.
Files changed (107) hide show
  1. package/lwc.config.json +12 -3
  2. package/package.json +17 -7
  3. package/src/modules/README.md +41 -0
  4. package/src/modules/doc/amfReference/amfReference.css +5 -0
  5. package/src/modules/doc/amfReference/amfReference.html +47 -0
  6. package/src/modules/doc/amfReference/amfReference.ts +1361 -0
  7. package/src/modules/doc/amfReference/constants.ts +76 -0
  8. package/src/modules/doc/amfReference/types.ts +133 -0
  9. package/src/modules/doc/amfReference/utils.ts +669 -0
  10. package/src/modules/doc/amfTopic/amfTopic.css +1 -0
  11. package/src/modules/doc/amfTopic/amfTopic.html +3 -0
  12. package/src/modules/doc/amfTopic/amfTopic.ts +94 -0
  13. package/src/modules/doc/amfTopic/types.ts +54 -0
  14. package/src/modules/doc/amfTopic/utils.ts +130 -0
  15. package/src/modules/doc/breadcrumbItem/breadcrumbItem.css +51 -0
  16. package/src/modules/doc/breadcrumbItem/breadcrumbItem.html +5 -0
  17. package/src/modules/doc/breadcrumbItem/breadcrumbItem.ts +64 -0
  18. package/src/modules/doc/breadcrumbs/breadcrumbs.css +27 -0
  19. package/src/modules/doc/breadcrumbs/breadcrumbs.html +60 -0
  20. package/src/modules/doc/breadcrumbs/breadcrumbs.ts +187 -0
  21. package/src/modules/doc/content/content.css +58 -102
  22. package/src/modules/doc/content/content.ts +261 -174
  23. package/src/modules/doc/contentCallout/contentCallout.css +7 -24
  24. package/src/modules/doc/contentCallout/contentCallout.html +4 -2
  25. package/src/modules/doc/contentCallout/contentCallout.ts +8 -2
  26. package/src/modules/doc/contentLayout/contentLayout.css +98 -0
  27. package/src/modules/doc/contentLayout/contentLayout.html +51 -0
  28. package/src/modules/doc/contentLayout/contentLayout.ts +322 -0
  29. package/src/modules/doc/header/header.css +103 -0
  30. package/src/modules/doc/header/header.html +160 -0
  31. package/src/modules/doc/header/header.ts +146 -0
  32. package/src/modules/doc/heading/heading.css +54 -0
  33. package/src/modules/doc/heading/heading.html +14 -0
  34. package/src/modules/doc/heading/heading.ts +65 -0
  35. package/src/modules/doc/headingAnchor/headingAnchor.css +33 -0
  36. package/src/modules/doc/headingAnchor/headingAnchor.html +19 -0
  37. package/src/modules/doc/headingAnchor/headingAnchor.ts +43 -0
  38. package/src/modules/doc/headingContent/headingContent.css +53 -0
  39. package/src/modules/doc/headingContent/headingContent.html +13 -0
  40. package/src/modules/doc/headingContent/headingContent.ts +30 -0
  41. package/src/modules/doc/phase/phase.css +55 -0
  42. package/src/modules/doc/phase/phase.html +28 -0
  43. package/src/modules/doc/phase/phase.ts +57 -0
  44. package/src/modules/doc/sprigSurvey/sprigSurvey.html +20 -0
  45. package/src/modules/doc/sprigSurvey/sprigSurvey.scoped.css +12 -0
  46. package/src/modules/doc/sprigSurvey/sprigSurvey.ts +16 -0
  47. package/src/modules/doc/toc/toc.html +3 -1
  48. package/src/modules/doc/toolbar/toolbar.ts +6 -6
  49. package/src/modules/doc/xmlContent/types.ts +114 -0
  50. package/src/modules/doc/xmlContent/utils.ts +161 -0
  51. package/src/modules/doc/xmlContent/xmlContent.css +32 -0
  52. package/src/modules/doc/xmlContent/xmlContent.html +40 -0
  53. package/src/modules/doc/xmlContent/xmlContent.ts +677 -0
  54. package/src/modules/docBaseElements/lightningElementWithState/lightningElementWithState.ts +93 -0
  55. package/src/modules/docHelpers/amfStyle/amfStyle.css +355 -0
  56. package/src/modules/docHelpers/phaseContentLayout/phaseContentLayout.css +39 -0
  57. package/src/modules/docHelpers/status/status.css +22 -0
  58. package/src/modules/docUtils/SearchSyncer/SearchSyncer.ts +85 -0
  59. package/LICENSE +0 -12
  60. package/src/modules/doc/container/__benchmarks__/container.benchmark.js +0 -43
  61. package/src/modules/doc/container/__mocks__/mockAvailableLanguages.js +0 -8
  62. package/src/modules/doc/container/__mocks__/mockAvailableVersions.js +0 -122
  63. package/src/modules/doc/container/__mocks__/mockContentFetchResponse.json +0 -5
  64. package/src/modules/doc/container/__mocks__/mockDocContent.js +0 -29
  65. package/src/modules/doc/container/__mocks__/mockNavigationFetchResponse.json +0 -4061
  66. package/src/modules/doc/container/__mocks__/mockPageReference.js +0 -8
  67. package/src/modules/doc/container/__mocks__/mockPdfUrl.js +0 -1
  68. package/src/modules/doc/container/__mocks__/mockSelectedLanguage.js +0 -8
  69. package/src/modules/doc/container/__mocks__/mockSelectedVersion.js +0 -8
  70. package/src/modules/doc/container/__mocks__/mockToc.js +0 -146
  71. package/src/modules/doc/container/__tests__/container.test.ts +0 -117
  72. package/src/modules/doc/container/container.css +0 -37
  73. package/src/modules/doc/container/container.html +0 -28
  74. package/src/modules/doc/container/container.stories.ts +0 -44
  75. package/src/modules/doc/container/container.ts +0 -367
  76. package/src/modules/doc/content/__tests__/content.test.ts +0 -99
  77. package/src/modules/doc/content/__tests__/mockDocContent.ts +0 -258
  78. package/src/modules/doc/content/__tests__/mockPageReference.ts +0 -8
  79. package/src/modules/doc/content/content.stories.ts +0 -82
  80. package/src/modules/doc/contentCallout/__tests__/contentCallout.test.ts +0 -80
  81. package/src/modules/doc/contentCallout/__tests__/mockProps.ts +0 -14
  82. package/src/modules/doc/contentCallout/contentCallout.stories.ts +0 -29
  83. package/src/modules/doc/contentMedia/__tests__/contentMedia.test.ts +0 -97
  84. package/src/modules/doc/contentMedia/contentMedia.stories.ts +0 -113
  85. package/src/modules/doc/landing/__tests__/landing.test.ts +0 -60
  86. package/src/modules/doc/landing/__tests__/mockFetch.json +0 -370
  87. package/src/modules/doc/landing/landing.css +0 -63
  88. package/src/modules/doc/landing/landing.html +0 -122
  89. package/src/modules/doc/landing/landing.stories.ts +0 -21
  90. package/src/modules/doc/landing/landing.ts +0 -222
  91. package/src/modules/doc/nav/__tests__/mockAvailableLanguages.ts +0 -8
  92. package/src/modules/doc/nav/__tests__/mockAvailableVersions.ts +0 -122
  93. package/src/modules/doc/nav/__tests__/mockPageReference.ts +0 -8
  94. package/src/modules/doc/nav/__tests__/mockPdfUrl.ts +0 -1
  95. package/src/modules/doc/nav/__tests__/mockSelectedLanguage.ts +0 -8
  96. package/src/modules/doc/nav/__tests__/mockSelectedVersion.ts +0 -8
  97. package/src/modules/doc/nav/__tests__/mockToc.ts +0 -146
  98. package/src/modules/doc/nav/__tests__/nav.test.ts +0 -58
  99. package/src/modules/doc/toc/__tests__/mockPageReference.ts +0 -8
  100. package/src/modules/doc/toc/__tests__/mockToc.ts +0 -146
  101. package/src/modules/doc/toc/__tests__/toc.test.ts +0 -29
  102. package/src/modules/doc/toolbar/__tests__/mockAvailableLanguages.ts +0 -8
  103. package/src/modules/doc/toolbar/__tests__/mockAvailableVersions.ts +0 -122
  104. package/src/modules/doc/toolbar/__tests__/mockPdfUrl.ts +0 -1
  105. package/src/modules/doc/toolbar/__tests__/mockSelectedLanguage.ts +0 -8
  106. package/src/modules/doc/toolbar/__tests__/mockSelectedVersion.ts +0 -8
  107. package/src/modules/doc/toolbar/__tests__/toolbar.test.ts +0 -44
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div class={className} part="container">
3
+ <div class="doc-phase-title-container">
4
+ <dx-icon
5
+ class="doc-status-icon doc-phase-icon"
6
+ symbol="recipe"
7
+ size="large"
8
+ color="status-icon-color"
9
+ ></dx-icon>
10
+ <p class="doc-status-title doc-phase-title dx-text-body-3">
11
+ {docPhaseTitle}
12
+ </p>
13
+ <dx-button
14
+ variant="inline"
15
+ onclick={onButtonClick}
16
+ aria-label={hideBodyText}
17
+ >
18
+ {hideBodyText}
19
+ </dx-button>
20
+ </div>
21
+ <!--
22
+ NOTE: Here we are rendering mark up using lwc:dom & innerHTML
23
+ option instead of slots because the html markup will come as a
24
+ property to the component from a configuration
25
+ -->
26
+ <span lwc:dom="manual" class={bodyClassName}></span>
27
+ </div>
28
+ </template>
@@ -0,0 +1,57 @@
1
+ import { LightningElement, api } from "lwc";
2
+ import cx from "classnames";
3
+
4
+ import { DocPhaseInfo } from "typings/custom";
5
+ import { toJson } from "dxUtils/normalizers";
6
+
7
+ export default class Phase extends LightningElement {
8
+ _docPhaseInfo: DocPhaseInfo | null = null;
9
+
10
+ isBodyHidden = false;
11
+
12
+ get docPhaseTitle() {
13
+ return this.docPhaseInfo?.title;
14
+ }
15
+
16
+ @api
17
+ get docPhaseInfo(): DocPhaseInfo | null {
18
+ return this._docPhaseInfo;
19
+ }
20
+
21
+ set docPhaseInfo(value) {
22
+ this._docPhaseInfo = toJson(value);
23
+ }
24
+
25
+ get hideBodyText() {
26
+ return this.isBodyHidden ? "Show" : "Hide";
27
+ }
28
+
29
+ get className() {
30
+ return cx(
31
+ "doc-status-base",
32
+ "doc-status-container",
33
+ "doc-phase-container"
34
+ );
35
+ }
36
+
37
+ get bodyClassName() {
38
+ return cx(
39
+ "doc-phase-body",
40
+ "dx-text-body-3",
41
+ this.isBodyHidden && "doc-phase-body-hidden"
42
+ );
43
+ }
44
+
45
+ renderedCallback() {
46
+ const phaseBodyContainer =
47
+ this.template.querySelector(".doc-phase-body");
48
+ if (phaseBodyContainer && this.docPhaseInfo) {
49
+ // eslint-disable-next-line @lwc/lwc/no-inner-html
50
+ phaseBodyContainer.innerHTML = this.docPhaseInfo.body;
51
+ }
52
+ }
53
+
54
+ onButtonClick() {
55
+ this.isBodyHidden = !this.isBodyHidden;
56
+ }
57
+ }
@@ -0,0 +1,20 @@
1
+ <template lwc:render-mode="light">
2
+ <hr />
3
+ <div class="survey-container">
4
+ <div class="text-container">
5
+ <b>DID THIS ARTICLE SOLVE YOUR ISSUE?</b>
6
+ <br />
7
+ Let us know so we can improve!
8
+ </div>
9
+ <div class="btn-container">
10
+ <dx-button
11
+ variant="secondary"
12
+ aria-label="Share Your Feedback"
13
+ onclick={openSurvey}
14
+ >
15
+ Share your feedback
16
+ </dx-button>
17
+ </div>
18
+ </div>
19
+ <hr />
20
+ </template>
@@ -0,0 +1,12 @@
1
+ :host .survey-container {
2
+ align-items: center;
3
+ align-content: center;
4
+ width: 100%;
5
+ display: flex;
6
+ flex-direction: row;
7
+ margin: 20px 0 20px 0;
8
+ }
9
+
10
+ .text-container {
11
+ width: 100%;
12
+ }
@@ -0,0 +1,16 @@
1
+ import { LightningElement } from "lwc";
2
+ import cx from "classnames";
3
+
4
+ declare const Sprig: (eventType: string, eventNme: string) => void;
5
+
6
+ export default class Phase extends LightningElement {
7
+ static renderMode = "light";
8
+
9
+ get className() {
10
+ return cx("container");
11
+ }
12
+
13
+ openSurvey() {
14
+ Sprig("track", "ProvideFeedback");
15
+ }
16
+ }
@@ -96,7 +96,9 @@
96
96
  <a
97
97
  href={child5.a_attr.href}
98
98
  data-id={child5.id}
99
- class="nav1"
99
+ class="
100
+ nav1
101
+ "
100
102
  onclick={handleNavClick}
101
103
  >
102
104
  {child5.text}
@@ -40,9 +40,9 @@ export default class Toolbar extends LightningElement {
40
40
  "select[name=languages]"
41
41
  ) as HTMLSelectElement;
42
42
  if (languageEl) {
43
- const languageValue = (languageEl[
44
- languageEl.selectedIndex
45
- ] as HTMLOptionElement).value;
43
+ const languageValue = (
44
+ languageEl[languageEl.selectedIndex] as HTMLOptionElement
45
+ ).value;
46
46
  this.dispatchEvent(
47
47
  new CustomEvent("languageselected", {
48
48
  detail: {
@@ -61,9 +61,9 @@ export default class Toolbar extends LightningElement {
61
61
  "select[name=versions]"
62
62
  ) as HTMLSelectElement;
63
63
  if (versionEl) {
64
- const versionValue = (versionEl[
65
- versionEl.selectedIndex
66
- ] as HTMLOptionElement).value;
64
+ const versionValue = (
65
+ versionEl[versionEl.selectedIndex] as HTMLOptionElement
66
+ ).value;
67
67
  this.dispatchEvent(
68
68
  new CustomEvent("versionselected", {
69
69
  detail: {
@@ -0,0 +1,114 @@
1
+ export type CoveoAdvancedQueryXMLConfig = {
2
+ locale?: string;
3
+ version?: string;
4
+ topicid?: string;
5
+ };
6
+
7
+ export type PageReference = {
8
+ domain?: string;
9
+ page?: string;
10
+ docId?: string;
11
+ deliverable?: string;
12
+ contentDocumentId?: string;
13
+ hash?: string;
14
+ search?: string;
15
+ };
16
+
17
+ export enum HistoryState {
18
+ PUSH_STATE = "pushState",
19
+ REPLACE_STATE = "replaceState"
20
+ }
21
+
22
+ export type TreeNode = {
23
+ label: string;
24
+ name: string;
25
+ children?: Array<TreeNode>;
26
+ isExpanded?: boolean;
27
+ parent?: TreeNode;
28
+ };
29
+
30
+ type DropdownOption = {
31
+ id: string;
32
+ label: string;
33
+ };
34
+
35
+ export type DocVersion = DropdownOption & {
36
+ releaseVersion: string;
37
+ url: string;
38
+ };
39
+
40
+ export type DocLanguage = DropdownOption & {
41
+ code: string;
42
+ url: string;
43
+ };
44
+
45
+ export type ApiDocVersion = {
46
+ version_text: string;
47
+ release_version: string;
48
+ doc_version: string;
49
+ version_url: string;
50
+ };
51
+
52
+ export type ApiDocLanguage = {
53
+ code: string;
54
+ label: string;
55
+ locale: string;
56
+ url: string;
57
+ };
58
+
59
+ export interface Header extends Element {
60
+ subtitle: string;
61
+ bailHref: string;
62
+ bailLabel: string;
63
+ languages: Array<DocLanguage>;
64
+ language: string;
65
+ headerHref: string;
66
+ }
67
+
68
+ export type ApiNavItem = {
69
+ children: Array<ApiNavItem>;
70
+ text: string;
71
+ a_attr: {
72
+ href: string;
73
+ };
74
+ id: string;
75
+ };
76
+
77
+ export type ApiDocData = {
78
+ available_languages: Array<ApiDocLanguage>;
79
+ available_versions: Array<ApiDocVersion>;
80
+ content: string;
81
+ content_document_id: string;
82
+ deliverable: string;
83
+ doc_title: string;
84
+ language: ApiDocLanguage;
85
+ title: string;
86
+ toc: Array<ApiNavItem>;
87
+ version: ApiDocVersion;
88
+ pdf_url: string;
89
+ };
90
+
91
+ export type ContentData = {
92
+ content: string;
93
+ id: string;
94
+ title: string;
95
+ };
96
+
97
+ export type DocumentData = ContentData & {
98
+ availableLanguages: Array<DocLanguage>;
99
+ availableVersions: Array<DocVersion>;
100
+ deliverable: string;
101
+ docTitle: string;
102
+ language: DocLanguage;
103
+ toc: Array<TreeNode>;
104
+ tocMap: { [key: string]: TreeNode };
105
+ version: DocVersion;
106
+ pdfUrl: string;
107
+ };
108
+
109
+ export type ContentApiOptions = {
110
+ version: string;
111
+ language: string;
112
+ };
113
+
114
+ export type TocMap = { [key: string]: TreeNode };
@@ -0,0 +1,161 @@
1
+ import {
2
+ ApiDocData,
3
+ ApiDocLanguage,
4
+ ApiDocVersion,
5
+ ApiNavItem,
6
+ ContentApiOptions,
7
+ ContentData,
8
+ DocumentData,
9
+ DocLanguage,
10
+ DocVersion,
11
+ TreeNode,
12
+ TocMap
13
+ } from "./types";
14
+ import { Language } from "typings/custom";
15
+ import { getLanguageDisplayTextById } from "dxUtils/language";
16
+
17
+ export class FetchContent {
18
+ private apiDomain: string;
19
+ private languages: Array<Language> = [];
20
+
21
+ constructor(apiDomain: string, languages: Array<Language>) {
22
+ this.apiDomain = apiDomain;
23
+ this.languages = languages;
24
+ }
25
+
26
+ async fetchDocumentData(docId: string): Promise<DocumentData | null> {
27
+ try {
28
+ const {
29
+ available_languages,
30
+ available_versions,
31
+ toc,
32
+ content,
33
+ version,
34
+ language,
35
+ content_document_id,
36
+ title,
37
+ doc_title,
38
+ pdf_url,
39
+ deliverable
40
+ } = await this.fetchResource<ApiDocData>(
41
+ `${this.apiDomain}/docs/get_document/${docId}`
42
+ );
43
+
44
+ const { normalizedToc, tocMap } = this.normalizeToc(toc);
45
+ return {
46
+ availableLanguages:
47
+ available_languages &&
48
+ available_languages.map(this.normalizeLanguage.bind(this)),
49
+ availableVersions:
50
+ available_versions &&
51
+ available_versions.map(this.normalizeVersion.bind(this)),
52
+ content,
53
+ version: this.normalizeVersion(version),
54
+ id: content_document_id,
55
+ language: this.normalizeLanguage(language),
56
+ title,
57
+ toc: normalizedToc,
58
+ tocMap,
59
+ docTitle: doc_title,
60
+ pdfUrl: pdf_url,
61
+ deliverable
62
+ };
63
+ } catch (error) {
64
+ console.log(error);
65
+ return null;
66
+ }
67
+ }
68
+
69
+ fetchContent(
70
+ deliverable: string,
71
+ contentId: string,
72
+ options: ContentApiOptions
73
+ ): Promise<ContentData> {
74
+ return this.fetchResource<ContentData>(
75
+ `${this.apiDomain}/docs/get_document_content/${deliverable}/${contentId}/${options.language}/${options.version}`
76
+ );
77
+ }
78
+
79
+ private async fetchResource<T>(url: string): Promise<T> {
80
+ const response = await fetch(url);
81
+ if (!response.ok) {
82
+ throw new Error(response.statusText);
83
+ }
84
+
85
+ const json = await response.json();
86
+
87
+ return json;
88
+ }
89
+
90
+ private normalizeToc(apiToc: Array<ApiNavItem>): {
91
+ tocMap: { [key: string]: TreeNode };
92
+ normalizedToc: Array<TreeNode>;
93
+ } {
94
+ const tocMap = {};
95
+ const normalizedToc =
96
+ apiToc &&
97
+ apiToc.map((navItem) => this.normalizeNavItem(navItem, tocMap));
98
+
99
+ return { normalizedToc, tocMap };
100
+ }
101
+
102
+ private normalizeNavItem(
103
+ navItem: ApiNavItem,
104
+ tocMap: TocMap,
105
+ parentNavItem?: TreeNode
106
+ ): TreeNode {
107
+ const name = this.calculateNavItemName(navItem, tocMap);
108
+ const node: TreeNode = {
109
+ label: navItem.text,
110
+ name,
111
+ parent: parentNavItem
112
+ };
113
+
114
+ if (name) {
115
+ tocMap[name] = node;
116
+ }
117
+ node.children = navItem.children?.map((child) =>
118
+ this.normalizeNavItem(child, tocMap, node)
119
+ );
120
+ return node;
121
+ }
122
+
123
+ private calculateNavItemName(navItem: ApiNavItem, tocMap: TocMap): string {
124
+ let href = navItem.a_attr?.href || "";
125
+ if (href.includes("#")) {
126
+ const [pathUrl] = href.split("#");
127
+ href = pathUrl in tocMap ? href : pathUrl;
128
+ }
129
+ return href || navItem.id;
130
+ }
131
+
132
+ private normalizeVersion(version: ApiDocVersion): DocVersion {
133
+ return (
134
+ version && {
135
+ label: version.version_text,
136
+ releaseVersion:
137
+ version.release_version &&
138
+ !version.release_version.startsWith("v")
139
+ ? `v${version.release_version}`
140
+ : version.release_version,
141
+ id: version.doc_version,
142
+ url: version.version_url
143
+ }
144
+ );
145
+ }
146
+
147
+ private normalizeLanguage(language: ApiDocLanguage): DocLanguage {
148
+ return (
149
+ language && {
150
+ label:
151
+ getLanguageDisplayTextById(
152
+ this.languages,
153
+ language.locale
154
+ ) || language.label,
155
+ id: language.locale,
156
+ code: language.code,
157
+ url: language.url
158
+ }
159
+ );
160
+ }
161
+ }
@@ -0,0 +1,32 @@
1
+ :host {
2
+ --button-primary-color: var(--dx-g-blue-vibrant-50);
3
+ --button-primary-color-hover: var(--dx-g-blue-vibrant-40);
4
+ }
5
+
6
+ doc-breadcrumbs {
7
+ --dx-c-popover-z-index: 5;
8
+
9
+ display: block;
10
+ margin-bottom: var(--dx-g-spacing-md);
11
+ }
12
+
13
+ dx-dropdown {
14
+ --dx-c-dropdown-option-font-size: var(--dx-g-text-sm);
15
+ }
16
+
17
+ dx-dropdown > dx-button {
18
+ --dx-c-button-primary-color: var(--button-primary-color);
19
+ --dx-c-button-primary-color-hover: var(--button-primary-color-hover);
20
+ --border-color: var(--button-primary-color);
21
+
22
+ border-bottom: 1px dashed var(--border-color);
23
+ }
24
+
25
+ dx-dropdown > dx-button:hover {
26
+ --border-color: var(--button-primary-color-hover);
27
+ }
28
+
29
+ .document-pickers {
30
+ margin-left: auto;
31
+ margin-right: var(--dx-g-spacing-sm);
32
+ }
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <doc-content-layout
3
+ if:true={loaded}
4
+ coveo-organization-id={coveoOrganizationId}
5
+ coveo-public-access-token={coveoPublicAccessToken}
6
+ coveo-search-hub="Developer_Docs_SS"
7
+ coveo-advanced-query-config={coveoAdvancedQueryConfig}
8
+ sidebar-header="Pages"
9
+ sidebar-content={sidebarContent}
10
+ sidebar-value={sidebarValue}
11
+ onselect={handleSelect}
12
+ use-old-sidebar={useOldSidebar}
13
+ >
14
+ <div slot="sidebar-header" class="document-pickers">
15
+ <dx-dropdown
16
+ data-type="version"
17
+ suppress-gtm-nav-headings
18
+ analytics-event={analyticsEvent}
19
+ options={versionOptions}
20
+ value={version.id}
21
+ width="290px"
22
+ >
23
+ <dx-button variant="inline" disabled={disableVersion}>
24
+ {version.releaseVersion}
25
+ </dx-button>
26
+ </dx-dropdown>
27
+ </div>
28
+ <doc-breadcrumbs
29
+ if:true={showBreadcrumbs}
30
+ breadcrumbs={breadcrumbs}
31
+ pixel-per-character={breadcrumbPixelPerCharacter}
32
+ ></doc-breadcrumbs>
33
+ <doc-content
34
+ docs-data={docContent}
35
+ page-reference={pageReference}
36
+ onnavclick={handleNavClick}
37
+ style={docContentStyle}
38
+ ></doc-content>
39
+ </doc-content-layout>
40
+ </template>