@salesforcedevs/arch-components 1.20.17-alpha13 → 1.20.17-alpha15

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 (146) hide show
  1. package/package.json +1 -1
  2. package/src/assets/css/arch-variables.css +512 -0
  3. package/src/modules/arch/badge/badge.css +22 -0
  4. package/src/modules/arch/badge/badge.html +5 -0
  5. package/src/modules/arch/badge/badge.ts +9 -0
  6. package/src/modules/arch/button/button.css +1 -0
  7. package/src/modules/arch/button/button.html +20 -0
  8. package/src/modules/arch/button/button.ts +67 -0
  9. package/src/modules/arch/buttonLink/buttonLink.css +1 -0
  10. package/src/modules/arch/buttonLink/buttonLink.html +19 -0
  11. package/src/modules/arch/buttonLink/buttonLink.stories.js +24 -0
  12. package/src/modules/arch/buttonLink/buttonLink.ts +8 -0
  13. package/src/modules/arch/buttonStyles/buttonStyles.css +220 -0
  14. package/src/modules/arch/card/card.css +128 -0
  15. package/src/modules/arch/card/card.html +85 -0
  16. package/src/modules/arch/card/card.ts +277 -0
  17. package/src/modules/arch/cardBase/cardBase.css +11 -0
  18. package/src/modules/arch/cardBase/cardBase.html +2 -0
  19. package/src/modules/arch/cardGridA/cardGridA.css +11 -0
  20. package/src/modules/arch/cardGridA/cardGridA.html +21 -0
  21. package/src/modules/arch/cardGridA/cardGridA.stories.js +107 -0
  22. package/src/modules/arch/cardGridA/cardGridA.ts +24 -0
  23. package/src/modules/arch/cardGridC/cardGridC.css +24 -0
  24. package/src/modules/arch/cardGridC/cardGridC.html +22 -0
  25. package/src/modules/arch/cardGridC/cardGridC.stories.js +42 -0
  26. package/src/modules/arch/cardGridC/cardGridC.ts +11 -0
  27. package/src/modules/arch/cardGridD/cardGridD.css +17 -0
  28. package/src/modules/arch/cardGridD/cardGridD.html +20 -0
  29. package/src/modules/arch/cardGridD/cardGridD.stories.js +34 -0
  30. package/src/modules/arch/cardGridD/cardGridD.ts +7 -0
  31. package/src/modules/arch/cardNew/cardNew.css +31 -0
  32. package/src/modules/arch/cardNew/cardNew.html +32 -0
  33. package/src/modules/arch/cardNew/cardNew.ts +66 -0
  34. package/src/modules/arch/children/children.html +2 -0
  35. package/src/modules/arch/children/children.ts +31 -0
  36. package/src/modules/arch/color/color.ts +59 -0
  37. package/src/modules/arch/content/__fixtures__/index.ts +884 -0
  38. package/src/modules/arch/content/content.css +643 -0
  39. package/src/modules/arch/content/content.html +65 -0
  40. package/src/modules/arch/content/content.stories.js +14 -0
  41. package/src/modules/arch/content/content.ts +169 -0
  42. package/src/modules/arch/contentIcon/contentIcon.css +48 -0
  43. package/src/modules/arch/contentIcon/contentIcon.html +15 -0
  44. package/src/modules/arch/contentIcon/contentIcon.stories.js +110 -0
  45. package/src/modules/arch/contentIcon/contentIcon.ts +68 -0
  46. package/src/modules/arch/context/context.ts +21 -19
  47. package/src/modules/arch/contextAdapter/constants.ts +1 -0
  48. package/src/modules/arch/contextAdapter/contextAdapter.html +1 -0
  49. package/src/modules/arch/contextAdapter/contextAdapter.ts +54 -0
  50. package/src/modules/arch/debounce/debounce.ts +32 -0
  51. package/src/modules/arch/dialog/dialog.ts +154 -0
  52. package/src/modules/arch/dialogStyles/dialogStyles.css +90 -0
  53. package/src/modules/arch/effectAdapter/effectAdapter.ts +19 -9
  54. package/src/modules/arch/explorer/explorer.css +301 -0
  55. package/src/modules/arch/explorer/explorer.html +418 -0
  56. package/src/modules/arch/explorer/explorer.ts +718 -0
  57. package/src/modules/arch/explorer/types.d.ts +60 -0
  58. package/src/modules/arch/fetch/fetch.ts +55 -0
  59. package/src/modules/arch/footerMfe/footerMfe.html +3 -0
  60. package/src/modules/arch/footerMfe/footerMfe.ts +19 -0
  61. package/src/modules/arch/gallery/gallery.css +365 -0
  62. package/src/modules/arch/gallery/gallery.html +71 -0
  63. package/src/modules/arch/gallery/gallery.ts +366 -0
  64. package/src/modules/arch/gallery/types.d.ts +35 -0
  65. package/src/modules/arch/heading/heading.css +1 -0
  66. package/src/modules/arch/heading/heading.html +9 -0
  67. package/src/modules/arch/heading/heading.ts +36 -0
  68. package/src/modules/arch/helpers/helpers.ts +141 -0
  69. package/src/modules/arch/heroA/heroA.css +116 -0
  70. package/src/modules/arch/heroA/heroA.html +28 -0
  71. package/src/modules/arch/heroA/heroA.stories.js +49 -0
  72. package/src/modules/arch/heroA/heroA.ts +53 -0
  73. package/src/modules/arch/heroB/heroB.css +79 -0
  74. package/src/modules/arch/heroB/heroB.html +27 -0
  75. package/src/modules/arch/heroB/heroB.stories.js +44 -0
  76. package/src/modules/arch/heroB/heroB.ts +26 -0
  77. package/src/modules/arch/i18n/i18n.ts +78 -0
  78. package/src/modules/arch/icon/icon.css +28 -0
  79. package/src/modules/arch/icon/icon.html +17 -0
  80. package/src/modules/arch/icon/icon.stories.js +18 -0
  81. package/src/modules/arch/icon/icon.ts +92 -0
  82. package/src/modules/arch/instrumentation/instrumentation.css +1 -0
  83. package/src/modules/arch/instrumentation/instrumentation.html +1 -0
  84. package/src/modules/arch/instrumentation/instrumentation.ts +113 -0
  85. package/src/modules/arch/labels/helpers.ts +25 -0
  86. package/src/modules/arch/labels/pointHelpers.ts +47 -0
  87. package/src/modules/arch/labels/timeHelpers.ts +182 -0
  88. package/src/modules/arch/labels/types.d.ts +5 -0
  89. package/src/modules/arch/logger/logger.ts +33 -0
  90. package/src/modules/arch/menu/menu.ts +260 -0
  91. package/src/modules/arch/overflow/overflow.ts +71 -0
  92. package/src/modules/arch/page/page.css +3 -0
  93. package/src/modules/arch/page/page.html +3 -0
  94. package/src/modules/arch/page/page.stories.js +10 -0
  95. package/src/modules/arch/page/page.ts +3 -0
  96. package/src/modules/arch/pageHeaderA/pageHeaderA.css +82 -0
  97. package/src/modules/arch/pageHeaderA/pageHeaderA.html +24 -0
  98. package/src/modules/arch/pageHeaderA/pageHeaderA.stories.js +18 -0
  99. package/src/modules/arch/pageHeaderA/pageHeaderA.ts +51 -0
  100. package/src/modules/arch/pill/pill.css +70 -0
  101. package/src/modules/arch/pill/pill.html +17 -0
  102. package/src/modules/arch/pill/pill.ts +34 -0
  103. package/src/modules/arch/polling-request.ts +97 -0
  104. package/src/modules/arch/reflectedElement/reflectedElement.html +2 -0
  105. package/src/modules/arch/reflectedElement/reflectedElement.ts +5 -3
  106. package/src/modules/arch/reset/reset.css +39 -0
  107. package/src/modules/arch/searchList/searchList.css +120 -0
  108. package/src/modules/arch/searchList/searchList.html +46 -0
  109. package/src/modules/arch/searchList/searchList.ts +53 -0
  110. package/src/modules/arch/sectionA/sectionA.css +64 -0
  111. package/src/modules/arch/sectionA/sectionA.html +21 -0
  112. package/src/modules/arch/sectionA/sectionA.stories.js +18 -0
  113. package/src/modules/arch/sectionA/sectionA.ts +27 -0
  114. package/src/modules/arch/select/select.css +40 -0
  115. package/src/modules/arch/select/select.html +24 -0
  116. package/src/modules/arch/select/select.ts +64 -0
  117. package/src/modules/arch/socialShare/socialShare.css +50 -0
  118. package/src/modules/arch/socialShare/socialShare.html +56 -0
  119. package/src/modules/arch/socialShare/socialShare.ts +29 -0
  120. package/src/modules/arch/spinner/spinner.css +195 -0
  121. package/src/modules/arch/spinner/spinner.html +9 -0
  122. package/src/modules/arch/spinner/spinner.ts +15 -0
  123. package/src/modules/arch/styles/styles.css +24 -0
  124. package/src/modules/arch/summary/summary.css +134 -0
  125. package/src/modules/arch/summary/summary.html +71 -0
  126. package/src/modules/arch/summary/summary.stories.js +148 -0
  127. package/src/modules/arch/summary/summary.ts +96 -0
  128. package/src/modules/arch/tab/tab.css +3 -0
  129. package/src/modules/arch/tab/tab.html +5 -0
  130. package/src/modules/arch/tab/tab.ts +46 -0
  131. package/src/modules/arch/tabset/tabset.css +112 -0
  132. package/src/modules/arch/tabset/tabset.html +62 -0
  133. package/src/modules/arch/tabset/tabset.ts +244 -0
  134. package/src/modules/arch/testutils.ts +118 -0
  135. package/src/modules/arch/threeCardGrid/threeCardGrid.css +6 -0
  136. package/src/modules/arch/threeCardGrid/threeCardGrid.html +5 -0
  137. package/src/modules/arch/threeCardGrid/threeCardGrid.ts +3 -0
  138. package/src/modules/arch/track/track.ts +23 -0
  139. package/src/modules/arch/trailhead.ts +120 -0
  140. package/src/modules/arch/types.d.ts +1 -0
  141. package/src/modules/arch/useEffectAttr.ts +16 -0
  142. package/src/modules/arch/utils/utils.ts +20 -0
  143. package/src/modules/arch/withState.ts +21 -0
  144. package/src/modules/arch/xsfMfeEvents/xsfMfeEvents.html +1 -0
  145. package/src/modules/arch/xsfMfeEvents/xsfMfeEvents.ts +47 -0
  146. package/src/modules/arch/slot/slot.ts +0 -20
