@affinda/wc 0.4.2 → 0.6.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 (518) hide show
  1. package/dist/affinda/af-input.entry.esm.js.map +1 -1
  2. package/dist/affinda/af-textarea.entry.esm.js.map +1 -1
  3. package/dist/affinda/affinda.esm.js +1 -1
  4. package/dist/affinda/index.esm.js +1 -1
  5. package/dist/affinda/{p-6de54e73.entry.js → p-01b848e9.entry.js} +2 -2
  6. package/dist/affinda/{p-369dfdd8.entry.js → p-0c4a59b3.entry.js} +2 -2
  7. package/dist/affinda/{p-5885ebd3.entry.js → p-0c7d81d0.entry.js} +2 -2
  8. package/dist/affinda/{p-4f731d31.entry.js → p-0cbb1cb2.entry.js} +2 -2
  9. package/dist/affinda/p-11d41c9a.entry.js +2 -0
  10. package/dist/affinda/{p-d40f8d18.entry.js → p-1554f3d7.entry.js} +2 -2
  11. package/dist/affinda/p-160997b3.entry.js +2 -0
  12. package/dist/affinda/{p-0254b263.entry.js.map → p-160997b3.entry.js.map} +1 -1
  13. package/dist/affinda/p-1c19e94c.entry.js +2 -0
  14. package/dist/affinda/{p-3b429a16.entry.js → p-1c922fff.entry.js} +2 -2
  15. package/dist/affinda/{p-4f15b8f0.entry.js → p-1e59a051.entry.js} +2 -2
  16. package/dist/affinda/{p-7eb0875d.entry.js → p-20faf28d.entry.js} +2 -2
  17. package/dist/affinda/{p-cebfc8a9.entry.js → p-223b2e70.entry.js} +2 -2
  18. package/dist/affinda/{p-a70ce66f.entry.js → p-2315cb6b.entry.js} +2 -2
  19. package/dist/affinda/{p-42c4d7b1.entry.js → p-2716cdc4.entry.js} +2 -2
  20. package/dist/affinda/{p-b13c1438.entry.js → p-296a6ece.entry.js} +2 -2
  21. package/dist/affinda/{p-09e202d1.entry.js → p-2e67fb0d.entry.js} +2 -2
  22. package/dist/affinda/{p-3cd4edd0.entry.js → p-319b51c7.entry.js} +2 -2
  23. package/dist/affinda/{p-8a2cbcf0.entry.js → p-31d96ddc.entry.js} +2 -2
  24. package/dist/affinda/{p-9dfb5fab.entry.js → p-39a40e6a.entry.js} +2 -2
  25. package/dist/affinda/{p-02427605.entry.js → p-3df90209.entry.js} +2 -2
  26. package/dist/affinda/p-3ed2eb32.entry.js +2 -0
  27. package/dist/affinda/{p-d0fdef08.entry.js.map → p-3ed2eb32.entry.js.map} +1 -1
  28. package/dist/affinda/{p-dd933272.entry.js → p-3fb33478.entry.js} +2 -2
  29. package/dist/affinda/{p-43a0286a.entry.js → p-47d2f72b.entry.js} +2 -2
  30. package/dist/affinda/{p-a35ab849.entry.js → p-5e966aa6.entry.js} +2 -2
  31. package/dist/affinda/p-5fdb4aad.entry.js +2 -0
  32. package/dist/affinda/{p-7faa3fb9.entry.js.map → p-5fdb4aad.entry.js.map} +1 -1
  33. package/dist/affinda/{p-d275fb5d.entry.js → p-604399ed.entry.js} +2 -2
  34. package/dist/affinda/p-6525d4fe.entry.js +2 -0
  35. package/dist/affinda/p-6525d4fe.entry.js.map +1 -0
  36. package/dist/affinda/{p-17c2999b.entry.js → p-653bca57.entry.js} +2 -2
  37. package/dist/affinda/{p-5e01b103.entry.js → p-6c4137dc.entry.js} +2 -2
  38. package/dist/affinda/{p-b82fc7f1.entry.js → p-761f06ae.entry.js} +2 -2
  39. package/dist/affinda/{p-6949fbdf.entry.js → p-764601e6.entry.js} +2 -2
  40. package/dist/affinda/{p-b2a41a48.entry.js → p-765883e7.entry.js} +2 -2
  41. package/dist/affinda/{p-4f422489.entry.js → p-7b60b684.entry.js} +2 -2
  42. package/dist/affinda/p-805148d0.entry.js +2 -0
  43. package/dist/affinda/{p-1aa795c7.entry.js → p-8eb57e35.entry.js} +2 -2
  44. package/dist/affinda/{p-606159d2.entry.js → p-90e9e29c.entry.js} +2 -2
  45. package/dist/affinda/{p-08a42935.entry.js → p-92c61bad.entry.js} +2 -2
  46. package/dist/affinda/{p-646b73fb.entry.js → p-94119fa2.entry.js} +2 -2
  47. package/dist/affinda/{p-1efa4787.entry.js → p-99b37588.entry.js} +2 -2
  48. package/dist/affinda/{p-8eb60b77.entry.js → p-9c470a88.entry.js} +2 -2
  49. package/dist/affinda/{p-6898d4bd.entry.js → p-9c8d18a3.entry.js} +2 -2
  50. package/dist/affinda/{p-42c69bc9.entry.js → p-9d85f685.entry.js} +2 -2
  51. package/dist/affinda/p-CYq0zyKH.js +3 -0
  52. package/dist/affinda/p-CYq0zyKH.js.map +1 -0
  53. package/dist/affinda/{p-15eac0d5.entry.js → p-aa0cb70d.entry.js} +2 -2
  54. package/dist/affinda/{p-c0f71971.entry.js → p-aabe4d24.entry.js} +2 -2
  55. package/dist/affinda/{p-d12d33c8.entry.js → p-ae27e9da.entry.js} +2 -2
  56. package/dist/affinda/{p-73de3aa7.entry.js → p-bc3d2bb4.entry.js} +2 -2
  57. package/dist/affinda/{p-7640c285.entry.js → p-bc59dc0e.entry.js} +2 -2
  58. package/dist/affinda/{p-c2c16447.entry.js → p-be71688c.entry.js} +2 -2
  59. package/dist/affinda/{p-d34da6c0.entry.js → p-c6aa66f3.entry.js} +2 -2
  60. package/dist/affinda/p-c87e5b29.entry.js +2 -0
  61. package/dist/affinda/p-cd8cfa7f.entry.js +2 -0
  62. package/dist/affinda/p-cd8cfa7f.entry.js.map +1 -0
  63. package/dist/affinda/p-da247ea4.entry.js +2 -0
  64. package/dist/affinda/{p-78941fec.entry.js.map → p-da247ea4.entry.js.map} +1 -1
  65. package/dist/affinda/{p-d9ff321b.entry.js → p-dd30a9b8.entry.js} +2 -2
  66. package/dist/affinda/{p-df6c7170.entry.js → p-e10c03b6.entry.js} +2 -2
  67. package/dist/affinda/{p-f5b4923f.entry.js → p-e2667603.entry.js} +2 -2
  68. package/dist/affinda/{p-8fe10b18.entry.js → p-e678100f.entry.js} +2 -2
  69. package/dist/affinda/{p-aa9c2609.entry.js → p-e8a91b15.entry.js} +2 -2
  70. package/dist/affinda/{p-db7eb209.entry.js → p-e9527b93.entry.js} +2 -2
  71. package/dist/affinda/{p-3a7afe33.entry.js → p-eb611fb5.entry.js} +2 -2
  72. package/dist/affinda/{p-bdb3e590.entry.js → p-edb426e6.entry.js} +2 -2
  73. package/dist/affinda/{p-a326d8f6.entry.js → p-f38688c6.entry.js} +2 -2
  74. package/dist/affinda/{p-b69bce30.entry.js → p-f47d0d2d.entry.js} +2 -2
  75. package/dist/affinda/p-f49b41f9.entry.js +2 -0
  76. package/dist/affinda/{p-4ff626de.entry.js → p-f6e1750e.entry.js} +2 -2
  77. package/dist/affinda/{p-62eb01fa.entry.js → p-fad2d40b.entry.js} +2 -2
  78. package/dist/affinda/{p-bc1088a7.entry.js → p-fc19f53c.entry.js} +2 -2
  79. package/dist/affinda/p-fd39a1c2.entry.js +2 -0
  80. package/dist/affinda/{p-4ccc3147.entry.js → p-fe09a283.entry.js} +2 -2
  81. package/dist/affinda/{p-91b71a8f.entry.js → p-fee9359c.entry.js} +2 -2
  82. package/dist/cjs/af-accordion-item.cjs.entry.js +2 -2
  83. package/dist/cjs/af-accordion.cjs.entry.js +2 -2
  84. package/dist/cjs/af-aspect-ratio.cjs.entry.js +1 -1
  85. package/dist/cjs/af-button-group.cjs.entry.js +1 -1
  86. package/dist/cjs/af-button.cjs.entry.js +1 -1
  87. package/dist/cjs/af-card.cjs.entry.js +2 -2
  88. package/dist/cjs/af-center.cjs.entry.js +2 -2
  89. package/dist/cjs/af-checkbox.cjs.entry.js +1 -1
  90. package/dist/cjs/af-client-carousel.cjs.entry.js +2 -2
  91. package/dist/cjs/af-color-swatch.cjs.entry.js +1 -1
  92. package/dist/cjs/af-contact-item.cjs.entry.js +2 -2
  93. package/dist/cjs/af-container.cjs.entry.js +1 -1
  94. package/dist/cjs/af-divider.cjs.entry.js +2 -2
  95. package/dist/cjs/af-feature-accordion.cjs.entry.js +3 -3
  96. package/dist/cjs/af-feature-card.cjs.entry.js +1 -1
  97. package/dist/cjs/af-feature-grid.cjs.entry.js +2 -2
  98. package/dist/cjs/af-fieldset.cjs.entry.js +1 -1
  99. package/dist/cjs/af-footer-column.cjs.entry.js +2 -2
  100. package/dist/cjs/af-footer-link.cjs.entry.js +2 -2
  101. package/dist/cjs/af-footer.cjs.entry.js +2 -2
  102. package/dist/cjs/af-grid-callout.cjs.entry.js +1 -1
  103. package/dist/cjs/af-grid.cjs.entry.js +3 -3
  104. package/dist/cjs/af-heading_5.cjs.entry.js +1 -1
  105. package/dist/cjs/af-hero.cjs.entry.js +3 -3
  106. package/dist/cjs/af-icon-box.cjs.entry.js +2 -2
  107. package/dist/cjs/af-icon-button.cjs.entry.js +1 -1
  108. package/dist/cjs/af-icon-text.cjs.entry.js +2 -2
  109. package/dist/cjs/af-icon.cjs.entry.js +1 -1
  110. package/dist/cjs/af-illustrated-card.cjs.entry.js +2 -2
  111. package/dist/cjs/af-image.cjs.entry.js +2 -2
  112. package/dist/cjs/af-in-page-banner.cjs.entry.js +2 -2
  113. package/dist/cjs/af-inline.cjs.entry.js +2 -2
  114. package/dist/cjs/af-input.cjs.entry.js +24 -6
  115. package/dist/cjs/af-input.entry.cjs.js.map +1 -1
  116. package/dist/cjs/af-logo-well.cjs.entry.js +2 -2
  117. package/dist/cjs/af-nav-accordion-item.cjs.entry.js +3 -3
  118. package/dist/cjs/af-nav-accordion.cjs.entry.js +2 -2
  119. package/dist/cjs/af-nav-card.cjs.entry.js +1 -1
  120. package/dist/cjs/af-nav-menu-nest.cjs.entry.js +2 -2
  121. package/dist/cjs/af-nav-menu.cjs.entry.js +2 -2
  122. package/dist/cjs/af-number-badge.cjs.entry.js +2 -2
  123. package/dist/cjs/af-numbered-stepper-item.cjs.entry.js +2 -2
  124. package/dist/cjs/af-numbered-stepper.cjs.entry.js +2 -2
  125. package/dist/cjs/af-paperclip-decoration.cjs.entry.js +2 -2
  126. package/dist/cjs/af-progress-line.cjs.entry.js +3 -3
  127. package/dist/cjs/af-radio.cjs.entry.js +1 -1
  128. package/dist/cjs/af-section.cjs.entry.js +3 -3
  129. package/dist/cjs/af-show.cjs.entry.js +2 -2
  130. package/dist/cjs/af-social-link.cjs.entry.js +2 -2
  131. package/dist/cjs/af-spacer.cjs.entry.js +2 -2
  132. package/dist/cjs/af-split-section.cjs.entry.js +3 -3
  133. package/dist/cjs/af-stack.cjs.entry.js +2 -2
  134. package/dist/cjs/af-stat.cjs.entry.js +2 -2
  135. package/dist/cjs/af-stats-row.cjs.entry.js +2 -2
  136. package/dist/cjs/af-stepper-step.cjs.entry.js +2 -2
  137. package/dist/cjs/af-stepper.cjs.entry.js +2 -2
  138. package/dist/cjs/af-switch.cjs.entry.js +1 -1
  139. package/dist/cjs/af-tab-bar.cjs.entry.js +2 -2
  140. package/dist/cjs/af-tab.cjs.entry.js +2 -2
  141. package/dist/cjs/af-tag.cjs.entry.js +3 -3
  142. package/dist/cjs/af-testimonial-carousel.cjs.entry.js +2 -2
  143. package/dist/cjs/af-testimonial-stat.cjs.entry.js +2 -2
  144. package/dist/cjs/af-testimonial.cjs.entry.js +3 -3
  145. package/dist/cjs/af-text-image-nest.cjs.entry.js +2 -2
  146. package/dist/cjs/af-text-image.cjs.entry.js +1 -1
  147. package/dist/cjs/af-textarea.cjs.entry.js +15 -2
  148. package/dist/cjs/af-textarea.entry.cjs.js.map +1 -1
  149. package/dist/cjs/af-theme-override.cjs.entry.js +2 -2
  150. package/dist/cjs/af-typography-lockup.cjs.entry.js +1 -1
  151. package/dist/cjs/af-video-container.cjs.entry.js +2 -2
  152. package/dist/cjs/af-visually-hidden.cjs.entry.js +2 -2
  153. package/dist/cjs/affinda.cjs.js +2 -2
  154. package/dist/cjs/{index-3161MbMQ.js → index-BuJz1C1M.js} +647 -9
  155. package/dist/cjs/index-BuJz1C1M.js.map +1 -0
  156. package/dist/cjs/index.cjs.js +1 -1
  157. package/dist/cjs/loader.cjs.js +2 -2
  158. package/dist/collection/components/af-accordion/af-accordion.js +1 -1
  159. package/dist/collection/components/af-accordion-item/af-accordion-item.js +1 -1
  160. package/dist/collection/components/af-card/af-card.js +1 -1
  161. package/dist/collection/components/af-center/af-center.js +1 -1
  162. package/dist/collection/components/af-client-carousel/af-client-carousel.js +1 -1
  163. package/dist/collection/components/af-contact-item/af-contact-item.js +1 -1
  164. package/dist/collection/components/af-divider/af-divider.js +1 -1
  165. package/dist/collection/components/af-feature-accordion/af-feature-accordion.js +2 -2
  166. package/dist/collection/components/af-feature-grid/af-feature-grid.js +1 -1
  167. package/dist/collection/components/af-footer/af-footer.js +1 -1
  168. package/dist/collection/components/af-footer-column/af-footer-column.js +1 -1
  169. package/dist/collection/components/af-footer-link/af-footer-link.js +1 -1
  170. package/dist/collection/components/af-grid/af-grid.js +2 -2
  171. package/dist/collection/components/af-hero/af-hero.js +2 -2
  172. package/dist/collection/components/af-icon-box/af-icon-box.js +1 -1
  173. package/dist/collection/components/af-icon-text/af-icon-text.js +1 -1
  174. package/dist/collection/components/af-illustrated-card/af-illustrated-card.js +1 -1
  175. package/dist/collection/components/af-image/af-image.js +1 -1
  176. package/dist/collection/components/af-in-page-banner/af-in-page-banner.js +1 -1
  177. package/dist/collection/components/af-inline/af-inline.js +1 -1
  178. package/dist/collection/components/af-input/af-input.css +42 -0
  179. package/dist/collection/components/af-input/af-input.js +88 -10
  180. package/dist/collection/components/af-input/af-input.js.map +1 -1
  181. package/dist/collection/components/af-logo-well/af-logo-well.js +1 -1
  182. package/dist/collection/components/af-nav-accordion/af-nav-accordion.js +1 -1
  183. package/dist/collection/components/af-nav-accordion-item/af-nav-accordion-item.js +2 -2
  184. package/dist/collection/components/af-nav-menu/af-nav-menu.js +1 -1
  185. package/dist/collection/components/af-nav-menu-nest/af-nav-menu-nest.js +1 -1
  186. package/dist/collection/components/af-number-badge/af-number-badge.js +1 -1
  187. package/dist/collection/components/af-numbered-stepper/af-numbered-stepper.js +1 -1
  188. package/dist/collection/components/af-numbered-stepper-item/af-numbered-stepper-item.js +1 -1
  189. package/dist/collection/components/af-paperclip-decoration/af-paperclip-decoration.js +1 -1
  190. package/dist/collection/components/af-progress-line/af-progress-line.js +2 -2
  191. package/dist/collection/components/af-section/af-section.js +2 -2
  192. package/dist/collection/components/af-show/af-show.js +1 -1
  193. package/dist/collection/components/af-social-link/af-social-link.js +1 -1
  194. package/dist/collection/components/af-spacer/af-spacer.js +1 -1
  195. package/dist/collection/components/af-split-section/af-split-section.js +2 -2
  196. package/dist/collection/components/af-stack/af-stack.js +1 -1
  197. package/dist/collection/components/af-stat/af-stat.js +1 -1
  198. package/dist/collection/components/af-stats-row/af-stats-row.js +1 -1
  199. package/dist/collection/components/af-stepper/af-stepper.js +1 -1
  200. package/dist/collection/components/af-stepper-step/af-stepper-step.js +1 -1
  201. package/dist/collection/components/af-tab/af-tab.js +1 -1
  202. package/dist/collection/components/af-tab-bar/af-tab-bar.js +1 -1
  203. package/dist/collection/components/af-tag/af-tag.js +2 -2
  204. package/dist/collection/components/af-testimonial/af-testimonial.js +2 -2
  205. package/dist/collection/components/af-testimonial-carousel/af-testimonial-carousel.js +1 -1
  206. package/dist/collection/components/af-testimonial-stat/af-testimonial-stat.js +1 -1
  207. package/dist/collection/components/af-text-image-nest/af-text-image-nest.js +1 -1
  208. package/dist/collection/components/af-textarea/af-textarea.js +20 -1
  209. package/dist/collection/components/af-textarea/af-textarea.js.map +1 -1
  210. package/dist/collection/components/af-theme-override/af-theme-override.js +1 -1
  211. package/dist/collection/components/af-video-container/af-video-container.js +1 -1
  212. package/dist/collection/components/af-visually-hidden/af-visually-hidden.js +1 -1
  213. package/dist/components/af-accordion-item.js +2 -2
  214. package/dist/components/af-accordion.js +2 -2
  215. package/dist/components/af-aspect-ratio.js +1 -1
  216. package/dist/components/af-button-group.js +1 -1
  217. package/dist/components/af-button.js +1 -1
  218. package/dist/components/af-card.js +1 -1
  219. package/dist/components/af-center.js +2 -2
  220. package/dist/components/af-checkbox.js +1 -1
  221. package/dist/components/af-client-carousel.js +2 -2
  222. package/dist/components/af-color-swatch.js +1 -1
  223. package/dist/components/af-contact-item.js +2 -2
  224. package/dist/components/af-container.js +1 -1
  225. package/dist/components/af-divider.js +2 -2
  226. package/dist/components/af-feature-accordion.js +3 -3
  227. package/dist/components/af-feature-card.js +1 -1
  228. package/dist/components/af-feature-grid.js +3 -3
  229. package/dist/components/af-fieldset.js +1 -1
  230. package/dist/components/af-footer-column.js +2 -2
  231. package/dist/components/af-footer-link.js +2 -2
  232. package/dist/components/af-footer.js +2 -2
  233. package/dist/components/af-grid-callout.js +2 -2
  234. package/dist/components/af-grid.js +3 -3
  235. package/dist/components/af-heading.js +1 -1
  236. package/dist/components/af-hero.js +1 -1
  237. package/dist/components/af-icon-box.js +1 -1
  238. package/dist/components/af-icon-button.js +1 -1
  239. package/dist/components/af-icon-text.js +5 -5
  240. package/dist/components/af-icon.js +1 -1
  241. package/dist/components/af-illustrated-card.js +1 -1
  242. package/dist/components/af-image.js +1 -1
  243. package/dist/components/af-in-page-banner.js +3 -3
  244. package/dist/components/af-inline.js +2 -2
  245. package/dist/components/af-input.js +1 -1
  246. package/dist/components/af-logo-well.js +2 -2
  247. package/dist/components/af-logo.js +1 -1
  248. package/dist/components/af-nav-accordion-item.js +3 -3
  249. package/dist/components/af-nav-accordion.js +2 -2
  250. package/dist/components/af-nav-card.js +1 -1
  251. package/dist/components/af-nav-item.js +1 -1
  252. package/dist/components/af-nav-menu-nest.js +2 -2
  253. package/dist/components/af-nav-menu.js +2 -2
  254. package/dist/components/af-navbar.js +1 -1
  255. package/dist/components/af-number-badge.js +1 -1
  256. package/dist/components/af-numbered-stepper-item.js +4 -4
  257. package/dist/components/af-numbered-stepper.js +2 -2
  258. package/dist/components/af-paperclip-decoration.js +2 -2
  259. package/dist/components/af-progress-line.js +1 -1
  260. package/dist/components/af-radio.js +1 -1
  261. package/dist/components/af-section.js +1 -1
  262. package/dist/components/af-show.js +2 -2
  263. package/dist/components/af-social-link.js +2 -2
  264. package/dist/components/af-spacer.js +2 -2
  265. package/dist/components/af-split-section.js +4 -4
  266. package/dist/components/af-stack.js +2 -2
  267. package/dist/components/af-stat.js +4 -4
  268. package/dist/components/af-stats-row.js +2 -2
  269. package/dist/components/af-stepper-step.js +2 -2
  270. package/dist/components/af-stepper.js +2 -2
  271. package/dist/components/af-switch.js +1 -1
  272. package/dist/components/af-tab-bar.js +1 -1
  273. package/dist/components/af-tab.js +1 -1
  274. package/dist/components/af-tag.js +1 -1
  275. package/dist/components/af-testimonial-carousel.js +3 -3
  276. package/dist/components/af-testimonial-stat.js +4 -4
  277. package/dist/components/af-testimonial.js +6 -6
  278. package/dist/components/af-text-image-nest.js +2 -2
  279. package/dist/components/af-text-image.js +2 -2
  280. package/dist/components/af-text.js +1 -1
  281. package/dist/components/af-textarea.js +1 -1
  282. package/dist/components/af-theme-override.js +2 -2
  283. package/dist/components/af-typography-lockup.js +1 -1
  284. package/dist/components/af-video-container.js +4 -4
  285. package/dist/components/af-visually-hidden.js +2 -2
  286. package/dist/components/index.js +25 -25
  287. package/dist/components/{p-B4IVxpr4.js → p-B4bimVSM.js} +5 -5
  288. package/dist/components/{p-B4IVxpr4.js.map → p-B4bimVSM.js.map} +1 -1
  289. package/dist/components/{p-BuiXTazC.js → p-B7J9U9if.js} +3 -3
  290. package/dist/components/{p-BuiXTazC.js.map → p-B7J9U9if.js.map} +1 -1
  291. package/dist/components/{p-CZdcAZe_.js → p-BExjo6P2.js} +4 -4
  292. package/dist/components/{p-CZdcAZe_.js.map → p-BExjo6P2.js.map} +1 -1
  293. package/dist/components/{p-BMs3J6ty.js → p-BSgEGp12.js} +8 -8
  294. package/dist/components/{p-BMs3J6ty.js.map → p-BSgEGp12.js.map} +1 -1
  295. package/dist/components/{p-BkTUo72F.js → p-B_r5b4JI.js} +3 -3
  296. package/dist/components/{p-BkTUo72F.js.map → p-B_r5b4JI.js.map} +1 -1
  297. package/dist/components/{p-DQF6qg3h.js → p-BgQvXXuB.js} +4 -4
  298. package/dist/components/{p-DQF6qg3h.js.map → p-BgQvXXuB.js.map} +1 -1
  299. package/dist/components/{p-DQFOagz0.js → p-BiSEOBg5.js} +4 -4
  300. package/dist/components/{p-DQFOagz0.js.map → p-BiSEOBg5.js.map} +1 -1
  301. package/dist/components/{p-QpoTJlVn.js → p-BipyebXl.js} +3 -3
  302. package/dist/components/{p-QpoTJlVn.js.map → p-BipyebXl.js.map} +1 -1
  303. package/dist/components/{p-CiY0Twna.js → p-Btpdr0Bi.js} +644 -9
  304. package/dist/components/p-Btpdr0Bi.js.map +1 -0
  305. package/dist/components/{p-Dye7hRk7.js → p-BwowgpiS.js} +5 -5
  306. package/dist/components/{p-Dye7hRk7.js.map → p-BwowgpiS.js.map} +1 -1
  307. package/dist/components/{p-CaHyFRpU.js → p-C05qWmXd.js} +3 -3
  308. package/dist/components/{p-CaHyFRpU.js.map → p-C05qWmXd.js.map} +1 -1
  309. package/dist/components/{p-G5cG9ahw.js → p-C1nX4HkM.js} +3 -3
  310. package/dist/components/{p-G5cG9ahw.js.map → p-C1nX4HkM.js.map} +1 -1
  311. package/dist/components/{p-DGlAo2Hc.js → p-C8HmyE5-.js} +3 -3
  312. package/dist/components/{p-DGlAo2Hc.js.map → p-C8HmyE5-.js.map} +1 -1
  313. package/dist/components/{p-DmlCoFGW.js → p-CMatO7AD.js} +3 -3
  314. package/dist/components/{p-DmlCoFGW.js.map → p-CMatO7AD.js.map} +1 -1
  315. package/dist/components/{p-BTZzBVqv.js → p-CNPKZ3ct.js} +5 -5
  316. package/dist/components/{p-BTZzBVqv.js.map → p-CNPKZ3ct.js.map} +1 -1
  317. package/dist/components/{p-BsHk9vlU.js → p-CSejCgwa.js} +4 -4
  318. package/dist/components/{p-BsHk9vlU.js.map → p-CSejCgwa.js.map} +1 -1
  319. package/dist/components/{p-CnbO_hx0.js → p-CTVS7dJ6.js} +4 -4
  320. package/dist/components/{p-CnbO_hx0.js.map → p-CTVS7dJ6.js.map} +1 -1
  321. package/dist/components/{p-B-hgy9Qr.js → p-CeWN48Eq.js} +3 -3
  322. package/dist/components/{p-B-hgy9Qr.js.map → p-CeWN48Eq.js.map} +1 -1
  323. package/dist/components/{p-C_y6F4SM.js → p-CixFE5Cu.js} +17 -4
  324. package/dist/components/p-CixFE5Cu.js.map +1 -0
  325. package/dist/components/{p-CUmn76Kf.js → p-CkaL7yIW.js} +3 -3
  326. package/dist/components/{p-CUmn76Kf.js.map → p-CkaL7yIW.js.map} +1 -1
  327. package/dist/components/{p-CeBCwjRf.js → p-D5-m35gX.js} +3 -3
  328. package/dist/components/{p-CeBCwjRf.js.map → p-D5-m35gX.js.map} +1 -1
  329. package/dist/components/{p--aWqZ9H9.js → p-DMXuAjLo.js} +3 -3
  330. package/dist/components/{p--aWqZ9H9.js.map → p-DMXuAjLo.js.map} +1 -1
  331. package/dist/components/{p-DrCZBGKv.js → p-DPgWkfHr.js} +6 -6
  332. package/dist/components/{p-DrCZBGKv.js.map → p-DPgWkfHr.js.map} +1 -1
  333. package/dist/components/{p-DobkLkti.js → p-Dacy0GsN.js} +29 -8
  334. package/dist/components/p-Dacy0GsN.js.map +1 -0
  335. package/dist/components/{p-DWD7Oc5l.js → p-DrEl4PxE.js} +3 -3
  336. package/dist/components/{p-DWD7Oc5l.js.map → p-DrEl4PxE.js.map} +1 -1
  337. package/dist/components/{p-CJU2A9Ab.js → p-DrXw6vxx.js} +3 -3
  338. package/dist/components/{p-CJU2A9Ab.js.map → p-DrXw6vxx.js.map} +1 -1
  339. package/dist/components/{p-DyqBBl8X.js → p-DxYqml-M.js} +5 -5
  340. package/dist/components/{p-DyqBBl8X.js.map → p-DxYqml-M.js.map} +1 -1
  341. package/dist/components/{p-Bx-hxLP0.js → p-FV14KcoH.js} +3 -3
  342. package/dist/components/{p-Bx-hxLP0.js.map → p-FV14KcoH.js.map} +1 -1
  343. package/dist/components/{p-CImZ9bq8.js → p-XmT5SQOF.js} +3 -3
  344. package/dist/components/{p-CImZ9bq8.js.map → p-XmT5SQOF.js.map} +1 -1
  345. package/dist/components/{p-B_32JVKl.js → p-fLdNRQwR.js} +4 -4
  346. package/dist/components/{p-B_32JVKl.js.map → p-fLdNRQwR.js.map} +1 -1
  347. package/dist/components/{p-DnDXrxJ7.js → p-joRNg4Kk.js} +3 -3
  348. package/dist/components/{p-DnDXrxJ7.js.map → p-joRNg4Kk.js.map} +1 -1
  349. package/dist/components/{p-DdH3uwBx.js → p-sIePTJnR.js} +6 -6
  350. package/dist/components/{p-DdH3uwBx.js.map → p-sIePTJnR.js.map} +1 -1
  351. package/dist/esm/af-accordion-item.entry.js +2 -2
  352. package/dist/esm/af-accordion.entry.js +2 -2
  353. package/dist/esm/af-aspect-ratio.entry.js +1 -1
  354. package/dist/esm/af-button-group.entry.js +1 -1
  355. package/dist/esm/af-button.entry.js +1 -1
  356. package/dist/esm/af-card.entry.js +2 -2
  357. package/dist/esm/af-center.entry.js +2 -2
  358. package/dist/esm/af-checkbox.entry.js +1 -1
  359. package/dist/esm/af-client-carousel.entry.js +2 -2
  360. package/dist/esm/af-color-swatch.entry.js +1 -1
  361. package/dist/esm/af-contact-item.entry.js +2 -2
  362. package/dist/esm/af-container.entry.js +1 -1
  363. package/dist/esm/af-divider.entry.js +2 -2
  364. package/dist/esm/af-feature-accordion.entry.js +3 -3
  365. package/dist/esm/af-feature-card.entry.js +1 -1
  366. package/dist/esm/af-feature-grid.entry.js +2 -2
  367. package/dist/esm/af-fieldset.entry.js +1 -1
  368. package/dist/esm/af-footer-column.entry.js +2 -2
  369. package/dist/esm/af-footer-link.entry.js +2 -2
  370. package/dist/esm/af-footer.entry.js +2 -2
  371. package/dist/esm/af-grid-callout.entry.js +1 -1
  372. package/dist/esm/af-grid.entry.js +3 -3
  373. package/dist/esm/af-heading_5.entry.js +1 -1
  374. package/dist/esm/af-hero.entry.js +3 -3
  375. package/dist/esm/af-icon-box.entry.js +2 -2
  376. package/dist/esm/af-icon-button.entry.js +1 -1
  377. package/dist/esm/af-icon-text.entry.js +2 -2
  378. package/dist/esm/af-icon.entry.js +1 -1
  379. package/dist/esm/af-illustrated-card.entry.js +2 -2
  380. package/dist/esm/af-image.entry.js +2 -2
  381. package/dist/esm/af-in-page-banner.entry.js +2 -2
  382. package/dist/esm/af-inline.entry.js +2 -2
  383. package/dist/esm/af-input.entry.js +24 -6
  384. package/dist/esm/af-input.entry.js.map +1 -1
  385. package/dist/esm/af-logo-well.entry.js +2 -2
  386. package/dist/esm/af-nav-accordion-item.entry.js +3 -3
  387. package/dist/esm/af-nav-accordion.entry.js +2 -2
  388. package/dist/esm/af-nav-card.entry.js +1 -1
  389. package/dist/esm/af-nav-menu-nest.entry.js +2 -2
  390. package/dist/esm/af-nav-menu.entry.js +2 -2
  391. package/dist/esm/af-number-badge.entry.js +2 -2
  392. package/dist/esm/af-numbered-stepper-item.entry.js +2 -2
  393. package/dist/esm/af-numbered-stepper.entry.js +2 -2
  394. package/dist/esm/af-paperclip-decoration.entry.js +2 -2
  395. package/dist/esm/af-progress-line.entry.js +3 -3
  396. package/dist/esm/af-radio.entry.js +1 -1
  397. package/dist/esm/af-section.entry.js +3 -3
  398. package/dist/esm/af-show.entry.js +2 -2
  399. package/dist/esm/af-social-link.entry.js +2 -2
  400. package/dist/esm/af-spacer.entry.js +2 -2
  401. package/dist/esm/af-split-section.entry.js +3 -3
  402. package/dist/esm/af-stack.entry.js +2 -2
  403. package/dist/esm/af-stat.entry.js +2 -2
  404. package/dist/esm/af-stats-row.entry.js +2 -2
  405. package/dist/esm/af-stepper-step.entry.js +2 -2
  406. package/dist/esm/af-stepper.entry.js +2 -2
  407. package/dist/esm/af-switch.entry.js +1 -1
  408. package/dist/esm/af-tab-bar.entry.js +2 -2
  409. package/dist/esm/af-tab.entry.js +2 -2
  410. package/dist/esm/af-tag.entry.js +3 -3
  411. package/dist/esm/af-testimonial-carousel.entry.js +2 -2
  412. package/dist/esm/af-testimonial-stat.entry.js +2 -2
  413. package/dist/esm/af-testimonial.entry.js +3 -3
  414. package/dist/esm/af-text-image-nest.entry.js +2 -2
  415. package/dist/esm/af-text-image.entry.js +1 -1
  416. package/dist/esm/af-textarea.entry.js +15 -2
  417. package/dist/esm/af-textarea.entry.js.map +1 -1
  418. package/dist/esm/af-theme-override.entry.js +2 -2
  419. package/dist/esm/af-typography-lockup.entry.js +1 -1
  420. package/dist/esm/af-video-container.entry.js +2 -2
  421. package/dist/esm/af-visually-hidden.entry.js +2 -2
  422. package/dist/esm/affinda.js +3 -3
  423. package/dist/esm/{index-C4WBekD2.js → index-CYq0zyKH.js} +647 -9
  424. package/dist/esm/index-CYq0zyKH.js.map +1 -0
  425. package/dist/esm/index.js +1 -1
  426. package/dist/esm/loader.js +3 -3
  427. package/dist/hydrate/index.d.ts +275 -0
  428. package/dist/hydrate/index.js +24911 -0
  429. package/dist/hydrate/index.mjs +24903 -0
  430. package/dist/hydrate/package.json +12 -0
  431. package/dist/types/components/af-input/af-input.d.ts +21 -6
  432. package/dist/types/components/af-textarea/af-textarea.d.ts +9 -0
  433. package/dist/types/components.d.ts +63 -13
  434. package/package.json +21 -1
  435. package/dist/affinda/p-0254b263.entry.js +0 -2
  436. package/dist/affinda/p-27026c90.entry.js +0 -2
  437. package/dist/affinda/p-283a9dec.entry.js +0 -2
  438. package/dist/affinda/p-2d5eb5ac.entry.js +0 -2
  439. package/dist/affinda/p-2d5eb5ac.entry.js.map +0 -1
  440. package/dist/affinda/p-64f24ab4.entry.js +0 -2
  441. package/dist/affinda/p-64f24ab4.entry.js.map +0 -1
  442. package/dist/affinda/p-6df7b689.entry.js +0 -2
  443. package/dist/affinda/p-78941fec.entry.js +0 -2
  444. package/dist/affinda/p-7faa3fb9.entry.js +0 -2
  445. package/dist/affinda/p-972984a9.entry.js +0 -2
  446. package/dist/affinda/p-988fb256.entry.js +0 -2
  447. package/dist/affinda/p-C4WBekD2.js +0 -3
  448. package/dist/affinda/p-C4WBekD2.js.map +0 -1
  449. package/dist/affinda/p-d0fdef08.entry.js +0 -2
  450. package/dist/affinda/p-f76ef563.entry.js +0 -2
  451. package/dist/cjs/index-3161MbMQ.js.map +0 -1
  452. package/dist/components/p-C_y6F4SM.js.map +0 -1
  453. package/dist/components/p-CiY0Twna.js.map +0 -1
  454. package/dist/components/p-DobkLkti.js.map +0 -1
  455. package/dist/esm/index-C4WBekD2.js.map +0 -1
  456. /package/dist/affinda/{p-6de54e73.entry.js.map → p-01b848e9.entry.js.map} +0 -0
  457. /package/dist/affinda/{p-369dfdd8.entry.js.map → p-0c4a59b3.entry.js.map} +0 -0
  458. /package/dist/affinda/{p-5885ebd3.entry.js.map → p-0c7d81d0.entry.js.map} +0 -0
  459. /package/dist/affinda/{p-4f731d31.entry.js.map → p-0cbb1cb2.entry.js.map} +0 -0
  460. /package/dist/affinda/{p-988fb256.entry.js.map → p-11d41c9a.entry.js.map} +0 -0
  461. /package/dist/affinda/{p-d40f8d18.entry.js.map → p-1554f3d7.entry.js.map} +0 -0
  462. /package/dist/affinda/{p-27026c90.entry.js.map → p-1c19e94c.entry.js.map} +0 -0
  463. /package/dist/affinda/{p-3b429a16.entry.js.map → p-1c922fff.entry.js.map} +0 -0
  464. /package/dist/affinda/{p-4f15b8f0.entry.js.map → p-1e59a051.entry.js.map} +0 -0
  465. /package/dist/affinda/{p-7eb0875d.entry.js.map → p-20faf28d.entry.js.map} +0 -0
  466. /package/dist/affinda/{p-cebfc8a9.entry.js.map → p-223b2e70.entry.js.map} +0 -0
  467. /package/dist/affinda/{p-a70ce66f.entry.js.map → p-2315cb6b.entry.js.map} +0 -0
  468. /package/dist/affinda/{p-42c4d7b1.entry.js.map → p-2716cdc4.entry.js.map} +0 -0
  469. /package/dist/affinda/{p-b13c1438.entry.js.map → p-296a6ece.entry.js.map} +0 -0
  470. /package/dist/affinda/{p-09e202d1.entry.js.map → p-2e67fb0d.entry.js.map} +0 -0
  471. /package/dist/affinda/{p-3cd4edd0.entry.js.map → p-319b51c7.entry.js.map} +0 -0
  472. /package/dist/affinda/{p-8a2cbcf0.entry.js.map → p-31d96ddc.entry.js.map} +0 -0
  473. /package/dist/affinda/{p-9dfb5fab.entry.js.map → p-39a40e6a.entry.js.map} +0 -0
  474. /package/dist/affinda/{p-02427605.entry.js.map → p-3df90209.entry.js.map} +0 -0
  475. /package/dist/affinda/{p-dd933272.entry.js.map → p-3fb33478.entry.js.map} +0 -0
  476. /package/dist/affinda/{p-43a0286a.entry.js.map → p-47d2f72b.entry.js.map} +0 -0
  477. /package/dist/affinda/{p-a35ab849.entry.js.map → p-5e966aa6.entry.js.map} +0 -0
  478. /package/dist/affinda/{p-d275fb5d.entry.js.map → p-604399ed.entry.js.map} +0 -0
  479. /package/dist/affinda/{p-17c2999b.entry.js.map → p-653bca57.entry.js.map} +0 -0
  480. /package/dist/affinda/{p-5e01b103.entry.js.map → p-6c4137dc.entry.js.map} +0 -0
  481. /package/dist/affinda/{p-b82fc7f1.entry.js.map → p-761f06ae.entry.js.map} +0 -0
  482. /package/dist/affinda/{p-6949fbdf.entry.js.map → p-764601e6.entry.js.map} +0 -0
  483. /package/dist/affinda/{p-b2a41a48.entry.js.map → p-765883e7.entry.js.map} +0 -0
  484. /package/dist/affinda/{p-4f422489.entry.js.map → p-7b60b684.entry.js.map} +0 -0
  485. /package/dist/affinda/{p-f76ef563.entry.js.map → p-805148d0.entry.js.map} +0 -0
  486. /package/dist/affinda/{p-1aa795c7.entry.js.map → p-8eb57e35.entry.js.map} +0 -0
  487. /package/dist/affinda/{p-606159d2.entry.js.map → p-90e9e29c.entry.js.map} +0 -0
  488. /package/dist/affinda/{p-08a42935.entry.js.map → p-92c61bad.entry.js.map} +0 -0
  489. /package/dist/affinda/{p-646b73fb.entry.js.map → p-94119fa2.entry.js.map} +0 -0
  490. /package/dist/affinda/{p-1efa4787.entry.js.map → p-99b37588.entry.js.map} +0 -0
  491. /package/dist/affinda/{p-8eb60b77.entry.js.map → p-9c470a88.entry.js.map} +0 -0
  492. /package/dist/affinda/{p-6898d4bd.entry.js.map → p-9c8d18a3.entry.js.map} +0 -0
  493. /package/dist/affinda/{p-42c69bc9.entry.js.map → p-9d85f685.entry.js.map} +0 -0
  494. /package/dist/affinda/{p-15eac0d5.entry.js.map → p-aa0cb70d.entry.js.map} +0 -0
  495. /package/dist/affinda/{p-c0f71971.entry.js.map → p-aabe4d24.entry.js.map} +0 -0
  496. /package/dist/affinda/{p-d12d33c8.entry.js.map → p-ae27e9da.entry.js.map} +0 -0
  497. /package/dist/affinda/{p-73de3aa7.entry.js.map → p-bc3d2bb4.entry.js.map} +0 -0
  498. /package/dist/affinda/{p-7640c285.entry.js.map → p-bc59dc0e.entry.js.map} +0 -0
  499. /package/dist/affinda/{p-c2c16447.entry.js.map → p-be71688c.entry.js.map} +0 -0
  500. /package/dist/affinda/{p-d34da6c0.entry.js.map → p-c6aa66f3.entry.js.map} +0 -0
  501. /package/dist/affinda/{p-972984a9.entry.js.map → p-c87e5b29.entry.js.map} +0 -0
  502. /package/dist/affinda/{p-d9ff321b.entry.js.map → p-dd30a9b8.entry.js.map} +0 -0
  503. /package/dist/affinda/{p-df6c7170.entry.js.map → p-e10c03b6.entry.js.map} +0 -0
  504. /package/dist/affinda/{p-f5b4923f.entry.js.map → p-e2667603.entry.js.map} +0 -0
  505. /package/dist/affinda/{p-8fe10b18.entry.js.map → p-e678100f.entry.js.map} +0 -0
  506. /package/dist/affinda/{p-aa9c2609.entry.js.map → p-e8a91b15.entry.js.map} +0 -0
  507. /package/dist/affinda/{p-db7eb209.entry.js.map → p-e9527b93.entry.js.map} +0 -0
  508. /package/dist/affinda/{p-3a7afe33.entry.js.map → p-eb611fb5.entry.js.map} +0 -0
  509. /package/dist/affinda/{p-bdb3e590.entry.js.map → p-edb426e6.entry.js.map} +0 -0
  510. /package/dist/affinda/{p-a326d8f6.entry.js.map → p-f38688c6.entry.js.map} +0 -0
  511. /package/dist/affinda/{p-b69bce30.entry.js.map → p-f47d0d2d.entry.js.map} +0 -0
  512. /package/dist/affinda/{p-283a9dec.entry.js.map → p-f49b41f9.entry.js.map} +0 -0
  513. /package/dist/affinda/{p-4ff626de.entry.js.map → p-f6e1750e.entry.js.map} +0 -0
  514. /package/dist/affinda/{p-62eb01fa.entry.js.map → p-fad2d40b.entry.js.map} +0 -0
  515. /package/dist/affinda/{p-bc1088a7.entry.js.map → p-fc19f53c.entry.js.map} +0 -0
  516. /package/dist/affinda/{p-6df7b689.entry.js.map → p-fd39a1c2.entry.js.map} +0 -0
  517. /package/dist/affinda/{p-4ccc3147.entry.js.map → p-fe09a283.entry.js.map} +0 -0
  518. /package/dist/affinda/{p-91b71a8f.entry.js.map → p-fee9359c.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"file":"p-CZdcAZe_.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-navbar/af-navbar.css?tag=af-navbar&encapsulation=scoped","src/components/af-navbar/af-navbar.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n/* Spacer element that sits in normal document flow to prevent content overlap */\n.navbar-spacer {\n height: 100px; /* Accounts for navbar height + top margin */\n}\n\n/* Theme variants for spacer background - matches section themes */\n.navbar-spacer.theme-white {\n background-color: var(--colour-brand-white, #FFFFFF);\n}\n\n.navbar-spacer.theme-inkwell {\n background-color: var(--colour-brand-inkwell, #14343B);\n}\n\n.navbar-spacer.theme-mist-green {\n background-color: var(--colour-brand-mist-green, #C6D5D1);\n}\n\n.navbar-spacer.theme-soft-clay {\n background-color: var(--colour-softclay-400, #c0ab8d);\n}\n\n/* Sticky navbar that floats above the spacer */\n.navbar-container {\n position: fixed;\n /* Add safe-area-inset-top so the pill drops below the iOS notch / status bar\n when the page uses viewport-fit=cover. Falls back to the original 32px. */\n top: max(32px, env(safe-area-inset-top));\n left: 0;\n right: 0;\n z-index: 10;\n /* Horizontal padding honours safe-area-inset-left/right for landscape on\n notched devices; the inset is added on top of the existing 80px gutter. */\n padding: 0 calc(80px + env(safe-area-inset-right)) 0 calc(80px + env(safe-area-inset-left));\n box-sizing: border-box;\n}\n\n.navbar {\n background: var(--colour-background-white, #ffffff);\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 8px 8px 40px;\n box-sizing: border-box;\n flex-wrap: nowrap; /* Prevent wrapping */\n}\n\n/* Left section */\n.navbar-left {\n display: flex;\n align-items: center;\n gap: 32px;\n flex-shrink: 0;\n}\n\n.logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* Mobile menu toggle button */\n.mobile-menu-toggle {\n display: none;\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--colour-brand-inkwell, #14343b);\n margin-left: auto;\n}\n\n.mobile-menu-toggle svg {\n display: block;\n}\n\n.nav-links {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: nowrap;\n}\n\n/* Right section */\n.navbar-right {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.nav-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.nav-button {\n display: flex;\n align-items: center;\n}\n\n/* Dropdown container. The container's top is raised 8px into what\n was previously a blank gap between the nav pill and the panel, and\n that 8px is absorbed as container top-padding — so the visible panel\n stays put, but the hoverable region is now continuous between the\n nav pill and the dropdown. Without this, the mouse crosses an\n un-hovered strip on its way from trigger to panel and the navbar's\n mouseleave handler fires a close. */\n.dropdown-container {\n position: absolute;\n top: 100px;\n left: 0;\n right: 0;\n padding: 8px 80px 0;\n pointer-events: none;\n opacity: 0;\n transform: translateY(-8px);\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dropdown-container.is-open {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(0);\n}\n\n.dropdown-panel {\n background: var(--colour-background-base, #ffffff);\n border-radius: 32px;\n overflow: hidden;\n /* shadow-navbar replaces the hand-rolled `0 4px 24px rgba(20, 52, 59, 0.12)`;\n * same value, now sourced from the token ladder so the marketing site can\n * retire its matching bespoke rule. */\n box-shadow: var(--shadow-navbar, 0 4px 24px rgba(20, 52, 59, 0.12));\n}\n\n/* Hide empty dropdown slots */\n.dropdown-panel:empty {\n display: none;\n}\n\n/* Mobile menu panel - separate from navbar for proper positioning */\n.mobile-menu-panel {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--colour-background-base, #ffffff);\n z-index: 9;\n /* Full-viewport drawer: pad the top below the notch, the bottom above the\n home indicator, and the sides away from landscape edge cutouts. */\n padding:\n max(100px, calc(100px + env(safe-area-inset-top)))\n calc(16px + env(safe-area-inset-right))\n max(24px, env(safe-area-inset-bottom))\n calc(16px + env(safe-area-inset-left));\n overflow-y: auto;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n}\n\n.mobile-menu-panel.is-open {\n display: block;\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Mobile CTA button container */\n.mobile-button-container {\n margin-bottom: 8px;\n}\n\n.mobile-button-container ::slotted(*) {\n width: 100%;\n}\n\n/* Mobile menu content - flex column ensures items stack vertically */\n.mobile-menu-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n/* Force slotted items to take full width for composability */\n.mobile-menu-content ::slotted(*) {\n flex: 0 0 auto;\n width: 100%;\n}\n\n/* \n * Breakpoint 1: Hide \"Talk to us\" and \"Log in\" (nav-actions) \n * This happens first as the viewport gets narrower\n * Matches affinda.com behavior at ~1100px\n */\n@media (max-width: 1099px) {\n .nav-actions {\n display: none;\n }\n \n .navbar-right {\n gap: 0;\n }\n}\n\n/* Tablet adjustments */\n@media (max-width: 1024px) {\n .navbar-spacer {\n height: 88px;\n }\n\n .navbar-container {\n top: max(24px, env(safe-area-inset-top));\n padding: 0 calc(40px + env(safe-area-inset-right)) 0 calc(40px + env(safe-area-inset-left));\n }\n\n .navbar-left {\n gap: 24px;\n }\n\n .nav-links {\n gap: 4px;\n }\n\n .dropdown-container {\n padding: 0 40px;\n }\n}\n\n/* \n * Breakpoint 2: Switch to hamburger menu\n * Matches affinda.com behavior at 991px\n */\n@media (max-width: 991px) {\n .navbar-spacer {\n height: 72px;\n }\n\n .navbar-container {\n top: max(16px, env(safe-area-inset-top));\n padding: 0 calc(16px + env(safe-area-inset-right)) 0 calc(16px + env(safe-area-inset-left));\n z-index: 11; /* Above mobile menu panel */\n }\n\n .navbar {\n padding: 8px 8px 8px 24px; /* Figma: 8px padding right, 24px left on mobile */\n flex-direction: row;\n border-radius: 9999px; /* Keep pill shape on mobile */\n gap: 0;\n }\n\n .navbar-left {\n width: auto;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n gap: 16px;\n flex: 1;\n }\n\n /* Show hamburger button on mobile */\n .mobile-menu-toggle {\n display: flex;\n padding: 12px;\n margin-left: auto;\n border-radius: 9999px;\n border: 1px solid var(--colour-brand-inkwell, #14343b);\n }\n\n .mobile-menu-toggle:hover {\n background: rgba(20, 52, 59, 0.05);\n }\n\n /* Hide nav links on mobile - they're in the mobile menu panel */\n .nav-links {\n display: none;\n }\n\n /* Hide right section on mobile - button is in mobile menu panel */\n .navbar-right {\n display: none;\n }\n\n /* Hide desktop dropdown on mobile */\n .dropdown-container {\n display: none;\n }\n\n /* Mobile menu panel adjustments */\n .mobile-menu-panel {\n padding-top: max(88px, calc(88px + env(safe-area-inset-top))); /* Accounts for navbar height + notch */\n }\n\n .mobile-button-container {\n padding: 0 12px;\n margin-bottom: 8px;\n }\n\n .mobile-button-container ::slotted(af-button),\n .mobile-button-container ::slotted(button) {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n}\n\n/* ==========================================================================\n Force Mobile Mode\n Apply mobile styles regardless of viewport when force-mobile attribute is set\n ========================================================================== */\n\n:host([force-mobile]) .navbar-spacer {\n height: 72px;\n}\n\n:host([force-mobile]) .navbar-container {\n top: max(16px, env(safe-area-inset-top));\n padding: 0 calc(16px + env(safe-area-inset-right)) 0 calc(16px + env(safe-area-inset-left));\n z-index: 11;\n}\n\n:host([force-mobile]) .navbar {\n padding: 8px 8px 8px 24px;\n flex-direction: row;\n border-radius: 9999px;\n gap: 0;\n}\n\n:host([force-mobile]) .navbar-left {\n width: auto;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n gap: 16px;\n flex: 1;\n}\n\n:host([force-mobile]) .mobile-menu-toggle {\n display: flex;\n padding: 12px;\n margin-left: auto;\n border-radius: 9999px;\n border: 1px solid var(--colour-brand-inkwell, #14343b);\n}\n\n:host([force-mobile]) .mobile-menu-toggle:hover {\n background: rgba(20, 52, 59, 0.05);\n}\n\n:host([force-mobile]) .nav-links {\n display: none;\n}\n\n:host([force-mobile]) .navbar-right {\n display: none;\n}\n\n:host([force-mobile]) .nav-actions {\n display: none;\n}\n\n:host([force-mobile]) .dropdown-container {\n display: none;\n}\n\n:host([force-mobile]) .mobile-menu-panel {\n padding-top: max(88px, calc(88px + env(safe-area-inset-top)));\n}\n\n:host([force-mobile]) .mobile-menu-panel.is-open {\n display: block;\n opacity: 1;\n pointer-events: auto;\n}\n\n:host([force-mobile]) .mobile-button-container {\n padding: 0 12px;\n margin-bottom: 8px;\n}\n\n:host([force-mobile]) .mobile-button-container ::slotted(af-button),\n:host([force-mobile]) .mobile-button-container ::slotted(button) {\n width: 100%;\n display: flex;\n justify-content: center;\n}\n\n/* Force mobile: flex column ensures items stack vertically */\n:host([force-mobile]) .mobile-menu-content {\n display: flex;\n flex-direction: column;\n}\n\n/* Force mobile: slotted items take full width for composability */\n:host([force-mobile]) .mobile-menu-content ::slotted(*) {\n flex: 0 0 auto;\n width: 100%;\n}\n","import { Component, State, h, Host, Prop, Element, Listen } from '@stencil/core';\nimport type { Theme } from '../../types';\n\n/**\n * A full-width navigation bar component that provides the main site navigation.\n * Features a pill-shaped container with logo, navigation links, and action buttons.\n * Includes mobile hamburger menu and support for mega-menu dropdowns.\n * \n * The logo slot can be used to provide a custom logo. If no logo is provided,\n * the default Affinda logo will be displayed.\n * \n * **Slots:**\n * - `logo` - Logo area (defaults to Affinda logo if empty)\n * - `start` - Primary navigation links (left side, desktop)\n * - `end` - Secondary/utility links (right side)\n * - `button` - Call-to-action button\n * - `dropdowns` - One or more dropdown panels, each a `<div data-for=\"id\">`\n * where `id` matches the `data-dropdown=\"id\"` attribute on the trigger.\n * Clicking a trigger toggles the matching panel; only one is visible at\n * a time.\n * - `mobile-menu` - Mobile menu content (use af-nav-accordion for accordion menus)\n * - `mobile-button` - CTA button for mobile menu (appears at top)\n */\n@Component({\n tag: 'af-navbar',\n styleUrl: 'af-navbar.css',\n shadow: false,\n scoped: true,\n})\nexport class AfNavbar {\n @Element() el!: HTMLElement;\n\n @State() mobileMenuOpen: boolean = false;\n \n /** The currently open dropdown identifier (null if none open) */\n @State() activeDropdown: string | null = null;\n\n /** Whether to show the default Affinda logo when no logo slot content is provided */\n @Prop() showDefaultLogo: boolean = true;\n\n /** Theme for the spacer background - should match the section below the navbar */\n @Prop() theme?: Theme;\n\n /** Force mobile layout regardless of viewport size (useful for testing/stories) */\n @Prop({ reflect: true }) forceMobile: boolean = false;\n\n private toggleMobileMenu = () => {\n this.mobileMenuOpen = !this.mobileMenuOpen;\n // Close any open dropdown when toggling mobile menu\n this.activeDropdown = null;\n };\n\n /**\n * Opens a dropdown by its identifier\n */\n private openDropdown = (dropdownId: string) => {\n this.activeDropdown = dropdownId;\n };\n\n /**\n * Closes the currently open dropdown\n */\n private closeDropdown = () => {\n this.activeDropdown = null;\n };\n\n /**\n * Toggles a dropdown by its identifier\n */\n private toggleDropdown = (dropdownId: string) => {\n if (this.activeDropdown === dropdownId) {\n this.activeDropdown = null;\n } else {\n this.activeDropdown = dropdownId;\n }\n };\n\n /** Timer id used to debounce hover-driven closes. */\n private closeTimer?: number;\n\n /**\n * The trigger element that opened the currently active dropdown. Tracked\n * so an Esc keypress can close the dropdown and restore focus to the\n * trigger, matching WAI-ARIA menu-button guidance.\n */\n private lastActiveTrigger?: HTMLElement;\n\n /**\n * Open the dropdown matching a `[data-dropdown]` trigger on click —\n * acts as a toggle so keyboard/touch users can still dismiss it.\n */\n @Listen('click')\n handleTriggerClick(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest?.('[data-dropdown]') as HTMLElement | null;\n if (!trigger || !this.el.contains(trigger)) return;\n const id = trigger.getAttribute('data-dropdown');\n if (!id) return;\n event.preventDefault();\n event.stopPropagation();\n this.cancelScheduledClose();\n this.lastActiveTrigger = trigger;\n this.toggleDropdown(id);\n }\n\n /**\n * Open the dropdown matching a `[data-dropdown]` trigger on hover.\n * Uses mouseover (which bubbles) and checks for the trigger ancestor.\n */\n @Listen('mouseover')\n handleHover(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest?.('[data-dropdown]') as HTMLElement | null;\n if (!trigger || !this.el.contains(trigger)) return;\n const id = trigger.getAttribute('data-dropdown');\n if (!id || this.activeDropdown === id) {\n this.cancelScheduledClose();\n return;\n }\n this.cancelScheduledClose();\n this.lastActiveTrigger = trigger;\n this.openDropdown(id);\n }\n\n /**\n * When the pointer leaves the navbar entirely (including any open\n * dropdown panel), schedule a close. Re-entering cancels it.\n */\n @Listen('mouseleave')\n handleHostLeave() {\n this.scheduleClose();\n }\n\n @Listen('mouseenter')\n handleHostEnter() {\n this.cancelScheduledClose();\n }\n\n private scheduleClose() {\n // Short 100ms debounce so the mouse has time to cross any tiny\n // dead-zone between the nav pill, the dropdown panel, and the\n // items inside it without accidentally closing the panel. A\n // re-entering mouseenter on the host cancels the pending close.\n this.cancelScheduledClose();\n this.closeTimer = window.setTimeout(() => {\n this.closeDropdown();\n this.closeTimer = undefined;\n }, 100);\n }\n\n private cancelScheduledClose() {\n if (this.closeTimer !== undefined) {\n clearTimeout(this.closeTimer);\n this.closeTimer = undefined;\n }\n }\n\n /**\n * Handle clicks outside the navbar to close dropdowns\n */\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent) {\n const path = event.composedPath();\n if (!path.includes(this.el)) {\n this.closeDropdown();\n }\n }\n\n /**\n * Keep the visibility of slotted dropdown panels, and the `data-active`\n * flag on their triggers, in sync with the currently active dropdown.\n * Each panel lives in the `dropdowns` slot and carries a `data-for`\n * attribute that matches its trigger's id.\n */\n componentDidLoad() {\n this.syncDropdownState();\n }\n\n componentDidUpdate() {\n this.syncDropdownState();\n }\n\n private syncDropdownState() {\n this.el.querySelectorAll<HTMLElement>('[data-for]').forEach((panel) => {\n if (!this.el.contains(panel)) return;\n panel.hidden = panel.getAttribute('data-for') !== this.activeDropdown;\n });\n this.el.querySelectorAll<HTMLElement>('[data-dropdown]').forEach((trigger) => {\n if (!this.el.contains(trigger)) return;\n const active = trigger.getAttribute('data-dropdown') === this.activeDropdown;\n if (active) trigger.setAttribute('data-active', '');\n else trigger.removeAttribute('data-active');\n trigger.setAttribute('aria-expanded', active ? 'true' : 'false');\n });\n }\n\n /**\n * Handle escape key to close dropdowns. If a dropdown is open, restore\n * focus to the trigger that opened it so keyboard users don't lose\n * their place in the tab order.\n */\n @Listen('keydown', { target: 'document' })\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.activeDropdown !== null) {\n const toFocus = this.lastActiveTrigger;\n this.closeDropdown();\n toFocus?.focus?.();\n }\n }\n\n render() {\n const hasDropdown = this.activeDropdown !== null;\n\n return (\n <Host class={{ 'has-dropdown-open': hasDropdown }}>\n {/* Spacer element to prevent content from being hidden behind sticky navbar */}\n <div class={`navbar-spacer${this.theme ? ` theme-${this.theme}` : ''}`}></div>\n \n <nav class=\"navbar-container\">\n <div class=\"navbar theme-white\">\n {/* Left section: Logo + Nav Links */}\n <div class=\"navbar-left\">\n <div class=\"logo\">\n <slot name=\"logo\">\n {/* Default Affinda logo if no slot content provided */}\n {this.showDefaultLogo && <af-logo></af-logo>}\n </slot>\n </div>\n \n {/* Hamburger menu button - mobile only */}\n <button \n class=\"mobile-menu-toggle\"\n onClick={this.toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n aria-expanded={this.mobileMenuOpen ? 'true' : 'false'}\n >\n {this.mobileMenuOpen ? (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M18 6L6 18M6 6l12 12\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n ) : (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M3 12h18M3 6h18M3 18h18\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n )}\n </button>\n \n <div class={`nav-links ${this.mobileMenuOpen ? 'mobile-open' : ''}`}>\n <slot name=\"start\"></slot>\n </div>\n </div>\n\n {/* Right section: Actions + Button */}\n <div class={`navbar-right ${this.mobileMenuOpen ? 'mobile-open' : ''}`}>\n <div class=\"nav-actions\">\n <slot name=\"end\"></slot>\n </div>\n <div class=\"nav-button\">\n <slot name=\"button\"></slot>\n </div>\n </div>\n </div>\n\n {/* Dropdown panel container */}\n <div class={`dropdown-container ${hasDropdown ? 'is-open' : ''}`}>\n <div class=\"dropdown-panel theme-white\">\n <slot name=\"dropdowns\"></slot>\n </div>\n </div>\n </nav>\n\n {/* Mobile menu panel */}\n <div class={`mobile-menu-panel theme-white ${this.mobileMenuOpen ? 'is-open' : ''}`}>\n {/* Mobile CTA button at top.\n Note: only `name=\"mobile-button\"` here. We can't fall back\n to `<slot name=\"button\">` because Stencil's scoped-mode slot\n projection only matches a slot once per host — declaring the\n same slot name in two template positions silently breaks\n projection of the outer slot, leaving the desktop CTA\n orphaned at the host root with no visual parent. Consumers\n must explicitly slot a `mobile-button` (SiteHeader does). */}\n <div class=\"mobile-button-container\">\n <slot name=\"mobile-button\"></slot>\n </div>\n \n {/* Mobile navigation content */}\n <div class=\"mobile-menu-content\">\n <slot name=\"mobile-menu\"></slot>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-BExjo6P2.js","mappings":";;;AAAA,MAAM,WAAW,GAAG,s5MAAs5M;;MC6B75M,QAAQ,iBAAAA,kBAAA,CAAA,MAAA,QAAA,SAAAC,CAAA,CAAA;AANrB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;AASW,QAAA,IAAc,CAAA,cAAA,GAAY,KAAK;;AAG/B,QAAA,IAAc,CAAA,cAAA,GAAkB,IAAI;;AAGrC,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI;;AAMd,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK;AAE7C,QAAA,IAAgB,CAAA,gBAAA,GAAG,MAAK;AAC9B,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc;;AAE1C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC5B,SAAC;AAED;;AAEG;AACK,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,UAAkB,KAAI;AAC5C,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU;AAClC,SAAC;AAED;;AAEG;AACK,QAAA,IAAa,CAAA,aAAA,GAAG,MAAK;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC5B,SAAC;AAED;;AAEG;AACK,QAAA,IAAA,CAAA,cAAc,GAAG,CAAC,UAAkB,KAAI;AAC9C,YAAA,IAAI,IAAI,CAAC,cAAc,KAAK,UAAU,EAAE;AACtC,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;;iBACrB;AACL,gBAAA,IAAI,CAAC,cAAc,GAAG,UAAU;;AAEpC,SAAC;AA0NF;AA9MC;;;AAGG;AAEH,IAAA,kBAAkB,CAAC,KAAiB,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;QACjD,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAAuB;QAC1E,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;AAChD,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;QACvB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;;AAGzB;;;AAGG;AAEH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B;QACjD,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAAuB;QAC1E,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE;QAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QAChD,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,KAAK,EAAE,EAAE;YACrC,IAAI,CAAC,oBAAoB,EAAE;YAC3B;;QAEF,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;;AAGvB;;;AAGG;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,EAAE;;IAItB,eAAe,GAAA;QACb,IAAI,CAAC,oBAAoB,EAAE;;IAGrB,aAAa,GAAA;;;;;QAKnB,IAAI,CAAC,oBAAoB,EAAE;QAC3B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;YACvC,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;SAC5B,EAAE,GAAG,CAAC;;IAGD,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;AACjC,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;;;AAI/B;;AAEG;AAEH,IAAA,mBAAmB,CAAC,KAAiB,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3B,IAAI,CAAC,aAAa,EAAE;;;AAIxB;;;;;AAKG;IACH,gBAAgB,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE;;IAG1B,kBAAkB,GAAA;QAChB,IAAI,CAAC,iBAAiB,EAAE;;IAGlB,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACpE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE;AAC9B,YAAA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,cAAc;AACvE,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE;AAChC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,cAAc;AAC5E,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC;;AAC9C,gBAAA,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC;AAC3C,YAAA,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAClE,SAAC,CAAC;;AAGJ;;;;AAIG;AAEH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;AAC1D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB;YACtC,IAAI,CAAC,aAAa,EAAE;AACpB,YAAA,OAAO,EAAE,KAAK,IAAI;;;IAItB,MAAM,GAAA;AACJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI;AAEhD,QAAA,QACE,CAAC,CAAA,IAAI,EAAC,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAE,EAAA,EAE/C,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,gBAAgB,IAAI,CAAC,KAAK,GAAG,CAAU,OAAA,EAAA,IAAI,CAAC,KAAK,CAAE,CAAA,GAAG,EAAE,CAAA,CAAE,EAAQ,CAAA,EAE9E,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,kBAAkB,EAAA,EAC3B,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,oBAAoB,EAAA,EAE7B,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,aAAa,EAAA,EACtB,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,MAAM,EAAA,EACf,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,MAAM,EAEd,EAAA,IAAI,CAAC,eAAe,IAAI,CAAmB,CAAA,SAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACvC,CACH,EAGN,CACE,CAAA,QAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,oBAAoB,EAC1B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EACnB,YAAA,EAAA,wBAAwB,mBACpB,IAAI,CAAC,cAAc,GAAG,MAAM,GAAG,OAAO,EAEpD,EAAA,IAAI,CAAC,cAAc,IAClB,WAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAA,EAC/E,CAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,sBAAsB,EAAA,cAAA,EAAc,GAAG,EAAgB,gBAAA,EAAA,OAAO,EAAiB,iBAAA,EAAA,OAAO,GAAE,CAC5F,KAEN,CAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAA,EAC/E,CAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,yBAAyB,EAAA,cAAA,EAAc,GAAG,EAAA,gBAAA,EAAgB,OAAO,EAAA,iBAAA,EAAiB,OAAO,EAAA,CAAE,CAC/F,CACP,CACM,EAET,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,cAAc,GAAG,aAAa,GAAG,EAAE,CAAE,CAAA,EAAA,EACjE,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,OAAO,EAAA,CAAQ,CACtB,CACF,EAGN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,cAAc,GAAG,aAAa,GAAG,EAAE,CAAE,CAAA,EAAA,EACpE,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,aAAa,EAAA,EACtB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,KAAK,EAAA,CAAQ,CACpB,EACN,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,YAAY,EAAA,EACrB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,QAAQ,EAAQ,CAAA,CACvB,CACF,CACF,EAGN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAA,mBAAA,EAAsB,WAAW,GAAG,SAAS,GAAG,EAAE,CAAE,CAAA,EAAA,EAC9D,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,4BAA4B,EAAA,EACrC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,WAAW,EAAQ,CAAA,CAC1B,CACF,CACF,EAGN,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAE,CAAA,8BAAA,EAAiC,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,EAAE,CAAE,CAAA,EAAA,EASjF,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,yBAAyB,EAAA,EAClC,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,IAAI,EAAC,eAAe,EAAA,CAAQ,CAC9B,EAGN,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,qBAAqB,EAAA,EAC9B,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,aAAa,EAAA,CAAQ,CAC5B,CACF,CACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-navbar/af-navbar.css?tag=af-navbar&encapsulation=scoped","src/components/af-navbar/af-navbar.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n/* Spacer element that sits in normal document flow to prevent content overlap */\n.navbar-spacer {\n height: 100px; /* Accounts for navbar height + top margin */\n}\n\n/* Theme variants for spacer background - matches section themes */\n.navbar-spacer.theme-white {\n background-color: var(--colour-brand-white, #FFFFFF);\n}\n\n.navbar-spacer.theme-inkwell {\n background-color: var(--colour-brand-inkwell, #14343B);\n}\n\n.navbar-spacer.theme-mist-green {\n background-color: var(--colour-brand-mist-green, #C6D5D1);\n}\n\n.navbar-spacer.theme-soft-clay {\n background-color: var(--colour-softclay-400, #c0ab8d);\n}\n\n/* Sticky navbar that floats above the spacer */\n.navbar-container {\n position: fixed;\n /* Add safe-area-inset-top so the pill drops below the iOS notch / status bar\n when the page uses viewport-fit=cover. Falls back to the original 32px. */\n top: max(32px, env(safe-area-inset-top));\n left: 0;\n right: 0;\n z-index: 10;\n /* Horizontal padding honours safe-area-inset-left/right for landscape on\n notched devices; the inset is added on top of the existing 80px gutter. */\n padding: 0 calc(80px + env(safe-area-inset-right)) 0 calc(80px + env(safe-area-inset-left));\n box-sizing: border-box;\n}\n\n.navbar {\n background: var(--colour-background-white, #ffffff);\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 8px 8px 40px;\n box-sizing: border-box;\n flex-wrap: nowrap; /* Prevent wrapping */\n}\n\n/* Left section */\n.navbar-left {\n display: flex;\n align-items: center;\n gap: 32px;\n flex-shrink: 0;\n}\n\n.logo {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* Mobile menu toggle button */\n.mobile-menu-toggle {\n display: none;\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: var(--colour-brand-inkwell, #14343b);\n margin-left: auto;\n}\n\n.mobile-menu-toggle svg {\n display: block;\n}\n\n.nav-links {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: nowrap;\n}\n\n/* Right section */\n.navbar-right {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n\n.nav-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.nav-button {\n display: flex;\n align-items: center;\n}\n\n/* Dropdown container. The container's top is raised 8px into what\n was previously a blank gap between the nav pill and the panel, and\n that 8px is absorbed as container top-padding — so the visible panel\n stays put, but the hoverable region is now continuous between the\n nav pill and the dropdown. Without this, the mouse crosses an\n un-hovered strip on its way from trigger to panel and the navbar's\n mouseleave handler fires a close. */\n.dropdown-container {\n position: absolute;\n top: 100px;\n left: 0;\n right: 0;\n padding: 8px 80px 0;\n pointer-events: none;\n opacity: 0;\n transform: translateY(-8px);\n transition: opacity 0.2s ease, transform 0.2s ease;\n}\n\n.dropdown-container.is-open {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(0);\n}\n\n.dropdown-panel {\n background: var(--colour-background-base, #ffffff);\n border-radius: 32px;\n overflow: hidden;\n /* shadow-navbar replaces the hand-rolled `0 4px 24px rgba(20, 52, 59, 0.12)`;\n * same value, now sourced from the token ladder so the marketing site can\n * retire its matching bespoke rule. */\n box-shadow: var(--shadow-navbar, 0 4px 24px rgba(20, 52, 59, 0.12));\n}\n\n/* Hide empty dropdown slots */\n.dropdown-panel:empty {\n display: none;\n}\n\n/* Mobile menu panel - separate from navbar for proper positioning */\n.mobile-menu-panel {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--colour-background-base, #ffffff);\n z-index: 9;\n /* Full-viewport drawer: pad the top below the notch, the bottom above the\n home indicator, and the sides away from landscape edge cutouts. */\n padding:\n max(100px, calc(100px + env(safe-area-inset-top)))\n calc(16px + env(safe-area-inset-right))\n max(24px, env(safe-area-inset-bottom))\n calc(16px + env(safe-area-inset-left));\n overflow-y: auto;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n}\n\n.mobile-menu-panel.is-open {\n display: block;\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Mobile CTA button container */\n.mobile-button-container {\n margin-bottom: 8px;\n}\n\n.mobile-button-container ::slotted(*) {\n width: 100%;\n}\n\n/* Mobile menu content - flex column ensures items stack vertically */\n.mobile-menu-content {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n/* Force slotted items to take full width for composability */\n.mobile-menu-content ::slotted(*) {\n flex: 0 0 auto;\n width: 100%;\n}\n\n/* \n * Breakpoint 1: Hide \"Talk to us\" and \"Log in\" (nav-actions) \n * This happens first as the viewport gets narrower\n * Matches affinda.com behavior at ~1100px\n */\n@media (max-width: 1099px) {\n .nav-actions {\n display: none;\n }\n \n .navbar-right {\n gap: 0;\n }\n}\n\n/* Tablet adjustments */\n@media (max-width: 1024px) {\n .navbar-spacer {\n height: 88px;\n }\n\n .navbar-container {\n top: max(24px, env(safe-area-inset-top));\n padding: 0 calc(40px + env(safe-area-inset-right)) 0 calc(40px + env(safe-area-inset-left));\n }\n\n .navbar-left {\n gap: 24px;\n }\n\n .nav-links {\n gap: 4px;\n }\n\n .dropdown-container {\n padding: 0 40px;\n }\n}\n\n/* \n * Breakpoint 2: Switch to hamburger menu\n * Matches affinda.com behavior at 991px\n */\n@media (max-width: 991px) {\n .navbar-spacer {\n height: 72px;\n }\n\n .navbar-container {\n top: max(16px, env(safe-area-inset-top));\n padding: 0 calc(16px + env(safe-area-inset-right)) 0 calc(16px + env(safe-area-inset-left));\n z-index: 11; /* Above mobile menu panel */\n }\n\n .navbar {\n padding: 8px 8px 8px 24px; /* Figma: 8px padding right, 24px left on mobile */\n flex-direction: row;\n border-radius: 9999px; /* Keep pill shape on mobile */\n gap: 0;\n }\n\n .navbar-left {\n width: auto;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n gap: 16px;\n flex: 1;\n }\n\n /* Show hamburger button on mobile */\n .mobile-menu-toggle {\n display: flex;\n padding: 12px;\n margin-left: auto;\n border-radius: 9999px;\n border: 1px solid var(--colour-brand-inkwell, #14343b);\n }\n\n .mobile-menu-toggle:hover {\n background: rgba(20, 52, 59, 0.05);\n }\n\n /* Hide nav links on mobile - they're in the mobile menu panel */\n .nav-links {\n display: none;\n }\n\n /* Hide right section on mobile - button is in mobile menu panel */\n .navbar-right {\n display: none;\n }\n\n /* Hide desktop dropdown on mobile */\n .dropdown-container {\n display: none;\n }\n\n /* Mobile menu panel adjustments */\n .mobile-menu-panel {\n padding-top: max(88px, calc(88px + env(safe-area-inset-top))); /* Accounts for navbar height + notch */\n }\n\n .mobile-button-container {\n padding: 0 12px;\n margin-bottom: 8px;\n }\n\n .mobile-button-container ::slotted(af-button),\n .mobile-button-container ::slotted(button) {\n width: 100%;\n display: flex;\n justify-content: center;\n }\n}\n\n/* ==========================================================================\n Force Mobile Mode\n Apply mobile styles regardless of viewport when force-mobile attribute is set\n ========================================================================== */\n\n:host([force-mobile]) .navbar-spacer {\n height: 72px;\n}\n\n:host([force-mobile]) .navbar-container {\n top: max(16px, env(safe-area-inset-top));\n padding: 0 calc(16px + env(safe-area-inset-right)) 0 calc(16px + env(safe-area-inset-left));\n z-index: 11;\n}\n\n:host([force-mobile]) .navbar {\n padding: 8px 8px 8px 24px;\n flex-direction: row;\n border-radius: 9999px;\n gap: 0;\n}\n\n:host([force-mobile]) .navbar-left {\n width: auto;\n flex-direction: row;\n justify-content: flex-start;\n align-items: center;\n gap: 16px;\n flex: 1;\n}\n\n:host([force-mobile]) .mobile-menu-toggle {\n display: flex;\n padding: 12px;\n margin-left: auto;\n border-radius: 9999px;\n border: 1px solid var(--colour-brand-inkwell, #14343b);\n}\n\n:host([force-mobile]) .mobile-menu-toggle:hover {\n background: rgba(20, 52, 59, 0.05);\n}\n\n:host([force-mobile]) .nav-links {\n display: none;\n}\n\n:host([force-mobile]) .navbar-right {\n display: none;\n}\n\n:host([force-mobile]) .nav-actions {\n display: none;\n}\n\n:host([force-mobile]) .dropdown-container {\n display: none;\n}\n\n:host([force-mobile]) .mobile-menu-panel {\n padding-top: max(88px, calc(88px + env(safe-area-inset-top)));\n}\n\n:host([force-mobile]) .mobile-menu-panel.is-open {\n display: block;\n opacity: 1;\n pointer-events: auto;\n}\n\n:host([force-mobile]) .mobile-button-container {\n padding: 0 12px;\n margin-bottom: 8px;\n}\n\n:host([force-mobile]) .mobile-button-container ::slotted(af-button),\n:host([force-mobile]) .mobile-button-container ::slotted(button) {\n width: 100%;\n display: flex;\n justify-content: center;\n}\n\n/* Force mobile: flex column ensures items stack vertically */\n:host([force-mobile]) .mobile-menu-content {\n display: flex;\n flex-direction: column;\n}\n\n/* Force mobile: slotted items take full width for composability */\n:host([force-mobile]) .mobile-menu-content ::slotted(*) {\n flex: 0 0 auto;\n width: 100%;\n}\n","import { Component, State, h, Host, Prop, Element, Listen } from '@stencil/core';\nimport type { Theme } from '../../types';\n\n/**\n * A full-width navigation bar component that provides the main site navigation.\n * Features a pill-shaped container with logo, navigation links, and action buttons.\n * Includes mobile hamburger menu and support for mega-menu dropdowns.\n * \n * The logo slot can be used to provide a custom logo. If no logo is provided,\n * the default Affinda logo will be displayed.\n * \n * **Slots:**\n * - `logo` - Logo area (defaults to Affinda logo if empty)\n * - `start` - Primary navigation links (left side, desktop)\n * - `end` - Secondary/utility links (right side)\n * - `button` - Call-to-action button\n * - `dropdowns` - One or more dropdown panels, each a `<div data-for=\"id\">`\n * where `id` matches the `data-dropdown=\"id\"` attribute on the trigger.\n * Clicking a trigger toggles the matching panel; only one is visible at\n * a time.\n * - `mobile-menu` - Mobile menu content (use af-nav-accordion for accordion menus)\n * - `mobile-button` - CTA button for mobile menu (appears at top)\n */\n@Component({\n tag: 'af-navbar',\n styleUrl: 'af-navbar.css',\n shadow: false,\n scoped: true,\n})\nexport class AfNavbar {\n @Element() el!: HTMLElement;\n\n @State() mobileMenuOpen: boolean = false;\n \n /** The currently open dropdown identifier (null if none open) */\n @State() activeDropdown: string | null = null;\n\n /** Whether to show the default Affinda logo when no logo slot content is provided */\n @Prop() showDefaultLogo: boolean = true;\n\n /** Theme for the spacer background - should match the section below the navbar */\n @Prop() theme?: Theme;\n\n /** Force mobile layout regardless of viewport size (useful for testing/stories) */\n @Prop({ reflect: true }) forceMobile: boolean = false;\n\n private toggleMobileMenu = () => {\n this.mobileMenuOpen = !this.mobileMenuOpen;\n // Close any open dropdown when toggling mobile menu\n this.activeDropdown = null;\n };\n\n /**\n * Opens a dropdown by its identifier\n */\n private openDropdown = (dropdownId: string) => {\n this.activeDropdown = dropdownId;\n };\n\n /**\n * Closes the currently open dropdown\n */\n private closeDropdown = () => {\n this.activeDropdown = null;\n };\n\n /**\n * Toggles a dropdown by its identifier\n */\n private toggleDropdown = (dropdownId: string) => {\n if (this.activeDropdown === dropdownId) {\n this.activeDropdown = null;\n } else {\n this.activeDropdown = dropdownId;\n }\n };\n\n /** Timer id used to debounce hover-driven closes. */\n private closeTimer?: number;\n\n /**\n * The trigger element that opened the currently active dropdown. Tracked\n * so an Esc keypress can close the dropdown and restore focus to the\n * trigger, matching WAI-ARIA menu-button guidance.\n */\n private lastActiveTrigger?: HTMLElement;\n\n /**\n * Open the dropdown matching a `[data-dropdown]` trigger on click —\n * acts as a toggle so keyboard/touch users can still dismiss it.\n */\n @Listen('click')\n handleTriggerClick(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest?.('[data-dropdown]') as HTMLElement | null;\n if (!trigger || !this.el.contains(trigger)) return;\n const id = trigger.getAttribute('data-dropdown');\n if (!id) return;\n event.preventDefault();\n event.stopPropagation();\n this.cancelScheduledClose();\n this.lastActiveTrigger = trigger;\n this.toggleDropdown(id);\n }\n\n /**\n * Open the dropdown matching a `[data-dropdown]` trigger on hover.\n * Uses mouseover (which bubbles) and checks for the trigger ancestor.\n */\n @Listen('mouseover')\n handleHover(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n const trigger = target?.closest?.('[data-dropdown]') as HTMLElement | null;\n if (!trigger || !this.el.contains(trigger)) return;\n const id = trigger.getAttribute('data-dropdown');\n if (!id || this.activeDropdown === id) {\n this.cancelScheduledClose();\n return;\n }\n this.cancelScheduledClose();\n this.lastActiveTrigger = trigger;\n this.openDropdown(id);\n }\n\n /**\n * When the pointer leaves the navbar entirely (including any open\n * dropdown panel), schedule a close. Re-entering cancels it.\n */\n @Listen('mouseleave')\n handleHostLeave() {\n this.scheduleClose();\n }\n\n @Listen('mouseenter')\n handleHostEnter() {\n this.cancelScheduledClose();\n }\n\n private scheduleClose() {\n // Short 100ms debounce so the mouse has time to cross any tiny\n // dead-zone between the nav pill, the dropdown panel, and the\n // items inside it without accidentally closing the panel. A\n // re-entering mouseenter on the host cancels the pending close.\n this.cancelScheduledClose();\n this.closeTimer = window.setTimeout(() => {\n this.closeDropdown();\n this.closeTimer = undefined;\n }, 100);\n }\n\n private cancelScheduledClose() {\n if (this.closeTimer !== undefined) {\n clearTimeout(this.closeTimer);\n this.closeTimer = undefined;\n }\n }\n\n /**\n * Handle clicks outside the navbar to close dropdowns\n */\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: MouseEvent) {\n const path = event.composedPath();\n if (!path.includes(this.el)) {\n this.closeDropdown();\n }\n }\n\n /**\n * Keep the visibility of slotted dropdown panels, and the `data-active`\n * flag on their triggers, in sync with the currently active dropdown.\n * Each panel lives in the `dropdowns` slot and carries a `data-for`\n * attribute that matches its trigger's id.\n */\n componentDidLoad() {\n this.syncDropdownState();\n }\n\n componentDidUpdate() {\n this.syncDropdownState();\n }\n\n private syncDropdownState() {\n this.el.querySelectorAll<HTMLElement>('[data-for]').forEach((panel) => {\n if (!this.el.contains(panel)) return;\n panel.hidden = panel.getAttribute('data-for') !== this.activeDropdown;\n });\n this.el.querySelectorAll<HTMLElement>('[data-dropdown]').forEach((trigger) => {\n if (!this.el.contains(trigger)) return;\n const active = trigger.getAttribute('data-dropdown') === this.activeDropdown;\n if (active) trigger.setAttribute('data-active', '');\n else trigger.removeAttribute('data-active');\n trigger.setAttribute('aria-expanded', active ? 'true' : 'false');\n });\n }\n\n /**\n * Handle escape key to close dropdowns. If a dropdown is open, restore\n * focus to the trigger that opened it so keyboard users don't lose\n * their place in the tab order.\n */\n @Listen('keydown', { target: 'document' })\n handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && this.activeDropdown !== null) {\n const toFocus = this.lastActiveTrigger;\n this.closeDropdown();\n toFocus?.focus?.();\n }\n }\n\n render() {\n const hasDropdown = this.activeDropdown !== null;\n\n return (\n <Host class={{ 'has-dropdown-open': hasDropdown }}>\n {/* Spacer element to prevent content from being hidden behind sticky navbar */}\n <div class={`navbar-spacer${this.theme ? ` theme-${this.theme}` : ''}`}></div>\n \n <nav class=\"navbar-container\">\n <div class=\"navbar theme-white\">\n {/* Left section: Logo + Nav Links */}\n <div class=\"navbar-left\">\n <div class=\"logo\">\n <slot name=\"logo\">\n {/* Default Affinda logo if no slot content provided */}\n {this.showDefaultLogo && <af-logo></af-logo>}\n </slot>\n </div>\n \n {/* Hamburger menu button - mobile only */}\n <button \n class=\"mobile-menu-toggle\"\n onClick={this.toggleMobileMenu}\n aria-label=\"Toggle navigation menu\"\n aria-expanded={this.mobileMenuOpen ? 'true' : 'false'}\n >\n {this.mobileMenuOpen ? (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M18 6L6 18M6 6l12 12\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n ) : (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M3 12h18M3 6h18M3 18h18\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n )}\n </button>\n \n <div class={`nav-links ${this.mobileMenuOpen ? 'mobile-open' : ''}`}>\n <slot name=\"start\"></slot>\n </div>\n </div>\n\n {/* Right section: Actions + Button */}\n <div class={`navbar-right ${this.mobileMenuOpen ? 'mobile-open' : ''}`}>\n <div class=\"nav-actions\">\n <slot name=\"end\"></slot>\n </div>\n <div class=\"nav-button\">\n <slot name=\"button\"></slot>\n </div>\n </div>\n </div>\n\n {/* Dropdown panel container */}\n <div class={`dropdown-container ${hasDropdown ? 'is-open' : ''}`}>\n <div class=\"dropdown-panel theme-white\">\n <slot name=\"dropdowns\"></slot>\n </div>\n </div>\n </nav>\n\n {/* Mobile menu panel */}\n <div class={`mobile-menu-panel theme-white ${this.mobileMenuOpen ? 'is-open' : ''}`}>\n {/* Mobile CTA button at top.\n Note: only `name=\"mobile-button\"` here. We can't fall back\n to `<slot name=\"button\">` because Stencil's scoped-mode slot\n projection only matches a slot once per host — declaring the\n same slot name in two template positions silently breaks\n projection of the outer slot, leaving the desktop CTA\n orphaned at the host root with no visual parent. Consumers\n must explicitly slot a `mobile-button` (SiteHeader does). */}\n <div class=\"mobile-button-container\">\n <slot name=\"mobile-button\"></slot>\n </div>\n \n {/* Mobile navigation content */}\n <div class=\"mobile-menu-content\">\n <slot name=\"mobile-menu\"></slot>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,7 +1,7 @@
1
- import { p as proxyCustomElement, H, h, c as Host } from './p-CiY0Twna.js';
2
- import { d as defineCustomElement$3 } from './p-Bx-hxLP0.js';
3
- import { d as defineCustomElement$2 } from './p-DdH3uwBx.js';
4
- import { d as defineCustomElement$1 } from './p-CUmn76Kf.js';
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-Btpdr0Bi.js';
2
+ import { d as defineCustomElement$3 } from './p-FV14KcoH.js';
3
+ import { d as defineCustomElement$2 } from './p-sIePTJnR.js';
4
+ import { d as defineCustomElement$1 } from './p-CkaL7yIW.js';
5
5
 
6
6
  const afHeroCss = ".sc-af-hero-h{display:block;position:relative;width:100%;--af-hero-image-lift:-260px;--af-hero-image-min-height:360px}.hero__section.sc-af-hero{position:relative;overflow:hidden}.hero__paperclip.sc-af-hero{position:absolute;top:50%;right:0;transform:translateY(-50%);pointer-events:none;z-index:0;width:655px;height:754px}@media (max-width: 991px){.hero__paperclip.sc-af-hero{width:480px;height:552px}}@media (max-width: 767px){.hero__paperclip.sc-af-hero{display:none}}.hero__inner.sc-af-hero{position:relative;z-index:1;padding-bottom:40px}.hero--pad-default.sc-af-hero-h .hero__inner.sc-af-hero{padding-top:124px}.hero--pad-loose.sc-af-hero-h .hero__inner.sc-af-hero{padding-top:164px}.hero--inkwell-centered.hero--pad-default.sc-af-hero-h .hero__inner.sc-af-hero{padding-top:180px}.hero__grid.sc-af-hero{display:grid;grid-template-columns:5fr 7fr;gap:40px;align-items:center}.hero--soft-clay-illustration.sc-af-hero-h .hero__grid.sc-af-hero,.hero--mist-green-illustration.sc-af-hero-h .hero__grid.sc-af-hero{grid-template-columns:1fr auto;gap:48px}.hero--inkwell-illustration.sc-af-hero-h .hero__grid.sc-af-hero{grid-template-columns:1fr 1fr}.hero__copy.sc-af-hero{padding-left:16px}.hero--inkwell-photo.hero--pad-loose.sc-af-hero-h .hero__copy.sc-af-hero{padding-bottom:120px}.hero--inkwell-centered.sc-af-hero-h .hero__copy.sc-af-hero{padding-left:0;text-align:center}.hero__badge.sc-af-hero:not(:has(*)){display:none}.hero__badge.sc-af-hero:has(*){margin-bottom:16px}.hero__copy.sc-af-hero-s>[slot='badge'],.hero__copy .sc-af-hero-s>[slot='badge']{display:inline-block}.hero__buttons.sc-af-hero{margin-top:32px}.hero__buttons.sc-af-hero:empty{display:none}.hero--inkwell-centered.sc-af-hero-h .hero__buttons.sc-af-hero{display:flex;justify-content:center}.sc-af-hero-h{--af-hero-blob-mask:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NDEgOTQwIj48cGF0aCBkPSJNMTcwLjA2MyAxODEuOTQ1QzIzNC4xNTYgMzAuOTUxNCA0MDguNTE4IC0zOS40OTU1IDU1OS41MTIgMjQuNTk3NUM3MTAuNTA2IDg4LjY5MDQgNzgwLjk1MiAyNjMuMDUzIDcxNi44NTkgNDE0LjA0Nkw1NzAuODQ3IDc1OC4wMzFDNTA2Ljc1NCA5MDkuMDI0IDMzMi4zOTIgOTc5LjQ3MSAxODEuMzk4IDkxNS4zNzhDMzAuNDA0NSA4NTEuMjg1IC00MC4wNDI0IDY3Ni45MjMgMjQuMDUwNiA1MjUuOTI5TDE3MC4wNjMgMTgxLjk0NVoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=');--af-hero-blob-mask-mobile:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 768\"><path fill=\"%23000\" d=\"M1024 0H384A384 384 0 0 0 384 768H1024V0Z\"/></svg>')}.hero__image.sc-af-hero{min-height:var(--af-hero-image-min-height);overflow:visible;margin-top:var(--af-hero-image-lift);position:relative;z-index:1}.hero__image--masked.sc-af-hero-s>img,.hero__image--masked .sc-af-hero-s>img,.hero__image--masked.sc-af-hero-s>picture img,.hero__image--masked .sc-af-hero-s>picture img,.hero__image--masked.sc-af-hero-s>.af-hero-image,.hero__image--masked .sc-af-hero-s>.af-hero-image{display:block;width:100%;height:auto;-webkit-mask-image:var(--af-hero-blob-mask);mask-image:var(--af-hero-blob-mask);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;mask-mode:alpha}.hero__image--masked.sc-af-hero img.sc-af-hero{-webkit-mask-image:var(--af-hero-blob-mask);mask-image:var(--af-hero-blob-mask);-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;mask-mode:alpha}.hero__illustration.sc-af-hero{flex:0 0 auto;width:100%;max-width:432px;line-height:0;justify-self:end}.hero__illustration.sc-af-hero-s>svg,.hero__illustration .sc-af-hero-s>svg,.hero__illustration.sc-af-hero-s>img,.hero__illustration .sc-af-hero-s>img{width:100%;height:auto;display:block;border-radius:16px}.hero--inkwell-illustration.sc-af-hero-h .hero__illustration.sc-af-hero{max-width:540px}.hero__logos.sc-af-hero{position:relative;z-index:2}.hero__logos.sc-af-hero:not(:has(*)){display:none}.hero--inkwell-photo.sc-af-hero-h .hero__logos.sc-af-hero:has(*){margin-top:-240px;padding-top:48px;padding-bottom:48px;background:var(--af-background-base, var(--colour-brand-inkwell, #14343b));border-top:1px solid\n var(--af-background-border-subtle, var(--colour-inkwell-450, #203e45))}@media (max-width: 991px){.hero--pad-default.sc-af-hero-h .hero__inner.sc-af-hero,.hero--pad-loose.sc-af-hero-h .hero__inner.sc-af-hero{padding-top:112px}.hero--inkwell-centered.hero--pad-default.sc-af-hero-h .hero__inner.sc-af-hero{padding-top:144px}.hero__grid.sc-af-hero{grid-template-columns:1fr;gap:32px}.hero--soft-clay-illustration.sc-af-hero-h .hero__grid.sc-af-hero,.hero--mist-green-illustration.sc-af-hero-h .hero__grid.sc-af-hero,.hero--inkwell-illustration.sc-af-hero-h .hero__grid.sc-af-hero{grid-template-columns:1fr}.hero__copy.sc-af-hero{padding-left:0;padding-bottom:0}.hero__illustration.sc-af-hero{max-width:360px;margin-inline:auto;justify-self:center}.hero__image.sc-af-hero{margin-top:0;min-height:auto}.sc-af-hero-h.hero--inkwell-photo .hero__image--masked.sc-af-hero-s>img,.hero__image--masked .sc-af-hero-s>img,.hero--inkwell-photo.sc-af-hero-h .hero__image--masked.sc-af-hero img.sc-af-hero{-webkit-mask-image:var(--af-hero-blob-mask-mobile);mask-image:var(--af-hero-blob-mask-mobile)}.hero--inkwell-photo.sc-af-hero-h .hero__logos.sc-af-hero:has(*){margin-top:24px;padding-top:32px;padding-bottom:32px;background:transparent;border-top:none}}";
7
7
 
@@ -83,12 +83,12 @@ const AfHero = /*@__PURE__*/ proxyCustomElement(class AfHero extends H {
83
83
  const hasIllustration = v === 'inkwell-illustration' ||
84
84
  v === 'soft-clay-illustration' ||
85
85
  v === 'mist-green-illustration';
86
- return (h(Host, { key: '0a992496d31ad5bfbc3d987f8e14d4947ed4634a', class: {
86
+ return (h(Host, { key: 'c40393e3a50d1beecbe83804a1407a51d46e82ce', class: {
87
87
  [`hero--${v}`]: true,
88
88
  [`hero--pad-${this.topPad}`]: true,
89
89
  [`hero--theme-${this.theme}`]: true,
90
90
  'hero--float-navbar': this.resolvedFloatNavbar,
91
- } }, h("af-section", { key: 'e7fb9c00edf9df24b3a6f31ec73153f076623b80', theme: this.theme, padding: "none", container: false, class: "hero__section" }, centered && (h("div", { key: 'c11031876d2de4e7bdec1ff11ff05488f91e1b95', class: "hero__paperclip", "aria-hidden": "true" }, h("slot", { key: 'e374f0ebeb82e4d1f5f0be91a0067a2d6c0dc5ec', name: "paperclip" }))), h("af-container", { key: '516ef86f39140df14422abd4dc2688d5afe95327', class: "hero__inner" }, centered ? (this.renderCopy()) : (h("div", { class: "hero__grid" }, this.renderCopy(), hasImage && this.renderPhoto(), hasIllustration && this.renderIllustration()))), h("div", { key: '946d5bd24bba79faa0aa11af2313538d9131acdc', class: "hero__logos" }, h("slot", { key: '3e6f93398f642963bf38f95dbd9c037f26dcf8f9', name: "logos-below" })))));
91
+ } }, h("af-section", { key: '77ce170dadae5685fd58ccd3e9b679099ed7068f', theme: this.theme, padding: "none", container: false, class: "hero__section" }, centered && (h("div", { key: 'e1f70ac7c9f4f708a3ac033aaba9c61aa1c5ca58', class: "hero__paperclip", "aria-hidden": "true" }, h("slot", { key: '4cc7a2ca78151e4190e81af45ad9989e28c667b1', name: "paperclip" }))), h("af-container", { key: 'c3e00acd79776207246290a7b3d5b8bb7b776791', class: "hero__inner" }, centered ? (this.renderCopy()) : (h("div", { class: "hero__grid" }, this.renderCopy(), hasImage && this.renderPhoto(), hasIllustration && this.renderIllustration()))), h("div", { key: '0cdd9f9071e3670a6d4b4a6082abe9252750d3b5', class: "hero__logos" }, h("slot", { key: '8b53c58048c404b6d057f0e56d1ec0402ffd6e00', name: "logos-below" })))));
92
92
  }
93
93
  get el() { return this; }
94
94
  static get style() { return afHeroCss; }
@@ -131,6 +131,6 @@ function defineCustomElement() {
131
131
  }
132
132
 
133
133
  export { AfHero as A, defineCustomElement as d };
134
- //# sourceMappingURL=p-BMs3J6ty.js.map
134
+ //# sourceMappingURL=p-BSgEGp12.js.map
135
135
 
136
- //# sourceMappingURL=p-BMs3J6ty.js.map
136
+ //# sourceMappingURL=p-BSgEGp12.js.map
@@ -1 +1 @@
1
- {"file":"p-BMs3J6ty.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-hero/af-hero.css?tag=af-hero&encapsulation=scoped","src/components/af-hero/af-hero.tsx"],"sourcesContent":[":host {\n display: block;\n position: relative;\n width: 100%;\n /* Image-lift custom property — consumers override per-page via inline\n style or a page-level rule. The negative value pulls the photo's\n crown above the hero top so it reads behind the floating navbar\n pill. Matches the live Webflow stack (~-260px on .page-banner). */\n --af-hero-image-lift: -260px;\n /* Blob mask container size override — rarely needed; defaults to the\n photo column's natural dimensions. */\n --af-hero-image-min-height: 360px;\n}\n\n.hero__section {\n position: relative;\n overflow: hidden;\n}\n\n/* -----------------------------------------------------------------\n Paperclip watermark slot (inkwell-centered only)\n ----------------------------------------------------------------- */\n.hero__paperclip {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n pointer-events: none;\n z-index: 0;\n /* Default size — consumers can resize the slotted decoration via its\n own width/height props. */\n width: 655px;\n height: 754px;\n}\n\n@media (max-width: 991px) {\n .hero__paperclip {\n width: 480px;\n height: 552px;\n }\n}\n\n@media (max-width: 767px) {\n .hero__paperclip {\n display: none;\n }\n}\n\n/* -----------------------------------------------------------------\n Inner wrapper — top/bottom padding\n ----------------------------------------------------------------- */\n.hero__inner {\n position: relative;\n z-index: 1;\n padding-bottom: 40px;\n}\n\n:host(.hero--pad-default) .hero__inner {\n padding-top: 124px;\n}\n\n:host(.hero--pad-loose) .hero__inner {\n padding-top: 164px;\n}\n\n/* Centered variant: leave clear breathing room under the floating navbar\n pill so the heading isn't clipped at the top. The live affinda.com\n reference at 1280 vw renders the heading roughly 180 px below the\n viewport top — pad accordingly. (Earlier value of 80 px clipped the\n heading behind the navbar; caught by qa/regression-compare in the\n site repo.) */\n:host(.hero--inkwell-centered.hero--pad-default) .hero__inner {\n padding-top: 180px;\n}\n\n/* -----------------------------------------------------------------\n Grid layout (photo + illustration variants)\n ----------------------------------------------------------------- */\n.hero__grid {\n display: grid;\n grid-template-columns: 5fr 7fr;\n gap: 40px;\n align-items: center;\n}\n\n/* Illustration variants use a looser two-column split so the art\n doesn't dominate. */\n:host(.hero--soft-clay-illustration) .hero__grid,\n:host(.hero--mist-green-illustration) .hero__grid {\n grid-template-columns: 1fr auto;\n gap: 48px;\n}\n\n/* inkwell-illustration: 50/50 split. The 5fr/7fr default tilts the\n illustration column too wide, which pinches the heading down to\n 4-6 lines at 1280 vw. Even split keeps the heading at 2-3 lines\n matching the live affinda.com reference. */\n:host(.hero--inkwell-illustration) .hero__grid {\n grid-template-columns: 1fr 1fr;\n}\n\n.hero__copy {\n /* Small inset pushes heading inward from the hard container edge —\n matches the live .page-banner-text treatment. Only applied to\n left-aligned variants. */\n padding-left: 16px;\n}\n\n:host(.hero--inkwell-photo.hero--pad-loose) .hero__copy {\n /* Mirrors ListingHero's `padding-bottom: 120px` — combined with\n `align-items: center` on the grid, this shifts the heading visually\n upward so the subtitle lines up near the image's vertical centre. */\n padding-bottom: 120px;\n}\n\n:host(.hero--inkwell-centered) .hero__copy {\n padding-left: 0;\n text-align: center;\n}\n\n.hero__badge:not(:has(*)) {\n display: none;\n}\n\n.hero__badge:has(*) {\n margin-bottom: 16px;\n}\n\n.hero__copy ::slotted([slot='badge']) {\n display: inline-block;\n}\n\n.hero__buttons {\n margin-top: 32px;\n}\n\n.hero__buttons:empty {\n display: none;\n}\n\n:host(.hero--inkwell-centered) .hero__buttons {\n display: flex;\n justify-content: center;\n}\n\n/* -----------------------------------------------------------------\n Photo (inkwell-photo)\n Blob-mask shape defined once as a CSS custom property so Stencil\n doesn't duplicate the giant base64 URL for prefixed/unprefixed pairs.\n ----------------------------------------------------------------- */\n:host {\n --af-hero-blob-mask: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NDEgOTQwIj48cGF0aCBkPSJNMTcwLjA2MyAxODEuOTQ1QzIzNC4xNTYgMzAuOTUxNCA0MDguNTE4IC0zOS40OTU1IDU1OS41MTIgMjQuNTk3NUM3MTAuNTA2IDg4LjY5MDQgNzgwLjk1MiAyNjMuMDUzIDcxNi44NTkgNDE0LjA0Nkw1NzAuODQ3IDc1OC4wMzFDNTA2Ljc1NCA5MDkuMDI0IDMzMi4zOTIgOTc5LjQ3MSAxODEuMzk4IDkxNS4zNzhDMzAuNDA0NSA4NTEuMjg1IC00MC4wNDI0IDY3Ni45MjMgMjQuMDUwNiA1MjUuOTI5TDE3MC4wNjMgMTgxLjk0NVoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=');\n --af-hero-blob-mask-mobile: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 768\"><path fill=\"%23000\" d=\"M1024 0H384A384 384 0 0 0 384 768H1024V0Z\"/></svg>');\n}\n\n.hero__image {\n min-height: var(--af-hero-image-min-height);\n overflow: visible;\n margin-top: var(--af-hero-image-lift);\n position: relative;\n z-index: 1;\n}\n\n.hero__image--masked ::slotted(img),\n.hero__image--masked ::slotted(picture img),\n.hero__image--masked ::slotted(.af-hero-image) {\n display: block;\n width: 100%;\n height: auto;\n -webkit-mask-image: var(--af-hero-blob-mask);\n mask-image: var(--af-hero-blob-mask);\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n mask-mode: alpha;\n}\n\n/* Fallback: some consumers slot a raw <img> wrapped in a container.\n Descendant selector per repo convention. */\n.hero__image--masked img {\n -webkit-mask-image: var(--af-hero-blob-mask);\n mask-image: var(--af-hero-blob-mask);\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n mask-mode: alpha;\n}\n\n/* -----------------------------------------------------------------\n Illustration (inkwell/soft-clay/mist-green -illustration)\n ----------------------------------------------------------------- */\n.hero__illustration {\n flex: 0 0 auto;\n width: 100%;\n max-width: 432px;\n line-height: 0;\n justify-self: end;\n}\n\n.hero__illustration ::slotted(svg),\n.hero__illustration ::slotted(img) {\n width: 100%;\n height: auto;\n display: block;\n border-radius: 16px;\n}\n\n/* Cap inkwell-illustration's slotted SVG so square-aspect art doesn't\n tower past the text column. 540 px matches the live treatment for\n the /industries + /integrations heroes. */\n:host(.hero--inkwell-illustration) .hero__illustration {\n max-width: 540px;\n}\n\n/* -----------------------------------------------------------------\n Logos-below overlap\n Painted in the theme's background token so the strip cleanly overlaps\n the bottom of the photo on the -photo variant. Empty = collapsed.\n ----------------------------------------------------------------- */\n.hero__logos {\n position: relative;\n z-index: 2;\n}\n\n.hero__logos:not(:has(*)) {\n display: none;\n}\n\n/* Photo variant pulls the logos row up so it covers the image's bottom\n edge — matches the ListingHero `.listing-hero__footer` treatment. */\n:host(.hero--inkwell-photo) .hero__logos:has(*) {\n margin-top: -240px;\n padding-top: 48px;\n padding-bottom: 48px;\n background: var(--af-background-base, var(--colour-brand-inkwell, #14343b));\n border-top: 1px solid\n var(--af-background-border-subtle, var(--colour-inkwell-450, #203e45));\n}\n\n/* -----------------------------------------------------------------\n Mobile / tablet\n ----------------------------------------------------------------- */\n@media (max-width: 991px) {\n :host(.hero--pad-default) .hero__inner,\n :host(.hero--pad-loose) .hero__inner {\n padding-top: 112px;\n }\n\n /* Centered variant still needs a touch more clearance under the\n navbar pill on tablet. */\n :host(.hero--inkwell-centered.hero--pad-default) .hero__inner {\n padding-top: 144px;\n }\n\n .hero__grid {\n grid-template-columns: 1fr;\n gap: 32px;\n }\n\n :host(.hero--soft-clay-illustration) .hero__grid,\n :host(.hero--mist-green-illustration) .hero__grid,\n :host(.hero--inkwell-illustration) .hero__grid {\n grid-template-columns: 1fr;\n }\n\n .hero__copy {\n padding-left: 0;\n padding-bottom: 0;\n }\n\n .hero__illustration {\n max-width: 360px;\n margin-inline: auto;\n justify-self: center;\n }\n\n /* Photo on mobile: swap the desktop blob mask for the softer D-curve\n mobile variant, and drop the lift so the image doesn't crash into\n the navbar. */\n .hero__image {\n margin-top: 0;\n min-height: auto;\n }\n\n :host(.hero--inkwell-photo) .hero__image--masked ::slotted(img),\n :host(.hero--inkwell-photo) .hero__image--masked img {\n -webkit-mask-image: var(--af-hero-blob-mask-mobile);\n mask-image: var(--af-hero-blob-mask-mobile);\n }\n\n :host(.hero--inkwell-photo) .hero__logos:has(*) {\n margin-top: 24px;\n padding-top: 32px;\n padding-bottom: 32px;\n background: transparent;\n border-top: none;\n }\n}\n","import { Component, h, Host, Prop, Element } from '@stencil/core';\n\nexport type HeroVariant =\n | 'inkwell-photo'\n | 'inkwell-illustration'\n | 'inkwell-centered'\n | 'soft-clay-illustration'\n | 'mist-green-illustration';\n\nexport type HeroTopPad = 'default' | 'loose';\n\n/**\n * Blob-shape mask used to clip hero photos on the inkwell-photo variant.\n * Extracted from the 7+ hand-rolled copies in the website so the path is\n * defined exactly once. Intrinsic viewBox: 741 × 940.\n */\nconst BLOB_MASK_URL =\n \"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NDEgOTQwIj48cGF0aCBkPSJNMTcwLjA2MyAxODEuOTQ1QzIzNC4xNTYgMzAuOTUxNCA0MDguNTE4IC0zOS40OTU1IDU1OS41MTIgMjQuNTk3NUM3MTAuNTA2IDg4LjY5MDQgNzgwLjk1MiAyNjMuMDUzIDcxNi44NTkgNDE0LjA0Nkw1NzAuODQ3IDc1OC4wMzFDNTA2Ljc1NCA5MDkuMDI0IDMzMi4zOTIgOTc5LjQ3MSAxODEuMzk4IDkxNS4zNzhDMzAuNDA0NSA4NTEuMjg1IC00MC4wNDI0IDY3Ni45MjMgMjQuMDUwNiA1MjUuOTI5TDE3MC4wNjMgMTgxLjk0NVoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=')\";\n\n/**\n * Mobile blob shape — simpler D-curve matching the live mobile banner.\n */\nconst BLOB_MASK_URL_MOBILE =\n \"url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 1024 768\\\"><path fill=\\\"%23000\\\" d=\\\"M1024 0H384A384 384 0 0 0 384 768H1024V0Z\\\"/></svg>')\";\n\n/**\n * Map each variant to its underlying section theme token. Keeps one source\n * of truth instead of having consumers spell the theme twice.\n */\nconst VARIANT_THEMES: Record<HeroVariant, 'inkwell' | 'soft-clay' | 'mist-green'> = {\n 'inkwell-photo': 'inkwell',\n 'inkwell-illustration': 'inkwell',\n 'inkwell-centered': 'inkwell',\n 'soft-clay-illustration': 'soft-clay',\n 'mist-green-illustration': 'mist-green',\n};\n\n/**\n * Unified top-of-page hero — replaces the 7+ hand-rolled hero implementations\n * the Affinda marketing site (and sibling apps) currently ship. Covers five\n * canonical patterns via the `variant` prop:\n *\n * - `inkwell-photo` — inkwell background, blob-masked photo on the right.\n * Use for: listing / archive pages (blog, case-studies, whitepapers,\n * value-creation, about-us) and industry landing pages that carry a\n * photograph instead of an illustration.\n * - `inkwell-illustration` — inkwell background, illustration on the right.\n * Use for: industry landing pages, /industries, /integrations, /platform\n * with bespoke art.\n * - `inkwell-centered` — inkwell background, centred typography lockup.\n * Slot `<af-paperclip-decoration />` into the `paperclip` slot for the\n * watermark treatment. Use for: `/`, `/au`, `/platform`.\n * - `soft-clay-illustration` — soft-clay background, illustration on the\n * right. Use for: /news, /industries overview, /security, /compare.\n * - `mist-green-illustration` — same layout as soft-clay-illustration but on\n * the mist-green theme. Reserved for future pages.\n *\n * ## Slots\n *\n * - default — heading content (use when richer markup than the `heading`\n * prop can express is needed; e.g. coloured spans or line breaks).\n * - `description` — supporting copy under the heading.\n * - `badge` — optional pre-heading label (pill, version tag).\n * - `buttons` — hero CTAs (usually an `<af-button-group>`).\n * - `image` — the photograph for the `inkwell-photo` variant. Wrapped in\n * the blob mask automatically.\n * - `illustration` — the illustration SVG for `-illustration` variants.\n * - `paperclip` — watermark for `inkwell-centered`. Consumers typically\n * slot `<af-paperclip-decoration />` here.\n * - `logos-below` — overlap row at the bottom gutter (logo carousel etc.).\n * Painted with the theme's background so it cleanly overlaps the image's\n * lower edge on the photo variant.\n *\n * ## Float-navbar handling\n *\n * When `floatNavbar` is true (the default for the inkwell variants) the\n * component sets `data-af-hero-float-navbar=\"true\"` on `<body>` via a\n * lifecycle hook, and a companion rule in `@affinda/css/base.css` applies\n * the `body > header { position: absolute }` / `main { padding-top: 0 }`\n * / navbar-spacer-transparent treatment. Consumers already import\n * `@affinda/css` so no extra import is required. The rule deactivates\n * when the hero is removed from the DOM.\n *\n * ## Image lift\n *\n * The `inkwell-photo` variant renders the photo column with\n * `margin-top: var(--af-hero-image-lift, -260px)`. Override per-page by\n * setting `--af-hero-image-lift` on the `<af-hero>` element.\n */\n@Component({\n tag: 'af-hero',\n styleUrl: 'af-hero.css',\n shadow: false,\n scoped: true,\n})\nexport class AfHero {\n @Element() el!: HTMLElement;\n\n /** Layout / theme preset. See variant docs in the component header. */\n @Prop({ reflect: true }) variant: HeroVariant = 'inkwell-photo';\n\n /** Heading text (use the default slot for richer markup). */\n @Prop() heading: string = '';\n\n /** Description text (use the `description` slot for richer markup). */\n @Prop() description: string = '';\n\n /**\n * Float the site header over the hero and paint the navbar-spacer\n * transparent so the hero background flows to the top of the viewport.\n * Defaults to true for the three inkwell variants, false for the\n * soft-clay / mist-green illustration variants (whose consumers don't\n * always want a full-bleed crown).\n */\n @Prop({ reflect: true }) floatNavbar?: boolean;\n\n /**\n * Top padding preset. `default` = 124px (matches IndustryHero /\n * IllustrationHero). `loose` = 164px (matches ListingHero — gives the\n * image a touch more breathing room above the lockup on archive pages).\n */\n @Prop() topPad: HeroTopPad = 'default';\n\n /** Typography lockup max-width (px). Defaults to 620, matching the live site. */\n @Prop() maxWidth: number = 620;\n\n /**\n * Whether to apply the blob mask to the slotted `image`. Defaults to\n * `true` for `inkwell-photo`. Set `false` if you want to slot in a\n * pre-masked raster or a custom wrapper.\n */\n @Prop() maskImage: boolean = true;\n\n private get resolvedFloatNavbar(): boolean {\n if (typeof this.floatNavbar === 'boolean') return this.floatNavbar;\n return (\n this.variant === 'inkwell-photo' ||\n this.variant === 'inkwell-illustration' ||\n this.variant === 'inkwell-centered'\n );\n }\n\n private get theme() {\n return VARIANT_THEMES[this.variant];\n }\n\n connectedCallback() {\n if (this.resolvedFloatNavbar && typeof document !== 'undefined') {\n document.body.setAttribute('data-af-hero-float-navbar', 'true');\n }\n }\n\n disconnectedCallback() {\n if (typeof document !== 'undefined' && !document.querySelector('af-hero')) {\n document.body.removeAttribute('data-af-hero-float-navbar');\n }\n }\n\n private renderCopy() {\n const alignment = this.variant === 'inkwell-centered' ? 'center' : 'left';\n return (\n <div class=\"hero__copy\">\n <div class=\"hero__badge\">\n <slot name=\"badge\"></slot>\n </div>\n <af-typography-lockup\n heading-size=\"1\"\n text-alignment={alignment}\n max-width={String(this.maxWidth)}\n >\n {this.heading ? <h1>{this.heading}</h1> : <slot></slot>}\n {this.description ? (\n <span slot=\"description\">{this.description}</span>\n ) : (\n <slot name=\"description\" slot=\"description\"></slot>\n )}\n </af-typography-lockup>\n <div class=\"hero__buttons\">\n <slot name=\"buttons\"></slot>\n </div>\n </div>\n );\n }\n\n private renderPhoto() {\n return (\n <div\n class={{\n hero__image: true,\n 'hero__image--masked': this.maskImage,\n }}\n >\n <slot name=\"image\"></slot>\n </div>\n );\n }\n\n private renderIllustration() {\n return (\n <div class=\"hero__illustration\">\n <slot name=\"illustration\"></slot>\n </div>\n );\n }\n\n render() {\n const v = this.variant;\n const centered = v === 'inkwell-centered';\n const hasImage = v === 'inkwell-photo';\n const hasIllustration =\n v === 'inkwell-illustration' ||\n v === 'soft-clay-illustration' ||\n v === 'mist-green-illustration';\n\n return (\n <Host\n class={{\n [`hero--${v}`]: true,\n [`hero--pad-${this.topPad}`]: true,\n [`hero--theme-${this.theme}`]: true,\n 'hero--float-navbar': this.resolvedFloatNavbar,\n }}\n >\n <af-section\n theme={this.theme}\n padding=\"none\"\n container={false}\n class=\"hero__section\"\n >\n {centered && (\n <div class=\"hero__paperclip\" aria-hidden=\"true\">\n <slot name=\"paperclip\"></slot>\n </div>\n )}\n <af-container class=\"hero__inner\">\n {centered ? (\n this.renderCopy()\n ) : (\n <div class=\"hero__grid\">\n {this.renderCopy()}\n {hasImage && this.renderPhoto()}\n {hasIllustration && this.renderIllustration()}\n </div>\n )}\n </af-container>\n <div class=\"hero__logos\">\n <slot name=\"logos-below\"></slot>\n </div>\n </af-section>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-BSgEGp12.js","mappings":"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","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-hero/af-hero.css?tag=af-hero&encapsulation=scoped","src/components/af-hero/af-hero.tsx"],"sourcesContent":[":host {\n display: block;\n position: relative;\n width: 100%;\n /* Image-lift custom property — consumers override per-page via inline\n style or a page-level rule. The negative value pulls the photo's\n crown above the hero top so it reads behind the floating navbar\n pill. Matches the live Webflow stack (~-260px on .page-banner). */\n --af-hero-image-lift: -260px;\n /* Blob mask container size override — rarely needed; defaults to the\n photo column's natural dimensions. */\n --af-hero-image-min-height: 360px;\n}\n\n.hero__section {\n position: relative;\n overflow: hidden;\n}\n\n/* -----------------------------------------------------------------\n Paperclip watermark slot (inkwell-centered only)\n ----------------------------------------------------------------- */\n.hero__paperclip {\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n pointer-events: none;\n z-index: 0;\n /* Default size — consumers can resize the slotted decoration via its\n own width/height props. */\n width: 655px;\n height: 754px;\n}\n\n@media (max-width: 991px) {\n .hero__paperclip {\n width: 480px;\n height: 552px;\n }\n}\n\n@media (max-width: 767px) {\n .hero__paperclip {\n display: none;\n }\n}\n\n/* -----------------------------------------------------------------\n Inner wrapper — top/bottom padding\n ----------------------------------------------------------------- */\n.hero__inner {\n position: relative;\n z-index: 1;\n padding-bottom: 40px;\n}\n\n:host(.hero--pad-default) .hero__inner {\n padding-top: 124px;\n}\n\n:host(.hero--pad-loose) .hero__inner {\n padding-top: 164px;\n}\n\n/* Centered variant: leave clear breathing room under the floating navbar\n pill so the heading isn't clipped at the top. The live affinda.com\n reference at 1280 vw renders the heading roughly 180 px below the\n viewport top — pad accordingly. (Earlier value of 80 px clipped the\n heading behind the navbar; caught by qa/regression-compare in the\n site repo.) */\n:host(.hero--inkwell-centered.hero--pad-default) .hero__inner {\n padding-top: 180px;\n}\n\n/* -----------------------------------------------------------------\n Grid layout (photo + illustration variants)\n ----------------------------------------------------------------- */\n.hero__grid {\n display: grid;\n grid-template-columns: 5fr 7fr;\n gap: 40px;\n align-items: center;\n}\n\n/* Illustration variants use a looser two-column split so the art\n doesn't dominate. */\n:host(.hero--soft-clay-illustration) .hero__grid,\n:host(.hero--mist-green-illustration) .hero__grid {\n grid-template-columns: 1fr auto;\n gap: 48px;\n}\n\n/* inkwell-illustration: 50/50 split. The 5fr/7fr default tilts the\n illustration column too wide, which pinches the heading down to\n 4-6 lines at 1280 vw. Even split keeps the heading at 2-3 lines\n matching the live affinda.com reference. */\n:host(.hero--inkwell-illustration) .hero__grid {\n grid-template-columns: 1fr 1fr;\n}\n\n.hero__copy {\n /* Small inset pushes heading inward from the hard container edge —\n matches the live .page-banner-text treatment. Only applied to\n left-aligned variants. */\n padding-left: 16px;\n}\n\n:host(.hero--inkwell-photo.hero--pad-loose) .hero__copy {\n /* Mirrors ListingHero's `padding-bottom: 120px` — combined with\n `align-items: center` on the grid, this shifts the heading visually\n upward so the subtitle lines up near the image's vertical centre. */\n padding-bottom: 120px;\n}\n\n:host(.hero--inkwell-centered) .hero__copy {\n padding-left: 0;\n text-align: center;\n}\n\n.hero__badge:not(:has(*)) {\n display: none;\n}\n\n.hero__badge:has(*) {\n margin-bottom: 16px;\n}\n\n.hero__copy ::slotted([slot='badge']) {\n display: inline-block;\n}\n\n.hero__buttons {\n margin-top: 32px;\n}\n\n.hero__buttons:empty {\n display: none;\n}\n\n:host(.hero--inkwell-centered) .hero__buttons {\n display: flex;\n justify-content: center;\n}\n\n/* -----------------------------------------------------------------\n Photo (inkwell-photo)\n Blob-mask shape defined once as a CSS custom property so Stencil\n doesn't duplicate the giant base64 URL for prefixed/unprefixed pairs.\n ----------------------------------------------------------------- */\n:host {\n --af-hero-blob-mask: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NDEgOTQwIj48cGF0aCBkPSJNMTcwLjA2MyAxODEuOTQ1QzIzNC4xNTYgMzAuOTUxNCA0MDguNTE4IC0zOS40OTU1IDU1OS41MTIgMjQuNTk3NUM3MTAuNTA2IDg4LjY5MDQgNzgwLjk1MiAyNjMuMDUzIDcxNi44NTkgNDE0LjA0Nkw1NzAuODQ3IDc1OC4wMzFDNTA2Ljc1NCA5MDkuMDI0IDMzMi4zOTIgOTc5LjQ3MSAxODEuMzk4IDkxNS4zNzhDMzAuNDA0NSA4NTEuMjg1IC00MC4wNDI0IDY3Ni45MjMgMjQuMDUwNiA1MjUuOTI5TDE3MC4wNjMgMTgxLjk0NVoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=');\n --af-hero-blob-mask-mobile: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 768\"><path fill=\"%23000\" d=\"M1024 0H384A384 384 0 0 0 384 768H1024V0Z\"/></svg>');\n}\n\n.hero__image {\n min-height: var(--af-hero-image-min-height);\n overflow: visible;\n margin-top: var(--af-hero-image-lift);\n position: relative;\n z-index: 1;\n}\n\n.hero__image--masked ::slotted(img),\n.hero__image--masked ::slotted(picture img),\n.hero__image--masked ::slotted(.af-hero-image) {\n display: block;\n width: 100%;\n height: auto;\n -webkit-mask-image: var(--af-hero-blob-mask);\n mask-image: var(--af-hero-blob-mask);\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n mask-mode: alpha;\n}\n\n/* Fallback: some consumers slot a raw <img> wrapped in a container.\n Descendant selector per repo convention. */\n.hero__image--masked img {\n -webkit-mask-image: var(--af-hero-blob-mask);\n mask-image: var(--af-hero-blob-mask);\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n mask-mode: alpha;\n}\n\n/* -----------------------------------------------------------------\n Illustration (inkwell/soft-clay/mist-green -illustration)\n ----------------------------------------------------------------- */\n.hero__illustration {\n flex: 0 0 auto;\n width: 100%;\n max-width: 432px;\n line-height: 0;\n justify-self: end;\n}\n\n.hero__illustration ::slotted(svg),\n.hero__illustration ::slotted(img) {\n width: 100%;\n height: auto;\n display: block;\n border-radius: 16px;\n}\n\n/* Cap inkwell-illustration's slotted SVG so square-aspect art doesn't\n tower past the text column. 540 px matches the live treatment for\n the /industries + /integrations heroes. */\n:host(.hero--inkwell-illustration) .hero__illustration {\n max-width: 540px;\n}\n\n/* -----------------------------------------------------------------\n Logos-below overlap\n Painted in the theme's background token so the strip cleanly overlaps\n the bottom of the photo on the -photo variant. Empty = collapsed.\n ----------------------------------------------------------------- */\n.hero__logos {\n position: relative;\n z-index: 2;\n}\n\n.hero__logos:not(:has(*)) {\n display: none;\n}\n\n/* Photo variant pulls the logos row up so it covers the image's bottom\n edge — matches the ListingHero `.listing-hero__footer` treatment. */\n:host(.hero--inkwell-photo) .hero__logos:has(*) {\n margin-top: -240px;\n padding-top: 48px;\n padding-bottom: 48px;\n background: var(--af-background-base, var(--colour-brand-inkwell, #14343b));\n border-top: 1px solid\n var(--af-background-border-subtle, var(--colour-inkwell-450, #203e45));\n}\n\n/* -----------------------------------------------------------------\n Mobile / tablet\n ----------------------------------------------------------------- */\n@media (max-width: 991px) {\n :host(.hero--pad-default) .hero__inner,\n :host(.hero--pad-loose) .hero__inner {\n padding-top: 112px;\n }\n\n /* Centered variant still needs a touch more clearance under the\n navbar pill on tablet. */\n :host(.hero--inkwell-centered.hero--pad-default) .hero__inner {\n padding-top: 144px;\n }\n\n .hero__grid {\n grid-template-columns: 1fr;\n gap: 32px;\n }\n\n :host(.hero--soft-clay-illustration) .hero__grid,\n :host(.hero--mist-green-illustration) .hero__grid,\n :host(.hero--inkwell-illustration) .hero__grid {\n grid-template-columns: 1fr;\n }\n\n .hero__copy {\n padding-left: 0;\n padding-bottom: 0;\n }\n\n .hero__illustration {\n max-width: 360px;\n margin-inline: auto;\n justify-self: center;\n }\n\n /* Photo on mobile: swap the desktop blob mask for the softer D-curve\n mobile variant, and drop the lift so the image doesn't crash into\n the navbar. */\n .hero__image {\n margin-top: 0;\n min-height: auto;\n }\n\n :host(.hero--inkwell-photo) .hero__image--masked ::slotted(img),\n :host(.hero--inkwell-photo) .hero__image--masked img {\n -webkit-mask-image: var(--af-hero-blob-mask-mobile);\n mask-image: var(--af-hero-blob-mask-mobile);\n }\n\n :host(.hero--inkwell-photo) .hero__logos:has(*) {\n margin-top: 24px;\n padding-top: 32px;\n padding-bottom: 32px;\n background: transparent;\n border-top: none;\n }\n}\n","import { Component, h, Host, Prop, Element } from '@stencil/core';\n\nexport type HeroVariant =\n | 'inkwell-photo'\n | 'inkwell-illustration'\n | 'inkwell-centered'\n | 'soft-clay-illustration'\n | 'mist-green-illustration';\n\nexport type HeroTopPad = 'default' | 'loose';\n\n/**\n * Blob-shape mask used to clip hero photos on the inkwell-photo variant.\n * Extracted from the 7+ hand-rolled copies in the website so the path is\n * defined exactly once. Intrinsic viewBox: 741 × 940.\n */\nconst BLOB_MASK_URL =\n \"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3NDEgOTQwIj48cGF0aCBkPSJNMTcwLjA2MyAxODEuOTQ1QzIzNC4xNTYgMzAuOTUxNCA0MDguNTE4IC0zOS40OTU1IDU1OS41MTIgMjQuNTk3NUM3MTAuNTA2IDg4LjY5MDQgNzgwLjk1MiAyNjMuMDUzIDcxNi44NTkgNDE0LjA0Nkw1NzAuODQ3IDc1OC4wMzFDNTA2Ljc1NCA5MDkuMDI0IDMzMi4zOTIgOTc5LjQ3MSAxODEuMzk4IDkxNS4zNzhDMzAuNDA0NSA4NTEuMjg1IC00MC4wNDI0IDY3Ni45MjMgMjQuMDUwNiA1MjUuOTI5TDE3MC4wNjMgMTgxLjk0NVoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=')\";\n\n/**\n * Mobile blob shape — simpler D-curve matching the live mobile banner.\n */\nconst BLOB_MASK_URL_MOBILE =\n \"url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 1024 768\\\"><path fill=\\\"%23000\\\" d=\\\"M1024 0H384A384 384 0 0 0 384 768H1024V0Z\\\"/></svg>')\";\n\n/**\n * Map each variant to its underlying section theme token. Keeps one source\n * of truth instead of having consumers spell the theme twice.\n */\nconst VARIANT_THEMES: Record<HeroVariant, 'inkwell' | 'soft-clay' | 'mist-green'> = {\n 'inkwell-photo': 'inkwell',\n 'inkwell-illustration': 'inkwell',\n 'inkwell-centered': 'inkwell',\n 'soft-clay-illustration': 'soft-clay',\n 'mist-green-illustration': 'mist-green',\n};\n\n/**\n * Unified top-of-page hero — replaces the 7+ hand-rolled hero implementations\n * the Affinda marketing site (and sibling apps) currently ship. Covers five\n * canonical patterns via the `variant` prop:\n *\n * - `inkwell-photo` — inkwell background, blob-masked photo on the right.\n * Use for: listing / archive pages (blog, case-studies, whitepapers,\n * value-creation, about-us) and industry landing pages that carry a\n * photograph instead of an illustration.\n * - `inkwell-illustration` — inkwell background, illustration on the right.\n * Use for: industry landing pages, /industries, /integrations, /platform\n * with bespoke art.\n * - `inkwell-centered` — inkwell background, centred typography lockup.\n * Slot `<af-paperclip-decoration />` into the `paperclip` slot for the\n * watermark treatment. Use for: `/`, `/au`, `/platform`.\n * - `soft-clay-illustration` — soft-clay background, illustration on the\n * right. Use for: /news, /industries overview, /security, /compare.\n * - `mist-green-illustration` — same layout as soft-clay-illustration but on\n * the mist-green theme. Reserved for future pages.\n *\n * ## Slots\n *\n * - default — heading content (use when richer markup than the `heading`\n * prop can express is needed; e.g. coloured spans or line breaks).\n * - `description` — supporting copy under the heading.\n * - `badge` — optional pre-heading label (pill, version tag).\n * - `buttons` — hero CTAs (usually an `<af-button-group>`).\n * - `image` — the photograph for the `inkwell-photo` variant. Wrapped in\n * the blob mask automatically.\n * - `illustration` — the illustration SVG for `-illustration` variants.\n * - `paperclip` — watermark for `inkwell-centered`. Consumers typically\n * slot `<af-paperclip-decoration />` here.\n * - `logos-below` — overlap row at the bottom gutter (logo carousel etc.).\n * Painted with the theme's background so it cleanly overlaps the image's\n * lower edge on the photo variant.\n *\n * ## Float-navbar handling\n *\n * When `floatNavbar` is true (the default for the inkwell variants) the\n * component sets `data-af-hero-float-navbar=\"true\"` on `<body>` via a\n * lifecycle hook, and a companion rule in `@affinda/css/base.css` applies\n * the `body > header { position: absolute }` / `main { padding-top: 0 }`\n * / navbar-spacer-transparent treatment. Consumers already import\n * `@affinda/css` so no extra import is required. The rule deactivates\n * when the hero is removed from the DOM.\n *\n * ## Image lift\n *\n * The `inkwell-photo` variant renders the photo column with\n * `margin-top: var(--af-hero-image-lift, -260px)`. Override per-page by\n * setting `--af-hero-image-lift` on the `<af-hero>` element.\n */\n@Component({\n tag: 'af-hero',\n styleUrl: 'af-hero.css',\n shadow: false,\n scoped: true,\n})\nexport class AfHero {\n @Element() el!: HTMLElement;\n\n /** Layout / theme preset. See variant docs in the component header. */\n @Prop({ reflect: true }) variant: HeroVariant = 'inkwell-photo';\n\n /** Heading text (use the default slot for richer markup). */\n @Prop() heading: string = '';\n\n /** Description text (use the `description` slot for richer markup). */\n @Prop() description: string = '';\n\n /**\n * Float the site header over the hero and paint the navbar-spacer\n * transparent so the hero background flows to the top of the viewport.\n * Defaults to true for the three inkwell variants, false for the\n * soft-clay / mist-green illustration variants (whose consumers don't\n * always want a full-bleed crown).\n */\n @Prop({ reflect: true }) floatNavbar?: boolean;\n\n /**\n * Top padding preset. `default` = 124px (matches IndustryHero /\n * IllustrationHero). `loose` = 164px (matches ListingHero — gives the\n * image a touch more breathing room above the lockup on archive pages).\n */\n @Prop() topPad: HeroTopPad = 'default';\n\n /** Typography lockup max-width (px). Defaults to 620, matching the live site. */\n @Prop() maxWidth: number = 620;\n\n /**\n * Whether to apply the blob mask to the slotted `image`. Defaults to\n * `true` for `inkwell-photo`. Set `false` if you want to slot in a\n * pre-masked raster or a custom wrapper.\n */\n @Prop() maskImage: boolean = true;\n\n private get resolvedFloatNavbar(): boolean {\n if (typeof this.floatNavbar === 'boolean') return this.floatNavbar;\n return (\n this.variant === 'inkwell-photo' ||\n this.variant === 'inkwell-illustration' ||\n this.variant === 'inkwell-centered'\n );\n }\n\n private get theme() {\n return VARIANT_THEMES[this.variant];\n }\n\n connectedCallback() {\n if (this.resolvedFloatNavbar && typeof document !== 'undefined') {\n document.body.setAttribute('data-af-hero-float-navbar', 'true');\n }\n }\n\n disconnectedCallback() {\n if (typeof document !== 'undefined' && !document.querySelector('af-hero')) {\n document.body.removeAttribute('data-af-hero-float-navbar');\n }\n }\n\n private renderCopy() {\n const alignment = this.variant === 'inkwell-centered' ? 'center' : 'left';\n return (\n <div class=\"hero__copy\">\n <div class=\"hero__badge\">\n <slot name=\"badge\"></slot>\n </div>\n <af-typography-lockup\n heading-size=\"1\"\n text-alignment={alignment}\n max-width={String(this.maxWidth)}\n >\n {this.heading ? <h1>{this.heading}</h1> : <slot></slot>}\n {this.description ? (\n <span slot=\"description\">{this.description}</span>\n ) : (\n <slot name=\"description\" slot=\"description\"></slot>\n )}\n </af-typography-lockup>\n <div class=\"hero__buttons\">\n <slot name=\"buttons\"></slot>\n </div>\n </div>\n );\n }\n\n private renderPhoto() {\n return (\n <div\n class={{\n hero__image: true,\n 'hero__image--masked': this.maskImage,\n }}\n >\n <slot name=\"image\"></slot>\n </div>\n );\n }\n\n private renderIllustration() {\n return (\n <div class=\"hero__illustration\">\n <slot name=\"illustration\"></slot>\n </div>\n );\n }\n\n render() {\n const v = this.variant;\n const centered = v === 'inkwell-centered';\n const hasImage = v === 'inkwell-photo';\n const hasIllustration =\n v === 'inkwell-illustration' ||\n v === 'soft-clay-illustration' ||\n v === 'mist-green-illustration';\n\n return (\n <Host\n class={{\n [`hero--${v}`]: true,\n [`hero--pad-${this.topPad}`]: true,\n [`hero--theme-${this.theme}`]: true,\n 'hero--float-navbar': this.resolvedFloatNavbar,\n }}\n >\n <af-section\n theme={this.theme}\n padding=\"none\"\n container={false}\n class=\"hero__section\"\n >\n {centered && (\n <div class=\"hero__paperclip\" aria-hidden=\"true\">\n <slot name=\"paperclip\"></slot>\n </div>\n )}\n <af-container class=\"hero__inner\">\n {centered ? (\n this.renderCopy()\n ) : (\n <div class=\"hero__grid\">\n {this.renderCopy()}\n {hasImage && this.renderPhoto()}\n {hasIllustration && this.renderIllustration()}\n </div>\n )}\n </af-container>\n <div class=\"hero__logos\">\n <slot name=\"logos-below\"></slot>\n </div>\n </af-section>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, d as createEvent, h, c as Host } from './p-CiY0Twna.js';
1
+ import { p as proxyCustomElement, H, d as createEvent, h, c as Host } from './p-Btpdr0Bi.js';
2
2
 
3
3
  const afSwitchCss = ":host{display:inline-block}.switch{display:inline-flex;align-items:center;gap:12px;cursor:pointer;font-family:var(--typography-primaryfont, 'NeuSans', sans-serif);font-size:14px;line-height:20px;color:var(--af-form-control-label, var(--af-typography-body-dark, #14343b));user-select:none}.switch.disabled{cursor:not-allowed;opacity:0.5}.input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.track{position:relative;display:flex;align-items:center;flex-shrink:0;width:52px;height:30px;border-radius:var(--radii-switch, 9999px);background:var(--af-form-control-bg-disabled, var(--af-background-level-1, #e8eeed));transition:background 0.2s ease;box-sizing:border-box}.track.active{background:var(--af-form-control-bg-checked, var(--colour-brand-inkwell, #14343b))}.track.disabled{background:var(--af-form-control-bg-disabled, var(--af-background-level-1, #e8eeed))}.track.active.disabled{background:var(--af-form-control-bg-checked-disabled, #708380)}.switch:not(.disabled):hover .track:not(.active){background:var(--af-form-control-stroke, var(--af-background-level-1-hover, #dde6e3))}.input:focus-visible+.track{box-shadow:0 0 0 4px var(--af-background-base, #ffffff), 0 0 0 5px var(--af-form-control-stroke-hover, var(--colour-brand-inkwell, #14343b));outline:none}.knob{position:absolute;width:26px;height:26px;border-radius:50%;background:var(--af-form-control-bg, var(--colour-brand-white, #ffffff));box-shadow:0 2px 4px rgba(0, 0, 0, 0.15);transition:transform 0.2s ease, background 0.2s ease;transform:translateX(2px)}.knob.active{transform:translateX(24px);background:var(--af-form-control-icon, var(--colour-brand-white, #ffffff))}.knob.disabled{background:var(--af-form-control-stroke-disabled, var(--colour-inkwell-200, #a1aeb1));box-shadow:none}.label{display:flex;align-items:center;min-height:24px}.label:empty{display:none}";
4
4
 
@@ -65,6 +65,6 @@ function defineCustomElement() {
65
65
  }
66
66
 
67
67
  export { AfSwitch as A, defineCustomElement as d };
68
- //# sourceMappingURL=p-BkTUo72F.js.map
68
+ //# sourceMappingURL=p-B_r5b4JI.js.map
69
69
 
70
- //# sourceMappingURL=p-BkTUo72F.js.map
70
+ //# sourceMappingURL=p-B_r5b4JI.js.map
@@ -1 +1 @@
1
- {"file":"p-BkTUo72F.js","mappings":";;AAAA,MAAM,WAAW,GAAG,+3DAA+3D;;MCYt4D,QAAQ,iBAAAA,kBAAA,CAAA,MAAA,QAAA,SAAAC,CAAA,CAAA;AALrB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;;AAME;;AAEG;AACqC,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK;AAE/D;;AAEG;AACsB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;AAiB1C,QAAA,IAAY,CAAA,YAAA,GAAG,MAAK;YAC1B,IAAI,IAAI,CAAC,QAAQ;gBAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C,SAAC;AA4CF;IA1CC,MAAM,GAAA;AACJ,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC;SAClB;AAED,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC;SAClB;AAED,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC;SAClB;AAED,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAO,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,aAAa,EAAA,EACzB,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,IAAI,CAAC,MAAM,EACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAC3B,CAAA,EACF,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,YAAY,EAAA,EACvB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAE,WAAW,EAAA,CAAS,CAC5B,EACP,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,OAAO,EAAA,EACjB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACR,CACD,CACH;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-switch/af-switch.css?tag=af-switch&encapsulation=shadow","src/components/af-switch/af-switch.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n.switch {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n line-height: 20px;\n color: var(--af-form-control-label, var(--af-typography-body-dark, #14343b));\n user-select: none;\n}\n\n.switch.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Hidden native input */\n.input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* Switch track */\n.track {\n position: relative;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n width: 52px;\n height: 30px;\n border-radius: var(--radii-switch, 9999px);\n background: var(--af-form-control-bg-disabled, var(--af-background-level-1, #e8eeed));\n transition: background 0.2s ease;\n box-sizing: border-box;\n}\n\n/* Track active state */\n.track.active {\n background: var(--af-form-control-bg-checked, var(--colour-brand-inkwell, #14343b));\n}\n\n/* Track disabled state */\n.track.disabled {\n background: var(--af-form-control-bg-disabled, var(--af-background-level-1, #e8eeed));\n}\n\n/* Track active + disabled state */\n.track.active.disabled {\n background: var(--af-form-control-bg-checked-disabled, #708380);\n}\n\n/* Hover state */\n.switch:not(.disabled):hover .track:not(.active) {\n background: var(--af-form-control-stroke, var(--af-background-level-1-hover, #dde6e3));\n}\n\n/* Focus state */\n.input:focus-visible + .track {\n box-shadow: 0 0 0 4px var(--af-background-base, #ffffff), 0 0 0 5px var(--af-form-control-stroke-hover, var(--colour-brand-inkwell, #14343b));\n outline: none;\n}\n\n/* Switch knob */\n.knob {\n position: absolute;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n background: var(--af-form-control-bg, var(--colour-brand-white, #ffffff));\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease, background 0.2s ease;\n transform: translateX(2px);\n}\n\n/* Knob active position */\n.knob.active {\n transform: translateX(24px);\n /* When active, knob should contrast with the checked track */\n background: var(--af-form-control-icon, var(--colour-brand-white, #ffffff));\n}\n\n/* Knob disabled state */\n.knob.disabled {\n background: var(--af-form-control-stroke-disabled, var(--colour-inkwell-200, #a1aeb1));\n box-shadow: none;\n}\n\n/* Label styling */\n.label {\n display: flex;\n align-items: center;\n min-height: 24px;\n}\n\n/* Empty label - hide if no content */\n.label:empty {\n display: none;\n}\n","import { Component, h, Prop, Host, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Switch component for toggling between on and off states.\n * \n * @slot - Switch label text\n */\n@Component({\n tag: 'af-switch',\n styleUrl: 'af-switch.css',\n shadow: true\n})\nexport class AfSwitch {\n /**\n * Whether the switch is active (on)\n */\n @Prop({ mutable: true, reflect: true }) active: boolean = false;\n\n /**\n * Whether the switch is disabled\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * The name of the switch for form submission\n */\n @Prop() name?: string;\n\n /**\n * The value of the switch for form submission\n */\n @Prop() value?: string;\n\n /**\n * Emitted when the switch state changes\n */\n @Event() afChange!: EventEmitter<{ active: boolean }>;\n\n private handleChange = () => {\n if (this.disabled) return;\n this.active = !this.active;\n this.afChange.emit({ active: this.active });\n };\n\n render() {\n const switchClasses = {\n 'switch': true,\n 'active': this.active,\n 'disabled': this.disabled\n };\n\n const trackClasses = {\n 'track': true,\n 'active': this.active,\n 'disabled': this.disabled\n };\n\n const knobClasses = {\n 'knob': true,\n 'active': this.active,\n 'disabled': this.disabled\n };\n\n return (\n <Host>\n <label class={switchClasses}>\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"input\"\n checked={this.active}\n disabled={this.disabled}\n name={this.name}\n value={this.value}\n onChange={this.handleChange}\n />\n <span class={trackClasses}>\n <span class={knobClasses}></span>\n </span>\n <span class=\"label\">\n <slot></slot>\n </span>\n </label>\n </Host>\n );\n }\n}\n\n"],"version":3}
1
+ {"file":"p-B_r5b4JI.js","mappings":";;AAAA,MAAM,WAAW,GAAG,+3DAA+3D;;MCYt4D,QAAQ,iBAAAA,kBAAA,CAAA,MAAA,QAAA,SAAAC,CAAA,CAAA;AALrB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;;AAME;;AAEG;AACqC,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK;AAE/D;;AAEG;AACsB,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK;AAiB1C,QAAA,IAAY,CAAA,YAAA,GAAG,MAAK;YAC1B,IAAI,IAAI,CAAC,QAAQ;gBAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7C,SAAC;AA4CF;IA1CC,MAAM,GAAA;AACJ,QAAA,MAAM,aAAa,GAAG;AACpB,YAAA,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC;SAClB;AAED,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC;SAClB;AAED,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC;SAClB;AAED,QAAA,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAO,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,aAAa,EAAA,EACzB,CAAA,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACE,IAAI,EAAC,UAAU,EACf,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,IAAI,CAAC,MAAM,EACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAC3B,CAAA,EACF,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,YAAY,EAAA,EACvB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAM,KAAK,EAAE,WAAW,EAAA,CAAS,CAC5B,EACP,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,OAAO,EAAA,EACjB,CAAA,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAa,CACR,CACD,CACH;;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-switch/af-switch.css?tag=af-switch&encapsulation=shadow","src/components/af-switch/af-switch.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\n.switch {\n display: inline-flex;\n align-items: center;\n gap: 12px;\n cursor: pointer;\n font-family: var(--typography-primaryfont, 'NeuSans', sans-serif);\n font-size: 14px;\n line-height: 20px;\n color: var(--af-form-control-label, var(--af-typography-body-dark, #14343b));\n user-select: none;\n}\n\n.switch.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Hidden native input */\n.input {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n/* Switch track */\n.track {\n position: relative;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n width: 52px;\n height: 30px;\n border-radius: var(--radii-switch, 9999px);\n background: var(--af-form-control-bg-disabled, var(--af-background-level-1, #e8eeed));\n transition: background 0.2s ease;\n box-sizing: border-box;\n}\n\n/* Track active state */\n.track.active {\n background: var(--af-form-control-bg-checked, var(--colour-brand-inkwell, #14343b));\n}\n\n/* Track disabled state */\n.track.disabled {\n background: var(--af-form-control-bg-disabled, var(--af-background-level-1, #e8eeed));\n}\n\n/* Track active + disabled state */\n.track.active.disabled {\n background: var(--af-form-control-bg-checked-disabled, #708380);\n}\n\n/* Hover state */\n.switch:not(.disabled):hover .track:not(.active) {\n background: var(--af-form-control-stroke, var(--af-background-level-1-hover, #dde6e3));\n}\n\n/* Focus state */\n.input:focus-visible + .track {\n box-shadow: 0 0 0 4px var(--af-background-base, #ffffff), 0 0 0 5px var(--af-form-control-stroke-hover, var(--colour-brand-inkwell, #14343b));\n outline: none;\n}\n\n/* Switch knob */\n.knob {\n position: absolute;\n width: 26px;\n height: 26px;\n border-radius: 50%;\n background: var(--af-form-control-bg, var(--colour-brand-white, #ffffff));\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease, background 0.2s ease;\n transform: translateX(2px);\n}\n\n/* Knob active position */\n.knob.active {\n transform: translateX(24px);\n /* When active, knob should contrast with the checked track */\n background: var(--af-form-control-icon, var(--colour-brand-white, #ffffff));\n}\n\n/* Knob disabled state */\n.knob.disabled {\n background: var(--af-form-control-stroke-disabled, var(--colour-inkwell-200, #a1aeb1));\n box-shadow: none;\n}\n\n/* Label styling */\n.label {\n display: flex;\n align-items: center;\n min-height: 24px;\n}\n\n/* Empty label - hide if no content */\n.label:empty {\n display: none;\n}\n","import { Component, h, Prop, Host, Event, EventEmitter } from '@stencil/core';\n\n/**\n * Switch component for toggling between on and off states.\n * \n * @slot - Switch label text\n */\n@Component({\n tag: 'af-switch',\n styleUrl: 'af-switch.css',\n shadow: true\n})\nexport class AfSwitch {\n /**\n * Whether the switch is active (on)\n */\n @Prop({ mutable: true, reflect: true }) active: boolean = false;\n\n /**\n * Whether the switch is disabled\n */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /**\n * The name of the switch for form submission\n */\n @Prop() name?: string;\n\n /**\n * The value of the switch for form submission\n */\n @Prop() value?: string;\n\n /**\n * Emitted when the switch state changes\n */\n @Event() afChange!: EventEmitter<{ active: boolean }>;\n\n private handleChange = () => {\n if (this.disabled) return;\n this.active = !this.active;\n this.afChange.emit({ active: this.active });\n };\n\n render() {\n const switchClasses = {\n 'switch': true,\n 'active': this.active,\n 'disabled': this.disabled\n };\n\n const trackClasses = {\n 'track': true,\n 'active': this.active,\n 'disabled': this.disabled\n };\n\n const knobClasses = {\n 'knob': true,\n 'active': this.active,\n 'disabled': this.disabled\n };\n\n return (\n <Host>\n <label class={switchClasses}>\n <input\n type=\"checkbox\"\n role=\"switch\"\n class=\"input\"\n checked={this.active}\n disabled={this.disabled}\n name={this.name}\n value={this.value}\n onChange={this.handleChange}\n />\n <span class={trackClasses}>\n <span class={knobClasses}></span>\n </span>\n <span class=\"label\">\n <slot></slot>\n </span>\n </label>\n </Host>\n );\n }\n}\n\n"],"version":3}
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, h, c as Host } from './p-CiY0Twna.js';
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-Btpdr0Bi.js';
2
2
 
