@affinda/wc 0.0.6 → 0.0.7

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 (150) hide show
  1. package/dist/affinda/af-heading.af-logo.af-nav-item.af-navbar.af-text.entry.esm.js.map +1 -1
  2. package/dist/affinda/af-testimonial-carousel.entry.esm.js.map +1 -0
  3. package/dist/affinda/af-testimonial-stat.entry.esm.js.map +1 -0
  4. package/dist/affinda/af-testimonial.entry.esm.js.map +1 -0
  5. package/dist/affinda/af-typography-lockup.entry.esm.js.map +1 -1
  6. package/dist/affinda/affinda.esm.js +1 -1
  7. package/dist/affinda/index.esm.js +1 -1
  8. package/dist/affinda/{p-bf697823.entry.js → p-16c84e60.entry.js} +2 -2
  9. package/dist/affinda/{p-d33de48f.entry.js → p-32f46944.entry.js} +2 -2
  10. package/dist/affinda/{p-b79f976e.entry.js → p-43324b6d.entry.js} +2 -2
  11. package/dist/affinda/p-56284540.entry.js +2 -0
  12. package/dist/affinda/p-56284540.entry.js.map +1 -0
  13. package/dist/affinda/p-66daadde.entry.js +2 -0
  14. package/dist/affinda/p-66daadde.entry.js.map +1 -0
  15. package/dist/affinda/{p-f8d89fb6.entry.js → p-750a694b.entry.js} +2 -2
  16. package/dist/affinda/{p-cb218d26.entry.js → p-9c0b3380.entry.js} +2 -2
  17. package/dist/affinda/{p-a8d223ca.entry.js → p-9e5bef28.entry.js} +2 -2
  18. package/dist/affinda/p-UbNmjSSX.js +3 -0
  19. package/dist/affinda/p-UbNmjSSX.js.map +1 -0
  20. package/dist/affinda/{p-47629246.entry.js → p-c8628633.entry.js} +2 -2
  21. package/dist/affinda/{p-9c22948a.entry.js → p-eff7eff1.entry.js} +2 -2
  22. package/dist/affinda/p-f53b4847.entry.js +2 -0
  23. package/dist/affinda/p-f53b4847.entry.js.map +1 -0
  24. package/dist/affinda/p-fedaec5a.entry.js +2 -0
  25. package/dist/affinda/{p-92f5a5d5.entry.js.map → p-fedaec5a.entry.js.map} +1 -1
  26. package/dist/cjs/af-aspect-ratio.cjs.entry.js +1 -1
  27. package/dist/cjs/af-button-group.cjs.entry.js +1 -1
  28. package/dist/cjs/af-button.cjs.entry.js +1 -1
  29. package/dist/cjs/af-card.cjs.entry.js +1 -1
  30. package/dist/cjs/af-color-swatch.cjs.entry.js +1 -1
  31. package/dist/cjs/af-container.cjs.entry.js +1 -1
  32. package/dist/cjs/af-heading.af-logo.af-nav-item.af-navbar.af-text.entry.cjs.js.map +1 -1
  33. package/dist/cjs/af-heading_5.cjs.entry.js +3 -3
  34. package/dist/cjs/af-icon-button.cjs.entry.js +1 -1
  35. package/dist/cjs/af-testimonial-carousel.cjs.entry.js +90 -0
  36. package/dist/cjs/af-testimonial-carousel.entry.cjs.js.map +1 -0
  37. package/dist/cjs/af-testimonial-stat.cjs.entry.js +22 -0
  38. package/dist/cjs/af-testimonial-stat.entry.cjs.js.map +1 -0
  39. package/dist/cjs/af-testimonial.cjs.entry.js +18 -0
  40. package/dist/cjs/af-testimonial.entry.cjs.js.map +1 -0
  41. package/dist/cjs/af-typography-lockup.cjs.entry.js +2 -2
  42. package/dist/cjs/af-typography-lockup.entry.cjs.js.map +1 -1
  43. package/dist/cjs/affinda.cjs.js +2 -2
  44. package/dist/cjs/{index-1GcSSOS3.js → index-CNijn8X5.js} +57 -7
  45. package/dist/cjs/index-CNijn8X5.js.map +1 -0
  46. package/dist/cjs/index.cjs.js +1 -1
  47. package/dist/cjs/loader.cjs.js +2 -2
  48. package/dist/collection/collection-manifest.json +4 -1
  49. package/dist/collection/components/af-heading/af-heading.css +1 -1
  50. package/dist/collection/components/af-testimonial/af-testimonial.css +143 -0
  51. package/dist/collection/components/af-testimonial/af-testimonial.js +118 -0
  52. package/dist/collection/components/af-testimonial/af-testimonial.js.map +1 -0
  53. package/dist/collection/components/af-testimonial-carousel/af-testimonial-carousel.css +96 -0
  54. package/dist/collection/components/af-testimonial-carousel/af-testimonial-carousel.js +100 -0
  55. package/dist/collection/components/af-testimonial-carousel/af-testimonial-carousel.js.map +1 -0
  56. package/dist/collection/components/af-testimonial-stat/af-testimonial-stat.css +41 -0
  57. package/dist/collection/components/af-testimonial-stat/af-testimonial-stat.js +87 -0
  58. package/dist/collection/components/af-testimonial-stat/af-testimonial-stat.js.map +1 -0
  59. package/dist/collection/components/af-text/af-text.css +1 -1
  60. package/dist/collection/components/af-typography-lockup/af-typography-lockup.css +1 -1
  61. package/dist/components/af-aspect-ratio.js +1 -1
  62. package/dist/components/af-button-group.js +1 -1
  63. package/dist/components/af-button.js +1 -1
  64. package/dist/components/af-card.js +1 -1
  65. package/dist/components/af-color-swatch.js +1 -1
  66. package/dist/components/af-container.js +1 -1
  67. package/dist/components/af-heading.js +1 -1
  68. package/dist/components/af-icon-button.js +1 -1
  69. package/dist/components/af-logo.js +1 -1
  70. package/dist/components/af-nav-item.js +1 -1
  71. package/dist/components/af-navbar.js +1 -1
  72. package/dist/components/af-testimonial-carousel.d.ts +11 -0
  73. package/dist/components/af-testimonial-carousel.js +113 -0
  74. package/dist/components/af-testimonial-carousel.js.map +1 -0
  75. package/dist/components/af-testimonial-stat.d.ts +11 -0
  76. package/dist/components/af-testimonial-stat.js +45 -0
  77. package/dist/components/af-testimonial-stat.js.map +1 -0
  78. package/dist/components/af-testimonial.d.ts +11 -0
  79. package/dist/components/af-testimonial.js +43 -0
  80. package/dist/components/af-testimonial.js.map +1 -0
  81. package/dist/components/af-text.js +1 -1
  82. package/dist/components/af-typography-lockup.js +1 -1
  83. package/dist/components/index.js +13 -13
  84. package/dist/components/{p-Cjv046iG.js → p-Bdy85P7Z.js} +3 -3
  85. package/dist/components/{p-Cjv046iG.js.map → p-Bdy85P7Z.js.map} +1 -1
  86. package/dist/components/{p-DIyOg-i_.js → p-BuySFAGS.js} +4 -4
  87. package/dist/components/{p-DIyOg-i_.js.map → p-BuySFAGS.js.map} +1 -1
  88. package/dist/components/{p-C6idwlD-.js → p-Bxv9iL3G.js} +3 -3
  89. package/dist/components/{p-C6idwlD-.js.map → p-Bxv9iL3G.js.map} +1 -1
  90. package/dist/components/{p-BpGDzCRf.js → p-C0zUdiRs.js} +4 -4
  91. package/dist/components/p-C0zUdiRs.js.map +1 -0
  92. package/dist/components/{p-CaqzUz5o.js → p-C4sw-kYH.js} +3 -3
  93. package/dist/components/{p-CaqzUz5o.js.map → p-C4sw-kYH.js.map} +1 -1
  94. package/dist/components/{p-BHNNF4PT.js → p-CJccTfm5.js} +3 -3
  95. package/dist/components/{p-BHNNF4PT.js.map → p-CJccTfm5.js.map} +1 -1
  96. package/dist/components/{p-DuXQZGjc.js → p-CLA_jBiH.js} +4 -4
  97. package/dist/components/{p-DuXQZGjc.js.map → p-CLA_jBiH.js.map} +1 -1
  98. package/dist/components/{p-CJWIieDU.js → p-Cfj594pp.js} +3 -3
  99. package/dist/components/{p-CJWIieDU.js.map → p-Cfj594pp.js.map} +1 -1
  100. package/dist/components/{p-zwrcq-N2.js → p-ChRDoPDm.js} +52 -7
  101. package/dist/components/p-ChRDoPDm.js.map +1 -0
  102. package/dist/components/{p-cKSy1B8M.js → p-D021PjqL.js} +3 -3
  103. package/dist/components/{p-cKSy1B8M.js.map → p-D021PjqL.js.map} +1 -1
  104. package/dist/components/{p-CRgPNvxI.js → p-DPooX_NW.js} +3 -3
  105. package/dist/components/{p-CRgPNvxI.js.map → p-DPooX_NW.js.map} +1 -1
  106. package/dist/components/{p-DSAo7rhE.js → p-KtmLxy7z.js} +3 -3
  107. package/dist/components/{p-DSAo7rhE.js.map → p-KtmLxy7z.js.map} +1 -1
  108. package/dist/components/{p-Dw33Xm_t.js → p-XAy0kGYd.js} +3 -3
  109. package/dist/components/{p-Dw33Xm_t.js.map → p-XAy0kGYd.js.map} +1 -1
  110. package/dist/esm/af-aspect-ratio.entry.js +1 -1
  111. package/dist/esm/af-button-group.entry.js +1 -1
  112. package/dist/esm/af-button.entry.js +1 -1
  113. package/dist/esm/af-card.entry.js +1 -1
  114. package/dist/esm/af-color-swatch.entry.js +1 -1
  115. package/dist/esm/af-container.entry.js +1 -1
  116. package/dist/esm/af-heading.af-logo.af-nav-item.af-navbar.af-text.entry.js.map +1 -1
  117. package/dist/esm/af-heading_5.entry.js +3 -3
  118. package/dist/esm/af-icon-button.entry.js +1 -1
  119. package/dist/esm/af-testimonial-carousel.entry.js +88 -0
  120. package/dist/esm/af-testimonial-carousel.entry.js.map +1 -0
  121. package/dist/esm/af-testimonial-stat.entry.js +20 -0
  122. package/dist/esm/af-testimonial-stat.entry.js.map +1 -0
  123. package/dist/esm/af-testimonial.entry.js +16 -0
  124. package/dist/esm/af-testimonial.entry.js.map +1 -0
  125. package/dist/esm/af-typography-lockup.entry.js +2 -2
  126. package/dist/esm/af-typography-lockup.entry.js.map +1 -1
  127. package/dist/esm/affinda.js +3 -3
  128. package/dist/esm/{index-Dmaq2rkg.js → index-UbNmjSSX.js} +57 -8
  129. package/dist/{affinda/p-Dmaq2rkg.js.map → esm/index-UbNmjSSX.js.map} +1 -1
  130. package/dist/esm/index.js +1 -1
  131. package/dist/esm/loader.js +3 -3
  132. package/dist/types/components/af-testimonial/af-testimonial.d.ts +23 -0
  133. package/dist/types/components/af-testimonial-carousel/af-testimonial-carousel.d.ts +15 -0
  134. package/dist/types/components/af-testimonial-stat/af-testimonial-stat.d.ts +15 -0
  135. package/dist/types/components.d.ts +105 -0
  136. package/package.json +2 -2
  137. package/dist/affinda/p-92f5a5d5.entry.js +0 -2
  138. package/dist/affinda/p-Dmaq2rkg.js +0 -3
  139. package/dist/cjs/index-1GcSSOS3.js.map +0 -1
  140. package/dist/components/p-BpGDzCRf.js.map +0 -1
  141. package/dist/components/p-zwrcq-N2.js.map +0 -1
  142. package/dist/esm/index-Dmaq2rkg.js.map +0 -1
  143. /package/dist/affinda/{p-bf697823.entry.js.map → p-16c84e60.entry.js.map} +0 -0
  144. /package/dist/affinda/{p-d33de48f.entry.js.map → p-32f46944.entry.js.map} +0 -0
  145. /package/dist/affinda/{p-b79f976e.entry.js.map → p-43324b6d.entry.js.map} +0 -0
  146. /package/dist/affinda/{p-f8d89fb6.entry.js.map → p-750a694b.entry.js.map} +0 -0
  147. /package/dist/affinda/{p-cb218d26.entry.js.map → p-9c0b3380.entry.js.map} +0 -0
  148. /package/dist/affinda/{p-a8d223ca.entry.js.map → p-9e5bef28.entry.js.map} +0 -0
  149. /package/dist/affinda/{p-47629246.entry.js.map → p-c8628633.entry.js.map} +0 -0
  150. /package/dist/affinda/{p-9c22948a.entry.js.map → p-eff7eff1.entry.js.map} +0 -0
