@sankhyatronics/sankhya-cms 0.1.18 → 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 (216) hide show
  1. package/custom-elements.json +11634 -3153
  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 +33 -1
  5. package/dist/bento-grid/index.js +4 -3
  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.d.ts +3 -4
  10. package/dist/card/index.js +2 -2
  11. package/dist/carousel/index.d.ts +20 -6
  12. package/dist/carousel/index.js +3 -3
  13. package/dist/chip/index.js +2 -2
  14. package/dist/{chunk-JQY2G4QK.js → chunk-2GTR37PU.js} +2 -2
  15. package/dist/chunk-2GTR37PU.js.map +1 -0
  16. package/dist/{chunk-FLY7TNRT.js → chunk-2HMOX253.js} +128 -25
  17. package/dist/chunk-2HMOX253.js.map +1 -0
  18. package/dist/{chunk-DH53HZPB.js → chunk-37KFBKPD.js} +32 -4
  19. package/dist/chunk-37KFBKPD.js.map +1 -0
  20. package/dist/{chunk-ALI26WOB.js → chunk-4XPKKYVZ.js} +54 -15
  21. package/dist/chunk-4XPKKYVZ.js.map +1 -0
  22. package/dist/chunk-535QAZ6A.js +236 -0
  23. package/dist/chunk-535QAZ6A.js.map +1 -0
  24. package/dist/{chunk-AKJQ345O.js → chunk-5AWGZQWU.js} +2 -2
  25. package/dist/chunk-6OZKZG5J.js +300 -0
  26. package/dist/chunk-6OZKZG5J.js.map +1 -0
  27. package/dist/chunk-AYNT7G3J.js +805 -0
  28. package/dist/chunk-AYNT7G3J.js.map +1 -0
  29. package/dist/chunk-BEWX3E6P.js +32 -0
  30. package/dist/chunk-BEWX3E6P.js.map +1 -0
  31. package/dist/chunk-CZUGPKXV.js +275 -0
  32. package/dist/chunk-CZUGPKXV.js.map +1 -0
  33. package/dist/{chunk-LEXZKGQX.js → chunk-DJFWZOZM.js} +107 -11
  34. package/dist/chunk-DJFWZOZM.js.map +1 -0
  35. package/dist/chunk-DPANTC3O.js +1714 -0
  36. package/dist/chunk-DPANTC3O.js.map +1 -0
  37. package/dist/chunk-EKZFFY45.js +426 -0
  38. package/dist/chunk-EKZFFY45.js.map +1 -0
  39. package/dist/chunk-ER7MCPDV.js +7 -0
  40. package/dist/chunk-ER7MCPDV.js.map +1 -0
  41. package/dist/chunk-EW2RK5Y6.js +383 -0
  42. package/dist/chunk-EW2RK5Y6.js.map +1 -0
  43. package/dist/{chunk-BLQV2YMO.js → chunk-EZOKT7NJ.js} +2 -2
  44. package/dist/chunk-FF2LWEF3.js +386 -0
  45. package/dist/chunk-FF2LWEF3.js.map +1 -0
  46. package/dist/chunk-FOUK3NHR.js +7 -0
  47. package/dist/chunk-FOUK3NHR.js.map +1 -0
  48. package/dist/chunk-GB4NGCZI.js +181 -0
  49. package/dist/chunk-GB4NGCZI.js.map +1 -0
  50. package/dist/{chunk-7NLZND6Q.js → chunk-GOFSMD6W.js} +35 -11
  51. package/dist/chunk-GOFSMD6W.js.map +1 -0
  52. package/dist/{chunk-6D6ROU7X.js → chunk-IGMVF3KK.js} +2 -2
  53. package/dist/{chunk-INMSEYT6.js → chunk-IVPVYVWG.js} +2 -2
  54. package/dist/chunk-JURCF4OD.js +381 -0
  55. package/dist/chunk-JURCF4OD.js.map +1 -0
  56. package/dist/{chunk-FZ36KL73.js → chunk-KZ7PMFWS.js} +11 -1
  57. package/dist/chunk-KZ7PMFWS.js.map +1 -0
  58. package/dist/{chunk-EMCQBT3S.js → chunk-LO6TZBGD.js} +129 -35
  59. package/dist/chunk-LO6TZBGD.js.map +1 -0
  60. package/dist/chunk-MFRGAT6D.js +860 -0
  61. package/dist/chunk-MFRGAT6D.js.map +1 -0
  62. package/dist/chunk-MIBVQXRU.js +1098 -0
  63. package/dist/chunk-MIBVQXRU.js.map +1 -0
  64. package/dist/{chunk-35TX3AOA.js → chunk-NABSRUXG.js} +2 -2
  65. package/dist/{chunk-R5G6KFTJ.js → chunk-NXKDZWS7.js} +44 -6
  66. package/dist/chunk-NXKDZWS7.js.map +1 -0
  67. package/dist/{chunk-KMU6ABQF.js → chunk-NXUS2CH7.js} +14 -1
  68. package/dist/chunk-NXUS2CH7.js.map +1 -0
  69. package/dist/{chunk-GJO3RGOB.js → chunk-OCPGOLVF.js} +56 -11
  70. package/dist/chunk-OCPGOLVF.js.map +1 -0
  71. package/dist/chunk-OEOE6IFY.js +628 -0
  72. package/dist/chunk-OEOE6IFY.js.map +1 -0
  73. package/dist/{chunk-SMLR736E.js → chunk-PV6OCXXN.js} +2 -2
  74. package/dist/chunk-PV6OCXXN.js.map +1 -0
  75. package/dist/chunk-Q66CJO3P.js +534 -0
  76. package/dist/chunk-Q66CJO3P.js.map +1 -0
  77. package/dist/{chunk-MG2VTZA4.js → chunk-QS3ANOWN.js} +2 -2
  78. package/dist/{chunk-ZN4LIKVG.js → chunk-QSJ543V2.js} +2 -2
  79. package/dist/chunk-QSJ543V2.js.map +1 -0
  80. package/dist/{chunk-FML6AG2V.js → chunk-RANC3OI6.js} +2 -2
  81. package/dist/chunk-T4BIN37Q.js +32 -0
  82. package/dist/chunk-T4BIN37Q.js.map +1 -0
  83. package/dist/{chunk-YVTFQHVY.js → chunk-TEAZZPDQ.js} +2 -2
  84. package/dist/chunk-TJK55CJ2.js +49 -0
  85. package/dist/chunk-TJK55CJ2.js.map +1 -0
  86. package/dist/chunk-UKIVLF7S.js +32 -0
  87. package/dist/chunk-UKIVLF7S.js.map +1 -0
  88. package/dist/chunk-V4R7PYP5.js +905 -0
  89. package/dist/chunk-V4R7PYP5.js.map +1 -0
  90. package/dist/{chunk-AG2COC64.js → chunk-VVYQ2DDS.js} +2 -2
  91. package/dist/chunk-WAMOAAMN.js +16 -0
  92. package/dist/chunk-WAMOAAMN.js.map +1 -0
  93. package/dist/chunk-WAYHHL4J.js +1234 -0
  94. package/dist/chunk-WAYHHL4J.js.map +1 -0
  95. package/dist/{chunk-YQ42EBK5.js → chunk-WH6HE6SY.js} +10 -4
  96. package/dist/chunk-WH6HE6SY.js.map +1 -0
  97. package/dist/chunk-XP6DI3VY.js +180 -0
  98. package/dist/chunk-XP6DI3VY.js.map +1 -0
  99. package/dist/{chunk-5EBWMPJS.js → chunk-XS6LNTSH.js} +76 -14
  100. package/dist/chunk-XS6LNTSH.js.map +1 -0
  101. package/dist/{chunk-WT4OATGP.js → chunk-ZKFCDVB4.js} +16 -7
  102. package/dist/chunk-ZKFCDVB4.js.map +1 -0
  103. package/dist/cms-theme.css +29 -0
  104. package/dist/contact-form/index.d.ts +220 -0
  105. package/dist/contact-form/index.js +16 -0
  106. package/dist/contact-form/index.js.map +1 -0
  107. package/dist/content-block/index.d.ts +39 -4
  108. package/dist/content-block/index.js +8 -4
  109. package/dist/cookie-consent/index.d.ts +60 -12
  110. package/dist/cookie-consent/index.js +3 -2
  111. package/dist/date-tile/index.js +2 -2
  112. package/dist/dropdown/index.d.ts +29 -11
  113. package/dist/dropdown/index.js +4 -2
  114. package/dist/feature-split/index.d.ts +6 -1
  115. package/dist/feature-split/index.js +5 -4
  116. package/dist/features-section/index.d.ts +53 -9
  117. package/dist/features-section/index.js +6 -5
  118. package/dist/flow/index.d.ts +35 -0
  119. package/dist/flow/index.js +9 -0
  120. package/dist/flow/index.js.map +1 -0
  121. package/dist/footer/index.d.ts +13 -0
  122. package/dist/footer/index.js +2 -2
  123. package/dist/header/index.d.ts +135 -16
  124. package/dist/header/index.js +3 -2
  125. package/dist/hero/index.d.ts +92 -8
  126. package/dist/hero/index.js +6 -3
  127. package/dist/icon-button/index.d.ts +7 -7
  128. package/dist/icon-button/index.js +2 -2
  129. package/dist/index.d.ts +12 -3
  130. package/dist/index.js +121 -47
  131. package/dist/items-accordion/index.d.ts +9 -0
  132. package/dist/items-accordion/index.js +4 -3
  133. package/dist/kpi-card/index.js +2 -2
  134. package/dist/markdown/index.d.ts +19 -2
  135. package/dist/markdown/index.js +3 -2
  136. package/dist/mega-menu/index.d.ts +95 -7
  137. package/dist/mega-menu/index.js +7 -2
  138. package/dist/menu-grid/index.d.ts +2 -3
  139. package/dist/menu-grid/index.js +2 -2
  140. package/dist/menu-grid-item/index.d.ts +6 -8
  141. package/dist/menu-grid-item/index.js +2 -2
  142. package/dist/menu-item/index.d.ts +11 -7
  143. package/dist/menu-item/index.js +3 -2
  144. package/dist/plan-cards/index.d.ts +69 -0
  145. package/dist/plan-cards/index.js +13 -0
  146. package/dist/plan-cards/index.js.map +1 -0
  147. package/dist/product-nav/index.d.ts +127 -0
  148. package/dist/product-nav/index.js +11 -0
  149. package/dist/product-nav/index.js.map +1 -0
  150. package/dist/promo-banner/index.d.ts +42 -4
  151. package/dist/promo-banner/index.js +6 -3
  152. package/dist/quote-dialog/index.d.ts +174 -0
  153. package/dist/quote-dialog/index.js +22 -0
  154. package/dist/quote-dialog/index.js.map +1 -0
  155. package/dist/schema/index.d.ts +11 -0
  156. package/dist/schema/index.js +9 -0
  157. package/dist/schema/index.js.map +1 -1
  158. package/dist/screenshot-tour/index.d.ts +54 -0
  159. package/dist/screenshot-tour/index.js +9 -0
  160. package/dist/screenshot-tour/index.js.map +1 -0
  161. package/dist/section/index.d.ts +3 -0
  162. package/dist/section/index.js +3 -3
  163. package/dist/segmented-control/index.js +2 -2
  164. package/dist/select/index.js +2 -2
  165. package/dist/shared/styles.d.ts +7 -1
  166. package/dist/shared/styles.js +3 -1
  167. package/dist/stats/index.js +2 -2
  168. package/dist/steps/index.d.ts +45 -0
  169. package/dist/steps/index.js +11 -0
  170. package/dist/steps/index.js.map +1 -0
  171. package/dist/tag-strip/index.d.ts +33 -0
  172. package/dist/tag-strip/index.js +9 -0
  173. package/dist/tag-strip/index.js.map +1 -0
  174. package/dist/testimonials/index.d.ts +9 -1
  175. package/dist/testimonials/index.js +3 -3
  176. package/dist/tooltip/index.js +2 -2
  177. package/package.json +38 -2
  178. package/dist/chunk-5EBWMPJS.js.map +0 -1
  179. package/dist/chunk-76AVBQUA.js +0 -252
  180. package/dist/chunk-76AVBQUA.js.map +0 -1
  181. package/dist/chunk-7NLZND6Q.js.map +0 -1
  182. package/dist/chunk-ALI26WOB.js.map +0 -1
  183. package/dist/chunk-BMHMNXIA.js +0 -158
  184. package/dist/chunk-BMHMNXIA.js.map +0 -1
  185. package/dist/chunk-DH53HZPB.js.map +0 -1
  186. package/dist/chunk-EMCQBT3S.js.map +0 -1
  187. package/dist/chunk-FLY7TNRT.js.map +0 -1
  188. package/dist/chunk-FZ36KL73.js.map +0 -1
  189. package/dist/chunk-GJO3RGOB.js.map +0 -1
  190. package/dist/chunk-J6EO4R73.js +0 -633
  191. package/dist/chunk-J6EO4R73.js.map +0 -1
  192. package/dist/chunk-JKBWZLG4.js +0 -348
  193. package/dist/chunk-JKBWZLG4.js.map +0 -1
  194. package/dist/chunk-JQY2G4QK.js.map +0 -1
  195. package/dist/chunk-KMU6ABQF.js.map +0 -1
  196. package/dist/chunk-LEXZKGQX.js.map +0 -1
  197. package/dist/chunk-MSSH3HFK.js +0 -205
  198. package/dist/chunk-MSSH3HFK.js.map +0 -1
  199. package/dist/chunk-R5G6KFTJ.js.map +0 -1
  200. package/dist/chunk-SMLR736E.js.map +0 -1
  201. package/dist/chunk-VWS53WY4.js +0 -157
  202. package/dist/chunk-VWS53WY4.js.map +0 -1
  203. package/dist/chunk-WT4OATGP.js.map +0 -1
  204. package/dist/chunk-XWB4CKDU.js +0 -708
  205. package/dist/chunk-XWB4CKDU.js.map +0 -1
  206. package/dist/chunk-YQ42EBK5.js.map +0 -1
  207. package/dist/chunk-ZN4LIKVG.js.map +0 -1
  208. /package/dist/{chunk-AKJQ345O.js.map → chunk-5AWGZQWU.js.map} +0 -0
  209. /package/dist/{chunk-BLQV2YMO.js.map → chunk-EZOKT7NJ.js.map} +0 -0
  210. /package/dist/{chunk-6D6ROU7X.js.map → chunk-IGMVF3KK.js.map} +0 -0
  211. /package/dist/{chunk-INMSEYT6.js.map → chunk-IVPVYVWG.js.map} +0 -0
  212. /package/dist/{chunk-35TX3AOA.js.map → chunk-NABSRUXG.js.map} +0 -0
  213. /package/dist/{chunk-MG2VTZA4.js.map → chunk-QS3ANOWN.js.map} +0 -0
  214. /package/dist/{chunk-FML6AG2V.js.map → chunk-RANC3OI6.js.map} +0 -0
  215. /package/dist/{chunk-YVTFQHVY.js.map → chunk-TEAZZPDQ.js.map} +0 -0
  216. /package/dist/{chunk-AG2COC64.js.map → chunk-VVYQ2DDS.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as lit from 'lit';
2
- import { LitElement } from 'lit';
2
+ import { LitElement, PropertyValues, TemplateResult } from 'lit';
3
3
 
4
4
  /**
5
5
  * The rich layout of a mega-menu panel, after okta.com: an optional intro column on the left (a
@@ -13,11 +13,15 @@ import { LitElement } from 'lit';
13
13
  * everything stacked in the narrow drill-down panel `st-header` shows on a phone (where the intro
14
14
  * heading is left out — the drill-down already shows the section's name).
15
15
  *
16
+ * `cta-label` + `cta-href` add a call-to-action pill pinned to the foot of the intro column, so the
17
+ * column ends level with the featured cards instead of leaving an empty gap under the text.
18
+ *
16
19
  * @slot - The link columns (`st-mega-menu-column`s, or any blocks).
17
20
  * @slot intro - Quick links under the intro text, e.g. `st-menu-item`s with an icon.
18
21
  * @slot featured - Promo cards (`st-mega-menu-feature`s), stacked.
19
22
  * @csspart inner - The grid holding every area.
20
23
  * @csspart intro - The intro column.
24
+ * @csspart cta - The intro column's call-to-action pill.
21
25
  * @csspart columns - The grid holding the link columns.
22
26
  * @csspart featured - The featured column.
23
27
  */
@@ -31,12 +35,21 @@ declare class MegaMenu extends LitElement {
31
35
  featuredHeading: string;
32
36
  /** Number of link columns side by side at full width. `0` (the default) uses one per slotted column. */
33
37
  columns: number;
38
+ /** Label of the call-to-action pill at the foot of the intro column. Needs `cta-href`. */
39
+ ctaLabel: string;
40
+ /** Target of the intro column's call to action. */
41
+ ctaHref: string;
42
+ /** Whether the menu panel is shown. Set to `false` to hide it entirely (it keeps its slotted content). */
43
+ visible: boolean;
34
44
  private columnCount;
35
45
  private hasIntroLinks;
36
46
  private hasFeatured;
37
47
  private onColumnsSlotChange;
38
48
  private onIntroSlotChange;
39
49
  private onFeaturedSlotChange;
50
+ private get layout();
51
+ private lastTracks;
52
+ protected updated(_changed: PropertyValues): void;
40
53
  render(): lit.TemplateResult<1>;
41
54
  }
42
55
 
@@ -47,19 +60,45 @@ declare class MegaMenu extends LitElement {
47
60
  *
48
61
  * `variant="card"` puts the column on a tinted rounded tile and `variant="accent"` on a solid
49
62
  * accent tile with light text; both suit a row of equal columns without intro or featured area.
50
- * `cta-label` + `cta-href` add a pill button at the bottom of the column.
63
+ *
64
+ * `variant="product"` makes a product card for a row of products: an icon tile and a `tag` pill on a
65
+ * top row, the heading and description, the links as rows
66
+ * with a `→` arrow (a new-tab link keeps its `↗` icon), and a full-width `cta-label` + `cta-href`
67
+ * button pinned to the bottom. The icon tile shows `icon` (an iconify name), or, when `icon-src` is set,
68
+ * that image at 28px on the same tinted tile (`icon-src-dark`, if set, replaces it on the dark theme). The
69
+ * card lifts and gets an accent border on hover or focus. Set
70
+ * `accent` (any CSS colour) to tint it; it defaults to the theme accent. A card whose link is the
71
+ * page being shown (see `st-header`'s `current-path`) becomes the "You are here" card: a 2px accent
72
+ * border, a faint accent wash, a `currentLabel` pill and a solid button. Inside an `inline`
73
+ * (hamburger) header panel the card does not lift.
74
+ *
75
+ * `decoration` (`none` default, `flow`, `orbit`, `waves` or `ribbon`) draws faint curvy line art in
76
+ * the card's accent behind its top-right corner. It is `product`-only and sits under the content;
77
+ * it drifts on hover or focus, but not in the `inline` panel or with reduced motion.
78
+ *
79
+ * `cta-label` + `cta-href` add a pill button at the bottom of any variant's column.
51
80
  *
52
81
  * The heading (when `href` is set) and the button fire a *cancelable* `mega-menu-select` event
53
82
  * (detail: `{ href }`) before navigating; a host doing client-side routing calls
54
- * `event.preventDefault()` on it.
83
+ * `event.preventDefault()` on it. A link whose `href` is the page being shown (see `st-header`'s
84
+ * `current-path`) gets `aria-current="page"`.
55
85
  *
56
86
  * @slot - The column's links, or nested `st-mega-menu-column` groups.
57
87
  * @fires mega-menu-select - The heading link or the button was clicked (cancelable; detail `{ href }`).
88
+ * @csspart top - The product card's top row (icon tile and pills).
89
+ * @csspart icon - The product card's icon tile. With `icon-src` it holds the image (one, or two with `icon-src-dark`) at 28px, on the same tinted tile.
90
+ * @csspart tag - The product card's tag pill.
91
+ * @csspart current - The product card's "You are here" pill.
58
92
  * @csspart heading - The heading text or link.
59
93
  * @csspart description - The line under the heading.
60
94
  * @csspart items - The box holding the links.
61
95
  * @csspart cta - The pill button.
96
+ * @csspart decoration - The decorative line art of a `product` card (`decoration` other than `none`).
62
97
  * @cssprop --st-mega-menu-column-padding - Overrides the padding of a `card`/`accent` column.
98
+ * @cssprop --st-mega-menu-column-accent - The accent of a `product` card (default `--st-color-accent`); `accent` sets it.
99
+ * @cssprop --st-mega-menu-column-lift - The hover/focus lift of a `product` card (default `-3px`); `st-dropdown` sets it to `0px` while `inline`.
100
+ * @cssprop --st-mega-menu-column-deco-opacity - The resting opacity of the `decoration` line art (default `0.28`); raise or lower it per theme, e.g. on dark surfaces.
101
+ * @cssprop --st-mega-menu-column-deco-transform - The hover/focus shift of the `decoration` line art (default `translate(-6px, 4px)`); `st-dropdown` sets it to `none` while `inline`.
63
102
  */
64
103
  declare class MegaMenuColumn extends LitElement {
65
104
  static styles: lit.CSSResult;
@@ -67,15 +106,53 @@ declare class MegaMenuColumn extends LitElement {
67
106
  /** Makes the heading a link (e.g. to the section's overview page). */
68
107
  href: string;
69
108
  description: string;
70
- /** `plain` (default), `card` (tinted tile) or `accent` (solid accent tile, light text). */
71
- variant: 'plain' | 'card' | 'accent';
109
+ /** `plain` (default), `card` (tinted tile), `accent` (solid accent tile, light text) or `product` (a product card). */
110
+ variant: 'plain' | 'card' | 'accent' | 'product';
72
111
  /** Text of a pill button at the bottom of the column; needs `cta-href`. */
73
112
  ctaLabel: string;
74
113
  ctaHref: string;
114
+ /**
115
+ * Variant the column takes while its heading or button links to the page being shown, e.g. a card
116
+ * that turns accent on its own product page. Empty (default) keeps `variant` at all times.
117
+ */
118
+ currentVariant: '' | 'plain' | 'card' | 'accent';
119
+ /** Small icon tile on a `product` card: an iconify icon name, e.g. `heroicons:book-open`. */
120
+ icon: string;
121
+ /** Image icon of a `product` card (28px inside the 44px tile), e.g. a product logo. Replaces the iconify `icon` when set. */
122
+ iconSrc: string;
123
+ /** Dark-theme variant of `icon-src`, shown on the site's dark theme (`:root.dark`) in place of it. Needs `icon-src`. */
124
+ iconSrcDark: string;
125
+ /** Short label pill on the top row of a `product` card, e.g. `Open source`. */
126
+ tag: string;
127
+ /** Accent of a `product` card, any CSS colour (sets `--st-mega-menu-column-accent`). */
128
+ accent: string;
129
+ /**
130
+ * Decorative curvy line art behind a `product` card's top-right corner: `flow` (lines fanning down-left),
131
+ * `orbit` (concentric arcs), `waves` (parallel waves across the top) or `ribbon` (crossing loops).
132
+ * `none` (default) draws nothing. Other variants ignore it.
133
+ */
134
+ decoration: 'none' | 'flow' | 'orbit' | 'waves' | 'ribbon';
135
+ /** "You are here" marker on the `product` card of the page being shown. */
136
+ currentLabel: string;
137
+ /** Page path the header is showing; set by `st-header`. A link whose href matches gets `aria-current="page"`. */
138
+ currentPath: string;
139
+ /**
140
+ * True while the column is the page being shown: while `current-variant` applies, or always for a
141
+ * `product` card. Set by the column, never from outside.
142
+ */
143
+ current: boolean;
144
+ /** Whether the links slot has any links, so a `product` card draws its divider only above them. */
145
+ private hasLinks;
146
+ private onLinksSlotChange;
147
+ protected willUpdate(changed: Map<string, unknown>): void;
75
148
  private select;
76
149
  private renderHeading;
150
+ private renderDecoration;
151
+ /** The tile's content: the `icon-src` image (light, plus the dark one when `icon-src-dark` is set), else the iconify `icon`. */
152
+ private renderTileIcon;
153
+ private renderTop;
77
154
  private renderCta;
78
- render(): lit.TemplateResult<1>;
155
+ render(): TemplateResult<1>;
79
156
  }
80
157
 
81
158
  /**
@@ -130,6 +207,8 @@ declare class MegaMenuFeature extends LitElement {
130
207
  logoAlt: string;
131
208
  /** Call-to-action text at the bottom of the card; empty hides it. */
132
209
  ctaLabel: string;
210
+ /** Page path the header is showing; set by `st-header`. A card whose `href` matches gets `aria-current="page"`. */
211
+ currentPath: string;
133
212
  private get isExternal();
134
213
  private onClick;
135
214
  render(): lit.TemplateResult<1>;
@@ -138,5 +217,14 @@ declare class MegaMenuFeature extends LitElement {
138
217
  interface MegaMenuSelectEventDetail {
139
218
  href: string;
140
219
  }
220
+ /**
221
+ * Fired on `st-mega-menu` (bubbles, composed) when the number of grid tracks it lays out changes: the intro
222
+ * column, each link column and the featured column. The `mega` dropdown around it uses this to keep a panel
223
+ * with few columns from stretching to the full width.
224
+ */
225
+ declare const MEGA_MENU_LAYOUT_EVENT = "st-mega-menu-layout";
226
+ interface MegaMenuLayoutEventDetail {
227
+ tracks: number;
228
+ }
141
229
 
142
- export { MegaMenu, MegaMenuColumn, MegaMenuFeature, type MegaMenuSelectEventDetail };
230
+ export { MEGA_MENU_LAYOUT_EVENT, MegaMenu, MegaMenuColumn, MegaMenuFeature, type MegaMenuLayoutEventDetail, type MegaMenuSelectEventDetail };
@@ -2,11 +2,16 @@ import {
2
2
  MegaMenu,
3
3
  MegaMenuColumn,
4
4
  MegaMenuFeature
5
- } from "../chunk-J6EO4R73.js";
5
+ } from "../chunk-MIBVQXRU.js";
6
+ import {
7
+ MEGA_MENU_LAYOUT_EVENT
8
+ } from "../chunk-ER7MCPDV.js";
9
+ import "../chunk-UKIVLF7S.js";
6
10
  import "../chunk-WTD2YIAA.js";
7
- import "../chunk-KMU6ABQF.js";
11
+ import "../chunk-NXUS2CH7.js";
8
12
  import "../chunk-EUXUH3YW.js";
9
13
  export {
14
+ MEGA_MENU_LAYOUT_EVENT,
10
15
  MegaMenu,
11
16
  MegaMenuColumn,
12
17
  MegaMenuFeature
@@ -4,9 +4,8 @@ import { LitElement } from 'lit';
4
4
  /**
5
5
  * A responsive grid of `st-menu-grid-item`s — the "rich" nav-menu layout (icon + title +
6
6
  * description per entry, arranged in columns), typically slotted into `st-dropdown`'s default
7
- * slot. A 1:1 port of `SankhyaUI`'s React `MenuGrid` (`SankhyaCMS/SankhyaUI/src/components/Menu`):
8
- * same markup (`.menu-grid-container` > `.menu-grid.columns-N`), gap and breakpoints (768px: 2–4
9
- * columns → 2; 480px: everything → 1; a 1-column grid stays 1).
7
+ * slot. Markup is `.menu-grid-container` > `.menu-grid.columns-N`; breakpoints: at 768px, 2–4
8
+ * columns become 2; at 480px, everything becomes 1 (a 1-column grid stays 1).
10
9
  */
11
10
  declare class MenuGrid extends LitElement {
12
11
  static styles: lit.CSSResult;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MenuGrid
3
- } from "../chunk-SMLR736E.js";
4
- import "../chunk-KMU6ABQF.js";
3
+ } from "../chunk-PV6OCXXN.js";
4
+ import "../chunk-NXUS2CH7.js";
5
5
  import "../chunk-EUXUH3YW.js";
6
6
  export {
7
7
  MenuGrid
@@ -3,16 +3,14 @@ import { LitElement } from 'lit';
3
3
 
4
4
  /**
5
5
  * One entry in an `st-menu-grid` — icon (via `slot="icon"`) + title on one line, an optional
6
- * description below, and an optional corner badge ("New", "Popular", ...). A 1:1 port of
7
- * `SankhyaUI`'s React `MenuGridItem` (`SankhyaCMS/SankhyaUI/src/components/Menu`): same markup and
8
- * CSS, with its `motion` effects redone in CSS — fades up the first time it scrolls into view,
9
- * scales to 1.02 on hover / 0.98 while pressed, the icon tilts on hover, the badge pops in.
10
- * Colors come from the suite theme rather than per-item utility classes.
6
+ * description below, and an optional corner badge ("New", "Popular", ...). Effects are CSS:
7
+ * fades up the first time it scrolls into view, scales to 1.02 on hover / 0.98 while pressed, the
8
+ * icon tilts on hover, the badge pops in. Colors come from the suite theme rather than per-item
9
+ * utility classes.
11
10
  *
12
- * An `http(s)` `href` opens in a new tab, like the source. Any other `href` fires a *cancelable*
11
+ * An `http(s)` `href` opens in a new tab. Any other `href` fires a *cancelable*
13
12
  * `menu-grid-item-select` event (detail: `{ href }`) first: a host doing client-side routing calls
14
- * `event.preventDefault()` on it, which also cancels the anchor's own navigation (the source used
15
- * react-router's `Link` here; the suite apps have no router).
13
+ * `event.preventDefault()` on it, which also cancels the anchor's own navigation.
16
14
  */
17
15
  declare class MenuGridItem extends LitElement {
18
16
  /** `focus()` on the element focuses its link, so `st-dropdown` can arrow-key between items. */
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MenuGridItem
3
- } from "../chunk-JQY2G4QK.js";
4
- import "../chunk-KMU6ABQF.js";
3
+ } from "../chunk-2GTR37PU.js";
4
+ import "../chunk-NXUS2CH7.js";
5
5
  import "../chunk-EUXUH3YW.js";
6
6
  export {
7
7
  MenuGridItem
@@ -3,18 +3,20 @@ import { LitElement } from 'lit';
3
3
 
4
4
  /**
5
5
  * A single flat nav row — icon (`slot="icon"`) + title + badge on one line, an optional
6
- * description below — as opposed to `st-menu-grid-item`'s card for a multi-column grid. A 1:1
7
- * port of `SankhyaUI`'s React `MenuItem` (`SankhyaCMS/SankhyaUI/src/components/Menu`): same
8
- * markup and CSS, with its `motion` effects redone in CSS — nudges right and scales to 1.01 on
9
- * hover / 0.99 while pressed, the icon tilts on hover, the badge pops in, the description fades
10
- * in. Colors come from the suite theme rather than per-item utility classes.
6
+ * description below — as opposed to `st-menu-grid-item`'s card for a multi-column grid. Effects
7
+ * are CSS: nudges right and scales to 1.01 on hover / 0.99 while pressed, the icon tilts on hover,
8
+ * the badge pops in, the description fades in. Colors come from the suite theme rather than
9
+ * per-item utility classes.
11
10
  *
12
11
  * Renders a real `<a href>` but fires a *cancelable* `menu-item-select` event (detail: `{ href }`)
13
- * before navigating — a host doing client-side routing calls `event.preventDefault()` on it (the
14
- * source used react-router's `Link` here; the suite apps have no router).
12
+ * before navigating — a host doing client-side routing calls `event.preventDefault()` on it.
13
+ *
14
+ * It is the current page (`aria-current="page"`, shown as active) when `active` is set, or when the
15
+ * `href` matches `currentPath`, which an enclosing `st-header` sets from its `current-path`.
15
16
  *
16
17
  * @slot icon - The row's icon, sized to `icon-size` (16px, or 14px when `compact`).
17
18
  * @cssprop --st-menu-item-icon-size - Width and height of the slotted icon; `icon-size` sets it.
19
+ * @cssprop --st-menu-item-arrow - A trailing glyph (e.g. `'→'`) drawn after a `link` variant's title; none by default, and not drawn on a link that opens a new tab.
18
20
  */
19
21
  declare class MenuItem extends LitElement {
20
22
  /** `focus()` on the element focuses its link, so `st-dropdown` can arrow-key between items. */
@@ -34,6 +36,8 @@ declare class MenuItem extends LitElement {
34
36
  badge: string;
35
37
  /** Highlights this row as the current page (source: `isActive`). */
36
38
  active: boolean;
39
+ /** Page path the header is showing; set by `st-header` (from its `current-path`), so this row can compare its `href` with it. */
40
+ currentPath: string;
37
41
  compact: boolean;
38
42
  /** Suppresses the description even when `description` is set (source: `showDescription`, default `true`). */
39
43
  showDescription: boolean;
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  MenuItem
3
- } from "../chunk-R5G6KFTJ.js";
3
+ } from "../chunk-NXKDZWS7.js";
4
+ import "../chunk-UKIVLF7S.js";
4
5
  import "../chunk-WTD2YIAA.js";
5
- import "../chunk-KMU6ABQF.js";
6
+ import "../chunk-NXUS2CH7.js";
6
7
  import "../chunk-EUXUH3YW.js";
7
8
  export {
8
9
  MenuItem
@@ -0,0 +1,69 @@
1
+ import * as lit from 'lit';
2
+ import { LitElement } from 'lit';
3
+
4
+ interface PlanCardItem {
5
+ id: string;
6
+ /** Iconify icon name, e.g. `mdi:rocket-launch`. */
7
+ icon?: string;
8
+ title: string;
9
+ /** Small pill beside the title, e.g. "Most popular". */
10
+ badge?: string;
11
+ /** `highlight` (cyan, navy text) or `primary` (navy, white text). Default `primary`. */
12
+ badgeTone?: 'highlight' | 'primary';
13
+ description?: string;
14
+ bullets?: string[];
15
+ /** Label of the card's button. */
16
+ actionLabel: string;
17
+ /** Target of the button when the cards have no `quoteDialog`. */
18
+ href?: string;
19
+ /** The highlighted card: white with a 2px navy border and a navy button. */
20
+ featured?: boolean;
21
+ }
22
+ /**
23
+ * A row of plan or offer cards with a header above them. Each card has an icon, a title with an
24
+ * optional badge, a description, check-marked bullets and a button at the foot of the card.
25
+ *
26
+ * A button opens a `st-quote-dialog` when `quote-dialog` names its `id`: it fires a window
27
+ * `st-quote-open` event with `{ dialog, option: item.id, trigger }` and does not navigate. Without
28
+ * `quote-dialog`, the button is a link to `href`. The footnote's action (`footnote-action-label`)
29
+ * opens the same dialog with the option `unsure`. Put `{action}` in `footnote` to place that button
30
+ * inside the sentence (the text around it is then plain text, not Markdown); without the token the
31
+ * button follows the footnote.
32
+ *
33
+ * @cssprop --st-plan-cards-padding - Overrides the block's padding.
34
+ * @cssprop --st-plan-cards-lead-color - Colour of the line under the title (default `--st-cms-text`).
35
+ * @csspart header - The eyebrow, title and lead block.
36
+ * @csspart grid - The grid of cards.
37
+ * @csspart card - One plan card.
38
+ * @csspart icon - The icon tile.
39
+ * @csspart badge - The pill beside a card title.
40
+ * @csspart action - The card button (a `<button>` with `quote-dialog`, otherwise a link with `href`).
41
+ * @csspart footnote - The footnote under the cards.
42
+ * @csspart footnote-action - The text button in the footnote.
43
+ */
44
+ declare class PlanCards extends LitElement {
45
+ static styles: lit.CSSResult;
46
+ /** Small uppercase label above the title. */
47
+ eyebrow: string;
48
+ title: string;
49
+ /** The line under the title. */
50
+ subtitle: string;
51
+ /** The cards, in order. */
52
+ items: PlanCardItem[];
53
+ /** Markdown under the cards, centred. Put `{action}` where the footnote's text button goes. */
54
+ footnote: string;
55
+ /** Label of a text button after the footnote. Opens the quote dialog with the option `unsure`. */
56
+ footnoteActionLabel: string;
57
+ /** `id` of a `st-quote-dialog`. Set, the card buttons open that dialog instead of linking. */
58
+ quoteDialog: string;
59
+ /** Fires the window `st-quote-open` event for the dialog. The page does not navigate. */
60
+ private openQuote;
61
+ private renderFootnoteAction;
62
+ private renderAction;
63
+ private renderCard;
64
+ /** `{action}` in the footnote becomes the inline text button; otherwise Markdown, then the button. */
65
+ private renderFootnote;
66
+ render(): lit.TemplateResult<1>;
67
+ }
68
+
69
+ export { type PlanCardItem, PlanCards };
@@ -0,0 +1,13 @@
1
+ import {
2
+ PlanCards
3
+ } from "../chunk-FF2LWEF3.js";
4
+ import "../chunk-FOUK3NHR.js";
5
+ import "../chunk-XS6LNTSH.js";
6
+ import "../chunk-TJK55CJ2.js";
7
+ import "../chunk-KZ7PMFWS.js";
8
+ import "../chunk-NXUS2CH7.js";
9
+ import "../chunk-EUXUH3YW.js";
10
+ export {
11
+ PlanCards
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,127 @@
1
+ import * as lit from 'lit';
2
+ import { LitElement } from 'lit';
3
+
4
+ interface ProductNavLink {
5
+ label: string;
6
+ /** An in-page anchor, e.g. `#features`. A link to another site (e.g. the docs) opens in a new tab, with the ↗ icon. */
7
+ href: string;
8
+ }
9
+ /**
10
+ * A product sub-navigation bar for a product page, shown under the site header: a lockup (the product
11
+ * icon, a prefix and a name, with a tagline under it), in-page section links, an optional site-menu
12
+ * button and an optional external button.
13
+ *
14
+ * The lockup is one link (icon, wordmark, rule and tagline) to `brand-href`.
15
+ *
16
+ * The link whose section is in view gets `aria-current="true"`, found with an IntersectionObserver
17
+ * on the sections the `#anchor` links point at. On phones the links move to their own row and scroll
18
+ * sideways inside the bar. `sticky` pins the bar to the top of the viewport; set
19
+ * `--st-product-nav-top` to the height of a fixed site header above it.
20
+ *
21
+ * `embedded` drops the bar's own background, rule, shadow and sticky positioning, so it fills the
22
+ * row of a host, e.g. the `slot="context"` of `st-header` (its context mode). Desktop: lockup, links
23
+ * centred, site-menu button and action pill at the right, vertically centred. Phones: lockup (wordmark
24
+ * 18px, icon 32px, then 28px under 480px; tagline 9px under 480px and still shown), then a
25
+ * sideways-scrolling links row, then a compact action pill.
26
+ *
27
+ * `site-menu-label` adds a 44px hamburger button before the action pill. Clicking it dispatches
28
+ * `product-nav-site-menu`, which the host `st-header` answers by opening its site menu. While that menu
29
+ * is open the host sets `site-menu-open`, which is reflected to the button's `aria-expanded`.
30
+ *
31
+ * `scroll-spy` marks the link for the section currently in view with `aria-current="location"` and
32
+ * an active style (accent colour and a 2px underline). The section is the one whose top is nearest
33
+ * the top of the viewport at or above a 64px line; none is marked while the page is above the first
34
+ * section.
35
+ *
36
+ * @fires product-nav-site-menu - The site-menu button was clicked. Detail: `{ trigger }`, the button itself, so the host can return focus to it. Bubbles, composed.
37
+ * @attr icon - Product icon image URL, shown in the brand link before the wordmark (40px; 32px, then 28px under 480px, when `embedded`).
38
+ * @attr icon-dark - Dark-theme icon image URL, shown on `:root.dark` in place of `icon`. Needs `icon`.
39
+ * @attr label - Accessible name of the `<nav>` (e.g. `T-pilot`). Default: the brand prefix and name (e.g. `T-pilot`).
40
+ * @attr brand-href - Target of the brand link (icon and wordmark). Default `#top`.
41
+ * @attr site-menu-label - Accessible name of the site-menu button (a hamburger before the action pill). Empty (default): no button.
42
+ * @attr site-menu-open - Reflected. True while the host header's site menu is open, which sets the button's `aria-expanded`. Set by the host header, never from outside.
43
+ * @attr embedded - Fills the host row: no sticky positioning, background, rule or shadow of its own.
44
+ * @attr scroll-spy - Marks the link for the section in view (`aria-current="location"`).
45
+ * @cssprop --st-product-nav-top - The `top` offset of a sticky bar (default `0px`).
46
+ * @cssprop --st-product-nav-z - The `z-index` of a sticky bar (default `90`, under st-header's 100 so its open mega panel paints above).
47
+ * @cssprop --st-product-nav-border - Colour of the bottom rule (default `--st-cms-primary-100`).
48
+ * @csspart nav - The `<nav>` landmark.
49
+ * @csspart lockup - The wrapper of the brand link.
50
+ * @csspart brand - The brand link (icon, wordmark, rule and tagline).
51
+ * @csspart icon - The product icon image (one, or two when `icon-dark` is set).
52
+ * @csspart links - The list of section links.
53
+ * @csspart link - One section link.
54
+ * @csspart site-menu - The site-menu button.
55
+ * @csspart action - The external button.
56
+ */
57
+ declare class ProductNav extends LitElement {
58
+ static styles: lit.CSSResult;
59
+ /** Brand prefix, e.g. `T-`. Shown in the brand navy. */
60
+ brandPrefix: string;
61
+ /** Product name, e.g. `pilot`. Shown in the brand azure with an underline. */
62
+ brandName: string;
63
+ /** Small line under the name, e.g. `by Sankhyatronics`. Plain text inside the brand link. */
64
+ brandTagline: string;
65
+ /** Target of the brand link (the icon, wordmark, rule and tagline). */
66
+ brandHref: string;
67
+ /** Product icon image URL, shown inside the brand link before the wordmark (40px; 32px and 28px on phones when `embedded`). Omitted when empty. */
68
+ icon: string;
69
+ /** Dark-theme variant of `icon`, shown on the site's dark theme (`:root.dark`) in place of it. Needs `icon`; without it `icon` shows on every theme. */
70
+ iconDark: string;
71
+ /** In-page section links. */
72
+ links: ProductNavLink[];
73
+ /** Label of the external button at the end of the bar. Shown only together with `href`. */
74
+ actionLabel: string;
75
+ /** Shorter button label for phones in `embedded` mode (e.g. `Open ↗`), so the links row keeps its room. Optional; the full `action-label` is used otherwise. */
76
+ actionShortLabel: string;
77
+ /** Target of the external button. It opens in the same tab. */
78
+ href: string;
79
+ /** Accessible name of the site-menu button, e.g. `Sankhyatronics menu`. Empty (default): no button. Clicking it dispatches `product-nav-site-menu`. */
80
+ siteMenuLabel: string;
81
+ /** True while the host header's site menu is open. Set by the header, never from outside: it drives the button's `aria-expanded`. */
82
+ siteMenuOpen: boolean;
83
+ /** Pins the bar to the top of the viewport (`position: sticky`). Ignored when `embedded`. */
84
+ sticky: boolean;
85
+ /** Accessible name of the `<nav>` landmark, e.g. `T-pilot`. Falls back to the brand prefix and name. */
86
+ label: string;
87
+ /** Fills the row of a host header (see the class docs): no bar background, rule, shadow or sticky positioning. */
88
+ embedded: boolean;
89
+ /** Marks the link for the section in view with `aria-current="location"` and an active style. */
90
+ scrollSpy: boolean;
91
+ /** The id of the section in view, from the IntersectionObserver. */
92
+ private activeId;
93
+ private observer?;
94
+ /** The sections the scroll spy measures (set while `scrollSpy` is on). */
95
+ private spyTargets;
96
+ private spyFrame;
97
+ /** Distance from the top of the viewport that counts as "passed", matching the 64px header row. */
98
+ private static readonly SPY_OFFSET;
99
+ /** Extra pixels past the offset line, so a section an anchor jump lands just under it (sub-pixel) still counts. */
100
+ private static readonly SPY_TOLERANCE;
101
+ connectedCallback(): void;
102
+ disconnectedCallback(): void;
103
+ protected updated(changed: Map<string, unknown>): void;
104
+ /** When the links row scrolls sideways (phones), keeps the current section's link in view. Only the
105
+ * row scrolls, never the page. */
106
+ private revealActiveLink;
107
+ /**
108
+ * Scroll spy: the section in view is the LAST one, in document order, whose top is at or above
109
+ * `SPY_OFFSET + SPY_TOLERANCE`. None above that line (above the first section) leaves no active id.
110
+ * At the bottom of the page the last section is active, even if its top never reaches the line.
111
+ */
112
+ private updateScrollSpy;
113
+ /** Scroll spy re-checks on every scroll frame: an IntersectionObserver alone misses a long section passing the line. */
114
+ private onSpyScroll;
115
+ private stopSpyScroll;
116
+ /** Watches the sections the `#anchor` links point at, so the link for the one in view is current. */
117
+ private observe;
118
+ /** The product icon: the light image, plus the dark one (theme-switched) when `iconDark` is set. Alt is empty: the link text names the product. */
119
+ private renderIcon;
120
+ /** The site-menu button, before the action pill. Only with `site-menu-label`. */
121
+ private renderSiteMenu;
122
+ /** Dispatches `product-nav-site-menu`, with the button as the detail's `trigger`, for the host header to open its site menu. */
123
+ private onSiteMenuClick;
124
+ render(): lit.TemplateResult<1>;
125
+ }
126
+
127
+ export { ProductNav, type ProductNavLink };
@@ -0,0 +1,11 @@
1
+ import {
2
+ ProductNav
3
+ } from "../chunk-OEOE6IFY.js";
4
+ import "../chunk-T4BIN37Q.js";
5
+ import "../chunk-WTD2YIAA.js";
6
+ import "../chunk-NXUS2CH7.js";
7
+ import "../chunk-EUXUH3YW.js";
8
+ export {
9
+ ProductNav
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -2,23 +2,61 @@ import * as lit from 'lit';
2
2
  import { LitElement } from 'lit';
3
3
 
4
4
  /**
5
- * Rounded call-to-action banner (title, subtitle, one outlined button) on a dark panel or a
6
- * background image. Port of `SankhyaUI`'s React `PromoBanner`; the button fires an `action` event
7
- * (detail `{ href }`, empty unless set) in place of `onAction`.
5
+ * Rounded call-to-action banner (title, subtitle, one or two outlined buttons) on a dark panel or a
6
+ * background image. A button with an `href` is a real link (`<a href>`): the browser follows it
7
+ * unless the `action` event is cancelled, so external URLs, `#anchors` and `/path?x=y` work without
8
+ * JavaScript. A button without an `href` is a `<button>`. `variant="accent"` fills the banner with
9
+ * the brand colour.
8
10
  *
11
+ * `cta-note` is a short line with a small padlock under the buttons (e.g. "No credit card needed"). In the
12
+ * inline layout it sits under the buttons in the right-hand group, left-aligned with the first button.
13
+ *
14
+ * `layout="inline"` sets the copy on the left and the buttons on the right of one row (wrapping on
15
+ * small screens), with 56px/48px padding (24px on phones). Its buttons are 52px pills; with
16
+ * `variant="accent"` the first is a white pill with navy text and the second a transparent pill with
17
+ * a light blue outline. `button-style="pill"` gives the buttons the same pill shape in the default
18
+ * `stack` layout, which is otherwise unchanged.
19
+ *
20
+ * @fires action - Cancelable, before following the link. Detail `{ href, kind? }`. `kind` is `secondary` for the second button only.
9
21
  * @cssprop --st-promo-banner-margin - Overrides the banner's margin.
10
22
  * @cssprop --st-promo-banner-padding - Overrides the banner's padding.
23
+ * @cssprop --st-promo-banner-cta-note-color - Colour of the `cta-note` line (default `currentColor` at 85%).
24
+ * @csspart action - The primary button (`<a>` with an `href`, `<button>` without).
25
+ * @csspart secondary-action - The second button.
26
+ * @csspart cta-note - The small line with a padlock under the buttons (`cta-note`).
11
27
  */
12
28
  declare class PromoBanner extends LitElement {
13
29
  static styles: lit.CSSResult;
14
30
  title: string;
15
31
  subtitle: string;
16
32
  actionLabel: string;
33
+ /** Shorter `action-label` for phones (< 480px); the full label stays the accessible name. */
34
+ actionLabelShort: string;
35
+ /** Shorter `secondary-action-label` for phones (< 480px). */
36
+ secondaryActionLabelShort: string;
37
+ /** Target of the first button. With a value the button is a link; the `action` event can cancel the navigation. */
17
38
  href: string;
18
39
  imageSrc: string;
40
+ /** Label of a second, outlined button next to the first. */
41
+ secondaryActionLabel: string;
42
+ /** Target of the second button, sent in the `action` event detail. */
43
+ secondaryHref: string;
44
+ /** `default` is the dark panel; `accent` fills the banner with the brand colour and makes the first button white. */
45
+ variant: 'default' | 'accent';
19
46
  inverted: boolean;
47
+ /** `stack` (default) centres the copy above the buttons; `inline` puts the buttons beside the copy. */
48
+ layout: 'stack' | 'inline';
49
+ /** `default` keeps the plain buttons; `pill` gives them the 52px pill shape (`inline` always uses pills). */
50
+ buttonStyle: 'default' | 'pill';
51
+ /** Short line with a small check under the buttons (e.g. "No credit card needed"). Empty hides it. */
52
+ ctaNote: string;
53
+ /** Iconify icon for the `cta-note` line (e.g. `mdi:open-source-initiative`). Empty keeps the padlock. */
54
+ ctaNoteIcon: string;
20
55
  protected willUpdate(): void;
21
- private onAction;
56
+ /** Fires the cancelable `action` event; a cancelled click keeps the page where it is. */
57
+ private emitAction;
58
+ private renderCta;
59
+ private renderCopy;
22
60
  render(): lit.TemplateResult<1>;
23
61
  }
24
62
 
@@ -1,8 +1,11 @@
1
1
  import {
2
2
  PromoBanner
3
- } from "../chunk-VWS53WY4.js";
4
- import "../chunk-FZ36KL73.js";
5
- import "../chunk-KMU6ABQF.js";
3
+ } from "../chunk-EW2RK5Y6.js";
4
+ import "../chunk-BEWX3E6P.js";
5
+ import "../chunk-T4BIN37Q.js";
6
+ import "../chunk-WTD2YIAA.js";
7
+ import "../chunk-KZ7PMFWS.js";
8
+ import "../chunk-NXUS2CH7.js";
6
9
  import "../chunk-EUXUH3YW.js";
7
10
  export {
8
11
  PromoBanner