3
3
  const afTabBarCss = ":host{display:block;width:100%}.tab-bar{display:flex;flex-wrap:nowrap;align-items:stretch;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--af-scrollbar-thumb, #8a7049) var(--af-scrollbar-track, #d1ddda)}.tab-bar::-webkit-scrollbar{height:4px}.tab-bar::-webkit-scrollbar-track{background:var(--af-scrollbar-track, #d1ddda);border-radius:2px}.tab-bar::-webkit-scrollbar-thumb{background:var(--af-scrollbar-thumb, #8a7049);border-radius:2px}.tab-bar::-webkit-scrollbar-thumb:hover{background:var(--af-scrollbar-thumb-hover, #8d785a)}.tab-bar.shape-square{gap:0;border-bottom:1px solid var(--af-background-border-subtle, #e8eeed)}.tab-bar.shape-pill{gap:0;padding:var(--space-2, 8px);background-color:var(--af-background-level-1, #e8eeed);border-radius:var(--radius-pill, 999px)}.tab-bar.breakpoint-mobile{}.tab-bar.breakpoint-mobile.shape-square{}.tab-bar.breakpoint-mobile.shape-pill{padding:var(--space-1, 4px)}.tab-bar.breakpoint-desktop{}.tab-bar.breakpoint-desktop.shape-square{}.tab-bar.breakpoint-desktop.shape-pill{padding:var(--space-2, 8px)}";
