@sankhyatronics/sankhya-cms 0.2.0 → 0.3.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/custom-elements.json +10968 -3080
- package/dist/attention-panel/index.js +2 -2
- package/dist/bar-chart/index.js +2 -2
- package/dist/bento-grid/index.d.ts +25 -0
- package/dist/bento-grid/index.js +4 -4
- package/dist/booking/index.d.ts +309 -0
- package/dist/booking/index.js +20 -0
- package/dist/booking/index.js.map +1 -0
- package/dist/card/index.js +2 -2
- package/dist/carousel/index.d.ts +20 -6
- package/dist/carousel/index.js +3 -3
- package/dist/chip/index.js +2 -2
- package/dist/{chunk-OLA35A2O.js → chunk-2GTR37PU.js} +2 -2
- package/dist/{chunk-7NIWQWTA.js → chunk-2HMOX253.js} +128 -25
- package/dist/chunk-2HMOX253.js.map +1 -0
- package/dist/{chunk-DH53HZPB.js → chunk-37KFBKPD.js} +32 -4
- package/dist/chunk-37KFBKPD.js.map +1 -0
- package/dist/{chunk-EE6PAN3B.js → chunk-4XPKKYVZ.js} +23 -15
- package/dist/chunk-4XPKKYVZ.js.map +1 -0
- package/dist/chunk-535QAZ6A.js +236 -0
- package/dist/chunk-535QAZ6A.js.map +1 -0
- package/dist/{chunk-AKJQ345O.js → chunk-5AWGZQWU.js} +2 -2
- package/dist/chunk-6OZKZG5J.js +300 -0
- package/dist/chunk-6OZKZG5J.js.map +1 -0
- package/dist/chunk-AYNT7G3J.js +805 -0
- package/dist/chunk-AYNT7G3J.js.map +1 -0
- package/dist/chunk-BEWX3E6P.js +32 -0
- package/dist/chunk-BEWX3E6P.js.map +1 -0
- package/dist/chunk-CZUGPKXV.js +275 -0
- package/dist/chunk-CZUGPKXV.js.map +1 -0
- package/dist/{chunk-2DXHPEB5.js → chunk-DJFWZOZM.js} +107 -11
- package/dist/chunk-DJFWZOZM.js.map +1 -0
- package/dist/chunk-DPANTC3O.js +1714 -0
- package/dist/chunk-DPANTC3O.js.map +1 -0
- package/dist/chunk-EKZFFY45.js +426 -0
- package/dist/chunk-EKZFFY45.js.map +1 -0
- package/dist/chunk-ER7MCPDV.js +7 -0
- package/dist/chunk-ER7MCPDV.js.map +1 -0
- package/dist/chunk-EW2RK5Y6.js +383 -0
- package/dist/chunk-EW2RK5Y6.js.map +1 -0
- package/dist/{chunk-BLQV2YMO.js → chunk-EZOKT7NJ.js} +2 -2
- package/dist/chunk-FF2LWEF3.js +386 -0
- package/dist/chunk-FF2LWEF3.js.map +1 -0
- package/dist/chunk-FOUK3NHR.js +7 -0
- package/dist/chunk-FOUK3NHR.js.map +1 -0
- package/dist/{chunk-O4FCRKDX.js → chunk-GB4NGCZI.js} +6 -3
- package/dist/chunk-GB4NGCZI.js.map +1 -0
- package/dist/{chunk-5F5PTVWR.js → chunk-GOFSMD6W.js} +9 -10
- package/dist/chunk-GOFSMD6W.js.map +1 -0
- package/dist/{chunk-6D6ROU7X.js → chunk-IGMVF3KK.js} +2 -2
- package/dist/{chunk-INMSEYT6.js → chunk-IVPVYVWG.js} +2 -2
- package/dist/{chunk-ZRC5BVDX.js → chunk-JURCF4OD.js} +174 -12
- package/dist/chunk-JURCF4OD.js.map +1 -0
- package/dist/{chunk-FZ36KL73.js → chunk-KZ7PMFWS.js} +11 -1
- package/dist/chunk-KZ7PMFWS.js.map +1 -0
- package/dist/{chunk-EMCQBT3S.js → chunk-LO6TZBGD.js} +129 -35
- package/dist/chunk-LO6TZBGD.js.map +1 -0
- package/dist/chunk-MFRGAT6D.js +860 -0
- package/dist/chunk-MFRGAT6D.js.map +1 -0
- package/dist/chunk-MIBVQXRU.js +1098 -0
- package/dist/chunk-MIBVQXRU.js.map +1 -0
- package/dist/{chunk-35TX3AOA.js → chunk-NABSRUXG.js} +2 -2
- package/dist/{chunk-2FJDNJ7R.js → chunk-NXKDZWS7.js} +44 -6
- package/dist/chunk-NXKDZWS7.js.map +1 -0
- package/dist/{chunk-KMU6ABQF.js → chunk-NXUS2CH7.js} +14 -1
- package/dist/chunk-NXUS2CH7.js.map +1 -0
- package/dist/{chunk-GJO3RGOB.js → chunk-OCPGOLVF.js} +56 -11
- package/dist/chunk-OCPGOLVF.js.map +1 -0
- package/dist/chunk-OEOE6IFY.js +628 -0
- package/dist/chunk-OEOE6IFY.js.map +1 -0
- package/dist/{chunk-OELI3IWC.js → chunk-PV6OCXXN.js} +2 -2
- package/dist/{chunk-5C6C6K5U.js → chunk-Q66CJO3P.js} +200 -12
- package/dist/chunk-Q66CJO3P.js.map +1 -0
- package/dist/{chunk-MG2VTZA4.js → chunk-QS3ANOWN.js} +2 -2
- package/dist/{chunk-3OEEOBHB.js → chunk-QSJ543V2.js} +2 -2
- package/dist/{chunk-FML6AG2V.js → chunk-RANC3OI6.js} +2 -2
- package/dist/chunk-T4BIN37Q.js +32 -0
- package/dist/chunk-T4BIN37Q.js.map +1 -0
- package/dist/{chunk-YVTFQHVY.js → chunk-TEAZZPDQ.js} +2 -2
- package/dist/chunk-TJK55CJ2.js +49 -0
- package/dist/chunk-TJK55CJ2.js.map +1 -0
- package/dist/chunk-UKIVLF7S.js +32 -0
- package/dist/chunk-UKIVLF7S.js.map +1 -0
- package/dist/chunk-V4R7PYP5.js +905 -0
- package/dist/chunk-V4R7PYP5.js.map +1 -0
- package/dist/{chunk-AG2COC64.js → chunk-VVYQ2DDS.js} +2 -2
- package/dist/chunk-WAMOAAMN.js +16 -0
- package/dist/chunk-WAMOAAMN.js.map +1 -0
- package/dist/chunk-WAYHHL4J.js +1234 -0
- package/dist/chunk-WAYHHL4J.js.map +1 -0
- package/dist/{chunk-PHEGSCOM.js → chunk-WH6HE6SY.js} +10 -4
- package/dist/chunk-WH6HE6SY.js.map +1 -0
- package/dist/{chunk-5MY6OWMK.js → chunk-XP6DI3VY.js} +59 -4
- package/dist/chunk-XP6DI3VY.js.map +1 -0
- package/dist/{chunk-QLA4BH2B.js → chunk-XS6LNTSH.js} +73 -11
- package/dist/chunk-XS6LNTSH.js.map +1 -0
- package/dist/{chunk-WT4OATGP.js → chunk-ZKFCDVB4.js} +16 -7
- package/dist/chunk-ZKFCDVB4.js.map +1 -0
- package/dist/cms-theme.css +22 -0
- package/dist/contact-form/index.d.ts +220 -0
- package/dist/contact-form/index.js +16 -0
- package/dist/contact-form/index.js.map +1 -0
- package/dist/content-block/index.d.ts +39 -3
- package/dist/content-block/index.js +8 -5
- package/dist/cookie-consent/index.d.ts +60 -12
- package/dist/cookie-consent/index.js +3 -2
- package/dist/date-tile/index.js +2 -2
- package/dist/dropdown/index.d.ts +22 -1
- package/dist/dropdown/index.js +4 -2
- package/dist/feature-split/index.d.ts +6 -1
- package/dist/feature-split/index.js +5 -5
- package/dist/features-section/index.d.ts +49 -5
- package/dist/features-section/index.js +6 -6
- package/dist/flow/index.js +2 -2
- package/dist/footer/index.d.ts +13 -0
- package/dist/footer/index.js +2 -2
- package/dist/header/index.d.ts +127 -1
- package/dist/header/index.js +3 -2
- package/dist/hero/index.d.ts +75 -6
- package/dist/hero/index.js +6 -3
- package/dist/icon-button/index.d.ts +5 -3
- package/dist/icon-button/index.js +2 -2
- package/dist/index.d.ts +9 -3
- package/dist/index.js +118 -57
- package/dist/items-accordion/index.d.ts +5 -1
- package/dist/items-accordion/index.js +4 -4
- package/dist/kpi-card/index.js +2 -2
- package/dist/markdown/index.d.ts +18 -0
- package/dist/markdown/index.js +3 -3
- package/dist/mega-menu/index.d.ts +95 -7
- package/dist/mega-menu/index.js +7 -2
- package/dist/menu-grid/index.js +2 -2
- package/dist/menu-grid-item/index.js +2 -2
- package/dist/menu-item/index.d.ts +6 -0
- package/dist/menu-item/index.js +3 -2
- package/dist/plan-cards/index.d.ts +69 -0
- package/dist/plan-cards/index.js +13 -0
- package/dist/plan-cards/index.js.map +1 -0
- package/dist/product-nav/index.d.ts +127 -0
- package/dist/product-nav/index.js +11 -0
- package/dist/product-nav/index.js.map +1 -0
- package/dist/promo-banner/index.d.ts +34 -7
- package/dist/promo-banner/index.js +6 -3
- package/dist/quote-dialog/index.d.ts +174 -0
- package/dist/quote-dialog/index.js +22 -0
- package/dist/quote-dialog/index.js.map +1 -0
- package/dist/schema/index.d.ts +8 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/screenshot-tour/index.d.ts +54 -0
- package/dist/screenshot-tour/index.js +9 -0
- package/dist/screenshot-tour/index.js.map +1 -0
- package/dist/section/index.js +3 -3
- package/dist/segmented-control/index.js +2 -2
- package/dist/select/index.js +2 -2
- package/dist/shared/styles.d.ts +7 -1
- package/dist/shared/styles.js +3 -1
- package/dist/stats/index.js +2 -2
- package/dist/steps/index.d.ts +12 -0
- package/dist/steps/index.js +4 -3
- package/dist/tag-strip/index.d.ts +7 -0
- package/dist/tag-strip/index.js +2 -2
- package/dist/testimonials/index.d.ts +9 -1
- package/dist/testimonials/index.js +3 -3
- package/dist/tooltip/index.js +2 -2
- package/package.json +26 -2
- package/dist/chunk-2DXHPEB5.js.map +0 -1
- package/dist/chunk-2FJDNJ7R.js.map +0 -1
- package/dist/chunk-4AFOKKSU.js +0 -158
- package/dist/chunk-4AFOKKSU.js.map +0 -1
- package/dist/chunk-5C6C6K5U.js.map +0 -1
- package/dist/chunk-5F5PTVWR.js.map +0 -1
- package/dist/chunk-5MY6OWMK.js.map +0 -1
- package/dist/chunk-7NIWQWTA.js.map +0 -1
- package/dist/chunk-DH53HZPB.js.map +0 -1
- package/dist/chunk-EE6PAN3B.js.map +0 -1
- package/dist/chunk-EMCQBT3S.js.map +0 -1
- package/dist/chunk-FZ36KL73.js.map +0 -1
- package/dist/chunk-GJO3RGOB.js.map +0 -1
- package/dist/chunk-HMUZON6I.js +0 -202
- package/dist/chunk-HMUZON6I.js.map +0 -1
- package/dist/chunk-J6EO4R73.js +0 -633
- package/dist/chunk-J6EO4R73.js.map +0 -1
- package/dist/chunk-KMU6ABQF.js.map +0 -1
- package/dist/chunk-MSSH3HFK.js +0 -205
- package/dist/chunk-MSSH3HFK.js.map +0 -1
- package/dist/chunk-O4FCRKDX.js.map +0 -1
- package/dist/chunk-PHEGSCOM.js.map +0 -1
- package/dist/chunk-QLA4BH2B.js.map +0 -1
- package/dist/chunk-SQ3OZO32.js +0 -486
- package/dist/chunk-SQ3OZO32.js.map +0 -1
- package/dist/chunk-UAIUBPDN.js +0 -11
- package/dist/chunk-UAIUBPDN.js.map +0 -1
- package/dist/chunk-WT4OATGP.js.map +0 -1
- package/dist/chunk-XUGEXERO.js +0 -708
- package/dist/chunk-XUGEXERO.js.map +0 -1
- package/dist/chunk-ZRC5BVDX.js.map +0 -1
- /package/dist/{chunk-OLA35A2O.js.map → chunk-2GTR37PU.js.map} +0 -0
- /package/dist/{chunk-AKJQ345O.js.map → chunk-5AWGZQWU.js.map} +0 -0
- /package/dist/{chunk-BLQV2YMO.js.map → chunk-EZOKT7NJ.js.map} +0 -0
- /package/dist/{chunk-6D6ROU7X.js.map → chunk-IGMVF3KK.js.map} +0 -0
- /package/dist/{chunk-INMSEYT6.js.map → chunk-IVPVYVWG.js.map} +0 -0
- /package/dist/{chunk-35TX3AOA.js.map → chunk-NABSRUXG.js.map} +0 -0
- /package/dist/{chunk-OELI3IWC.js.map → chunk-PV6OCXXN.js.map} +0 -0
- /package/dist/{chunk-MG2VTZA4.js.map → chunk-QS3ANOWN.js.map} +0 -0
- /package/dist/{chunk-3OEEOBHB.js.map → chunk-QSJ543V2.js.map} +0 -0
- /package/dist/{chunk-FML6AG2V.js.map → chunk-RANC3OI6.js.map} +0 -0
- /package/dist/{chunk-YVTFQHVY.js.map → chunk-TEAZZPDQ.js.map} +0 -0
- /package/dist/{chunk-AG2COC64.js.map → chunk-VVYQ2DDS.js.map} +0 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cardDescriptionStyles,
|
|
3
3
|
cardTitleStyles,
|
|
4
|
+
sectionEyebrowStyles,
|
|
4
5
|
sectionHeaderStyles,
|
|
5
6
|
sectionSubtitleStyles,
|
|
6
7
|
sectionTitleStyles
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KZ7PMFWS.js";
|
|
8
9
|
import {
|
|
9
10
|
controlBaseStyles,
|
|
10
11
|
fontFamilyStyles
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-NXUS2CH7.js";
|
|
12
13
|
import {
|
|
13
14
|
__decorateClass
|
|
14
15
|
} from "./chunk-EUXUH3YW.js";
|
|
@@ -30,30 +31,36 @@ var FeatureItem = class extends LitElement {
|
|
|
30
31
|
this.href = "";
|
|
31
32
|
this.actionLabel = "Learn more";
|
|
32
33
|
this.inverted = false;
|
|
34
|
+
this.variant = "default";
|
|
33
35
|
}
|
|
34
|
-
|
|
36
|
+
renderBody() {
|
|
35
37
|
const external = this.href.startsWith("http");
|
|
38
|
+
const panel = this.variant === "panel";
|
|
36
39
|
return html`
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
>
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</div>
|
|
54
|
-
</st-card>
|
|
40
|
+
<div class="content" part="content">
|
|
41
|
+
${this.icon && !panel ? html`<div class="icon" part="icon"><iconify-icon icon=${this.icon}></iconify-icon></div>` : nothing}
|
|
42
|
+
<h3 class="title" part="title">${this.title}</h3>
|
|
43
|
+
<st-markdown class="description" part="description" .content=${this.description}></st-markdown>
|
|
44
|
+
${this.href ? html`
|
|
45
|
+
<a
|
|
46
|
+
class="link"
|
|
47
|
+
part="link"
|
|
48
|
+
href=${this.href}
|
|
49
|
+
target=${external ? "_blank" : "_self"}
|
|
50
|
+
rel=${external ? "noopener noreferrer" : nothing}
|
|
51
|
+
>
|
|
52
|
+
${this.actionLabel} <span>→</span>
|
|
53
|
+
</a>
|
|
54
|
+
` : nothing}
|
|
55
|
+
</div>
|
|
55
56
|
`;
|
|
56
57
|
}
|
|
58
|
+
render() {
|
|
59
|
+
if (this.variant === "panel") {
|
|
60
|
+
return html`<div class="panel" part="card">${this.renderBody()}</div>`;
|
|
61
|
+
}
|
|
62
|
+
return html`<st-card hoverable elevation="sm" ?inverted=${this.inverted} part="card">${this.renderBody()}</st-card>`;
|
|
63
|
+
}
|
|
57
64
|
};
|
|
58
65
|
FeatureItem.styles = css`
|
|
59
66
|
${controlBaseStyles}
|
|
@@ -103,9 +110,11 @@ FeatureItem.styles = css`
|
|
|
103
110
|
margin: 0;
|
|
104
111
|
}
|
|
105
112
|
|
|
113
|
+
/* Inverted tiles sit on the dark band: explicit light text, 17:1 on the default navy, instead of
|
|
114
|
+
whatever the card's colour happens to be. */
|
|
106
115
|
:host([inverted]) .title,
|
|
107
116
|
:host([inverted]) .description {
|
|
108
|
-
color:
|
|
117
|
+
color: var(--st-color-on-solid);
|
|
109
118
|
}
|
|
110
119
|
|
|
111
120
|
.link {
|
|
@@ -130,6 +139,46 @@ FeatureItem.styles = css`
|
|
|
130
139
|
color: inherit;
|
|
131
140
|
}
|
|
132
141
|
|
|
142
|
+
/* variant="panel": a compact card without the icon tile. */
|
|
143
|
+
.panel {
|
|
144
|
+
box-sizing: border-box;
|
|
145
|
+
height: 100%;
|
|
146
|
+
padding: var(--st-feature-item-panel-padding, 20px);
|
|
147
|
+
border: 1px solid var(--st-feature-item-panel-border, var(--st-color-border));
|
|
148
|
+
border-radius: var(--st-feature-item-panel-radius, 12px);
|
|
149
|
+
background: var(--st-feature-item-panel-bg, var(--st-color-surface));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
:host([variant='panel']) .panel .content {
|
|
153
|
+
gap: var(--st-feature-item-panel-gap, var(--st-space-8));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
:host([variant='panel']) .title {
|
|
157
|
+
font-size: var(--st-feature-item-panel-title-size, 16px);
|
|
158
|
+
font-weight: var(--st-feature-item-panel-title-weight, var(--st-font-weight-bold));
|
|
159
|
+
line-height: 1.35;
|
|
160
|
+
color: var(--st-feature-item-panel-title-color, var(--st-color-text-strong));
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
:host([variant='panel']) .description {
|
|
164
|
+
font-size: 14px;
|
|
165
|
+
color: var(--st-feature-item-panel-desc-color, var(--st-color-text-muted));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* Panels on the dark band: a lighter navy surface, a hairline border, light text (AA on navy-2). */
|
|
169
|
+
:host([variant='panel'][inverted]) .panel {
|
|
170
|
+
background: var(--st-cms-navy-2);
|
|
171
|
+
border-color: var(--st-cms-navy-2-border);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
:host([variant='panel'][inverted]) .title {
|
|
175
|
+
color: var(--st-cms-on-dark);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
:host([variant='panel'][inverted]) .description {
|
|
179
|
+
color: var(--st-cms-on-navy-muted);
|
|
180
|
+
}
|
|
181
|
+
|
|
133
182
|
@media (prefers-reduced-motion: reduce) {
|
|
134
183
|
.link {
|
|
135
184
|
transition: none;
|
|
@@ -154,6 +203,9 @@ __decorateClass([
|
|
|
154
203
|
__decorateClass([
|
|
155
204
|
property({ type: Boolean, reflect: true })
|
|
156
205
|
], FeatureItem.prototype, "inverted", 2);
|
|
206
|
+
__decorateClass([
|
|
207
|
+
property({ type: String, reflect: true })
|
|
208
|
+
], FeatureItem.prototype, "variant", 2);
|
|
157
209
|
FeatureItem = __decorateClass([
|
|
158
210
|
customElement("st-feature-item")
|
|
159
211
|
], FeatureItem);
|
|
@@ -162,11 +214,14 @@ FeatureItem = __decorateClass([
|
|
|
162
214
|
var FeaturesSection = class extends LitElement2 {
|
|
163
215
|
constructor() {
|
|
164
216
|
super(...arguments);
|
|
217
|
+
this.eyebrow = "";
|
|
165
218
|
this.title = "";
|
|
166
219
|
this.subtitle = "";
|
|
167
220
|
this.actionLabel = "Learn more";
|
|
168
221
|
this.columns = 0;
|
|
222
|
+
this.align = "start";
|
|
169
223
|
this.inverted = false;
|
|
224
|
+
this.variant = "default";
|
|
170
225
|
this.items = [];
|
|
171
226
|
}
|
|
172
227
|
render() {
|
|
@@ -174,19 +229,22 @@ var FeaturesSection = class extends LitElement2 {
|
|
|
174
229
|
return html2`
|
|
175
230
|
<section class="container" part="container">
|
|
176
231
|
<div class="header" part="header">
|
|
177
|
-
|
|
232
|
+
${this.eyebrow ? html2`<p class="eyebrow" part="eyebrow">${this.eyebrow}</p>` : nothing2}
|
|
233
|
+
${this.title ? html2`<h2 class="title" part="title">${this.title}</h2>` : nothing2}
|
|
178
234
|
${this.subtitle ? html2`<div class="subtitle" part="subtitle">${this.subtitle}</div>` : nothing2}
|
|
179
235
|
</div>
|
|
180
|
-
<div class="grid" part="grid" style=${gridStyle}>
|
|
236
|
+
<div class="grid ${this.align === "center" ? "center" : ""}" part="grid" style=${gridStyle}>
|
|
181
237
|
<slot></slot>
|
|
182
238
|
${this.items.map(
|
|
183
239
|
(item) => html2`
|
|
184
240
|
<st-feature-item
|
|
241
|
+
class=${item.span === "full" ? "full" : ""}
|
|
185
242
|
.icon=${item.icon ?? ""}
|
|
186
243
|
.title=${item.title}
|
|
187
244
|
.description=${item.description}
|
|
188
245
|
.href=${item.href ?? ""}
|
|
189
246
|
.actionLabel=${this.actionLabel}
|
|
247
|
+
.variant=${this.variant}
|
|
190
248
|
?inverted=${this.inverted}
|
|
191
249
|
></st-feature-item>
|
|
192
250
|
`
|
|
@@ -221,6 +279,10 @@ FeaturesSection.styles = css2`
|
|
|
221
279
|
${sectionHeaderStyles}
|
|
222
280
|
}
|
|
223
281
|
|
|
282
|
+
.eyebrow {
|
|
283
|
+
${sectionEyebrowStyles}
|
|
284
|
+
}
|
|
285
|
+
|
|
224
286
|
.title {
|
|
225
287
|
${sectionTitleStyles}
|
|
226
288
|
margin: 0;
|
|
@@ -231,6 +293,10 @@ FeaturesSection.styles = css2`
|
|
|
231
293
|
margin: 0 auto;
|
|
232
294
|
}
|
|
233
295
|
|
|
296
|
+
:host([inverted]) .eyebrow {
|
|
297
|
+
color: var(--st-cms-highlight);
|
|
298
|
+
}
|
|
299
|
+
|
|
234
300
|
:host([inverted]) .title,
|
|
235
301
|
:host([inverted]) .subtitle {
|
|
236
302
|
color: var(--st-color-on-solid);
|
|
@@ -242,6 +308,29 @@ FeaturesSection.styles = css2`
|
|
|
242
308
|
gap: var(--st-space-32);
|
|
243
309
|
}
|
|
244
310
|
|
|
311
|
+
/* align="center": a wrapping row, so an incomplete last row is centred. Each tile takes an equal
|
|
312
|
+
share of the width less the gaps. */
|
|
313
|
+
.grid.center {
|
|
314
|
+
display: flex;
|
|
315
|
+
flex-wrap: wrap;
|
|
316
|
+
justify-content: center;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.grid.center > st-feature-item,
|
|
320
|
+
.grid.center ::slotted(*) {
|
|
321
|
+
flex: 0 0 calc((100% - (var(--features-columns, 2) - 1) * var(--st-space-32)) / var(--features-columns, 2));
|
|
322
|
+
min-width: 0;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* span: "full" on an items tile: the whole row (a flex row when align="center"). */
|
|
326
|
+
.grid > st-feature-item.full {
|
|
327
|
+
grid-column: 1 / -1;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.grid.center > st-feature-item.full {
|
|
331
|
+
flex-basis: 100%;
|
|
332
|
+
}
|
|
333
|
+
|
|
245
334
|
@media (max-width: 768px) {
|
|
246
335
|
:host {
|
|
247
336
|
padding: var(--st-features-section-padding, var(--st-space-48) var(--st-space-16)) !important;
|
|
@@ -250,8 +339,16 @@ FeaturesSection.styles = css2`
|
|
|
250
339
|
.grid {
|
|
251
340
|
grid-template-columns: 1fr;
|
|
252
341
|
}
|
|
342
|
+
|
|
343
|
+
.grid.center > st-feature-item,
|
|
344
|
+
.grid.center ::slotted(*) {
|
|
345
|
+
flex-basis: 100%;
|
|
346
|
+
}
|
|
253
347
|
}
|
|
254
348
|
`;
|
|
349
|
+
__decorateClass([
|
|
350
|
+
property2({ type: String })
|
|
351
|
+
], FeaturesSection.prototype, "eyebrow", 2);
|
|
255
352
|
__decorateClass([
|
|
256
353
|
property2({ type: String })
|
|
257
354
|
], FeaturesSection.prototype, "title", 2);
|
|
@@ -264,9 +361,15 @@ __decorateClass([
|
|
|
264
361
|
__decorateClass([
|
|
265
362
|
property2({ type: Number })
|
|
266
363
|
], FeaturesSection.prototype, "columns", 2);
|
|
364
|
+
__decorateClass([
|
|
365
|
+
property2({ type: String, reflect: true })
|
|
366
|
+
], FeaturesSection.prototype, "align", 2);
|
|
267
367
|
__decorateClass([
|
|
268
368
|
property2({ type: Boolean, reflect: true })
|
|
269
369
|
], FeaturesSection.prototype, "inverted", 2);
|
|
370
|
+
__decorateClass([
|
|
371
|
+
property2({ type: String, reflect: true })
|
|
372
|
+
], FeaturesSection.prototype, "variant", 2);
|
|
270
373
|
__decorateClass([
|
|
271
374
|
property2({ attribute: false })
|
|
272
375
|
], FeaturesSection.prototype, "items", 2);
|
|
@@ -278,4 +381,4 @@ export {
|
|
|
278
381
|
FeatureItem,
|
|
279
382
|
FeaturesSection
|
|
280
383
|
};
|
|
281
|
-
//# sourceMappingURL=chunk-
|
|
384
|
+
//# sourceMappingURL=chunk-2HMOX253.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/features-section/FeaturesSection.ts","../src/features-section/FeatureItem.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { controlBaseStyles, fontFamilyStyles } from '../shared/styles';\nimport { sectionEyebrowStyles, sectionSubtitleStyles, sectionTitleStyles, sectionHeaderStyles } from '../shared/section-styles';\nimport './FeatureItem';\n\n/** Data for one tile when using the `items` property (mirrors `st-feature-item`'s properties). */\nexport interface FeatureItemData {\n /** Iconify name. Without it the tile has no icon tile. */\n icon?: string;\n title: string;\n description: string;\n href?: string;\n /** `full` makes the tile span every column of the grid (a wide call-out between rows). */\n span?: 'full';\n}\n\n/**\n * A titled grid of feature tiles. Tiles come from the `items` property, from slotted\n * `st-feature-item` elements, or both (slotted first). `columns` sets the grid width (default 2;\n * one column below 768px). `inverted` is passed on to the `items` tiles; slotted tiles need their\n * own `inverted` attribute.\n *\n * The header can carry an `eyebrow` (a small uppercase label above the title). The title is a\n * real `<h2>`; each tile's title is an `<h3>`. `align=\"center\"` centres the last, incomplete row:\n * five tiles in three columns lay out as 3 + 2 centred, instead of 3 + 2 left-aligned.\n *\n * `variant=\"panel\"` renders the `items` tiles as compact panels without icon tiles (see\n * `st-feature-item`). A tile from `items` with `span: \"full\"` spans every column. Slotted tiles\n * need their own `variant` attribute.\n *\n * @cssprop --st-features-section-padding - Overrides the section's padding.\n * @csspart header - The eyebrow, title and subtitle block.\n * @csspart eyebrow - The small uppercase label above the title.\n * @csspart title - The section heading (`<h2>`).\n * @csspart subtitle - The line under the title.\n * @csspart grid - The grid holding the tiles.\n */\n@customElement('st-features-section')\nexport class FeaturesSection extends LitElement {\n static styles = css`\n ${controlBaseStyles}\n\n :host {\n display: block;\n ${fontFamilyStyles}\n /* !important: a page-level reset (e.g. Tailwind Preflight) otherwise zeroes a shadow host's\n padding; override with --st-features-section-padding instead. */\n padding: var(--st-features-section-padding, var(--st-cms-section-padding) var(--st-space-24)) !important;\n background: var(--st-color-surface);\n }\n\n :host([inverted]) {\n background: var(--st-color-text-strong);\n }\n\n .container {\n max-width: var(--st-cms-container-max);\n margin: 0 auto;\n }\n\n .header {\n ${sectionHeaderStyles}\n }\n\n .eyebrow {\n ${sectionEyebrowStyles}\n }\n\n .title {\n ${sectionTitleStyles}\n margin: 0;\n }\n\n .subtitle {\n ${sectionSubtitleStyles}\n margin: 0 auto;\n }\n\n :host([inverted]) .eyebrow {\n color: var(--st-cms-highlight);\n }\n\n :host([inverted]) .title,\n :host([inverted]) .subtitle {\n color: var(--st-color-on-solid);\n }\n\n .grid {\n display: grid;\n grid-template-columns: repeat(var(--features-columns, 2), 1fr);\n gap: var(--st-space-32);\n }\n\n /* align=\"center\": a wrapping row, so an incomplete last row is centred. Each tile takes an equal\n share of the width less the gaps. */\n .grid.center {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n }\n\n .grid.center > st-feature-item,\n .grid.center ::slotted(*) {\n flex: 0 0 calc((100% - (var(--features-columns, 2) - 1) * var(--st-space-32)) / var(--features-columns, 2));\n min-width: 0;\n }\n\n /* span: \"full\" on an items tile: the whole row (a flex row when align=\"center\"). */\n .grid > st-feature-item.full {\n grid-column: 1 / -1;\n }\n\n .grid.center > st-feature-item.full {\n flex-basis: 100%;\n }\n\n @media (max-width: 768px) {\n :host {\n padding: var(--st-features-section-padding, var(--st-space-48) var(--st-space-16)) !important;\n }\n\n .grid {\n grid-template-columns: 1fr;\n }\n\n .grid.center > st-feature-item,\n .grid.center ::slotted(*) {\n flex-basis: 100%;\n }\n }\n `;\n\n /** Small uppercase label above the title (e.g. \"Why Sankhya\"). */\n @property({ type: String })\n eyebrow = '';\n\n @property({ type: String })\n title = '';\n\n @property({ type: String })\n subtitle = '';\n\n /** Applied to every tile built from `items`. */\n @property({ type: String, attribute: 'action-label' })\n actionLabel = 'Learn more';\n\n @property({ type: Number })\n columns = 0;\n\n /** `start` (default) lays tiles out in a grid. `center` centres the last, incomplete row. */\n @property({ type: String, reflect: true })\n align: 'start' | 'center' = 'start';\n\n @property({ type: Boolean, reflect: true })\n inverted = false;\n\n /** `default` is the icon tile grid; `panel` gives the `items` tiles compact panels without icon tiles. */\n @property({ type: String, reflect: true })\n variant: 'default' | 'panel' = 'default';\n\n /** Tiles to render (property only). */\n @property({ attribute: false })\n items: FeatureItemData[] = [];\n\n render() {\n const gridStyle = this.columns ? `--features-columns: ${this.columns}` : nothing;\n return html`\n <section class=\"container\" part=\"container\">\n <div class=\"header\" part=\"header\">\n ${this.eyebrow ? html`<p class=\"eyebrow\" part=\"eyebrow\">${this.eyebrow}</p>` : nothing}\n ${this.title ? html`<h2 class=\"title\" part=\"title\">${this.title}</h2>` : nothing}\n ${this.subtitle ? html`<div class=\"subtitle\" part=\"subtitle\">${this.subtitle}</div>` : nothing}\n </div>\n <div class=\"grid ${this.align === 'center' ? 'center' : ''}\" part=\"grid\" style=${gridStyle}>\n <slot></slot>\n ${this.items.map(\n (item) => html`\n <st-feature-item\n class=${item.span === 'full' ? 'full' : ''}\n .icon=${item.icon ?? ''}\n .title=${item.title}\n .description=${item.description}\n .href=${item.href ?? ''}\n .actionLabel=${this.actionLabel}\n .variant=${this.variant}\n ?inverted=${this.inverted}\n ></st-feature-item>\n `\n )}\n </div>\n </section>\n `;\n }\n}\n","import { LitElement, css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport 'iconify-icon';\n\nimport { controlBaseStyles, fontFamilyStyles } from '../shared/styles';\nimport { cardDescriptionStyles, cardTitleStyles } from '../shared/section-styles';\nimport '../card';\nimport '../markdown';\n\n/**\n * One feature tile for `st-features-section`: optional icon, title (`<h3>`), Markdown description\n * and an optional \"Learn more\" link, rendered on an `st-card`. `icon` is an Iconify name (e.g.\n * `mdi:rocket`). The link is a plain `<a href>`, so it works without JavaScript; the click is\n * composed, so an SPA router can intercept it (e.g. via `event.composedPath()`) and navigate\n * client-side. `http(s)` links open in a new tab.\n *\n * @csspart card - The `st-card` around the tile.\n * @csspart icon - The icon tile.\n * @csspart title - The tile heading (`<h3>`).\n * `variant=\"panel\"` drops the icon tile for a compact card (20px padding, 12px radius, 16px title).\n * Inverted panels sit on the lighter navy panel colour (`--st-cms-navy-2`) with a hairline border.\n *\n * @csspart card - The `st-card` around the tile (the panel `div` with `variant=\"panel\"`).\n * @csspart description - The Markdown description.\n * @csspart link - The \"Learn more\" link.\n * @cssprop --st-feature-item-panel-bg - Panel background (default `--st-color-surface`).\n * @cssprop --st-feature-item-panel-border - Panel border colour (default `--st-color-border`).\n * @cssprop --st-feature-item-panel-radius - Panel corner radius (default 12px).\n * @cssprop --st-feature-item-panel-padding - Panel padding (default 20px).\n * @cssprop --st-feature-item-panel-gap - Gap between panel title and description (default `--st-space-8`).\n * @cssprop --st-feature-item-panel-title-size - Panel title size (default 16px).\n * @cssprop --st-feature-item-panel-title-weight - Panel title weight (default bold).\n * @cssprop --st-feature-item-panel-title-color - Panel title colour (default `--st-color-text-strong`).\n * @cssprop --st-feature-item-panel-desc-color - Panel description colour (default `--st-color-text-muted`).\n */\n@customElement('st-feature-item')\nexport class FeatureItem extends LitElement {\n static styles = css`\n ${controlBaseStyles}\n\n :host {\n display: block;\n ${fontFamilyStyles}\n }\n\n st-card {\n height: 100%;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--st-space-16);\n height: 100%;\n }\n\n .icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: var(--st-radius-lg);\n background: var(--st-color-subtle);\n color: var(--st-color-text-strong);\n margin-bottom: var(--st-space-8);\n font-size: 24px;\n }\n\n :host([inverted]) .icon {\n background: var(--st-color-text-muted);\n color: var(--st-color-on-solid);\n }\n\n .title {\n ${cardTitleStyles}\n margin: 0;\n }\n\n .description {\n ${cardDescriptionStyles}\n margin: 0;\n }\n\n /* Inverted tiles sit on the dark band: explicit light text, 17:1 on the default navy, instead of\n whatever the card's colour happens to be. */\n :host([inverted]) .title,\n :host([inverted]) .description {\n color: var(--st-color-on-solid);\n }\n\n .link {\n display: flex;\n align-items: center;\n gap: var(--st-space-4);\n margin-top: auto;\n color: var(--st-color-text-muted);\n font-weight: var(--st-font-weight-medium);\n font-size: var(--st-text-md);\n text-decoration: none;\n transition: color 0.2s ease;\n }\n\n .link:hover {\n color: var(--st-color-text-strong);\n text-decoration: underline;\n }\n\n :host([inverted]) .link,\n :host([inverted]) .link:hover {\n color: inherit;\n }\n\n /* variant=\"panel\": a compact card without the icon tile. */\n .panel {\n box-sizing: border-box;\n height: 100%;\n padding: var(--st-feature-item-panel-padding, 20px);\n border: 1px solid var(--st-feature-item-panel-border, var(--st-color-border));\n border-radius: var(--st-feature-item-panel-radius, 12px);\n background: var(--st-feature-item-panel-bg, var(--st-color-surface));\n }\n\n :host([variant='panel']) .panel .content {\n gap: var(--st-feature-item-panel-gap, var(--st-space-8));\n }\n\n :host([variant='panel']) .title {\n font-size: var(--st-feature-item-panel-title-size, 16px);\n font-weight: var(--st-feature-item-panel-title-weight, var(--st-font-weight-bold));\n line-height: 1.35;\n color: var(--st-feature-item-panel-title-color, var(--st-color-text-strong));\n }\n\n :host([variant='panel']) .description {\n font-size: 14px;\n color: var(--st-feature-item-panel-desc-color, var(--st-color-text-muted));\n }\n\n /* Panels on the dark band: a lighter navy surface, a hairline border, light text (AA on navy-2). */\n :host([variant='panel'][inverted]) .panel {\n background: var(--st-cms-navy-2);\n border-color: var(--st-cms-navy-2-border);\n }\n\n :host([variant='panel'][inverted]) .title {\n color: var(--st-cms-on-dark);\n }\n\n :host([variant='panel'][inverted]) .description {\n color: var(--st-cms-on-navy-muted);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .link {\n transition: none;\n }\n }\n `;\n\n /** Iconify icon name, e.g. `mdi:rocket`. */\n @property({ type: String })\n icon = '';\n\n @property({ type: String })\n title = '';\n\n /** Markdown. */\n @property({ type: String })\n description = '';\n\n @property({ type: String })\n href = '';\n\n @property({ type: String, attribute: 'action-label' })\n actionLabel = 'Learn more';\n\n @property({ type: Boolean, reflect: true })\n inverted = false;\n\n /** `default` is the icon card; `panel` is the compact card without an icon tile. */\n @property({ type: String, reflect: true })\n variant: 'default' | 'panel' = 'default';\n\n private renderBody() {\n const external = this.href.startsWith('http');\n const panel = this.variant === 'panel';\n return html`\n <div class=\"content\" part=\"content\">\n ${this.icon && !panel\n ? html`<div class=\"icon\" part=\"icon\"><iconify-icon icon=${this.icon}></iconify-icon></div>`\n : nothing}\n <h3 class=\"title\" part=\"title\">${this.title}</h3>\n <st-markdown class=\"description\" part=\"description\" .content=${this.description}></st-markdown>\n ${this.href\n ? html`\n <a\n class=\"link\"\n part=\"link\"\n href=${this.href}\n target=${external ? '_blank' : '_self'}\n rel=${external ? 'noopener noreferrer' : nothing}\n >\n ${this.actionLabel} <span>→</span>\n </a>\n `\n : nothing}\n </div>\n `;\n }\n\n render() {\n if (this.variant === 'panel') {\n return html`<div class=\"panel\" part=\"card\">${this.renderBody()}</div>`;\n }\n return html`<st-card hoverable elevation=\"sm\" ?inverted=${this.inverted} part=\"card\">${this.renderBody()}</st-card>`;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,cAAAA,aAAY,OAAAC,MAAK,QAAAC,OAAM,WAAAC,gBAAe;AAC/C,SAAS,iBAAAC,gBAAe,YAAAC,iBAAgB;;;ACDxC,SAAS,YAAY,KAAK,MAAM,eAAe;AAC/C,SAAS,eAAe,gBAAgB;AACxC,OAAO;AAkCA,IAAM,cAAN,cAA0B,WAAW;AAAA,EAArC;AAAA;AA+HL,gBAAO;AAGP,iBAAQ;AAIR,uBAAc;AAGd,gBAAO;AAGP,uBAAc;AAGd,oBAAW;AAIX,mBAA+B;AAAA;AAAA,EAEvB,aAAa;AACnB,UAAM,WAAW,KAAK,KAAK,WAAW,MAAM;AAC5C,UAAM,QAAQ,KAAK,YAAY;AAC/B,WAAO;AAAA;AAAA,UAED,KAAK,QAAQ,CAAC,QACZ,wDAAwD,KAAK,IAAI,2BACjE,OAAO;AAAA,yCACsB,KAAK,KAAK;AAAA,uEACoB,KAAK,WAAW;AAAA,UAC7E,KAAK,OACH;AAAA;AAAA;AAAA;AAAA,uBAIW,KAAK,IAAI;AAAA,yBACP,WAAW,WAAW,OAAO;AAAA,sBAChC,WAAW,wBAAwB,OAAO;AAAA;AAAA,kBAE9C,KAAK,WAAW;AAAA;AAAA,gBAGtB,OAAO;AAAA;AAAA;AAAA,EAGjB;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,YAAY,SAAS;AAC5B,aAAO,sCAAsC,KAAK,WAAW,CAAC;AAAA,IAChE;AACA,WAAO,mDAAmD,KAAK,QAAQ,gBAAgB,KAAK,WAAW,CAAC;AAAA,EAC1G;AACF;AAtLa,YACJ,SAAS;AAAA,MACZ,iBAAiB;AAAA;AAAA;AAAA;AAAA,QAIf,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAkChB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,QAKf,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkF3B;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA9Hf,YA+HX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAjIf,YAkIX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GArIf,YAsIX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAxIf,YAyIX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe,CAAC;AAAA,GA3I1C,YA4IX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GA9I/B,YA+IX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAlJ9B,YAmJX;AAnJW,cAAN;AAAA,EADN,cAAc,iBAAiB;AAAA,GACnB;;;ADIN,IAAM,kBAAN,cAA8BC,YAAW;AAAA,EAAzC;AAAA;AAgGL,mBAAU;AAGV,iBAAQ;AAGR,oBAAW;AAIX,uBAAc;AAGd,mBAAU;AAIV,iBAA4B;AAG5B,oBAAW;AAIX,mBAA+B;AAI/B,iBAA2B,CAAC;AAAA;AAAA,EAE5B,SAAS;AACP,UAAM,YAAY,KAAK,UAAU,uBAAuB,KAAK,OAAO,KAAKC;AACzE,WAAOC;AAAA;AAAA;AAAA,YAGC,KAAK,UAAUA,0CAAyC,KAAK,OAAO,SAASD,QAAO;AAAA,YACpF,KAAK,QAAQC,uCAAsC,KAAK,KAAK,UAAUD,QAAO;AAAA,YAC9E,KAAK,WAAWC,8CAA6C,KAAK,QAAQ,WAAWD,QAAO;AAAA;AAAA,2BAE7E,KAAK,UAAU,WAAW,WAAW,EAAE,uBAAuB,SAAS;AAAA;AAAA,YAEtF,KAAK,MAAM;AAAA,MACX,CAAC,SAASC;AAAA;AAAA,wBAEE,KAAK,SAAS,SAAS,SAAS,EAAE;AAAA,wBAClC,KAAK,QAAQ,EAAE;AAAA,yBACd,KAAK,KAAK;AAAA,+BACJ,KAAK,WAAW;AAAA,wBACvB,KAAK,QAAQ,EAAE;AAAA,+BACR,KAAK,WAAW;AAAA,2BACpB,KAAK,OAAO;AAAA,4BACX,KAAK,QAAQ;AAAA;AAAA;AAAA,IAG/B,CAAC;AAAA;AAAA;AAAA;AAAA,EAIT;AACF;AA3Ja,gBACJ,SAASC;AAAA,MACZ,iBAAiB;AAAA;AAAA;AAAA;AAAA,QAIf,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAiBhB,mBAAmB;AAAA;AAAA;AAAA;AAAA,QAInB,oBAAoB;AAAA;AAAA;AAAA;AAAA,QAIpB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,QAKlB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4D3B;AAAA,EADCC,UAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA/Ff,gBAgGX;AAGA;AAAA,EADCA,UAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GAlGf,gBAmGX;AAGA;AAAA,EADCA,UAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GArGf,gBAsGX;AAIA;AAAA,EADCA,UAAS,EAAE,MAAM,QAAQ,WAAW,eAAe,CAAC;AAAA,GAzG1C,gBA0GX;AAGA;AAAA,EADCA,UAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA5Gf,gBA6GX;AAIA;AAAA,EADCA,UAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAhH9B,gBAiHX;AAGA;AAAA,EADCA,UAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAnH/B,gBAoHX;AAIA;AAAA,EADCA,UAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAvH9B,gBAwHX;AAIA;AAAA,EADCA,UAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GA3HnB,gBA4HX;AA5HW,kBAAN;AAAA,EADNC,eAAc,qBAAqB;AAAA,GACvB;","names":["LitElement","css","html","nothing","customElement","property","LitElement","nothing","html","css","property","customElement"]}
|
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
sectionHeaderStyles,
|
|
8
8
|
sectionSubtitleStyles,
|
|
9
9
|
sectionTitleStyles
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KZ7PMFWS.js";
|
|
11
11
|
import {
|
|
12
12
|
buttonResetStyles,
|
|
13
13
|
cardShellStyles,
|
|
14
14
|
controlBaseStyles,
|
|
15
15
|
rootFontFamilyStyles
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-NXUS2CH7.js";
|
|
17
17
|
import {
|
|
18
18
|
__decorateClass
|
|
19
19
|
} from "./chunk-EUXUH3YW.js";
|
|
@@ -31,6 +31,8 @@ var Testimonials = class extends LitElement {
|
|
|
31
31
|
this.inverted = false;
|
|
32
32
|
this.layout = "grid";
|
|
33
33
|
this.linkLabel = "See full story";
|
|
34
|
+
this.regionLabel = "";
|
|
35
|
+
this.roleDescription = "";
|
|
34
36
|
this.actionLabel = "";
|
|
35
37
|
this.actionHref = "";
|
|
36
38
|
this.atStart = true;
|
|
@@ -131,7 +133,15 @@ var Testimonials = class extends LitElement {
|
|
|
131
133
|
</button>
|
|
132
134
|
</div>` : nothing}
|
|
133
135
|
</div>
|
|
134
|
-
${carousel ? html`<div
|
|
136
|
+
${carousel ? html`<div
|
|
137
|
+
class="track"
|
|
138
|
+
part="track"
|
|
139
|
+
role="region"
|
|
140
|
+
aria-roledescription=${this.roleDescription || "carousel"}
|
|
141
|
+
aria-label=${this.regionLabel || this.title || "Stories"}
|
|
142
|
+
tabindex="0"
|
|
143
|
+
@scroll=${this.syncArrows}
|
|
144
|
+
>
|
|
135
145
|
${this.items.map((item) => this.renderItem(item))}
|
|
136
146
|
</div>` : html`<div class="grid" part="grid">${this.items.map((item) => this.renderItem(item))}</div>`}
|
|
137
147
|
${sectionLink ? html`<div class="section-footer">${this.renderLink(this.actionLabel, this.actionHref, carousel ? "footer-link" : "", "action")}</div>` : nothing}
|
|
@@ -322,6 +332,7 @@ Testimonials.styles = css`
|
|
|
322
332
|
}
|
|
323
333
|
|
|
324
334
|
.link {
|
|
335
|
+
position: relative;
|
|
325
336
|
display: inline-flex;
|
|
326
337
|
align-items: center;
|
|
327
338
|
gap: var(--st-space-8);
|
|
@@ -331,6 +342,17 @@ Testimonials.styles = css`
|
|
|
331
342
|
text-decoration: none;
|
|
332
343
|
}
|
|
333
344
|
|
|
345
|
+
/* Touch target: the link keeps its size; a 44px hit area (WCAG 2.5.5) sits over it. */
|
|
346
|
+
.link::after {
|
|
347
|
+
content: '';
|
|
348
|
+
position: absolute;
|
|
349
|
+
top: 50%;
|
|
350
|
+
left: 50%;
|
|
351
|
+
width: max(100%, 44px);
|
|
352
|
+
height: 44px;
|
|
353
|
+
transform: translate(-50%, -50%);
|
|
354
|
+
}
|
|
355
|
+
|
|
334
356
|
.author + .link {
|
|
335
357
|
margin-top: 0;
|
|
336
358
|
}
|
|
@@ -489,6 +511,12 @@ __decorateClass([
|
|
|
489
511
|
__decorateClass([
|
|
490
512
|
property({ type: String, attribute: "link-label" })
|
|
491
513
|
], Testimonials.prototype, "linkLabel", 2);
|
|
514
|
+
__decorateClass([
|
|
515
|
+
property({ type: String, attribute: "region-label" })
|
|
516
|
+
], Testimonials.prototype, "regionLabel", 2);
|
|
517
|
+
__decorateClass([
|
|
518
|
+
property({ type: String, attribute: "role-description" })
|
|
519
|
+
], Testimonials.prototype, "roleDescription", 2);
|
|
492
520
|
__decorateClass([
|
|
493
521
|
property({ type: String, attribute: "action-label" })
|
|
494
522
|
], Testimonials.prototype, "actionLabel", 2);
|
|
@@ -508,4 +536,4 @@ Testimonials = __decorateClass([
|
|
|
508
536
|
export {
|
|
509
537
|
Testimonials
|
|
510
538
|
};
|
|
511
|
-
//# sourceMappingURL=chunk-
|
|
539
|
+
//# sourceMappingURL=chunk-37KFBKPD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/testimonials/Testimonials.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport 'iconify-icon';\n\nimport { chevronIcon } from '../shared/icons';\nimport { buttonResetStyles, cardShellStyles, controlBaseStyles, rootFontFamilyStyles } from '../shared/styles';\nimport { sectionSubtitleStyles, sectionTitleStyles, invertedSectionTextStyles, sectionHeaderStyles, reducedMotionStyles } from '../shared/section-styles';\nimport type { TestimonialsLinkEventDetail } from './TestimonialsEvents';\n\nexport interface TestimonialMetric {\n /** The figure, e.g. `100M` or `85%`. */\n value: string;\n label: string;\n}\n\nexport interface TestimonialItem {\n id?: string;\n name?: string;\n role?: string;\n company?: string;\n /** Author photo. */\n imageSrc?: string;\n quote?: string;\n /** Number of stars. Default: 5 for a plain quote card; no stars on a story card (one with a `headline` or `logoSrc`). `0` hides them. */\n rating?: number;\n /** Customer logo, shown at the top of the card body. */\n logoSrc?: string;\n /** Wide image across the top of the card. */\n mediaSrc?: string;\n /** Story headline, e.g. \"Acme gives 100 million users a seamless sign-in\". */\n headline?: string;\n /** Key results, shown as large figures. */\n metrics?: TestimonialMetric[];\n /** Link to the full story. */\n href?: string;\n /** Text of the story link; defaults to the section's `link-label`. */\n linkLabel?: string;\n}\n\n/**\n * Section heading plus customer quotes or stories. Port of React `Testimonials`.\n *\n * Each card shows whatever its item has: a cover image, the customer logo, a story headline, a\n * quote with star rating, result metrics, the author and a \"See full story\" link. `layout=\"grid\"`\n * (default) lays the cards out in a grid; `layout=\"carousel\"` puts them on one horizontally\n * scrolling, snapping row with previous/next buttons next to the heading — the customer-story\n * carousel of enterprise marketing pages. `action-label`/`action-href` add a section-level link\n * (e.g. \"Explore customer stories\"). Any item set can use the carousel: `region-label` names it for\n * assistive technology (e.g. \"Services\") and `role-description` changes its `aria-roledescription`.\n *\n * @fires testimonials-link - Cancelable, before following a story or section link. Detail `{ href }`.\n * @cssprop --st-testimonials-padding - Overrides the section's padding.\n */\n@customElement('st-testimonials')\nexport class Testimonials extends LitElement {\n static styles = css`\n ${controlBaseStyles}\n\n :host {\n display: block;\n box-sizing: border-box;\n /* !important: a page-level reset (e.g. Tailwind Preflight) otherwise zeroes a shadow host's\n padding; override with --st-testimonials-padding instead. */\n padding: var(--st-testimonials-padding, var(--st-space-48) var(--st-space-24)) !important;\n background-color: var(--st-color-subtle);\n ${rootFontFamilyStyles}\n }\n\n :host([inverted]) {\n background-color: var(--st-color-text-strong);\n }\n\n .container {\n max-width: var(--st-cms-container-max);\n margin: 0 auto;\n }\n\n .header {\n ${sectionHeaderStyles}\n }\n\n .title {\n ${sectionTitleStyles}\n margin-bottom: var(--st-space-16);\n letter-spacing: -0.02em;\n }\n\n .subtitle {\n ${sectionSubtitleStyles}\n margin: 0 auto;\n }\n\n ${invertedSectionTextStyles}\n\n .grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));\n gap: var(--st-space-32);\n }\n\n .card {\n ${cardShellStyles}\n display: flex;\n flex-direction: column;\n margin: 0;\n overflow: hidden;\n box-shadow: 0 1px 3px var(--st-shadow-color-sm);\n }\n\n .media {\n aspect-ratio: 16 / 9;\n background: var(--st-color-divider);\n }\n\n .media img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.4s ease;\n }\n\n .card:hover .media img {\n transform: scale(1.03);\n }\n\n .body {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: var(--st-space-24);\n padding: var(--st-space-24);\n }\n\n .logo {\n display: block;\n height: 32px;\n width: auto;\n max-width: 60%;\n object-fit: contain;\n object-position: left center;\n }\n\n .headline {\n margin: 0;\n font-size: var(--st-text-xl);\n font-weight: var(--st-font-weight-semibold);\n line-height: 1.35;\n color: var(--st-color-text-strong);\n }\n\n .stars {\n display: flex;\n gap: var(--st-space-4);\n color: var(--st-favorite-accent);\n font-size: var(--st-size-20);\n }\n\n .quote {\n font-size: var(--st-text-md);\n line-height: 1.6;\n color: var(--st-color-text);\n font-style: italic;\n margin: 0;\n }\n\n .metrics {\n display: flex;\n flex-wrap: wrap;\n gap: var(--st-space-16) var(--st-space-32);\n margin: 0;\n padding-top: var(--st-space-16);\n border-top: 1px solid var(--st-color-border);\n }\n\n .metric {\n display: flex;\n flex-direction: column-reverse;\n min-width: 6rem;\n }\n\n .metric dt {\n font-size: var(--st-text-sm);\n color: var(--st-color-text-muted);\n line-height: 1.4;\n }\n\n .metric dd {\n margin: 0;\n font-size: var(--st-cms-text-4xl);\n font-weight: var(--st-font-weight-bold);\n letter-spacing: -0.02em;\n line-height: 1.1;\n color: var(--st-color-text-strong);\n }\n\n .author {\n display: flex;\n align-items: center;\n gap: var(--st-space-12);\n margin-top: auto;\n }\n\n .avatar {\n width: var(--st-space-48);\n height: var(--st-space-48);\n border-radius: var(--st-radius-circle);\n object-fit: cover;\n background-color: var(--st-color-divider);\n flex-shrink: 0;\n }\n\n .avatar-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--st-color-text-muted);\n font-weight: var(--st-font-weight-semibold);\n font-size: var(--st-text-xl);\n }\n\n .author-info {\n display: flex;\n flex-direction: column;\n }\n\n .name {\n font-weight: var(--st-font-weight-semibold);\n color: var(--st-color-text-strong);\n font-size: var(--st-text-xl);\n }\n\n .role {\n font-size: var(--st-text-sm);\n color: var(--st-color-text-faint);\n }\n\n .link {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: var(--st-space-8);\n margin-top: auto;\n font-weight: var(--st-font-weight-semibold);\n color: var(--st-color-text-strong);\n text-decoration: none;\n }\n\n /* Touch target: the link keeps its size; a 44px hit area (WCAG 2.5.5) sits over it. */\n .link::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: max(100%, 44px);\n height: 44px;\n transform: translate(-50%, -50%);\n }\n\n .author + .link {\n margin-top: 0;\n }\n\n .link:hover {\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n .link svg {\n transition: transform 0.2s ease;\n }\n\n .link:hover svg {\n transform: translateX(3px);\n }\n\n /* ---- layout=\"carousel\" ---- */\n\n :host([layout='carousel']) .header {\n display: flex;\n align-items: flex-end;\n justify-content: space-between;\n gap: var(--st-space-24);\n text-align: left;\n margin-bottom: var(--st-space-32);\n }\n\n :host([layout='carousel']) .subtitle {\n margin: 0;\n }\n\n .controls {\n display: flex;\n align-items: center;\n gap: var(--st-space-12);\n flex: none;\n }\n\n .section-link {\n margin-right: var(--st-space-12);\n }\n\n :host([inverted]) .section-link {\n color: var(--st-color-on-solid);\n }\n\n .arrow {\n ${buttonResetStyles}\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--st-size-40);\n height: var(--st-size-40);\n border-radius: var(--st-radius-circle);\n border: 1px solid var(--st-color-border-strong);\n color: var(--st-color-text-strong);\n background: var(--st-color-surface);\n transition:\n background 0.2s ease,\n opacity 0.2s ease;\n }\n\n .arrow:hover:not(:disabled) {\n background: var(--st-color-hover);\n }\n\n .arrow:disabled {\n opacity: 0.4;\n cursor: default;\n }\n\n .track {\n display: flex;\n gap: var(--st-space-24);\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n scroll-behavior: smooth;\n scrollbar-width: none;\n /* Room for the cards' shadow and focus rings. */\n padding: var(--st-space-4) var(--st-space-4) var(--st-space-12);\n margin: calc(-1 * var(--st-space-4));\n }\n\n .track::-webkit-scrollbar {\n display: none;\n }\n\n .track > .card {\n flex: 0 0 min(380px, 85%);\n scroll-snap-align: start;\n }\n\n /* The section link sits under the grid; in the carousel it is next to the arrows instead, and\n only drops below the row on a narrow screen. */\n .section-footer {\n margin-top: var(--st-space-32);\n text-align: center;\n }\n\n :host([inverted]) .section-footer .link {\n color: var(--st-color-on-solid);\n }\n\n :host([layout='carousel']) .section-footer {\n margin-top: 0;\n text-align: left;\n }\n\n .footer-link {\n display: none;\n }\n\n @media (max-width: 768px) {\n :host {\n padding: var(--st-testimonials-padding, var(--st-space-40) var(--st-space-20)) !important;\n }\n .grid {\n grid-template-columns: 1fr;\n }\n :host([layout='carousel']) .header {\n flex-direction: column;\n align-items: flex-start;\n }\n .section-link {\n display: none;\n }\n .footer-link {\n display: inline-flex;\n margin-top: var(--st-space-24);\n }\n }\n\n ${reducedMotionStyles}\n @media (prefers-reduced-motion: reduce) {\n .track {\n scroll-behavior: auto;\n }\n }\n `;\n\n @property({ type: String })\n title = '';\n\n @property({ type: String })\n subtitle = '';\n\n @property({ attribute: false })\n items: TestimonialItem[] = [];\n\n @property({ type: Boolean, reflect: true })\n inverted = false;\n\n /** `grid` (default) or `carousel`: one scrolling row with previous/next buttons. */\n @property({ type: String, reflect: true })\n layout: 'grid' | 'carousel' = 'grid';\n\n /** Default text of each card's story link. */\n @property({ type: String, attribute: 'link-label' })\n linkLabel = 'See full story';\n\n /**\n * Accessible name of the carousel's scrolling region. Default: the `title`, or \"Stories\". Set it to\n * what the items are (e.g. \"Services\" for a row of service cards).\n */\n @property({ type: String, attribute: 'region-label' })\n regionLabel = '';\n\n /** `aria-roledescription` of the carousel's scrolling region. Default: \"carousel\". */\n @property({ type: String, attribute: 'role-description' })\n roleDescription = '';\n\n /** Section-level link text, e.g. \"Explore customer stories\". */\n @property({ type: String, attribute: 'action-label' })\n actionLabel = '';\n\n @property({ type: String, attribute: 'action-href' })\n actionHref = '';\n\n @state() private atStart = true;\n @state() private atEnd = false;\n\n private get track(): HTMLElement | null {\n return this.renderRoot.querySelector('.track');\n }\n\n private resizeObserver?: ResizeObserver;\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has('layout') || changed.has('items')) {\n this.resizeObserver?.disconnect();\n const track = this.track;\n if (track) {\n this.resizeObserver = new ResizeObserver(this.syncArrows);\n this.resizeObserver.observe(track);\n }\n this.syncArrows();\n }\n }\n\n disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n super.disconnectedCallback();\n }\n\n private syncArrows = (): void => {\n const track = this.track;\n if (!track) return;\n this.atStart = track.scrollLeft <= 1;\n this.atEnd = track.scrollLeft + track.clientWidth >= track.scrollWidth - 1;\n };\n\n private scrollByCard(direction: 1 | -1): void {\n const track = this.track;\n const card = track?.querySelector<HTMLElement>('.card');\n if (!track || !card) return;\n const gap = parseFloat(getComputedStyle(track).columnGap) || 0;\n track.scrollBy({ left: direction * (card.offsetWidth + gap) });\n }\n\n private onLinkClick(event: MouseEvent, href: string): void {\n const link = new CustomEvent<TestimonialsLinkEventDetail>('testimonials-link', {\n detail: { href },\n bubbles: true,\n composed: true,\n cancelable: true\n });\n this.dispatchEvent(link);\n if (link.defaultPrevented) event.preventDefault();\n }\n\n private renderLink(label: string, href: string, className: string, part: string) {\n return html`<a class=\"link ${className}\" part=${part} href=${href} @click=${(event: MouseEvent) => this.onLinkClick(event, href)}>\n ${label} ${chevronIcon('right', 14)}\n </a>`;\n }\n\n private renderItem(item: TestimonialItem) {\n const story = !!(item.headline || item.logoSrc);\n const rating = item.rating ?? (item.quote && !story ? 5 : 0);\n const metrics = item.metrics ?? [];\n return html`\n <article class=\"card\" part=\"card\">\n ${item.mediaSrc ? html`<div class=\"media\" part=\"media\"><img src=${item.mediaSrc} alt=\"\" loading=\"lazy\" /></div>` : nothing}\n <div class=\"body\" part=\"body\">\n ${item.logoSrc ? html`<img class=\"logo\" part=\"logo\" src=${item.logoSrc} alt=${item.company || item.name || ''} />` : nothing}\n ${item.headline ? html`<h3 class=\"headline\" part=\"headline\">${item.headline}</h3>` : nothing}\n ${rating > 0\n ? html`<div class=\"stars\" part=\"stars\" role=\"img\" aria-label=\"${rating} / 5\">\n ${Array.from({ length: rating }, () => html`<iconify-icon icon=\"mdi:star\"></iconify-icon>`)}\n </div>`\n : nothing}\n ${item.quote ? html`<blockquote class=\"quote\" part=\"quote\">\"${item.quote}\"</blockquote>` : nothing}\n ${metrics.length\n ? html`<dl class=\"metrics\" part=\"metrics\">\n ${metrics.map(metric => html`<div class=\"metric\"><dt>${metric.label}</dt><dd>${metric.value}</dd></div>`)}\n </dl>`\n : nothing}\n ${item.name\n ? html`<div class=\"author\" part=\"author\">\n ${item.imageSrc\n ? html`<img class=\"avatar\" part=\"avatar\" src=${item.imageSrc} alt=${item.name} />`\n : html`<div class=\"avatar avatar-placeholder\" part=\"avatar\">${item.name.charAt(0)}</div>`}\n <span class=\"author-info\">\n <span class=\"name\" part=\"name\">${item.name}</span>\n ${item.role || item.company\n ? html`<span class=\"role\" part=\"role\">${[item.role, item.company].filter(Boolean).join(' at ')}</span>`\n : nothing}\n </span>\n </div>`\n : nothing}\n ${item.href ? this.renderLink(item.linkLabel || this.linkLabel, item.href, '', 'link') : nothing}\n </div>\n </article>\n `;\n }\n\n render() {\n const carousel = this.layout === 'carousel';\n const sectionLink = this.actionLabel && this.actionHref;\n return html`\n <div class=\"container\" part=\"container\">\n <div class=\"header\" part=\"header\">\n <div>\n <h2 class=\"title\" part=\"title\">${this.title}</h2>\n ${this.subtitle ? html`<p class=\"subtitle\" part=\"subtitle\">${this.subtitle}</p>` : nothing}\n </div>\n ${carousel\n ? html`<div class=\"controls\" part=\"controls\">\n ${sectionLink ? this.renderLink(this.actionLabel, this.actionHref, 'section-link', 'action') : nothing}\n <button class=\"arrow\" part=\"arrow prev\" type=\"button\" aria-label=\"Previous\" ?disabled=${this.atStart} @click=${() => this.scrollByCard(-1)}>\n ${chevronIcon('left', 16)}\n </button>\n <button class=\"arrow\" part=\"arrow next\" type=\"button\" aria-label=\"Next\" ?disabled=${this.atEnd} @click=${() => this.scrollByCard(1)}>\n ${chevronIcon('right', 16)}\n </button>\n </div>`\n : nothing}\n </div>\n ${carousel\n ? html`<div\n class=\"track\"\n part=\"track\"\n role=\"region\"\n aria-roledescription=${this.roleDescription || 'carousel'}\n aria-label=${this.regionLabel || this.title || 'Stories'}\n tabindex=\"0\"\n @scroll=${this.syncArrows}\n >\n ${this.items.map(item => this.renderItem(item))}\n </div>`\n : html`<div class=\"grid\" part=\"grid\">${this.items.map(item => this.renderItem(item))}</div>`}\n ${sectionLink\n ? html`<div class=\"section-footer\">${this.renderLink(this.actionLabel, this.actionHref, carousel ? 'footer-link' : '', 'action')}</div>`\n : nothing}\n </div>\n `;\n }\n}\n"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QA8Mf,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqFnB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASvB;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA1Vf,aA2VX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,GA7Vf,aA8VX;AAGA;AAAA,EADC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAhWnB,aAiWX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GAnW/B,aAoWX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAAA,GAvW9B,aAwWX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,aAAa,CAAC;AAAA,GA3WxC,aA4WX;AAOA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe,CAAC;AAAA,GAlX1C,aAmXX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,mBAAmB,CAAC;AAAA,GAtX9C,aAuXX;AAIA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,eAAe,CAAC;AAAA,GA1X1C,aA2XX;AAGA;AAAA,EADC,SAAS,EAAE,MAAM,QAAQ,WAAW,cAAc,CAAC;AAAA,GA7XzC,aA8XX;AAEiB;AAAA,EAAhB,MAAM;AAAA,GAhYI,aAgYM;AACA;AAAA,EAAhB,MAAM;AAAA,GAjYI,aAiYM;AAjYN,eAAN;AAAA,EADN,cAAc,iBAAiB;AAAA,GACnB;","names":[]}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
renderMarkdown
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TJK55CJ2.js";
|
|
4
4
|
import {
|
|
5
5
|
reducedMotionStyles,
|
|
6
6
|
sectionHeaderStyles,
|
|
7
7
|
sectionSubtitleStyles,
|
|
8
8
|
sectionTitleStyles
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-KZ7PMFWS.js";
|
|
10
10
|
import {
|
|
11
11
|
buttonResetStyles,
|
|
12
12
|
controlBaseStyles,
|
|
13
13
|
fontFamilyStyles
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-NXUS2CH7.js";
|
|
15
15
|
import {
|
|
16
16
|
__decorateClass
|
|
17
17
|
} from "./chunk-EUXUH3YW.js";
|
|
@@ -62,17 +62,19 @@ var ItemsAccordion = class extends LitElement {
|
|
|
62
62
|
const open = this.openIds.has(item.id);
|
|
63
63
|
return html`
|
|
64
64
|
<div class="item ${open ? "open" : ""}" part="item">
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
<h3 class="heading" part="heading">
|
|
66
|
+
<button
|
|
67
|
+
class="trigger"
|
|
68
|
+
part="trigger"
|
|
69
|
+
type="button"
|
|
70
|
+
aria-expanded=${open ? "true" : "false"}
|
|
71
|
+
aria-controls="content-${item.id}"
|
|
72
|
+
@click=${() => this.toggle(item.id)}
|
|
73
|
+
>
|
|
74
|
+
<span>${item.title}</span>
|
|
75
|
+
<iconify-icon class="chevron" icon="mdi:chevron-down" aria-hidden="true"></iconify-icon>
|
|
76
|
+
</button>
|
|
77
|
+
</h3>
|
|
76
78
|
<div class="content" id="content-${item.id}" part="content" role="region" ?inert=${!open}>
|
|
77
79
|
<div class="content-clip">
|
|
78
80
|
<div class="content-inner">${unsafeHTML(renderMarkdown(item.content))}</div>
|
|
@@ -140,6 +142,12 @@ ItemsAccordion.styles = css`
|
|
|
140
142
|
box-shadow: 0 4px 6px -1px var(--st-shadow-color-sm);
|
|
141
143
|
}
|
|
142
144
|
|
|
145
|
+
/* Each row title is an <h3> wrapping its trigger button (the WAI-ARIA accordion pattern). */
|
|
146
|
+
.heading {
|
|
147
|
+
margin: 0;
|
|
148
|
+
font: inherit;
|
|
149
|
+
}
|
|
150
|
+
|
|
143
151
|
.trigger {
|
|
144
152
|
${buttonResetStyles}
|
|
145
153
|
width: 100%;
|
|
@@ -245,4 +253,4 @@ ItemsAccordion = __decorateClass([
|
|
|
245
253
|
export {
|
|
246
254
|
ItemsAccordion
|
|
247
255
|
};
|
|
248
|
-
//# sourceMappingURL=chunk-
|
|
256
|
+
//# sourceMappingURL=chunk-4XPKKYVZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/items-accordion/ItemsAccordion.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport 'iconify-icon';\n\nimport { buttonResetStyles, controlBaseStyles, fontFamilyStyles } from '../shared/styles';\nimport { renderMarkdown } from '../shared/markdown';\nimport {\n reducedMotionStyles,\n sectionHeaderStyles,\n sectionSubtitleStyles,\n sectionTitleStyles,\n} from '../shared/section-styles';\nimport type { AccordionToggleEventDetail } from './ItemsAccordionEvents';\n\nexport interface AccordionItem {\n id: string;\n title: string;\n /** Markdown (plain text works too). */\n content: string;\n}\n\n/**\n * A vertical list of collapsible title/content rows; one open at a time unless `allow-multiple`.\n * Each row's `content` is Markdown, sanitized. `open-first` starts with the first row open. The\n * section title is an `<h2>` and each row title an `<h3>` wrapping its toggle button, which\n * exposes `aria-expanded` and `aria-controls` for the row's panel.\n *\n * @cssprop --st-items-accordion-padding - Overrides the block's padding.\n * @csspart trigger - The button that opens and closes a row.\n * @csspart heading - The `<h3>` wrapping each trigger.\n */\n@customElement('st-items-accordion')\nexport class ItemsAccordion extends LitElement {\n static styles = css`\n ${controlBaseStyles}\n\n :host {\n display: block;\n /* !important: a page-level reset (e.g. Tailwind Preflight) otherwise zeroes a shadow host's\n padding; override with --st-items-accordion-padding instead. */\n padding: var(--st-items-accordion-padding, var(--st-cms-section-padding) var(--st-space-24)) !important;\n background: var(--st-color-page);\n ${fontFamilyStyles}\n }\n\n .container {\n max-width: 800px;\n margin: 0 auto;\n }\n\n .header {\n ${sectionHeaderStyles}\n }\n\n .title {\n ${sectionTitleStyles}\n font-size: var(--st-text-2xl);\n margin-bottom: var(--st-space-12);\n }\n\n .subtitle {\n ${sectionSubtitleStyles}\n font-size: var(--st-text-base);\n margin: 0;\n }\n\n .list {\n display: flex;\n flex-direction: column;\n gap: var(--st-space-16);\n }\n\n .item {\n border: 1px solid var(--st-color-border);\n border-radius: var(--st-radius-lg);\n background: var(--st-color-surface);\n overflow: hidden;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease;\n }\n\n .item.open {\n border-color: var(--st-color-border-strong);\n box-shadow: 0 4px 6px -1px var(--st-shadow-color-sm);\n }\n\n /* Each row title is an <h3> wrapping its trigger button (the WAI-ARIA accordion pattern). */\n .heading {\n margin: 0;\n font: inherit;\n }\n\n .trigger {\n ${buttonResetStyles}\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: var(--st-space-24);\n text-align: left;\n font-size: var(--st-text-lg);\n font-weight: var(--st-font-weight-semibold);\n color: var(--st-color-text-strong);\n }\n\n .trigger:hover {\n background: var(--st-color-hover);\n }\n\n .chevron {\n flex-shrink: 0;\n margin-left: var(--st-space-16);\n font-size: 24px;\n color: var(--st-color-text-faint);\n transition: transform 0.3s ease;\n }\n\n .open .chevron {\n transform: rotate(180deg);\n }\n\n .content {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 0.3s ease;\n }\n\n .open .content {\n grid-template-rows: 1fr;\n }\n\n .content-clip {\n overflow: hidden;\n min-height: 0;\n }\n\n .content-inner {\n padding: 0 var(--st-space-24) var(--st-space-24);\n color: var(--st-color-text);\n line-height: 1.6;\n }\n\n .content-inner > :first-child {\n margin-top: 0;\n }\n\n .content-inner > :last-child {\n margin-bottom: 0;\n }\n\n .content-inner p {\n margin: 0 0 var(--st-space-12);\n }\n\n .content-inner a {\n color: inherit;\n text-decoration: underline;\n text-underline-offset: 3px;\n }\n\n @media (max-width: 768px) {\n :host {\n padding: var(--st-items-accordion-padding, var(--st-space-48) var(--st-space-20)) !important;\n }\n\n .title {\n font-size: var(--st-text-xl);\n }\n }\n\n ${reducedMotionStyles}\n `;\n\n @property({ type: String })\n title = '';\n\n @property({ type: String })\n subtitle = '';\n\n @property({ attribute: false })\n items: AccordionItem[] = [];\n\n @property({ type: Boolean, attribute: 'allow-multiple' })\n allowMultiple = false;\n\n /** Starts with the first row open. Applies when `items` or this flag changes while nothing is open. */\n @property({ type: Boolean, attribute: 'open-first' })\n openFirst = false;\n\n @state() private openIds = new Set<string>();\n\n protected willUpdate(changed: Map<string, unknown>): void {\n if (this.openFirst && (changed.has('items') || changed.has('openFirst')) && this.openIds.size === 0 && this.items.length) {\n this.openIds = new Set([this.items[0].id]);\n }\n }\n\n private toggle(id: string) {\n const wasOpen = this.openIds.has(id);\n const next = new Set(this.allowMultiple ? this.openIds : []);\n if (wasOpen) next.delete(id);\n else next.add(id);\n this.openIds = next;\n this.dispatchEvent(\n new CustomEvent<AccordionToggleEventDetail>('accordion-toggle', {\n detail: { id, open: !wasOpen },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render() {\n return html`\n <div class=\"container\" part=\"container\">\n ${this.title || this.subtitle\n ? html`<div class=\"header\" part=\"header\">\n ${this.title ? html`<h2 class=\"title\" part=\"title\">${this.title}</h2>` : nothing}\n ${this.subtitle ? html`<p class=\"subtitle\" part=\"subtitle\">${this.subtitle}</p>` : nothing}\n </div>`\n : nothing}\n <div class=\"list\" part=\"list\">\n ${this.items.map((item) => {\n const open = this.openIds.has(item.id);\n return html`\n <div class=\"item ${open ? 'open' : ''}\" part=\"item\">\n <h3 class=\"heading\" part=\"heading\">\n <button\n class=\"trigger\"\n part=\"trigger\"\n type=\"button\"\n aria-expanded=${open ? 'true' : 'false'}\n aria-controls=\"content-${item.id}\"\n @click=${() => this.toggle(item.id)}\n >\n <span>${item.title}</span>\n <iconify-icon class=\"chevron\" icon=\"mdi:chevron-down\" aria-hidden=\"true\"></iconify-icon>\n </button>\n </h3>\n <div class=\"content\" id=\"content-${item.id}\" part=\"content\" role=\"region\" ?inert=${!open}>\n <div class=\"content-clip\">\n <div class=\"content-inner\">${unsafeHTML(renderMarkdown(item.content))}</div>\n </div>\n </div>\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n}\n"],"mappings":"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","names":[]}
|