@salesforcedevs/docs-components 0.56.2 → 0.56.3-example

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 (80) hide show
  1. package/lwc.config.json +10 -2
  2. package/package.json +19 -13
  3. package/src/modules/doc/{amfReference/utils.ts → amfModelParser/amfModelParser.ts} +10 -5
  4. package/src/modules/doc/amfReference/amfReference.css +23 -3
  5. package/src/modules/doc/amfReference/amfReference.html +42 -21
  6. package/src/modules/doc/amfReference/amfReference.ts +1022 -341
  7. package/src/modules/doc/amfReference/constants.ts +76 -0
  8. package/src/modules/doc/amfReference/types.ts +45 -13
  9. package/src/modules/doc/amfTopic/amfTopic.css +20 -0
  10. package/src/modules/doc/amfTopic/amfTopic.ts +35 -18
  11. package/src/modules/doc/amfTopic/types.ts +15 -13
  12. package/src/modules/doc/amfTopic/utils.ts +12 -6
  13. package/src/modules/doc/breadcrumbItem/breadcrumbItem.css +2 -1
  14. package/src/modules/doc/breadcrumbItem/breadcrumbItem.html +1 -1
  15. package/src/modules/doc/breadcrumbItem/breadcrumbItem.ts +22 -0
  16. package/src/modules/doc/breadcrumbs/breadcrumbs.css +9 -1
  17. package/src/modules/doc/breadcrumbs/breadcrumbs.html +44 -34
  18. package/src/modules/doc/breadcrumbs/breadcrumbs.ts +62 -23
  19. package/src/modules/doc/componentPlayground/componentPlayground.css +22 -0
  20. package/src/modules/doc/componentPlayground/componentPlayground.html +20 -0
  21. package/src/modules/doc/componentPlayground/componentPlayground.ts +42 -0
  22. package/src/modules/doc/content/content.css +70 -76
  23. package/src/modules/doc/content/content.html +1 -0
  24. package/src/modules/doc/content/content.ts +26 -47
  25. package/src/modules/doc/contentCallout/contentCallout.css +15 -7
  26. package/src/modules/doc/contentCallout/contentCallout.html +13 -4
  27. package/src/modules/doc/contentCallout/contentCallout.ts +14 -2
  28. package/src/modules/doc/contentLayout/contentLayout.css +1 -100
  29. package/src/modules/doc/contentLayout/contentLayout.html +30 -17
  30. package/src/modules/doc/contentLayout/contentLayout.ts +354 -65
  31. package/src/modules/doc/doDont/doDont.css +47 -0
  32. package/src/modules/doc/doDont/doDont.html +27 -0
  33. package/src/modules/doc/doDont/doDont.ts +17 -0
  34. package/src/modules/doc/header/header.css +65 -36
  35. package/src/modules/doc/header/header.html +41 -139
  36. package/src/modules/doc/header/header.ts +54 -76
  37. package/src/modules/doc/heading/heading.css +16 -37
  38. package/src/modules/doc/heading/heading.html +4 -4
  39. package/src/modules/doc/heading/heading.ts +12 -10
  40. package/src/modules/doc/headingAnchor/headingAnchor.css +2 -2
  41. package/src/modules/doc/headingAnchor/headingAnchor.ts +2 -2
  42. package/src/modules/doc/headingContent/headingContent.css +6 -8
  43. package/src/modules/doc/headingContent/headingContent.html +9 -15
  44. package/src/modules/doc/headingContent/headingContent.ts +2 -14
  45. package/src/modules/doc/lwcContentLayout/lwcContentLayout.css +1 -0
  46. package/src/modules/doc/lwcContentLayout/lwcContentLayout.html +68 -0
  47. package/src/modules/doc/lwcContentLayout/lwcContentLayout.ts +256 -0
  48. package/src/modules/doc/overview/overview.css +40 -0
  49. package/src/modules/doc/overview/overview.html +34 -0
  50. package/src/modules/doc/overview/overview.ts +12 -0
  51. package/src/modules/doc/phase/phase.css +18 -3
  52. package/src/modules/doc/phase/phase.html +15 -3
  53. package/src/modules/doc/phase/phase.ts +44 -8
  54. package/src/modules/doc/specificationContent/specificationContent.css +36 -0
  55. package/src/modules/doc/specificationContent/specificationContent.html +167 -0
  56. package/src/modules/doc/specificationContent/specificationContent.ts +127 -0
  57. package/src/modules/doc/sprigSurvey/sprigSurvey.html +20 -0
  58. package/src/modules/doc/sprigSurvey/sprigSurvey.scoped.css +16 -0
  59. package/src/modules/doc/sprigSurvey/sprigSurvey.ts +16 -0
  60. package/src/modules/doc/toc/toc.ts +1 -1
  61. package/src/modules/doc/versionPicker/versionPicker.css +64 -0
  62. package/src/modules/doc/versionPicker/versionPicker.html +38 -0
  63. package/src/modules/doc/versionPicker/versionPicker.ts +65 -0
  64. package/src/modules/doc/xmlContent/types.ts +12 -3
  65. package/src/modules/doc/xmlContent/utils.ts +17 -12
  66. package/src/modules/doc/xmlContent/xmlContent.css +32 -3
  67. package/src/modules/doc/xmlContent/xmlContent.html +41 -15
  68. package/src/modules/doc/xmlContent/xmlContent.ts +295 -95
  69. package/src/modules/docHelpers/amfStyle/amfStyle.css +10 -45
  70. package/src/modules/docHelpers/contentLayoutStyle/contentLayoutStyle.css +131 -0
  71. package/src/modules/docHelpers/imgStyle/imgStyle.css +59 -0
  72. package/src/modules/docHelpers/status/status.css +1 -1
  73. package/src/modules/docUtils/{SearchSyncer/SearchSyncer.ts → searchSyncer/searchSyncer.ts} +1 -0
  74. package/src/modules/docUtils/utils/__mocks__/coveo.analytics.ts +16 -0
  75. package/src/modules/docUtils/utils/coveo.analytics.d.ts +10 -0
  76. package/src/modules/docUtils/utils/utils.ts +32 -0
  77. package/LICENSE +0 -12
  78. package/src/modules/doc/amfReference/route-meta.ts +0 -22
  79. package/src/modules/docBaseElements/lightningElementWithState/lightningElementWithState.ts +0 -93
  80. package/src/modules/docHelpers/phaseContentLayout/phaseContentLayout.css +0 -39