4
4
 
@@ -80,7 +80,7 @@ const AfTabBar = /*@__PURE__*/ proxyCustomElement(class AfTabBar extends H {
80
80
  [`shape-${this.shape}`]: true,
81
81
  [`breakpoint-${this.breakpoint}`]: true,
82
82
  };
83
- return (h(Host, { key: 'b1fa40c2156ac7271650aafd27d369c3a8224f44', role: "tablist" }, h("div", { key: 'e92eaef79f5df92cca1b2170218df2668afc031d', class: containerClasses }, h("slot", { key: '307aea867005fe40899b54d9fe1e31ecca0528e8' }))));
83
+ return (h(Host, { key: '41e03f4561dc7f11c19b533e659b07053f08a5e3', role: "tablist" }, h("div", { key: '191491f64e3d77fafe58e241f777a6a9e3b79e04', class: containerClasses }, h("slot", { key: '181e1169bd9215cb99d8bd0dabeaa49aac5fc24a' }))));
84
84
  }
85
85
  get el() { return this; }
86
86
  static get style() { return afTabBarCss; }
@@ -103,6 +103,6 @@ function defineCustomElement() {
103
103
  }
104
104
 
105
105
  export { AfTabBar as A, defineCustomElement as d };
106
- //# sourceMappingURL=p-DQF6qg3h.js.map
106
+ //# sourceMappingURL=p-BgQvXXuB.js.map
107
107
 
