@alfadocs/ui-kit-debug 0.25.1 → 0.30.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 (361) hide show
  1. package/dist/_chunks/{agenda-card-BmpaUG1h.js → agenda-card-CznB7K8e.js} +2 -2
  2. package/dist/_chunks/{agenda-card-BmpaUG1h.js.map → agenda-card-CznB7K8e.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-DiInnVqk.js → agenda-tray-C_bha7oK.js} +4 -4
  4. package/dist/_chunks/{agenda-tray-DiInnVqk.js.map → agenda-tray-C_bha7oK.js.map} +1 -1
  5. package/dist/_chunks/{ai-prompt-input-B5MdixzR.js → ai-prompt-input-Bka3jX3i.js} +2 -2
  6. package/dist/_chunks/{ai-prompt-input-B5MdixzR.js.map → ai-prompt-input-Bka3jX3i.js.map} +1 -1
  7. package/dist/_chunks/{alia-sidebar-CUi2UCbY.js → alia-sidebar-CnvXq95r.js} +92 -109
  8. package/dist/_chunks/alia-sidebar-CnvXq95r.js.map +1 -0
  9. package/dist/_chunks/{audio-recorder-D4xM3H5i.js → audio-recorder-OB6IV9B1.js} +2 -2
  10. package/dist/_chunks/{audio-recorder-D4xM3H5i.js.map → audio-recorder-OB6IV9B1.js.map} +1 -1
  11. package/dist/_chunks/{autocomplete-C7xq06bP.js → autocomplete-CUh0f7Dj.js} +2 -2
  12. package/dist/_chunks/{autocomplete-C7xq06bP.js.map → autocomplete-CUh0f7Dj.js.map} +1 -1
  13. package/dist/_chunks/{avatar-BpFohgWG.js → avatar-D_H4emLo.js} +7 -7
  14. package/dist/_chunks/avatar-D_H4emLo.js.map +1 -0
  15. package/dist/_chunks/{benefit-card-DXmrAyfn.js → benefit-card-CjYM8vNr.js} +29 -29
  16. package/dist/_chunks/benefit-card-CjYM8vNr.js.map +1 -0
  17. package/dist/_chunks/booking-BYuc_8HV.js +2250 -0
  18. package/dist/_chunks/booking-BYuc_8HV.js.map +1 -0
  19. package/dist/_chunks/{calendar-zy0tUUVG.js → calendar-WWNx448i.js} +114 -142
  20. package/dist/_chunks/calendar-WWNx448i.js.map +1 -0
  21. package/dist/_chunks/{card-C353dU-H.js → card-DKTMLVrw.js} +11 -11
  22. package/dist/_chunks/card-DKTMLVrw.js.map +1 -0
  23. package/dist/_chunks/{carousel.agent-DnPiqijR.js → carousel.agent-C9swH-Uf.js} +2 -2
  24. package/dist/_chunks/{carousel.agent-DnPiqijR.js.map → carousel.agent-C9swH-Uf.js.map} +1 -1
  25. package/dist/_chunks/{chat-input-B3XmFGDw.js → chat-input-BfDcz1Yi.js} +2 -2
  26. package/dist/_chunks/{chat-input-B3XmFGDw.js.map → chat-input-BfDcz1Yi.js.map} +1 -1
  27. package/dist/_chunks/{chat-message-W3k8rLOA.js → chat-message-fg221-yx.js} +2 -2
  28. package/dist/_chunks/{chat-message-W3k8rLOA.js.map → chat-message-fg221-yx.js.map} +1 -1
  29. package/dist/_chunks/checkbox-mwbrPZDY.js.map +1 -1
  30. package/dist/_chunks/{command-palette-DkL-aW4O.js → command-palette-11BieSNq.js} +2 -2
  31. package/dist/_chunks/{command-palette-DkL-aW4O.js.map → command-palette-11BieSNq.js.map} +1 -1
  32. package/dist/_chunks/{contact-card-CjG7c-1q.js → contact-card-DYbp--s-.js} +3 -3
  33. package/dist/_chunks/{contact-card-CjG7c-1q.js.map → contact-card-DYbp--s-.js.map} +1 -1
  34. package/dist/_chunks/{date-picker-BIoSLRly.js → date-picker-D0Ry1dMz.js} +26 -27
  35. package/dist/_chunks/{date-picker-BIoSLRly.js.map → date-picker-D0Ry1dMz.js.map} +1 -1
  36. package/dist/_chunks/{date-range-picker-9gANFNG9.js → date-range-picker-DYgHzMOo.js} +19 -20
  37. package/dist/_chunks/{date-range-picker-9gANFNG9.js.map → date-range-picker-DYgHzMOo.js.map} +1 -1
  38. package/dist/_chunks/{date-time-picker-DG7BiGdb.js → date-time-picker-CGmGtcyc.js} +10 -11
  39. package/dist/_chunks/{date-time-picker-DG7BiGdb.js.map → date-time-picker-CGmGtcyc.js.map} +1 -1
  40. package/dist/_chunks/{description-list-Bsga4IW8.js → description-list-yl3y3QKg.js} +34 -24
  41. package/dist/_chunks/description-list-yl3y3QKg.js.map +1 -0
  42. package/dist/_chunks/{dialog-DUomPCRS.js → dialog-BBXqpZIt.js} +2 -2
  43. package/dist/_chunks/{dialog-DUomPCRS.js.map → dialog-BBXqpZIt.js.map} +1 -1
  44. package/dist/_chunks/{editable-currency-cell-renderer-DJB5MxAI.js → editable-currency-cell-renderer-DSReCae7.js} +7 -7
  45. package/dist/_chunks/{editable-currency-cell-renderer-DJB5MxAI.js.map → editable-currency-cell-renderer-DSReCae7.js.map} +1 -1
  46. package/dist/_chunks/{empty-state-3CLJIXSj.js → empty-state-BLy7tigq.js} +13 -33
  47. package/dist/_chunks/empty-state-BLy7tigq.js.map +1 -0
  48. package/dist/_chunks/eye-LHlSU38h.js +21 -0
  49. package/dist/_chunks/eye-LHlSU38h.js.map +1 -0
  50. package/dist/_chunks/{freemium-paywall-CM6V1zNf.js → freemium-paywall-B9c8Ylww.js} +11 -11
  51. package/dist/_chunks/{freemium-paywall-CM6V1zNf.js.map → freemium-paywall-B9c8Ylww.js.map} +1 -1
  52. package/dist/_chunks/{header-DqmKROIY.js → header-CkMb1TZS.js} +24 -24
  53. package/dist/_chunks/header-CkMb1TZS.js.map +1 -0
  54. package/dist/_chunks/heart-pulse-CvuyFKHB.js +21 -0
  55. package/dist/_chunks/heart-pulse-CvuyFKHB.js.map +1 -0
  56. package/dist/_chunks/icon-button-BRHSSFmZ.js +70 -0
  57. package/dist/_chunks/icon-button-BRHSSFmZ.js.map +1 -0
  58. package/dist/_chunks/{isSameDay-ecuM8PBB.js → isSameDay-DHG8Xade.js} +4 -4
  59. package/dist/_chunks/{isSameDay-ecuM8PBB.js.map → isSameDay-DHG8Xade.js.map} +1 -1
  60. package/dist/_chunks/{key-value-pair-DBuOCtIc.js → key-value-pair-CqeKiP__.js} +2 -2
  61. package/dist/_chunks/{key-value-pair-DBuOCtIc.js.map → key-value-pair-CqeKiP__.js.map} +1 -1
  62. package/dist/_chunks/{link-DmM5IevO.js → link-DrD_cRUg.js} +50 -45
  63. package/dist/_chunks/link-DrD_cRUg.js.map +1 -0
  64. package/dist/_chunks/{locale-picker-BxEUUPW7.js → locale-picker-BHxbTNmR.js} +297 -208
  65. package/dist/_chunks/locale-picker-BHxbTNmR.js.map +1 -0
  66. package/dist/_chunks/{map-view-CcwycFQX.js → map-view-DyB8tr6c.js} +9 -9
  67. package/dist/_chunks/{map-view-CcwycFQX.js.map → map-view-DyB8tr6c.js.map} +1 -1
  68. package/dist/_chunks/{matrix-rain-CRPMXcVx.js → matrix-rain-sDOUUwZp.js} +35 -35
  69. package/dist/_chunks/matrix-rain-sDOUUwZp.js.map +1 -0
  70. package/dist/_chunks/{message-card-i61k1TGc.js → message-card-DjRtA8GG.js} +3 -3
  71. package/dist/_chunks/{message-card-i61k1TGc.js.map → message-card-DjRtA8GG.js.map} +1 -1
  72. package/dist/_chunks/{message-tray-DrV7G-wR.js → message-tray-DfsAMncP.js} +3 -3
  73. package/dist/_chunks/{message-tray-DrV7G-wR.js.map → message-tray-DfsAMncP.js.map} +1 -1
  74. package/dist/_chunks/monitor-D-SFdbrU.js +16 -0
  75. package/dist/_chunks/monitor-D-SFdbrU.js.map +1 -0
  76. package/dist/_chunks/{notification-card-ejOw5g6g.js → notification-card-B_847w5g.js} +3 -3
  77. package/dist/_chunks/notification-card-B_847w5g.js.map +1 -0
  78. package/dist/_chunks/{notification-tray-D_69dXFY.js → notification-tray-6f7smmT1.js} +22 -19
  79. package/dist/_chunks/notification-tray-6f7smmT1.js.map +1 -0
  80. package/dist/_chunks/parseISO-Dk4xa7q6.js +120 -0
  81. package/dist/_chunks/parseISO-Dk4xa7q6.js.map +1 -0
  82. package/dist/_chunks/patient-search-BhlxYAI3.js +1102 -0
  83. package/dist/_chunks/patient-search-BhlxYAI3.js.map +1 -0
  84. package/dist/_chunks/patient-shell-CAXYzbRw.js +173 -0
  85. package/dist/_chunks/{patient-shell-B164drIa.js.map → patient-shell-CAXYzbRw.js.map} +1 -1
  86. package/dist/_chunks/{payment-form-F7uh0Rqr.js → payment-form-Ds3rxvad.js} +2 -2
  87. package/dist/_chunks/{payment-form-F7uh0Rqr.js.map → payment-form-Ds3rxvad.js.map} +1 -1
  88. package/dist/_chunks/{pdf-viewer-CuYaVR1I.js → pdf-viewer-CIuaocnq.js} +2 -2
  89. package/dist/_chunks/{pdf-viewer-CuYaVR1I.js.map → pdf-viewer-CIuaocnq.js.map} +1 -1
  90. package/dist/_chunks/{popover--derJ_wq.js → popover-D0slaBB9.js} +17 -13
  91. package/dist/_chunks/popover-D0slaBB9.js.map +1 -0
  92. package/dist/_chunks/{privacy-lock-BKsI6ReN.js → privacy-lock-BI4vi9Ud.js} +2 -2
  93. package/dist/_chunks/{privacy-lock-BKsI6ReN.js.map → privacy-lock-BI4vi9Ud.js.map} +1 -1
  94. package/dist/_chunks/public-footer.agent-CA29gxHJ.js +516 -0
  95. package/dist/_chunks/public-footer.agent-CA29gxHJ.js.map +1 -0
  96. package/dist/_chunks/{public-header.agent-BQ3r6Hgq.js → public-header.agent-5U3S9QiC.js} +49 -41
  97. package/dist/_chunks/public-header.agent-5U3S9QiC.js.map +1 -0
  98. package/dist/_chunks/react-day-picker-D3yzgvDB.js +3127 -0
  99. package/dist/_chunks/react-day-picker-D3yzgvDB.js.map +1 -0
  100. package/dist/_chunks/{recaptcha-widget-Kp1XntuE.js → recaptcha-widget-BtBNb6tB.js} +2 -2
  101. package/dist/_chunks/{recaptcha-widget-Kp1XntuE.js.map → recaptcha-widget-BtBNb6tB.js.map} +1 -1
  102. package/dist/_chunks/reviews-panel-CFttsfuC.js +513 -0
  103. package/dist/_chunks/reviews-panel-CFttsfuC.js.map +1 -0
  104. package/dist/_chunks/{search-bar-DORSAzNt.js → search-bar-BRMW1-WG.js} +2 -2
  105. package/dist/_chunks/{search-bar-DORSAzNt.js.map → search-bar-BRMW1-WG.js.map} +1 -1
  106. package/dist/_chunks/{search-input-BtEJAJHa.js → search-input-CIA6pPfn.js} +2 -2
  107. package/dist/_chunks/{search-input-BtEJAJHa.js.map → search-input-CIA6pPfn.js.map} +1 -1
  108. package/dist/_chunks/{sheet-BT0izeoI.js → sheet-D8M8hf8B.js} +2 -2
  109. package/dist/_chunks/{sheet-BT0izeoI.js.map → sheet-D8M8hf8B.js.map} +1 -1
  110. package/dist/_chunks/{sign-in-with-alfadocs-button-4zZC-I6y.js → sign-in-with-alfadocs-button-BI0fVonM.js} +2 -2
  111. package/dist/_chunks/{sign-in-with-alfadocs-button-4zZC-I6y.js.map → sign-in-with-alfadocs-button-BI0fVonM.js.map} +1 -1
  112. package/dist/_chunks/slot-grid-B2zprPcv.js +387 -0
  113. package/dist/_chunks/slot-grid-B2zprPcv.js.map +1 -0
  114. package/dist/_chunks/sparkles-CuYXqQLg.js +23 -0
  115. package/dist/_chunks/sparkles-CuYXqQLg.js.map +1 -0
  116. package/dist/_chunks/{spinner-DirtWZNG.js → spinner-CCByyvcb.js} +2 -2
  117. package/dist/_chunks/spinner-CCByyvcb.js.map +1 -0
  118. package/dist/_chunks/stepper-accordion-BfS6lUB9.js +257 -0
  119. package/dist/_chunks/stepper-accordion-BfS6lUB9.js.map +1 -0
  120. package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js +71 -0
  121. package/dist/_chunks/stepper-accordion.agent-C4quJ-MD.js.map +1 -0
  122. package/dist/_chunks/stethoscope-DT5qCW8Y.js +18 -0
  123. package/dist/_chunks/stethoscope-DT5qCW8Y.js.map +1 -0
  124. package/dist/_chunks/{sun-Eweh5fvi.js → sun-BuXE0xUS.js} +3 -15
  125. package/dist/_chunks/sun-BuXE0xUS.js.map +1 -0
  126. package/dist/_chunks/{task-tray-B3A2fRGR.js → task-tray-Bcmrrs8m.js} +3 -3
  127. package/dist/_chunks/{task-tray-B3A2fRGR.js.map → task-tray-Bcmrrs8m.js.map} +1 -1
  128. package/dist/_chunks/{theme-toggle-FrotC2VI.js → theme-toggle-nPzb378f.js} +37 -36
  129. package/dist/_chunks/{theme-toggle-FrotC2VI.js.map → theme-toggle-nPzb378f.js.map} +1 -1
  130. package/dist/_chunks/{timeline-jmd7lfDf.js → timeline-CR7HjZCK.js} +3 -3
  131. package/dist/_chunks/{timeline-jmd7lfDf.js.map → timeline-CR7HjZCK.js.map} +1 -1
  132. package/dist/_chunks/{toast.agent-32WNQ-_x.js → toast.agent-CTF6nIj5.js} +2 -2
  133. package/dist/_chunks/{toast.agent-32WNQ-_x.js.map → toast.agent-CTF6nIj5.js.map} +1 -1
  134. package/dist/_chunks/{transcript-panel-DUrjx5sa.js → transcript-panel-QUQ9XJmf.js} +2 -2
  135. package/dist/_chunks/{transcript-panel-DUrjx5sa.js.map → transcript-panel-QUQ9XJmf.js.map} +1 -1
  136. package/dist/_chunks/{use-password-requirements-C9vKBSVn.js → use-password-requirements-E0sSfx5X.js} +38 -53
  137. package/dist/_chunks/use-password-requirements-E0sSfx5X.js.map +1 -0
  138. package/dist/_chunks/use-theme-C2dHKUAN.js +145 -0
  139. package/dist/_chunks/use-theme-C2dHKUAN.js.map +1 -0
  140. package/dist/_chunks/{workflow-map-BR6txfFX.js → workflow-map-BKsKdYvZ.js} +5 -5
  141. package/dist/_chunks/{workflow-map-BR6txfFX.js.map → workflow-map-BKsKdYvZ.js.map} +1 -1
  142. package/dist/agent-catalog.json +151 -51
  143. package/dist/components/agenda-card/index.js +1 -1
  144. package/dist/components/agenda-tray/index.js +1 -1
  145. package/dist/components/ai-prompt-input/index.js +1 -1
  146. package/dist/components/audio-recorder/index.js +1 -1
  147. package/dist/components/autocomplete/index.js +1 -1
  148. package/dist/components/avatar/avatar.d.ts.map +1 -1
  149. package/dist/components/avatar/index.js +1 -1
  150. package/dist/components/benefit-card/benefit-card.d.ts.map +1 -1
  151. package/dist/components/benefit-card/index.js +1 -1
  152. package/dist/components/booking/booking-types.d.ts +145 -0
  153. package/dist/components/booking/booking-types.d.ts.map +1 -0
  154. package/dist/components/booking/booking.agent.d.ts +4 -0
  155. package/dist/components/booking/booking.agent.d.ts.map +1 -0
  156. package/dist/components/booking/booking.d.ts +6 -0
  157. package/dist/components/booking/booking.d.ts.map +1 -0
  158. package/dist/components/booking/cascade.d.ts +96 -0
  159. package/dist/components/booking/cascade.d.ts.map +1 -0
  160. package/dist/components/booking/details-form.d.ts +32 -0
  161. package/dist/components/booking/details-form.d.ts.map +1 -0
  162. package/dist/components/booking/index.d.ts +5 -0
  163. package/dist/components/booking/index.d.ts.map +1 -0
  164. package/dist/components/booking/index.js +8 -0
  165. package/dist/components/button/icon-button.d.ts.map +1 -1
  166. package/dist/components/button/index.js +1 -1
  167. package/dist/components/calendar/index.js +1 -1
  168. package/dist/components/card/card.d.ts.map +1 -1
  169. package/dist/components/card/index.js +1 -1
  170. package/dist/components/carousel/index.js +1 -1
  171. package/dist/components/chat-input/index.js +1 -1
  172. package/dist/components/chat-message/index.js +1 -1
  173. package/dist/components/checkbox/checkbox.d.ts +6 -2
  174. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  175. package/dist/components/command-palette/index.js +1 -1
  176. package/dist/components/contact-card/index.js +1 -1
  177. package/dist/components/data-table/index.js +1 -1
  178. package/dist/components/date-picker/index.js +1 -1
  179. package/dist/components/date-range-picker/index.js +1 -1
  180. package/dist/components/date-time-picker/index.js +1 -1
  181. package/dist/components/description-list/description-list.d.ts.map +1 -1
  182. package/dist/components/description-list/index.js +1 -1
  183. package/dist/components/dialog/index.js +1 -1
  184. package/dist/components/empty-state/empty-state.d.ts.map +1 -1
  185. package/dist/components/empty-state/index.js +1 -1
  186. package/dist/components/freemium-paywall/index.js +1 -1
  187. package/dist/components/header/index.js +1 -1
  188. package/dist/components/header-settings/index.js +16 -15
  189. package/dist/components/header-settings/index.js.map +1 -1
  190. package/dist/components/icon-button/index.js +1 -1
  191. package/dist/components/index.d.ts +4 -1
  192. package/dist/components/index.d.ts.map +1 -1
  193. package/dist/components/key-value-pair/index.js +1 -1
  194. package/dist/components/link/index.js +1 -1
  195. package/dist/components/link/link.d.ts +7 -0
  196. package/dist/components/link/link.d.ts.map +1 -1
  197. package/dist/components/locale-picker/index.js +1 -1
  198. package/dist/components/map-view/index.js +1 -1
  199. package/dist/components/matrix-rain/index.js +1 -1
  200. package/dist/components/message-card/index.js +1 -1
  201. package/dist/components/message-tray/index.js +1 -1
  202. package/dist/components/notification-card/index.js +1 -1
  203. package/dist/components/notification-tray/index.js +1 -1
  204. package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
  205. package/dist/components/password-input/index.js +1 -1
  206. package/dist/components/patient-search/index.d.ts +4 -0
  207. package/dist/components/patient-search/index.d.ts.map +1 -0
  208. package/dist/components/patient-search/index.js +6 -0
  209. package/dist/components/patient-search/index.js.map +1 -0
  210. package/dist/components/patient-search/patient-search.agent.d.ts +4 -0
  211. package/dist/components/patient-search/patient-search.agent.d.ts.map +1 -0
  212. package/dist/components/patient-search/patient-search.d.ts +103 -0
  213. package/dist/components/patient-search/patient-search.d.ts.map +1 -0
  214. package/dist/components/payment-form/index.js +1 -1
  215. package/dist/components/pdf-viewer/index.js +1 -1
  216. package/dist/components/popover/index.js +1 -1
  217. package/dist/components/popover/popover.d.ts.map +1 -1
  218. package/dist/components/privacy-lock/index.js +1 -1
  219. package/dist/components/public-footer/index.d.ts +6 -0
  220. package/dist/components/public-footer/index.d.ts.map +1 -0
  221. package/dist/components/public-footer/index.js +10 -0
  222. package/dist/components/public-footer/index.js.map +1 -0
  223. package/dist/components/public-footer/legal-urls.d.ts +18 -0
  224. package/dist/components/public-footer/legal-urls.d.ts.map +1 -0
  225. package/dist/components/public-footer/public-footer.agent.d.ts +4 -0
  226. package/dist/components/public-footer/public-footer.agent.d.ts.map +1 -0
  227. package/dist/components/public-footer/public-footer.d.ts +51 -0
  228. package/dist/components/public-footer/public-footer.d.ts.map +1 -0
  229. package/dist/components/public-footer/socials.d.ts +9 -0
  230. package/dist/components/public-footer/socials.d.ts.map +1 -0
  231. package/dist/components/public-header/index.js +1 -1
  232. package/dist/components/public-header/public-header.d.ts.map +1 -1
  233. package/dist/components/recaptcha-widget/index.js +1 -1
  234. package/dist/components/reviews-panel/index.d.ts +4 -0
  235. package/dist/components/reviews-panel/index.d.ts.map +1 -0
  236. package/dist/components/reviews-panel/index.js +6 -0
  237. package/dist/components/reviews-panel/index.js.map +1 -0
  238. package/dist/components/reviews-panel/reviews-panel.agent.d.ts +4 -0
  239. package/dist/components/reviews-panel/reviews-panel.agent.d.ts.map +1 -0
  240. package/dist/components/reviews-panel/reviews-panel.d.ts +76 -0
  241. package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -0
  242. package/dist/components/search-bar/index.js +1 -1
  243. package/dist/components/search-input/index.js +1 -1
  244. package/dist/components/sheet/index.js +1 -1
  245. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  246. package/dist/components/slot-grid/index.js +1 -1
  247. package/dist/components/spinner/index.js +1 -1
  248. package/dist/components/stepper-accordion/index.js +4 -3
  249. package/dist/components/stepper-accordion/index.js.map +1 -1
  250. package/dist/components/task-tray/index.js +1 -1
  251. package/dist/components/theme-toggle/index.js +1 -1
  252. package/dist/components/timeline/index.js +1 -1
  253. package/dist/components/toast/index.js +1 -1
  254. package/dist/components/transcript-panel/index.js +1 -1
  255. package/dist/components/workflow/index.js +1 -1
  256. package/dist/hooks/index.js +1 -1
  257. package/dist/hooks/use-theme.d.ts.map +1 -1
  258. package/dist/i18n/config.js +4923 -49
  259. package/dist/i18n/config.js.map +1 -1
  260. package/dist/i18n/locales/ar.d.ts +272 -0
  261. package/dist/i18n/locales/ar.d.ts.map +1 -1
  262. package/dist/i18n/locales/de.d.ts +272 -0
  263. package/dist/i18n/locales/de.d.ts.map +1 -1
  264. package/dist/i18n/locales/el.d.ts +272 -0
  265. package/dist/i18n/locales/el.d.ts.map +1 -1
  266. package/dist/i18n/locales/es.d.ts +272 -0
  267. package/dist/i18n/locales/es.d.ts.map +1 -1
  268. package/dist/i18n/locales/fr.d.ts +272 -0
  269. package/dist/i18n/locales/fr.d.ts.map +1 -1
  270. package/dist/i18n/locales/hi.d.ts +272 -0
  271. package/dist/i18n/locales/hi.d.ts.map +1 -1
  272. package/dist/i18n/locales/ja.d.ts +272 -0
  273. package/dist/i18n/locales/ja.d.ts.map +1 -1
  274. package/dist/i18n/locales/nl.d.ts +272 -0
  275. package/dist/i18n/locales/nl.d.ts.map +1 -1
  276. package/dist/i18n/locales/pl.d.ts +272 -0
  277. package/dist/i18n/locales/pl.d.ts.map +1 -1
  278. package/dist/i18n/locales/pt.d.ts +272 -0
  279. package/dist/i18n/locales/pt.d.ts.map +1 -1
  280. package/dist/i18n/locales/ro.d.ts +272 -0
  281. package/dist/i18n/locales/ro.d.ts.map +1 -1
  282. package/dist/i18n/locales/ru.d.ts +272 -0
  283. package/dist/i18n/locales/ru.d.ts.map +1 -1
  284. package/dist/i18n/locales/sq.d.ts +272 -0
  285. package/dist/i18n/locales/sq.d.ts.map +1 -1
  286. package/dist/i18n/locales/sv.d.ts +272 -0
  287. package/dist/i18n/locales/sv.d.ts.map +1 -1
  288. package/dist/i18n/locales/tr.d.ts +272 -0
  289. package/dist/i18n/locales/tr.d.ts.map +1 -1
  290. package/dist/i18n/locales/zh.d.ts +272 -0
  291. package/dist/i18n/locales/zh.d.ts.map +1 -1
  292. package/dist/i18n/resources.d.ts +544 -0
  293. package/dist/i18n/resources.d.ts.map +1 -1
  294. package/dist/index.js +364 -348
  295. package/dist/index.js.map +1 -1
  296. package/dist/locales/ar.json +273 -1
  297. package/dist/locales/de.json +273 -1
  298. package/dist/locales/el.json +273 -1
  299. package/dist/locales/en.json +273 -1
  300. package/dist/locales/es.json +273 -1
  301. package/dist/locales/fr.json +273 -1
  302. package/dist/locales/hi.json +273 -1
  303. package/dist/locales/it.json +273 -1
  304. package/dist/locales/ja.json +273 -1
  305. package/dist/locales/nl.json +273 -1
  306. package/dist/locales/pl.json +273 -1
  307. package/dist/locales/pt.json +273 -1
  308. package/dist/locales/ro.json +273 -1
  309. package/dist/locales/ru.json +273 -1
  310. package/dist/locales/sq.json +273 -1
  311. package/dist/locales/sv.json +273 -1
  312. package/dist/locales/tr.json +273 -1
  313. package/dist/locales/zh.json +273 -1
  314. package/dist/patterns/alia-assistant/index.js +1 -1
  315. package/dist/patterns/patient-shell/index.js +1 -1
  316. package/dist/patterns/patient-shell/patient-shell.d.ts.map +1 -1
  317. package/dist/tokens.css +1 -1
  318. package/package.json +17 -1
  319. package/dist/_chunks/alia-sidebar-CUi2UCbY.js.map +0 -1
  320. package/dist/_chunks/avatar-BpFohgWG.js.map +0 -1
  321. package/dist/_chunks/benefit-card-DXmrAyfn.js.map +0 -1
  322. package/dist/_chunks/calendar-zy0tUUVG.js.map +0 -1
  323. package/dist/_chunks/card-C353dU-H.js.map +0 -1
  324. package/dist/_chunks/description-list-Bsga4IW8.js.map +0 -1
  325. package/dist/_chunks/empty-state-3CLJIXSj.js.map +0 -1
  326. package/dist/_chunks/header-DqmKROIY.js.map +0 -1
  327. package/dist/_chunks/icon-button-C4CGcYuz.js +0 -54
  328. package/dist/_chunks/icon-button-C4CGcYuz.js.map +0 -1
  329. package/dist/_chunks/isSameMonth-5wNF2f4I.js +0 -1307
  330. package/dist/_chunks/isSameMonth-5wNF2f4I.js.map +0 -1
  331. package/dist/_chunks/link-DmM5IevO.js.map +0 -1
  332. package/dist/_chunks/locale-picker-BxEUUPW7.js.map +0 -1
  333. package/dist/_chunks/matrix-rain-CRPMXcVx.js.map +0 -1
  334. package/dist/_chunks/notification-card-ejOw5g6g.js.map +0 -1
  335. package/dist/_chunks/notification-tray-D_69dXFY.js.map +0 -1
  336. package/dist/_chunks/patient-shell-B164drIa.js +0 -173
  337. package/dist/_chunks/popover--derJ_wq.js.map +0 -1
  338. package/dist/_chunks/public-header.agent-BQ3r6Hgq.js.map +0 -1
  339. package/dist/_chunks/react-day-picker-C5F3-TTX.js +0 -1827
  340. package/dist/_chunks/react-day-picker-C5F3-TTX.js.map +0 -1
  341. package/dist/_chunks/slot-grid-CgpYgBkW.js +0 -502
  342. package/dist/_chunks/slot-grid-CgpYgBkW.js.map +0 -1
  343. package/dist/_chunks/spinner-DirtWZNG.js.map +0 -1
  344. package/dist/_chunks/stepper-C-sIpRRU.js +0 -7
  345. package/dist/_chunks/stepper-C-sIpRRU.js.map +0 -1
  346. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js +0 -322
  347. package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js.map +0 -1
  348. package/dist/_chunks/stepper-calendar-BLOJUE0-.js +0 -648
  349. package/dist/_chunks/stepper-calendar-BLOJUE0-.js.map +0 -1
  350. package/dist/_chunks/sun-Eweh5fvi.js.map +0 -1
  351. package/dist/_chunks/use-password-requirements-C9vKBSVn.js.map +0 -1
  352. package/dist/_chunks/use-theme-B1cwAXJR.js +0 -145
  353. package/dist/_chunks/use-theme-B1cwAXJR.js.map +0 -1
  354. package/dist/components/stepper-calendar/index.d.ts +0 -4
  355. package/dist/components/stepper-calendar/index.d.ts.map +0 -1
  356. package/dist/components/stepper-calendar/index.js +0 -6
  357. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts +0 -4
  358. package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts.map +0 -1
  359. package/dist/components/stepper-calendar/stepper-calendar.d.ts +0 -62
  360. package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +0 -1
  361. /package/dist/components/{stepper-calendar → booking}/index.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-footer.agent-CA29gxHJ.js","sources":["../../src/components/public-footer/legal-urls.ts","../../src/components/public-footer/socials.tsx","../../src/components/public-footer/public-footer.tsx","../../src/components/public-footer/public-footer.agent.ts"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* PublicFooter — legally-required URL composition. */\n/* */\n/* GDPR + Italian/German commercial law require Privacy, Terms-of-use, */\n/* entity name and VAT to be visible on every public AlfaDocs surface. */\n/* The kit owns the slug table so a privacy-policy URL change is a single */\n/* kit bump rather than three repo edits. */\n/* */\n/* For locales without an explicit canonical slug, we fall back to the */\n/* Italian slugs — alfadocs.com defaults to Italian and unlocalised pages */\n/* render the IT version. Marketing supplies updates over time. */\n/* -------------------------------------------------------------------- */\n\nexport const DEFAULT_MARKETING_BASE_URL = 'https://www.alfadocs.com';\n\nexport type LegalUrlKey = 'privacy' | 'terms' | 'contacts';\n\nexport type LegalSlugMap = Record<LegalUrlKey, string>;\n\n/** Per-locale slug override; missing locales fall back to the kit default. */\nexport type LegalUrlOverride = Record<string, string>;\n\nexport interface LegalUrlOverrides {\n privacy?: LegalUrlOverride;\n terms?: LegalUrlOverride;\n contacts?: LegalUrlOverride;\n}\n\n/* Italian default — also used as the fallback for any locale without an\n * explicit entry below. */\nconst ITALIAN_SLUGS: LegalSlugMap = {\n privacy: '/privacy-prenotazione-online',\n terms: '/it/condizioni-di-utilizzo',\n contacts: '/it/contattaci',\n};\n\n/* Canonical per-locale slug table. Explicit entries come from marketing;\n * everything else inherits ITALIAN_SLUGS via the resolver below. */\nconst SLUGS: Record<string, LegalSlugMap> = {\n it: ITALIAN_SLUGS,\n en: {\n privacy: '/en/privacy',\n terms: '/en/terms-of-use',\n contacts: '/en/contact-us',\n },\n de: {\n privacy: '/de/datenschutz',\n terms: '/de/nutzungsbedingungen',\n contacts: '/de/kontakt',\n },\n fr: {\n privacy: '/fr/confidentialite',\n terms: '/fr/conditions-utilisation',\n contacts: '/fr/contact',\n },\n es: {\n privacy: '/es/privacidad',\n terms: '/es/condiciones-uso',\n contacts: '/es/contacto',\n },\n};\n\nconst HTTPS_PREFIX = 'https://';\n\nfunction normaliseBaseUrl(input: string | undefined): string {\n if (!input) return DEFAULT_MARKETING_BASE_URL;\n if (!input.startsWith(HTTPS_PREFIX)) {\n if (import.meta.env.DEV) {\n // eslint-disable-next-line no-console\n console.warn(\n `[PublicFooter] marketingBaseUrl must start with \"https://\" — falling back to ${DEFAULT_MARKETING_BASE_URL}. Received: \"${input}\"`,\n );\n }\n return DEFAULT_MARKETING_BASE_URL;\n }\n // Strip trailing slash so composed URLs don't double up.\n return input.replace(/\\/+$/, '');\n}\n\nfunction pickSlug(\n locale: string,\n key: LegalUrlKey,\n overrides: LegalUrlOverrides | undefined,\n): string {\n const override = overrides?.[key]?.[locale];\n if (override) return override;\n const localeSlug = SLUGS[locale]?.[key];\n if (localeSlug) return localeSlug;\n return ITALIAN_SLUGS[key];\n}\n\n/** Resolved legal URLs for the active locale + baseUrl + overrides. */\nexport interface ResolvedLegalUrls {\n privacy: string;\n terms: string;\n contacts: string;\n}\n\nexport function composeLegalUrls(\n locale: string,\n marketingBaseUrl: string | undefined,\n overrides?: LegalUrlOverrides,\n): ResolvedLegalUrls {\n const base = normaliseBaseUrl(marketingBaseUrl);\n const lang = (locale || 'it').split('-')[0]; // strip region — 'pt-BR' → 'pt'\n return {\n privacy: `${base}${pickSlug(lang, 'privacy', overrides)}`,\n terms: `${base}${pickSlug(lang, 'terms', overrides)}`,\n contacts: `${base}${pickSlug(lang, 'contacts', overrides)}`,\n };\n}\n","/* -------------------------------------------------------------------- */\n/* PublicFooter — default social-network URLs + brand icon components. */\n/* */\n/* AlfaDocs's four canonical social profiles. Consumers can subset via */\n/* `socials={[...]}` or override individual `href` values. */\n/* */\n/* Icons are small inline SVG components (paths from simpleicons.org) */\n/* rendered with `currentColor` so they inherit the footer's */\n/* `--muted-foreground` ink. Lucide-react does not ship brand glyphs, and */\n/* pulling a separate brand-icon package for four logos is not worth the */\n/* bundle cost. */\n/* -------------------------------------------------------------------- */\n\nimport type { ComponentType, SVGProps } from 'react';\n\nexport const SOCIAL_NETWORKS = [\n 'linkedin',\n 'youtube',\n 'instagram',\n 'facebook',\n] as const;\n\nexport type SocialNetwork = (typeof SOCIAL_NETWORKS)[number];\n\nexport const DEFAULT_SOCIAL_URLS: Record<SocialNetwork, string> = {\n linkedin: 'https://www.linkedin.com/company/alfadocs',\n youtube: 'https://www.youtube.com/@alfadocs',\n instagram: 'https://www.instagram.com/alfadocs',\n facebook: 'https://www.facebook.com/alfadocs',\n};\n\ntype IconProps = SVGProps<SVGSVGElement>;\ntype SocialIcon = ComponentType<IconProps>;\n\nconst baseProps = {\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n xmlns: 'http://www.w3.org/2000/svg',\n} as const;\n\nconst LinkedinIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.063 2.063 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n </svg>\n);\n\nconst YoutubeIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </svg>\n);\n\nconst InstagramIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zM12 0C8.741 0 8.333.014 7.053.072 2.695.272.273 2.69.073 7.052.014 8.333 0 8.741 0 12c0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98C8.333 23.986 8.741 24 12 24c3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98C15.668.014 15.259 0 12 0zm0 5.838a6.162 6.162 0 1 0 0 12.324 6.162 6.162 0 0 0 0-12.324zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6.406-11.845a1.44 1.44 0 1 0 0 2.881 1.44 1.44 0 0 0 0-2.881z\" />\n </svg>\n);\n\nconst FacebookIcon: SocialIcon = (props) => (\n <svg {...baseProps} {...props}>\n <path d=\"M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z\" />\n </svg>\n);\n\nexport const SOCIAL_ICONS: Record<SocialNetwork, SocialIcon> = {\n linkedin: LinkedinIcon,\n youtube: YoutubeIcon,\n instagram: InstagramIcon,\n facebook: FacebookIcon,\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Link } from '../link';\nimport { Separator } from '../separator';\nimport { Logo } from '../logo';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from '../accordion';\nimport {\n composeLegalUrls,\n type LegalUrlOverrides,\n type ResolvedLegalUrls,\n} from './legal-urls';\nimport {\n DEFAULT_SOCIAL_URLS,\n SOCIAL_ICONS,\n SOCIAL_NETWORKS,\n type SocialNetwork,\n} from './socials';\n\n/* ------------------------------------------------------------------ */\n/* Constants */\n/* ------------------------------------------------------------------ */\n\nconst ENTITY_NAME = 'AlfaDocs GmbH';\nconst ENTITY_VAT = 'P.IVA DE301955405';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n 'ds:w-full',\n 'ds:text-[color:var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-sm)]',\n 'ds:bg-[var(--background)]',\n ].join(' '),\n {\n variants: {\n variant: {\n minimal: [\n 'ds:py-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:border-block-start ds:border-[var(--border)]',\n ].join(' '),\n compact: [\n 'ds:py-[var(--spacing-md)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:border-block-start ds:border-[var(--border)]',\n ].join(' '),\n full: [\n 'ds:py-[var(--spacing-xl)]',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)]',\n 'ds:bg-[var(--muted)]',\n ].join(' '),\n },\n },\n defaultVariants: { variant: 'compact' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type PublicFooterVariant = NonNullable<\n VariantProps<typeof rootVariants>['variant']\n>;\n\nexport interface PublicFooterLink {\n href: string;\n label: string;\n /** When true, link opens in a new tab with the localised aria-label suffix. */\n external?: boolean;\n}\n\nexport interface PublicFooterLinkGroup {\n /** Stable key — used to look up the column heading via `t('ui.footer.group.<key>')`. */\n key: 'product' | 'resources' | 'company' | 'legal' | (string & {});\n links: PublicFooterLink[];\n}\n\nexport interface PublicFooterSocial {\n network: SocialNetwork;\n /** Override the kit's default URL. */\n href?: string;\n}\n\nexport interface PublicFooterProps {\n variant: PublicFooterVariant;\n /** Origin for legally-required URLs. Default: 'https://www.alfadocs.com'. */\n marketingBaseUrl?: string;\n /** Override individual legal-link slugs per locale. Rare. */\n legalUrlOverrides?: LegalUrlOverrides;\n /** `full` variant: consumer-supplied link columns. Legal column is always rendered. */\n linkGroups?: PublicFooterLinkGroup[];\n /** `full` variant: subset of social networks. Default: all four. Pass `[]` to hide the row. */\n socials?: PublicFooterSocial[];\n /** `full` variant: custom logo node. Default: kit's wordmark Logo. */\n logoSlot?: ReactNode;\n /** Extra surface-specific links — appended after the standard nav row in compact + full. Ignored by minimal. */\n extraNavSlot?: ReactNode;\n /** Trust badges (HIPAA, ISO). Rendered at the start of `minimal`'s row, or in the bottom strip of `full`. */\n trustBadgesSlot?: ReactNode;\n 'aria-label'?: string;\n id?: string;\n}\n\nexport interface PublicFooterHandle {\n getVariant: () => PublicFooterVariant;\n /** Resolved legal URLs for the current locale + marketingBaseUrl + overrides. */\n getLegalUrls: () => ResolvedLegalUrls;\n}\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\n/** Allowlist consumer-supplied URLs — public marketing surface, defence in depth. */\nconst SAFE_HREF_RE = /^(https?:\\/\\/|mailto:|tel:|\\/(?!\\/))/i;\nfunction safeHref(href: string): string {\n return SAFE_HREF_RE.test(href) ? href : '#';\n}\n\nfunction CopyrightLine({\n copyright,\n align = 'center',\n}: {\n copyright: string;\n align?: 'start' | 'center';\n}) {\n return (\n <p\n className={[\n 'ds:m-0 ds:text-[color:var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-sm)]',\n align === 'center' ? 'ds:text-center' : 'ds:text-start',\n ].join(' ')}\n >\n {copyright}\n </p>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* PublicFooter */\n/* ------------------------------------------------------------------ */\n\nexport const PublicFooter = forwardRef<PublicFooterHandle, PublicFooterProps>(\n function PublicFooter(\n {\n variant,\n marketingBaseUrl,\n legalUrlOverrides,\n linkGroups,\n socials,\n logoSlot,\n extraNavSlot,\n trustBadgesSlot,\n id,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\n\n const legalUrls = useMemo(\n () =>\n composeLegalUrls(i18n.language, marketingBaseUrl, legalUrlOverrides),\n [i18n.language, marketingBaseUrl, legalUrlOverrides],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n getVariant: () => variant,\n getLegalUrls: () => legalUrls,\n }),\n [variant, legalUrls],\n );\n\n const year = new Date().getFullYear();\n const copyright = t('footer.copyright', {\n year,\n entity: ENTITY_NAME,\n vat: ENTITY_VAT,\n });\n const landmarkLabel = ariaLabel ?? t('footer.nav.label');\n\n const labels = {\n privacy: t('footer.nav.privacy'),\n terms: t('footer.nav.terms'),\n contacts: t('footer.nav.contacts'),\n };\n\n const resolvedSocials = useMemo<PublicFooterSocial[]>(() => {\n if (socials !== undefined) return socials;\n return SOCIAL_NETWORKS.map((network) => ({ network }));\n }, [socials]);\n\n return (\n <footer\n id={id}\n role=\"contentinfo\"\n aria-label={landmarkLabel}\n data-component=\"public-footer\"\n data-variant={variant}\n className={rootVariants({ variant })}\n >\n {variant === 'minimal' && (\n <MinimalBody\n legalUrls={legalUrls}\n labels={labels}\n copyright={copyright}\n trustBadgesSlot={trustBadgesSlot}\n />\n )}\n {variant === 'compact' && (\n <CompactBody\n legalUrls={legalUrls}\n labels={labels}\n copyright={copyright}\n extraNavSlot={extraNavSlot}\n />\n )}\n {variant === 'full' && (\n <FullBody\n legalUrls={legalUrls}\n labels={labels}\n copyright={copyright}\n linkGroups={linkGroups}\n socials={resolvedSocials}\n logoSlot={logoSlot}\n extraNavSlot={extraNavSlot}\n trustBadgesSlot={trustBadgesSlot}\n t={t}\n />\n )}\n </footer>\n );\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Minimal */\n/* ------------------------------------------------------------------ */\n\nfunction MinimalBody({\n legalUrls,\n labels,\n copyright,\n trustBadgesSlot,\n}: {\n legalUrls: ResolvedLegalUrls;\n labels: { privacy: string; terms: string; contacts: string };\n copyright: string;\n trustBadgesSlot?: ReactNode;\n}) {\n return (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-sm)]\">\n {trustBadgesSlot && (\n <span\n data-slot=\"trust-badges\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)] ds:me-[var(--spacing-sm)]\"\n >\n {trustBadgesSlot}\n </span>\n )}\n <Link\n href={legalUrls.privacy}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.privacy}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.terms}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.terms}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <span>{copyright}</span>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Compact */\n/* ------------------------------------------------------------------ */\n\nfunction CompactBody({\n legalUrls,\n labels,\n copyright,\n extraNavSlot,\n}: {\n legalUrls: ResolvedLegalUrls;\n labels: { privacy: string; terms: string; contacts: string };\n copyright: string;\n extraNavSlot?: ReactNode;\n}) {\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-sm)]\">\n <Link\n href={legalUrls.privacy}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.privacy}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.terms}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.terms}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.contacts}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.contacts}\n </Link>\n {extraNavSlot && (\n <>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <span data-slot=\"extra-nav\">{extraNavSlot}</span>\n </>\n )}\n </div>\n <CopyrightLine copyright={copyright} />\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Full */\n/* ------------------------------------------------------------------ */\n\ntype TFunction = ReturnType<typeof useTranslation>['t'];\n\nfunction buildLegalColumn(\n legalUrls: ResolvedLegalUrls,\n labels: { privacy: string; terms: string; contacts: string },\n): PublicFooterLinkGroup {\n return {\n key: 'legal',\n links: [\n { href: legalUrls.privacy, label: labels.privacy, external: true },\n { href: legalUrls.terms, label: labels.terms, external: true },\n { href: legalUrls.contacts, label: labels.contacts, external: true },\n ],\n };\n}\n\nfunction FullBody({\n legalUrls,\n labels,\n copyright,\n linkGroups,\n socials,\n logoSlot,\n extraNavSlot,\n trustBadgesSlot,\n t,\n}: {\n legalUrls: ResolvedLegalUrls;\n labels: { privacy: string; terms: string; contacts: string };\n copyright: string;\n linkGroups?: PublicFooterLinkGroup[];\n socials: PublicFooterSocial[];\n logoSlot?: ReactNode;\n extraNavSlot?: ReactNode;\n trustBadgesSlot?: ReactNode;\n t: TFunction;\n}) {\n // The kit-built Legal column is always appended — Privacy / Terms /\n // Contacts must render in every variant per the legal brief.\n const columns: PublicFooterLinkGroup[] = [\n ...(linkGroups ?? []),\n buildLegalColumn(legalUrls, labels),\n ];\n\n const brand = (\n <div\n data-slot=\"brand\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <div className=\"ds:inline-flex\">\n {logoSlot ?? (\n <Logo variant=\"wordmark\" tone=\"auto\" aria-label=\"AlfaDocs\" />\n )}\n </div>\n {socials.length > 0 && (\n <ul\n data-slot=\"socials\"\n className=\"ds:list-none ds:m-0 ds:p-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\"\n >\n {socials.map((s) => {\n const Icon = SOCIAL_ICONS[s.network];\n const href = s.href ?? DEFAULT_SOCIAL_URLS[s.network];\n const label = t(`footer.social.aria.${s.network}`);\n return (\n <li key={s.network}>\n <Link\n href={safeHref(href)}\n external\n externalIcon={false}\n intent=\"subtle\"\n aria-label={label}\n className=\"ds:inline-flex ds:items-center ds:justify-center ds:min-w-[var(--min-target-size)] ds:min-h-[var(--min-target-size)]\"\n >\n <Icon\n aria-hidden=\"true\"\n className=\"ds:size-5\"\n focusable=\"false\"\n />\n </Link>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n );\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xl)]\">\n {/* Top: brand block on inline-start + link columns to inline-end */}\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xl)] ds:lg:flex-row ds:lg:items-start ds:lg:gap-[var(--spacing-xl)]\">\n <div className=\"ds:lg:w-[15rem] ds:lg:shrink-0\">{brand}</div>\n\n <div className=\"ds:flex-1 ds:min-w-0\">\n {/* md+ — grid of columns */}\n <div\n className=\"ds:hidden ds:md:grid ds:md:grid-cols-2 ds:lg:grid-cols-4 ds:gap-[var(--spacing-lg)]\"\n data-slot=\"link-columns-grid\"\n data-columns={columns.length}\n >\n <FullColumnsGrid columns={columns} t={t} />\n </div>\n\n {/* below md — accordion */}\n <div className=\"ds:md:hidden\" data-slot=\"link-columns-accordion\">\n <Accordion type=\"multiple\">\n {columns.map((group, i) => (\n <AccordionItem\n key={`${i}-${group.key}`}\n value={`${i}-${group.key}`}\n >\n <AccordionTrigger>\n {t(`footer.group.${group.key}`, {\n defaultValue: group.key,\n })}\n </AccordionTrigger>\n <AccordionContent>\n <ul className=\"ds:list-none ds:m-0 ds:p-0 ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {group.links.map((link) => (\n <li key={`${group.key}-${link.href}-${link.label}`}>\n <Link\n href={safeHref(link.href)}\n external={link.external}\n externalIcon={false}\n intent=\"subtle\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n </div>\n </div>\n </div>\n\n <Separator orientation=\"horizontal\" />\n\n {/* Bottom strip: copyright inline-start, mini legal links inline-end\n on the same row. Stacks under sm. */}\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:sm:flex-row ds:sm:items-center ds:sm:justify-between\">\n <CopyrightLine copyright={copyright} align=\"start\" />\n <div\n data-slot=\"bottom-legal\"\n className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)] ds:sm:justify-end\"\n >\n <Link\n href={legalUrls.privacy}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.privacy}\n </Link>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n <Link\n href={legalUrls.terms}\n external\n externalIcon={false}\n intent=\"subtle\"\n >\n {labels.terms}\n </Link>\n {(trustBadgesSlot || extraNavSlot) && (\n <>\n <Separator orientation=\"vertical\" className=\"ds:h-4\" />\n {trustBadgesSlot && (\n <span\n data-slot=\"trust-badges\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]\"\n >\n {trustBadgesSlot}\n </span>\n )}\n {extraNavSlot && (\n <span\n data-slot=\"extra-nav\"\n className=\"ds:inline-flex ds:items-center\"\n >\n {extraNavSlot}\n </span>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction FullColumnsGrid({\n columns,\n t,\n}: {\n columns: PublicFooterLinkGroup[];\n t: TFunction;\n}) {\n return (\n <>\n {columns.map((group, i) => (\n <section\n key={`${i}-${group.key}`}\n aria-labelledby={`public-footer-group-${i}-${group.key}`}\n >\n {/* h3 so the footer's column headings don't collide with the host\n page's section h2 outline. */}\n <h3\n id={`public-footer-group-${i}-${group.key}`}\n className=\"ds:m-0 ds:mb-[var(--spacing-sm)] ds:text-[color:var(--foreground)] ds:text-[length:var(--font-size-sm)] ds:font-medium\"\n >\n {t(`footer.group.${group.key}`, { defaultValue: group.key })}\n </h3>\n <ul className=\"ds:list-none ds:m-0 ds:p-0 ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {group.links.map((link) => (\n <li key={`${group.key}-${link.href}-${link.label}`}>\n <Link\n href={safeHref(link.href)}\n external={link.external}\n externalIcon={false}\n intent=\"subtle\"\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n </section>\n ))}\n </>\n );\n}\n\nPublicFooter.displayName = 'PublicFooter';\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — PublicFooter. */\n/* */\n/* PublicFooter is the kit's legally-grounded site footer with three */\n/* visual variants (minimal/compact/full). The adapter surfaces the */\n/* active variant + a `get_legal_urls` read so a host agent can verify */\n/* that the consumer's `marketingBaseUrl` + locale resolve to the */\n/* expected privacy / terms / contacts URLs without scraping DOM. */\n/* No write actions — the footer has no mutable state. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PublicFooterHandle } from './public-footer';\n\nexport const publicFooterAgent: AgentAdapter<PublicFooterHandle> = {\n id: 'public-footer',\n capabilities: ['navigate'],\n state: {\n variant: {\n type: 'string',\n description: 'Active variant — one of `minimal`, `compact`, `full`.',\n read: (handle) => handle.getVariant(),\n },\n legalUrls: {\n type: 'object',\n description:\n 'Resolved legal URLs for the active locale + marketingBaseUrl + overrides: `{ privacy, terms, contacts }`.',\n read: (handle) => handle.getLegalUrls(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'public-footer',\n description:\n 'Marks the PublicFooter root region. The root also carries `data-variant=\"minimal|compact|full\"` for CSS + agent selectors.',\n },\n instanceId: {\n attr: 'id',\n sourceProp: 'id',\n description: 'Sourced from the `id` prop when provided.',\n },\n },\n};\n"],"names":["DEFAULT_MARKETING_BASE_URL","ITALIAN_SLUGS","SLUGS","HTTPS_PREFIX","normaliseBaseUrl","input","pickSlug","locale","key","overrides","override","_a","localeSlug","_b","composeLegalUrls","marketingBaseUrl","base","lang","SOCIAL_NETWORKS","DEFAULT_SOCIAL_URLS","baseProps","LinkedinIcon","props","jsx","YoutubeIcon","InstagramIcon","FacebookIcon","SOCIAL_ICONS","ENTITY_NAME","ENTITY_VAT","rootVariants","cva","SAFE_HREF_RE","safeHref","href","CopyrightLine","copyright","align","PublicFooter","forwardRef","variant","legalUrlOverrides","linkGroups","socials","logoSlot","extraNavSlot","trustBadgesSlot","id","ariaLabel","ref","t","i18n","useTranslation","legalUrls","useMemo","useImperativeHandle","year","landmarkLabel","labels","resolvedSocials","network","jsxs","MinimalBody","CompactBody","FullBody","Link","Separator","Fragment","buildLegalColumn","columns","brand","Logo","s","Icon","label","FullColumnsGrid","Accordion","group","i","AccordionItem","AccordionTrigger","AccordionContent","link","publicFooterAgent","handle"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { jsx as s, jsxs as t, Fragment as _ } from "react/jsx-runtime";
1
+ import { jsx as s, jsxs as i, Fragment as _ } from "react/jsx-runtime";
2
2
  import { forwardRef as h, useId as Q, useState as y, useCallback as M, useImperativeHandle as U, useContext as N, useEffect as B, useRef as D, createContext as Z } from "react";
3
3
  import { c as C } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as ss } from "react-i18next";
