@salesforcedevs/docs-components 0.17.0 → 0.17.12-search-alpha

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 (114) hide show
  1. package/lwc.config.json +18 -3
  2. package/package.json +18 -7
  3. package/src/modules/README.md +41 -0
  4. package/src/modules/doc/amfModelParser/amfModelParser.ts +674 -0
  5. package/src/modules/doc/amfReference/amfReference.css +25 -0
  6. package/src/modules/doc/amfReference/amfReference.html +55 -0
  7. package/src/modules/doc/amfReference/amfReference.ts +1467 -0
  8. package/src/modules/doc/amfReference/constants.ts +76 -0
  9. package/src/modules/doc/amfReference/types.ts +125 -0
  10. package/src/modules/doc/amfTopic/amfTopic.css +21 -0
  11. package/src/modules/doc/amfTopic/amfTopic.html +3 -0
  12. package/src/modules/doc/amfTopic/amfTopic.ts +111 -0
  13. package/src/modules/doc/amfTopic/types.ts +56 -0
  14. package/src/modules/doc/amfTopic/utils.ts +136 -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 +71 -0
  18. package/src/modules/doc/breadcrumbs/breadcrumbs.css +27 -0
  19. package/src/modules/doc/breadcrumbs/breadcrumbs.html +58 -0
  20. package/src/modules/doc/breadcrumbs/breadcrumbs.ts +183 -0
  21. package/src/modules/doc/componentPlayground/componentPlayground.css +22 -0
  22. package/src/modules/doc/componentPlayground/componentPlayground.html +20 -0
  23. package/src/modules/doc/componentPlayground/componentPlayground.ts +42 -0
  24. package/src/modules/doc/content/content.css +89 -70
  25. package/src/modules/doc/content/content.html +1 -0
  26. package/src/modules/doc/content/content.ts +188 -195
  27. package/src/modules/doc/contentCallout/contentCallout.css +17 -23
  28. package/src/modules/doc/contentCallout/contentCallout.html +13 -4
  29. package/src/modules/doc/contentCallout/contentCallout.ts +16 -3
  30. package/src/modules/doc/contentLayout/contentLayout.css +1 -0
  31. package/src/modules/doc/contentLayout/contentLayout.html +46 -0
  32. package/src/modules/doc/contentLayout/contentLayout.ts +524 -0
  33. package/src/modules/doc/doDont/doDont.css +47 -0
  34. package/src/modules/doc/doDont/doDont.html +27 -0
  35. package/src/modules/doc/doDont/doDont.ts +17 -0
  36. package/src/modules/doc/header/header.css +70 -37
  37. package/src/modules/doc/header/header.html +41 -138
  38. package/src/modules/doc/header/header.ts +56 -78
  39. package/src/modules/doc/heading/heading.css +33 -0
  40. package/src/modules/doc/heading/heading.html +14 -0
  41. package/src/modules/doc/heading/heading.ts +67 -0
  42. package/src/modules/doc/headingAnchor/headingAnchor.css +3 -3
  43. package/src/modules/doc/headingAnchor/headingAnchor.ts +2 -2
  44. package/src/modules/doc/headingContent/headingContent.css +53 -0
  45. package/src/modules/doc/headingContent/headingContent.html +13 -0
  46. package/src/modules/doc/headingContent/headingContent.ts +30 -0
  47. package/src/modules/doc/lwcContentLayout/lwcContentLayout.css +1 -0
  48. package/src/modules/doc/lwcContentLayout/lwcContentLayout.html +45 -0
  49. package/src/modules/doc/lwcContentLayout/lwcContentLayout.ts +256 -0
  50. package/src/modules/doc/overview/overview.css +40 -0
  51. package/src/modules/doc/overview/overview.html +34 -0
  52. package/src/modules/doc/overview/overview.ts +12 -0
  53. package/src/modules/doc/phase/phase.css +70 -0
  54. package/src/modules/doc/phase/phase.html +38 -0
  55. package/src/modules/doc/phase/phase.ts +93 -0
  56. package/src/modules/doc/specificationContent/specificationContent.css +36 -0
  57. package/src/modules/doc/specificationContent/specificationContent.html +167 -0
  58. package/src/modules/doc/specificationContent/specificationContent.ts +127 -0
  59. package/src/modules/doc/sprigSurvey/sprigSurvey.html +20 -0
  60. package/src/modules/doc/sprigSurvey/sprigSurvey.scoped.css +16 -0
  61. package/src/modules/doc/sprigSurvey/sprigSurvey.ts +16 -0
  62. package/src/modules/doc/toc/toc.ts +1 -1
  63. package/src/modules/doc/versionPicker/versionPicker.css +64 -0
  64. package/src/modules/doc/versionPicker/versionPicker.html +38 -0
  65. package/src/modules/doc/versionPicker/versionPicker.ts +65 -0
  66. package/src/modules/doc/xmlContent/types.ts +120 -0
  67. package/src/modules/doc/xmlContent/utils.ts +163 -0
  68. package/src/modules/doc/xmlContent/xmlContent.css +54 -0
  69. package/src/modules/doc/xmlContent/xmlContent.html +54 -0
  70. package/src/modules/doc/xmlContent/xmlContent.ts +763 -0
  71. package/src/modules/docHelpers/amfStyle/amfStyle.css +355 -0
  72. package/src/modules/docHelpers/contentLayoutStyle/contentLayoutStyle.css +131 -0
  73. package/src/modules/docHelpers/imgStyle/imgStyle.css +59 -0
  74. package/src/modules/docHelpers/status/status.css +22 -0
  75. package/src/modules/docUtils/searchSyncer/searchSyncer.ts +86 -0
  76. package/src/modules/docUtils/utils/__mocks__/coveo.analytics.ts +16 -0
  77. package/src/modules/docUtils/utils/coveo.analytics.d.ts +10 -0
  78. package/src/modules/docUtils/utils/utils.ts +32 -0
  79. package/LICENSE +0 -12
  80. package/src/modules/doc/content/__tests__/content.test.ts +0 -312
  81. package/src/modules/doc/content/__tests__/mockDocContent.ts +0 -348
  82. package/src/modules/doc/content/__tests__/mockPageReference.ts +0 -8
  83. package/src/modules/doc/content/__tests__/mockSidebar.ts +0 -81
  84. package/src/modules/doc/content/content.stories.ts +0 -148
  85. package/src/modules/doc/contentCallout/__tests__/contentCallout.test.ts +0 -80
  86. package/src/modules/doc/contentCallout/__tests__/mockProps.ts +0 -14
  87. package/src/modules/doc/contentCallout/contentCallout.stories.ts +0 -29
  88. package/src/modules/doc/contentMedia/__tests__/contentMedia.test.ts +0 -97
  89. package/src/modules/doc/contentMedia/contentMedia.stories.ts +0 -113
  90. package/src/modules/doc/header/__tests__/coveoConfig.ts +0 -12
  91. package/src/modules/doc/header/__tests__/header.test.ts +0 -445
  92. package/src/modules/doc/header/__tests__/mockNavDevelopers.ts +0 -427
  93. package/src/modules/doc/header/__tests__/mockNavs.ts +0 -115
  94. package/src/modules/doc/header/__tests__/mockProps.ts +0 -152
  95. package/src/modules/doc/header/header.stories.ts +0 -190
  96. package/src/modules/doc/headingAnchor/__tests__/headingAnchor.test.ts +0 -111
  97. package/src/modules/doc/headingAnchor/headingAnchor.stories.ts +0 -33
  98. package/src/modules/doc/nav/__tests__/mockAvailableLanguages.ts +0 -8
  99. package/src/modules/doc/nav/__tests__/mockAvailableVersions.ts +0 -122
  100. package/src/modules/doc/nav/__tests__/mockPageReference.ts +0 -8
  101. package/src/modules/doc/nav/__tests__/mockPdfUrl.ts +0 -1
  102. package/src/modules/doc/nav/__tests__/mockSelectedLanguage.ts +0 -8
  103. package/src/modules/doc/nav/__tests__/mockSelectedVersion.ts +0 -8
  104. package/src/modules/doc/nav/__tests__/mockToc.ts +0 -146
  105. package/src/modules/doc/nav/__tests__/nav.test.ts +0 -58
  106. package/src/modules/doc/toc/__tests__/mockPageReference.ts +0 -8
  107. package/src/modules/doc/toc/__tests__/mockToc.ts +0 -146
  108. package/src/modules/doc/toc/__tests__/toc.test.ts +0 -29
  109. package/src/modules/doc/toolbar/__tests__/mockAvailableLanguages.ts +0 -8
  110. package/src/modules/doc/toolbar/__tests__/mockAvailableVersions.ts +0 -122
  111. package/src/modules/doc/toolbar/__tests__/mockPdfUrl.ts +0 -1
  112. package/src/modules/doc/toolbar/__tests__/mockSelectedLanguage.ts +0 -8
  113. package/src/modules/doc/toolbar/__tests__/mockSelectedVersion.ts +0 -8
  114. package/src/modules/doc/toolbar/__tests__/toolbar.test.ts +0 -44