@@ -0,0 +1,87 @@
1
+ import { h, Host } from "@stencil/core";
2
+ export class AfTestimonialStat {
3
+ constructor() {
4
+ /**
5
+ * Whether to show left accent border
6
+ */
7
+ this.accentBorder = false;
8
+ }
9
+ render() {
10
+ return (h(Host, { key: 'dec2d76b0cdf8e2b4c9a996046e6537b586ff674' }, h("div", { key: 'c7a9a5c15735850e7eec668e700da23494424c3c', class: `stat ${this.accentBorder ? 'stat--accent' : ''}` }, h("p", { key: 'c876b9e81e3150ef5cc651ee8f7435671b40966b', class: "stat-value" }, this.value), h("p", { key: 'f369972595ed4301eb827a0084388284096ec47f', class: "stat-description" }, this.description))));
11
+ }
12
+ static get is() { return "af-testimonial-stat"; }
13
+ static get encapsulation() { return "scoped"; }
14
+ static get originalStyleUrls() {
15
+ return {
16
+ "$": ["af-testimonial-stat.css"]
17
+ };
18
+ }
19
+ static get styleUrls() {
20
+ return {
21
+ "$": ["af-testimonial-stat.css"]
22
+ };
23
+ }
24
+ static get properties() {
25
+ return {
26
+ "value": {
27
+ "type": "string",
28
+ "mutable": false,
29
+ "complexType": {
30
+ "original": "string",
31
+ "resolved": "string",
32
+ "references": {}
33
+ },
34
+ "required": true,
35
+ "optional": false,
36
+ "docs": {
37
+ "tags": [],
38
+ "text": "The statistic value (e.g., \"95%\", \"10\u00D7\", \"120,000\")"
39
+ },
40
+ "getter": false,
41
+ "setter": false,
42
+ "reflect": false,
43
+ "attribute": "value"
44
+ },
45
+ "description": {
46
+ "type": "string",
47
+ "mutable": false,
48
+ "complexType": {
49
+ "original": "string",
50
+ "resolved": "string",
51
+ "references": {}
52
+ },
53
+ "required": true,
54
+ "optional": false,
55
+ "docs": {
56
+ "tags": [],
57
+ "text": "Description text for the statistic"
58
+ },
59
+ "getter": false,
60
+ "setter": false,
61
+ "reflect": false,
62
+ "attribute": "description"
63
+ },
64
+ "accentBorder": {
65
+ "type": "boolean",
66
+ "mutable": false,
67
+ "complexType": {
68
+ "original": "boolean",
69
+ "resolved": "boolean",
70
+ "references": {}
71
+ },
72
+ "required": false,
73
+ "optional": false,
74
+ "docs": {
75
+ "tags": [],
76
+ "text": "Whether to show left accent border"
77
+ },
78
+ "getter": false,
79
+ "setter": false,
80
+ "reflect": false,
81
+ "attribute": "accent-border",
82
+ "defaultValue": "false"
83
+ }
84
+ };
85
+ }
86
+ }
87
+ //# sourceMappingURL=af-testimonial-stat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"af-testimonial-stat.js","sourceRoot":"","sources":["../../../src/components/af-testimonial-stat/af-testimonial-stat.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAQzD,MAAM,OAAO,iBAAiB;IAN9B;QAiBE;;WAEG;QACK,iBAAY,GAAY,KAAK,CAAC;KAYvC;IAVC,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,4DAAK,KAAK,EAAE,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3D,0DAAG,KAAK,EAAC,YAAY,IAAE,IAAI,CAAC,KAAK,CAAK;gBACtC,0DAAG,KAAK,EAAC,kBAAkB,IAAE,IAAI,CAAC,WAAW,CAAK,CAC9C,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Prop, h, Host } from '@stencil/core';\n\n@Component({\n tag: 'af-testimonial-stat',\n styleUrl: 'af-testimonial-stat.css',\n shadow: false,\n scoped: true,\n})\nexport class AfTestimonialStat {\n /**\n * The statistic value (e.g., \"95%\", \"10×\", \"120,000\")\n */\n @Prop() value!: string;\n\n /**\n * Description text for the statistic\n */\n @Prop() description!: string;\n\n /**\n * Whether to show left accent border\n */\n @Prop() accentBorder: boolean = false;\n\n render() {\n return (\n <Host>\n <div class={`stat ${this.accentBorder ? 'stat--accent' : ''}`}>\n <p class=\"stat-value\">{this.value}</p>\n <p class=\"stat-description\">{this.description}</p>\n </div>\n </Host>\n );\n }\n}\n\n\n"]}
@@ -5,7 +5,7 @@
5
5
  .text {
6
6
  margin: 0;
7
7
  padding: 0;
8
- font-family: 'Helvetica', 'Inter', 'Segoe UI', system-ui, sans-serif;
8
+ font-family: 'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;
9
9
  font-weight: 400;
10
10
  color: var(--colour-typography-body-default, #14343b);
11
11
  letter-spacing: 0;
@@ -40,7 +40,7 @@
40
40
  /* Heading styles */
41
41
  .heading {
42
42
  font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);
43
- font-weight: 500;
43
+ font-weight: 400;
44
44
  color: var(--typography-heading-primary, #14343B);
45
45
  line-height: 1;
46
46
  white-space: pre-wrap;
@@ -1,4 +1,4 @@
1
- import { A as AfAspectRatio$1, d as defineCustomElement$1 } from './p-C6idwlD-.js';
1
+ import { A as AfAspectRatio$1, d as defineCustomElement$1 } from './p-Bxv9iL3G.js';
2
2
 
3
3
  const AfAspectRatio = AfAspectRatio$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfButtonGroup$1, d as defineCustomElement$1 } from './p-Cjv046iG.js';
1
+ import { A as AfButtonGroup$1, d as defineCustomElement$1 } from './p-Bdy85P7Z.js';
2
2
 
3
3
  const AfButtonGroup = AfButtonGroup$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfButton$1, d as defineCustomElement$1 } from './p-cKSy1B8M.js';
1
+ import { A as AfButton$1, d as defineCustomElement$1 } from './p-D021PjqL.js';
2
2
 
3
3
  const AfButton = AfButton$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, h, c as Host } from './p-zwrcq-N2.js';
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-ChRDoPDm.js';
2
2
 