5
5
  import * as m from "@radix-ui/react-navigation-menu";
6
- import { I as es } from "./icon-button-C4CGcYuz.js";
7
- import { S as f } from "./sheet-BT0izeoI.js";
6
+ import { I as es } from "./icon-button-BRHSSFmZ.js";
7
+ import { S as f } from "./sheet-D8M8hf8B.js";
8
8
  import { C as I } from "./chevron-down-BX_NP2Yh.js";
9
9
  import { X as ds } from "./x-CCcI3eJp.js";
10
10
  import { M as as } from "./menu-XRhW3_99.js";
@@ -28,18 +28,25 @@ const g = Z("desktop"), ns = C(
28
28
  "ds:bg-transparent ds:text-[var(--foreground)]",
29
29
  "ds:data-[stuck=true]:bg-[var(--card)]",
30
30
  "ds:data-[stuck=true]:shadow-[var(--shadow-md)]",
31
+ // Once stuck, pair the elevation shadow with a tokenized
32
+ // block-end border so the header has a clear edge against the
33
+ // page below it — shadow alone fades to a faint halo on dark
34
+ // surfaces, leaving the bar reading as unbounded.
35
+ "ds:data-[stuck=true]:border-block-end ds:data-[stuck=true]:border-[color:var(--border)]",
31
36
  "ds:forced-colors:border-b ds:forced-colors:border-[CanvasText]"
32
37
  ].join(" "),
