@salesforcedevs/docs-components 1.3.105-image-resizing-2 → 1.3.106-alpha.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/docs-components",
3
- "version": "1.3.105-image-resizing-2",
3
+ "version": "1.3.106-alpha.0",
4
4
  "description": "Docs Lightning web components for DSC",
5
5
  "license": "MIT",
6
6
  "main": "index.js",
@@ -1,5 +1,3 @@
1
- @import "docHelpers/phaseContentLayout";
2
-
3
1
  .api-documentation {
4
2
  margin-top: 48px;
5
3
  }
@@ -16,9 +16,11 @@
16
16
  toc-options={tocOptions}
17
17
  enable-slot-change="true"
18
18
  >
19
- <div slot="doc-phase" if:true={docPhaseInfo} class="doc-phase-wrapper">
20
- <doc-phase doc-phase-info={docPhaseInfo}></doc-phase>
21
- </div>
19
+ <doc-phase
20
+ slot="doc-phase"
21
+ if:true={docPhaseInfo}
22
+ doc-phase-info={docPhaseInfo}
23
+ ></doc-phase>
22
24
  <div slot="sidebar-header" class="version-picker">
23
25
  <template if:true={isVersionEnabled}>
24
26
  <dx-dropdown
@@ -28,7 +30,9 @@
28
30
  value={selectedVersion.id}
29
31
  width="290px"
30
32
  >
31
- <dx-button variant="inline" class="version-picker-text">{selectedVersion.id}</dx-button>
33
+ <dx-button variant="inline" class="version-picker-text">
34
+ {selectedVersion.id}
35
+ </dx-button>
32
36
  </dx-dropdown>
33
37
  </template>
34
38
  </div>
@@ -1,5 +1,14 @@
1
1
  :host {
2
2
  --dx-c-content-vertical-spacing: var(--dx-g-spacing-lg);
3
+ --dx-c-content-sidebar-sticky-top: calc(
4
+ var(--dx-g-global-header-height) + var(--dx-g-doc-header-height)
5
+ );
6
+ --dx-c-sidebar-height: calc(
7
+ 100vh -
8
+ calc(
9
+ var(--dx-g-global-header-height) + var(--dx-g-doc-header-height)
10
+ )
11
+ );
3
12
 
4
13
  display: block;
5
14
  }
