@salesforcedevs/arch-components 1.20.17-alpha8 → 1.25.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/LICENSE +12 -0
- package/lwc.config.json +42 -3
- package/package.json +36 -46
- package/src/assets/css/arch-variables.css +512 -0
- package/src/modules/arch/badge/badge.css +22 -0
- package/src/modules/arch/badge/badge.html +5 -0
- package/src/modules/arch/badge/badge.ts +9 -0
- package/src/modules/arch/button/button.css +1 -0
- package/src/modules/arch/button/button.html +20 -0
- package/src/modules/arch/button/button.ts +67 -0
- package/src/modules/arch/buttonLink/buttonLink.css +1 -0
- package/src/modules/arch/buttonLink/buttonLink.html +19 -0
- package/src/modules/arch/buttonLink/buttonLink.stories.js +34 -0
- package/src/modules/arch/buttonLink/buttonLink.ts +8 -0
- package/src/modules/arch/buttonStyles/buttonStyles.css +220 -0
- package/src/modules/arch/card/card.css +128 -0
- package/src/modules/arch/card/card.html +85 -0
- package/src/modules/arch/card/card.ts +277 -0
- package/src/modules/arch/cardBase/cardBase.css +11 -0
- package/src/modules/arch/cardBase/cardBase.html +2 -0
- package/src/modules/arch/cardGridA/cardGridA.css +11 -0
- package/src/modules/arch/cardGridA/cardGridA.html +21 -0
- package/src/modules/arch/cardGridA/cardGridA.stories.js +118 -0
- package/src/modules/arch/cardGridA/cardGridA.ts +24 -0
- package/src/modules/arch/cardGridC/cardGridC.css +24 -0
- package/src/modules/arch/cardGridC/cardGridC.html +22 -0
- package/src/modules/arch/cardGridC/cardGridC.stories.js +51 -0
- package/src/modules/arch/cardGridC/cardGridC.ts +11 -0
- package/src/modules/arch/cardGridD/cardGridD.css +17 -0
- package/src/modules/arch/cardGridD/cardGridD.html +20 -0
- package/src/modules/arch/cardGridD/cardGridD.stories.js +43 -0
- package/src/modules/arch/cardGridD/cardGridD.ts +7 -0
- package/src/modules/arch/cardNew/cardNew.css +31 -0
- package/src/modules/arch/cardNew/cardNew.html +32 -0
- package/src/modules/arch/cardNew/cardNew.ts +66 -0
- package/src/modules/arch/children/children.html +2 -0
- package/src/modules/arch/children/children.ts +31 -0
- package/src/modules/arch/color/color.ts +59 -0
- package/src/modules/arch/content/__fixtures__/index.ts +884 -0
- package/src/modules/arch/content/content.css +643 -0
- package/src/modules/arch/content/content.html +65 -0
- package/src/modules/arch/content/content.stories.js +21 -0
- package/src/modules/arch/content/content.ts +169 -0
- package/src/modules/arch/contentIcon/contentIcon.css +48 -0
- package/src/modules/arch/contentIcon/contentIcon.html +15 -0
- package/src/modules/arch/contentIcon/contentIcon.stories.js +130 -0
- package/src/modules/arch/contentIcon/contentIcon.ts +68 -0
- package/src/{common → modules/arch}/context/context.ts +21 -19
- package/src/modules/arch/contextAdapter/constants.ts +1 -0
- package/src/modules/arch/contextAdapter/contextAdapter.ts +54 -0
- package/src/modules/arch/debounce/debounce.ts +32 -0
- package/src/modules/arch/dialog/dialog.ts +154 -0
- package/src/modules/arch/dialogStyles/dialogStyles.css +90 -0
- package/src/modules/arch/effectAdapter/effectAdapter.html +1 -0
- package/src/modules/arch/effectAdapter/effectAdapter.ts +28 -0
- package/src/modules/arch/explorer/explorer.css +301 -0
- package/src/modules/arch/explorer/explorer.html +418 -0
- package/src/modules/arch/explorer/explorer.ts +718 -0
- package/src/modules/arch/explorer/types.d.ts +60 -0
- package/src/modules/arch/fetch/fetch.ts +55 -0
- package/src/modules/arch/footerMfe/footerMfe.html +3 -0
- package/src/modules/arch/footerMfe/footerMfe.ts +19 -0
- package/src/modules/arch/gallery/gallery.css +365 -0
- package/src/modules/arch/gallery/gallery.html +71 -0
- package/src/modules/arch/gallery/gallery.ts +366 -0
- package/src/modules/arch/gallery/types.d.ts +35 -0
- package/src/modules/arch/heading/heading.css +1 -0
- package/src/modules/arch/heading/heading.html +9 -0
- package/src/modules/arch/heading/heading.ts +36 -0
- package/src/modules/arch/helpers/helpers.ts +141 -0
- package/src/modules/arch/heroA/heroA.css +116 -0
- package/src/modules/arch/heroA/heroA.html +28 -0
- package/src/modules/arch/heroA/heroA.stories.js +60 -0
- package/src/modules/arch/heroA/heroA.ts +53 -0
- package/src/modules/arch/heroB/heroB.css +79 -0
- package/src/modules/arch/heroB/heroB.html +27 -0
- package/src/modules/arch/heroB/heroB.stories.js +55 -0
- package/src/modules/arch/heroB/heroB.ts +26 -0
- package/src/modules/arch/i18n/i18n.ts +78 -0
- package/src/modules/arch/icon/icon.css +28 -0
- package/src/modules/arch/icon/icon.html +17 -0
- package/src/modules/arch/icon/icon.stories.js +26 -0
- package/src/modules/arch/icon/icon.ts +92 -0
- package/src/modules/arch/instrumentation/instrumentation.css +1 -0
- package/src/modules/arch/instrumentation/instrumentation.html +1 -0
- package/src/modules/arch/instrumentation/instrumentation.ts +113 -0
- package/src/modules/arch/labels/helpers.ts +25 -0
- package/src/modules/arch/labels/pointHelpers.ts +47 -0
- package/src/modules/arch/labels/timeHelpers.ts +182 -0
- package/src/modules/arch/labels/types.d.ts +5 -0
- package/src/modules/arch/logger/logger.ts +33 -0
- package/src/modules/arch/menu/menu.ts +260 -0
- package/src/modules/arch/overflow/overflow.ts +71 -0
- package/src/modules/arch/page/page.css +3 -0
- package/src/modules/arch/page/page.html +3 -0
- package/src/modules/arch/page/page.stories.js +19 -0
- package/src/modules/arch/page/page.ts +3 -0
- package/src/modules/arch/pageHeaderA/pageHeaderA.css +82 -0
- package/src/modules/arch/pageHeaderA/pageHeaderA.html +24 -0
- package/src/modules/arch/pageHeaderA/pageHeaderA.stories.js +25 -0
- package/src/modules/arch/pageHeaderA/pageHeaderA.ts +51 -0
- package/src/modules/arch/pill/pill.css +70 -0
- package/src/modules/arch/pill/pill.html +17 -0
- package/src/modules/arch/pill/pill.ts +34 -0
- package/src/modules/arch/polling-request.ts +97 -0
- package/src/modules/arch/reflectedElement/reflectedElement.html +2 -0
- package/src/{common → modules/arch}/reflectedElement/reflectedElement.ts +5 -3
- package/src/modules/arch/reset/reset.css +39 -0
- package/src/modules/arch/searchList/searchList.css +120 -0
- package/src/modules/arch/searchList/searchList.html +46 -0
- package/src/modules/arch/searchList/searchList.ts +53 -0
- package/src/modules/arch/sectionA/sectionA.css +64 -0
- package/src/modules/arch/sectionA/sectionA.html +21 -0
- package/src/modules/arch/sectionA/sectionA.stories.js +25 -0
- package/src/modules/arch/sectionA/sectionA.ts +27 -0
- package/src/modules/arch/select/select.css +40 -0
- package/src/modules/arch/select/select.html +24 -0
- package/src/modules/arch/select/select.ts +64 -0
- package/src/modules/arch/socialShare/socialShare.css +50 -0
- package/src/modules/arch/socialShare/socialShare.html +56 -0
- package/src/modules/arch/socialShare/socialShare.ts +29 -0
- package/src/modules/arch/spinner/spinner.css +195 -0
- package/src/modules/arch/spinner/spinner.html +9 -0
- package/src/modules/arch/spinner/spinner.ts +15 -0
- package/src/modules/arch/styles/styles.css +24 -0
- package/src/modules/arch/summary/summary.css +134 -0
- package/src/modules/arch/summary/summary.html +71 -0
- package/src/modules/arch/summary/summary.stories.js +163 -0
- package/src/modules/arch/summary/summary.ts +96 -0
- package/src/modules/arch/tab/tab.css +3 -0
- package/src/modules/arch/tab/tab.html +5 -0
- package/src/modules/arch/tab/tab.ts +46 -0
- package/src/modules/arch/tabset/tabset.css +112 -0
- package/src/modules/arch/tabset/tabset.html +62 -0
- package/src/modules/arch/tabset/tabset.ts +244 -0
- package/src/modules/arch/testutils.ts +118 -0
- package/src/modules/arch/threeCardGrid/threeCardGrid.css +6 -0
- package/src/modules/arch/threeCardGrid/threeCardGrid.html +5 -0
- package/src/modules/arch/threeCardGrid/threeCardGrid.ts +3 -0
- package/src/modules/arch/track/track.ts +23 -0
- package/src/modules/arch/trailhead.ts +120 -0
- package/src/modules/arch/types.d.ts +1 -0
- package/src/modules/arch/useEffectAttr.ts +16 -0
- package/src/modules/arch/utils/utils.ts +20 -0
- package/src/modules/arch/withState.ts +21 -0
- package/src/modules/arch/xsfMfeEvents/xsfMfeEvents.html +1 -0
- package/src/modules/arch/xsfMfeEvents/xsfMfeEvents.ts +47 -0
- package/src/common/effectAdapter/__tests__/effectAdapter.test.ts +0 -12
- package/src/common/effectAdapter/effectAdapter.ts +0 -18
- package/src/common/reflectedElement/__tests__/modules/test/select/select.html +0 -3
- package/src/common/reflectedElement/__tests__/modules/test/select/select.ts +0 -7
- package/src/common/reflectedElement/__tests__/modules/test/selectTransform/selectTransform.html +0 -3
- package/src/common/reflectedElement/__tests__/modules/test/selectTransform/selectTransform.ts +0 -18
- package/src/common/reflectedElement/__tests__/reflectedElement.test.ts +0 -75
- package/src/common/slot/__tests__/slot.test.ts +0 -96
- package/src/common/slot/slot.ts +0 -20
- /package/src/{common → modules/arch}/context/context.html +0 -0
- /package/src/{common/effectAdapter/effectAdapter.html → modules/arch/contextAdapter/contextAdapter.html} +0 -0
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { api, track, LightningElement } from "lwc";
|
|
2
|
+
|
|
3
|
+
import { track as analyticsTrack } from "arch/instrumentation";
|
|
4
|
+
import { sendInteractionEvent, InteractionEventTypes } from "arch/helpers";
|
|
5
|
+
|
|
6
|
+
export type CardAttribute = string | null;
|
|
7
|
+
|
|
8
|
+
export type CardImageVariant =
|
|
9
|
+
| "top-cover"
|
|
10
|
+
| "top-small"
|
|
11
|
+
| "left-small"
|
|
12
|
+
| "left-cover"
|
|
13
|
+
| "right-cover";
|
|
14
|
+
|
|
15
|
+
export type Card = {
|
|
16
|
+
assistiveText: CardAttribute;
|
|
17
|
+
ctaHref: CardAttribute;
|
|
18
|
+
ctaTarget: CardAttribute;
|
|
19
|
+
ctaTitle: CardAttribute;
|
|
20
|
+
description: CardAttribute;
|
|
21
|
+
imgSrc: CardAttribute;
|
|
22
|
+
pretitle: CardAttribute;
|
|
23
|
+
pretitleHref: CardAttribute;
|
|
24
|
+
pretitleHrefText: CardAttribute;
|
|
25
|
+
title: CardAttribute;
|
|
26
|
+
productArea: CardAttribute;
|
|
27
|
+
date: CardAttribute;
|
|
28
|
+
level: CardAttribute;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const widths = [820, 640, 320, 75];
|
|
32
|
+
|
|
33
|
+
const homepageCtaTitles = ["design", "deliver", "govern", "roadmap"];
|
|
34
|
+
|
|
35
|
+
// arch-card-grid taks care of adjusting the grid to the correct number
|
|
36
|
+
// of columns at smaller view ports
|
|
37
|
+
export const mediaQuerySnapToTop = window.matchMedia(`(max-width: 500px)`);
|
|
38
|
+
|
|
39
|
+
export default class extends LightningElement {
|
|
40
|
+
@api assistiveText: CardAttribute = null;
|
|
41
|
+
@api ctaHref: CardAttribute = null;
|
|
42
|
+
@api ctaTarget: CardAttribute = null;
|
|
43
|
+
@api ctaTitle: CardAttribute = null;
|
|
44
|
+
@api description: CardAttribute = null;
|
|
45
|
+
@api imgAspect: CardAttribute = null;
|
|
46
|
+
@api imgSrc: CardAttribute = null;
|
|
47
|
+
@api imgVariant: CardImageVariant = "top-cover";
|
|
48
|
+
@api pretitle: CardAttribute = null;
|
|
49
|
+
@api pretitleHref: CardAttribute = null;
|
|
50
|
+
@api pretitleHrefText: CardAttribute = null;
|
|
51
|
+
@api title: string = "";
|
|
52
|
+
@api productArea: string = "";
|
|
53
|
+
@api date: string = "";
|
|
54
|
+
@api level: string = "";
|
|
55
|
+
|
|
56
|
+
@track private snapToTop = mediaQuerySnapToTop.matches;
|
|
57
|
+
private cardId: string = "";
|
|
58
|
+
|
|
59
|
+
private get imgStyle() {
|
|
60
|
+
if (!this.imgSrc) {
|
|
61
|
+
return "";
|
|
62
|
+
}
|
|
63
|
+
const style: string[] = [];
|
|
64
|
+
const { imgVariantResponsive: variant, imgSrc } = this;
|
|
65
|
+
|
|
66
|
+
if (variant.includes("cover")) {
|
|
67
|
+
const image = imgSrc;
|
|
68
|
+
|
|
69
|
+
// Use the original image if it's a remote image or WebP
|
|
70
|
+
/* if (!this.isRemoteImage && !imgSrc.includes('webp')) {
|
|
71
|
+
const imgType = imgSrc.split('.').pop();
|
|
72
|
+
image = imgSrc.replace(`.${imgType}`, '-820w.webp');
|
|
73
|
+
} */
|
|
74
|
+
|
|
75
|
+
style.push(`background-image: url(${image})`);
|
|
76
|
+
}
|
|
77
|
+
if (variant === "top-cover") {
|
|
78
|
+
style.push(`padding-top: ${this.imgAspect || "40%"}`);
|
|
79
|
+
}
|
|
80
|
+
return style.join(";");
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private get imgTag() {
|
|
84
|
+
return this.imgVariant.includes("small");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private get isRemoteImage() {
|
|
88
|
+
return /^(https?:\/\/|\/\/)/i.test(this.imgSrc);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private get imgSrcSetWebP() {
|
|
92
|
+
if (this.isRemoteImage) {
|
|
93
|
+
return this.imgSrc;
|
|
94
|
+
}
|
|
95
|
+
const imgType = this.imgSrc?.split(".").pop();
|
|
96
|
+
const imgName = this.imgSrc?.replace(`.${imgType}`, "");
|
|
97
|
+
const srcSet: string[] = [];
|
|
98
|
+
widths.forEach((width) => {
|
|
99
|
+
srcSet.push(`${imgName}-${width}w.webp ${width}w`);
|
|
100
|
+
});
|
|
101
|
+
return srcSet.join(",");
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private get imgSrcSetJpg() {
|
|
105
|
+
if (this.isRemoteImage) {
|
|
106
|
+
return this.imgSrc;
|
|
107
|
+
}
|
|
108
|
+
const imgType = this.imgSrc?.split(".").pop();
|
|
109
|
+
const imgName = this.imgSrc?.replace(`.${imgType}`, "");
|
|
110
|
+
const srcSet: string[] = [];
|
|
111
|
+
widths.forEach((width) => {
|
|
112
|
+
srcSet.push(`${imgName}-${width}w.jpg ${width}w`);
|
|
113
|
+
});
|
|
114
|
+
return srcSet.join(",");
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private get imgTagNoSvg() {
|
|
118
|
+
return this.imgTag && !this.imgSrc?.toLowerCase().endsWith("svg");
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private get imgTagSvg() {
|
|
122
|
+
return this.imgTag && this.imgSrc?.toLowerCase().endsWith("svg");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private get rel() {
|
|
126
|
+
return this.ctaTarget === "_blank" ? "noopener" : "";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
get isExternalHref() {
|
|
130
|
+
return this.ctaTarget === "_blank" && this.ctaTitle;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private get imgVariantResponsive() {
|
|
134
|
+
if (!this.snapToTop) {
|
|
135
|
+
return this.imgVariant;
|
|
136
|
+
}
|
|
137
|
+
return String(this.imgVariant).replace(/left|right/, "top");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Accessibility getters
|
|
141
|
+
get cardTitleId() {
|
|
142
|
+
return `${this.cardId}-title`;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
get ctaTitleId() {
|
|
146
|
+
return `${this.cardId}-cta`;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
get imageDivId() {
|
|
150
|
+
return `${this.cardId}-image-div`;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
get imageImgId() {
|
|
154
|
+
return `${this.cardId}-image-img`;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
get imageSvgId() {
|
|
158
|
+
return `${this.cardId}-image-svg`;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
get imageAriaLabel() {
|
|
162
|
+
const title = this.title || "Card";
|
|
163
|
+
const description = this.description || "";
|
|
164
|
+
return `View ${title}${description ? `: ${description}` : ""}`;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
get imageAltText() {
|
|
168
|
+
return this.description || this.title || "Card image";
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
connectedCallback() {
|
|
172
|
+
mediaQuerySnapToTop.addListener(this.onMediaQuerySnapToTop);
|
|
173
|
+
// Generate unique ID for this card instance
|
|
174
|
+
const title = this.title || "Card";
|
|
175
|
+
this.cardId = `${title}-${Math.random().toString(36).substring(2, 11)}`;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
disconnectedCallback() {
|
|
179
|
+
mediaQuerySnapToTop.removeListener(this.onMediaQuerySnapToTop);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private onImageClick(e: MouseEvent) {
|
|
183
|
+
const element = e.target as HTMLElement;
|
|
184
|
+
sendInteractionEvent(
|
|
185
|
+
"Card Image Click",
|
|
186
|
+
InteractionEventTypes.IMAGE_CLICK,
|
|
187
|
+
e,
|
|
188
|
+
element
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
const { ctaHref, ctaTarget } = this;
|
|
192
|
+
if (ctaHref) {
|
|
193
|
+
if (ctaTarget) {
|
|
194
|
+
window.open(ctaHref, ctaTarget);
|
|
195
|
+
} else {
|
|
196
|
+
window.location.href = ctaHref;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
this.trackLinkClick(e, true);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private trackLinkClick(e: MouseEvent, imgClick: boolean) {
|
|
203
|
+
const element = e.currentTarget as HTMLAnchorElement;
|
|
204
|
+
const linkText = this.ctaTitle;
|
|
205
|
+
const title = typeof this.title === "string" ? this.title : "";
|
|
206
|
+
let event: string = "";
|
|
207
|
+
let payload: Record<string, string> = {};
|
|
208
|
+
if (!imgClick) {
|
|
209
|
+
sendInteractionEvent(
|
|
210
|
+
"Card Link Click",
|
|
211
|
+
InteractionEventTypes.CLICK,
|
|
212
|
+
e,
|
|
213
|
+
element
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (
|
|
218
|
+
window.location.pathname === "/" &&
|
|
219
|
+
homepageCtaTitles.includes(this.title.toLowerCase())
|
|
220
|
+
) {
|
|
221
|
+
event = "homepage_cta";
|
|
222
|
+
payload = {
|
|
223
|
+
linkText: `home: ${linkText}`,
|
|
224
|
+
headingText: title,
|
|
225
|
+
itemLocation: "card"
|
|
226
|
+
};
|
|
227
|
+
} else {
|
|
228
|
+
event = "select_content";
|
|
229
|
+
payload = {
|
|
230
|
+
contentType: "card grid",
|
|
231
|
+
itemTitle: !title || title === "" ? undefined : title,
|
|
232
|
+
itemLocation: "card"
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (element.target) {
|
|
236
|
+
const parsedLink = new URL(element.href);
|
|
237
|
+
analyticsTrack(this.template.host, "custEv_outboundClick", {
|
|
238
|
+
clickText: title,
|
|
239
|
+
clickUrl: parsedLink.href
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
analyticsTrack(this.template.host, event, payload);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
private onMediaQuerySnapToTop = (e: MediaQueryListEvent) => {
|
|
246
|
+
this.snapToTop = e.matches;
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
// Accessibility keyboard handlers
|
|
250
|
+
handleCardKeydown(e: KeyboardEvent) {
|
|
251
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
252
|
+
this.trackLinkClick(e as unknown as MouseEvent, false);
|
|
253
|
+
e.preventDefault();
|
|
254
|
+
if (this.ctaHref) {
|
|
255
|
+
if (this.ctaTarget) {
|
|
256
|
+
window.open(this.ctaHref, this.ctaTarget);
|
|
257
|
+
} else {
|
|
258
|
+
window.location.href = this.ctaHref;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export function extractCardAttributes(element: Element) {
|
|
266
|
+
return {
|
|
267
|
+
ctaHref: element.getAttribute("cta-href")!,
|
|
268
|
+
ctaTarget: element.getAttribute("cta-target")!,
|
|
269
|
+
ctaTitle: element.getAttribute("cta-title")!,
|
|
270
|
+
description: element.getAttribute("description"),
|
|
271
|
+
imgSrc: element.getAttribute("img-src"),
|
|
272
|
+
pretitle: element.getAttribute("pretitle"),
|
|
273
|
+
pretitleHref: element.getAttribute("pretitle-href"),
|
|
274
|
+
pretitleHrefText: element.getAttribute("pretitle-href-text"),
|
|
275
|
+
title: element.getAttribute("title")
|
|
276
|
+
} as Card;
|
|
277
|
+
}
|
|
@@ -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,118 @@
|
|
|
1
|
+
import { html } from "lit-html";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: "arch/arch-card-grid-a",
|
|
5
|
+
component: "sb-arch-card-grid-a",
|
|
6
|
+
parameters: {
|
|
7
|
+
chromatic: {
|
|
8
|
+
viewports: [450, 800, 1199]
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
const createStyles = () => html `
|
|
15
|
+
<style>
|
|
16
|
+
sb-arch-card-grid-a {
|
|
17
|
+
display: block;
|
|
18
|
+
}
|
|
19
|
+
</style>`;
|
|
20
|
+
|
|
21
|
+
// prettier-ignore
|
|
22
|
+
export const Base = () => html` ${createStyles()}
|
|
23
|
+
<sb-arch-card-grid-a img-aspect="60%">
|
|
24
|
+
<sb-arch-card
|
|
25
|
+
cta-href="/"
|
|
26
|
+
cta-title="Read More"
|
|
27
|
+
cta-target="_blank"
|
|
28
|
+
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."
|
|
29
|
+
title="Hello A"
|
|
30
|
+
></sb-arch-card>
|
|
31
|
+
<sb-arch-card
|
|
32
|
+
cta-href="/"
|
|
33
|
+
cta-title="Read More"
|
|
34
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
35
|
+
title="Hello B"
|
|
36
|
+
></sb-arch-card>
|
|
37
|
+
<sb-arch-card
|
|
38
|
+
cta-href="/"
|
|
39
|
+
cta-title="Read More"
|
|
40
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
41
|
+
title="Hello C"
|
|
42
|
+
></sb-arch-card>
|
|
43
|
+
<sb-arch-card
|
|
44
|
+
cta-href="/"
|
|
45
|
+
cta-title="Read More"
|
|
46
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
47
|
+
title="Hello D"
|
|
48
|
+
></sb-arch-card>
|
|
49
|
+
<sb-arch-card
|
|
50
|
+
cta-href="/"
|
|
51
|
+
cta-title="Read More"
|
|
52
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
53
|
+
title="Hello E"
|
|
54
|
+
></sb-arch-card>
|
|
55
|
+
</sb-arch-card-grid-a>
|
|
56
|
+
`;
|
|
57
|
+
|
|
58
|
+
// prettier-ignore
|
|
59
|
+
export const ImageFull = () => html` ${createStyles()}
|
|
60
|
+
<sb-arch-card-grid-a img-aspect="60%" img-type="full">
|
|
61
|
+
<sb-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 A"
|
|
65
|
+
></sb-arch-card>
|
|
66
|
+
<sb-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 B"
|
|
70
|
+
></sb-arch-card>
|
|
71
|
+
<sb-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 C"
|
|
75
|
+
></sb-arch-card>
|
|
76
|
+
<sb-arch-card
|
|
77
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
78
|
+
img-src="/images/card-a.png"
|
|
79
|
+
title="Hello D"
|
|
80
|
+
></sb-arch-card>
|
|
81
|
+
<sb-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 E"
|
|
85
|
+
></sb-arch-card>
|
|
86
|
+
</sb-arch-card-grid-a>
|
|
87
|
+
`;
|
|
88
|
+
|
|
89
|
+
// prettier-ignore
|
|
90
|
+
export const ImageLeft = () => html` ${createStyles()}
|
|
91
|
+
<sb-arch-card-grid-a img-aspect="60%" img-type="left">
|
|
92
|
+
<sb-arch-card
|
|
93
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
94
|
+
img-src="/images/card-a.png"
|
|
95
|
+
title="Hello A"
|
|
96
|
+
></sb-arch-card>
|
|
97
|
+
<sb-arch-card
|
|
98
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
99
|
+
img-src="/images/card-a.png"
|
|
100
|
+
title="Hello B"
|
|
101
|
+
></sb-arch-card>
|
|
102
|
+
<sb-arch-card
|
|
103
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
104
|
+
img-src="/images/card-a.png"
|
|
105
|
+
title="Hello C"
|
|
106
|
+
></sb-arch-card>
|
|
107
|
+
<sb-arch-card
|
|
108
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
109
|
+
img-src="/images/card-a.png"
|
|
110
|
+
title="Hello D"
|
|
111
|
+
></sb-arch-card>
|
|
112
|
+
<sb-arch-card
|
|
113
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
114
|
+
img-src="/images/card-a.png"
|
|
115
|
+
title="Hello E"
|
|
116
|
+
></sb-arch-card>
|
|
117
|
+
</sb-arch-card-grid-a>
|
|
118
|
+
`;
|
|
@@ -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,51 @@
|
|
|
1
|
+
import { html } from "lit-html";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: "arch/arch-card-grid-c",
|
|
5
|
+
component: "sb-arch-card-grid-c",
|
|
6
|
+
parameters: {
|
|
7
|
+
chromatic: {
|
|
8
|
+
viewports: [380, 800, 1199]
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
const createStyles = () => html `
|
|
15
|
+
<style>
|
|
16
|
+
sb-arch-card-grid-c {
|
|
17
|
+
display: block;
|
|
18
|
+
}
|
|
19
|
+
</style>`;
|
|
20
|
+
|
|
21
|
+
// prettier-ignore
|
|
22
|
+
export const Base = () => html` ${createStyles()}
|
|
23
|
+
<sb-arch-card-grid-c img-aspect="60%">
|
|
24
|
+
<sb-arch-card
|
|
25
|
+
cta-href="/posts/1"
|
|
26
|
+
cta-title="Read More"
|
|
27
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
28
|
+
img-src="/images/card-a.png"
|
|
29
|
+
pretitle="Blog by"
|
|
30
|
+
pretitle-href="/user/amylee"
|
|
31
|
+
pretitle-href-text="Amy Lee"
|
|
32
|
+
title="Inspire Your Peers Careers by Sharing Your #AwesomeAdmin Advice"
|
|
33
|
+
></sb-arch-card>
|
|
34
|
+
<sb-arch-card
|
|
35
|
+
cta-href="/posts/1"
|
|
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
|
+
img-src="/images/card-a.png"
|
|
39
|
+
pretitle="Blog by Amy Lee"
|
|
40
|
+
title="Hello B"
|
|
41
|
+
></sb-arch-card>
|
|
42
|
+
<sb-arch-card
|
|
43
|
+
cta-href="/posts/1"
|
|
44
|
+
cta-title="Read More"
|
|
45
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
46
|
+
img-src="/images/card-a.png"
|
|
47
|
+
pretitle="Blog by Amy Lee"
|
|
48
|
+
title="Hello C"
|
|
49
|
+
></sb-arch-card>
|
|
50
|
+
</sb-arch-card-grid-c>
|
|
51
|
+
`;
|
|
@@ -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,43 @@
|
|
|
1
|
+
import { html } from "lit-html";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
title: "arch/arch-card-grid-d",
|
|
5
|
+
component: "sb-arch-card-grid-d",
|
|
6
|
+
parameters: {
|
|
7
|
+
chromatic: {
|
|
8
|
+
viewports: [400, 800, 1199]
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// prettier-ignore
|
|
14
|
+
const createStyles = () => html `
|
|
15
|
+
<style>
|
|
16
|
+
sb-arch-card-grid-d {
|
|
17
|
+
display: block;
|
|
18
|
+
}
|
|
19
|
+
</style>`;
|
|
20
|
+
|
|
21
|
+
// prettier-ignore
|
|
22
|
+
export const Base = () => html` ${createStyles()}
|
|
23
|
+
<sb-arch-card-grid-d>
|
|
24
|
+
<sb-arch-card
|
|
25
|
+
cta-href="/"
|
|
26
|
+
cta-title="Start"
|
|
27
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eget velit placerat, scelerisque libero sed, mattis orci."
|
|
28
|
+
img-src="/images/card-a.png"
|
|
29
|
+
pretitle="Learning with"
|
|
30
|
+
pretitle-href="/users/astro"
|
|
31
|
+
pretitle-href-text="Astro"
|
|
32
|
+
title="Hello A"
|
|
33
|
+
></sb-arch-card>
|
|
34
|
+
<sb-arch-card
|
|
35
|
+
cta-href="/"
|
|
36
|
+
cta-title="Start"
|
|
37
|
+
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
|
|
38
|
+
img-src="/images/card-a.png"
|
|
39
|
+
pretitle="Hello"
|
|
40
|
+
title="Hello B"
|
|
41
|
+
></sb-arch-card>
|
|
42
|
+
</sb-arch-card-grid-d>
|
|
43
|
+
`;
|