33
38
  // `dark` flips its own scope into the dark token set so nav
34
- // links + buttons inside read off-white text on the blue-800
39
+ // links + buttons inside read off-white text on the dark
35
40
  // surface. Without the `theme-dark` scope the children inherit
36
- // the light-theme `--foreground` (blue-500) and fail
37
- // color-contrast at ~1.3:1.
41
+ // the light-theme `--foreground` and fail color-contrast at
42
+ // ~1.3:1. `--background` already resolves to a dark step under
43
+ // `theme-dark`, so we compose the surface from the standard
44
+ // theme token rather than locking to a raw ramp step.
38
45
  dark: [
39
46
  "ds:flex ds:items-center ds:gap-[var(--spacing-md)]",
40
47
  "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:sm:ps-[var(--spacing-lg)] ds:sm:pe-[var(--spacing-lg)]",
41
48
  "ds:h-14 ds:md:h-16",
42
- "theme-dark ds:bg-[var(--color-blue-800)] ds:text-[var(--foreground)]"
49
+ "theme-dark ds:bg-[var(--background)] ds:text-[var(--foreground)]"
43
50
  ].join(" "),
44
51
  // `pill` matches alfadocs.com's floating rounded-pill header.
45
52
  // The outer header is fully transparent (no border, no bg) and