3
3
  const afCardCss = ".sc-af-card-h{display:block;width:100%;min-height:400px}.card.sc-af-card{background:var(--colour-background-level-1, #e8eeed);border-radius:var(--border-radius-card-level-1, 32px);overflow:hidden;position:relative;display:flex;flex-direction:column;min-height:400px;height:100%;box-sizing:border-box}.card--with-image.sc-af-card{background:var(--colour-brand-inkwell, #14343b);min-height:480px}.card__background.sc-af-card{position:absolute;inset:0;pointer-events:none;z-index:0}.card__background-image.sc-af-card{width:100%;height:100%;object-fit:cover;object-position:center}.card__content.sc-af-card{position:relative;padding:40px;display:flex;flex-direction:column;gap:24px;flex:1;box-sizing:border-box;z-index:1}.card__content.sc-af-card-s>img,.card__content .sc-af-card-s>img{width:100%;height:auto;min-height:200px;margin-top:auto;object-fit:cover;object-position:top center}.card__content.sc-af-card-s>af-heading,.card__content .sc-af-card-s>af-heading{margin-bottom:0}.card__content.sc-af-card-s>af-text,.card__content .sc-af-card-s>af-text{line-height:1.44}.card__content--overlay.sc-af-card{backdrop-filter:blur(2px);background:linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0) 100%);padding:32px;padding-top:200px;justify-content:flex-end;--colour-typography-heading-primary:#ffffff;--colour-typography-heading-secondary:#ffffff;--colour-typography-body-default:#ffffff;--colour-typography-body-dark:#ffffff;color:#ffffff}.card__content--overlay.sc-af-card *.sc-af-card{color:#ffffff !important}.card.sc-af-card:not(.card--with-image) .card__content.sc-af-card{color:var(--colour-typography-heading-primary, #14343b)}.card--custom-bg.sc-af-card .card__content.sc-af-card{--colour-typography-heading-primary:#ffffff;--colour-typography-body-default:#ffffff}";
4
4
 
@@ -1,4 +1,4 @@
1
- import { A as AfColorSwatch$1, d as defineCustomElement$1 } from './p-DSAo7rhE.js';
1
+ import { A as AfColorSwatch$1, d as defineCustomElement$1 } from './p-KtmLxy7z.js';
2
2
 
3
3
  const AfColorSwatch = AfColorSwatch$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfContainer$1, d as defineCustomElement$1 } from './p-CRgPNvxI.js';
1
+ import { A as AfContainer$1, d as defineCustomElement$1 } from './p-DPooX_NW.js';
2
2
 
3
3
  const AfContainer = AfContainer$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfHeading$1, d as defineCustomElement$1 } from './p-DIyOg-i_.js';
1
+ import { A as AfHeading$1, d as defineCustomElement$1 } from './p-BuySFAGS.js';
2
2
 
3
3
  const AfHeading = AfHeading$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfIconButton$1, d as defineCustomElement$1 } from './p-Dw33Xm_t.js';
1
+ import { A as AfIconButton$1, d as defineCustomElement$1 } from './p-XAy0kGYd.js';
2
2
 
3
3
  const AfIconButton = AfIconButton$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfLogo$1, d as defineCustomElement$1 } from './p-CaqzUz5o.js';
1
+ import { A as AfLogo$1, d as defineCustomElement$1 } from './p-C4sw-kYH.js';
2
2
 
3
3
  const AfLogo = AfLogo$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfNavItem$1, d as defineCustomElement$1 } from './p-CJWIieDU.js';
1
+ import { A as AfNavItem$1, d as defineCustomElement$1 } from './p-Cfj594pp.js';
2
2
 
3
3
  const AfNavItem = AfNavItem$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfNavbar$1, d as defineCustomElement$1 } from './p-BHNNF4PT.js';
1
+ import { A as AfNavbar$1, d as defineCustomElement$1 } from './p-CJccTfm5.js';
2
2
 
3
3
  const AfNavbar = AfNavbar$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface AfTestimonialCarousel extends Components.AfTestimonialCarousel, HTMLElement {}