@@ -0,0 +1,120 @@
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
+ link?: {
39
+ href: string;
40
+ };
41
+ };
42
+
43
+ export type DocLanguage = DropdownOption & {
44
+ code: string;
45
+ url: string;
46
+ };
47
+
48
+ export type ApiDocVersion = {
49
+ version_text: string;
50
+ release_version: string;
51
+ doc_version: string;
52
+ version_url: string;
53
+ };
54
+
55
+ export type ApiDocLanguage = {
56
+ code: string;
57
+ label: string;
58
+ locale: string;
59
+ url: string;
60
+ };
61
+
62
+ export interface Header extends Element {
63
+ subtitle: string;
64
+ headerHref: string;
65
+ }
66
+
67
+ export type SiderbarFooter = {
68
+ bailHref: string;
69
+ bailLabel: string;
70
+ languages: Array<DocLanguage>;
71
+ language?: string;
72
+ };
73
+
74
+ export type ApiNavItem = {
75
+ children: Array<ApiNavItem>;
76
+ text: string;
77
+ a_attr: {
78
+ href: string;
79
+ };
80
+ id: string;
81
+ };
82
+
83
+ export type ApiDocData = {
84
+ available_languages: Array<ApiDocLanguage>;
85
+ available_versions: Array<ApiDocVersion>;
86
+ content: string;
87
+ content_document_id: string;
88
+ deliverable: string;
89
+ doc_title: string;
90
+ language: ApiDocLanguage;
91
+ title: string;
92
+ toc: Array<ApiNavItem>;
93
+ version: ApiDocVersion;
94
+ pdf_url: string;
95
+ };
96
+
97
+ export type ContentData = {
98
+ content: string;
99
+ id: string;
100
+ title: string;
101
+ };
102
+
103
+ export type DocumentData = ContentData & {
104
+ availableLanguages: Array<DocLanguage>;
105
+ availableVersions: Array<DocVersion>;
106
+ deliverable: string;
107
+ docTitle: string;
108
+ language: DocLanguage;
109
+ toc: Array<TreeNode>;
110
+ tocMap: { [key: string]: TreeNode };
111
+ version: DocVersion;
112
+ pdfUrl: string;
113
+ };
114
+
115
+ export type ContentApiOptions = {
116
+ version: string;
117
+ language: string;
118
+ };
119
+
120
+ export type TocMap = { [key: string]: TreeNode };
@@ -0,0 +1,163 @@
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(
91
+ apiToc: Array<ApiNavItem>
92
+ ): {
93
+ tocMap: { [key: string]: TreeNode };
94
+ normalizedToc: Array<TreeNode>;
95
+ } {
96
+ const tocMap = {};
97
+ const normalizedToc =
98
+ apiToc &&
99
+ apiToc.map((navItem) => this.normalizeNavItem(navItem, tocMap));
100
+
101
+ return { normalizedToc, tocMap };
102
+ }
103
+
104
+ private normalizeNavItem(
105
+ navItem: ApiNavItem,
106
+ tocMap: TocMap,
107
+ parentNavItem?: TreeNode
108
+ ): TreeNode {
109
+ const name = this.calculateNavItemName(navItem, tocMap);
110
+ const node: TreeNode = {
111
+ label: navItem.text,
112
+ name,
113
+ parent: parentNavItem
114
+ };
115
+
116
+ if (name) {
117
+ tocMap[name] = node;
118
+ }
119
+ node.children = navItem.children?.map((child) =>
120
+ this.normalizeNavItem(child, tocMap, node)
121
+ );
122
+ return node;
123
+ }
124
+
125
+ private calculateNavItemName(navItem: ApiNavItem, tocMap: TocMap): string {
126
+ let href = navItem.a_attr?.href || "";
127
+ if (href.includes("#")) {
128
+ const [pathUrl] = href.split("#");
129
+ href = pathUrl in tocMap ? href : pathUrl;
130
+ }
131
+ return href || navItem.id;
132
+ }
133
+
134
+ private normalizeVersion(version: ApiDocVersion): DocVersion {
135
+ return (
136
+ version && {
137
+ label: version.version_text,
138
+ releaseVersion:
139
+ version.release_version &&
140
+ !version.release_version.startsWith("v")
141
+ ? `v${version.release_version}`
142
+ : version.release_version,
143
+ id: version.doc_version,
144
+ url: version.version_url
145
+ }
146
+ );
147
+ }
148
+
149
+ private normalizeLanguage(language: ApiDocLanguage): DocLanguage {
150
+ return (
151
+ language && {
152
+ label:
153
+ getLanguageDisplayTextById(
154
+ this.languages,
155
+ language.locale
156
+ ) || language.label,
157
+ id: language.locale,
158
+ code: language.code,
159
+ url: language.url
160
+ }
161
+ );
162
+ }
163
+ }
@@ -0,0 +1,54 @@
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-content-layout {
7
+ --dx-c-content-sidebar-sticky-top: var(--dx-g-global-header-height);
8
+ --dx-c-sidebar-height: calc(100vh - var(--dx-g-global-header-height));
9
+ }
10
+
11
+ doc-breadcrumbs {
12
+ --dx-c-popover-z-index: 5;
13
+
14
+ display: block;
15
+ margin-bottom: var(--dx-g-spacing-md);
16
+ }
17
+
18
+ dx-dropdown {
19
+ --dx-c-dropdown-option-font-size: var(--dx-g-text-sm);
20
+ }
21
+
22
+ dx-dropdown > dx-button {
23
+ --dx-c-button-primary-color: var(--button-primary-color);
24
+ --dx-c-button-primary-color-hover: var(--button-primary-color-hover);
25
+ --border-color: var(--button-primary-color);
26
+
27
+ border-bottom: 1px dashed var(--border-color);
28
+ }
29
+
30
+ dx-dropdown > dx-button:hover {
31
+ --border-color: var(--button-primary-color-hover);
32
+ }
33
+
34
+ doc-phase {
35
+ --doc-c-phase-top: var(--dx-g-global-header-height);
36
+ }
37
+
38
+ @media screen and (max-width: 768px) {
39
+ doc-content-layout {
40
+ --dx-g-doc-header-main-nav-height: 41px;
41
+ --dx-g-doc-header-height: calc(
42
+ var(--dx-g-doc-header-main-nav-height) + 40px
43
+ );
44
+ --dx-c-content-sidebar-sticky-top: calc(
45
+ var(--dx-g-global-header-height) + var(--dx-g-doc-header-height)
46
+ );
47
+ }
48
+
49
+ doc-phase {
50
+ --doc-c-phase-top: calc(
51
+ var(--dx-g-global-header-height) + var(--dx-g-doc-header-height)
52
+ );
53
+ }
54
+ }
@@ -0,0 +1,54 @@
1
+ <template>
2
+ <doc-content-layout
3
+ lwc:if={displayContent}
4
+ lwc:ref="docContentLayout"
5
+ sidebar-header={docTitle}
6
+ sidebar-content={sidebarContent}
7
+ sidebar-value={sidebarValue}
8
+ onselect={handleSelect}
9
+ onlangchange={handleLanguageChange}
10
+ languages={sidebarFooterContent.languages}
11
+ language={sidebarFooterContent.language}
12
+ bail-href={sidebarFooterContent.bailHref}
13
+ bail-label={sidebarFooterContent.bailLabel}
14
+ show-footer={enableFooter}
15
+ >
16
+ <doc-phase
17
+ slot="version-banner"
18
+ lwc:if={showVersionBanner}
19
+ doc-phase-info={oldVersionInfo}
20
+ icon-name="warning"
21
+ dismissible="true"
22
+ ondismissphase={handleDismissVersionBanner}
23
+ ></doc-phase>
24
+ <div lwc:if={showVersionPicker} slot="sidebar-header">
25
+ <doc-version-picker
26
+ data-type="version"
27
+ analytics-event="custEv_ctaLinkClick"
28
+ analytics-payload={ANALYTICS_PAYLOAD}
29
+ versions={versionOptions}
30
+ selected-version={version}
31
+ latest-version={latestVersion}
32
+ hide-badge={previewVersion}
33
+ ></doc-version-picker>
34
+ </div>
35
+ <doc-breadcrumbs
36
+ lwc:if={showBreadcrumbs}
37
+ breadcrumbs={breadcrumbs}
38
+ pixel-per-character={breadcrumbPixelPerCharacter}
39
+ ></doc-breadcrumbs>
40
+ <doc-content
41
+ docs-data={docContent}
42
+ page-reference={pageReference}
43
+ onnavclick={handleNavClick}
44
+ ></doc-content>
45
+ </doc-content-layout>
46
+ <div lwc:if={display404}>
47
+ <dx-error
48
+ image="https://a.sfdcstatic.com/developer-website/images/404.svg"
49
+ code="404"
50
+ header="Beep boop. That did not compute."
51
+ subtitle="The document you're looking for doesn't seem to exist."
52
+ ></dx-error>
53
+ </div>
54
+ </template>