@@ -89,7 +96,8 @@ const g = Z("desktop"), ns = C(
89
96
  "ds:inline-flex ds:items-center",
90
97
  "type-body-sm ds:font-medium",
91
98
  // Muted-foreground reads as secondary text and matches alfadocs.com's
92
- // nav-link colour (`#545875`). `--foreground` was too dark vs the ref.
99
+ // nav-link colour (the reference's slate-grey). `--foreground` was too
100
+ // dark vs the ref.
93
101
  "ds:text-[var(--muted-foreground)]",
94
102
  "ds:rounded-[var(--radius-sm)]",
95
103
  "ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-xs)]",
@@ -100,7 +108,7 @@ const g = Z("desktop"), ns = C(
100
108
  "ds:data-[active=true]:text-[var(--primary)]",
101
109
  "ds:data-[active=true]:[box-shadow:inset_0_-2px_0_var(--primary)]"
102
110
  ].join(" ")
103
- ), is = [
111
+ ), ts = [
104
112
  "ds:group ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]",
105
113
  "type-body-sm ds:font-medium",
106
114
  // Mirror the navLinkVariants colour + inline padding so triggers and
@@ -114,7 +122,7 @@ const g = Z("desktop"), ns = C(
114
122
  "ds:hover:text-[var(--primary)]",
115
123
  "ds:data-[state=open]:text-[var(--primary)]",
116
124
  "ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none"
117
- ].join(" "), ts = [
125
+ ].join(" "), is = [
118
126
  "ds:size-3 ds:shrink-0",
119
127
  "ds:transition-transform ds:duration-[var(--animation-duration)]",
120
128
  "ds:group-data-[state=open]:rotate-180",
@@ -199,13 +207,13 @@ function ps() {
199
207
  }, []), e;
200
208
  }