@@ -0,0 +1,11 @@
1
+ .card-base {
2
+ background-color: var(--arch-color-white);
3
+ border-radius: var(--arch-radius-lg);
4
+ box-shadow: var(--arch-shadow-xs);
5
+ height: 100%;
6
+ transition: all 250ms ease-in-out;
7
+ }
8
+
9
+ .card-base:hover {
10
+ box-shadow: var(--arch-shadow-md);
11
+ }
@@ -0,0 +1,2 @@
1
+ <template></template>
2
+
@@ -0,0 +1,11 @@
1
+ @import "arch/reset";
2
+
3
+ ul {
4
+ --spacing: var(--arch-spacing-6);
5
+
6
+ justify-content: center;
7
+ display: grid;
8
+ grid-template-columns: repeat(auto-fit, minmax(280px, 280px));
9
+ grid-gap: var(--spacing);
10
+ max-width: 1280px;
11
+ }
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <ul>
3
+ <template for:each={items} for:item="item">
4
+ <li key={item.ctaHref}>
5
+ <arch-card
6
+ cta-href={item.ctaHref}
7
+ cta-target={item.ctaTarget}
8
+ cta-title={item.ctaTitle}
9
+ img-aspect={imgAspect}
10
+ img-src={item.imgSrc}
11
+ img-variant={imgVariant}
12
+ description={item.description}
13
+ title={item.title}
14
+ pretitle={item.pretitle}
15
+ pretitle-href={item.pretitleHref}
16
+ pretitle-href-text={item.pretitleHrefText}
17
+ ></arch-card>
18
+ </li>
19
+ </template>
20
+ </ul>
21
+ </template>
@@ -0,0 +1,107 @@
1
+ import { html } from 'lit-html';
2
+
3
+ export default {
4
+ title: 'arch/arch-card-grid-a',
5
+ parameters: {
6
+ chromatic: {
7
+ viewports: [450, 800, 1199]
8
+ },
9
+ modules: ['/modules/arch-card-grid-a.js']
10
+ }
11
+ };
12
+
13
+ export const Base = () => html`
14
+ <arch-card-grid-a img-aspect="60%">
15
+ <arch-card
16
+ cta-href="/"
17
+ cta-title="Read More"
18
+ cta-target="_blank"
19
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
20
+ title="Hello A"
21
+ ></arch-card>
22
+ <arch-card
23
+ cta-href="/"
24
+ cta-title="Read More"
25
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
26
+ title="Hello B"
27
+ ></arch-card>
28
+ <arch-card
29
+ cta-href="/"
30
+ cta-title="Read More"
31
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
32
+ title="Hello C"
33
+ ></arch-card>
34
+ <arch-card
35
+ cta-href="/"
36
+ cta-title="Read More"
37
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
38
+ title="Hello D"
39
+ ></arch-card>
40
+ <arch-card
41
+ cta-href="/"
42
+ cta-title="Read More"
43
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
44
+ title="Hello E"
45
+ ></arch-card>
46
+ </arch-card-grid-a>
47
+ `;
48
+
49
+ export const ImageFull = () => html`
50
+ <arch-card-grid-a img-aspect="60%" img-type="full">
51
+ <arch-card
52
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
53
+ img-src="/images/card-a.png"
54
+ title="Hello A"
55
+ ></arch-card>
56
+ <arch-card
57
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
58
+ img-src="/images/card-a.png"
59
+ title="Hello B"
60
+ ></arch-card>
61
+ <arch-card
62
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
63
+ img-src="/images/card-a.png"
64
+ title="Hello C"
65
+ ></arch-card>
66
+ <arch-card
67
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
68
+ img-src="/images/card-a.png"
69
+ title="Hello D"
70
+ ></arch-card>
71
+ <arch-card
72
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
73
+ img-src="/images/card-a.png"
74
+ title="Hello E"
75
+ ></arch-card>
76
+ </arch-card-grid-a>
77
+ `;
78
+
79
+ export const ImageLeft = () => html`
80
+ <arch-card-grid-a img-aspect="60%" img-type="left">
81
+ <arch-card
82
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
83
+ img-src="/images/card-a.png"
84
+ title="Hello A"
85
+ ></arch-card>
86
+ <arch-card
87
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
88
+ img-src="/images/card-a.png"
89
+ title="Hello B"
90
+ ></arch-card>
91
+ <arch-card
92
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
93
+ img-src="/images/card-a.png"
94
+ title="Hello C"
95
+ ></arch-card>
96
+ <arch-card
97
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
98
+ img-src="/images/card-a.png"
99
+ title="Hello D"
100
+ ></arch-card>
101
+ <arch-card
102
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
103
+ img-src="/images/card-a.png"
104
+ title="Hello E"
105
+ ></arch-card>
106
+ </arch-card-grid-a>
107
+ `;
@@ -0,0 +1,24 @@
1
+ import { api } from "lwc";
2
+
3
+ import { Card, extractCardAttributes } from "arch/card";
4
+
5
+ import { ChildrenElement } from "arch/children";
6
+
7
+ export default class extends ChildrenElement<Card> {
8
+ @api items: Card[] = [];
9
+ @api imgAspect: string | null = null;
10
+ @api imgType: "full" | "left" | null = null;
11
+
12
+ private get imgVariant() {
13
+ switch (this.imgType) {
14
+ case "full":
15
+ return "top-cover";
16
+ case "left":
17
+ return "top-small";
18
+ default:
19
+ return "";
20
+ }
21
+ }
22
+
23
+ extractor = extractCardAttributes;
24
+ }
@@ -0,0 +1,24 @@
1
+ @import "arch/reset";
2
+
3
+ ul {
4
+ --spacing: var(--arch-spacing-6);
5
+
6
+ justify-content: center;
7
+ display: grid;
8
+ grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
9
+ grid-gap: var(--spacing);
10
+ max-width: 1280px;
11
+ margin: auto;
12
+ }
13
+
14
+ @media screen and (max-width: 800px) {
15
+ ul {
16
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
17
+ }
18
+ }
19
+
20
+ @media screen and (max-width: 400px) {
21
+ ul {
22
+ grid-template-columns: 1fr;
23
+ }
24
+ }
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <ul>
3
+ <template for:each={items} for:item="item">
4
+ <li key={item.title}>
5
+ <arch-card
6
+ class="card"
7
+ cta-href={item.ctaHref}
8
+ cta-target={item.ctaTarget}
9
+ cta-title={item.ctaTitle}
10
+ img-aspect={imgAspect}
11
+ img-src={item.imgSrc}
12
+ img-variant="top-cover"
13
+ description={item.description}
14
+ pretitle={item.pretitle}
15
+ pretitle-href={item.pretitleHref}
16
+ pretitle-href-text={item.pretitleHrefText}
17
+ title={item.title}
18
+ ></arch-card>
19
+ </li>
20
+ </template>
21
+ </ul>
22
+ </template>
@@ -0,0 +1,42 @@
1
+ import { html } from 'lit-html';
2
+
3
+ export default {
4
+ title: 'arch/arch-card-grid-c',
5
+ parameters: {
6
+ chromatic: {
7
+ viewports: [380, 800, 1199]
8
+ },
9
+ modules: ['/modules/arch-card-grid-c.js']
10
+ }
11
+ };
12
+
13
+ export const Base = () => html`
14
+ <arch-card-grid-c img-aspect="60%">
15
+ <arch-card
16
+ cta-href="/posts/1"
17
+ cta-title="Read More"
18
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
19
+ img-src="/images/card-a.png"
20
+ pretitle="Blog by"
21
+ pretitle-href="/user/amylee"
22
+ pretitle-href-text="Amy Lee"
23
+ title="Inspire Your Peers Careers by Sharing Your #AwesomeAdmin Advice"
24
+ ></arch-card>
25
+ <arch-card
26
+ cta-href="/posts/1"
27
+ cta-title="Read More"
28
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
29
+ img-src="/images/card-a.png"
30
+ pretitle="Blog by Amy Lee"
31
+ title="Hello B"
32
+ ></arch-card>
33
+ <arch-card
34
+ cta-href="/posts/1"
35
+ cta-title="Read More"
36
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
37
+ img-src="/images/card-a.png"
38
+ pretitle="Blog by Amy Lee"
39
+ title="Hello C"
40
+ ></arch-card>
41
+ </arch-card-grid-c>
42
+ `;
@@ -0,0 +1,11 @@
1
+ import { api } from 'lwc';
2
+
3
+ import { Card, extractCardAttributes } from 'arch/card';
4
+
5
+ import { ChildrenElement } from 'arch/children';
6
+
7
+ export default class extends ChildrenElement<Card> {
8
+ @api imgAspect: string | null = null;
9
+
10
+ extractor = extractCardAttributes;
11
+ }
@@ -0,0 +1,17 @@
1
+ @import "arch/reset";
2
+
3
+ ul {
4
+ --spacing: var(--arch-spacing-6);
5
+
6
+ justify-content: center;
7
+ display: grid;
8
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
9
+ grid-gap: var(--spacing);
10
+ max-width: 1280px;
11
+ }
12
+
13
+ @media screen and (max-width: 800px) {
14
+ ul {
15
+ grid-template-columns: 1fr;
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ <template>
2
+ <ul>
3
+ <template for:each={items} for:item="item">
4
+ <li key={item.title}>
5
+ <arch-card
6
+ cta-href={item.ctaHref}
7
+ cta-target={item.ctaTarget}
8
+ cta-title={item.ctaTitle}
9
+ img-src={item.imgSrc}
10
+ img-variant="right-cover"
11
+ description={item.description}
12
+ pretitle={item.pretitle}
13
+ pretitle-href={item.pretitleHref}
14
+ pretitle-href-text={item.pretitleHrefText}
15
+ title={item.title}
16
+ ></arch-card>
17
+ </li>
18
+ </template>
19
+ </ul>
20
+ </template>
@@ -0,0 +1,34 @@
1
+ import { html } from 'lit-html';
2
+
3
+ export default {
4
+ title: 'arch/arch-card-grid-d',
5
+ parameters: {
6
+ chromatic: {
7
+ viewports: [400, 800, 1199]
8
+ },
9
+ modules: ['/modules/arch-card-grid-d.js']
10
+ }
11
+ };
12
+
13
+ export const Base = () => html`
14
+ <arch-card-grid-d>
15
+ <arch-card
16
+ cta-href="/"
17
+ cta-title="Start"
18
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
19
+ img-src="/images/card-a.png"
20
+ pretitle="Learning with"
21
+ pretitle-href="/users/astro"
22
+ pretitle-href-text="Astro"
23
+ title="Hello A"
24
+ ></arch-card>
25
+ <arch-card
26
+ cta-href="/"
27
+ cta-title="Start"
28
+ description="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
29
+ img-src="/images/card-a.png"
30
+ pretitle="Hello"
31
+ title="Hello B"
32
+ ></arch-card>
33
+ </arch-card-grid-d>
34
+ `;
@@ -0,0 +1,7 @@
1
+ import { Card, extractCardAttributes } from 'arch/card';
2
+
3
+ import { ChildrenElement } from 'arch/children';
4
+
5
+ export default class extends ChildrenElement<Card> {
6
+ extractor = extractCardAttributes;
7
+ }
@@ -0,0 +1,31 @@
1
+ @import 'dxHelpers/text';
2
+ @import 'dxHelpers/card';
3
+
4
+ dx-card-title::part(title) {
5
+ margin-bottom: var(--arch-spacing-4);
6
+ }
7
+
8
+ .body {
9
+ display: flex;
10
+ flex-direction: column;
11
+ }
12
+
13
+ /* The bottom item gets arch-spacing-10 margin; if the pill is at the bottom, that's the pill; if the pill is at the top, that's the subtitle */
14
+ .body.pill-bottom .pill,
15
+ .body.pill-top .subtitle {
16
+ margin-bottom: var(--arch-spacing-10);
17
+ }
18
+
19
+ .body.pill-top .pill,
20
+ .body.pill-bottom .subtitle {
21
+ margin-bottom: var(--arch-spacing-4);
22
+ }
23
+
24
+ .body.pill-bottom .pill {
25
+ order: 1; /* Setting an explicit order makes the pill appear last, since all other elements have default order 0 */
26
+ }
27
+
28
+ .cta {
29
+ position: absolute;
30
+ bottom: var(--arch-spacing-4);
31
+ }
@@ -0,0 +1,32 @@
1
+ <template>
2
+ <dx-card-content
3
+ borderless="false"
4
+ fix-orientation="true"
5
+ href={ctaHref}
6
+ href-click={handleImageClick}
7
+ img-link-aria-label={imgLinkAriaLabel}
8
+ img-src={imgSrc}
9
+ >
10
+ <div class={className} slot="body" title={header}>
11
+ <arch-badge class="pill" lwc:if={pill} color="blue">
12
+ {pill}
13
+ </arch-badge>
14
+ <div lwc:if={label} class="dx-text-label-3 card-label">{label}</div>
15
+ <dx-card-title
16
+ lwc:if={displayHeader}
17
+ header={header}
18
+ href={ctaHref}
19
+ onclick={handleLinkClick}
20
+ ></dx-card-title>
21
+ <div class="subtitle">{subtitle}</div>
22
+ <dx-button
23
+ class="cta"
24
+ variant="inline"
25
+ href={ctaHref}
26
+ onclick={handleLinkClick}
27
+ >
28
+ {ctaTitle}
29
+ </dx-button>
30
+ </div>
31
+ </dx-card-content>
32
+ </template>
@@ -0,0 +1,66 @@
1
+ import { api, LightningElement } from "lwc";
2
+ import { track } from 'arch/instrumentation';
3
+
4
+ export type PillPosition = 'top' | 'bottom';
5
+
6
+ export default class extends LightningElement {
7
+ @api pill: string = '';
8
+ @api label: string = '';
9
+ @api header: string = '';
10
+ @api subtitle: string = '';
11
+ @api ctaHref: string = '';
12
+ @api ctaTitle: string = '';
13
+ @api imgSrc: string = '';
14
+ @api imgLinkAriaLabel: string = '';
15
+ @api noDisplayedHeader: boolean = false;
16
+
17
+ @api get pillPosition() {
18
+ return this._pillPosition;
19
+ }
20
+ set pillPosition(value: PillPosition) {
21
+ this._pillPosition = value || 'top';
22
+ }
23
+
24
+ private _pillPosition: PillPosition = 'top';
25
+
26
+ private get className() {
27
+ return `body pill-${this.pillPosition}`;
28
+ }
29
+
30
+ private get displayHeader() {
31
+ return this.header && !this.noDisplayedHeader;
32
+ }
33
+
34
+ private handleImageClick(e: MouseEvent) {
35
+ // FIXME? sendInteractionEventwon't work with custom elements/shadow DOM. Maybe investigate or get rid of this.
36
+ // sendInteractionEvent('Card Image Click', InteractionEventTypes.IMAGE_CLICK, e, e.currentTarget);
37
+ this.handleHrefClick(e, {
38
+ clickUrl: this.ctaHref,
39
+ clickImg: this.imgSrc,
40
+ label: this.label,
41
+ title: this.header,
42
+ subtitle: this.subtitle,
43
+ });
44
+ }
45
+
46
+ private handleLinkClick(e: MouseEvent) {
47
+ // FIXME? sendInteractionEvent won't work with custom elements/shadow DOM. Maybe investigate or get rid of this.
48
+ // sendInteractionEvent('Card Link Click', InteractionEventTypes.CLICK, e, e.currentTarget);
49
+ const currentTarget = e.currentTarget as HTMLElement;
50
+ const clickText = currentTarget.matches('dx-card-title') ? this.header : this.ctaTitle;
51
+ this.handleHrefClick(e, {
52
+ clickText,
53
+ clickUrl: this.ctaHref,
54
+ label: this.label,
55
+ title: this.header,
56
+ subtitle: this.subtitle,
57
+ });
58
+ }
59
+
60
+ private handleHrefClick(e: MouseEvent, payload: Record<string, string>) {
61
+ const target = e.currentTarget as HTMLElement;
62
+ track(target, 'card_clicked', {
63
+ ...payload,
64
+ });
65
+ }
66
+ }
@@ -0,0 +1,2 @@
1
+ <template></template>
2
+
@@ -0,0 +1,31 @@
1
+ import { track, LightningElement } from 'lwc';
2
+
3
+ export abstract class ChildrenElement<T> extends LightningElement {
4
+ private observer!: MutationObserver;
5
+
6
+ @track items: T[] = [];
7
+ abstract extractor: (element: Element) => T;
8
+
9
+ connectedCallback() {
10
+ this.observer = new MutationObserver(() => {
11
+ this.setItems();
12
+ });
13
+ this.observer.observe(this.template.host, {
14
+ childList: true,
15
+ subtree: true
16
+ });
17
+ this.setItems();
18
+ }
19
+
20
+ disconnectedCallback() {
21
+ this.observer.disconnect();
22
+ }
23
+
24
+ setItems() {
25
+ this.items = Array.from(this.template.host.children).map(
26
+ this.extractor
27
+ );
28
+ }
29
+ }
30
+
31
+ export default ChildrenElement;
@@ -0,0 +1,59 @@
1
+ export function hexToRGB(h: string) {
2
+ let r = 0;
3
+ let g = 0;
4
+ let b = 0;
5
+ if (h.length === 4) {
6
+ r = +('0x' + h[1] + h[1]);
7
+ g = +('0x' + h[2] + h[2]);
8
+ b = +('0x' + h[3] + h[3]);
9
+ } else if (h.length === 7) {
10
+ r = +('0x' + h[1] + h[2]);
11
+ g = +('0x' + h[3] + h[4]);
12
+ b = +('0x' + h[5] + h[6]);
13
+ }
14
+ return [r, g, b];
15
+ }
16
+
17
+ export function RGBToHSL(r: number, g: number, b: number) {
18
+ r /= 255;
19
+ g /= 255;
20
+ b /= 255;
21
+ const cmin = Math.min(r, g, b);
22
+ const cmax = Math.max(r, g, b);
23
+ const delta = cmax - cmin;
24
+ let h = 0;
25
+ let s = 0;
26
+ let l = 0;
27
+ if (delta === 0) {
28
+ h = 0;
29
+ } else if (cmax === r) {
30
+ h = ((g - b) / delta) % 6;
31
+ } else if (cmax === g) {
32
+ h = (b - r) / delta + 2;
33
+ } else {
34
+ h = (r - g) / delta + 4;
35
+ }
36
+ h = Math.round(h * 60);
37
+ if (h < 0) {
38
+ h += 360;
39
+ }
40
+ l = (cmax + cmin) / 2;
41
+ s = delta === 0 ? 0 : delta / (1 - Math.abs(2 * l - 1));
42
+ s = +s.toFixed(1);
43
+ l = +l.toFixed(1);
44
+ return [h, s, l];
45
+ }
46
+
47
+ export function rgb(r: number, g: number, b: number) {
48
+ return `rgb(${r},${g},${b})`;
49
+ }
50
+
51
+ export function hsl(h: number, s: number, l: number) {
52
+ return `hsl(${h},${s * 100}%,${l * 100}%)`;
53
+ }
54
+
55
+ export function lightenHex(hex: string, by: number) {
56
+ const [r, g, b] = hexToRGB(hex);
57
+ const [h, s, l] = RGBToHSL(r, g, b);
58
+ return hsl(h, s, l + by);
59
+ }