4
+ export const AfTestimonialCarousel: {
5
+ prototype: AfTestimonialCarousel;
6
+ new (): AfTestimonialCarousel;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,113 @@
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-ChRDoPDm.js';
2
+
3
+ const afTestimonialCarouselCss = ".sc-af-testimonial-carousel-h{display:block;width:100%;overflow:hidden}.testimonial-carousel.sc-af-testimonial-carousel{position:relative;width:100%}.testimonial-slides.sc-af-testimonial-carousel{position:relative;width:100%;min-height:544px;overflow:hidden}.testimonial-slides.sc-af-testimonial-carousel-s>af-testimonial,.testimonial-slides .sc-af-testimonial-carousel-s>af-testimonial{position:absolute;top:0;left:0;width:100%;transition:transform 0.5s ease-in-out, opacity 0.5s ease-in-out}.testimonial-progress.sc-af-testimonial-carousel{display:flex;gap:12px;justify-content:center;margin-top:32px;padding:0 220px}.progress-dot.sc-af-testimonial-carousel{width:100%;max-width:840px;height:3px;background:var(--colour-background-border-default, #d1ddda);border-radius:2px;cursor:pointer;transition:background 0.3s ease;position:relative;overflow:hidden}.progress-dot.active.sc-af-testimonial-carousel{background:var(--colour-background-border-active, #8a7049)}.progress-dot.sc-af-testimonial-carousel:hover:not(.active){background:var(--colour-background-border-default, #c1cdc9)}.carousel-navigation.sc-af-testimonial-carousel{position:absolute;bottom:48px;left:48px;display:flex;gap:12px;align-items:center;z-index:10}.nav-button.sc-af-testimonial-carousel{width:48px;height:48px;border-radius:50%;border:1px solid var(--colour-brand-inkwell, #14343b);background:transparent;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all 0.2s ease;color:var(--colour-brand-inkwell, #14343b)}.nav-button.sc-af-testimonial-carousel:hover:not(:disabled){background:rgba(255, 255, 255, 0.1);transform:translateY(-2px)}.nav-button.sc-af-testimonial-carousel:disabled{opacity:0.4;cursor:not-allowed;border-color:var(--colour-brand-inkwell, #14343b)}.nav-button.sc-af-testimonial-carousel svg.sc-af-testimonial-carousel{width:24px;height:24px}";
4
+
5
+ const AfTestimonialCarousel$1 = /*@__PURE__*/ proxyCustomElement(class AfTestimonialCarousel extends H {
6
+ constructor(registerHost) {
7
+ super();
8
+ if (registerHost !== false) {
9
+ this.__registerHost();
10
+ }
11
+ this.currentIndex = 0;
12
+ this.isAnimating = false;
13
+ this.testimonialCount = 0;
14
+ this.testimonials = [];
15
+ this.goToPrevious = () => {
16
+ if (this.isAnimating || this.currentIndex === 0)
17
+ return;
18
+ this.isAnimating = true;
19
+ this.currentIndex = this.currentIndex - 1;
20
+ this.updateVisibleTestimonial();
21
+ setTimeout(() => {
22
+ this.isAnimating = false;
23
+ }, 500);
24
+ };
25
+ this.goToNext = () => {
26
+ if (this.isAnimating || this.currentIndex >= this.testimonialCount - 1)
27
+ return;
28
+ this.isAnimating = true;
29
+ this.currentIndex = this.currentIndex + 1;
30
+ this.updateVisibleTestimonial();
31
+ setTimeout(() => {
32
+ this.isAnimating = false;
33
+ }, 500);
34
+ };
35
+ }
36
+ componentDidLoad() {
37
+ this.detectTestimonials();
38
+ // Watch for testimonials being added (for React async rendering)
39
+ this.observer = new MutationObserver(() => {
40
+ this.detectTestimonials();
41
+ });
42
+ this.observer.observe(this.host, {
43
+ childList: true,
44
+ subtree: true
45
+ });
46
+ }
47
+ disconnectedCallback() {
48
+ if (this.observer) {
49
+ this.observer.disconnect();
50
+ }
51
+ }
52
+ detectTestimonials() {
53
+ const newTestimonials = Array.from(this.host.querySelectorAll('af-testimonial'));
54
+ if (newTestimonials.length !== this.testimonials.length) {
55
+ this.testimonials = newTestimonials;
56
+ this.testimonialCount = newTestimonials.length;
57
+ console.log('Found testimonials:', this.testimonials.length);
58
+ if (this.testimonials.length > 0) {
59
+ this.currentIndex = 0;
60
+ this.updateVisibleTestimonial();
61
+ }
62
+ }
63
+ }
64
+ updateVisibleTestimonial() {
65
+ this.testimonials.forEach((testimonial, index) => {
66
+ const offset = (index - this.currentIndex) * 100;
67
+ testimonial.style.transform = `translateX(${offset}%)`;
68
+ testimonial.style.opacity = index === this.currentIndex ? '1' : '0';
69
+ testimonial.style.pointerEvents = index === this.currentIndex ? 'auto' : 'none';
70
+ });
71
+ }
72
+ render() {
73
+ const hasPrev = this.currentIndex > 0;
74
+ const hasNext = this.currentIndex < this.testimonialCount - 1;
75
+ return (h(Host, { key: 'ffa14246fa8a47d1cc079b0026df5a914e2b9362' }, h("div", { key: 'e984a28fd99ca671d8bdd55a780fbf76d7a189dc', class: "testimonial-carousel" }, h("div", { key: '55d09df04a1ee008d30a9227d3e6914dce46e173', class: "testimonial-slides" }, h("slot", { key: '992ac1e4849bcc042ccd0eeb47319b3e34364a1f' })), this.testimonialCount > 1 && (h("div", { key: '247420c536242d5e66ada662a23828eaa0190c84', class: "testimonial-progress" }, Array.from({ length: this.testimonialCount }).map((_, index) => (h("div", { class: `progress-dot ${index === this.currentIndex ? 'active' : ''}`, onClick: () => {
76
+ if (!this.isAnimating && index !== this.currentIndex) {
77
+ this.isAnimating = true;
78
+ this.currentIndex = index;
79
+ this.updateVisibleTestimonial();
80
+ setTimeout(() => {
81
+ this.isAnimating = false;
82
+ }, 500);
83
+ }
84
+ } }))))), this.testimonialCount > 1 && (h("div", { key: 'dc31d36ed57808d5c28d2c1dcb2729e6ed5342f7', class: "carousel-navigation" }, h("button", { key: '37f18430b88a9e983fc6e673d206be03c4cc1d40', class: "nav-button prev", disabled: !hasPrev, onClick: this.goToPrevious, "aria-label": "Previous testimonial" }, h("svg", { key: '9292c82f1b5f993aa8cffd301592dba8f5261c10', width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, h("path", { key: '0c34f308ae42547d24584858769ee295e01e02c9', d: "M19 12H5M5 12L12 19M5 12L12 5", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }))), h("button", { key: '984436b6d311d92623a9740d871c57d09de1a06e', class: "nav-button next", disabled: !hasNext, onClick: this.goToNext, "aria-label": "Next testimonial" }, h("svg", { key: 'e3d55f1efb6c29a74256c4db64283cb1abaa0aa5', width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, h("path", { key: 'c9404bc3ad64ccb8ad0da3291ce7d4b622637e3d', d: "M5 12H19M19 12L12 5M19 12L12 19", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }))))))));
85
+ }
86
+ get host() { return this; }
87
+ static get style() { return afTestimonialCarouselCss; }
88
+ }, [262, "af-testimonial-carousel", {
89
+ "currentIndex": [32],
90
+ "isAnimating": [32],
91
+ "testimonialCount": [32]
92
+ }]);
93
+ function defineCustomElement$1() {
94
+ if (typeof customElements === "undefined") {
95
+ return;
96
+ }
97
+ const components = ["af-testimonial-carousel"];
98
+ components.forEach(tagName => { switch (tagName) {
99
+ case "af-testimonial-carousel":
100
+ if (!customElements.get(tagName)) {
101
+ customElements.define(tagName, AfTestimonialCarousel$1);
102
+ }
103
+ break;
104
+ } });
105
+ }
106
+
107
+ const AfTestimonialCarousel = AfTestimonialCarousel$1;
108
+ const defineCustomElement = defineCustomElement$1;
109
+
110
+ export { AfTestimonialCarousel, defineCustomElement };
111
+ //# sourceMappingURL=af-testimonial-carousel.js.map
112
+
113
+ //# sourceMappingURL=af-testimonial-carousel.js.map
@@ -0,0 +1 @@
1
+ {"file":"af-testimonial-carousel.js","mappings":"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","names":["AfTestimonialCarousel","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-testimonial-carousel/af-testimonial-carousel.css?tag=af-testimonial-carousel&encapsulation=scoped","src/components/af-testimonial-carousel/af-testimonial-carousel.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n overflow: hidden;\n}\n\n.testimonial-carousel {\n position: relative;\n width: 100%;\n}\n\n.testimonial-slides {\n position: relative;\n width: 100%;\n min-height: 544px;\n overflow: hidden;\n}\n\n.testimonial-slides ::slotted(af-testimonial) {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out;\n}\n\n/* Progress indicator */\n.testimonial-progress {\n display: flex;\n gap: 12px;\n justify-content: center;\n margin-top: 32px;\n padding: 0 220px;\n}\n\n.progress-dot {\n width: 100%;\n max-width: 840px;\n height: 3px;\n background: var(--colour-background-border-default, #d1ddda);\n border-radius: 2px;\n cursor: pointer;\n transition: background 0.3s ease;\n position: relative;\n overflow: hidden;\n}\n\n.progress-dot.active {\n background: var(--colour-background-border-active, #8a7049);\n}\n\n.progress-dot:hover:not(.active) {\n background: var(--colour-background-border-default, #c1cdc9);\n}\n\n/* Navigation buttons - positioned bottom left, next to each other */\n.carousel-navigation {\n position: absolute;\n bottom: 48px;\n left: 48px;\n display: flex;\n gap: 12px;\n align-items: center;\n z-index: 10;\n}\n\n.nav-button {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: 1px solid var(--colour-brand-inkwell, #14343b);\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--colour-brand-inkwell, #14343b);\n}\n\n.nav-button:hover:not(:disabled) {\n background: rgba(255, 255, 255, 0.1);\n transform: translateY(-2px);\n}\n\n.nav-button:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n border-color: var(--colour-brand-inkwell, #14343b);\n}\n\n.nav-button svg {\n width: 24px;\n height: 24px;\n}\n\n","import { Component, State, h, Host, Element } from '@stencil/core';\n\n@Component({\n tag: 'af-testimonial-carousel',\n styleUrl: 'af-testimonial-carousel.css',\n shadow: false,\n scoped: true,\n})\nexport class AfTestimonialCarousel {\n @Element() host!: HTMLElement;\n @State() currentIndex: number = 0;\n @State() isAnimating: boolean = false;\n @State() testimonialCount: number = 0;\n\n private testimonials: HTMLElement[] = [];\n private observer: MutationObserver | undefined;\n\n componentDidLoad() {\n this.detectTestimonials();\n \n // Watch for testimonials being added (for React async rendering)\n this.observer = new MutationObserver(() => {\n this.detectTestimonials();\n });\n \n this.observer.observe(this.host, {\n childList: true,\n subtree: true\n });\n }\n\n disconnectedCallback() {\n if (this.observer) {\n this.observer.disconnect();\n }\n }\n\n private detectTestimonials() {\n const newTestimonials = Array.from(this.host.querySelectorAll('af-testimonial')) as HTMLElement[];\n \n if (newTestimonials.length !== this.testimonials.length) {\n this.testimonials = newTestimonials;\n this.testimonialCount = newTestimonials.length;\n console.log('Found testimonials:', this.testimonials.length);\n \n if (this.testimonials.length > 0) {\n this.currentIndex = 0;\n this.updateVisibleTestimonial();\n }\n }\n }\n\n private updateVisibleTestimonial() {\n this.testimonials.forEach((testimonial, index) => {\n const offset = (index - this.currentIndex) * 100;\n testimonial.style.transform = `translateX(${offset}%)`;\n testimonial.style.opacity = index === this.currentIndex ? '1' : '0';\n testimonial.style.pointerEvents = index === this.currentIndex ? 'auto' : 'none';\n });\n }\n\n private goToPrevious = () => {\n if (this.isAnimating || this.currentIndex === 0) return;\n \n this.isAnimating = true;\n this.currentIndex = this.currentIndex - 1;\n this.updateVisibleTestimonial();\n \n setTimeout(() => {\n this.isAnimating = false;\n }, 500);\n };\n\n private goToNext = () => {\n if (this.isAnimating || this.currentIndex >= this.testimonialCount - 1) return;\n \n this.isAnimating = true;\n this.currentIndex = this.currentIndex + 1;\n this.updateVisibleTestimonial();\n \n setTimeout(() => {\n this.isAnimating = false;\n }, 500);\n };\n\n render() {\n const hasPrev = this.currentIndex > 0;\n const hasNext = this.currentIndex < this.testimonialCount - 1;\n\n return (\n <Host>\n <div class=\"testimonial-carousel\">\n <div class=\"testimonial-slides\">\n <slot></slot>\n </div>\n \n {/* Progress indicator */}\n {this.testimonialCount > 1 && (\n <div class=\"testimonial-progress\">\n {Array.from({ length: this.testimonialCount }).map((_, index) => (\n <div \n class={`progress-dot ${index === this.currentIndex ? 'active' : ''}`}\n onClick={() => {\n if (!this.isAnimating && index !== this.currentIndex) {\n this.isAnimating = true;\n this.currentIndex = index;\n this.updateVisibleTestimonial();\n setTimeout(() => {\n this.isAnimating = false;\n }, 500);\n }\n }}\n />\n ))}\n </div>\n )}\n\n {/* Navigation buttons */}\n {this.testimonialCount > 1 && (\n <div class=\"carousel-navigation\">\n <button \n class=\"nav-button prev\" \n disabled={!hasPrev}\n onClick={this.goToPrevious}\n aria-label=\"Previous testimonial\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M19 12H5M5 12L12 19M5 12L12 5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button \n class=\"nav-button next\" \n disabled={!hasNext}\n onClick={this.goToNext}\n aria-label=\"Next testimonial\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5 12H19M19 12L12 5M19 12L12 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n\n"],"version":3}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface AfTestimonialStat extends Components.AfTestimonialStat, HTMLElement {}
4
+ export const AfTestimonialStat: {
5
+ prototype: AfTestimonialStat;
6
+ new (): AfTestimonialStat;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,45 @@
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-ChRDoPDm.js';
2
+
3
+ const afTestimonialStatCss = ".sc-af-testimonial-stat-h{display:block;flex:1;min-width:0}.stat.sc-af-testimonial-stat{display:flex;flex-direction:column;gap:8px}.stat--accent.sc-af-testimonial-stat{border-left:2px solid var(--colour-background-border-active, #8a7049);padding-left:16px;min-height:76px;justify-content:center}.stat-value.sc-af-testimonial-stat{font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-size:44px;font-weight:400;line-height:1;letter-spacing:-0.88px;color:var(--colour-typography-heading-secondary, #8a7049);margin:0}.stat-description.sc-af-testimonial-stat{font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-size:16px;font-weight:400;line-height:24px;color:var(--colour-typography-body-dark, #14343b);margin:0;overflow:hidden;text-overflow:ellipsis}";
4
+
5
+ const AfTestimonialStat$1 = /*@__PURE__*/ proxyCustomElement(class AfTestimonialStat extends H {
6
+ constructor(registerHost) {
7
+ super();
8
+ if (registerHost !== false) {
9
+ this.__registerHost();
10
+ }
11
+ /**
12
+ * Whether to show left accent border
13
+ */
14
+ this.accentBorder = false;
15
+ }
16
+ render() {
17
+ return (h(Host, { key: 'dec2d76b0cdf8e2b4c9a996046e6537b586ff674' }, h("div", { key: 'c7a9a5c15735850e7eec668e700da23494424c3c', class: `stat ${this.accentBorder ? 'stat--accent' : ''}` }, h("p", { key: 'c876b9e81e3150ef5cc651ee8f7435671b40966b', class: "stat-value" }, this.value), h("p", { key: 'f369972595ed4301eb827a0084388284096ec47f', class: "stat-description" }, this.description))));
18
+ }
19
+ static get style() { return afTestimonialStatCss; }
20
+ }, [258, "af-testimonial-stat", {
21
+ "value": [1],
22
+ "description": [1],
23
+ "accentBorder": [4, "accent-border"]
24
+ }]);
25
+ function defineCustomElement$1() {
26
+ if (typeof customElements === "undefined") {
27
+ return;
28
+ }
29
+ const components = ["af-testimonial-stat"];
30
+ components.forEach(tagName => { switch (tagName) {
31
+ case "af-testimonial-stat":
32
+ if (!customElements.get(tagName)) {
33
+ customElements.define(tagName, AfTestimonialStat$1);
34
+ }
35
+ break;
36
+ } });
37
+ }
38
+
39
+ const AfTestimonialStat = AfTestimonialStat$1;
40
+ const defineCustomElement = defineCustomElement$1;
41
+
42
+ export { AfTestimonialStat, defineCustomElement };
43
+ //# sourceMappingURL=af-testimonial-stat.js.map
44
+
45
+ //# sourceMappingURL=af-testimonial-stat.js.map
@@ -0,0 +1 @@
1
+ {"file":"af-testimonial-stat.js","mappings":";;AAAA,MAAM,oBAAoB,GAAG,kxBAAkxB;;MCQlyBA,mBAAiB,iBAAAC,kBAAA,CAAA,MAAA,iBAAA,SAAAC,CAAA,CAAA;AAN9B,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;AAiBE;;AAEG;AACK,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK;AAYtC;IAVC,MAAM,GAAA;AACJ,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,YAAY,GAAG,cAAc,GAAG,EAAE,CAAA,CAAE,EAAA,EAC3D,CAAA,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAG,KAAK,EAAC,YAAY,IAAE,IAAI,CAAC,KAAK,CAAK,EACtC,CAAG,CAAA,GAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,kBAAkB,EAAE,EAAA,IAAI,CAAC,WAAW,CAAK,CAC9C,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["AfTestimonialStat","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-testimonial-stat/af-testimonial-stat.css?tag=af-testimonial-stat&encapsulation=scoped","src/components/af-testimonial-stat/af-testimonial-stat.tsx"],"sourcesContent":[":host {\n display: block;\n flex: 1;\n min-width: 0;\n}\n\n.stat {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stat--accent {\n border-left: 2px solid var(--colour-background-border-active, #8a7049);\n padding-left: 16px;\n min-height: 76px;\n justify-content: center;\n}\n\n.stat-value {\n font-family: 'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;\n font-size: 44px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.88px;\n color: var(--colour-typography-heading-secondary, #8a7049);\n margin: 0;\n}\n\n.stat-description {\n font-family: 'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;\n font-size: 16px;\n font-weight: 400;\n line-height: 24px;\n color: var(--colour-typography-body-dark, #14343b);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n@Component({\n tag: 'af-testimonial-stat',\n styleUrl: 'af-testimonial-stat.css',\n shadow: false,\n scoped: true,\n})\nexport class AfTestimonialStat {\n /**\n * The statistic value (e.g., \"95%\", \"10×\", \"120,000\")\n */\n @Prop() value!: string;\n\n /**\n * Description text for the statistic\n */\n @Prop() description!: string;\n\n /**\n * Whether to show left accent border\n */\n @Prop() accentBorder: boolean = false;\n\n render() {\n return (\n <Host>\n <div class={`stat ${this.accentBorder ? 'stat--accent' : ''}`}>\n <p class=\"stat-value\">{this.value}</p>\n <p class=\"stat-description\">{this.description}</p>\n </div>\n </Host>\n );\n }\n}\n\n\n"],"version":3}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface AfTestimonial extends Components.AfTestimonial, HTMLElement {}
4
+ export const AfTestimonial: {
5
+ prototype: AfTestimonial;
6
+ new (): AfTestimonial;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,43 @@
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-ChRDoPDm.js';
2
+
3
+ const afTestimonialCss = ".sc-af-testimonial-h{display:block;width:100%}.testimonial-card.sc-af-testimonial{background:var(--colour-background-level-1, #e8eeed);border-radius:var(--border-radius-card-level-1, 32px);overflow:hidden;display:flex;height:544px;box-sizing:border-box}.testimonial-image.sc-af-testimonial{position:relative;width:519px;height:100%;background:#000000;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}.testimonial-bg-image.sc-af-testimonial{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0.7}.testimonial-logo.sc-af-testimonial{position:relative;z-index:1;padding:0 108px;max-width:100%}.testimonial-logo.sc-af-testimonial img.sc-af-testimonial{width:100%;height:auto;display:block}.testimonial-content.sc-af-testimonial{flex:1;display:flex;flex-direction:column;gap:32px;padding:48px;border:1px solid rgba(255, 255, 255, 0.08);border-left:1px solid rgba(255, 255, 255, 0.08);box-sizing:border-box}.testimonial-quote-section.sc-af-testimonial{flex:1;display:flex;flex-direction:column;gap:12px}.testimonial-quote-icon.sc-af-testimonial{width:48px;height:48px;color:var(--colour-brand-inkwell, #14343b);flex-shrink:0}.testimonial-text.sc-af-testimonial{font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-size:22px;font-weight:400;line-height:1.4;color:var(--colour-typography-body-default, #2b484f);margin:0;max-height:155px;overflow:hidden;text-overflow:ellipsis}.testimonial-attribution.sc-af-testimonial{font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-size:22px;font-weight:400;line-height:1.4;color:var(--colour-typography-body-dark, #14343b);margin:0}.testimonial-stats.sc-af-testimonial{display:flex;gap:32px;width:100%}.testimonial-footer.sc-af-testimonial{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--colour-background-border-default, #d1ddda);padding-top:32px}.testimonial-nav.sc-af-testimonial{display:flex;gap:12px}.testimonial-cta.sc-af-testimonial{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;border:1px solid var(--colour-brand-inkwell, #14343b);border-radius:9999px;font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-size:17px;font-weight:500;line-height:20px;color:var(--colour-brand-inkwell, #14343b);text-decoration:none;cursor:pointer;transition:all 0.2s ease}.testimonial-cta.sc-af-testimonial:hover{background:var(--colour-background-level-1, #e8eeed);transform:translateY(-1px)}.testimonial-cta.sc-af-testimonial svg.sc-af-testimonial{width:24px;height:24px}";
4
+
5
+ const AfTestimonial$1 = /*@__PURE__*/ proxyCustomElement(class AfTestimonial extends H {
6
+ constructor(registerHost) {
7
+ super();
8
+ if (registerHost !== false) {
9
+ this.__registerHost();
10
+ }
11
+ }
12
+ render() {
13
+ return (h(Host, { key: '963791303c22cdea677a7923ffce8b16ea97cb26' }, h("div", { key: '369ad62ceb17461c4511f0cb7338a5f812b69717', class: "testimonial-card" }, h("div", { key: 'e548a64653054d54b282b83c0a64326c0973122d', class: "testimonial-image" }, this.backgroundImage && (h("img", { key: '21f779030e13675278b4cd18ae2df0c0bf9c59a3', src: this.backgroundImage, alt: "", class: "testimonial-bg-image" })), this.logoImage && (h("div", { key: '23298bd5b1c3db0ed5bff4c1d1cd0582e09b50a2', class: "testimonial-logo" }, h("img", { key: '357214f50e38cfa9e53cf7914c87f22c7971f1d5', src: this.logoImage, alt: "Company logo" })))), h("div", { key: 'd2913ca4d9b38a048ebedb123fdb0b7b9e78cc6f', class: "testimonial-content" }, h("div", { key: '92756afbcbd391a7fcb8b1a99d92bcc370f3787d', class: "testimonial-quote-section" }, h("div", { key: '40f844093eb232bf06b353a27c066f5ae99a85bf', class: "testimonial-quote-icon" }, h("slot", { key: '3cf6da2811c1cdf6a4540f72727fe479c7d4d4ca', name: "quote-icon" }, h("svg", { key: 'f59e4ceb77b67bbba1b5d647d10dd6f15b1d9319', width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { key: 'dbcc67a7e7ab90b4d1172f0cced568eeeb182150', d: "M10.5 25.5C10.5 23.0147 12.5147 21 15 21H18C18.8284 21 19.5 20.3284 19.5 19.5V15C19.5 12.5147 17.4853 10.5 15 10.5H10.5C6.35786 10.5 3 13.8579 3 18V33C3 35.4853 5.01472 37.5 7.5 37.5H15C17.4853 37.5 19.5 35.4853 19.5 33V25.5C19.5 23.0147 17.4853 21 15 21H10.5ZM33 25.5C33 23.0147 35.0147 21 37.5 21H40.5C41.3284 21 42 20.3284 42 19.5V15C42 12.5147 39.9853 10.5 37.5 10.5H33C28.8579 10.5 25.5 13.8579 25.5 18V33C25.5 35.4853 27.5147 37.5 30 37.5H37.5C39.9853 37.5 42 35.4853 42 33V25.5C42 23.0147 39.9853 21 37.5 21H33Z", fill: "currentColor" })))), h("p", { key: '1b487f7ab688642b9c5166a3fc8eb1191e1daa36', class: "testimonial-text" }, this.quote), h("p", { key: '539600a1d6eb098ea329307d40cac941d1d631a4', class: "testimonial-attribution" }, this.attribution)), h("div", { key: '307e784601fd66cdd4573eaf0a83c8d61ab83301', class: "testimonial-stats" }, h("slot", { key: '2ab5758e92ed670e6d6ed554f3fce7a7e1fc0077', name: "stats" })), h("div", { key: 'b13d6b51a27f5e94d40929f6c337513ca84af1cd', class: "testimonial-footer" }, h("div", { key: '69b92a55946c936cdc78d7f317caacb8fd334779', class: "testimonial-nav" }, h("slot", { key: '41c0ef3a1497d33d7c2dc7b34a267d9158ff1aa0', name: "navigation" })), this.readMoreLink && (h("a", { key: 'd4c7e0acce78b7fb16085cd9c7c8762325dc6b6c', href: this.readMoreLink, class: "testimonial-cta" }, h("span", { key: '0576e6e26afeb35f07aa4ad0190cdd6e3b4242c1' }, "Read full story"), h("svg", { key: 'd3c6d905c55782f2b22e6070a4adcca4bd0164cf', width: "24", height: "24", viewBox: "0 0 24 24", fill: "none" }, h("path", { key: '61c7ecddf75102a501626fc59fe55cd1402b06e2', d: "M5 12H19M19 12L12 5M19 12L12 19", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })))))))));
14
+ }
15
+ static get style() { return afTestimonialCss; }
16
+ }, [262, "af-testimonial", {
17
+ "backgroundImage": [1, "background-image"],
18
+ "logoImage": [1, "logo-image"],
19
+ "quote": [1],
20
+ "attribution": [1],
21
+ "readMoreLink": [1, "read-more-link"]
22
+ }]);
23
+ function defineCustomElement$1() {
24
+ if (typeof customElements === "undefined") {
25
+ return;
26
+ }
27
+ const components = ["af-testimonial"];
28
+ components.forEach(tagName => { switch (tagName) {
29
+ case "af-testimonial":
30
+ if (!customElements.get(tagName)) {
31
+ customElements.define(tagName, AfTestimonial$1);
32
+ }
33
+ break;
34
+ } });
35
+ }
36
+
37
+ const AfTestimonial = AfTestimonial$1;
38
+ const defineCustomElement = defineCustomElement$1;
39
+
40
+ export { AfTestimonial, defineCustomElement };
41
+ //# sourceMappingURL=af-testimonial.js.map
42
+
43
+ //# sourceMappingURL=af-testimonial.js.map
@@ -0,0 +1 @@
1
+ {"file":"af-testimonial.js","mappings":"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","names":["AfTestimonial","__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-testimonial/af-testimonial.css?tag=af-testimonial&encapsulation=scoped","src/components/af-testimonial/af-testimonial.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n.testimonial-card {\n background: var(--colour-background-level-1, #e8eeed);\n border-radius: var(--border-radius-card-level-1, 32px);\n overflow: hidden;\n display: flex;\n height: 544px;\n box-sizing: border-box;\n}\n\n/* Image side - 519px wide */\n.testimonial-image {\n position: relative;\n width: 519px;\n height: 100%;\n background: #000000;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n overflow: hidden;\n}\n\n.testimonial-bg-image {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n opacity: 0.7;\n}\n\n.testimonial-logo {\n position: relative;\n z-index: 1;\n padding: 0 108px;\n max-width: 100%;\n}\n\n.testimonial-logo img {\n width: 100%;\n height: auto;\n display: block;\n}\n\n/* Content side */\n.testimonial-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 32px;\n padding: 48px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n border-left: 1px solid rgba(255, 255, 255, 0.08);\n box-sizing: border-box;\n}\n\n.testimonial-quote-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.testimonial-quote-icon {\n width: 48px;\n height: 48px;\n color: var(--colour-brand-inkwell, #14343b);\n flex-shrink: 0;\n}\n\n.testimonial-text {\n font-family: 'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;\n font-size: 22px;\n font-weight: 400;\n line-height: 1.4;\n color: var(--colour-typography-body-default, #2b484f);\n margin: 0;\n max-height: 155px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.testimonial-attribution {\n font-family: 'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;\n font-size: 22px;\n font-weight: 400;\n line-height: 1.4;\n color: var(--colour-typography-body-dark, #14343b);\n margin: 0;\n}\n\n.testimonial-stats {\n display: flex;\n gap: 32px;\n width: 100%;\n}\n\n.testimonial-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-top: 1px solid var(--colour-background-border-default, #d1ddda);\n padding-top: 32px;\n}\n\n.testimonial-nav {\n display: flex;\n gap: 12px;\n}\n\n.testimonial-cta {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 12px 24px;\n border: 1px solid var(--colour-brand-inkwell, #14343b);\n border-radius: 9999px;\n font-family: 'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;\n font-size: 17px;\n font-weight: 500;\n line-height: 20px;\n color: var(--colour-brand-inkwell, #14343b);\n text-decoration: none;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.testimonial-cta:hover {\n background: var(--colour-background-level-1, #e8eeed);\n transform: translateY(-1px);\n}\n\n.testimonial-cta svg {\n width: 24px;\n height: 24px;\n}\n\n\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n@Component({\n tag: 'af-testimonial',\n styleUrl: 'af-testimonial.css',\n shadow: false,\n scoped: true,\n})\nexport class AfTestimonial {\n /**\n * Background image URL for the testimonial card\n */\n @Prop() backgroundImage?: string;\n\n /**\n * Company logo URL\n */\n @Prop() logoImage?: string;\n\n /**\n * Testimonial quote text\n */\n @Prop() quote!: string;\n\n /**\n * Attribution text (e.g., \"– Nathaniel Barrs, CTO, PSC Insurance\")\n */\n @Prop() attribution!: string;\n\n /**\n * Link to full case study\n */\n @Prop() readMoreLink?: string;\n\n render() {\n return (\n <Host>\n <div class=\"testimonial-card\">\n {/* Image side */}\n <div class=\"testimonial-image\">\n {this.backgroundImage && (\n <img src={this.backgroundImage} alt=\"\" class=\"testimonial-bg-image\" />\n )}\n {this.logoImage && (\n <div class=\"testimonial-logo\">\n <img src={this.logoImage} alt=\"Company logo\" />\n </div>\n )}\n </div>\n\n {/* Content side */}\n <div class=\"testimonial-content\">\n <div class=\"testimonial-quote-section\">\n {/* Quote icon - using slot for flexibility */}\n <div class=\"testimonial-quote-icon\">\n <slot name=\"quote-icon\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.5 25.5C10.5 23.0147 12.5147 21 15 21H18C18.8284 21 19.5 20.3284 19.5 19.5V15C19.5 12.5147 17.4853 10.5 15 10.5H10.5C6.35786 10.5 3 13.8579 3 18V33C3 35.4853 5.01472 37.5 7.5 37.5H15C17.4853 37.5 19.5 35.4853 19.5 33V25.5C19.5 23.0147 17.4853 21 15 21H10.5ZM33 25.5C33 23.0147 35.0147 21 37.5 21H40.5C41.3284 21 42 20.3284 42 19.5V15C42 12.5147 39.9853 10.5 37.5 10.5H33C28.8579 10.5 25.5 13.8579 25.5 18V33C25.5 35.4853 27.5147 37.5 30 37.5H37.5C39.9853 37.5 42 35.4853 42 33V25.5C42 23.0147 39.9853 21 37.5 21H33Z\" fill=\"currentColor\"/>\n </svg>\n </slot>\n </div>\n\n <p class=\"testimonial-text\">{this.quote}</p>\n <p class=\"testimonial-attribution\">{this.attribution}</p>\n </div>\n\n {/* Statistics slot */}\n <div class=\"testimonial-stats\">\n <slot name=\"stats\"></slot>\n </div>\n\n {/* Footer with navigation and CTA */}\n <div class=\"testimonial-footer\">\n <div class=\"testimonial-nav\">\n <slot name=\"navigation\"></slot>\n </div>\n {this.readMoreLink && (\n <a href={this.readMoreLink} class=\"testimonial-cta\">\n <span>Read full story</span>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M5 12H19M19 12L12 5M19 12L12 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </a>\n )}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n\n\n"],"version":3}
@@ -1,4 +1,4 @@
1
- import { A as AfText$1, d as defineCustomElement$1 } from './p-BpGDzCRf.js';
1
+ import { A as AfText$1, d as defineCustomElement$1 } from './p-C0zUdiRs.js';
2
2
 
3
3
  const AfText = AfText$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,4 +1,4 @@
1
- import { A as AfTypographyLockup$1, d as defineCustomElement$1 } from './p-DuXQZGjc.js';
1
+ import { A as AfTypographyLockup$1, d as defineCustomElement$1 } from './p-CLA_jBiH.js';
2
2
 
3
3
  const AfTypographyLockup = AfTypographyLockup$1;
4
4
  const defineCustomElement = defineCustomElement$1;
@@ -1,16 +1,16 @@
1
- export { g as getAssetPath, r as render, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-zwrcq-N2.js';
2
- export { A as AfHeading } from './p-DIyOg-i_.js';
3
- export { A as AfText } from './p-BpGDzCRf.js';
4
- export { A as AfColorSwatch } from './p-DSAo7rhE.js';
5
- export { A as AfContainer } from './p-CRgPNvxI.js';
6
- export { A as AfAspectRatio } from './p-C6idwlD-.js';
7
- export { A as AfNavItem } from './p-CJWIieDU.js';
8
- export { A as AfNavbar } from './p-BHNNF4PT.js';
9
- export { A as AfLogo } from './p-CaqzUz5o.js';
10
- export { A as AfButton } from './p-cKSy1B8M.js';
11
- export { A as AfIconButton } from './p-Dw33Xm_t.js';
12
- export { A as AfButtonGroup } from './p-Cjv046iG.js';
13
- export { A as AfTypographyLockup } from './p-DuXQZGjc.js';
1
+ export { g as getAssetPath, r as render, s as setAssetPath, a as setNonce, b as setPlatformOptions } from './p-ChRDoPDm.js';
2
+ export { A as AfHeading } from './p-BuySFAGS.js';
3
+ export { A as AfText } from './p-C0zUdiRs.js';
4
+ export { A as AfColorSwatch } from './p-KtmLxy7z.js';
5
+ export { A as AfContainer } from './p-DPooX_NW.js';
6
+ export { A as AfAspectRatio } from './p-Bxv9iL3G.js';
7
+ export { A as AfNavItem } from './p-Cfj594pp.js';
8
+ export { A as AfNavbar } from './p-CJccTfm5.js';
9
+ export { A as AfLogo } from './p-C4sw-kYH.js';
10
+ export { A as AfButton } from './p-D021PjqL.js';
11
+ export { A as AfIconButton } from './p-XAy0kGYd.js';
12
+ export { A as AfButtonGroup } from './p-Bdy85P7Z.js';
13
+ export { A as AfTypographyLockup } from './p-CLA_jBiH.js';
14
14
  //# sourceMappingURL=index.js.map
15
15
 
16
16
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, h, c as Host } from './p-zwrcq-N2.js';
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-ChRDoPDm.js';
2
2
 
3
3
  const afButtonGroupCss = ":host{display:inline-block}.button-group{display:inline-flex;align-items:center;box-sizing:border-box}.direction-horizontal{flex-direction:row}.direction-vertical{flex-direction:column}::slotted(*){flex-shrink:0}";
4
4
 
@@ -45,6 +45,6 @@ function defineCustomElement() {
45
45
  }
46
46
 
47
47
  export { AfButtonGroup as A, defineCustomElement as d };
48
- //# sourceMappingURL=p-Cjv046iG.js.map
48
+ //# sourceMappingURL=p-Bdy85P7Z.js.map
49
49
 
50
- //# sourceMappingURL=p-Cjv046iG.js.map
50
+ //# sourceMappingURL=p-Bdy85P7Z.js.map
@@ -1 +1 @@
1
- {"file":"p-Cjv046iG.js","mappings":";;AAAA,MAAM,gBAAgB,GAAG,sNAAsN;;MCOlO,aAAa,iBAAAA,kBAAA,CAAA,MAAA,aAAA,SAAAC,CAAA,CAAA;AAL1B,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;AAME;;AAEG;AACK,QAAA,IAAS,CAAA,SAAA,GAA8B,YAAY;AAE3D;;AAEG;AACK,QAAA,IAAG,CAAA,GAAA,GAAW,KAAK;AAgB5B;IAdC,MAAM,GAAA;AACJ,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,CAAC,aAAa,IAAI,CAAC,SAAS,CAAE,CAAA,GAAG;SAClC;QAED,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAA,EAC3C,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT,CACD;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-button-group/af-button-group.css?tag=af-button-group&encapsulation=shadow","src/components/af-button-group/af-button-group.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n.button-group {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n}\n\n.direction-horizontal {\n flex-direction: row;\n}\n\n.direction-vertical {\n flex-direction: column;\n}\n\n/* Ensure slotted buttons align properly */\n::slotted(*) {\n flex-shrink: 0;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-button-group',\n styleUrl: 'af-button-group.css',\n shadow: true\n})\nexport class AfButtonGroup {\n /**\n * Layout direction of the button group\n */\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Gap between buttons\n */\n @Prop() gap: string = '8px';\n\n render() {\n const classes = {\n 'button-group': true,\n [`direction-${this.direction}`]: true\n };\n\n return (\n <Host>\n <div class={classes} style={{ gap: this.gap }}>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-Bdy85P7Z.js","mappings":";;AAAA,MAAM,gBAAgB,GAAG,sNAAsN;;MCOlO,aAAa,iBAAAA,kBAAA,CAAA,MAAA,aAAA,SAAAC,CAAA,CAAA;AAL1B,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;AAME;;AAEG;AACK,QAAA,IAAS,CAAA,SAAA,GAA8B,YAAY;AAE3D;;AAEG;AACK,QAAA,IAAG,CAAA,GAAA,GAAW,KAAK;AAgB5B;IAdC,MAAM,GAAA;AACJ,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,CAAC,aAAa,IAAI,CAAC,SAAS,CAAE,CAAA,GAAG;SAClC;QAED,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAA,EAC3C,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT,CACD;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-button-group/af-button-group.css?tag=af-button-group&encapsulation=shadow","src/components/af-button-group/af-button-group.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n.button-group {\n display: inline-flex;\n align-items: center;\n box-sizing: border-box;\n}\n\n.direction-horizontal {\n flex-direction: row;\n}\n\n.direction-vertical {\n flex-direction: column;\n}\n\n/* Ensure slotted buttons align properly */\n::slotted(*) {\n flex-shrink: 0;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-button-group',\n styleUrl: 'af-button-group.css',\n shadow: true\n})\nexport class AfButtonGroup {\n /**\n * Layout direction of the button group\n */\n @Prop() direction: 'horizontal' | 'vertical' = 'horizontal';\n\n /**\n * Gap between buttons\n */\n @Prop() gap: string = '8px';\n\n render() {\n const classes = {\n 'button-group': true,\n [`direction-${this.direction}`]: true\n };\n\n return (\n <Host>\n <div class={classes} style={{ gap: this.gap }}>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,6 +1,6 @@
1
- import { p as proxyCustomElement, H, h } from './p-zwrcq-N2.js';
1
+ import { p as proxyCustomElement, H, h } from './p-ChRDoPDm.js';
2
2
 
3
- const afHeadingCss = ":host{display:block}.heading{margin:0;padding:0;font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-weight:500;color:var(--colour-typography-heading-primary, #14343b);letter-spacing:-0.02em}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.level-xl{font-size:50px;line-height:1}@media (min-width: 768px){.level-xl{font-size:80px}}.level-1{font-size:38px;line-height:1}@media (min-width: 768px){.level-1{font-size:56px}}.level-2{font-size:32px;line-height:1}@media (min-width: 768px){.level-2{font-size:44px}}.level-3{font-size:25px;line-height:1}@media (min-width: 768px){.level-3{font-size:34px}}.level-4{font-size:20px;line-height:1.1}@media (min-width: 768px){.level-4{font-size:24px;line-height:1.2}}.level-5{font-size:18px;line-height:1.1}@media (min-width: 768px){.level-5{font-size:20px;line-height:1.2}}";
3
+ const afHeadingCss = ":host{display:block}.heading{margin:0;padding:0;font-family:'NeuSans', 'Inter', 'Segoe UI', system-ui, sans-serif;font-weight:400;color:var(--colour-typography-heading-primary, #14343b);letter-spacing:-0.02em}.align-left{text-align:left}.align-center{text-align:center}.align-right{text-align:right}.level-xl{font-size:50px;line-height:1}@media (min-width: 768px){.level-xl{font-size:80px}}.level-1{font-size:38px;line-height:1}@media (min-width: 768px){.level-1{font-size:56px}}.level-2{font-size:32px;line-height:1}@media (min-width: 768px){.level-2{font-size:44px}}.level-3{font-size:25px;line-height:1}@media (min-width: 768px){.level-3{font-size:34px}}.level-4{font-size:20px;line-height:1.1}@media (min-width: 768px){.level-4{font-size:24px;line-height:1.2}}.level-5{font-size:18px;line-height:1.1}@media (min-width: 768px){.level-5{font-size:20px;line-height:1.2}}";
4
4
 
5
5
  const AfHeading = /*@__PURE__*/ proxyCustomElement(class AfHeading extends H {
6
6
  constructor(registerHost) {
@@ -54,6 +54,6 @@ function defineCustomElement() {
54
54
  }
55
55
 
56
56
  export { AfHeading as A, defineCustomElement as d };
57
- //# sourceMappingURL=p-DIyOg-i_.js.map
57
+ //# sourceMappingURL=p-BuySFAGS.js.map
58
58
 
59
- //# sourceMappingURL=p-DIyOg-i_.js.map
59
+ //# sourceMappingURL=p-BuySFAGS.js.map