108
- //# sourceMappingURL=p-DQF6qg3h.js.map
108
+ //# sourceMappingURL=p-BgQvXXuB.js.map
@@ -1 +1 @@
1
- {"file":"p-DQF6qg3h.js","mappings":";;AAAA,MAAM,WAAW,GAAG,qkCAAqkC;;MCyB5kC,QAAQ,iBAAAA,kBAAA,CAAA,MAAA,QAAA,SAAAC,CAAA,CAAA;AALrB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;AAQE;;;;AAIG;AACsB,QAAA,IAAK,CAAA,KAAA,GAAgB,QAAQ;AAEtD;;;;AAIG;AACsB,QAAA,IAAU,CAAA,UAAA,GAAqB,SAAS;AA6ElE;IA3EC,gBAAgB,GAAA;QACd,IAAI,CAAC,cAAc,EAAE;;IAGvB,kBAAkB,GAAA;QAChB,IAAI,CAAC,cAAc,EAAE;;AAGvB;;AAEG;IACK,cAAc,GAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACnB,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;YACrC,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC;AACtD,SAAC,CAAC;;AAGJ;;AAEG;AAEH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAkB;QAC5F,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;QAE3G,IAAI,YAAY,KAAK,EAAE;YAAE;QAEzB,IAAI,QAAQ,GAAG,YAAY;AAE3B,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,QAAQ,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBAChE;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;gBAChE;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,QAAQ,GAAG,CAAC;gBACZ;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBAC1B;AACF,YAAA;gBACE;;;AAIJ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;QAC5D,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,KAAK,EAAE;;;IAIlB,MAAM,GAAA;AACJ,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,CAAC,SAAS,IAAI,CAAC,KAAK,CAAE,CAAA,GAAG,IAAI;AAC7B,YAAA,CAAC,cAAc,IAAI,CAAC,UAAU,CAAE,CAAA,GAAG,IAAI;SACxC;AAED,QAAA,QACE,CAAC,CAAA,IAAI,EAAC,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,SAAS,EAAA,EAClB,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,gBAAgB,EAAA,EAC1B,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT,CACD;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-tab-bar/af-tab-bar.css?tag=af-tab-bar&encapsulation=shadow","src/components/af-tab-bar/af-tab-bar.tsx"],"sourcesContent":["/* TabBar component styles */\n:host {\n display: block;\n width: 100%;\n}\n\n.tab-bar {\n display: flex;\n flex-wrap: nowrap;\n align-items: stretch;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n scrollbar-color: var(--af-scrollbar-thumb, #8a7049) var(--af-scrollbar-track, #d1ddda);\n}\n\n/* Custom scrollbar for WebKit browsers */\n.tab-bar::-webkit-scrollbar {\n height: 4px;\n}\n\n.tab-bar::-webkit-scrollbar-track {\n background: var(--af-scrollbar-track, #d1ddda);\n border-radius: 2px;\n}\n\n.tab-bar::-webkit-scrollbar-thumb {\n background: var(--af-scrollbar-thumb, #8a7049);\n border-radius: 2px;\n}\n\n.tab-bar::-webkit-scrollbar-thumb:hover {\n background: var(--af-scrollbar-thumb-hover, #8d785a);\n}\n\n/* ==========================================================================\n SHAPE: SQUARE\n ========================================================================== */\n\n.tab-bar.shape-square {\n gap: 0;\n border-bottom: 1px solid var(--af-background-border-subtle, #e8eeed);\n}\n\n/* ==========================================================================\n SHAPE: PILL\n ========================================================================== */\n\n.tab-bar.shape-pill {\n gap: 0;\n padding: var(--space-2, 8px);\n background-color: var(--af-background-level-1, #e8eeed);\n border-radius: var(--radius-pill, 999px);\n}\n\n/* ==========================================================================\n BREAKPOINT: MOBILE\n ========================================================================== */\n\n.tab-bar.breakpoint-mobile {\n /* Mobile uses compact spacing */\n}\n\n.tab-bar.breakpoint-mobile.shape-square {\n /* Tabs handle their own padding in mobile */\n}\n\n.tab-bar.breakpoint-mobile.shape-pill {\n padding: var(--space-1, 4px);\n}\n\n/* ==========================================================================\n BREAKPOINT: DESKTOP\n ========================================================================== */\n\n.tab-bar.breakpoint-desktop {\n /* Desktop uses more generous spacing */\n}\n\n.tab-bar.breakpoint-desktop.shape-square {\n /* Tabs handle their own padding in desktop mode */\n}\n\n.tab-bar.breakpoint-desktop.shape-pill {\n padding: var(--space-2, 8px);\n}\n\n","import { Component, h, Prop, Host, Element, Listen } from '@stencil/core';\n\nexport type TabBarShape = 'square' | 'pill';\nexport type TabBarBreakpoint = 'mobile' | 'desktop';\n\n/**\n * TabBar component that contains and manages a group of tabs.\n * Provides horizontal layout, keyboard navigation, and consistent styling.\n * \n * @slot - Tab elements (af-tab)\n * \n * @example\n * ```html\n * <af-tab-bar shape=\"square\" breakpoint=\"desktop\">\n * <af-tab label=\"Overview\" active value=\"overview\"></af-tab>\n * <af-tab label=\"Details\" value=\"details\"></af-tab>\n * <af-tab label=\"Settings\" value=\"settings\"></af-tab>\n * </af-tab-bar>\n * ```\n */\n@Component({\n tag: 'af-tab-bar',\n styleUrl: 'af-tab-bar.css',\n shadow: true\n})\nexport class AfTabBar {\n @Element() el!: HTMLElement;\n\n /**\n * Visual shape variant for all tabs\n * - `square` - Rectangular tabs with bottom border indicator\n * - `pill` - Rounded pill tabs with background for active state\n */\n @Prop({ reflect: true }) shape: TabBarShape = 'square';\n\n /**\n * Responsive breakpoint mode\n * - `mobile` - Compact layout with smaller padding\n * - `desktop` - Larger layout with more generous spacing\n */\n @Prop({ reflect: true }) breakpoint: TabBarBreakpoint = 'desktop';\n\n componentDidLoad() {\n this.syncChildProps();\n }\n\n componentDidUpdate() {\n this.syncChildProps();\n }\n\n /**\n * Sync shape and breakpoint props to child af-tab elements\n */\n private syncChildProps() {\n const tabs = this.el.querySelectorAll('af-tab');\n tabs.forEach((tab) => {\n tab.setAttribute('shape', this.shape);\n tab.setAttribute('data-breakpoint', this.breakpoint);\n });\n }\n\n /**\n * Handle keyboard navigation between tabs\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n const tabs = Array.from(this.el.querySelectorAll('af-tab:not([disabled])')) as HTMLElement[];\n const currentIndex = tabs.findIndex(tab => tab === document.activeElement || tab.shadowRoot?.activeElement);\n \n if (currentIndex === -1) return;\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabs.length - 1;\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = currentIndex < tabs.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = tabs.length - 1;\n break;\n default:\n return;\n }\n\n // Focus the button inside the shadow DOM of the tab\n const targetTab = tabs[newIndex];\n const button = targetTab.shadowRoot?.querySelector('button');\n if (button) {\n button.focus();\n }\n }\n\n render() {\n const containerClasses = {\n 'tab-bar': true,\n [`shape-${this.shape}`]: true,\n [`breakpoint-${this.breakpoint}`]: true,\n };\n\n return (\n <Host role=\"tablist\">\n <div class={containerClasses}>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n\n"],"version":3}
1
+ {"file":"p-BgQvXXuB.js","mappings":";;AAAA,MAAM,WAAW,GAAG,qkCAAqkC;;MCyB5kC,QAAQ,iBAAAA,kBAAA,CAAA,MAAA,QAAA,SAAAC,CAAA,CAAA;AALrB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;;AAQE;;;;AAIG;AACsB,QAAA,IAAK,CAAA,KAAA,GAAgB,QAAQ;AAEtD;;;;AAIG;AACsB,QAAA,IAAU,CAAA,UAAA,GAAqB,SAAS;AA6ElE;IA3EC,gBAAgB,GAAA;QACd,IAAI,CAAC,cAAc,EAAE;;IAGvB,kBAAkB,GAAA;QAChB,IAAI,CAAC,cAAc,EAAE;;AAGvB;;AAEG;IACK,cAAc,GAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACnB,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;YACrC,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC;AACtD,SAAC,CAAC;;AAGJ;;AAEG;AAEH,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAkB;QAC5F,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,aAAa,IAAI,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;QAE3G,IAAI,YAAY,KAAK,EAAE;YAAE;QAEzB,IAAI,QAAQ,GAAG,YAAY;AAE3B,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,QAAQ,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBAChE;AACF,YAAA,KAAK,YAAY;gBACf,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;gBAChE;AACF,YAAA,KAAK,MAAM;gBACT,KAAK,CAAC,cAAc,EAAE;gBACtB,QAAQ,GAAG,CAAC;gBACZ;AACF,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE;AACtB,gBAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;gBAC1B;AACF,YAAA;gBACE;;;AAIJ,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC;QAC5D,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,KAAK,EAAE;;;IAIlB,MAAM,GAAA;AACJ,QAAA,MAAM,gBAAgB,GAAG;AACvB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,CAAC,SAAS,IAAI,CAAC,KAAK,CAAE,CAAA,GAAG,IAAI;AAC7B,YAAA,CAAC,cAAc,IAAI,CAAC,UAAU,CAAE,CAAA,GAAG,IAAI;SACxC;AAED,QAAA,QACE,CAAC,CAAA,IAAI,EAAC,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,SAAS,EAAA,EAClB,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAE,gBAAgB,EAAA,EAC1B,CAAa,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,CAAA,CACT,CACD;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-tab-bar/af-tab-bar.css?tag=af-tab-bar&encapsulation=shadow","src/components/af-tab-bar/af-tab-bar.tsx"],"sourcesContent":["/* TabBar component styles */\n:host {\n display: block;\n width: 100%;\n}\n\n.tab-bar {\n display: flex;\n flex-wrap: nowrap;\n align-items: stretch;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n scrollbar-color: var(--af-scrollbar-thumb, #8a7049) var(--af-scrollbar-track, #d1ddda);\n}\n\n/* Custom scrollbar for WebKit browsers */\n.tab-bar::-webkit-scrollbar {\n height: 4px;\n}\n\n.tab-bar::-webkit-scrollbar-track {\n background: var(--af-scrollbar-track, #d1ddda);\n border-radius: 2px;\n}\n\n.tab-bar::-webkit-scrollbar-thumb {\n background: var(--af-scrollbar-thumb, #8a7049);\n border-radius: 2px;\n}\n\n.tab-bar::-webkit-scrollbar-thumb:hover {\n background: var(--af-scrollbar-thumb-hover, #8d785a);\n}\n\n/* ==========================================================================\n SHAPE: SQUARE\n ========================================================================== */\n\n.tab-bar.shape-square {\n gap: 0;\n border-bottom: 1px solid var(--af-background-border-subtle, #e8eeed);\n}\n\n/* ==========================================================================\n SHAPE: PILL\n ========================================================================== */\n\n.tab-bar.shape-pill {\n gap: 0;\n padding: var(--space-2, 8px);\n background-color: var(--af-background-level-1, #e8eeed);\n border-radius: var(--radius-pill, 999px);\n}\n\n/* ==========================================================================\n BREAKPOINT: MOBILE\n ========================================================================== */\n\n.tab-bar.breakpoint-mobile {\n /* Mobile uses compact spacing */\n}\n\n.tab-bar.breakpoint-mobile.shape-square {\n /* Tabs handle their own padding in mobile */\n}\n\n.tab-bar.breakpoint-mobile.shape-pill {\n padding: var(--space-1, 4px);\n}\n\n/* ==========================================================================\n BREAKPOINT: DESKTOP\n ========================================================================== */\n\n.tab-bar.breakpoint-desktop {\n /* Desktop uses more generous spacing */\n}\n\n.tab-bar.breakpoint-desktop.shape-square {\n /* Tabs handle their own padding in desktop mode */\n}\n\n.tab-bar.breakpoint-desktop.shape-pill {\n padding: var(--space-2, 8px);\n}\n\n","import { Component, h, Prop, Host, Element, Listen } from '@stencil/core';\n\nexport type TabBarShape = 'square' | 'pill';\nexport type TabBarBreakpoint = 'mobile' | 'desktop';\n\n/**\n * TabBar component that contains and manages a group of tabs.\n * Provides horizontal layout, keyboard navigation, and consistent styling.\n * \n * @slot - Tab elements (af-tab)\n * \n * @example\n * ```html\n * <af-tab-bar shape=\"square\" breakpoint=\"desktop\">\n * <af-tab label=\"Overview\" active value=\"overview\"></af-tab>\n * <af-tab label=\"Details\" value=\"details\"></af-tab>\n * <af-tab label=\"Settings\" value=\"settings\"></af-tab>\n * </af-tab-bar>\n * ```\n */\n@Component({\n tag: 'af-tab-bar',\n styleUrl: 'af-tab-bar.css',\n shadow: true\n})\nexport class AfTabBar {\n @Element() el!: HTMLElement;\n\n /**\n * Visual shape variant for all tabs\n * - `square` - Rectangular tabs with bottom border indicator\n * - `pill` - Rounded pill tabs with background for active state\n */\n @Prop({ reflect: true }) shape: TabBarShape = 'square';\n\n /**\n * Responsive breakpoint mode\n * - `mobile` - Compact layout with smaller padding\n * - `desktop` - Larger layout with more generous spacing\n */\n @Prop({ reflect: true }) breakpoint: TabBarBreakpoint = 'desktop';\n\n componentDidLoad() {\n this.syncChildProps();\n }\n\n componentDidUpdate() {\n this.syncChildProps();\n }\n\n /**\n * Sync shape and breakpoint props to child af-tab elements\n */\n private syncChildProps() {\n const tabs = this.el.querySelectorAll('af-tab');\n tabs.forEach((tab) => {\n tab.setAttribute('shape', this.shape);\n tab.setAttribute('data-breakpoint', this.breakpoint);\n });\n }\n\n /**\n * Handle keyboard navigation between tabs\n */\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n const tabs = Array.from(this.el.querySelectorAll('af-tab:not([disabled])')) as HTMLElement[];\n const currentIndex = tabs.findIndex(tab => tab === document.activeElement || tab.shadowRoot?.activeElement);\n \n if (currentIndex === -1) return;\n\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : tabs.length - 1;\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = currentIndex < tabs.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = tabs.length - 1;\n break;\n default:\n return;\n }\n\n // Focus the button inside the shadow DOM of the tab\n const targetTab = tabs[newIndex];\n const button = targetTab.shadowRoot?.querySelector('button');\n if (button) {\n button.focus();\n }\n }\n\n render() {\n const containerClasses = {\n 'tab-bar': true,\n [`shape-${this.shape}`]: true,\n [`breakpoint-${this.breakpoint}`]: true,\n };\n\n return (\n <Host role=\"tablist\">\n <div class={containerClasses}>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n\n"],"version":3}
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, h, c as Host } from './p-CiY0Twna.js';
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-Btpdr0Bi.js';
2
2
 