201
209
  function vs(e, n, d) {
202
- const [a, i] = y(!1), [r, o] = y(!1), c = D(0), p = D(!1);
210
+ const [a, t] = y(!1), [r, o] = y(!1), c = D(0), p = D(!1);
203
211
  return B(() => {
204
212
  if (!e || typeof window > "u") return;
205
213
  c.current = window.scrollY;
206
214
  const l = () => {
207
215
  const v = window.scrollY;
208
- if (i(v > d), n === "scroll-up") {
216
+ if (t(v > d), n === "scroll-up") {
209
217
  const b = v - c.current;
210
218
  b > 4 && v > d ? o(!0) : (b < -4 || v <= d) && o(!1);
211
219
  }
@@ -223,14 +231,14 @@ function R({
223
231
  homeHref: n,
224
232
  resolvedHomeLabel: d,
225
233
  resolvedNavLabel: a,
226
- resolvedMenuLabel: i,
234
+ resolvedMenuLabel: t,
227
235
  navSlot: r,
228
236
  actionsSlot: o,
229
237
  menuOpen: c,
230
238
  setMenuOpen: p,
231
239
  sheetId: l
232
240
  }) {
233
- return /* @__PURE__ */ t(_, { children: [
241
+ return /* @__PURE__ */ i(_, { children: [
234
242
  /* @__PURE__ */ s(
235
243
  "a",
236
244
  {
@@ -240,7 +248,7 @@ function R({
240
248
  children: e
241
249
  }
242
250
  ),
243
- r ? /* @__PURE__ */ s(g.Provider, { value: "desktop", children: /* @__PURE__ */ t(
251
+ r ? /* @__PURE__ */ s(g.Provider, { value: "desktop", children: /* @__PURE__ */ i(
244
252
  m.Root,
245
253
  {
246
254
  "aria-label": a,
@@ -253,7 +261,7 @@ function R({
253
261
  }
254
262
  ) }) : null,
255
263
  o ? /* @__PURE__ */ s("div", { className: "ds:hidden ds:md:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ms-auto", children: o }) : null,
256
- /* @__PURE__ */ t(f, { open: c, onOpenChange: p, children: [
264
+ /* @__PURE__ */ i(f, { open: c, onOpenChange: p, children: [
257
265
  /* @__PURE__ */ s(f.Trigger, { asChild: !0, children: /* @__PURE__ */ s(
258
266
  es,
259
267
  {
@@ -263,12 +271,12 @@ function R({
263
271
  icon: c ? /* @__PURE__ */ s(ds, { "aria-hidden": "true" }) : /* @__PURE__ */ s(as, { "aria-hidden": "true" }),
264
272
  "aria-controls": l,
265
273
  "aria-expanded": c,
266
- "aria-label": i
274
+ "aria-label": t
267
275
  }
268
276
  ) }),
269
- /* @__PURE__ */ t(f.Content, { side: "end", size: "md", id: l, children: [
277
+ /* @__PURE__ */ i(f.Content, { side: "end", size: "md", id: l, children: [
270
278
  /* @__PURE__ */ s(f.Header, { children: /* @__PURE__ */ s(f.Title, { children: a }) }),
271
- /* @__PURE__ */ s(f.Body, { children: /* @__PURE__ */ t("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
279
+ /* @__PURE__ */ s(f.Body, { children: /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
272
280
  r ? /* @__PURE__ */ s(g.Provider, { value: "mobile", children: /* @__PURE__ */ s(
273
281
  "nav",
274
282
  {
@@ -290,7 +298,7 @@ const E = h(
290
298
  homeHref: n = "/",
291
299
  homeLabel: d,
292
300
  navSlot: a,
293
- actionsSlot: i,
301
+ actionsSlot: t,
294
302
  variant: r = "pill",
295
303
  sticky: o = "none",
296
304
  stickyOffset: c = 80,
@@ -321,7 +329,7 @@ const E = h(
321
329
  resolvedNavLabel: J,
322
330
  resolvedMenuLabel: K,
323
331
  navSlot: a,
324
- actionsSlot: i,
332
+ actionsSlot: t,
325
333
  menuOpen: w,
326
334
  setMenuOpen: k,
327
335
  sheetId: q
@@ -350,10 +358,10 @@ const E = h(
350
358
  }
351
359
  );
352
360
  E.displayName = "PublicHeader";
353
- const T = h(({ active: e, className: n, children: d, ...a }, i) => N(g) === "mobile" ? /* @__PURE__ */ s(
361
+ const T = h(({ active: e, className: n, children: d, ...a }, t) => N(g) === "mobile" ? /* @__PURE__ */ s(
354
362
  "a",
355
363
  {
356
- ref: i,
364
+ ref: t,
357
365
  ...a,
358
366
  "data-active": e ? "true" : void 0,
359
367
  "aria-current": e ? "page" : void 0,
@@ -375,7 +383,7 @@ const T = h(({ active: e, className: n, children: d, ...a }, i) => N(g) === "mob
375
383
  ) : /* @__PURE__ */ s(m.Item, { children: /* @__PURE__ */ s(m.Link, { asChild: !0, active: e, children: /* @__PURE__ */ s(
376
384
  "a",
377
385
  {
378
- ref: i,
386
+ ref: t,
379
387
  ...a,
380
388
  "data-active": e ? "true" : void 0,
381
389
  "aria-current": e ? "page" : void 0,
@@ -384,14 +392,14 @@ const T = h(({ active: e, className: n, children: d, ...a }, i) => N(g) === "mob
384
392
  }
385
393
  ) }) }));
386
394
  T.displayName = "PublicHeader.NavLink";
387
- const V = h(({ label: e, wide: n = !1, children: d, id: a }, i) => N(g) === "mobile" ? /* @__PURE__ */ t(
395
+ const V = h(({ label: e, wide: n = !1, children: d, id: a }, t) => N(g) === "mobile" ? /* @__PURE__ */ i(
388
396
  "details",
389
397
  {
390
398
  id: a,
391
399
  "data-component": "public-header-nav-dropdown",
392
400
  className: "ds:group ds:border-b ds:border-[color:var(--border)]",
393
401
  children: [
394
- /* @__PURE__ */ t(
402
+ /* @__PURE__ */ i(
395
403
  "summary",
396
404
  {
397
405
  className: [
@@ -417,16 +425,16 @@ const V = h(({ label: e, wide: n = !1, children: d, id: a }, i) => N(g) === "mob
417
425
  /* @__PURE__ */ s("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]", children: d })
418
426
  ]
419
427
  }
420
- ) : /* @__PURE__ */ t(m.Item, { "data-component": "public-header-nav-dropdown", children: [
421
- /* @__PURE__ */ t(
428
+ ) : /* @__PURE__ */ i(m.Item, { "data-component": "public-header-nav-dropdown", children: [
429
+ /* @__PURE__ */ i(
422
430
  m.Trigger,
423
431
  {
424
- ref: i,
432
+ ref: t,
425
433
  id: a,
426
- className: is,
434
+ className: ts,
427
435
  children: [
428
436
  e,
429
- /* @__PURE__ */ s(I, { "aria-hidden": "true", className: ts })
437
+ /* @__PURE__ */ s(I, { "aria-hidden": "true", className: is })
430
438
  ]
431
439
  }
432
440
  ),
@@ -439,7 +447,7 @@ const V = h(({ label: e, wide: n = !1, children: d, id: a }, i) => N(g) === "mob
439
447
  )
440
448
  ] }));
441
449
  V.displayName = "PublicHeader.NavDropdown";
442
- const O = h(({ href: e, title: n, subtitle: d, children: a }, i) => {
450
+ const O = h(({ href: e, title: n, subtitle: d, children: a }, t) => {
443
451
  const r = N(g), o = /* @__PURE__ */ s(
444
452
  "span",
445
453
  {
@@ -447,8 +455,8 @@ const O = h(({ href: e, title: n, subtitle: d, children: a }, i) => {
447
455
  className: "type-title-card ds:text-[var(--foreground)] ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none",
448
456
  children: n
449
457
  }
450
- ), l = /* @__PURE__ */ t(_, { children: [
451
- /* @__PURE__ */ t("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
458
+ ), l = /* @__PURE__ */ i(_, { children: [
459
+ /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
452
460
  o,
453
461
  d ? /* @__PURE__ */ s("span", { className: "type-body-sm ds:text-[var(--muted-foreground)]", children: d }) : null
454
462
  ] }),
@@ -458,7 +466,7 @@ const O = h(({ href: e, title: n, subtitle: d, children: a }, i) => {
458
466
  "data-card-arrow": !0,
459
467
  "aria-hidden": "true",
460
468
  className: "ds:flex-none ds:text-[var(--muted-foreground)] ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none ds:rtl:-scale-x-100",
461
- children: /* @__PURE__ */ t(
469
+ children: /* @__PURE__ */ i(
462
470
  "svg",
463
471
  {
464
472
  xmlns: "http://www.w3.org/2000/svg",
@@ -480,13 +488,13 @@ const O = h(({ href: e, title: n, subtitle: d, children: a }, i) => {
480
488
  )
481
489
  ] });
482
490
  let u;
483
- return e ? r === "mobile" ? u = /* @__PURE__ */ s("a", { href: e, className: z, children: l }) : u = /* @__PURE__ */ s(m.Link, { asChild: !0, children: /* @__PURE__ */ s("a", { href: e, className: z, children: l }) }) : u = /* @__PURE__ */ t("div", { className: us, children: [
491
+ return e ? r === "mobile" ? u = /* @__PURE__ */ s("a", { href: e, className: z, children: l }) : u = /* @__PURE__ */ s(m.Link, { asChild: !0, children: /* @__PURE__ */ s("a", { href: e, className: z, children: l }) }) : u = /* @__PURE__ */ i("div", { className: us, children: [
484
492
  o,
485
493
  d ? /* @__PURE__ */ s("span", { className: "ds:block type-body-sm ds:text-[var(--muted-foreground)] ds:mt-[var(--spacing-xs)]", children: d }) : null
486
- ] }), /* @__PURE__ */ t(
494
+ ] }), /* @__PURE__ */ i(
487
495
  "div",
488
496
  {
489
- ref: i,
497
+ ref: t,
490
498
  "data-component": "public-header-dropdown-card",
491
499
  className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
492
500
  children: [
@@ -497,11 +505,11 @@ const O = h(({ href: e, title: n, subtitle: d, children: a }, i) => {
497
505
  );
498
506
  });
499
507
  O.displayName = "PublicHeader.DropdownCard";
500
- const S = h(({ active: e, className: n, children: d, ...a }, i) => {
508
+ const S = h(({ active: e, className: n, children: d, ...a }, t) => {
501
509
  const r = N(g), o = /* @__PURE__ */ s(
502
510
  "a",
503
511
  {
504
- ref: i,
512
+ ref: t,
505
513
  ...a,
506
514
  "data-active": e ? "true" : void 0,
507
515
  "aria-current": e ? "page" : void 0,
@@ -556,4 +564,4 @@ export {
556
564
  Cs as P,
557
565
  js as p
558
566
  };
559
- //# sourceMappingURL=public-header.agent-BQ3r6Hgq.js.map
567
+ //# sourceMappingURL=public-header.agent-5U3S9QiC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-header.agent-5U3S9QiC.js","sources":["../../src/components/public-header/public-header.tsx","../../src/components/public-header/public-header.agent.ts"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* PublicHeader — anonymous / pre-auth site header. */\n/* */\n/* Distinct from the kit's `<Header>` (authenticated app shell): this */\n/* one is for booking-website, signature-website, marketing surfaces — */\n/* anywhere the chrome should read as continuous with `alfadocs.com`, */\n/* not as the logged-in app. */\n/* */\n/* DOM (default / transparent / dark variants): */\n/* <header role=banner data-component=public-header data-stuck=…> */\n/* <a aria-label=homeLabel>{logo}</a> */\n/* <Radix.NavigationMenu>…{navSlot}</Radix.NavigationMenu> ≥ md */\n/* <div class=actions>{actionsSlot}</div> ≥ md only */\n/* <IconButton menu trigger /> ↔ Sheet (partial drawer) < md only */\n/* </header> */\n/* */\n/* DOM (pill variant — matches alfadocs.com floating-pill header): */\n/* <header role=banner data-component=public-header> transparent */\n/* <div data-component=public-header-container> rounded */\n/* …same children as flat variants… */\n/* </div> */\n/* </header> */\n/* ------------------------------------------------------------------ */\n\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type AnchorHTMLAttributes,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronDown, Menu, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';\nimport { IconButton } from '../button/icon-button';\nimport { Sheet } from '../sheet';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface PublicHeaderHandle {\n openMenu: () => void;\n closeMenu: () => void;\n getMenuOpen: () => boolean;\n}\n\nexport interface PublicHeaderProps\n extends\n Omit<ComponentPropsWithoutRef<'header'>, 'children'>,\n VariantProps<typeof rootVariants> {\n /** Logo lockup, typically `<Logo variant=\"wordmark\" tone=\"primary\" size=\"md\" />`. */\n logo: ReactNode;\n /** Optional href for the logo link. Defaults to `/`. */\n homeHref?: string;\n /** Accessible label for the logo link (falls back to `t('publicHeader.homeLabel')`). */\n homeLabel?: string;\n /** Primary nav links rendered inline ≥ md, collapsed into the mobile sheet below md. */\n navSlot?: ReactNode;\n /** Right-side actions (sign-in / register / role-switch CTAs). */\n actionsSlot?: ReactNode;\n /** Sticky behaviour. Default `none`. */\n sticky?: 'none' | 'top' | 'scroll-up';\n /** Pixel offset above which `sticky=\"scroll-up\"` engages and `transparent` fades to default. */\n stickyOffset?: number;\n /** Override the mobile menu trigger's accessible label (`t('publicHeader.openMenu')`). */\n menuLabel?: string;\n /** Override the navigation landmark label (`t('publicHeader.primaryNavLabel')`). */\n navLabel?: string;\n /** Consumer-supplied instance id, surfaced as `data-component-id`. */\n id?: string;\n}\n\nexport interface PublicHeaderNavLinkProps extends Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n 'children'\n> {\n href: string;\n active?: boolean;\n children: ReactNode;\n}\n\nexport interface PublicHeaderNavDropdownProps {\n /** Trigger label (the visible nav item text). */\n label: ReactNode;\n /**\n * `false` (default) renders a single-card dropdown anchored near the trigger\n * (Settori-style). `true` renders a wide multi-card mega-menu spanning the\n * pill's full inline width (Soluzioni-style).\n */\n wide?: boolean;\n /** Cards / content inside the dropdown panel. */\n children: ReactNode;\n /** Optional id; not required — used only for analytics / test selectors. */\n id?: string;\n}\n\nexport interface PublicHeaderDropdownCardProps {\n /**\n * Optional href — when provided the card title becomes a clickable\n * anchor with a `→` arrow indicator. Without href, the title is\n * a static heading (Settori-style).\n */\n href?: string;\n title: ReactNode;\n /** Optional subtitle / muted helper text under the title. */\n subtitle?: ReactNode;\n /** Sub-list contents (typically PublicHeader.DropdownLink children). */\n children?: ReactNode;\n}\n\nexport interface PublicHeaderDropdownLinkProps extends Omit<\n AnchorHTMLAttributes<HTMLAnchorElement>,\n 'children'\n> {\n href: string;\n active?: boolean;\n children: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Context — drives the rendering surface for nav subcomponents. */\n/* */\n/* The same navSlot is rendered twice: once inside the desktop Radix */\n/* NavigationMenu (≥ md, flyout mode) and once inside the mobile Sheet */\n/* drawer (< md, disclosure mode). NavLink / NavDropdown / DropdownCard */\n/* / DropdownLink switch their rendering off this flag so the mobile */\n/* tree doesn't depend on the Radix Root being present. */\n/* ------------------------------------------------------------------ */\n\ntype PublicHeaderSurface = 'desktop' | 'mobile';\n\nconst PublicHeaderSurfaceContext =\n createContext<PublicHeaderSurface>('desktop');\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva(\n [\n 'ds:w-full ds:z-[var(--z-sticky)]',\n 'ds:transition-[background-color,box-shadow,transform] ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n variant: {\n // Transparent fades to a solid pill chrome once data-stuck=\"true\"\n // (set by the rAF scroll listener). The fade is handled via the\n // same background utility so `data-stuck` swaps cleanly between\n // states.\n transparent: [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-md)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:sm:ps-[var(--spacing-lg)] ds:sm:pe-[var(--spacing-lg)]',\n 'ds:h-14 ds:md:h-16',\n 'ds:bg-transparent ds:text-[var(--foreground)]',\n 'ds:data-[stuck=true]:bg-[var(--card)]',\n 'ds:data-[stuck=true]:shadow-[var(--shadow-md)]',\n // Once stuck, pair the elevation shadow with a tokenized\n // block-end border so the header has a clear edge against the\n // page below it — shadow alone fades to a faint halo on dark\n // surfaces, leaving the bar reading as unbounded.\n 'ds:data-[stuck=true]:border-block-end ds:data-[stuck=true]:border-[color:var(--border)]',\n 'ds:forced-colors:border-b ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n // `dark` flips its own scope into the dark token set so nav\n // links + buttons inside read off-white text on the dark\n // surface. Without the `theme-dark` scope the children inherit\n // the light-theme `--foreground` and fail color-contrast at\n // ~1.3:1. `--background` already resolves to a dark step under\n // `theme-dark`, so we compose the surface from the standard\n // theme token rather than locking to a raw ramp step.\n dark: [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-md)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:sm:ps-[var(--spacing-lg)] ds:sm:pe-[var(--spacing-lg)]',\n 'ds:h-14 ds:md:h-16',\n 'theme-dark ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n ].join(' '),\n // `pill` matches alfadocs.com's floating rounded-pill header.\n // The outer header is fully transparent (no border, no bg) and\n // simply provides a top-side gutter so the inner container reads\n // as floating. The inner `data-component=\"public-header-container\"`\n // div is the visible chrome — border, rounded, card background.\n pill: [\n 'ds:bg-transparent',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-md)]',\n 'ds:sm:ps-[var(--spacing-lg)] ds:sm:pe-[var(--spacing-lg)] ds:sm:pt-[var(--spacing-md)]',\n ].join(' '),\n },\n sticky: {\n none: '',\n top: 'ds:sticky ds:top-0',\n // `scroll-up` is sticky but translates off-screen when scrolling\n // down past `stickyOffset` (handled by data-hidden=\"true\") and\n // slides back in when scrolling up.\n 'scroll-up': [\n 'ds:sticky ds:top-0',\n 'ds:data-[hidden=true]:-translate-y-full',\n ].join(' '),\n },\n },\n defaultVariants: { variant: 'pill', sticky: 'none' },\n },\n);\n\n// Inner pill chrome — only rendered when variant === 'pill'. The actual\n// \"header look\" (rounded, border, card surface) lives here so the outer\n// <header> can stay transparent and provide just the floating offset.\nconst pillContainerClasses = [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-md)]',\n 'ds:w-full ds:max-w-[1400px] ds:mx-auto',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:sm:ps-[var(--spacing-lg)] ds:sm:pe-[var(--spacing-lg)]',\n // 76px isn't a kit token; the closest is h-16 (64px) which reads tight\n // against alfadocs.com's chrome — keep an explicit min-block-size so\n // the pill reads as substantial without bloating beyond live reference.\n 'ds:min-h-16 ds:md:min-h-[76px]',\n 'ds:bg-[var(--card)] ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-lg)]',\n // Surface-border hairline shared with `Card`. Tuned to ~14% black\n // (light) / 16% white (dark) at the token level so the edge stays\n // visible against tinted page backgrounds — see `--card-border` in\n // `src/tokens/index.css`. Matches alfadocs.com's slate-200 reference\n // pill border without introducing a pill-specific token.\n 'ds:border ds:border-[color:var(--card-border)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:transition-none',\n].join(' ');\n\nconst navLinkVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'type-body-sm ds:font-medium',\n // Muted-foreground reads as secondary text and matches alfadocs.com's\n // nav-link colour (the reference's slate-grey). `--foreground` was too\n // dark vs the ref.\n 'ds:text-[var(--muted-foreground)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-xs)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:hover:text-[var(--primary)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:data-[active=true]:text-[var(--primary)]',\n 'ds:data-[active=true]:[box-shadow:inset_0_-2px_0_var(--primary)]',\n ].join(' '),\n);\n\n// Trigger styling shares the link look + adds the chevron rotation hook.\nconst dropdownTriggerClasses = [\n 'ds:group ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-body-sm ds:font-medium',\n // Mirror the navLinkVariants colour + inline padding so triggers and\n // plain links share weight, colour and target size.\n 'ds:text-[var(--muted-foreground)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-transparent ds:border-0 ds:cursor-pointer',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:py-[var(--spacing-xs)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:hover:text-[var(--primary)]',\n 'ds:data-[state=open]:text-[var(--primary)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst dropdownChevronClasses = [\n 'ds:size-3 ds:shrink-0',\n 'ds:transition-transform ds:duration-[var(--animation-duration)]',\n 'ds:group-data-[state=open]:rotate-180',\n 'ds:motion-reduce:transition-none',\n].join(' ');\n\nconst dropdownContentVariants = cva(\n [\n // Radix portals Content into the Viewport; sizing + position is\n // governed by the Viewport — keep Content's own paint to padding\n // + inner layout so motion / position stay consistent across\n // trigger placements.\n 'ds:data-[motion=from-start]:animate-in ds:data-[motion=from-start]:fade-in-0',\n 'ds:data-[motion=from-end]:animate-in ds:data-[motion=from-end]:fade-in-0',\n 'ds:data-[motion=to-start]:animate-out ds:data-[motion=to-start]:fade-out-0',\n 'ds:data-[motion=to-end]:animate-out ds:data-[motion=to-end]:fade-out-0',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n {\n variants: {\n wide: {\n true: [\n 'ds:grid ds:grid-cols-2 ds:lg:grid-cols-4',\n 'ds:gap-[var(--spacing-lg)]',\n 'ds:p-[var(--spacing-lg)]',\n 'ds:w-screen ds:max-w-[1400px]',\n ].join(' '),\n false: ['ds:p-[var(--spacing-md)]', 'ds:min-w-[280px]'].join(' '),\n },\n },\n defaultVariants: { wide: false },\n },\n);\n\nconst viewportClasses = [\n // Position the Viewport flush below the pill / nav row. Radix sets\n // `--radix-navigation-menu-viewport-width` and `…-height` so the\n // panel sizes itself to whichever Content is currently active.\n 'ds:absolute ds:top-full ds:start-1/2 ds:-translate-x-1/2',\n 'ds:mt-[var(--spacing-sm)]',\n 'ds:w-[var(--radix-navigation-menu-viewport-width)]',\n 'ds:h-[var(--radix-navigation-menu-viewport-height)]',\n 'ds:overflow-hidden',\n 'ds:bg-[var(--card)] ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-lg)] ds:border ds:border-[color:var(--border)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in-0 ds:data-[state=closed]:fade-out-0',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:origin-top ds:transition-[width,height] ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:animate-none ds:motion-reduce:transition-none',\n].join(' ');\n\nconst cardLinkClasses = [\n 'ds:flex ds:items-start ds:justify-between ds:gap-[var(--spacing-sm)]',\n 'ds:no-underline ds:text-[var(--foreground)]',\n 'ds:pb-[var(--spacing-sm)]',\n // alfadocs.com renders the card header flush against the sub-list with\n // no separator rule — match that by dropping the border-b that earlier\n // versions of this component carried.\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:hover:[&_[data-card-title]]:text-[var(--primary)]',\n 'ds:hover:[&_[data-card-arrow]]:text-[var(--primary)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:group/cardlink',\n].join(' ');\n\nconst cardHeaderStaticClasses = [\n 'ds:pb-[var(--spacing-sm)]',\n // Match the linked-card variant: no separator rule under the title.\n].join(' ');\n\nconst subLinkClasses = [\n 'ds:block ds:no-underline',\n 'type-body-sm ds:font-medium ds:text-[var(--muted-foreground)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n 'ds:hover:bg-[var(--muted)]/30 ds:hover:text-[var(--primary)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:data-[active=true]:text-[var(--primary)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Reduced motion */\n/* ------------------------------------------------------------------ */\n\nfunction usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n });\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n const onChange = (): void => setReduced(mq.matches);\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, []);\n return reduced;\n}\n\n/* ------------------------------------------------------------------ */\n/* Scroll listener */\n/* */\n/* rAF-throttled tracker for two flags on the header root: */\n/* - `data-stuck`: scrollY > stickyOffset (drives the transparent → */\n/* solid fade + the scroll-up shadow lift). */\n/* - `data-hidden`: scrolling DOWN past stickyOffset hides the header */\n/* via transform; scrolling UP slides it back. Only emitted when */\n/* `sticky === 'scroll-up'`. */\n/* ------------------------------------------------------------------ */\n\nfunction useHeaderScrollState(\n enabled: boolean,\n sticky: NonNullable<PublicHeaderProps['sticky']>,\n stickyOffset: number,\n): {\n stuck: boolean;\n hidden: boolean;\n} {\n const [stuck, setStuck] = useState(false);\n const [hidden, setHidden] = useState(false);\n const lastYRef = useRef(0);\n const tickingRef = useRef(false);\n\n useEffect(() => {\n if (!enabled || typeof window === 'undefined') return;\n lastYRef.current = window.scrollY;\n\n const update = (): void => {\n const y = window.scrollY;\n setStuck(y > stickyOffset);\n if (sticky === 'scroll-up') {\n const delta = y - lastYRef.current;\n // Hide on a meaningful downward delta past the offset; show on\n // any upward delta. 4px deadband keeps minor wheel inertia from\n // flapping the bar.\n if (delta > 4 && y > stickyOffset) setHidden(true);\n else if (delta < -4 || y <= stickyOffset) setHidden(false);\n }\n lastYRef.current = y;\n tickingRef.current = false;\n };\n const onScroll = (): void => {\n if (tickingRef.current) return;\n tickingRef.current = true;\n window.requestAnimationFrame(update);\n };\n window.addEventListener('scroll', onScroll, { passive: true });\n // Initial sync so we don't miss state when mounted past the offset.\n update();\n return () => {\n window.removeEventListener('scroll', onScroll);\n };\n }, [enabled, sticky, stickyOffset]);\n\n return { stuck, hidden };\n}\n\n/* ------------------------------------------------------------------ */\n/* Inner content (shared between flat + pill variants) */\n/* ------------------------------------------------------------------ */\n\ninterface InnerContentProps {\n logo: ReactNode;\n homeHref: string;\n resolvedHomeLabel: string;\n resolvedNavLabel: string;\n resolvedMenuLabel: string;\n navSlot?: ReactNode;\n actionsSlot?: ReactNode;\n menuOpen: boolean;\n setMenuOpen: (open: boolean) => void;\n sheetId: string;\n}\n\nfunction InnerContent({\n logo,\n homeHref,\n resolvedHomeLabel,\n resolvedNavLabel,\n resolvedMenuLabel,\n navSlot,\n actionsSlot,\n menuOpen,\n setMenuOpen,\n sheetId,\n}: InnerContentProps): React.JSX.Element {\n return (\n <>\n <a\n href={homeHref}\n aria-label={resolvedHomeLabel}\n className=\"ds:inline-flex ds:items-center ds:rounded-[var(--radius-sm)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]\"\n >\n {logo}\n </a>\n\n {navSlot ? (\n <PublicHeaderSurfaceContext.Provider value=\"desktop\">\n <NavigationMenuPrimitive.Root\n aria-label={resolvedNavLabel}\n // Radix wraps the List in an unstyled `<div>` between Root and\n // <ul>. The `[&>div:first-of-type]:flex` arbitrary selector\n // forces that wrapper into flex so the List's flex-1 actually\n // stretches it across the available width.\n className=\"ds:hidden ds:md:flex ds:relative ds:items-center ds:ms-[var(--spacing-lg)] ds:flex-1 ds:[&>div:first-of-type]:flex ds:[&>div:first-of-type]:flex-1\"\n delayDuration={150}\n >\n <NavigationMenuPrimitive.List className=\"ds:flex ds:flex-1 ds:items-center ds:justify-center ds:gap-[var(--spacing-md)] ds:list-none ds:m-0 ds:ps-0\">\n {navSlot}\n </NavigationMenuPrimitive.List>\n {/* Viewport renders the active panel below the nav row. The\n wrapper centres it horizontally relative to the trigger row;\n Radix sets viewport-width/-height vars so the panel sizes\n to whichever Content is open. */}\n <div className=\"ds:absolute ds:top-full ds:start-0 ds:end-0 ds:flex ds:justify-center ds:pointer-events-none\">\n <div className=\"ds:pointer-events-auto\">\n <NavigationMenuPrimitive.Viewport className={viewportClasses} />\n </div>\n </div>\n </NavigationMenuPrimitive.Root>\n </PublicHeaderSurfaceContext.Provider>\n ) : null}\n\n {actionsSlot ? (\n <div className=\"ds:hidden ds:md:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:ms-auto\">\n {actionsSlot}\n </div>\n ) : null}\n\n {/* Mobile menu trigger (< md). Wired to a Sheet (partial drawer\n from inline-end) so navSlot + actionsSlot collapse there. */}\n <Sheet open={menuOpen} onOpenChange={setMenuOpen}>\n <Sheet.Trigger asChild>\n <IconButton\n size=\"md\"\n intent=\"ghost\"\n className=\"ds:ms-auto ds:md:hidden\"\n icon={\n menuOpen ? <X aria-hidden=\"true\" /> : <Menu aria-hidden=\"true\" />\n }\n aria-controls={sheetId}\n aria-expanded={menuOpen}\n aria-label={resolvedMenuLabel}\n />\n </Sheet.Trigger>\n <Sheet.Content side=\"end\" size=\"md\" id={sheetId}>\n <Sheet.Header>\n <Sheet.Title>{resolvedNavLabel}</Sheet.Title>\n </Sheet.Header>\n <Sheet.Body>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {navSlot ? (\n <PublicHeaderSurfaceContext.Provider value=\"mobile\">\n <nav\n aria-label={resolvedNavLabel}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n data-mobile-nav=\"true\"\n >\n {navSlot}\n </nav>\n </PublicHeaderSurfaceContext.Provider>\n ) : null}\n {actionsSlot ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:mt-[var(--spacing-md)]\">\n {actionsSlot}\n </div>\n ) : null}\n </div>\n </Sheet.Body>\n </Sheet.Content>\n </Sheet>\n </>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nconst PublicHeaderRoot = forwardRef<HTMLElement, PublicHeaderProps>(\n (\n {\n logo,\n homeHref = '/',\n homeLabel,\n navSlot,\n actionsSlot,\n variant = 'pill',\n sticky = 'none',\n stickyOffset = 80,\n menuLabel,\n navLabel,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const reduced = usePrefersReducedMotion();\n const autoId = useId();\n const sheetId = `${id ?? autoId}-sheet`;\n const [menuOpen, setMenuOpen] = useState(false);\n\n // Scroll listener is only active when `transparent` or `scroll-up`\n // need it. Hidden state is disabled under reduced motion (the bar\n // stays visible — translating off-screen is precisely the motion\n // class of user the preference targets).\n const scrollEnabled = variant === 'transparent' || sticky === 'scroll-up';\n const { stuck, hidden } = useHeaderScrollState(\n scrollEnabled,\n sticky,\n stickyOffset,\n );\n const effectiveHidden = reduced ? false : hidden;\n\n const openMenu = useCallback((): void => setMenuOpen(true), []);\n const closeMenu = useCallback((): void => setMenuOpen(false), []);\n\n useImperativeHandle(\n ref as React.Ref<PublicHeaderHandle> | null | undefined,\n () => ({\n openMenu,\n closeMenu,\n getMenuOpen: () => menuOpen,\n }),\n [openMenu, closeMenu, menuOpen],\n );\n\n const resolvedHomeLabel =\n homeLabel ?? t('publicHeader.homeLabel', 'AlfaDocs — home');\n const resolvedNavLabel =\n navLabel ?? t('publicHeader.primaryNavLabel', 'Primary');\n const resolvedMenuLabel =\n menuLabel ??\n (menuOpen\n ? t('publicHeader.closeMenu', 'Close menu')\n : t('publicHeader.openMenu', 'Open menu'));\n\n const innerProps: InnerContentProps = {\n logo,\n homeHref,\n resolvedHomeLabel,\n resolvedNavLabel,\n resolvedMenuLabel,\n navSlot,\n actionsSlot,\n menuOpen,\n setMenuOpen,\n sheetId,\n };\n\n return (\n <header\n {...rest}\n data-component=\"public-header\"\n data-component-id={id}\n data-variant={variant}\n data-stuck={stuck ? 'true' : undefined}\n data-hidden={effectiveHidden ? 'true' : undefined}\n data-state={reduced ? 'reduced-motion' : undefined}\n className={rootVariants({ variant, sticky, className })}\n >\n {variant === 'pill' ? (\n <div\n data-component=\"public-header-container\"\n className={pillContainerClasses}\n >\n <InnerContent {...innerProps} />\n </div>\n ) : (\n <InnerContent {...innerProps} />\n )}\n </header>\n );\n },\n);\nPublicHeaderRoot.displayName = 'PublicHeader';\n\n/* ------------------------------------------------------------------ */\n/* NavLink */\n/* ------------------------------------------------------------------ */\n\nconst PublicHeaderNavLink = forwardRef<\n HTMLAnchorElement,\n PublicHeaderNavLinkProps\n>(({ active, className, children, ...rest }, ref) => {\n const surface = useContext(PublicHeaderSurfaceContext);\n // Desktop: NavigationMenu.Item + .Link give Radix the keyboard / focus\n // semantics across the trigger row. We render the actual <a> via\n // asChild so consumers can swap in router links transparently.\n // Mobile: plain <a> inside the Sheet's <nav> — no Radix Root in scope,\n // so we render outside the NavigationMenu primitive.\n if (surface === 'mobile') {\n return (\n <a\n ref={ref}\n {...rest}\n data-active={active ? 'true' : undefined}\n aria-current={active ? 'page' : undefined}\n className={[\n 'ds:block ds:no-underline',\n 'type-body-sm ds:font-medium',\n 'ds:text-[var(--foreground)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]',\n 'ds:hover:bg-[var(--muted)]/30 ds:hover:text-[var(--primary)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:data-[active=true]:text-[var(--primary)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {children}\n </a>\n );\n }\n return (\n <NavigationMenuPrimitive.Item>\n <NavigationMenuPrimitive.Link asChild active={active}>\n <a\n ref={ref}\n {...rest}\n data-active={active ? 'true' : undefined}\n aria-current={active ? 'page' : undefined}\n className={[navLinkVariants(), className].filter(Boolean).join(' ')}\n >\n {children}\n </a>\n </NavigationMenuPrimitive.Link>\n </NavigationMenuPrimitive.Item>\n );\n});\nPublicHeaderNavLink.displayName = 'PublicHeader.NavLink';\n\n/* ------------------------------------------------------------------ */\n/* NavDropdown */\n/* ------------------------------------------------------------------ */\n\nconst PublicHeaderNavDropdown = forwardRef<\n ElementRef<typeof NavigationMenuPrimitive.Trigger>,\n PublicHeaderNavDropdownProps\n>(({ label, wide = false, children, id }, ref) => {\n const surface = useContext(PublicHeaderSurfaceContext);\n if (surface === 'mobile') {\n // <details>/<summary> gives semantic disclosure for free —\n // Enter/Space toggles, summary is focusable, content collapses\n // when not open. No JS needed.\n return (\n <details\n id={id}\n data-component=\"public-header-nav-dropdown\"\n className=\"ds:group ds:border-b ds:border-[color:var(--border)]\"\n >\n <summary\n className={[\n 'ds:flex ds:items-center ds:justify-between ds:cursor-pointer',\n 'type-body-sm ds:font-medium ds:text-[var(--foreground)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:list-none ds:[&::-webkit-details-marker]:hidden',\n ].join(' ')}\n >\n <span>{label}</span>\n <ChevronDown\n aria-hidden=\"true\"\n className=\"ds:size-3 ds:shrink-0 ds:transition-transform ds:duration-[var(--animation-duration)] ds:group-[[open]]:rotate-180 ds:motion-reduce:transition-none\"\n />\n </summary>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]\">\n {children}\n </div>\n </details>\n );\n }\n return (\n <NavigationMenuPrimitive.Item data-component=\"public-header-nav-dropdown\">\n <NavigationMenuPrimitive.Trigger\n ref={ref}\n id={id}\n className={dropdownTriggerClasses}\n // Radix already wires aria-expanded + aria-controls. The\n // group / data-state hooks let the chevron rotate via Tailwind.\n >\n {label}\n <ChevronDown aria-hidden=\"true\" className={dropdownChevronClasses} />\n </NavigationMenuPrimitive.Trigger>\n <NavigationMenuPrimitive.Content\n className={dropdownContentVariants({ wide })}\n >\n {children}\n </NavigationMenuPrimitive.Content>\n </NavigationMenuPrimitive.Item>\n );\n});\nPublicHeaderNavDropdown.displayName = 'PublicHeader.NavDropdown';\n\n/* ------------------------------------------------------------------ */\n/* DropdownCard */\n/* ------------------------------------------------------------------ */\n\nconst PublicHeaderDropdownCard = forwardRef<\n HTMLDivElement,\n PublicHeaderDropdownCardProps\n>(({ href, title, subtitle, children }, ref) => {\n const surface = useContext(PublicHeaderSurfaceContext);\n // The Card header. In mobile we render a plain <a> when href is set —\n // no Radix Link wrapper because the NavigationMenu root isn't in scope\n // inside the Sheet.\n const titleNode = (\n <span\n data-card-title\n className=\"type-title-card ds:text-[var(--foreground)] ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none\"\n >\n {title}\n </span>\n );\n const subtitleNode = subtitle ? (\n <span className=\"type-body-sm ds:text-[var(--muted-foreground)]\">\n {subtitle}\n </span>\n ) : null;\n\n const arrow = (\n <span\n data-card-arrow\n aria-hidden=\"true\"\n className=\"ds:flex-none ds:text-[var(--muted-foreground)] ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none ds:rtl:-scale-x-100\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n </span>\n );\n\n const linkInner = (\n <>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {titleNode}\n {subtitleNode}\n </div>\n {arrow}\n </>\n );\n\n let header: React.JSX.Element;\n if (href) {\n if (surface === 'mobile') {\n header = (\n <a href={href} className={cardLinkClasses}>\n {linkInner}\n </a>\n );\n } else {\n header = (\n <NavigationMenuPrimitive.Link asChild>\n <a href={href} className={cardLinkClasses}>\n {linkInner}\n </a>\n </NavigationMenuPrimitive.Link>\n );\n }\n } else {\n header = (\n <div className={cardHeaderStaticClasses}>\n {titleNode}\n {subtitle ? (\n <span className=\"ds:block type-body-sm ds:text-[var(--muted-foreground)] ds:mt-[var(--spacing-xs)]\">\n {subtitle}\n </span>\n ) : null}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n data-component=\"public-header-dropdown-card\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {header}\n {children ? (\n <ul className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:list-none ds:m-0 ds:ps-0\">\n {children}\n </ul>\n ) : null}\n </div>\n );\n});\nPublicHeaderDropdownCard.displayName = 'PublicHeader.DropdownCard';\n\n/* ------------------------------------------------------------------ */\n/* DropdownLink */\n/* ------------------------------------------------------------------ */\n\nconst PublicHeaderDropdownLink = forwardRef<\n HTMLAnchorElement,\n PublicHeaderDropdownLinkProps\n>(({ active, className, children, ...rest }, ref) => {\n const surface = useContext(PublicHeaderSurfaceContext);\n const anchor = (\n <a\n ref={ref}\n {...rest}\n data-active={active ? 'true' : undefined}\n aria-current={active ? 'page' : undefined}\n className={[subLinkClasses, className].filter(Boolean).join(' ')}\n >\n {children}\n </a>\n );\n return (\n <li data-component=\"public-header-dropdown-link\">\n {surface === 'mobile' ? (\n anchor\n ) : (\n <NavigationMenuPrimitive.Link asChild active={active}>\n {anchor}\n </NavigationMenuPrimitive.Link>\n )}\n </li>\n );\n});\nPublicHeaderDropdownLink.displayName = 'PublicHeader.DropdownLink';\n\n/* ------------------------------------------------------------------ */\n/* Public surface */\n/* ------------------------------------------------------------------ */\n\nexport const PublicHeader = Object.assign(PublicHeaderRoot, {\n NavLink: PublicHeaderNavLink,\n NavDropdown: PublicHeaderNavDropdown,\n DropdownCard: PublicHeaderDropdownCard,\n DropdownLink: PublicHeaderDropdownLink,\n});\n","import type { AgentAdapter } from '../../agent/types';\nimport type { PublicHeaderHandle } from './public-header';\n\nexport const publicHeaderAgent: AgentAdapter<PublicHeaderHandle> = {\n id: 'public-header',\n capabilities: ['open', 'close'],\n state: {\n menuOpen: {\n type: 'boolean',\n description: 'Whether the mobile drawer is currently open.',\n read: (handle) => handle.getMenuOpen(),\n },\n },\n actions: {\n open_menu: {\n safety: 'read',\n description: 'Open the mobile drawer.',\n invoke: (handle) => {\n handle.openMenu();\n },\n },\n close_menu: {\n safety: 'read',\n description: 'Close the mobile drawer.',\n invoke: (handle) => {\n handle.closeMenu();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'public-header' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on PublicHeader.',\n },\n },\n};\n"],"names":["PublicHeaderSurfaceContext","createContext","rootVariants","cva","pillContainerClasses","navLinkVariants","dropdownTriggerClasses","dropdownChevronClasses","dropdownContentVariants","viewportClasses","cardLinkClasses","cardHeaderStaticClasses","subLinkClasses","usePrefersReducedMotion","reduced","setReduced","useState","useEffect","mq","onChange","useHeaderScrollState","enabled","sticky","stickyOffset","stuck","setStuck","hidden","setHidden","lastYRef","useRef","tickingRef","update","y","delta","onScroll","InnerContent","logo","homeHref","resolvedHomeLabel","resolvedNavLabel","resolvedMenuLabel","navSlot","actionsSlot","menuOpen","setMenuOpen","sheetId","jsxs","Fragment","jsx","NavigationMenuPrimitive","Sheet","IconButton","X","Menu","PublicHeaderRoot","forwardRef","homeLabel","variant","menuLabel","navLabel","id","className","rest","ref","t","useTranslation","autoId","useId","scrollEnabled","effectiveHidden","openMenu","useCallback","closeMenu","useImperativeHandle","innerProps","PublicHeaderNavLink","active","children","useContext","PublicHeaderNavDropdown","label","wide","ChevronDown","PublicHeaderDropdownCard","href","title","subtitle","surface","titleNode","linkInner","header","PublicHeaderDropdownLink","anchor","PublicHeader","publicHeaderAgent","handle"],"mappings":"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"}