@salesforcedevs/docs-components 0.57.0-alpha-1 → 0.57.1-callout-fix2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/docs-components",
3
- "version": "0.57.0-alpha-1",
3
+ "version": "0.57.1-callout-fix2",
4
4
  "description": "Docs Lightning web components for DSC",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
@@ -4,13 +4,12 @@
4
4
  :host {
5
5
  display: flex;
6
6
  align-items: center;
7
- justify-content: center;
8
7
  width: fit-content;
9
8
  }
10
9
 
11
10
  :host(.breadcrumb_long) {
12
11
  /* ensure 30 character min-width */
13
- min-width: 200px;
12
+ min-width: 245px;
14
13
  }
15
14
 
16
15
  :host(.breadcrumb_back-arrow) {
@@ -4,8 +4,6 @@
4
4
  :host {
5
5
  --dx-c-breadcrumbs-title-color: var(--dx-g-blue-vibrant-20);
6
6
  --dx-c-breadcrumbs-breadcrumb-color: var(--dx-g-blue-vibrant-20);
7
-
8
- font-family: var(--dx-g-font-sans);
9
7
  }
10
8
 
11
9
  nav {
@@ -36,7 +36,7 @@
36
36
  analytics-event={analyticsEventName}
37
37
  analytics-base-payload={analyticsBasePayload}
38
38
  href={breadcrumb.href}
39
- key={breadcrumb.id}
39
+ key={breadcrumb.label}
40
40
  label={breadcrumb.label}
41
41
  ></doc-breadcrumb-item>
42
42
  <span class="breadcrumb-item_slash" key={breadcrumb.label}>
@@ -8,12 +8,10 @@ type BreadcrumbConfig = {
8
8
  };
9
9
 
10
10
  const GAP = 8;
11
-
12
- // Unit in pixels based on Salesforce Sans font-family.
13
11
  const CONSTANTS = {
14
- pixelPerCharacter: 7.7,
15
- pixelPerCrumbSpace: GAP * 2 + 8.6,
16
- minWidthPerCrumb: 200,
12
+ pixelPerCharacter: 7.2,
13
+ pixelPerCrumbSpace: GAP * 2 + 4.6,
14
+ minWidthPerCrumb: 245,
17
15
  dropdownWidth: 32
18
16
  };
19
17
 
@@ -31,26 +29,15 @@ export default class Breadcrumbs extends LightningElement {
31
29
  get breadcrumbs(): Breadcrumb[] {
32
30
  return this._breadcrumbs;
33
31
  }
34
-
35
32
  set breadcrumbs(value) {
36
- this.normalizeAndAssignBreadcrumbs(value);
33
+ this._breadcrumbs = toJson(value) || [];
37
34
  this.calculateBreadcrumbsConfigs();
38
35
  if (this.observer) {
39
36
  this.updateDropdownOptionAmount();
40
37
  }
41
38
  }
42
39
 
43
- @api
44
- get pixelPerCharacter(): number {
45
- return this._pixelPerCharacter;
46
- }
47
-
48
- set pixelPerCharacter(value: number | string) {
49
- this._pixelPerCharacter = +value;
50
- }
51
-
52
40
  private _breadcrumbs: Breadcrumb[] = [];
53
- private _pixelPerCharacter = CONSTANTS.pixelPerCharacter;
54
41
  private navWidth = 0;
55
42
  private observer: ResizeObserver | null = null;
56
43
  private breadcrumbConfigs: BreadcrumbConfig[] = [];
@@ -85,7 +72,7 @@ export default class Breadcrumbs extends LightningElement {
85
72
  private get dropdownOptions(): OptionWithLink[] {
86
73
  return this.breadcrumbs!.slice(1, this.dropdownOptionAmount! + 1).map(
87
74
  (link) => ({
88
- id: link.id!,
75
+ id: link.href!,
89
76
  label: link.label,
90
77
  link: { href: link.href! }
91
78
  })
@@ -131,17 +118,6 @@ export default class Breadcrumbs extends LightningElement {
131
118
  this.observer?.disconnect();
132
119
  }
133
120
 
134
- private normalizeAndAssignBreadcrumbs(breadcrumbs?: Breadcrumb[] | string) {
135
- if (!breadcrumbs) {
136
- return;
137
- }
138
-
139
- this._breadcrumbs = toJson(breadcrumbs).map((crumb: Breadcrumb) => ({
140
- ...crumb,
141
- id: crumb.id || crumb.href
142
- }));
143
- }
144
-
145
121
  private updateDropdownOptionAmount(): void {
146
122
  this.dropdownOptionAmount = this.breadcrumbConfigs.find(
147
123
  ({ minWidth }) => minWidth <= this.navWidth
@@ -174,8 +150,7 @@ export default class Breadcrumbs extends LightningElement {
174
150
  (previousValue, element) =>
175
151
  previousValue +
176
152
  Math.min(
177
- element.label.length *
178
- (this.pixelPerCharacter || CONSTANTS.pixelPerCharacter),
153
+ element.label.length * CONSTANTS.pixelPerCharacter,
179
154
  CONSTANTS.minWidthPerCrumb
180
155
  ),
181
156
  (breadcrumbs.length - 1) * CONSTANTS.pixelPerCrumbSpace + offset
@@ -150,7 +150,7 @@ export default class Content extends LightningElement {
150
150
  is: ContentCallout
151
151
  });
152
152
  const detailEls = calloutEl.querySelectorAll(
153
- "p, div.data, ol, ul, p+.codeSection, .mediaBd > span.ph"
153
+ "p, .p, div.data, ol, ul, p+.codeSection, p~.codeSection, div >.codeSection, .mediaBd > span.ph"
154
154
  );
155
155
  detailEls.forEach((detailEl) => {
156
156
  if (detailEl.innerHTML.trim() !== "") {
@@ -159,7 +159,7 @@ export default class Content extends LightningElement {
159
159
  });
160
160
 
161
161
  let flag = 1;
162
- for (let i = 0; i < detailEls.length; i++) {
162
+ for (let i: number = 0; i < detailEls.length; i++) {
163
163
  flag &= detailEls[i].innerHTML.trim() === "";
164
164
  }
165
165
 
@@ -56,7 +56,7 @@ dx-toc {
56
56
  max-width: 275px;
57
57
  }
58
58
 
59
- doc-breadcrumbs {
59
+ dx-breadcrumbs {
60
60
  display: block;
61
61
  margin-bottom: var(--dx-g-spacing-2xl);
62
62
  }
@@ -68,6 +68,10 @@ doc-breadcrumbs {
68
68
  }
69
69
 
70
70
  @media screen and (max-width: 800px) {
71
+ dx-breadcrumbs {
72
+ display: none;
73
+ }
74
+
71
75
  .content-body {
72
76
  margin-top: var(--dx-c-content-vertical-spacing);
73
77
  }
@@ -28,10 +28,17 @@
28
28
  <slot name="doc-phase"></slot>
29
29
  <div class="content-body-container">
30
30
  <div class="content-body">
31
- <doc-breadcrumbs
31
+ <dx-breadcrumbs
32
32
  if:true={breadcrumbs}
33
33
  breadcrumbs={breadcrumbs}
34
- ></doc-breadcrumbs>
34
+ truncate
35
+ hide-current-location
36
+ ></dx-breadcrumbs>
37
+ <dx-breadcrumbs
38
+ if:false={breadcrumbs}
39
+ pathname={pathname}
40
+ hide-current-location
41
+ ></dx-breadcrumbs>
35
42
  <slot onslotchange={onSlotChange}></slot>
36
43
  </div>
37
44
  <div class="right-nav-bar is-sticky">
@@ -24,7 +24,6 @@ export type TreeNode = {
24
24
  name: string;
25
25
  children?: Array<TreeNode>;
26
26
  isExpanded?: boolean;
27
- parent?: TreeNode;
28
27
  };
29
28
 
30
29
  type DropdownOption = {
@@ -110,5 +109,3 @@ export type ContentApiOptions = {
110
109
  version: string;
111
110
  language: string;
112
111
  };
113
-
114
- export type TocMap = { [key: string]: TreeNode };
@@ -8,8 +8,7 @@ import {
8
8
  DocumentData,
9
9
  DocLanguage,
10
10
  DocVersion,
11
- TreeNode,
12
- TocMap
11
+ TreeNode
13
12
  } from "./types";
14
13
  import { Language } from "typings/custom";
15
14
  import { getLanguageDisplayTextById } from "dxUtils/language";
@@ -101,26 +100,26 @@ export class FetchContent {
101
100
 
102
101
  private normalizeNavItem(
103
102
  navItem: ApiNavItem,
104
- tocMap: TocMap,
105
- parentNavItem?: TreeNode
103
+ tocMap: { [key: string]: TreeNode }
106
104
  ): TreeNode {
107
105
  const name = this.calculateNavItemName(navItem, tocMap);
108
106
  const node: TreeNode = {
109
107
  label: navItem.text,
110
- name,
111
- parent: parentNavItem
108
+ name
112
109
  };
113
-
114
110
  if (name) {
115
111
  tocMap[name] = node;
116
112
  }
117
113
  node.children = navItem.children?.map((child) =>
118
- this.normalizeNavItem(child, tocMap, node)
114
+ this.normalizeNavItem(child, tocMap)
119
115
  );
120
116
  return node;
121
117
  }
122
118
 
123
- private calculateNavItemName(navItem: ApiNavItem, tocMap: TocMap): string {
119
+ private calculateNavItemName(
120
+ navItem: ApiNavItem,
121
+ tocMap: { [key: string]: TreeNode }
122
+ ): string {
124
123
  let href = navItem.a_attr?.href || "";
125
124
  if (href.includes("#")) {
126
125
  const [pathUrl] = href.split("#");
@@ -145,13 +144,11 @@ export class FetchContent {
145
144
  }
146
145
 
147
146
  private normalizeLanguage(language: ApiDocLanguage): DocLanguage {
147
+
148
148
  return (
149
149
  language && {
150
- label:
151
- getLanguageDisplayTextById(
152
- this.languages,
153
- language.locale
154
- ) || language.label,
150
+ label: getLanguageDisplayTextById(this.languages, language.locale) ||
151
+ language.label,
155
152
  id: language.locale,
156
153
  code: language.code,
157
154
  url: language.url
@@ -3,11 +3,6 @@
3
3
  --button-primary-color-hover: var(--dx-g-blue-vibrant-40);
4
4
  }
5
5
 
6
- doc-breadcrumbs {
7
- display: block;
8
- margin-bottom: var(--dx-g-spacing-2xl);
9
- }
10
-
11
6
  dx-dropdown {
12
7
  --dx-c-dropdown-option-font-size: var(--dx-g-text-sm);
13
8
  }
@@ -25,11 +25,6 @@
25
25
  </dx-button>
26
26
  </dx-dropdown>
27
27
  </div>
28
- <doc-breadcrumbs
29
- if:true={breadcrumbs}
30
- breadcrumbs={breadcrumbs}
31
- pixel-per-character={breadcrumbPixelPerCharacter}
32
- ></doc-breadcrumbs>
33
28
  <doc-content
34
29
  docs-data={docContent}
35
30
  page-reference={pageReference}
@@ -8,26 +8,15 @@ import {
8
8
  TreeNode,
9
9
  Header,
10
10
  HistoryState,
11
- PageReference,
12
- TocMap
11
+ PageReference
13
12
  } from "./types";
14
13
  import { SearchSyncer } from "docUtils/SearchSyncer";
15
14
  import { LightningElementWithState } from "docBaseElements/lightningElementWithState";
16
- import { Breadcrumb, Language } from "typings/custom";
15
+ import { Language } from "typings/custom";
17
16
 
18
17
  // TODO: Imitating from actual implementation as doc-content use it like this. We should refactor it later.
19
18
  const handleContentError = (error): void => console.log(error);
20
19
 
21
- const FIRST_CRUMB = {
22
- href: "/docs",
23
- label: "Documentation"
24
- };
25
-
26
- const PIXEL_PER_CHARACTER_MAP: { [key: string]: number } = {
27
- default: 7.7,
28
- "ja-jp": 12.5
29
- };
30
-
31
20
  export default class DocXmlContent extends LightningElementWithState<{
32
21
  isFetchingDocument: boolean;
33
22
  isFetchingContent: boolean;
@@ -64,7 +53,7 @@ export default class DocXmlContent extends LightningElementWithState<{
64
53
  private language: DocLanguage = null;
65
54
  private loaded = false;
66
55
  private pdfUrl = "";
67
- private tocMap: TocMap = {};
56
+ private tocMap = null;
68
57
  private sidebarContent: Array<TreeNode> = null;
69
58
  private version: DocVersion = null;
70
59
  private docTitle = "";
@@ -113,7 +102,6 @@ export default class DocXmlContent extends LightningElementWithState<{
113
102
  private _allLanguages: Array<Language> = [];
114
103
 
115
104
  @track private pageReference: PageReference = {};
116
- @track breadcrumbs: Array<Breadcrumb> = [];
117
105
 
118
106
  constructor() {
119
107
  super();
@@ -279,13 +267,6 @@ export default class DocXmlContent extends LightningElementWithState<{
279
267
  }));
280
268
  }
281
269
 
282
- private get breadcrumbPixelPerCharacter() {
283
- return (
284
- PIXEL_PER_CHARACTER_MAP[this.language.id] ||
285
- PIXEL_PER_CHARACTER_MAP.default
286
- );
287
- }
288
-
289
270
  private handlePopState = (): void =>
290
271
  this.updatePageReference(this.getReferenceFromUrl());
291
272
 
@@ -299,15 +280,15 @@ export default class DocXmlContent extends LightningElementWithState<{
299
280
 
300
281
  if (name) {
301
282
  const hashIndex = name.indexOf("#");
302
- const hash = hashIndex > -1 ? name.slice(hashIndex) : "";
303
-
304
- const contentDocumentId =
305
- hashIndex > -1 ? name.slice(0, hashIndex) : name;
306
- this.updatePageReference({
307
- ...this.pageReference,
308
- contentDocumentId,
309
- hash
310
- });
283
+ this.pageReference.hash =
284
+ hashIndex > -1 ? name.slice(hashIndex) : "";
285
+
286
+ const contentId = hashIndex > -1 ? name.slice(0, hashIndex) : name;
287
+ if (this.pageReference.contentDocumentId !== contentId) {
288
+ this.pageReference.contentDocumentId = contentId;
289
+ this.fetchContent().catch(handleContentError);
290
+ }
291
+
311
292
  this.updateUrl();
312
293
  }
313
294
  }
@@ -340,17 +321,15 @@ export default class DocXmlContent extends LightningElementWithState<{
340
321
  return;
341
322
  }
342
323
 
343
- const isSameDocId = this.pageReference.docId === newPageReference.docId;
324
+ const isSameDocId = this.pageReference.docId !== newPageReference.docId;
344
325
  this.pageReference = newPageReference;
345
326
 
346
- if (!isSameDocId) {
327
+ if (isSameDocId) {
347
328
  this.fetchDocument();
348
329
  return;
349
330
  }
350
331
 
351
- this.fetchContent()
352
- .then(() => this.buildBreadcrumbs())
353
- .catch(handleContentError);
332
+ this.fetchContent().catch(handleContentError);
354
333
  }
355
334
 
356
335
  getReferenceFromUrl(): PageReference {
@@ -407,8 +386,6 @@ export default class DocXmlContent extends LightningElementWithState<{
407
386
 
408
387
  this.updateHeader();
409
388
 
410
- this.buildBreadcrumbs();
411
-
412
389
  if (this.pageReference.deliverable !== data.deliverable) {
413
390
  this.pageReference.deliverable = data.deliverable;
414
391
  this.updateUrl(HistoryState.REPLACE_STATE);
@@ -581,32 +558,6 @@ export default class DocXmlContent extends LightningElementWithState<{
581
558
  );
582
559
  }
583
560
 
584
- private buildBreadcrumbs(): void {
585
- const { contentDocumentId } = this.pageReference;
586
- if (!contentDocumentId) {
587
- return;
588
- }
589
-
590
- const currentNode = this.tocMap[contentDocumentId];
591
- this.breadcrumbs = this.nodeToBreadcrumb(currentNode);
592
- }
593
-
594
- private nodeToBreadcrumb(node?: TreeNode): Breadcrumb[] {
595
- if (!node) {
596
- return [FIRST_CRUMB];
597
- }
598
- return [
599
- ...this.nodeToBreadcrumb(node.parent),
600
- {
601
- href: this.pageReferenceToString({
602
- ...this.pageReference,
603
- contentDocumentId: node.name
604
- }),
605
- label: node.label
606
- }
607
- ];
608
- }
609
-
610
561
  addMetatags(): void {
611
562
  const div = document.createElement("div");
612
563
  div.innerHTML = this.docContent;