@@ -13,7 +22,6 @@ doc-breadcrumbs {
13
22
 
14
23
  dx-sidebar,
15
24
  dx-sidebar-old {
16
- --dx-c-sidebar-height: 100%;
17
25
  --dx-c-sidebar-vertical-padding: var(--dx-c-content-vertical-spacing);
18
26
 
19
27
  z-index: 6;
@@ -34,6 +42,7 @@ dx-toc {
34
42
 
35
43
  .content {
36
44
  display: flex;
45
+ position: relative;
37
46
  }
38
47
 
39
48
  .content-body-doc-phase-container {
@@ -43,24 +52,27 @@ dx-toc {
43
52
  .content-body-container {
44
53
  display: flex;
45
54
  flex-direction: row;
46
- padding-right: var(--dx-g-page-padding-horizontal);
55
+ justify-content: center;
56
+ max-width: var(--dx-g-doc-content-max-width);
57
+ margin: auto;
58
+ padding: 0 var(--dx-g-global-header-padding-horizontal);
47
59
  }
48
60
 
49
61
  .content-body {
50
- margin: var(--dx-g-spacing-sm) var(--dx-c-content-vertical-spacing)
51
- var(--dx-g-spacing-xl);
62
+ margin: var(--dx-g-spacing-sm) 0 var(--dx-g-spacing-xl);
63
+ max-width: 900px;
52
64
  flex: 1;
53
65
  width: 0;
54
66
  }
55
67
 
56
68
  .is-sticky {
57
- height: 100vh;
69
+ align-self: flex-start;
58
70
  position: sticky;
59
- top: 0;
71
+ top: var(--dx-c-content-sidebar-sticky-top);
60
72
  }
61
73
 
62
74
  .right-nav-bar {
63
- max-width: 275px;
75
+ margin-left: var(--dx-c-content-vertical-spacing);
64
76
  }
65
77
 
66
78
  @media screen and (max-width: 1024px) {
@@ -76,6 +88,10 @@ dx-toc {
76
88
  }
77
89
 
78
90
  @media screen and (max-width: 768px) {
91
+ .is-sticky {
92
+ width: 100%;
93
+ }
94
+
79
95
  .content {
80
96
  flex-direction: column;
81
97
  }
@@ -85,8 +101,6 @@ dx-toc {
85
101
  }
86
102
 
87
103
  .left-nav-bar {
88
- --dx-c-sidebar-height: 80vh;
89
-
90
104
  height: unset;
91
105
  z-index: 10;
92
106
  }
@@ -37,9 +37,8 @@
37
37
  if:true={shouldDisplayFeedback}
38
38
  ></doc-sprig-survey>
39
39
  </div>
40
- <div class="right-nav-bar is-sticky">
40
+ <div if:true={showToc} class="right-nav-bar is-sticky">
41
41
  <dx-toc
42
- if:true={showToc}
43
42
  title={tocTitle}
44
43
  options={tocOptions}
45
44
  value={tocValue}
@@ -149,6 +149,11 @@ export default class ContentLayout extends LightningElement {
149
149
  this.attachInteractionObserver,
150
150
  OBSERVER_ATTACH_WAIT_TIME
151
151
  );
152
+
153
+ this.adjustNavPosition();
154
+ window.addEventListener("scroll", this.adjustNavPosition);
155
+ window.addEventListener("resize", this.adjustNavPosition);
156
+
152
157
  if (!this.hasRendered) {
153
158
  this.hasRendered = true;
154
159
  this.restoreScroll();
@@ -161,6 +166,8 @@ export default class ContentLayout extends LightningElement {
161
166
  "highlightedtermchange",
162
167
  this.updateHighlighted
163
168
  );
169
+ window.removeEventListener("scroll", this.adjustNavPosition);
170
+ window.removeEventListener("resize", this.adjustNavPosition);
164
171
  this.searchSyncer.dispose();
165
172
  this.clearRenderObserverTimer();
166
173
 
@@ -178,6 +185,32 @@ export default class ContentLayout extends LightningElement {
178
185
  }
179
186
  };
180
187
 
188
+ adjustNavPosition = () => {
189
+ const sidebarType = this.useOldSidebar
190
+ ? "dx-sidebar-old"
191
+ : "dx-sidebar";
192
+ const sidebarEl = this.template.querySelector(sidebarType);
193
+ const globalNavEl = document.querySelector(
194
+ "hgf-c360nav"
195
+ ) as HTMLElement;
196
+ const contextNavEl = document.querySelector(
197
+ "hgf-c360contextnav"
198
+ ) as HTMLElement;
199
+ const docHeaderEl = document.querySelector("doc-header") as HTMLElement;
200
+
201
+ if (!sidebarEl || !globalNavEl || !contextNavEl || !docHeaderEl) {
202
+ console.warn("One or more required elements are missing.");
203
+ return;
204
+ }
205
+
206
+ const totalOffsetHeight =
207
+ globalNavEl.offsetHeight +
208
+ contextNavEl.offsetHeight +
209
+ docHeaderEl.offsetHeight;
210
+
211
+ sidebarEl.style.top = `${totalOffsetHeight}px`;
212
+ };
213
+
181
214
  updateHighlighted = (event: Event): void =>
182
215
  highlightTerms(
183
216
  this.querySelectorAll(HIGHLIGHTABLE_SELECTOR),
@@ -7,6 +7,7 @@ dx-logo {
7
7
 
8
8
  .header_l2 {
9
9
  justify-content: space-between;
10
+ height: var(--dx-g-doc-header-main-nav-height);
10
11
  }
11
12
 
12
13
  .nav_menu-button {
@@ -56,10 +57,11 @@ header:not(.has-brand) > .header_l2 {
56
57
  --border-color: var(--button-primary-color-hover);
57
58
  }
58
59
 
59
- @media (max-width: 740px) {
60
+ @media (max-width: 768px) {
60
61
  .header_l2 {
61
62
  padding: 0;
62
63
  flex-wrap: wrap;
64
+ height: 100%;
63
65
  }
64
66
 
65
67
  .has-nav-items .header_l2 {
@@ -77,12 +79,14 @@ header:not(.has-brand) > .header_l2 {
77
79
  }
78
80
 
79
81
  .header_l2_group-nav_overflow {
82
+ height: 48px;
80
83
  margin-right: var(--dx-g-spacing-sm);
81
84
  }
82
85
 
83
86
  .header_l2_group-title {
84
87
  margin-right: 0;
85
- padding: var(--dx-g-spacing-smd) var(--dx-g-page-padding-horizontal);
88
+ padding: var(--dx-g-spacing-smd)
89
+ var(--dx-g-global-header-padding-horizontal);
86
90
  }
87
91
 
88
92
  .header_l2_group-title .header_lang-dropdown {
@@ -1,164 +1,94 @@
1
1
  <template>
2
- <dx-brand-theme-provider brand={brand}>
3
- <header class={className}>
4
- <dx-skip-nav-link></dx-skip-nav-link>
5
- <dx-banner
6
- if:true={showBanner}
7
- banner-markup={bannerMarkup}
8
- ></dx-banner>
9
- <div class="header_l1">
10
- <div if:true={showMenuButton} class="nav_menu-ctas">
11
- <dx-button
12
- aria-label="Menu Button"
13
- class="nav_menu-button"
14
- icon-size="large"
15
- icon-symbol={mobileMenuIconSymbol}
16
- variant="tertiary"
17
- onclick={toggleMobileNavMenu}
18
- ></dx-button>
19
- </div>
20
- <dx-logo label={title}></dx-logo>
21
- <dx-header-nav
22
- if:true={showDesktopNavItems}
23
- aria-label="Global Navigation Bar"
24
- nav-items={navItems}
25
- onrequestopennavmenu={onRequestOpenNavMenu}
26
- pathname={pathname}
27
- variant="small"
28
- ></dx-header-nav>
29
- <div class="header-cta-container">
30
- <dx-header-search
31
- if:true={hasSearch}
32
- coveo-organization-id={coveoOrganizationId}
33
- coveo-public-access-token={coveoPublicAccessToken}
34
- coveo-search-pipeline={coveoSearchPipeline}
35
- coveo-search-hub={coveoSearchHub}
36
- mobile={tablet}
37
- onstatechange={handleStateChange}
38
- ></dx-header-search>
39
- </div>
40
- <div
41
- if:true={showTbidLogin}
42
- class="header-tbid-login"
43
- onclick={closeMobileNavMenu}
44
- >
45
- <dw-tbid-login-menu
46
- tbid-api-base-url={tbidApiBaseUrl}
47
- tbid-base-url={tbidBaseUrl}
48
- ></dw-tbid-login-menu>
49
- </div>
50
- <div if:true={showSignup} class="header-login-signup">
51
- <dx-button
52
- aria-label="Browse Trials"
53
- size="small"
54
- href={signupLink}
55
- onclick={handleSignUpClick}
56
- >
57
- Browse Trials
58
- </dx-button>
59
- </div>
60
- <dx-header-mobile-nav-menu
61
- if:true={hasNavItems}
62
- nav-items={navItems}
63
- open={showMobileNavMenu}
64
- pathname={pathname}
65
- value={mobileNavMenuValue}
66
- onchange={onMobileNavMenuChange}
67
- onrequestclose={closeMobileNavMenu}
68
- >
69
- <dx-button
70
- aria-label={bailLabel}
71
- if:true={hasBailLink}
72
- href={bailHref}
73
- variant="tertiary"
74
- icon-symbol="new_window"
75
- >
76
- {bailLabel}
77
- </dx-button>
78
- </dx-header-mobile-nav-menu>
79
- </div>
80
- <div class="header_l2">
81
- <div class="header_l2_group header_l2_group-title">
82
- <a href={headerHref} class="home-link">
83
- <dx-icon
84
- class="brand-icon"
85
- if:true={isValidBrand}
86
- sprite="salesforcebrand"
87
- symbol={brand}
88
- size="xlarge"
89
- ></dx-icon>
90
- <span class="subtitle dx-text-display-6">
91
- {subtitle}
92
- </span>
93
- </a>
94
- <dx-dropdown
95
- if:true={showMobileLanguages}
96
- class="header_lang-dropdown"
97
- options={languages}
98
- small
99
- value={language}
100
- value-path={langValuePath}
101
- onchange={onLangChange}
102
- >
103
- <dx-button
104
- aria-label="Select Language"
105
- variant="inline"
106
- icon-size="large"
107
- icon-symbol="world"
108
- ></dx-button>
109
- </dx-dropdown>
110
- </div>
111
- <div
112
- if:true={hasScopedNavItems}
113
- class="header_l2_group header_l2_group-nav"
114
- >
2
+ <template if:true={shouldRender}>
3
+ <dx-brand-theme-provider brand={brand}>
4
+ <header class={className}>
5
+ <dx-banner
6
+ if:true={showBanner}
7
+ banner-markup={bannerMarkup}
8
+ ></dx-banner>
9
+ <div class="header_l2">
10
+ <div class="header_l2_group header_l2_group-title">
11
+ <a href={headerHref} class="home-link">
12
+ <dx-icon
13
+ class="brand-icon"
14
+ if:true={isValidBrand}
15
+ sprite="salesforcebrand"
16
+ symbol={brand}
17
+ size="xlarge"
18
+ ></dx-icon>
19
+ <span class="subtitle dx-text-display-6">
20
+ {subtitle}
21
+ </span>
22
+ </a>
23
+ <dx-dropdown
24
+ if:true={showMobileLanguages}
25
+ class="header_lang-dropdown"
26
+ options={languages}
27
+ small
28
+ value={language}
29
+ value-path={langValuePath}
30
+ onchange={onLangChange}
31
+ >
32
+ <dx-button
33
+ aria-label="Select Language"
34
+ variant="inline"
35
+ icon-size="large"
36
+ icon-symbol="world"
37
+ ></dx-button>
38
+ </dx-dropdown>
39
+ </div>
115
40
  <div
116
- class="header_l2_group-nav_overflow"
117
- onscroll={onNavScroll}
41
+ if:true={hasScopedNavItems}
42
+ class="header_l2_group header_l2_group-nav"
118
43
  >
119
- <dx-header-nav
120
- aria-label="Scoped Navigation Bar"
121
- nav-items={scopedNavItems}
122
- pathname={pathname}
123
- ></dx-header-nav>
44
+ <div
45
+ class="header_l2_group-nav_overflow"
46
+ onscroll={onNavScroll}
47
+ >
48
+ <dx-header-nav
49
+ aria-label="Scoped Navigation Bar"
50
+ nav-items={scopedNavItems}
51
+ pathname={pathname}
52
+ ></dx-header-nav>
53
+ </div>
124
54
  </div>
125
- </div>
126
- <div
127
- if:false={smallMobile}
128
- class="header_l2_group header_l2_group-right-ctas"
129
- >
130
- <dx-dropdown
131
- if:true={hasLanguages}
132
- class="header_lang-dropdown"
133
- options={languages}
134
- small
135
- value-path={langValuePath}
136
- value={language}
137
- onchange={onLangChange}
55
+ <div
56
+ if:false={smallMobile}
57
+ class="header_l2_group header_l2_group-right-ctas"
138
58
  >
59
+ <dx-dropdown
60
+ if:true={hasLanguages}
61
+ class="header_lang-dropdown"
62
+ options={languages}
63
+ small
64
+ value-path={langValuePath}
65
+ value={language}
66
+ onchange={onLangChange}
67
+ >
68
+ <dx-button
69
+ aria-label="Select Language"
70
+ variant="inline"
71
+ icon-size="small"
72
+ icon-symbol="world"
73
+ >
74
+ {languageLabel}
75
+ </dx-button>
76
+ </dx-dropdown>
139
77
  <dx-button
140
- aria-label="Select Language"
141
- variant="inline"
142
- icon-size="small"
143
- icon-symbol="world"
78
+ if:true={hasBailLink}
79
+ aria-label={bailLabel}
80
+ class="header_bail-link"
81
+ href={bailHref}
82
+ onclick={handleBailClick}
83
+ variant="tertiary"
84
+ icon-symbol="new_window"
85
+ target="_blank"
144
86
  >
145
- {languageLabel}
87
+ {bailLabel}
146
88
  </dx-button>
147
- </dx-dropdown>
148
- <dx-button
149
- if:true={hasBailLink}
150
- aria-label={bailLabel}
151
- class="header_bail-link"
152
- href={bailHref}
153
- onclick={handleBailClick}
154
- variant="tertiary"
155
- icon-symbol="new_window"
156
- target="_blank"
157
- >
158
- {bailLabel}
159
- </dx-button>
89
+ </div>
160
90
  </div>
161
- </div>
162
- </header>
163
- </dx-brand-theme-provider>
91
+ </header>
92
+ </dx-brand-theme-provider>
93
+ </template>
164
94
  </template>
@@ -50,6 +50,7 @@ export default class Header extends HeaderBase {
50
50
  private smallMobileMatchMedia!: MediaQueryList;
51
51
  private tablet = false;
52
52
  private tabletMatchMedia!: MediaQueryList;
53
+ private shouldRender = true;
53
54
 
54
55
  protected mobileBreakpoint(): string {
55
56
  return MOBILE_MATCH;
@@ -59,20 +60,6 @@ export default class Header extends HeaderBase {
59
60
  return this.scopedNavItems && this.scopedNavItems.length > 0;
60
61
  }
61
62
 
62
- private get showDesktopNavItems(): boolean {
63
- return !this.mobile && this.hasNavItems;
64
- }
65
-
66
- private get showTbidLogin(): boolean {
67
- return this.showSignup;
68
- }
69
-
70
- private get showSignup(): boolean {
71
- return this.signupLink
72
- ? (this.tablet && !this.isSearchOpen) || !this.tablet
73
- : false;
74
- }
75
-
76
63
  private get hasLanguages(): boolean {
77
64
  return !!(this.languages && this.languages.length);
78
65
  }
@@ -91,10 +78,6 @@ export default class Header extends HeaderBase {
91
78
  );
92
79
  }
93
80
 
94
- private get showMenuButton(): boolean {
95
- return this.mobile && this.hasNavItems;
96
- }
97
-
98
81
  connectedCallback(): void {
99
82
  super.connectedCallback();
100
83
  this.tabletMatchMedia = window.matchMedia(
@@ -111,6 +94,12 @@ export default class Header extends HeaderBase {
111
94
  "change",
112
95
  this.onSmallMobileChange
113
96
  );
97
+ if (
98
+ !window.location.pathname.includes("/docs/") ||
99
+ window.location.pathname === "/docs/apis"
100
+ ) {
101
+ this.shouldRender = false;
102
+ }
114
103
  }
115
104
 
116
105
  disconnectedCallback(): void {
@@ -2,12 +2,26 @@
2
2
  @import "dxHelpers/text";
3
3
  @import "docHelpers/status";
4
4
 
5
+ :host {
6
+ --doc-c-phase-top: 0;
7
+
8
+ position: sticky;
9
+ top: var(--doc-c-phase-top);
10
+ z-index: 100;
11
+ }
12
+
5
13
  .doc-phase-container {
6
14
  display: flex;
7
15
  flex-direction: column;
8
- padding-left: var(--dx-g-spacing-3xl);
9
- padding-right: var(--dx-g-spacing-3xl);
16
+ align-items: center;
17
+ padding-left: var(--dx-g-global-header-padding-horizontal);
18
+ padding-right: var(--dx-g-global-header-padding-horizontal);
10
19
  width: 100%;
20
+ border: none;
21
+ }
22
+
23
+ .max-width-container {
24
+ max-width: var(--dx-g-doc-content-max-width);
11
25
  }
12
26
 
13
27
  .doc-phase-title-container {
@@ -31,6 +45,7 @@ dx-button {
31
45
  */
32
46
 
33
47
  .doc-phase-body {
48
+ display: block;
34
49
  max-height: 1000px;
35
50
  overflow: hidden;
36
51
  padding-top: var(--dx-g-spacing-smd);
@@ -1,28 +1,30 @@
1
1
  <template>
2
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
- <!--
3
+ <div class="max-width-container">
4
+ <div class="doc-phase-title-container">
5
+ <dx-icon
6
+ class="doc-status-icon doc-phase-icon"
7
+ symbol="recipe"
8
+ size="large"
9
+ color="status-icon-color"
10
+ ></dx-icon>
11
+ <p class="doc-status-title doc-phase-title dx-text-body-3">
12
+ {docPhaseTitle}
13
+ </p>
14
+ <dx-button
15
+ variant="inline"
16
+ onclick={onButtonClick}
17
+ aria-label={hideBodyText}
18
+ >
19
+ {hideBodyText}
20
+ </dx-button>
21
+ </div>
22
+ <!--
22
23
  NOTE: Here we are rendering mark up using lwc:dom & innerHTML
23
24
  option instead of slots because the html markup will come as a
24
25
  property to the component from a configuration
25
26
  -->
26
- <span lwc:dom="manual" class={bodyClassName}></span>
27
+ <span lwc:dom="manual" class={bodyClassName}></span>
28
+ </div>
27
29
  </div>
28
30
  </template>
@@ -3,6 +3,20 @@
3
3
  --button-primary-color-hover: var(--dx-g-blue-vibrant-40);
4
4
  }
5
5
 
6
+ doc-content-layout {
7
+ --dx-c-content-sidebar-sticky-top: calc(
8
+ var(--dx-g-global-header-height) +
9
+ var(--dx-g-doc-header-main-nav-height)
10
+ );
11
+ --dx-c-sidebar-height: calc(
12
+ 100vh -
13
+ calc(
14
+ var(--dx-g-global-header-height) +
15
+ var(--dx-g-doc-header-main-nav-height)
16
+ )
17
+ );
18
+ }
19
+
6
20
  doc-breadcrumbs {
7
21
  --dx-c-popover-z-index: 5;
8
22
 
@@ -464,11 +464,7 @@ export default class DocXmlContent extends LightningElementWithState<{
464
464
  this.addMetatags();
465
465
 
466
466
  if (!this.pageReference.hash) {
467
- document.querySelector("main")?.scrollIntoView({
468
- behavior: "smooth",
469
- block: "start",
470
- inline: "nearest"
471
- });
467
+ document.body.scrollIntoView();
472
468
  }
473
469
  }
474
470
  this.setState({
@@ -1,39 +0,0 @@
1
- doc-phase::part(container) {
2
- margin-bottom: var(--dx-g-spacing-sm);
3
- padding-left: var(--dx-g-spacing-mlg);
4
- padding-right: var(--dx-g-spacing-lg);
5
- width: auto;
6
- }
7
-
8
- .doc-phase-wrapper {
9
- position: sticky;
10
- top: 0;
11
- z-index: 4;
12
- }
13
-
14
- @media screen and (max-width: 800px) {
15
- doc-phase::part(container) {
16
- margin-bottom: 0;
17
- }
18
- }
19
-
20
- @media screen and (min-width: 1024px) and (max-width: 1496px) {
21
- doc-phase::part(container) {
22
- padding-right: var(--dx-g-spacing-3xl);
23
- }
24
- }
25
-
26
- @media screen and (min-width: 1496px) {
27
- doc-phase::part(container) {
28
- margin-right: calc(
29
- var(--dx-g-page-padding-horizontal) - var(--dx-g-spacing-lg)
30
- );
31
- }
32
- }
33
-
34
- @media screen and (max-width: 768px) {
35
- /* We are giving top value because there is one more sticky item(lnb) with height 40px */
36
- .doc-phase-wrapper {
37
- top: 40px;
38
- }
39
- }