@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.
Files changed (209) hide show
  1. package/custom-elements.json +10968 -3080
  2. package/dist/attention-panel/index.js +2 -2
  3. package/dist/bar-chart/index.js +2 -2
  4. package/dist/bento-grid/index.d.ts +25 -0
  5. package/dist/bento-grid/index.js +4 -4
  6. package/dist/booking/index.d.ts +309 -0
  7. package/dist/booking/index.js +20 -0
  8. package/dist/booking/index.js.map +1 -0
  9. package/dist/card/index.js +2 -2
  10. package/dist/carousel/index.d.ts +20 -6
  11. package/dist/carousel/index.js +3 -3
  12. package/dist/chip/index.js +2 -2
  13. package/dist/{chunk-OLA35A2O.js → chunk-2GTR37PU.js} +2 -2
  14. package/dist/{chunk-7NIWQWTA.js → chunk-2HMOX253.js} +128 -25
  15. package/dist/chunk-2HMOX253.js.map +1 -0
  16. package/dist/{chunk-DH53HZPB.js → chunk-37KFBKPD.js} +32 -4
  17. package/dist/chunk-37KFBKPD.js.map +1 -0
  18. package/dist/{chunk-EE6PAN3B.js → chunk-4XPKKYVZ.js} +23 -15
  19. package/dist/chunk-4XPKKYVZ.js.map +1 -0
  20. package/dist/chunk-535QAZ6A.js +236 -0
  21. package/dist/chunk-535QAZ6A.js.map +1 -0
  22. package/dist/{chunk-AKJQ345O.js → chunk-5AWGZQWU.js} +2 -2
  23. package/dist/chunk-6OZKZG5J.js +300 -0
  24. package/dist/chunk-6OZKZG5J.js.map +1 -0
  25. package/dist/chunk-AYNT7G3J.js +805 -0
  26. package/dist/chunk-AYNT7G3J.js.map +1 -0
  27. package/dist/chunk-BEWX3E6P.js +32 -0
  28. package/dist/chunk-BEWX3E6P.js.map +1 -0
  29. package/dist/chunk-CZUGPKXV.js +275 -0
  30. package/dist/chunk-CZUGPKXV.js.map +1 -0
  31. package/dist/{chunk-2DXHPEB5.js → chunk-DJFWZOZM.js} +107 -11
  32. package/dist/chunk-DJFWZOZM.js.map +1 -0
  33. package/dist/chunk-DPANTC3O.js +1714 -0
  34. package/dist/chunk-DPANTC3O.js.map +1 -0
  35. package/dist/chunk-EKZFFY45.js +426 -0
  36. package/dist/chunk-EKZFFY45.js.map +1 -0
  37. package/dist/chunk-ER7MCPDV.js +7 -0
  38. package/dist/chunk-ER7MCPDV.js.map +1 -0
  39. package/dist/chunk-EW2RK5Y6.js +383 -0
  40. package/dist/chunk-EW2RK5Y6.js.map +1 -0
  41. package/dist/{chunk-BLQV2YMO.js → chunk-EZOKT7NJ.js} +2 -2
  42. package/dist/chunk-FF2LWEF3.js +386 -0
  43. package/dist/chunk-FF2LWEF3.js.map +1 -0
  44. package/dist/chunk-FOUK3NHR.js +7 -0
  45. package/dist/chunk-FOUK3NHR.js.map +1 -0
  46. package/dist/{chunk-O4FCRKDX.js → chunk-GB4NGCZI.js} +6 -3
  47. package/dist/chunk-GB4NGCZI.js.map +1 -0
  48. package/dist/{chunk-5F5PTVWR.js → chunk-GOFSMD6W.js} +9 -10
  49. package/dist/chunk-GOFSMD6W.js.map +1 -0
  50. package/dist/{chunk-6D6ROU7X.js → chunk-IGMVF3KK.js} +2 -2
  51. package/dist/{chunk-INMSEYT6.js → chunk-IVPVYVWG.js} +2 -2
  52. package/dist/{chunk-ZRC5BVDX.js → chunk-JURCF4OD.js} +174 -12
  53. package/dist/chunk-JURCF4OD.js.map +1 -0
  54. package/dist/{chunk-FZ36KL73.js → chunk-KZ7PMFWS.js} +11 -1
  55. package/dist/chunk-KZ7PMFWS.js.map +1 -0
  56. package/dist/{chunk-EMCQBT3S.js → chunk-LO6TZBGD.js} +129 -35
  57. package/dist/chunk-LO6TZBGD.js.map +1 -0
  58. package/dist/chunk-MFRGAT6D.js +860 -0
  59. package/dist/chunk-MFRGAT6D.js.map +1 -0
  60. package/dist/chunk-MIBVQXRU.js +1098 -0
  61. package/dist/chunk-MIBVQXRU.js.map +1 -0
  62. package/dist/{chunk-35TX3AOA.js → chunk-NABSRUXG.js} +2 -2
  63. package/dist/{chunk-2FJDNJ7R.js → chunk-NXKDZWS7.js} +44 -6
  64. package/dist/chunk-NXKDZWS7.js.map +1 -0
  65. package/dist/{chunk-KMU6ABQF.js → chunk-NXUS2CH7.js} +14 -1
  66. package/dist/chunk-NXUS2CH7.js.map +1 -0
  67. package/dist/{chunk-GJO3RGOB.js → chunk-OCPGOLVF.js} +56 -11
  68. package/dist/chunk-OCPGOLVF.js.map +1 -0
  69. package/dist/chunk-OEOE6IFY.js +628 -0
  70. package/dist/chunk-OEOE6IFY.js.map +1 -0
  71. package/dist/{chunk-OELI3IWC.js → chunk-PV6OCXXN.js} +2 -2
  72. package/dist/{chunk-5C6C6K5U.js → chunk-Q66CJO3P.js} +200 -12
  73. package/dist/chunk-Q66CJO3P.js.map +1 -0
  74. package/dist/{chunk-MG2VTZA4.js → chunk-QS3ANOWN.js} +2 -2
  75. package/dist/{chunk-3OEEOBHB.js → chunk-QSJ543V2.js} +2 -2
  76. package/dist/{chunk-FML6AG2V.js → chunk-RANC3OI6.js} +2 -2
  77. package/dist/chunk-T4BIN37Q.js +32 -0
  78. package/dist/chunk-T4BIN37Q.js.map +1 -0
  79. package/dist/{chunk-YVTFQHVY.js → chunk-TEAZZPDQ.js} +2 -2
  80. package/dist/chunk-TJK55CJ2.js +49 -0
  81. package/dist/chunk-TJK55CJ2.js.map +1 -0
  82. package/dist/chunk-UKIVLF7S.js +32 -0
  83. package/dist/chunk-UKIVLF7S.js.map +1 -0
  84. package/dist/chunk-V4R7PYP5.js +905 -0
  85. package/dist/chunk-V4R7PYP5.js.map +1 -0
  86. package/dist/{chunk-AG2COC64.js → chunk-VVYQ2DDS.js} +2 -2
  87. package/dist/chunk-WAMOAAMN.js +16 -0
  88. package/dist/chunk-WAMOAAMN.js.map +1 -0
  89. package/dist/chunk-WAYHHL4J.js +1234 -0
  90. package/dist/chunk-WAYHHL4J.js.map +1 -0
  91. package/dist/{chunk-PHEGSCOM.js → chunk-WH6HE6SY.js} +10 -4
  92. package/dist/chunk-WH6HE6SY.js.map +1 -0
  93. package/dist/{chunk-5MY6OWMK.js → chunk-XP6DI3VY.js} +59 -4
  94. package/dist/chunk-XP6DI3VY.js.map +1 -0
  95. package/dist/{chunk-QLA4BH2B.js → chunk-XS6LNTSH.js} +73 -11
  96. package/dist/chunk-XS6LNTSH.js.map +1 -0
  97. package/dist/{chunk-WT4OATGP.js → chunk-ZKFCDVB4.js} +16 -7
  98. package/dist/chunk-ZKFCDVB4.js.map +1 -0
  99. package/dist/cms-theme.css +22 -0
  100. package/dist/contact-form/index.d.ts +220 -0
  101. package/dist/contact-form/index.js +16 -0
  102. package/dist/contact-form/index.js.map +1 -0
  103. package/dist/content-block/index.d.ts +39 -3
  104. package/dist/content-block/index.js +8 -5
  105. package/dist/cookie-consent/index.d.ts +60 -12
  106. package/dist/cookie-consent/index.js +3 -2
  107. package/dist/date-tile/index.js +2 -2
  108. package/dist/dropdown/index.d.ts +22 -1
  109. package/dist/dropdown/index.js +4 -2
  110. package/dist/feature-split/index.d.ts +6 -1
  111. package/dist/feature-split/index.js +5 -5
  112. package/dist/features-section/index.d.ts +49 -5
  113. package/dist/features-section/index.js +6 -6
  114. package/dist/flow/index.js +2 -2
  115. package/dist/footer/index.d.ts +13 -0
  116. package/dist/footer/index.js +2 -2
  117. package/dist/header/index.d.ts +127 -1
  118. package/dist/header/index.js +3 -2
  119. package/dist/hero/index.d.ts +75 -6
  120. package/dist/hero/index.js +6 -3
  121. package/dist/icon-button/index.d.ts +5 -3
  122. package/dist/icon-button/index.js +2 -2
  123. package/dist/index.d.ts +9 -3
  124. package/dist/index.js +118 -57
  125. package/dist/items-accordion/index.d.ts +5 -1
  126. package/dist/items-accordion/index.js +4 -4
  127. package/dist/kpi-card/index.js +2 -2
  128. package/dist/markdown/index.d.ts +18 -0
  129. package/dist/markdown/index.js +3 -3
  130. package/dist/mega-menu/index.d.ts +95 -7
  131. package/dist/mega-menu/index.js +7 -2
  132. package/dist/menu-grid/index.js +2 -2
  133. package/dist/menu-grid-item/index.js +2 -2
  134. package/dist/menu-item/index.d.ts +6 -0
  135. package/dist/menu-item/index.js +3 -2
  136. package/dist/plan-cards/index.d.ts +69 -0
  137. package/dist/plan-cards/index.js +13 -0
  138. package/dist/plan-cards/index.js.map +1 -0
  139. package/dist/product-nav/index.d.ts +127 -0
  140. package/dist/product-nav/index.js +11 -0
  141. package/dist/product-nav/index.js.map +1 -0
  142. package/dist/promo-banner/index.d.ts +34 -7
  143. package/dist/promo-banner/index.js +6 -3
  144. package/dist/quote-dialog/index.d.ts +174 -0
  145. package/dist/quote-dialog/index.js +22 -0
  146. package/dist/quote-dialog/index.js.map +1 -0
  147. package/dist/schema/index.d.ts +8 -0
  148. package/dist/schema/index.js +6 -0
  149. package/dist/schema/index.js.map +1 -1
  150. package/dist/screenshot-tour/index.d.ts +54 -0
  151. package/dist/screenshot-tour/index.js +9 -0
  152. package/dist/screenshot-tour/index.js.map +1 -0
  153. package/dist/section/index.js +3 -3
  154. package/dist/segmented-control/index.js +2 -2
  155. package/dist/select/index.js +2 -2
  156. package/dist/shared/styles.d.ts +7 -1
  157. package/dist/shared/styles.js +3 -1
  158. package/dist/stats/index.js +2 -2
  159. package/dist/steps/index.d.ts +12 -0
  160. package/dist/steps/index.js +4 -3
  161. package/dist/tag-strip/index.d.ts +7 -0
  162. package/dist/tag-strip/index.js +2 -2
  163. package/dist/testimonials/index.d.ts +9 -1
  164. package/dist/testimonials/index.js +3 -3
  165. package/dist/tooltip/index.js +2 -2
  166. package/package.json +26 -2
  167. package/dist/chunk-2DXHPEB5.js.map +0 -1
  168. package/dist/chunk-2FJDNJ7R.js.map +0 -1
  169. package/dist/chunk-4AFOKKSU.js +0 -158
  170. package/dist/chunk-4AFOKKSU.js.map +0 -1
  171. package/dist/chunk-5C6C6K5U.js.map +0 -1
  172. package/dist/chunk-5F5PTVWR.js.map +0 -1
  173. package/dist/chunk-5MY6OWMK.js.map +0 -1
  174. package/dist/chunk-7NIWQWTA.js.map +0 -1
  175. package/dist/chunk-DH53HZPB.js.map +0 -1
  176. package/dist/chunk-EE6PAN3B.js.map +0 -1
  177. package/dist/chunk-EMCQBT3S.js.map +0 -1
  178. package/dist/chunk-FZ36KL73.js.map +0 -1
  179. package/dist/chunk-GJO3RGOB.js.map +0 -1
  180. package/dist/chunk-HMUZON6I.js +0 -202
  181. package/dist/chunk-HMUZON6I.js.map +0 -1
  182. package/dist/chunk-J6EO4R73.js +0 -633
  183. package/dist/chunk-J6EO4R73.js.map +0 -1
  184. package/dist/chunk-KMU6ABQF.js.map +0 -1
  185. package/dist/chunk-MSSH3HFK.js +0 -205
  186. package/dist/chunk-MSSH3HFK.js.map +0 -1
  187. package/dist/chunk-O4FCRKDX.js.map +0 -1
  188. package/dist/chunk-PHEGSCOM.js.map +0 -1
  189. package/dist/chunk-QLA4BH2B.js.map +0 -1
  190. package/dist/chunk-SQ3OZO32.js +0 -486
  191. package/dist/chunk-SQ3OZO32.js.map +0 -1
  192. package/dist/chunk-UAIUBPDN.js +0 -11
  193. package/dist/chunk-UAIUBPDN.js.map +0 -1
  194. package/dist/chunk-WT4OATGP.js.map +0 -1
  195. package/dist/chunk-XUGEXERO.js +0 -708
  196. package/dist/chunk-XUGEXERO.js.map +0 -1
  197. package/dist/chunk-ZRC5BVDX.js.map +0 -1
  198. /package/dist/{chunk-OLA35A2O.js.map → chunk-2GTR37PU.js.map} +0 -0
  199. /package/dist/{chunk-AKJQ345O.js.map → chunk-5AWGZQWU.js.map} +0 -0
  200. /package/dist/{chunk-BLQV2YMO.js.map → chunk-EZOKT7NJ.js.map} +0 -0
  201. /package/dist/{chunk-6D6ROU7X.js.map → chunk-IGMVF3KK.js.map} +0 -0
  202. /package/dist/{chunk-INMSEYT6.js.map → chunk-IVPVYVWG.js.map} +0 -0
  203. /package/dist/{chunk-35TX3AOA.js.map → chunk-NABSRUXG.js.map} +0 -0
  204. /package/dist/{chunk-OELI3IWC.js.map → chunk-PV6OCXXN.js.map} +0 -0
  205. /package/dist/{chunk-MG2VTZA4.js.map → chunk-QS3ANOWN.js.map} +0 -0
  206. /package/dist/{chunk-3OEEOBHB.js.map → chunk-QSJ543V2.js.map} +0 -0
  207. /package/dist/{chunk-FML6AG2V.js.map → chunk-RANC3OI6.js.map} +0 -0
  208. /package/dist/{chunk-YVTFQHVY.js.map → chunk-TEAZZPDQ.js.map} +0 -0
  209. /package/dist/{chunk-AG2COC64.js.map → chunk-VVYQ2DDS.js.map} +0 -0