@@ -8,10 +8,12 @@ type BreadcrumbConfig = {
8
8
  };
9
9
 
10
10
  const GAP = 8;
11
+
12
+ // Unit in pixels based on Salesforce Sans font-family.
11
13
  const CONSTANTS = {
12
- pixelPerCharacter: 7.2,
13
- pixelPerCrumbSpace: GAP * 2 + 4.6,
14
- minWidthPerCrumb: 245,
14
+ pixelPerCharacter: 7.7,
15
+ pixelPerCrumbSpace: GAP * 2 + 8.6,
16
+ minWidthPerCrumb: 200,
15
17
  dropdownWidth: 32
16
18
  };
17
19
 
@@ -22,19 +24,30 @@ export default class Breadcrumbs extends LightningElement {
22
24
  get breadcrumbs(): Breadcrumb[] {
23
25
  return this._breadcrumbs;
24
26
  }
27
+
25
28
  set breadcrumbs(value) {
26
- this._breadcrumbs = toJson(value) || [];
29
+ this.normalizeAndAssignBreadcrumbs(value);
27
30
  this.calculateBreadcrumbsConfigs();
28
- if (this.observer) {
29
- this.updateDropdownOptionAmount();
31
+ if (this.isRendered) {
32
+ this.onWidthOrContentChange();
30
33
  }
31
34
  }
32
35
 
36
+ @api
37
+ get pixelPerCharacter(): number {
38
+ return this._pixelPerCharacter;
39
+ }
40
+
41
+ set pixelPerCharacter(value: number | string) {
42
+ this._pixelPerCharacter = +value;
43
+ }
44
+
33
45
  private _breadcrumbs: Breadcrumb[] = [];
46
+ private _pixelPerCharacter = CONSTANTS.pixelPerCharacter;
34
47
  private navWidth = 0;
35
- private observer: ResizeObserver | null = null;
36
48
  private breadcrumbConfigs: BreadcrumbConfig[] = [];
37
49
  private dropdownOptionAmount? = 0;
50
+ private isRendered = false;
38
51
 
39
52
  private get renderSmallVariant(): boolean {
40
53
  return (
@@ -65,14 +78,14 @@ export default class Breadcrumbs extends LightningElement {
65
78
  private get dropdownOptions(): OptionWithLink[] {
66
79
  return this.breadcrumbs!.slice(1, this.dropdownOptionAmount! + 1).map(
67
80
  (link) => ({
68
- id: link.href!,
81
+ id: link.id!,
69
82
  label: link.label,
70
83
  link: { href: link.href! }
71
84
  })
72
85
  );
73
86
  }
74
87
 
75
- private get renderFirstCrumb(): boolean {
88
+ private get displayCrumbs(): boolean {
76
89
  return this.breadcrumbs.length > 1;
77
90
  }
78
91
 
@@ -80,27 +93,52 @@ export default class Breadcrumbs extends LightningElement {
80
93
  return this.breadcrumbs[0];
81
94
  }
82
95
 
96
+ private get breadcrumbLabels(): string {
97
+ return this.breadcrumbs.map((crumb) => crumb.label).join(":");
98
+ }
99
+
83
100
  private get lastCrumb(): Breadcrumb {
84
101
  return this.breadcrumbs[this.breadcrumbs.length - 1];
85
102
  }
86
103
 
104
+ // this payload is only used for breadcrumb dropdown
105
+ private get ANALYTICS_PAYLOAD() {
106
+ return {
107
+ element_type: "link",
108
+ nav_type: "breadcrumb",
109
+ nav_level: 1
110
+ };
111
+ }
112
+
113
+ private onWidthOrContentChange = () => {
114
+ this.navWidth = this.template
115
+ .querySelector("nav")!
116
+ .getBoundingClientRect().width;
117
+ this.updateDropdownOptionAmount();
118
+ };
119
+
87
120
  renderedCallback(): void {
88
- if (!this.observer) {
89
- this.observer = new ResizeObserver((entries) => {
90
- const [nav] = entries;
91
- if (this.navWidth === nav.contentRect.width) {
92
- return;
93
- }
94
- this.navWidth = nav.contentRect.width;
95
- this.updateDropdownOptionAmount();
96
- });
97
-
98
- this.observer.observe(this.template.querySelector("nav")!);
99
- }
121
+ this.isRendered = true;
122
+ this.onWidthOrContentChange();
123
+ window.addEventListener("resize", this.onWidthOrContentChange);
100
124
  }
101
125
 
102
126
  disconnectedCallback(): void {
103
- this.observer?.disconnect();
127
+ window.removeEventListener("resize", this.onWidthOrContentChange);
128
+ }
129
+
130
+ private normalizeAndAssignBreadcrumbs(breadcrumbs?: Breadcrumb[] | string) {
131
+ if (!breadcrumbs) {
132
+ return;
133
+ }
134
+
135
+ this._breadcrumbs = toJson(breadcrumbs).map(
136
+ (crumb: Breadcrumb, index: number) => ({
137
+ ...crumb,
138
+ id: crumb.id || crumb.href,
139
+ level: index
140
+ })
141
+ );
104
142
  }
105
143
 
106
144
  private updateDropdownOptionAmount(): void {
@@ -135,7 +173,8 @@ export default class Breadcrumbs extends LightningElement {
135
173
  (previousValue, element) =>
136
174
  previousValue +
137
175
  Math.min(
138
- element.label.length * CONSTANTS.pixelPerCharacter,
176
+ element.label.length *
177
+ (this.pixelPerCharacter || CONSTANTS.pixelPerCharacter),
139
178
  CONSTANTS.minWidthPerCrumb
140
179
  ),
141
180
  (breadcrumbs.length - 1) * CONSTANTS.pixelPerCrumbSpace + offset
@@ -0,0 +1,22 @@
1
+ @import "dxHelpers/reset";
2
+
3
+ /**
4
+ * Designs link - https://www.figma.com/design/9SalRPlJmtRDZHq03o8dL1/One-Doc-Site-Visionary-Mocks?node-id=9968-366397&m=dev
5
+ * Preview padding: 24px
6
+ * Example Selector height: 122px
7
+ * Example Preview min height: 150px
8
+ * Tab height with border: 46px(45px height and 1px border)
9
+ * Codeblock height: 264px(224px for codeblock and 40px for panel)
10
+ * Total: 606px
11
+ **/
12
+
13
+ iframe {
14
+ width: 100%;
15
+ height: 606px;
16
+ border-radius: var(--dx-g-spacing-sm);
17
+ border: 1px solid var(--dx-g-gray-90);
18
+ }
19
+
20
+ .playground-container {
21
+ position: relative;
22
+ }
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <div class="playground-container" lwc:if={playgroundAvailable}>
3
+ <dx-spinner
4
+ size="large"
5
+ variant="brand"
6
+ if:true={isLoading}
7
+ ></dx-spinner>
8
+ <iframe
9
+ src={playgroundSrc}
10
+ onload={handleIframeLoad}
11
+ title={playgroundTitle}
12
+ allow="clipboard-write"
13
+ ></iframe>
14
+ </div>
15
+ <dx-error-fallback
16
+ lwc:else
17
+ title="Code Examples Unavailable"
18
+ description="This component's code examples are currently unavailable. Please check again later."
19
+ ></dx-error-fallback>
20
+ </template>
@@ -0,0 +1,42 @@
1
+ import { LightningElement, api } from "lwc";
2
+
3
+ export default class ComponentPlayground extends LightningElement {
4
+ @api model!: string;
5
+ @api namespace!: string;
6
+ @api component!: string;
7
+ @api playgroundAppUrl!: string;
8
+
9
+ isLoading = true;
10
+
11
+ /**
12
+ * Returns a formatted title for the component playground
13
+ * Maps 'aura' model to 'Aura' and 'lwc' model to 'Lightning'
14
+ * Capitalizes the first letter of the component name
15
+ * @returns {string} Formatted playground title
16
+ */
17
+ get playgroundTitle() {
18
+ const modelName = this.model === "aura" ? "Aura" : "Lightning";
19
+ const componentName =
20
+ this.component.charAt(0).toUpperCase() + this.component.slice(1);
21
+ return `Example previews and code for ${modelName} ${componentName} component`;
22
+ }
23
+
24
+ get playgroundAvailable() {
25
+ return (
26
+ this.playgroundAppUrl &&
27
+ this.model &&
28
+ this.namespace &&
29
+ this.component
30
+ );
31
+ }
32
+
33
+ get playgroundSrc(): string {
34
+ return `${this.playgroundAppUrl}/playground/${this.model}/${
35
+ this.namespace
36
+ }/${this.component.toLowerCase()}.html`;
37
+ }
38
+
39
+ handleIframeLoad() {
40
+ this.isLoading = false;
41
+ }
42
+ }
@@ -6,8 +6,8 @@
6
6
 
7
7
  @import "dxHelpers/text";
8
8
  @import "dxHelpers/reset";
9
- @import "dxHelpers/card";
10
9
  @import "dxHelpers/table";
10
+ @import "docHelpers/imgStyle";
11
11
 
12
12
  .doc-content {
13
13
  width: 100%;
@@ -31,11 +31,6 @@
31
31
  margin-bottom: var(--dx-g-spacing-md);
32
32
  }
33
33
 
34
- .helpHead2 {
35
- margin-top: 36px;
36
- margin-bottom: var(--dx-g-spacing-md);
37
- }
38
-
39
34
  .relinfo {
40
35
  padding-top: var(--dx-g-spacing-sm);
41
36
  padding-bottom: var(--dx-g-spacing-sm);
@@ -46,17 +41,10 @@
46
41
  padding-bottom: var(--dx-g-spacing-sm);
47
42
  }
48
43
 
49
- img.content-image {
50
- height: auto;
51
- display: unset;
52
- }
53
-
54
44
  .image-block .content-image {
55
45
  margin-top: var(--dx-g-spacing-lg);
56
46
  margin-bottom: var(--dx-g-spacing-sm);
57
47
  display: block;
58
- margin-left: auto;
59
- margin-right: auto;
60
48
  }
61
49
 
62
50
  td > img.content-image:first-child:last-child[alt="Yes"],
@@ -64,61 +52,61 @@ td > img.content-image:first-child:last-child[alt="No"] {
64
52
  width: var(--dx-g-spacing-md);
65
53
  }
66
54
 
67
- h1 {
68
- font-family: var(--dx-g-font-display);
69
- font-size: var(--dx-g-text-4xl);
70
-
71
- /* not registered */
55
+ h1,
56
+ h2,
57
+ h3,
58
+ h4,
59
+ h5,
60
+ h6 {
72
61
  color: var(--dx-g-blue-vibrant-20);
73
- letter-spacing: -0.4px;
74
- line-height: 56px;
62
+ font-family: var(--dx-g-font-display);
63
+ font-weight: var(--dx-g-font-demi);
75
64
  }
76
65
 
77
- h2 {
78
- font-family: var(--dx-g-font-display);
66
+ h1 {
79
67
  font-size: var(--dx-g-text-3xl);
80
- color: var(--dx-g-blue-vibrant-20);
81
- letter-spacing: -0.1px;
68
+ letter-spacing: -0.8px;
82
69
  line-height: var(--dx-g-spacing-3xl);
70
+ margin: var(--dx-g-spacing-2xl) 0 var(--dx-g-spacing-md) 0;
83
71
  }
84
72
 
85
- h3 {
86
- font-family: var(--dx-g-font-display);
87
- font-size: 32px;
88
- color: var(--dx-g-blue-vibrant-20);
89
- letter-spacing: -0.1px;
73
+ h2 {
74
+ font-size: var(--dx-g-text-2xl);
75
+ letter-spacing: -0.4px;
90
76
  line-height: var(--dx-g-spacing-2xl);
77
+ margin: var(--dx-g-spacing-2xl) 0 var(--dx-g-spacing-md) 0;
91
78
  }
92
79
 
93
- h4 {
94
- font-family: var(--dx-g-font-display);
80
+ h3 {
95
81
  font-size: var(--dx-g-text-xl);
96
- color: var(--dx-g-blue-vibrant-20);
97
- letter-spacing: 0;
82
+ letter-spacing: -0.4px;
98
83
  line-height: var(--dx-g-spacing-xl);
84
+ margin: var(--dx-g-spacing-xl) 0 var(--dx-g-spacing-md) 0;
85
+ }
86
+
87
+ h4 {
88
+ font-size: var(--dx-g-text-base);
89
+ letter-spacing: -0.5px;
90
+ line-height: var(--dx-g-spacing-lg);
91
+ margin: var(--dx-g-spacing-lg) 0 var(--dx-g-spacing-sm) 0;
99
92
  }
100
93
 
101
94
  h5 {
102
- font-family: var(--dx-g-font-display);
103
- font-size: var(--dx-g-text-lg);
104
- color: var(--dx-g-blue-vibrant-20);
105
- letter-spacing: 0;
106
- line-height: 28px;
95
+ font-size: var(--dx-g-text-sm);
96
+ letter-spacing: -0.3px;
97
+ line-height: var(--dx-g-spacing-mlg);
98
+ margin: var(--dx-g-spacing-md) 0 var(--dx-g-spacing-sm) 0;
107
99
  }
108
100
 
109
101
  h6 {
110
- font-family: var(--dx-g-font-display);
111
- font-size: var(--dx-g-text-base);
112
- color: var(--dx-g-blue-vibrant-20);
113
- letter-spacing: 0;
114
- line-height: var(--dx-g-spacing-mlg);
102
+ font-size: var(--dx-g-text-xs);
103
+ letter-spacing: -0.3px;
104
+ line-height: var(--dx-g-spacing-md);
105
+ margin: var(--dx-g-spacing-sm) 0 var(--dx-g-spacing-sm) 0;
115
106
  }
116
107
 
117
- .dx-text-heading-alt-1 {
118
- color: var(--dx-g-gray-30);
119
- font-family: var(--dx-g-font-sans);
120
- font-size: var(--slds-text-lg);
121
- line-height: 25px;
108
+ img {
109
+ image-rendering: optimize-contrast;
122
110
  }
123
111
 
124
112
  p,
@@ -165,10 +153,6 @@ a,
165
153
  color: var(--dx-g-blue-vibrant-50);
166
154
  }
167
155
 
168
- .helpHead1 {
169
- margin-bottom: var(--dx-g-spacing-lg);
170
- }
171
-
172
156
  .shortdesc {
173
157
  font-family: var(--dx-g-font-sans);
174
158
  font-size: var(--dx-g-text-base);
@@ -270,6 +254,10 @@ li {
270
254
  var(--dx-g-spacing-lg);
271
255
  }
272
256
 
257
+ li table {
258
+ margin-bottom: var(--dx-g-spacing-lg);
259
+ }
260
+
273
261
  li > li {
274
262
  margin-left: var(--dx-g-spacing-2xl);
275
263
  }
@@ -283,27 +271,6 @@ a:hover,
283
271
  text-decoration: underline;
284
272
  }
285
273
 
286
- @media (max-width: 640px) {
287
- /* Mobile */
288
- img.content-image {
289
- max-width: 95vw;
290
- }
291
- }
292
-
293
- @media (min-width: 641px) {
294
- /* Tablet (medium) */
295
- img.content-image {
296
- max-width: 80vw;
297
- }
298
- }
299
-
300
- @media (min-width: 769px) {
301
- /* Desktop */
302
- img.content-image {
303
- max-width: min(60vw, 650px);
304
- }
305
- }
306
-
307
274
  ul,
308
275
  ol {
309
276
  margin-left: var(--dx-g-spacing-lg);
@@ -376,13 +343,30 @@ ul ul ul ul ul ul {
376
343
  margin: var(--dx-g-spacing-lg) 0;
377
344
  }
378
345
 
379
- figure {
346
+ figure,
347
+ .fig {
380
348
  margin: var(--dx-g-spacing-lg) 0;
349
+ text-align: left;
350
+ display: flex;
351
+ flex-direction: column;
352
+ align-items: left;
353
+ justify-content: left;
381
354
  }
382
355
 
383
- figcaption {
356
+ figcaption,
357
+ .figcap {
358
+ display: block;
384
359
  font-size: var(--dx-g-text-xs);
385
- margin-top: var(--dx-g-spacing-sm);
360
+ margin: var(--dx-g-spacing-sm) 0;
361
+ order: 2;
362
+ }
363
+
364
+ .figcap .image {
365
+ order: 1;
366
+ }
367
+
368
+ .fig.fig-centered {
369
+ text-align: center;
386
370
  }
387
371
 
388
372
  code,
@@ -397,3 +381,13 @@ samp,
397
381
  mark {
398
382
  background-color: var(--dx-g-yellow-vibrant-90);
399
383
  }
384
+
385
+ /* offset page jump link due to fixed header */
386
+ [id] {
387
+ --dx-c-content-scroll-margin-top: calc(
388
+ var(--dx-g-global-header-height) + var(--dx-g-doc-header-height) +
389
+ var(--dx-g-spacing-2xl)
390
+ );
391
+
392
+ scroll-margin-top: var(--dx-c-content-scroll-margin-top);
393
+ }
@@ -1,4 +1,5 @@
1
1
  <template>
2
+ <dx-redirect-checker></dx-redirect-checker>
2
3
  <template if:true={docsData}>
3
4
  <div class="container" data-name="content" lwc:dom="manual"></div>
4
5
  </template>
@@ -1,11 +1,11 @@
1
1
  /* eslint-disable @lwc/lwc/no-inner-html */
2
2
  import { createElement, LightningElement, api, track } from "lwc";
3
3
  import { DocContent, PageReference } from "typings/custom";
4
- import ContentCallout from "doc/contentCallout";
5
4
  import CodeBlock from "dx/codeBlock";
6
- import ContentMedia from "doc/contentMedia";
7
5
  import Button from "dx/button";
8
6
  import { highlightTerms } from "dxUtils/highlight";
7
+ import ContentCallout from "doc/contentCallout";
8
+ import ContentMedia from "doc/contentMedia";
9
9
 
10
10
  const HIGHLIGHTABLE_SELECTOR = [
11
11
  "p",
@@ -43,26 +43,10 @@ export default class Content extends LightningElement {
43
43
  return this.docContent;
44
44
  }
45
45
 
46
- @api
47
- set codeBlockTheme(value) {
48
- this._codeBlockTheme = value;
49
- }
50
-
51
- get codeBlockTheme() {
52
- return this._codeBlockTheme;
53
- }
54
-
55
46
  @track docContent: DocContent = "";
56
- _codeBlockTheme: string = "dark";
57
47
  _docRendered: boolean = false;
58
- originalCodeBlockThemeValue: String = "";
59
48
 
60
49
  connectedCallback() {
61
- this.template.addEventListener(
62
- "themechange",
63
- this.updateTheme.bind(this) // eslint-disableline no-use-before-define
64
- );
65
-
66
50
  window.addEventListener(
67
51
  "highlightedtermchange",
68
52
  this.updateHighlighted
@@ -76,17 +60,8 @@ export default class Content extends LightningElement {
76
60
  );
77
61
  }
78
62
 
79
- updateTheme() {
80
- this._codeBlockTheme =
81
- this._codeBlockTheme === "dark" ? "light" : "dark";
82
- const codeBlockEls = this.template.querySelectorAll("dx-code-block");
83
- codeBlockEls.forEach((codeBlockEl) => {
84
- codeBlockEl.setAttribute("theme", this._codeBlockTheme);
85
- });
86
- }
87
-
88
63
  renderPaginationButton(anchorEl: HTMLElement) {
89
- const isNext = anchorEl.textContent.includes("Next →");
64
+ const isNext = anchorEl.textContent!.includes("Next →");
90
65
  anchorEl.innerHTML = "";
91
66
  const buttonEl = createElement("dx-button", { is: Button });
92
67
  const params = isNext
@@ -116,11 +91,11 @@ export default class Content extends LightningElement {
116
91
  const codeBlockEls = divEl.querySelectorAll(".codeSection");
117
92
  codeBlockEls.forEach((codeBlockEl) => {
118
93
  codeBlockEl.setAttribute("lwc:dom", "manual");
119
- const classList = codeBlockEl.firstChild.classList;
94
+ const classList = codeBlockEl.firstElementChild?.classList;
120
95
  let language = "";
121
- for (const key in classList) {
122
- if (typeof classList[key] === "string") {
123
- const className = classList[key];
96
+ if (classList) {
97
+ for (let i = 0; i < classList.length; i++) {
98
+ const className = classList[i];
124
99
  if (className.startsWith("brush:")) {
125
100
  language = className.split(":")[1];
126
101
  }
@@ -133,8 +108,7 @@ export default class Content extends LightningElement {
133
108
  codeBlock: codeBlockEl.innerHTML,
134
109
  // ! Hot fix for incoming html tags from couchdb for xml blocks, fix me soon please
135
110
  language: LANGUAGE_MAP[language] || language,
136
- theme: this.codeBlockTheme,
137
- title: "", // Default no title.
111
+ header: "", // Default no title.
138
112
  variant: this.codeBlockType,
139
113
  isEncoded: true
140
114
  });
@@ -150,7 +124,7 @@ export default class Content extends LightningElement {
150
124
  is: ContentCallout
151
125
  });
152
126
  const detailEls = calloutEl.querySelectorAll(
153
- "p, div.data, ol, ul, p+.codeSection, .mediaBd > span.ph"
127
+ "p, .p, div.data, ol, ul, p+.codeSection, p~.codeSection, div >.codeSection, .mediaBd > span.ph"
154
128
  );
155
129
  detailEls.forEach((detailEl) => {
156
130
  if (detailEl.innerHTML.trim() !== "") {
@@ -158,9 +132,10 @@ export default class Content extends LightningElement {
158
132
  }
159
133
  });
160
134
 
135
+ // Set a flag to 1 (true) if and only if all detailEls have no content.
161
136
  let flag = 1;
162
- for (let i = 0; i < detailEls.length; i++) {
163
- flag &= detailEls[i].innerHTML.trim() === "";
137
+ for (let i: number = 0; i < detailEls.length; i++) {
138
+ flag &= (detailEls[i].innerHTML.trim() === "") as any; // Dark Magic TM
164
139
  }
165
140
 
166
141
  if (flag) {
@@ -170,10 +145,10 @@ export default class Content extends LightningElement {
170
145
  });
171
146
  }
172
147
 
173
- const type = calloutEl.querySelector("h4").textContent;
148
+ const type = calloutEl.querySelector("h4")!.textContent!;
174
149
  const typeLower = type.toLowerCase();
175
150
  Object.assign(calloutCompEl, {
176
- title: type,
151
+ header: type,
177
152
  variant: typeLower
178
153
  });
179
154
  // eslint-disable-next-line no-use-before-define
@@ -184,10 +159,10 @@ export default class Content extends LightningElement {
184
159
  // Modify links to work with any domain, links that start with "#" are excluded
185
160
  const anchorEls = divEl.querySelectorAll("a:not([href^='#'])");
186
161
 
187
- anchorEls.forEach((anchorEl) => {
162
+ anchorEls.forEach((anchorEl: any) => {
188
163
  if (
189
- anchorEl.textContent.includes("Next →") ||
190
- anchorEl.textContent.includes("← Previous")
164
+ anchorEl.textContent!.includes("Next →") ||
165
+ anchorEl.textContent!.includes("← Previous")
191
166
  ) {
192
167
  if (this.showPaginationButtons) {
193
168
  this.renderPaginationButton(anchorEl);
@@ -253,6 +228,7 @@ export default class Content extends LightningElement {
253
228
  const label = mediaEl.getAttribute("label");
254
229
  const width = mediaEl.getAttribute("width");
255
230
  const height = mediaEl.getAttribute("height");
231
+ const className = mediaEl.getAttribute("class");
256
232
 
257
233
  if (isImage) {
258
234
  src = src.startsWith("/")
@@ -264,6 +240,7 @@ export default class Content extends LightningElement {
264
240
 
265
241
  const img: HTMLImageElement = document.createElement("img");
266
242
  img.src = src;
243
+ img.alt = "";
267
244
  if (alt) {
268
245
  img.alt = alt;
269
246
  }
@@ -276,8 +253,11 @@ export default class Content extends LightningElement {
276
253
  if (width) {
277
254
  img.width = parseFloat(width);
278
255
  }
256
+ if (className) {
257
+ img.className = className;
258
+ }
279
259
 
280
- img.className = "content-image";
260
+ img.className = `content-image ${img.className}`;
281
261
  mediaEl.parentNode!.insertBefore(img, mediaEl);
282
262
  } else {
283
263
  const contentMediaEl = createElement("doc-content-media", {
@@ -321,8 +301,7 @@ export default class Content extends LightningElement {
321
301
 
322
302
  handleNavClick(event: InputEvent) {
323
303
  event.preventDefault();
324
- // eslint-disable-next-line no-use-before-define
325
- const target = event.currentTarget.dataset.id;
304
+ const target = (event.currentTarget! as any).dataset.id;
326
305
  const [page, docId, deliverable, tempContentDocumentId] =
327
306
  target.split("/");
328
307
  const [contentDocumentId, hash] = tempContentDocumentId.split("#");
@@ -355,7 +334,7 @@ export default class Content extends LightningElement {
355
334
  );
356
335
 
357
336
  @api
358
- public navigateToHash(hash: String) {
337
+ public navigateToHash = (hash: String) => {
359
338
  const splitHash = hash.split("#");
360
339
  if (splitHash.length === 2) {
361
340
  hash = splitHash[1];
@@ -366,7 +345,7 @@ export default class Content extends LightningElement {
366
345
  } else {
367
346
  window.scrollTo({ top: 0, behavior: "smooth" });
368
347
  }
369
- }
348
+ };
370
349
 
371
350
  renderedCallback() {
372
351
  if (this._docRendered) {