3
3
  const afImageCss = ".sc-af-image-h{display:block;width:100%}.image-container.sc-af-image{position:relative;overflow:hidden}.image-container--rounded.sc-af-image{border-radius:var(--radius-md, 12px)}.image-container--rounded-left.sc-af-image{border-top-left-radius:var(--radius-md, 12px);border-bottom-left-radius:var(--radius-md, 12px)}.image-container--rounded-right.sc-af-image{border-top-right-radius:var(--radius-md, 12px);border-bottom-right-radius:var(--radius-md, 12px)}.image-container--square.sc-af-image{border-radius:0}.image.sc-af-image{display:block;width:100%;height:auto;object-fit:cover}.image-border.sc-af-image{position:absolute;inset:0;box-shadow:inset 0 0 0 1px var(--af-background-border-subtle, rgba(0, 0, 0, 0.08));pointer-events:none;border-radius:inherit}";
4
4
 
@@ -20,7 +20,7 @@ const AfImage = /*@__PURE__*/ proxyCustomElement(class AfImage extends H {
20
20
  this.shape = 'rounded';
21
21
  }
22
22
  render() {
23
- return (h(Host, { key: 'a8954272f3c0defc0b9e33d5f3221c6e1083d927' }, h("div", { key: '2fd3bad5b46360cac57d069031ec2f69103f6542', class: `image-container image-container--${this.shape}` }, h("img", { key: '72a11cde6b65481320d8b6a1d65e85862d4a449e', src: this.src, alt: this.alt, class: "image" }), h("div", { key: '7727e1ac4179e96f8c8928de678136337bd82f44', class: "image-border", "aria-hidden": "true" }))));
23
+ return (h(Host, { key: '4f48634e84e032c9a93cf48444709146ffe591b7' }, h("div", { key: 'c26f889afa7c3d35e5f65dcc23d63a41a9c0987e', class: `image-container image-container--${this.shape}` }, h("img", { key: 'c1474197475df3bff2263b509f3abf59a53aa932', src: this.src, alt: this.alt, class: "image" }), h("div", { key: 'bb6e0cae628bf65e423d5986df8ed119af74e699', class: "image-border", "aria-hidden": "true" }))));
24
24
  }
25
25
  static get style() { return afImageCss; }
26
26
  }, [258, "af-image", {
@@ -43,6 +43,6 @@ function defineCustomElement() {
43
43
  }
44
44
 
45
45
  export { AfImage as A, defineCustomElement as d };
46
- //# sourceMappingURL=p-DQFOagz0.js.map
46
+ //# sourceMappingURL=p-BiSEOBg5.js.map
47
47
 
48
- //# sourceMappingURL=p-DQFOagz0.js.map
48
+ //# sourceMappingURL=p-BiSEOBg5.js.map
@@ -1 +1 @@
1
- {"file":"p-DQFOagz0.js","mappings":";;AAAA,MAAM,UAAU,GAAG,0vBAA0vB;;MCYhwB,OAAO,iBAAAA,kBAAA,CAAA,MAAA,OAAA,SAAAC,CAAA,CAAA;AANpB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;AAiBE;;;;;;;;AAQG;AACK,QAAA,IAAK,CAAA,KAAA,GAA4D,SAAS;AAYnF;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,iCAAA,EAAoC,IAAI,CAAC,KAAK,CAAE,CAAA,EAAA,EAC1D,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAC,OAAO,EAAG,CAAA,EACnD,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,cAAc,EAAA,aAAA,EAAa,MAAM,EAAO,CAAA,CAC/C,CACD;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-image/af-image.css?tag=af-image&encapsulation=scoped","src/components/af-image/af-image.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n.image-container {\n position: relative;\n overflow: hidden;\n}\n\n/* Shape variants — matches Webflow's rounded-edge image treatments */\n.image-container--rounded {\n border-radius: var(--radius-md, 12px);\n}\n\n.image-container--rounded-left {\n border-top-left-radius: var(--radius-md, 12px);\n border-bottom-left-radius: var(--radius-md, 12px);\n}\n\n.image-container--rounded-right {\n border-top-right-radius: var(--radius-md, 12px);\n border-bottom-right-radius: var(--radius-md, 12px);\n}\n\n.image-container--square {\n border-radius: 0;\n}\n\n.image {\n display: block;\n width: 100%;\n height: auto;\n object-fit: cover;\n}\n\n/* Inset border overlay — inherits the host's border radius via parent clip */\n.image-border {\n position: absolute;\n inset: 0;\n box-shadow: inset 0 0 0 1px var(--af-background-border-subtle, rgba(0, 0, 0, 0.08));\n pointer-events: none;\n border-radius: inherit;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n/**\n * A styled image container with rounded corners and a subtle inset border.\n * Provides consistent image styling across the design system.\n */\n@Component({\n tag: 'af-image',\n styleUrl: 'af-image.css',\n shadow: false,\n scoped: true\n})\nexport class AfImage {\n /**\n * The image source URL\n */\n @Prop() src!: string;\n\n /**\n * Alternative text for the image (required for accessibility)\n */\n @Prop() alt!: string;\n\n /**\n * Shape / corner rounding variant. Matches Webflow's `.image-fill.rounded-*`\n * patterns where only one edge is rounded so the image bleeds into a\n * neighbouring section.\n * - `rounded` (default) — symmetric rounded corners on all four sides.\n * - `rounded-left` — rounded only on the left edge (top-left + bottom-left).\n * - `rounded-right` — rounded only on the right edge.\n * - `square` — no corner rounding.\n */\n @Prop() shape: 'rounded' | 'rounded-left' | 'rounded-right' | 'square' = 'rounded';\n\n render() {\n return (\n <Host>\n <div class={`image-container image-container--${this.shape}`}>\n <img src={this.src} alt={this.alt} class=\"image\" />\n <div class=\"image-border\" aria-hidden=\"true\"></div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"p-BiSEOBg5.js","mappings":";;AAAA,MAAM,UAAU,GAAG,0vBAA0vB;;MCYhwB,OAAO,iBAAAA,kBAAA,CAAA,MAAA,OAAA,SAAAC,CAAA,CAAA;AANpB,IAAA,WAAA,CAAA,YAAA,EAAA;;;;;AAiBE;;;;;;;;AAQG;AACK,QAAA,IAAK,CAAA,KAAA,GAA4D,SAAS;AAYnF;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,iCAAA,EAAoC,IAAI,CAAC,KAAK,CAAE,CAAA,EAAA,EAC1D,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAC,OAAO,EAAG,CAAA,EACnD,CAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,cAAc,EAAA,aAAA,EAAa,MAAM,EAAO,CAAA,CAC/C,CACD;;;;;;;;;;;;;;;;;;;;;;;;","names":["__stencil_proxyCustomElement","HTMLElement"],"sources":["src/components/af-image/af-image.css?tag=af-image&encapsulation=scoped","src/components/af-image/af-image.tsx"],"sourcesContent":[":host {\n display: block;\n width: 100%;\n}\n\n.image-container {\n position: relative;\n overflow: hidden;\n}\n\n/* Shape variants — matches Webflow's rounded-edge image treatments */\n.image-container--rounded {\n border-radius: var(--radius-md, 12px);\n}\n\n.image-container--rounded-left {\n border-top-left-radius: var(--radius-md, 12px);\n border-bottom-left-radius: var(--radius-md, 12px);\n}\n\n.image-container--rounded-right {\n border-top-right-radius: var(--radius-md, 12px);\n border-bottom-right-radius: var(--radius-md, 12px);\n}\n\n.image-container--square {\n border-radius: 0;\n}\n\n.image {\n display: block;\n width: 100%;\n height: auto;\n object-fit: cover;\n}\n\n/* Inset border overlay — inherits the host's border radius via parent clip */\n.image-border {\n position: absolute;\n inset: 0;\n box-shadow: inset 0 0 0 1px var(--af-background-border-subtle, rgba(0, 0, 0, 0.08));\n pointer-events: none;\n border-radius: inherit;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n/**\n * A styled image container with rounded corners and a subtle inset border.\n * Provides consistent image styling across the design system.\n */\n@Component({\n tag: 'af-image',\n styleUrl: 'af-image.css',\n shadow: false,\n scoped: true\n})\nexport class AfImage {\n /**\n * The image source URL\n */\n @Prop() src!: string;\n\n /**\n * Alternative text for the image (required for accessibility)\n */\n @Prop() alt!: string;\n\n /**\n * Shape / corner rounding variant. Matches Webflow's `.image-fill.rounded-*`\n * patterns where only one edge is rounded so the image bleeds into a\n * neighbouring section.\n * - `rounded` (default) — symmetric rounded corners on all four sides.\n * - `rounded-left` — rounded only on the left edge (top-left + bottom-left).\n * - `rounded-right` — rounded only on the right edge.\n * - `square` — no corner rounding.\n */\n @Prop() shape: 'rounded' | 'rounded-left' | 'rounded-right' | 'square' = 'rounded';\n\n render() {\n return (\n <Host>\n <div class={`image-container image-container--${this.shape}`}>\n <img src={this.src} alt={this.alt} class=\"image\" />\n <div class=\"image-border\" aria-hidden=\"true\"></div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -1,4 +1,4 @@
1
- import { p as proxyCustomElement, H, h, c as Host } from './p-CiY0Twna.js';
1
+ import { p as proxyCustomElement, H, h, c as Host } from './p-Btpdr0Bi.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-QpoTJlVn.js.map
48
+ //# sourceMappingURL=p-BipyebXl.js.map
49
49
 
50
- //# sourceMappingURL=p-QpoTJlVn.js.map
50
+ //# sourceMappingURL=p-BipyebXl.js.map
@@ -1 +1 @@
1
- {"file":"p-QpoTJlVn.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-BipyebXl.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}