@@ -1,486 +0,0 @@
1
- import {
2
- ctaLinkStyles,
3
- paddingScaleStyles
4
- } from "./chunk-FZ36KL73.js";
5
- import {
6
- controlBaseStyles,
7
- rootFontFamilyStyles
8
- } from "./chunk-KMU6ABQF.js";
9
- import {
10
- __decorateClass
11
- } from "./chunk-EUXUH3YW.js";
12
-
13
- // src/hero/Hero.ts
14
- import { LitElement, css, html, nothing, svg } from "lit";
15
- import { customElement, property } from "lit/decorators.js";
16
- var HIGHLIGHT_ICON = svg`<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M20 6 9 17l-5-5" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>`;
17
- var Hero = class extends LitElement {
18
- constructor() {
19
- super(...arguments);
20
- this.title = "";
21
- this.subtitle = "";
22
- this.imageSrc = "";
23
- this.actionLabel = "";
24
- this.href = "";
25
- this.textAlignment = "left";
26
- this.padding = "none";
27
- this.inverted = false;
28
- this.focalPoint = "center";
29
- this.eyebrow = "";
30
- this.secondaryActionLabel = "";
31
- this.secondaryHref = "";
32
- this.badge = "";
33
- this.highlights = [];
34
- this.layout = "background";
35
- this.imageAlt = "";
36
- this.size = "auto";
37
- this.contentPosition = "center";
38
- this.overlay = "even";
39
- this.onClick = (event) => this.emitAction(event, this.href, "primary");
40
- this.onSecondaryClick = (event) => this.emitAction(event, this.secondaryHref, "secondary");
41
- }
42
- willUpdate() {
43
- const asBackground = this.layout !== "split";
44
- this.style.backgroundImage = asBackground && this.imageSrc ? `url(${JSON.stringify(this.imageSrc)})` : "";
45
- this.style.setProperty("--st-hero-position", Hero.positions[this.focalPoint] ?? Hero.positions.center);
46
- }
47
- emitAction(event, href, kind) {
48
- const action = new CustomEvent("action", {
49
- detail: { href, kind },
50
- bubbles: true,
51
- composed: true,
52
- cancelable: true
53
- });
54
- this.dispatchEvent(action);
55
- if (action.defaultPrevented) event.preventDefault();
56
- }
57
- render() {
58
- return html`
59
- <div class="overlay" part="overlay"></div>
60
- <div class="content" part="content">
61
- ${this.eyebrow ? html`<p class="eyebrow" part="eyebrow">${this.eyebrow}</p>` : nothing}
62
- ${this.badge ? html`<p class="badge" part="badge">${this.badge}</p>` : nothing}
63
- <h1 class="title" part="title">${this.title}</h1>
64
- ${this.subtitle ? html`<p class="subtitle" part="subtitle">${this.subtitle}</p>` : nothing}
65
- ${this.actionLabel || this.secondaryActionLabel ? html`<div class="actions" part="actions">
66
- ${this.actionLabel ? html`<a class="cta" part="action" href=${this.href || nothing} @click=${this.onClick}>${this.actionLabel}</a>` : nothing}
67
- ${this.secondaryActionLabel ? html`<a class="cta secondary" part="secondary-action" href=${this.secondaryHref || nothing} @click=${this.onSecondaryClick}
68
- >${this.secondaryActionLabel}</a
69
- >` : nothing}
70
- </div>` : nothing}
71
- ${this.highlights.length ? html`<ul class="highlights" part="highlights">
72
- ${this.highlights.map(
73
- (text) => html`<li class="highlight" part="highlight">${HIGHLIGHT_ICON}<span>${text}</span></li>`
74
- )}
75
- </ul>` : nothing}
76
- <slot></slot>
77
- </div>
78
- ${this.layout === "split" && this.imageSrc ? html`<figure class="media" part="media">
79
- <img class="image" part="image" src=${this.imageSrc} alt=${this.imageAlt} />
80
- </figure>` : nothing}
81
- `;
82
- }
83
- };
84
- Hero.styles = css`
85
- ${controlBaseStyles}
86
- ${paddingScaleStyles}
87
-
88
- @keyframes st-hero-zoom {
89
- from { opacity: 0; transform: scale(1.1); }
90
- to { opacity: 1; transform: scale(1); }
91
- }
92
- @keyframes st-hero-rise {
93
- from { opacity: 0; transform: translateY(30px); }
94
- to { opacity: 1; transform: none; }
95
- }
96
- @keyframes st-hero-fade {
97
- from { opacity: 0; }
98
- to { opacity: 1; }
99
- }
100
-
101
- :host {
102
- display: flex;
103
- align-items: center;
104
- justify-content: center;
105
- position: relative;
106
- overflow: hidden;
107
- width: 100%;
108
- box-sizing: border-box;
109
- background-color: var(--st-color-text-strong);
110
- background-repeat: no-repeat;
111
- background-size: cover;
112
- background-position: var(--st-hero-position, center center);
113
- color: var(--st-color-on-solid);
114
- ${rootFontFamilyStyles}
115
- animation: st-hero-zoom 1.5s ease-out;
116
- }
117
-
118
- :host([inverted]) {
119
- background-color: var(--st-color-surface);
120
- color: var(--st-color-text-strong);
121
- }
122
-
123
- .overlay {
124
- position: absolute;
125
- inset: 0;
126
- z-index: 1;
127
- background: linear-gradient(
128
- to bottom,
129
- color-mix(in oklch, var(--st-color-text-strong) 40%, transparent),
130
- color-mix(in oklch, var(--st-color-text-strong) 20%, transparent),
131
- color-mix(in oklch, var(--st-color-text-strong) 40%, transparent)
132
- );
133
- }
134
-
135
- :host([inverted]) .overlay {
136
- display: none;
137
- }
138
-
139
- .content {
140
- display: flex;
141
- flex-direction: column;
142
- gap: var(--st-space-20);
143
- position: relative;
144
- z-index: 2;
145
- width: 80%;
146
- margin: 0 auto;
147
- text-align: center;
148
- align-items: center;
149
- /* Set here, not only on :host: text sits on the image/overlay, so a colour class the page puts
150
- on the host (e.g. a theme text colour) must not turn it dark. */
151
- color: var(--st-hero-text-color, var(--st-color-on-solid));
152
- }
153
-
154
- :host([inverted]) .content {
155
- color: var(--st-hero-text-color, var(--st-color-text-strong));
156
- }
157
-
158
- :host([text-alignment='left']) .content { text-align: left; align-items: flex-start; }
159
- :host([text-alignment='right']) .content { text-align: right; align-items: flex-end; }
160
- :host([text-alignment='justify']) .content { text-align: justify; align-items: stretch; }
161
-
162
- .title {
163
- font-size: var(--st-cms-text-display);
164
- font-weight: var(--st-font-weight-bold);
165
- line-height: 1.1;
166
- color: inherit;
167
- margin: 0;
168
- animation: st-hero-rise 0.8s 0.3s ease-out backwards;
169
- }
170
-
171
- .subtitle {
172
- font-size: var(--st-cms-text-xl);
173
- line-height: 1.5;
174
- color: inherit;
175
- margin: 0;
176
- animation: st-hero-fade 0.8s 0.5s ease-out backwards;
177
- }
178
-
179
- .actions {
180
- display: flex;
181
- justify-content: center;
182
- width: 100%;
183
- }
184
-
185
- .cta {
186
- ${ctaLinkStyles}
187
- background: var(--st-button-primary-bg);
188
- color: var(--st-button-primary-color);
189
- font-weight: var(--st-button-font-weight);
190
- font-size: var(--st-text-md);
191
- animation: st-hero-rise 0.6s 0.7s ease-out backwards;
192
- }
193
-
194
- .cta:hover {
195
- transform: scale(1.05);
196
- }
197
-
198
- .cta:active {
199
- transform: scale(0.98);
200
- }
201
-
202
- .eyebrow {
203
- margin: 0;
204
- font-size: var(--st-text-sm);
205
- font-weight: var(--st-font-weight-bold);
206
- letter-spacing: 0.12em;
207
- text-transform: uppercase;
208
- color: inherit;
209
- opacity: 0.85;
210
- animation: st-hero-fade 0.8s 0.2s ease-out backwards;
211
- }
212
-
213
- .actions {
214
- flex-wrap: wrap;
215
- gap: var(--st-space-12);
216
- }
217
-
218
- .cta.secondary {
219
- background: transparent;
220
- color: inherit;
221
- box-shadow: inset 0 0 0 1.5px currentColor;
222
- }
223
-
224
- .cta.secondary:hover {
225
- background: color-mix(in oklch, currentColor 12%, transparent);
226
- }
227
-
228
- /* size="large" / "full": a tall editorial hero. */
229
- :host([size='large']) {
230
- min-height: var(--st-hero-min-height, 640px);
231
- }
232
-
233
- :host([size='full']) {
234
- min-height: 100svh;
235
- }
236
-
237
- :host([size='large']) .title,
238
- :host([size='full']) .title {
239
- font-size: clamp(2.5rem, 6vw, 5rem);
240
- letter-spacing: -0.02em;
241
- line-height: 1.05;
242
- }
243
-
244
- /* content-position="bottom": copy sits in the lower part of the hero, on the container grid. */
245
- :host([content-position='bottom']) {
246
- align-items: flex-end;
247
- }
248
-
249
- :host([content-position='bottom']) .content {
250
- width: 100%;
251
- max-width: var(--st-cms-container-max);
252
- box-sizing: border-box;
253
- padding: var(--st-space-48) var(--st-space-24);
254
- }
255
-
256
- :host([content-position='bottom']) .title,
257
- :host([content-position='bottom']) .subtitle {
258
- max-width: 18ch;
259
- }
260
-
261
- :host([content-position='bottom']) .subtitle {
262
- max-width: 48ch;
263
- }
264
-
265
- :host([content-position='bottom']:not([text-alignment='center']):not([text-alignment='right'])) .actions {
266
- justify-content: flex-start;
267
- }
268
-
269
- :host([content-position='bottom'][text-alignment='center']) .title,
270
- :host([content-position='bottom'][text-alignment='center']) .subtitle {
271
- margin-inline: auto;
272
- }
273
-
274
- /* overlay="gradient": darkest behind the copy, clearing towards the far side of the image. */
275
- :host([overlay='gradient']) .overlay {
276
- background:
277
- linear-gradient(to top, color-mix(in oklch, var(--st-color-text-strong) 85%, transparent), transparent 70%),
278
- linear-gradient(to right, color-mix(in oklch, var(--st-color-text-strong) 70%, transparent), transparent 75%);
279
- }
280
-
281
- :host([overlay='gradient'][text-alignment='right']) .overlay {
282
- background:
283
- linear-gradient(to top, color-mix(in oklch, var(--st-color-text-strong) 85%, transparent), transparent 70%),
284
- linear-gradient(to left, color-mix(in oklch, var(--st-color-text-strong) 70%, transparent), transparent 75%);
285
- }
286
-
287
- :host([overlay='none']) .overlay {
288
- display: none;
289
- }
290
-
291
- .badge {
292
- display: inline-flex;
293
- align-items: center;
294
- gap: var(--st-space-8);
295
- margin: 0;
296
- padding: 6px 14px;
297
- border: 1px solid var(--st-color-border);
298
- border-radius: var(--st-radius-full);
299
- background: var(--st-color-surface);
300
- color: var(--st-color-text-strong);
301
- font-size: var(--st-text-sm);
302
- font-weight: var(--st-font-weight-bold);
303
- letter-spacing: var(--st-tracking-wider);
304
- line-height: 1.2;
305
- text-transform: uppercase;
306
- animation: st-hero-fade 0.8s 0.2s ease-out backwards;
307
- }
308
-
309
- .badge::before {
310
- content: '';
311
- flex: none;
312
- width: 8px;
313
- height: 8px;
314
- border-radius: var(--st-radius-circle);
315
- background: var(--st-cms-highlight);
316
- }
317
-
318
- .highlights {
319
- display: flex;
320
- flex-wrap: wrap;
321
- justify-content: center;
322
- gap: var(--st-space-12) var(--st-space-24);
323
- margin: 0;
324
- padding: 0;
325
- list-style: none;
326
- animation: st-hero-fade 0.8s 0.9s ease-out backwards;
327
- }
328
-
329
- .highlight {
330
- display: inline-flex;
331
- align-items: center;
332
- gap: var(--st-space-8);
333
- font-size: var(--st-text-md);
334
- font-weight: var(--st-font-weight-semibold);
335
- color: inherit;
336
- }
337
-
338
- .highlight svg {
339
- flex: none;
340
- width: 18px;
341
- height: 18px;
342
- color: var(--st-cms-highlight);
343
- }
344
-
345
- :host([text-alignment='left']) .highlights {
346
- justify-content: flex-start;
347
- }
348
-
349
- :host([text-alignment='right']) .highlights {
350
- justify-content: flex-end;
351
- }
352
-
353
- /* layout="split": a two-column block on the page surface; the image replaces the background. */
354
- :host([layout='split']) {
355
- display: grid;
356
- grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr));
357
- align-items: center;
358
- gap: var(--st-space-48);
359
- overflow: visible;
360
- padding: var(--st-cms-section-padding) var(--st-space-24);
361
- background-color: var(--st-color-surface);
362
- background-image: none;
363
- color: var(--st-color-text-strong);
364
- animation: none;
365
- }
366
-
367
- :host([layout='split']) .overlay {
368
- display: none;
369
- }
370
-
371
- :host([layout='split']) .content {
372
- width: 100%;
373
- margin: 0;
374
- padding: 0;
375
- max-width: 560px;
376
- color: var(--st-hero-text-color, var(--st-color-text-strong));
377
- }
378
-
379
- :host([layout='split'][text-alignment='left']) .actions {
380
- justify-content: flex-start;
381
- }
382
-
383
- :host([layout='split']) .highlight svg {
384
- color: var(--st-color-accent);
385
- }
386
-
387
- .media {
388
- margin: 0;
389
- min-width: 0;
390
- }
391
-
392
- .image {
393
- display: block;
394
- width: 100%;
395
- height: auto;
396
- aspect-ratio: 4 / 3;
397
- object-fit: cover;
398
- border-radius: var(--st-radius-lg);
399
- box-shadow: 0 24px 48px -16px var(--st-shadow-color-lg);
400
- }
401
-
402
- @media (min-width: 768px) {
403
- .content { padding: var(--st-space-32); }
404
- }
405
- @media (min-width: 1024px) {
406
- .content { padding: var(--st-space-48); }
407
- :host([content-position='bottom']) .content { padding: var(--st-space-48) var(--st-space-32) 6rem; }
408
- }
409
-
410
- @media (prefers-reduced-motion: reduce) {
411
- :host, .eyebrow, .title, .subtitle, .cta { animation: none; }
412
- .cta { transition: none; }
413
- }
414
- `;
415
- Hero.positions = {
416
- top: "center top",
417
- left: "left center",
418
- right: "right center",
419
- bottom: "center bottom",
420
- center: "center center"
421
- };
422
- __decorateClass([
423
- property({ type: String })
424
- ], Hero.prototype, "title", 2);
425
- __decorateClass([
426
- property({ type: String })
427
- ], Hero.prototype, "subtitle", 2);
428
- __decorateClass([
429
- property({ type: String, attribute: "image-src" })
430
- ], Hero.prototype, "imageSrc", 2);
431
- __decorateClass([
432
- property({ type: String, attribute: "action-label" })
433
- ], Hero.prototype, "actionLabel", 2);
434
- __decorateClass([
435
- property({ type: String })
436
- ], Hero.prototype, "href", 2);
437
- __decorateClass([
438
- property({ type: String, reflect: true, attribute: "text-alignment" })
439
- ], Hero.prototype, "textAlignment", 2);
440
- __decorateClass([
441
- property({ type: String, reflect: true })
442
- ], Hero.prototype, "padding", 2);
443
- __decorateClass([
444
- property({ type: Boolean, reflect: true })
445
- ], Hero.prototype, "inverted", 2);
446
- __decorateClass([
447
- property({ type: String, attribute: "focal-point" })
448
- ], Hero.prototype, "focalPoint", 2);
449
- __decorateClass([
450
- property({ type: String })
451
- ], Hero.prototype, "eyebrow", 2);
452
- __decorateClass([
453
- property({ type: String, attribute: "secondary-action-label" })
454
- ], Hero.prototype, "secondaryActionLabel", 2);
455
- __decorateClass([
456
- property({ type: String, attribute: "secondary-href" })
457
- ], Hero.prototype, "secondaryHref", 2);
458
- __decorateClass([
459
- property({ type: String })
460
- ], Hero.prototype, "badge", 2);
461
- __decorateClass([
462
- property({ attribute: false })
463
- ], Hero.prototype, "highlights", 2);
464
- __decorateClass([
465
- property({ type: String, reflect: true })
466
- ], Hero.prototype, "layout", 2);
467
- __decorateClass([
468
- property({ type: String, attribute: "image-alt" })
469
- ], Hero.prototype, "imageAlt", 2);
470
- __decorateClass([
471
- property({ type: String, reflect: true })
472
- ], Hero.prototype, "size", 2);
473
- __decorateClass([
474
- property({ type: String, reflect: true, attribute: "content-position" })
475
- ], Hero.prototype, "contentPosition", 2);
476
- __decorateClass([
477
- property({ type: String, reflect: true })
478
- ], Hero.prototype, "overlay", 2);
479
- Hero = __decorateClass([
480
- customElement("st-hero")
481
- ], Hero);
482
-
483
- export {
484
- Hero
485
- };
486
- //# sourceMappingURL=chunk-SQ3OZO32.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/hero/Hero.ts"],"sourcesContent":["import { LitElement, css, html, nothing, svg } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\nimport { controlBaseStyles, rootFontFamilyStyles } from '../shared/styles';\nimport { ctaLinkStyles, paddingScaleStyles } from '../shared/section-styles';\nimport type { HeroActionEventDetail } from './HeroEvents';\n\nconst HIGHLIGHT_ICON = svg`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>`;\n\n/**\n * Full-width hero banner: background image with a darkening overlay, optional eyebrow, title,\n * optional subtitle and up to two call-to-action links. The entrance animation is CSS keyframes\n * (skipped under `prefers-reduced-motion`).\n *\n * `size`, `content-position` and `overlay=\"gradient\"` give the large editorial layout (copy on the\n * lower left over a gradient that darkens towards it) used by enterprise marketing heroes; the\n * defaults keep the original centered banner. Put several heroes in an `st-carousel` with\n * `indicator-style=\"tabs\"` for a tabbed hero carousel.\n *\n * `badge` is a pill above the title; `highlights` is a row of check-marked points under the buttons.\n * `layout=\"split\"` swaps the background for a two-column layout: copy on one side, `image-src` as an\n * `<img>` (alt from `image-alt`) on the other, on normal page colours with no overlay.\n *\n * @fires action - Cancelable, before navigating. Detail `{ href, kind }`, `kind` being `primary` or `secondary`.\n * @cssprop --st-hero-text-color - Text colour over the image.\n * @cssprop --st-hero-min-height - Minimum height when `size` is `large` (default `640px`).\n * @csspart eyebrow - The small label above the title.\n * @csspart badge - The pill above the title.\n * @csspart highlights - The row of check-marked points.\n * @csspart image - The image in `layout=\"split\"`.\n * @csspart secondary-action - The outlined second button.\n */\n@customElement('st-hero')\nexport class Hero extends LitElement {\n static styles = css`\n ${controlBaseStyles}\n ${paddingScaleStyles}\n\n @keyframes st-hero-zoom {\n from { opacity: 0; transform: scale(1.1); }\n to { opacity: 1; transform: scale(1); }\n }\n @keyframes st-hero-rise {\n from { opacity: 0; transform: translateY(30px); }\n to { opacity: 1; transform: none; }\n }\n @keyframes st-hero-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n overflow: hidden;\n width: 100%;\n box-sizing: border-box;\n background-color: var(--st-color-text-strong);\n background-repeat: no-repeat;\n background-size: cover;\n background-position: var(--st-hero-position, center center);\n color: var(--st-color-on-solid);\n ${rootFontFamilyStyles}\n animation: st-hero-zoom 1.5s ease-out;\n }\n\n :host([inverted]) {\n background-color: var(--st-color-surface);\n color: var(--st-color-text-strong);\n }\n\n .overlay {\n position: absolute;\n inset: 0;\n z-index: 1;\n background: linear-gradient(\n to bottom,\n color-mix(in oklch, var(--st-color-text-strong) 40%, transparent),\n color-mix(in oklch, var(--st-color-text-strong) 20%, transparent),\n color-mix(in oklch, var(--st-color-text-strong) 40%, transparent)\n );\n }\n\n :host([inverted]) .overlay {\n display: none;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n gap: var(--st-space-20);\n position: relative;\n z-index: 2;\n width: 80%;\n margin: 0 auto;\n text-align: center;\n align-items: center;\n /* Set here, not only on :host: text sits on the image/overlay, so a colour class the page puts\n on the host (e.g. a theme text colour) must not turn it dark. */\n color: var(--st-hero-text-color, var(--st-color-on-solid));\n }\n\n :host([inverted]) .content {\n color: var(--st-hero-text-color, var(--st-color-text-strong));\n }\n\n :host([text-alignment='left']) .content { text-align: left; align-items: flex-start; }\n :host([text-alignment='right']) .content { text-align: right; align-items: flex-end; }\n :host([text-alignment='justify']) .content { text-align: justify; align-items: stretch; }\n\n .title {\n font-size: var(--st-cms-text-display);\n font-weight: var(--st-font-weight-bold);\n line-height: 1.1;\n color: inherit;\n margin: 0;\n animation: st-hero-rise 0.8s 0.3s ease-out backwards;\n }\n\n .subtitle {\n font-size: var(--st-cms-text-xl);\n line-height: 1.5;\n color: inherit;\n margin: 0;\n animation: st-hero-fade 0.8s 0.5s ease-out backwards;\n }\n\n .actions {\n display: flex;\n justify-content: center;\n width: 100%;\n }\n\n .cta {\n ${ctaLinkStyles}\n background: var(--st-button-primary-bg);\n color: var(--st-button-primary-color);\n font-weight: var(--st-button-font-weight);\n font-size: var(--st-text-md);\n animation: st-hero-rise 0.6s 0.7s ease-out backwards;\n }\n\n .cta:hover {\n transform: scale(1.05);\n }\n\n .cta:active {\n transform: scale(0.98);\n }\n\n .eyebrow {\n margin: 0;\n font-size: var(--st-text-sm);\n font-weight: var(--st-font-weight-bold);\n letter-spacing: 0.12em;\n text-transform: uppercase;\n color: inherit;\n opacity: 0.85;\n animation: st-hero-fade 0.8s 0.2s ease-out backwards;\n }\n\n .actions {\n flex-wrap: wrap;\n gap: var(--st-space-12);\n }\n\n .cta.secondary {\n background: transparent;\n color: inherit;\n box-shadow: inset 0 0 0 1.5px currentColor;\n }\n\n .cta.secondary:hover {\n background: color-mix(in oklch, currentColor 12%, transparent);\n }\n\n /* size=\"large\" / \"full\": a tall editorial hero. */\n :host([size='large']) {\n min-height: var(--st-hero-min-height, 640px);\n }\n\n :host([size='full']) {\n min-height: 100svh;\n }\n\n :host([size='large']) .title,\n :host([size='full']) .title {\n font-size: clamp(2.5rem, 6vw, 5rem);\n letter-spacing: -0.02em;\n line-height: 1.05;\n }\n\n /* content-position=\"bottom\": copy sits in the lower part of the hero, on the container grid. */\n :host([content-position='bottom']) {\n align-items: flex-end;\n }\n\n :host([content-position='bottom']) .content {\n width: 100%;\n max-width: var(--st-cms-container-max);\n box-sizing: border-box;\n padding: var(--st-space-48) var(--st-space-24);\n }\n\n :host([content-position='bottom']) .title,\n :host([content-position='bottom']) .subtitle {\n max-width: 18ch;\n }\n\n :host([content-position='bottom']) .subtitle {\n max-width: 48ch;\n }\n\n :host([content-position='bottom']:not([text-alignment='center']):not([text-alignment='right'])) .actions {\n justify-content: flex-start;\n }\n\n :host([content-position='bottom'][text-alignment='center']) .title,\n :host([content-position='bottom'][text-alignment='center']) .subtitle {\n margin-inline: auto;\n }\n\n /* overlay=\"gradient\": darkest behind the copy, clearing towards the far side of the image. */\n :host([overlay='gradient']) .overlay {\n background:\n linear-gradient(to top, color-mix(in oklch, var(--st-color-text-strong) 85%, transparent), transparent 70%),\n linear-gradient(to right, color-mix(in oklch, var(--st-color-text-strong) 70%, transparent), transparent 75%);\n }\n\n :host([overlay='gradient'][text-alignment='right']) .overlay {\n background:\n linear-gradient(to top, color-mix(in oklch, var(--st-color-text-strong) 85%, transparent), transparent 70%),\n linear-gradient(to left, color-mix(in oklch, var(--st-color-text-strong) 70%, transparent), transparent 75%);\n }\n\n :host([overlay='none']) .overlay {\n display: none;\n }\n\n .badge {\n display: inline-flex;\n align-items: center;\n gap: var(--st-space-8);\n margin: 0;\n padding: 6px 14px;\n border: 1px solid var(--st-color-border);\n border-radius: var(--st-radius-full);\n background: var(--st-color-surface);\n color: var(--st-color-text-strong);\n font-size: var(--st-text-sm);\n font-weight: var(--st-font-weight-bold);\n letter-spacing: var(--st-tracking-wider);\n line-height: 1.2;\n text-transform: uppercase;\n animation: st-hero-fade 0.8s 0.2s ease-out backwards;\n }\n\n .badge::before {\n content: '';\n flex: none;\n width: 8px;\n height: 8px;\n border-radius: var(--st-radius-circle);\n background: var(--st-cms-highlight);\n }\n\n .highlights {\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap: var(--st-space-12) var(--st-space-24);\n margin: 0;\n padding: 0;\n list-style: none;\n animation: st-hero-fade 0.8s 0.9s ease-out backwards;\n }\n\n .highlight {\n display: inline-flex;\n align-items: center;\n gap: var(--st-space-8);\n font-size: var(--st-text-md);\n font-weight: var(--st-font-weight-semibold);\n color: inherit;\n }\n\n .highlight svg {\n flex: none;\n width: 18px;\n height: 18px;\n color: var(--st-cms-highlight);\n }\n\n :host([text-alignment='left']) .highlights {\n justify-content: flex-start;\n }\n\n :host([text-alignment='right']) .highlights {\n justify-content: flex-end;\n }\n\n /* layout=\"split\": a two-column block on the page surface; the image replaces the background. */\n :host([layout='split']) {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr));\n align-items: center;\n gap: var(--st-space-48);\n overflow: visible;\n padding: var(--st-cms-section-padding) var(--st-space-24);\n background-color: var(--st-color-surface);\n background-image: none;\n color: var(--st-color-text-strong);\n animation: none;\n }\n\n :host([layout='split']) .overlay {\n display: none;\n }\n\n :host([layout='split']) .content {\n width: 100%;\n margin: 0;\n padding: 0;\n max-width: 560px;\n color: var(--st-hero-text-color, var(--st-color-text-strong));\n }\n\n :host([layout='split'][text-alignment='left']) .actions {\n justify-content: flex-start;\n }\n\n :host([layout='split']) .highlight svg {\n color: var(--st-color-accent);\n }\n\n .media {\n margin: 0;\n min-width: 0;\n }\n\n .image {\n display: block;\n width: 100%;\n height: auto;\n aspect-ratio: 4 / 3;\n object-fit: cover;\n border-radius: var(--st-radius-lg);\n box-shadow: 0 24px 48px -16px var(--st-shadow-color-lg);\n }\n\n @media (min-width: 768px) {\n .content { padding: var(--st-space-32); }\n }\n @media (min-width: 1024px) {\n .content { padding: var(--st-space-48); }\n :host([content-position='bottom']) .content { padding: var(--st-space-48) var(--st-space-32) 6rem; }\n }\n\n @media (prefers-reduced-motion: reduce) {\n :host, .eyebrow, .title, .subtitle, .cta { animation: none; }\n .cta { transition: none; }\n }\n `;\n\n @property({ type: String })\n title = '';\n\n @property({ type: String })\n subtitle = '';\n\n @property({ type: String, attribute: 'image-src' })\n imageSrc = '';\n\n @property({ type: String, attribute: 'action-label' })\n actionLabel = '';\n\n @property({ type: String })\n href = '';\n\n @property({ type: String, reflect: true, attribute: 'text-alignment' })\n textAlignment: 'left' | 'center' | 'right' | 'justify' = 'left';\n\n @property({ type: String, reflect: true })\n padding: 'none' | 'small' | 'medium' | 'large' = 'none';\n\n @property({ type: Boolean, reflect: true })\n inverted = false;\n\n @property({ type: String, attribute: 'focal-point' })\n focalPoint: 'top' | 'left' | 'right' | 'bottom' | 'center' = 'center';\n\n /** Small uppercase label above the title (e.g. an event or product name). */\n @property({ type: String })\n eyebrow = '';\n\n /** Label of an outlined second button next to the primary one. */\n @property({ type: String, attribute: 'secondary-action-label' })\n secondaryActionLabel = '';\n\n @property({ type: String, attribute: 'secondary-href' })\n secondaryHref = '';\n\n /** Small pill above the title (e.g. \"New\", \"Now available\"). */\n @property({ type: String })\n badge = '';\n\n /** Check-marked points shown in a row under the buttons. */\n @property({ attribute: false })\n highlights: string[] = [];\n\n /** `background` (default) puts `image-src` behind the copy; `split` puts copy and image side by side. */\n @property({ type: String, reflect: true })\n layout: 'background' | 'split' = 'background';\n\n /** Alt text of the image in `layout=\"split\"`. Empty marks it as decorative. */\n @property({ type: String, attribute: 'image-alt' })\n imageAlt = '';\n\n /** `auto` sizes to the content; `large` is a tall editorial hero (`--st-hero-min-height`); `full` fills the viewport. */\n @property({ type: String, reflect: true })\n size: 'auto' | 'large' | 'full' = 'auto';\n\n /** `center` keeps the copy in the middle; `bottom` puts it in the lower part of the hero, on the page container. */\n @property({ type: String, reflect: true, attribute: 'content-position' })\n contentPosition: 'center' | 'bottom' = 'center';\n\n /** `even` darkens the whole image; `gradient` darkens behind the copy only; `none` shows the image as is. */\n @property({ type: String, reflect: true })\n overlay: 'even' | 'gradient' | 'none' = 'even';\n\n private static positions = {\n top: 'center top',\n left: 'left center',\n right: 'right center',\n bottom: 'center bottom',\n center: 'center center'\n } as const;\n\n protected willUpdate(): void {\n const asBackground = this.layout !== 'split';\n this.style.backgroundImage = asBackground && this.imageSrc ? `url(${JSON.stringify(this.imageSrc)})` : '';\n this.style.setProperty('--st-hero-position', Hero.positions[this.focalPoint] ?? Hero.positions.center);\n }\n\n private emitAction(event: MouseEvent, href: string, kind: 'primary' | 'secondary'): void {\n const action = new CustomEvent<HeroActionEventDetail>('action', {\n detail: { href, kind },\n bubbles: true,\n composed: true,\n cancelable: true\n });\n this.dispatchEvent(action);\n if (action.defaultPrevented) event.preventDefault();\n }\n\n private onClick = (event: MouseEvent): void => this.emitAction(event, this.href, 'primary');\n\n private onSecondaryClick = (event: MouseEvent): void => this.emitAction(event, this.secondaryHref, 'secondary');\n\n render() {\n return html`\n <div class=\"overlay\" part=\"overlay\"></div>\n <div class=\"content\" part=\"content\">\n ${this.eyebrow ? html`<p class=\"eyebrow\" part=\"eyebrow\">${this.eyebrow}</p>` : nothing}\n ${this.badge ? html`<p class=\"badge\" part=\"badge\">${this.badge}</p>` : nothing}\n <h1 class=\"title\" part=\"title\">${this.title}</h1>\n ${this.subtitle ? html`<p class=\"subtitle\" part=\"subtitle\">${this.subtitle}</p>` : nothing}\n ${this.actionLabel || this.secondaryActionLabel\n ? html`<div class=\"actions\" part=\"actions\">\n ${this.actionLabel\n ? html`<a class=\"cta\" part=\"action\" href=${this.href || nothing} @click=${this.onClick}>${this.actionLabel}</a>`\n : nothing}\n ${this.secondaryActionLabel\n ? html`<a class=\"cta secondary\" part=\"secondary-action\" href=${this.secondaryHref || nothing} @click=${this.onSecondaryClick}\n >${this.secondaryActionLabel}</a\n >`\n : nothing}\n </div>`\n : nothing}\n ${this.highlights.length\n ? html`<ul class=\"highlights\" part=\"highlights\">\n ${this.highlights.map(\n (text) => html`<li class=\"highlight\" part=\"highlight\">${HIGHLIGHT_ICON}<span>${text}</span></li>`\n )}\n </ul>`\n : nothing}\n <slot></slot>\n </div>\n ${this.layout === 'split' && this.imageSrc\n ? html`<figure class=\"media\" part=\"media\">\n <img class=\"image\" part=\"image\" src=${this.imageSrc} alt=${this.imageAlt} />\n </figure>`\n : nothing}\n `;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,11 +0,0 @@
1
- // src/shared/markdown.ts
2
- import DOMPurify from "dompurify";
3
- import { marked } from "marked";
4
- function renderMarkdown(source) {
5
- return DOMPurify.sanitize(marked.parse(source, { gfm: true, breaks: true, async: false }));
6
- }
7
-
8
- export {
9
- renderMarkdown
10
- };
11
- //# sourceMappingURL=chunk-UAIUBPDN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shared/markdown.ts"],"sourcesContent":["import DOMPurify from 'dompurify';\nimport { marked } from 'marked';\n\n/**\n * Renders Markdown (GFM, single newlines become `<br>`) to HTML sanitized with DOMPurify. The one\n * place the CMS turns authored Markdown into markup; render the result with `unsafeHTML`.\n */\nexport function renderMarkdown(source: string): string {\n return DOMPurify.sanitize(marked.parse(source, { gfm: true, breaks: true, async: false }));\n}\n"],"mappings":";AAAA,OAAO,eAAe;AACtB,SAAS,cAAc;AAMhB,SAAS,eAAe,QAAwB;AACrD,SAAO,UAAU,SAAS,OAAO,MAAM,QAAQ,EAAE,KAAK,MAAM,QAAQ,MAAM,OAAO,MAAM,CAAC,CAAC;AAC3F;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/feature-split/FeatureSplit.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport 'iconify-icon';\n\nimport { controlBaseStyles, ctaButtonStyles, fontFamilyStyles } from '../shared/styles';\nimport '../markdown';\nimport {\n cardTitleStyles,\n iconTileStyles,\n reducedMotionStyles,\n sectionTitleStyles,\n} from '../shared/section-styles';\nimport type { FeatureSplitActionEventDetail } from './FeatureSplitEvents';\n\nexport interface FeatureSplitItem {\n /** Iconify icon name, e.g. `mdi:check`. */\n icon?: string;\n title: string;\n /** Markdown. */\n description: string;\n}\n\nexport type FeatureSplitImagePosition = 'left' | 'right' | 'top';\n\n/**\n * A title/markdown-subtitle/feature-list block beside (or under) an image.\n *\n * @cssprop --st-feature-split-padding - Overrides the block's padding.\n */\n@customElement('st-feature-split')\nexport class FeatureSplit 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-feature-split-padding instead. */\n padding: var(--st-feature-split-padding, var(--st-space-24)) !important;\n background: var(--st-color-page);\n ${fontFamilyStyles}\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 display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--st-space-48);\n align-items: center;\n }\n\n :host([image-position='left']) .container {\n direction: rtl;\n }\n\n :host([image-position='left']) .content {\n direction: ltr;\n }\n\n :host([image-position='top']) .container {\n grid-template-columns: 1fr;\n text-align: center;\n }\n\n :host([image-position='top']) .content {\n align-items: center;\n }\n\n :host([image-position='top']) .image-wrapper {\n order: -1;\n max-width: 800px;\n margin: 0 auto;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n gap: var(--st-space-32);\n }\n\n .title {\n ${sectionTitleStyles}\n margin: 0;\n }\n\n .subtitle {\n color: var(--st-color-text-muted);\n font-size: var(--st-text-base);\n line-height: 1.6;\n }\n\n .list {\n display: flex;\n flex-direction: column;\n gap: var(--st-space-24);\n margin-top: var(--st-space-16);\n }\n\n .item {\n display: flex;\n gap: var(--st-space-16);\n align-items: flex-start;\n text-align: left;\n }\n\n .icon {\n ${iconTileStyles}\n width: var(--st-space-48);\n height: var(--st-space-48);\n font-size: 24px;\n }\n\n .item-title {\n ${cardTitleStyles}\n }\n\n .item-description {\n color: var(--st-color-text-muted);\n font-size: var(--st-text-sm);\n line-height: 1.5;\n }\n\n .action {\n ${ctaButtonStyles}\n justify-self: start;\n padding: var(--st-space-16);\n border-radius: var(--st-radius-lg);\n }\n\n .image-wrapper {\n width: 100%;\n height: 100%;\n min-height: 400px;\n border-radius: var(--st-space-24);\n overflow: hidden;\n box-shadow: 0 20px 40px -12px var(--st-shadow-color-md);\n }\n\n .image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.5s ease;\n }\n\n .image:hover {\n transform: scale(1.02);\n }\n\n :host([inverted]) .title,\n :host([inverted]) .item-title {\n color: var(--st-color-on-solid);\n }\n\n :host([inverted]) .subtitle,\n :host([inverted]) .item-description {\n color: var(--st-color-border);\n }\n\n :host([inverted]) .icon {\n background: var(--st-color-text);\n color: var(--st-color-border);\n }\n\n @media (max-width: 1024px) {\n .container {\n gap: var(--st-space-40);\n }\n }\n\n @media (max-width: 768px) {\n :host {\n padding: var(--st-feature-split-padding, var(--st-space-48) var(--st-space-24)) !important;\n }\n\n .container {\n grid-template-columns: 1fr;\n direction: ltr !important;\n }\n\n .image-wrapper {\n min-height: 300px;\n order: -1;\n }\n }\n\n ${reducedMotionStyles}\n `;\n\n @property({ type: Boolean, reflect: true })\n inverted = false;\n\n @property({ type: String })\n title = '';\n\n /** Markdown. */\n @property({ type: String })\n subtitle = '';\n\n @property({ attribute: false })\n items: FeatureSplitItem[] = [];\n\n @property({ type: String, attribute: 'image-src' })\n imageSrc = '';\n\n @property({ type: String, attribute: 'image-alt' })\n imageAlt = '';\n\n @property({ type: String, attribute: 'image-position', reflect: true })\n imagePosition: FeatureSplitImagePosition = 'right';\n\n @property({ type: String, attribute: 'action-label' })\n actionLabel = '';\n\n @property({ type: String })\n href = '';\n\n private onAction() {\n const event = new CustomEvent<FeatureSplitActionEventDetail>('feature-split-action', {\n detail: { href: this.href },\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n if (this.dispatchEvent(event)) window.location.href = this.href;\n }\n\n render() {\n return html`\n <div class=\"container\" part=\"container\">\n <div class=\"content\" part=\"content\">\n <h2 class=\"title\" part=\"title\">${this.title}</h2>\n ${this.subtitle\n ? html`<div class=\"subtitle\" part=\"subtitle\"><st-markdown .content=${this.subtitle}></st-markdown></div>`\n : nothing}\n ${this.items.length > 0\n ? html`<div class=\"list\" part=\"list\">\n ${this.items.map(\n (item) => html`\n <div class=\"item\" part=\"item\">\n ${item.icon\n ? html`<div class=\"icon\" part=\"icon\"><iconify-icon icon=${item.icon}></iconify-icon></div>`\n : nothing}\n <div>\n <h3 class=\"item-title\" part=\"item-title\">${item.title}</h3>\n <div class=\"item-description\" part=\"item-description\">\n <st-markdown .content=${item.description}></st-markdown>\n </div>\n </div>\n </div>\n `,\n )}\n </div>`\n : nothing}\n ${this.actionLabel && this.href\n ? html`<button class=\"action\" part=\"action\" type=\"button\" @click=${this.onAction}>${this.actionLabel}</button>`\n : nothing}\n </div>\n <div class=\"image-wrapper\" part=\"image-wrapper\">\n <img class=\"image\" part=\"image\" src=${this.imageSrc} alt=${this.imageAlt || this.title} />\n </div>\n </div>\n `;\n }\n}\n"],"mappings":"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","names":[]}