@ugurdemirel/landcraft 0.1.9 → 0.1.11

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 (333) hide show
  1. package/dist/cjs/components/Badge.cjs +2 -0
  2. package/dist/cjs/components/Badge.cjs.map +1 -0
  3. package/dist/cjs/components/Blog/BlogCard.cjs +2 -0
  4. package/dist/cjs/components/Blog/BlogCard.cjs.map +1 -0
  5. package/dist/cjs/components/Blog/BlogSection.cjs +2 -0
  6. package/dist/cjs/components/Blog/BlogSection.cjs.map +1 -0
  7. package/dist/cjs/components/Blog/parts.cjs +2 -0
  8. package/dist/cjs/components/Blog/parts.cjs.map +1 -0
  9. package/dist/cjs/components/Blog/variants/Card.cjs +2 -0
  10. package/dist/cjs/components/Blog/variants/Card.cjs.map +1 -0
  11. package/dist/cjs/components/Blog/variants/Row.cjs +2 -0
  12. package/dist/cjs/components/Blog/variants/Row.cjs.map +1 -0
  13. package/dist/cjs/components/Button.cjs +2 -0
  14. package/dist/cjs/components/Button.cjs.map +1 -0
  15. package/dist/cjs/components/CTA/CTA.cjs +2 -0
  16. package/dist/cjs/components/CTA/CTA.cjs.map +1 -0
  17. package/dist/cjs/components/CTA/parts.cjs +2 -0
  18. package/dist/cjs/components/CTA/parts.cjs.map +1 -0
  19. package/dist/cjs/components/CTA/variants/Inverse.cjs +3 -0
  20. package/dist/cjs/components/CTA/variants/Inverse.cjs.map +1 -0
  21. package/dist/cjs/components/CTA/variants/Panel.cjs +3 -0
  22. package/dist/cjs/components/CTA/variants/Panel.cjs.map +1 -0
  23. package/dist/cjs/components/CTA/variants/Surface.cjs +2 -0
  24. package/dist/cjs/components/CTA/variants/Surface.cjs.map +1 -0
  25. package/dist/cjs/components/Card.cjs +2 -0
  26. package/dist/cjs/components/Card.cjs.map +1 -0
  27. package/dist/cjs/components/Container.cjs +2 -0
  28. package/dist/cjs/components/Container.cjs.map +1 -0
  29. package/dist/cjs/components/FAQ/FAQ.cjs +2 -0
  30. package/dist/cjs/components/FAQ/FAQ.cjs.map +1 -0
  31. package/dist/cjs/components/FAQ/parts.cjs +3 -0
  32. package/dist/cjs/components/FAQ/parts.cjs.map +1 -0
  33. package/dist/cjs/components/FAQ/variants/Accordion.cjs +3 -0
  34. package/dist/cjs/components/FAQ/variants/Accordion.cjs.map +1 -0
  35. package/dist/cjs/components/FAQ/variants/Cards.cjs +2 -0
  36. package/dist/cjs/components/FAQ/variants/Cards.cjs.map +1 -0
  37. package/dist/cjs/components/FAQ/variants/Split.cjs +2 -0
  38. package/dist/cjs/components/FAQ/variants/Split.cjs.map +1 -0
  39. package/dist/cjs/components/Features/FeatureCard.cjs +2 -0
  40. package/dist/cjs/components/Features/FeatureCard.cjs.map +1 -0
  41. package/dist/cjs/components/Features/FeatureGrid.cjs +2 -0
  42. package/dist/cjs/components/Features/FeatureGrid.cjs.map +1 -0
  43. package/dist/cjs/components/Features/parts.cjs +2 -0
  44. package/dist/cjs/components/Features/parts.cjs.map +1 -0
  45. package/dist/cjs/components/Features/variants/Bento.cjs +2 -0
  46. package/dist/cjs/components/Features/variants/Bento.cjs.map +1 -0
  47. package/dist/cjs/components/Features/variants/Columns.cjs +2 -0
  48. package/dist/cjs/components/Features/variants/Columns.cjs.map +1 -0
  49. package/dist/cjs/components/Features/variants/EditorialRows.cjs +2 -0
  50. package/dist/cjs/components/Features/variants/EditorialRows.cjs.map +1 -0
  51. package/dist/cjs/components/Footer/Footer.cjs +2 -0
  52. package/dist/cjs/components/Footer/Footer.cjs.map +1 -0
  53. package/dist/cjs/components/Footer/parts.cjs +2 -0
  54. package/dist/cjs/components/Footer/parts.cjs.map +1 -0
  55. package/dist/cjs/components/Footer/variants/Classic.cjs +2 -0
  56. package/dist/cjs/components/Footer/variants/Classic.cjs.map +1 -0
  57. package/dist/cjs/components/Footer/variants/Editorial.cjs +2 -0
  58. package/dist/cjs/components/Footer/variants/Editorial.cjs.map +1 -0
  59. package/dist/cjs/components/Footer/variants/Minimal.cjs +2 -0
  60. package/dist/cjs/components/Footer/variants/Minimal.cjs.map +1 -0
  61. package/dist/cjs/components/Hero/Hero.cjs +2 -0
  62. package/dist/cjs/components/Hero/Hero.cjs.map +1 -0
  63. package/dist/cjs/components/Hero/parts.cjs +2 -0
  64. package/dist/cjs/components/Hero/parts.cjs.map +1 -0
  65. package/dist/cjs/components/Hero/variants/Centered.cjs +2 -0
  66. package/dist/cjs/components/Hero/variants/Centered.cjs.map +1 -0
  67. package/dist/cjs/components/Hero/variants/Split.cjs +2 -0
  68. package/dist/cjs/components/Hero/variants/Split.cjs.map +1 -0
  69. package/dist/cjs/components/Hero/variants/Statement.cjs +3 -0
  70. package/dist/cjs/components/Hero/variants/Statement.cjs.map +1 -0
  71. package/dist/cjs/components/LanguageSwitcher/LanguageSwitcher.cjs +3 -0
  72. package/dist/cjs/components/LanguageSwitcher/LanguageSwitcher.cjs.map +1 -0
  73. package/dist/cjs/components/LanguageSwitcher/parts.cjs +3 -0
  74. package/dist/cjs/components/LanguageSwitcher/parts.cjs.map +1 -0
  75. package/dist/cjs/components/LanguageSwitcher/useLanguageSwitcher.cjs +3 -0
  76. package/dist/cjs/components/LanguageSwitcher/useLanguageSwitcher.cjs.map +1 -0
  77. package/dist/cjs/components/LanguageSwitcher/variants/Dropdown.cjs +3 -0
  78. package/dist/cjs/components/LanguageSwitcher/variants/Dropdown.cjs.map +1 -0
  79. package/dist/cjs/components/LanguageSwitcher/variants/Modal.cjs +3 -0
  80. package/dist/cjs/components/LanguageSwitcher/variants/Modal.cjs.map +1 -0
  81. package/dist/cjs/components/LogoCloud/LogoCloud.cjs +2 -0
  82. package/dist/cjs/components/LogoCloud/LogoCloud.cjs.map +1 -0
  83. package/dist/cjs/components/LogoCloud/parts.cjs +2 -0
  84. package/dist/cjs/components/LogoCloud/parts.cjs.map +1 -0
  85. package/dist/cjs/components/LogoCloud/variants/Marquee.cjs +2 -0
  86. package/dist/cjs/components/LogoCloud/variants/Marquee.cjs.map +1 -0
  87. package/dist/cjs/components/LogoCloud/variants/Quiet.cjs +2 -0
  88. package/dist/cjs/components/LogoCloud/variants/Quiet.cjs.map +1 -0
  89. package/dist/cjs/components/LogoCloud/variants/Strip.cjs +2 -0
  90. package/dist/cjs/components/LogoCloud/variants/Strip.cjs.map +1 -0
  91. package/dist/cjs/components/MegaMenu/MegaMenu.cjs +3 -0
  92. package/dist/cjs/components/MegaMenu/MegaMenu.cjs.map +1 -0
  93. package/dist/cjs/components/Modal.cjs +3 -0
  94. package/dist/cjs/components/Modal.cjs.map +1 -0
  95. package/dist/cjs/components/Navbar/Navbar.cjs +3 -0
  96. package/dist/cjs/components/Navbar/Navbar.cjs.map +1 -0
  97. package/dist/cjs/components/Newsletter/Newsletter.cjs +2 -0
  98. package/dist/cjs/components/Newsletter/Newsletter.cjs.map +1 -0
  99. package/dist/cjs/components/Newsletter/parts.cjs +2 -0
  100. package/dist/cjs/components/Newsletter/parts.cjs.map +1 -0
  101. package/dist/cjs/components/Newsletter/useNewsletterForm.cjs +3 -0
  102. package/dist/cjs/components/Newsletter/useNewsletterForm.cjs.map +1 -0
  103. package/dist/cjs/components/Newsletter/variants/Card.cjs +3 -0
  104. package/dist/cjs/components/Newsletter/variants/Card.cjs.map +1 -0
  105. package/dist/cjs/components/Newsletter/variants/Inline.cjs +3 -0
  106. package/dist/cjs/components/Newsletter/variants/Inline.cjs.map +1 -0
  107. package/dist/cjs/components/Newsletter/variants/Underline.cjs +3 -0
  108. package/dist/cjs/components/Newsletter/variants/Underline.cjs.map +1 -0
  109. package/dist/cjs/components/Pricing/Pricing.cjs +3 -0
  110. package/dist/cjs/components/Pricing/Pricing.cjs.map +1 -0
  111. package/dist/cjs/components/Pricing/parts.cjs +3 -0
  112. package/dist/cjs/components/Pricing/parts.cjs.map +1 -0
  113. package/dist/cjs/components/Pricing/variants/Bento.cjs +2 -0
  114. package/dist/cjs/components/Pricing/variants/Bento.cjs.map +1 -0
  115. package/dist/cjs/components/Pricing/variants/Cards.cjs +2 -0
  116. package/dist/cjs/components/Pricing/variants/Cards.cjs.map +1 -0
  117. package/dist/cjs/components/Pricing/variants/Compact.cjs +2 -0
  118. package/dist/cjs/components/Pricing/variants/Compact.cjs.map +1 -0
  119. package/dist/cjs/components/Prose.cjs +2 -0
  120. package/dist/cjs/components/Prose.cjs.map +1 -0
  121. package/dist/cjs/components/Section.cjs +2 -0
  122. package/dist/cjs/components/Section.cjs.map +1 -0
  123. package/dist/cjs/components/Slot.cjs +2 -0
  124. package/dist/cjs/components/Slot.cjs.map +1 -0
  125. package/dist/cjs/components/Stats/Stats.cjs +2 -0
  126. package/dist/cjs/components/Stats/Stats.cjs.map +1 -0
  127. package/dist/cjs/components/Stats/parts.cjs +2 -0
  128. package/dist/cjs/components/Stats/parts.cjs.map +1 -0
  129. package/dist/cjs/components/Stats/variants/Cells.cjs +2 -0
  130. package/dist/cjs/components/Stats/variants/Cells.cjs.map +1 -0
  131. package/dist/cjs/components/Stats/variants/Editorial.cjs +2 -0
  132. package/dist/cjs/components/Stats/variants/Editorial.cjs.map +1 -0
  133. package/dist/cjs/components/Stats/variants/Hairline.cjs +2 -0
  134. package/dist/cjs/components/Stats/variants/Hairline.cjs.map +1 -0
  135. package/dist/cjs/components/Stats/variants/Ticker.cjs +2 -0
  136. package/dist/cjs/components/Stats/variants/Ticker.cjs.map +1 -0
  137. package/dist/cjs/components/Testimonials/TestimonialCard.cjs +2 -0
  138. package/dist/cjs/components/Testimonials/TestimonialCard.cjs.map +1 -0
  139. package/dist/cjs/components/Testimonials/Testimonials.cjs +2 -0
  140. package/dist/cjs/components/Testimonials/Testimonials.cjs.map +1 -0
  141. package/dist/cjs/components/Testimonials/parts.cjs +2 -0
  142. package/dist/cjs/components/Testimonials/parts.cjs.map +1 -0
  143. package/dist/cjs/components/Testimonials/variants/Carousel.cjs +3 -0
  144. package/dist/cjs/components/Testimonials/variants/Carousel.cjs.map +1 -0
  145. package/dist/cjs/components/Testimonials/variants/Grid.cjs +2 -0
  146. package/dist/cjs/components/Testimonials/variants/Grid.cjs.map +1 -0
  147. package/dist/cjs/components/Testimonials/variants/Marquee.cjs +2 -0
  148. package/dist/cjs/components/Testimonials/variants/Marquee.cjs.map +1 -0
  149. package/dist/cjs/icons.cjs +2 -0
  150. package/dist/cjs/icons.cjs.map +1 -0
  151. package/dist/cjs/index.cjs +2 -0
  152. package/dist/cjs/index.cjs.map +1 -0
  153. package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.cjs +2 -0
  154. package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.cjs.map +1 -0
  155. package/dist/cjs/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.cjs +2 -0
  156. package/dist/cjs/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -0
  157. package/dist/cjs/utils/cn.cjs +2 -0
  158. package/dist/cjs/utils/cn.cjs.map +1 -0
  159. package/dist/cjs/utils/contrast.cjs +2 -0
  160. package/dist/cjs/utils/contrast.cjs.map +1 -0
  161. package/dist/cjs/utils/iso2Flag.cjs +8 -0
  162. package/dist/cjs/utils/iso2Flag.cjs.map +1 -0
  163. package/dist/cjs/utils/useTokenForeground.cjs +3 -0
  164. package/dist/cjs/utils/useTokenForeground.cjs.map +1 -0
  165. package/dist/es/components/Badge.js +51 -0
  166. package/dist/es/components/Badge.js.map +1 -0
  167. package/dist/es/components/Blog/BlogCard.js +12 -0
  168. package/dist/es/components/Blog/BlogCard.js.map +1 -0
  169. package/dist/es/components/Blog/BlogSection.js +65 -0
  170. package/dist/es/components/Blog/BlogSection.js.map +1 -0
  171. package/dist/es/components/Blog/parts.js +29 -0
  172. package/dist/es/components/Blog/parts.js.map +1 -0
  173. package/dist/es/components/Blog/variants/Card.js +46 -0
  174. package/dist/es/components/Blog/variants/Card.js.map +1 -0
  175. package/dist/es/components/Blog/variants/Row.js +33 -0
  176. package/dist/es/components/Blog/variants/Row.js.map +1 -0
  177. package/dist/es/components/Button.js +73 -0
  178. package/dist/es/components/Button.js.map +1 -0
  179. package/dist/es/components/CTA/CTA.js +11 -0
  180. package/dist/es/components/CTA/CTA.js.map +1 -0
  181. package/dist/es/components/CTA/parts.js +26 -0
  182. package/dist/es/components/CTA/parts.js.map +1 -0
  183. package/dist/es/components/CTA/variants/Inverse.js +47 -0
  184. package/dist/es/components/CTA/variants/Inverse.js.map +1 -0
  185. package/dist/es/components/CTA/variants/Panel.js +63 -0
  186. package/dist/es/components/CTA/variants/Panel.js.map +1 -0
  187. package/dist/es/components/CTA/variants/Surface.js +28 -0
  188. package/dist/es/components/CTA/variants/Surface.js.map +1 -0
  189. package/dist/es/components/Card.js +63 -0
  190. package/dist/es/components/Card.js.map +1 -0
  191. package/dist/es/components/Container.js +58 -0
  192. package/dist/es/components/Container.js.map +1 -0
  193. package/dist/es/components/FAQ/FAQ.js +40 -0
  194. package/dist/es/components/FAQ/FAQ.js.map +1 -0
  195. package/dist/es/components/FAQ/parts.js +56 -0
  196. package/dist/es/components/FAQ/parts.js.map +1 -0
  197. package/dist/es/components/FAQ/variants/Accordion.js +43 -0
  198. package/dist/es/components/FAQ/variants/Accordion.js.map +1 -0
  199. package/dist/es/components/FAQ/variants/Cards.js +33 -0
  200. package/dist/es/components/FAQ/variants/Cards.js.map +1 -0
  201. package/dist/es/components/FAQ/variants/Split.js +35 -0
  202. package/dist/es/components/FAQ/variants/Split.js.map +1 -0
  203. package/dist/es/components/Features/FeatureCard.js +40 -0
  204. package/dist/es/components/Features/FeatureCard.js.map +1 -0
  205. package/dist/es/components/Features/FeatureGrid.js +13 -0
  206. package/dist/es/components/Features/FeatureGrid.js.map +1 -0
  207. package/dist/es/components/Features/parts.js +17 -0
  208. package/dist/es/components/Features/parts.js.map +1 -0
  209. package/dist/es/components/Features/variants/Bento.js +27 -0
  210. package/dist/es/components/Features/variants/Bento.js.map +1 -0
  211. package/dist/es/components/Features/variants/Columns.js +13 -0
  212. package/dist/es/components/Features/variants/Columns.js.map +1 -0
  213. package/dist/es/components/Features/variants/EditorialRows.js +25 -0
  214. package/dist/es/components/Features/variants/EditorialRows.js.map +1 -0
  215. package/dist/es/components/Footer/Footer.js +10 -0
  216. package/dist/es/components/Footer/Footer.js.map +1 -0
  217. package/dist/es/components/Footer/parts.js +65 -0
  218. package/dist/es/components/Footer/parts.js.map +1 -0
  219. package/dist/es/components/Footer/variants/Classic.js +43 -0
  220. package/dist/es/components/Footer/variants/Classic.js.map +1 -0
  221. package/dist/es/components/Footer/variants/Editorial.js +39 -0
  222. package/dist/es/components/Footer/variants/Editorial.js.map +1 -0
  223. package/dist/es/components/Footer/variants/Minimal.js +20 -0
  224. package/dist/es/components/Footer/variants/Minimal.js.map +1 -0
  225. package/dist/es/components/Hero/Hero.js +11 -0
  226. package/dist/es/components/Hero/Hero.js.map +1 -0
  227. package/dist/es/components/Hero/parts.js +21 -0
  228. package/dist/es/components/Hero/parts.js.map +1 -0
  229. package/dist/es/components/Hero/variants/Centered.js +41 -0
  230. package/dist/es/components/Hero/variants/Centered.js.map +1 -0
  231. package/dist/es/components/Hero/variants/Split.js +36 -0
  232. package/dist/es/components/Hero/variants/Split.js.map +1 -0
  233. package/dist/es/components/Hero/variants/Statement.js +46 -0
  234. package/dist/es/components/Hero/variants/Statement.js.map +1 -0
  235. package/dist/es/components/LanguageSwitcher/LanguageSwitcher.js +34 -0
  236. package/dist/es/components/LanguageSwitcher/LanguageSwitcher.js.map +1 -0
  237. package/dist/es/components/LanguageSwitcher/parts.js +107 -0
  238. package/dist/es/components/LanguageSwitcher/parts.js.map +1 -0
  239. package/dist/es/components/LanguageSwitcher/useLanguageSwitcher.js +13 -0
  240. package/dist/es/components/LanguageSwitcher/useLanguageSwitcher.js.map +1 -0
  241. package/dist/es/components/LanguageSwitcher/variants/Dropdown.js +87 -0
  242. package/dist/es/components/LanguageSwitcher/variants/Dropdown.js.map +1 -0
  243. package/dist/es/components/LanguageSwitcher/variants/Modal.js +54 -0
  244. package/dist/es/components/LanguageSwitcher/variants/Modal.js.map +1 -0
  245. package/dist/es/components/LogoCloud/LogoCloud.js +13 -0
  246. package/dist/es/components/LogoCloud/LogoCloud.js.map +1 -0
  247. package/dist/es/components/LogoCloud/parts.js +22 -0
  248. package/dist/es/components/LogoCloud/parts.js.map +1 -0
  249. package/dist/es/components/LogoCloud/variants/Marquee.js +18 -0
  250. package/dist/es/components/LogoCloud/variants/Marquee.js.map +1 -0
  251. package/dist/es/components/LogoCloud/variants/Quiet.js +15 -0
  252. package/dist/es/components/LogoCloud/variants/Quiet.js.map +1 -0
  253. package/dist/es/components/LogoCloud/variants/Strip.js +15 -0
  254. package/dist/es/components/LogoCloud/variants/Strip.js.map +1 -0
  255. package/dist/es/components/MegaMenu/MegaMenu.js +371 -0
  256. package/dist/es/components/MegaMenu/MegaMenu.js.map +1 -0
  257. package/dist/es/components/Modal.js +81 -0
  258. package/dist/es/components/Modal.js.map +1 -0
  259. package/dist/es/components/Navbar/Navbar.js +135 -0
  260. package/dist/es/components/Navbar/Navbar.js.map +1 -0
  261. package/dist/es/components/Newsletter/Newsletter.js +13 -0
  262. package/dist/es/components/Newsletter/Newsletter.js.map +1 -0
  263. package/dist/es/components/Newsletter/parts.js +18 -0
  264. package/dist/es/components/Newsletter/parts.js.map +1 -0
  265. package/dist/es/components/Newsletter/useNewsletterForm.js +20 -0
  266. package/dist/es/components/Newsletter/useNewsletterForm.js.map +1 -0
  267. package/dist/es/components/Newsletter/variants/Card.js +55 -0
  268. package/dist/es/components/Newsletter/variants/Card.js.map +1 -0
  269. package/dist/es/components/Newsletter/variants/Inline.js +51 -0
  270. package/dist/es/components/Newsletter/variants/Inline.js.map +1 -0
  271. package/dist/es/components/Newsletter/variants/Underline.js +51 -0
  272. package/dist/es/components/Newsletter/variants/Underline.js.map +1 -0
  273. package/dist/es/components/Pricing/Pricing.js +32 -0
  274. package/dist/es/components/Pricing/Pricing.js.map +1 -0
  275. package/dist/es/components/Pricing/parts.js +119 -0
  276. package/dist/es/components/Pricing/parts.js.map +1 -0
  277. package/dist/es/components/Pricing/variants/Bento.js +47 -0
  278. package/dist/es/components/Pricing/variants/Bento.js.map +1 -0
  279. package/dist/es/components/Pricing/variants/Cards.js +49 -0
  280. package/dist/es/components/Pricing/variants/Cards.js.map +1 -0
  281. package/dist/es/components/Pricing/variants/Compact.js +49 -0
  282. package/dist/es/components/Pricing/variants/Compact.js.map +1 -0
  283. package/dist/es/components/Prose.js +36 -0
  284. package/dist/es/components/Prose.js.map +1 -0
  285. package/dist/es/components/Section.js +69 -0
  286. package/dist/es/components/Section.js.map +1 -0
  287. package/dist/es/components/Slot.js +33 -0
  288. package/dist/es/components/Slot.js.map +1 -0
  289. package/dist/es/components/Stats/Stats.js +14 -0
  290. package/dist/es/components/Stats/Stats.js.map +1 -0
  291. package/dist/es/components/Stats/parts.js +32 -0
  292. package/dist/es/components/Stats/parts.js.map +1 -0
  293. package/dist/es/components/Stats/variants/Cells.js +28 -0
  294. package/dist/es/components/Stats/variants/Cells.js.map +1 -0
  295. package/dist/es/components/Stats/variants/Editorial.js +32 -0
  296. package/dist/es/components/Stats/variants/Editorial.js.map +1 -0
  297. package/dist/es/components/Stats/variants/Hairline.js +25 -0
  298. package/dist/es/components/Stats/variants/Hairline.js.map +1 -0
  299. package/dist/es/components/Stats/variants/Ticker.js +29 -0
  300. package/dist/es/components/Stats/variants/Ticker.js.map +1 -0
  301. package/dist/es/components/Testimonials/TestimonialCard.js +50 -0
  302. package/dist/es/components/Testimonials/TestimonialCard.js.map +1 -0
  303. package/dist/es/components/Testimonials/Testimonials.js +13 -0
  304. package/dist/es/components/Testimonials/Testimonials.js.map +1 -0
  305. package/dist/es/components/Testimonials/parts.js +5 -0
  306. package/dist/es/components/Testimonials/parts.js.map +1 -0
  307. package/dist/es/components/Testimonials/variants/Carousel.js +83 -0
  308. package/dist/es/components/Testimonials/variants/Carousel.js.map +1 -0
  309. package/dist/es/components/Testimonials/variants/Grid.js +12 -0
  310. package/dist/es/components/Testimonials/variants/Grid.js.map +1 -0
  311. package/dist/es/components/Testimonials/variants/Marquee.js +15 -0
  312. package/dist/es/components/Testimonials/variants/Marquee.js.map +1 -0
  313. package/dist/es/icons.js +158 -0
  314. package/dist/es/icons.js.map +1 -0
  315. package/dist/es/index.js +106 -0
  316. package/dist/es/index.js.map +1 -0
  317. package/dist/es/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +17 -0
  318. package/dist/es/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
  319. package/dist/es/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.js +2266 -0
  320. package/dist/es/node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  321. package/dist/es/utils/cn.js +9 -0
  322. package/dist/es/utils/cn.js.map +1 -0
  323. package/dist/es/utils/contrast.js +48 -0
  324. package/dist/es/utils/contrast.js.map +1 -0
  325. package/dist/es/utils/iso2Flag.js +17 -0
  326. package/dist/es/utils/iso2Flag.js.map +1 -0
  327. package/dist/es/utils/useTokenForeground.js +28 -0
  328. package/dist/es/utils/useTokenForeground.js.map +1 -0
  329. package/package.json +5 -5
  330. package/dist/index.cjs +0 -8
  331. package/dist/index.cjs.map +0 -1
  332. package/dist/index.js +0 -5128
  333. package/dist/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Centered.cjs","sources":["../../../../../src/components/Hero/variants/Centered.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { HeroActions, HeroEyebrow, heroContainer, heroTitleBase } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Centered — understated, one statement, generous white space. */\nexport const HeroCentered = forwardRef<HTMLElement, HeroProps>(\n (\n { className, eyebrow, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(heroContainer, \"pt-24 pb-20 text-center sm:pt-32 sm:pb-24\")}>\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleBase, \"mt-7 max-w-4xl text-5xl leading-[1.04] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-7 max-w-xl text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center justify-center gap-x-9 gap-y-3\">\n {meta.map((m, i) => (\n <li\n key={m.label}\n className={cn(\n \"flex items-center gap-2 text-sm text-muted-foreground\",\n i > 0 && \"sm:border-l sm:border-border sm:pl-9\",\n )}\n >\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n {media ? <div className=\"mt-16 w-full\">{media}</div> : null}\n </div>\n </section>\n ),\n);\nHeroCentered.displayName = \"HeroCentered\";"],"names":["HeroCentered","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","jsx","cn","heroContainer","HeroEyebrow","heroTitleBase","HeroActions","m","i","jsxs"],"mappings":"qMAMaA,EAAeC,EAAAA,WAC1B,CACE,CAAE,UAAAC,EAAW,QAAAC,EAAS,MAAAC,EAAO,YAAAC,EAAa,cAAAC,EAAe,gBAAAC,EAAiB,MAAAC,EAAO,KAAAC,EAAM,GAAAC,EAAI,GAAGC,CAAA,EAC9FC,IAEAC,EAAAA,IAAC,UAAA,CACC,IAAAD,EACA,GAAAF,EACA,UAAWI,EAAAA,GAAG,uDAAwDZ,CAAS,EAC9E,GAAGS,EAEJ,gBAAC,MAAA,CAAI,UAAWG,EAAAA,GAAGC,EAAAA,cAAe,2CAA2C,EAC3E,SAAA,CAAAF,MAACG,EAAAA,aAAY,QAAAb,EAAkB,QAC9B,KAAA,CAAG,UAAWW,EAAAA,GAAGG,EAAAA,cAAe,gEAAgE,EAC9F,SAAAb,EACH,EACCC,EACCQ,EAAAA,IAAC,IAAA,CAAE,UAAU,qFACV,WACH,EACE,KACHP,GAAiBC,EAChBM,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACb,SAAAA,EAAAA,IAACK,EAAAA,YAAA,CAAY,cAAAZ,EAA8B,gBAAAC,CAAA,CAAkC,CAAA,CAC/E,EACE,KACHE,QACE,KAAA,CAAG,UAAU,mEACX,SAAAA,EAAK,IAAI,CAACU,EAAGC,IACZC,EAAAA,KAAC,KAAA,CAEC,UAAWP,EAAAA,GACT,wDACAM,EAAI,GAAK,sCAAA,EAGV,SAAA,CAAAD,EAAE,KAAON,MAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAM,EAAE,KAAK,EAAU,KAChEA,EAAE,KAAA,CAAA,EAPEA,EAAE,KAAA,CASV,EACH,EACE,KACHX,EAAQK,EAAAA,IAAC,MAAA,CAAI,UAAU,eAAgB,WAAM,EAAS,IAAA,CAAA,CACzD,CAAA,CAAA,CAGN,EACAb,EAAa,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("react"),s=require("../../../utils/cn.cjs"),r=require("../parts.cjs"),d=b.forwardRef(({className:o,eyebrow:x,title:m,description:t,primaryAction:a,secondaryAction:n,media:c,meta:i,id:u,...g},p)=>e.jsx("section",{ref:p,id:u,className:s.cn("relative w-full border-b border-border bg-background",o),...g,children:e.jsxs("div",{className:s.cn(r.heroContainer,"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20"),children:[e.jsxs("div",{className:"max-w-xl",children:[e.jsx(r.HeroEyebrow,{eyebrow:x}),e.jsx("h1",{className:s.cn(r.heroTitleBase,"mt-6 text-5xl leading-[1.03] sm:text-6xl lg:text-7xl"),children:m}),t?e.jsx("p",{className:"mt-7 max-w-md text-pretty leading-relaxed text-muted-foreground sm:text-lg",children:t}):null,a||n?e.jsx("div",{className:"mt-10",children:e.jsx(r.HeroActions,{primaryAction:a,secondaryAction:n})}):null,i?e.jsx("ul",{className:"mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6",children:i.map(l=>e.jsxs("li",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[l.icon?e.jsx("span",{className:"text-foreground/35",children:l.icon}):null,l.label]},l.label))}):null]}),c?e.jsx("div",{className:"w-full self-center",children:c}):null]})}));d.displayName="HeroSplit";exports.HeroSplit=d;
2
+ //# sourceMappingURL=Split.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Split.cjs","sources":["../../../../../src/components/Hero/variants/Split.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { HeroActions, HeroEyebrow, heroContainer, heroTitleBase } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Split — editorial grid: huge type left, media right, meta rule under. */\nexport const HeroSplit = forwardRef<HTMLElement, HeroProps>(\n (\n { className, eyebrow, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full border-b border-border bg-background\", className)}\n {...props}\n >\n <div className={cn(\n heroContainer,\n \"items-start gap-14 pt-20 pb-20 sm:pt-28 sm:pb-28 lg:grid lg:grid-cols-[1.05fr_0.95fr] lg:gap-20\",\n )}>\n <div className=\"max-w-xl\">\n <HeroEyebrow eyebrow={eyebrow} />\n <h1 className={cn(heroTitleBase, \"mt-6 text-5xl leading-[1.03] sm:text-6xl lg:text-7xl\")}>\n {title}\n </h1>\n {description ? (\n <p className=\"mt-7 max-w-md text-pretty leading-relaxed text-muted-foreground sm:text-lg\">\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-10\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-14 flex flex-wrap items-center gap-x-8 gap-y-3 border-t border-border pt-6\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n {m.icon ? <span className=\"text-foreground/35\">{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n {media ? <div className=\"w-full self-center\">{media}</div> : null}\n </div>\n </section>\n ),\n);\nHeroSplit.displayName = \"HeroSplit\";"],"names":["HeroSplit","forwardRef","className","eyebrow","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","jsx","cn","jsxs","heroContainer","HeroEyebrow","heroTitleBase","HeroActions","m"],"mappings":"qMAMaA,EAAYC,EAAAA,WACvB,CACE,CAAE,UAAAC,EAAW,QAAAC,EAAS,MAAAC,EAAO,YAAAC,EAAa,cAAAC,EAAe,gBAAAC,EAAiB,MAAAC,EAAO,KAAAC,EAAM,GAAAC,EAAI,GAAGC,CAAA,EAC9FC,IAEAC,EAAAA,IAAC,UAAA,CACC,IAAAD,EACA,GAAAF,EACA,UAAWI,EAAAA,GAAG,uDAAwDZ,CAAS,EAC9E,GAAGS,EAEJ,SAAAI,EAAAA,KAAC,OAAI,UAAWD,EAAAA,GACdE,EAAAA,cACA,iGAAA,EAEA,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAF,MAACI,EAAAA,aAAY,QAAAd,EAAkB,QAC9B,KAAA,CAAG,UAAWW,EAAAA,GAAGI,EAAAA,cAAe,sDAAsD,EACpF,SAAAd,EACH,EACCC,EACCQ,EAAAA,IAAC,IAAA,CAAE,UAAU,6EACV,WACH,EACE,KACHP,GAAiBC,EAChBM,EAAAA,IAAC,MAAA,CAAI,UAAU,QACb,SAAAA,EAAAA,IAACM,EAAAA,YAAA,CAAY,cAAAb,EAA8B,gBAAAC,CAAA,CAAkC,CAAA,CAC/E,EACE,KACHE,EACCI,EAAAA,IAAC,KAAA,CAAG,UAAU,gFACX,SAAAJ,EAAK,IAAKW,GACTL,EAAAA,KAAC,KAAA,CAAiB,UAAU,wDACzB,SAAA,CAAAK,EAAE,KAAOP,MAAC,OAAA,CAAK,UAAU,qBAAsB,SAAAO,EAAE,KAAK,EAAU,KAChEA,EAAE,KAAA,CAAA,EAFIA,EAAE,KAGX,CACD,CAAA,CACH,EACE,IAAA,EACN,EACCZ,EAAQK,EAAAA,IAAC,MAAA,CAAI,UAAU,qBAAsB,WAAM,EAAS,IAAA,CAAA,CAC/D,CAAA,CAAA,CAGN,EACAb,EAAU,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),g=require("react"),o=require("../../../utils/cn.cjs"),y=require("../../../utils/useTokenForeground.cjs"),i=require("../parts.cjs"),c=g.forwardRef(({className:x,title:d,description:l,primaryAction:n,secondaryAction:r,media:h,meta:a,id:m,...u},p)=>{const t=y.useTokenForeground("--color-secondary");return e.jsxs("section",{ref:p,id:m,className:o.cn("relative w-full overflow-hidden bg-secondary",x),style:{color:t},...u,children:[e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay"}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10"}),e.jsxs("div",{className:o.cn(i.heroContainer,"pt-28 pb-24 text-center sm:pt-36 sm:pb-32"),children:[e.jsx("h1",{className:"max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl",style:{color:t},children:d}),l?e.jsx("p",{className:"mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg",style:{color:t,opacity:.72},children:l}):null,n||r?e.jsx("div",{className:"mt-11 justify-center",children:e.jsx(i.HeroActions,{primaryAction:n,secondaryAction:r})}):null,a?e.jsx("ul",{className:"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3",children:a.map(s=>e.jsxs("li",{className:"flex items-center gap-2 text-sm font-medium",style:{color:t,opacity:.72},children:[s.icon?e.jsx("span",{children:s.icon}):null,s.label]},s.label))}):null]})]})});c.displayName="HeroStatement";exports.HeroStatement=c;
3
+ //# sourceMappingURL=Statement.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Statement.cjs","sources":["../../../../../src/components/Hero/variants/Statement.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { useTokenForeground } from \"../../../utils/useTokenForeground\";\nimport { HeroActions, heroContainer } from \"../parts\";\nimport type { HeroProps } from \"../types\";\n\n/** Statement — full-bleed ink band. No eyebrow, pure message. */\nexport const HeroStatement = forwardRef<HTMLElement, HeroProps>(\n (\n { className, title, description, primaryAction, secondaryAction, media, meta, id, ...props },\n ref,\n ) => {\n // Statement paints its own background from --color-secondary, so the\n // readable text color must be derived from THAT token, not the brand.\n const fg = useTokenForeground(\"--color-secondary\");\n\n return (\n <section\n ref={ref}\n id={id}\n className={cn(\"relative w-full overflow-hidden bg-secondary\", className)}\n style={{ color: fg }}\n {...props}\n >\n <div aria-hidden className=\"pointer-events-none absolute inset-0 grain opacity-[0.07] mix-blend-overlay\" />\n <div aria-hidden className=\"pointer-events-none absolute inset-x-0 top-0 h-px bg-white/10\" />\n <div className={cn(heroContainer, \"pt-28 pb-24 text-center sm:pt-36 sm:pb-32\")}>\n <h1\n className=\"max-w-5xl font-display text-[2.9rem] font-semibold leading-[1.02] tracking-[-0.04em] text-balance sm:text-7xl lg:text-8xl\"\n style={{ color: fg }}\n >\n {title}\n </h1>\n {description ? (\n <p className=\"mx-auto mt-8 max-w-xl text-pretty leading-relaxed sm:text-lg\" style={{ color: fg, opacity: 0.72 }}>\n {description}\n </p>\n ) : null}\n {primaryAction || secondaryAction ? (\n <div className=\"mt-11 justify-center\">\n <HeroActions primaryAction={primaryAction} secondaryAction={secondaryAction} />\n </div>\n ) : null}\n {meta ? (\n <ul className=\"mt-16 flex flex-wrap items-center justify-center gap-x-10 gap-y-3\">\n {meta.map((m) => (\n <li key={m.label} className=\"flex items-center gap-2 text-sm font-medium\" style={{ color: fg, opacity: 0.72 }}>\n {m.icon ? <span>{m.icon}</span> : null}\n {m.label}\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n );\n },\n);\nHeroStatement.displayName = \"HeroStatement\";"],"names":["HeroStatement","forwardRef","className","title","description","primaryAction","secondaryAction","media","meta","id","props","ref","fg","useTokenForeground","jsxs","cn","jsx","heroContainer","HeroActions","m"],"mappings":"wPAQaA,EAAgBC,EAAAA,WAC3B,CACE,CAAE,UAAAC,EAAW,MAAAC,EAAO,YAAAC,EAAa,cAAAC,EAAe,gBAAAC,EAAiB,MAAAC,EAAO,KAAAC,EAAM,GAAAC,EAAI,GAAGC,CAAA,EACrFC,IACG,CAGH,MAAMC,EAAKC,EAAAA,mBAAmB,mBAAmB,EAEjD,OACEC,EAAAA,KAAC,UAAA,CACC,IAAAH,EACA,GAAAF,EACA,UAAWM,EAAAA,GAAG,+CAAgDb,CAAS,EACvE,MAAO,CAAE,MAAOU,CAAA,EACf,GAAGF,EAEJ,SAAA,CAAAM,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,8EAA8E,EACzGA,EAAAA,IAAC,MAAA,CAAI,cAAW,GAAC,UAAU,gEAAgE,SAC1F,MAAA,CAAI,UAAWD,EAAAA,GAAGE,gBAAe,2CAA2C,EAC3E,SAAA,CAAAD,EAAAA,IAAC,KAAA,CACC,UAAU,4HACV,MAAO,CAAE,MAAOJ,CAAA,EAEf,SAAAT,CAAA,CAAA,EAEFC,EACCY,EAAAA,IAAC,IAAA,CAAE,UAAU,+DAA+D,MAAO,CAAE,MAAOJ,EAAI,QAAS,GAAA,EACtG,WACH,EACE,KACHP,GAAiBC,EAChBU,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACb,SAAAA,EAAAA,IAACE,EAAAA,YAAA,CAAY,cAAAb,EAA8B,gBAAAC,CAAA,CAAkC,CAAA,CAC/E,EACE,KACHE,EACCQ,EAAAA,IAAC,KAAA,CAAG,UAAU,oEACX,SAAAR,EAAK,IAAKW,UACR,KAAA,CAAiB,UAAU,8CAA8C,MAAO,CAAE,MAAOP,EAAI,QAAS,KACpG,SAAA,CAAAO,EAAE,KAAOH,EAAAA,IAAC,OAAA,CAAM,SAAAG,EAAE,KAAK,EAAU,KACjCA,EAAE,KAAA,CAAA,EAFIA,EAAE,KAGX,CACD,CAAA,CACH,EACE,IAAA,CAAA,CACN,CAAA,CAAA,CAAA,CAGN,CACF,EACAnB,EAAc,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),g=require("./useLanguageSwitcher.cjs"),p=require("./variants/Dropdown.cjs"),w=require("./variants/Modal.cjs"),a=({option:i="dropdown",languages:r,value:n,defaultValue:t,onChange:o,...s})=>{const e=g.useLanguageSwitcher(r,n,t,o);if(r.length===0)return null;const u={languages:r,value:n,defaultValue:t,onChange:o,...s,open:e.open,onOpenChange:e.setOpen,current:e.current,currentLang:e.currentLang,setCurrent:e.setCurrent};return i==="modal"?c.jsx(w.LanguageSwitcherModal,{...u}):c.jsx(p.LanguageSwitcherDropdown,{...u})};a.displayName="LanguageSwitcher";exports.LanguageSwitcher=a;
3
+ //# sourceMappingURL=LanguageSwitcher.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageSwitcher.cjs","sources":["../../../../src/components/LanguageSwitcher/LanguageSwitcher.tsx"],"sourcesContent":["\"use client\";\nimport type { LanguageSwitcherProps } from \"./types\";\nimport { useLanguageSwitcher } from \"./useLanguageSwitcher\";\nimport { LanguageSwitcherDropdown } from \"./variants/Dropdown\";\nimport { LanguageSwitcherModal } from \"./variants/Modal\";\n\nexport const LanguageSwitcher = ({\n option = \"dropdown\",\n languages,\n value,\n defaultValue,\n onChange,\n ...props\n}: LanguageSwitcherProps) => {\n const state = useLanguageSwitcher(languages, value, defaultValue, onChange);\n\n if (languages.length === 0) return null;\n\n const variantProps = {\n languages,\n value,\n defaultValue,\n onChange,\n ...props,\n open: state.open,\n onOpenChange: state.setOpen,\n current: state.current,\n currentLang: state.currentLang,\n setCurrent: state.setCurrent,\n };\n\n if (option === \"modal\") {\n return <LanguageSwitcherModal {...variantProps} />;\n }\n return <LanguageSwitcherDropdown {...variantProps} />;\n};\nLanguageSwitcher.displayName = \"LanguageSwitcher\";"],"names":["LanguageSwitcher","option","languages","value","defaultValue","onChange","props","state","useLanguageSwitcher","variantProps","jsx","LanguageSwitcherModal","LanguageSwitcherDropdown"],"mappings":"mOAMaA,EAAmB,CAAC,CAC/B,OAAAC,EAAS,WACT,UAAAC,EACA,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAA6B,CAC3B,MAAMC,EAAQC,EAAAA,oBAAoBN,EAAWC,EAAOC,EAAcC,CAAQ,EAE1E,GAAIH,EAAU,SAAW,EAAG,OAAO,KAEnC,MAAMO,EAAe,CACnB,UAAAP,EACA,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,GAAGC,EACH,KAAMC,EAAM,KACZ,aAAcA,EAAM,QACpB,QAASA,EAAM,QACf,YAAaA,EAAM,YACnB,WAAYA,EAAM,UAAA,EAGpB,OAAIN,IAAW,QACNS,MAACC,EAAAA,sBAAA,CAAuB,GAAGF,CAAA,CAAc,EAE3CC,MAACE,EAAAA,yBAAA,CAA0B,GAAGH,CAAA,CAAc,CACrD,EACAT,EAAiB,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),a=require("react"),i=require("../../utils/cn.cjs"),l=require("../../utils/iso2Flag.cjs"),c=require("../../icons.cjs");function g(t,o,n){a.useEffect(()=>{if(!t)return;const e=s=>{o.current&&!o.current.contains(s.target)&&n()},u=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",e),document.addEventListener("keydown",u),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",u)}},[t,o,n])}function d(t,{size:o="text-sm",globeClass:n="text-muted-foreground"}={}){const e=l.iso2ToFlagEmoji(t);return e?r.jsx("span",{"aria-hidden":!0,className:i.cn(o,"leading-none"),children:e}):r.jsx(c.Globe,{className:i.cn("h-4 w-4 shrink-0",n)})}function m({inverse:t,open:o,showFlag:n,currentLang:e,onClick:u,ariaProps:s}){return r.jsxs("button",{type:"button","aria-haspopup":s.haspopup,"aria-expanded":s.expanded,"aria-controls":s.controls,onClick:u,className:i.cn("inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"border-white/10 text-on-secondary hover:bg-white/10":"border-border text-foreground hover:bg-surface"),children:[n?d(e.code,{globeClass:t?"opacity-70":"text-muted-foreground"}):r.jsx(c.Globe,{className:i.cn("h-4 w-4",t?"opacity-70":"text-muted-foreground")}),r.jsx("span",{className:"tracking-tight",children:e.label}),r.jsx(c.ChevronDown,{className:i.cn("h-3.5 w-3.5 transition-transform duration-150",o&&"rotate-180",t?"opacity-70":"text-muted-foreground")})]})}function f({lang:t,active:o,onSelect:n,variant:e,showFlag:u}){return r.jsxs("button",{type:"button",role:"option","aria-selected":o,onClick:n,className:e==="modal"?i.cn("flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",o?"border-primary/40 bg-primary-soft text-foreground":"border-border text-foreground hover:bg-surface-strong"):i.cn("flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",o?"bg-surface-strong text-foreground":"text-muted-foreground hover:bg-surface-strong hover:text-foreground"),children:[r.jsxs("span",{className:e==="modal"?"flex items-center gap-3":"flex items-center gap-2.5",children:[u?d(t.code,e==="modal"?{size:"text-base"}:{}):null,r.jsx("span",{className:"text-sm font-medium",children:t.label})]}),r.jsxs("span",{className:e==="modal"?"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground":void 0,children:[e==="modal"?t.code:null,o?r.jsx(c.Check,{className:e==="modal"?"h-4 w-4 text-primary":"h-3.5 w-3.5 text-primary"}):null]})]},t.code)}exports.LanguageOptionRow=f;exports.LanguageTrigger=m;exports.renderFlagOrGlobe=d;exports.useOutsideClose=g;
3
+ //# sourceMappingURL=parts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.cjs","sources":["../../../../src/components/LanguageSwitcher/parts.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { iso2ToFlagEmoji } from \"../../utils/iso2Flag\";\nimport { Check, ChevronDown, Globe } from \"../../icons\";\nimport type { LanguageOption } from \"./types\";\n\nexport function useOutsideClose(\n open: boolean,\n rootRef: { current: HTMLDivElement | null },\n onClose: () => void,\n) {\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (event: PointerEvent) => {\n if (rootRef.current && !rootRef.current.contains(event.target as Node)) {\n onClose();\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [open, rootRef, onClose]);\n}\n\nexport function renderFlagOrGlobe(\n code: string,\n { size = \"text-sm\", globeClass = \"text-muted-foreground\" }: { size?: string; globeClass?: string } = {},\n) {\n const flag = iso2ToFlagEmoji(code);\n return flag ? (\n <span aria-hidden className={cn(size, \"leading-none\")}>\n {flag}\n </span>\n ) : (\n <Globe className={cn(\"h-4 w-4 shrink-0\", globeClass)} />\n );\n}\n\nexport function LanguageTrigger({\n inverse,\n open,\n showFlag,\n currentLang,\n onClick,\n ariaProps,\n}: {\n inverse?: boolean;\n open: boolean;\n showFlag?: boolean;\n currentLang: LanguageOption;\n onClick: () => void;\n ariaProps: {\n haspopup: \"listbox\" | \"dialog\";\n expanded: boolean;\n controls?: string;\n };\n}) {\n return (\n <button\n type=\"button\"\n aria-haspopup={ariaProps.haspopup}\n aria-expanded={ariaProps.expanded}\n aria-controls={ariaProps.controls}\n onClick={onClick}\n className={cn(\n \"inline-flex h-9 cursor-pointer items-center gap-1.5 rounded-lg border px-3 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n inverse\n ? \"border-white/10 text-on-secondary hover:bg-white/10\"\n : \"border-border text-foreground hover:bg-surface\",\n )}\n >\n {showFlag ? (\n renderFlagOrGlobe(currentLang.code, { globeClass: inverse ? \"opacity-70\" : \"text-muted-foreground\" })\n ) : (\n <Globe\n className={cn(\"h-4 w-4\", inverse ? \"opacity-70\" : \"text-muted-foreground\")}\n />\n )}\n <span className=\"tracking-tight\">{currentLang.label}</span>\n <ChevronDown\n className={cn(\n \"h-3.5 w-3.5 transition-transform duration-150\",\n open && \"rotate-180\",\n inverse ? \"opacity-70\" : \"text-muted-foreground\",\n )}\n />\n </button>\n );\n}\n\nexport function LanguageOptionRow({\n lang,\n active,\n onSelect,\n variant,\n showFlag,\n}: {\n lang: LanguageOption;\n active: boolean;\n onSelect: () => void;\n variant: \"dropdown\" | \"modal\";\n showFlag?: boolean;\n}) {\n return (\n <button\n key={lang.code}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n onClick={onSelect}\n className={\n variant === \"modal\"\n ? cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-lg border px-4 py-3 text-left transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"border-primary/40 bg-primary-soft text-foreground\"\n : \"border-border text-foreground hover:bg-surface-strong\",\n )\n : cn(\n \"flex w-full cursor-pointer items-center justify-between gap-3 rounded-md px-3 py-2 text-[13px] font-medium transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n active\n ? \"bg-surface-strong text-foreground\"\n : \"text-muted-foreground hover:bg-surface-strong hover:text-foreground\",\n )\n }\n >\n <span className={variant === \"modal\" ? \"flex items-center gap-3\" : \"flex items-center gap-2.5\"}>\n {showFlag ? renderFlagOrGlobe(lang.code, variant === \"modal\" ? { size: \"text-base\" } : {}) : null}\n <span className=\"text-sm font-medium\">{lang.label}</span>\n </span>\n <span className={variant === \"modal\" ? \"flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground\" : undefined}>\n {variant === \"modal\" ? lang.code : null}\n {active ? <Check className={variant === \"modal\" ? \"h-4 w-4 text-primary\" : \"h-3.5 w-3.5 text-primary\"} /> : null}\n </span>\n </button>\n );\n}"],"names":["useOutsideClose","open","rootRef","onClose","useEffect","onPointerDown","event","onKeyDown","renderFlagOrGlobe","code","size","globeClass","flag","iso2ToFlagEmoji","jsx","cn","Globe","LanguageTrigger","inverse","showFlag","currentLang","onClick","ariaProps","jsxs","ChevronDown","LanguageOptionRow","lang","active","onSelect","variant","Check"],"mappings":"2OAOO,SAASA,EACdC,EACAC,EACAC,EACA,CACAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACH,EAAM,OACX,MAAMI,EAAiBC,GAAwB,CACzCJ,EAAQ,SAAW,CAACA,EAAQ,QAAQ,SAASI,EAAM,MAAc,GACnEH,EAAA,CAEJ,EACMI,EAAaD,GAAyB,CACtCA,EAAM,MAAQ,UAAUH,EAAA,CAC9B,EACA,gBAAS,iBAAiB,cAAeE,CAAa,EACtD,SAAS,iBAAiB,UAAWE,CAAS,EACvC,IAAM,CACX,SAAS,oBAAoB,cAAeF,CAAa,EACzD,SAAS,oBAAoB,UAAWE,CAAS,CACnD,CACF,EAAG,CAACN,EAAMC,EAASC,CAAO,CAAC,CAC7B,CAEO,SAASK,EACdC,EACA,CAAE,KAAAC,EAAO,UAAW,WAAAC,EAAa,uBAAA,EAAoE,GACrG,CACA,MAAMC,EAAOC,EAAAA,gBAAgBJ,CAAI,EACjC,OAAOG,EACLE,MAAC,OAAA,CAAK,cAAW,GAAC,UAAWC,KAAGL,EAAM,cAAc,EACjD,SAAAE,CAAA,CACH,EAEAE,EAAAA,IAACE,EAAAA,MAAA,CAAM,UAAWD,KAAG,mBAAoBJ,CAAU,EAAG,CAE1D,CAEO,SAASM,EAAgB,CAC9B,QAAAC,EACA,KAAAjB,EACA,SAAAkB,EACA,YAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAWG,CACD,OACEC,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,gBAAeD,EAAU,SACzB,gBAAeA,EAAU,SACzB,gBAAeA,EAAU,SACzB,QAAAD,EACA,UAAWN,EAAAA,GACT,4MACAG,EACI,sDACA,gDAAA,EAGL,SAAA,CAAAC,EACCX,EAAkBY,EAAY,KAAM,CAAE,WAAYF,EAAU,aAAe,uBAAA,CAAyB,EAEpGJ,EAAAA,IAACE,EAAAA,MAAA,CACC,UAAWD,EAAAA,GAAG,UAAWG,EAAU,aAAe,uBAAuB,CAAA,CAAA,EAG7EJ,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,WAAY,MAAM,EACpDA,EAAAA,IAACU,EAAAA,YAAA,CACC,UAAWT,EAAAA,GACT,gDACAd,GAAQ,aACRiB,EAAU,aAAe,uBAAA,CAC3B,CAAA,CACF,CAAA,CAAA,CAGN,CAEO,SAASO,EAAkB,CAChC,KAAAC,EACA,OAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAV,CACF,EAMG,CACD,OACEI,EAAAA,KAAC,SAAA,CAEC,KAAK,SACL,KAAK,SACL,gBAAeI,EACf,QAASC,EACT,UACEC,IAAY,QACRd,EAAAA,GACE,6MACAY,EACI,oDACA,uDAAA,EAENZ,EAAAA,GACE,oNACAY,EACI,oCACA,qEAAA,EAIZ,SAAA,CAAAJ,OAAC,OAAA,CAAK,UAAWM,IAAY,QAAU,0BAA4B,4BAChE,SAAA,CAAAV,EAAWX,EAAkBkB,EAAK,KAAMG,IAAY,QAAU,CAAE,KAAM,aAAgB,CAAA,CAAE,EAAI,KAC7Ff,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAuB,WAAK,KAAA,CAAM,CAAA,EACpD,SACC,OAAA,CAAK,UAAWe,IAAY,QAAU,8FAAgG,OACpI,SAAA,CAAAA,IAAY,QAAUH,EAAK,KAAO,KAClCC,QAAUG,EAAAA,MAAA,CAAM,UAAWD,IAAY,QAAU,uBAAyB,2BAA4B,EAAK,IAAA,CAAA,CAC9G,CAAA,CAAA,EA5BKH,EAAK,IAAA,CA+BhB"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react");function d(e,i,o,r){var n;const[a,s]=u.useState(!1),[S,f]=u.useState(o??((n=e[0])==null?void 0:n.code)??""),c=i??S,l=e.find(t=>t.code===c)??e[0];return{open:a,setOpen:s,current:c,currentLang:l,setCurrent:t=>{f(t),s(!1),r==null||r(t)}}}exports.useLanguageSwitcher=d;
3
+ //# sourceMappingURL=useLanguageSwitcher.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLanguageSwitcher.cjs","sources":["../../../../src/components/LanguageSwitcher/useLanguageSwitcher.ts"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport type { LanguageOption } from \"./types\";\n\nexport function useLanguageSwitcher(\n languages: LanguageOption[],\n value?: string,\n defaultValue?: string,\n onChange?: (code: string) => void,\n) {\n const [open, setOpen] = useState(false);\n const [internal, setInternal] = useState(defaultValue ?? languages[0]?.code ?? \"\");\n const current = value ?? internal;\n const currentLang = languages.find((l) => l.code === current) ?? languages[0];\n\n const setCurrent = (code: string) => {\n setInternal(code);\n setOpen(false);\n onChange?.(code);\n };\n\n return { open, setOpen, current, currentLang, setCurrent };\n}"],"names":["useLanguageSwitcher","languages","value","defaultValue","onChange","open","setOpen","useState","internal","setInternal","_a","current","currentLang","l","code"],"mappings":"yGAIO,SAASA,EACdC,EACAC,EACAC,EACAC,EACA,OACA,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS,EAAK,EAChC,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASJ,KAAgBO,EAAAT,EAAU,CAAC,IAAX,YAAAS,EAAc,OAAQ,EAAE,EAC3EC,EAAUT,GAASM,EACnBI,EAAcX,EAAU,KAAMY,GAAMA,EAAE,OAASF,CAAO,GAAKV,EAAU,CAAC,EAQ5E,MAAO,CAAE,KAAAI,EAAM,QAAAC,EAAS,QAAAK,EAAS,YAAAC,EAAa,WAN1BE,GAAiB,CACnCL,EAAYK,CAAI,EAChBR,EAAQ,EAAK,EACbF,GAAA,MAAAA,EAAWU,EACb,CAE8C,CAChD"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),d=require("react"),u=require("../../../utils/cn.cjs"),i=require("../parts.cjs");function b({className:g,languages:p,open:e,onOpenChange:o,current:f,currentLang:h,setCurrent:m,align:s="end",showFlag:l=!1,inverse:x=!1,modalTitle:y,value:w,defaultValue:j,onChange:S,...v}){const a=d.useId(),n=`--ls-${a.replace(/:/g,"")}`,c=d.useRef(null);return i.useOutsideClose(e,c,()=>o(!1)),t.jsxs("div",{ref:c,className:u.cn("relative inline-flex",g),...v,children:[t.jsx("button",{type:"button",style:{anchorName:n},onClick:()=>o(!e),children:t.jsx(i.LanguageTrigger,{inverse:x,open:e,showFlag:l,currentLang:h,onClick:()=>o(!e),ariaProps:{haspopup:"listbox",expanded:e,controls:a}})}),t.jsx("div",{id:a,role:"listbox","aria-label":"Select language",style:{positionAnchor:n,top:"anchor(bottom)",...s==="start"?{left:"anchor(left)"}:{right:"anchor(right)"}},className:u.cn("absolute top-full z-50 mt-2 min-w-[10rem] rounded-lg border border-border bg-surface p-1 shadow-raised transition-all duration-150",s==="start"?"left-0":"right-0",e?"visible translate-y-0 opacity-100":"pointer-events-none invisible -translate-y-1 opacity-0"),children:p.map(r=>t.jsx(i.LanguageOptionRow,{lang:r,active:r.code===f,onSelect:()=>m(r.code),variant:"dropdown",showFlag:l},r.code))})]})}b.displayName="LanguageSwitcherDropdown";exports.LanguageSwitcherDropdown=b;
3
+ //# sourceMappingURL=Dropdown.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.cjs","sources":["../../../../../src/components/LanguageSwitcher/variants/Dropdown.tsx"],"sourcesContent":["\"use client\";\nimport { useId, useRef, type CSSProperties } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport {\n useOutsideClose,\n LanguageTrigger,\n LanguageOptionRow,\n} from \"../parts\";\nimport type { LanguageSwitcherVariantProps } from \"../types\";\n\nexport function LanguageSwitcherDropdown({\n className,\n languages,\n open,\n onOpenChange,\n current,\n currentLang,\n setCurrent,\n align = \"end\",\n showFlag = false,\n inverse = false,\n modalTitle,\n value,\n defaultValue,\n onChange,\n ...props\n}: LanguageSwitcherVariantProps) {\n const listboxId = useId();\n const anchorName = `--ls-${listboxId.replace(/:/g, \"\")}`;\n const rootRef = useRef<HTMLDivElement>(null);\n\n useOutsideClose(open, rootRef, () => onOpenChange(false));\n\n return (\n <div\n ref={rootRef}\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n <button\n type=\"button\"\n style={{ anchorName } as CSSProperties}\n onClick={() => onOpenChange(!open)}\n >\n <LanguageTrigger\n inverse={inverse}\n open={open}\n showFlag={showFlag}\n currentLang={currentLang}\n onClick={() => onOpenChange(!open)}\n ariaProps={{ haspopup: \"listbox\", expanded: open, controls: listboxId }}\n />\n </button>\n\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label=\"Select language\"\n style={\n {\n positionAnchor: anchorName,\n top: \"anchor(bottom)\",\n ...(align === \"start\" ? { left: \"anchor(left)\" } : { right: \"anchor(right)\" }),\n } as CSSProperties\n }\n className={cn(\n \"absolute top-full z-50 mt-2 min-w-[10rem] rounded-lg border border-border bg-surface p-1 shadow-raised transition-all duration-150\",\n align === \"start\" ? \"left-0\" : \"right-0\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n {languages.map((lang) => (\n <LanguageOptionRow\n key={lang.code}\n lang={lang}\n active={lang.code === current}\n onSelect={() => setCurrent(lang.code)}\n variant=\"dropdown\"\n showFlag={showFlag}\n />\n ))}\n </div>\n </div>\n );\n}\nLanguageSwitcherDropdown.displayName = \"LanguageSwitcherDropdown\";"],"names":["LanguageSwitcherDropdown","className","languages","open","onOpenChange","current","currentLang","setCurrent","align","showFlag","inverse","modalTitle","value","defaultValue","onChange","props","listboxId","useId","anchorName","rootRef","useRef","useOutsideClose","jsxs","cn","jsx","LanguageTrigger","lang","LanguageOptionRow"],"mappings":"qMAUO,SAASA,EAAyB,CACvC,UAAAC,EACA,UAAAC,EACA,KAAAC,EACA,aAAAC,EACA,QAAAC,EACA,YAAAC,EACA,WAAAC,EACA,MAAAC,EAAQ,MACR,SAAAC,EAAW,GACX,QAAAC,EAAU,GACV,WAAAC,EACA,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAiC,CAC/B,MAAMC,EAAYC,EAAAA,MAAA,EACZC,EAAa,QAAQF,EAAU,QAAQ,KAAM,EAAE,CAAC,GAChDG,EAAUC,EAAAA,OAAuB,IAAI,EAE3CC,OAAAA,EAAAA,gBAAgBlB,EAAMgB,EAAS,IAAMf,EAAa,EAAK,CAAC,EAGtDkB,EAAAA,KAAC,MAAA,CACC,IAAKH,EACL,UAAWI,EAAAA,GAAG,uBAAwBtB,CAAS,EAC9C,GAAGc,EAEJ,SAAA,CAAAS,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,MAAO,CAAE,WAAAN,CAAA,EACT,QAAS,IAAMd,EAAa,CAACD,CAAI,EAEjC,SAAAqB,EAAAA,IAACC,EAAAA,gBAAA,CACC,QAAAf,EACA,KAAAP,EACA,SAAAM,EACA,YAAAH,EACA,QAAS,IAAMF,EAAa,CAACD,CAAI,EACjC,UAAW,CAAE,SAAU,UAAW,SAAUA,EAAM,SAAUa,CAAA,CAAU,CAAA,CACxE,CAAA,EAGFQ,EAAAA,IAAC,MAAA,CACC,GAAIR,EACJ,KAAK,UACL,aAAW,kBACX,MACE,CACE,eAAgBE,EAChB,IAAK,iBACL,GAAIV,IAAU,QAAU,CAAE,KAAM,cAAA,EAAmB,CAAE,MAAO,eAAA,CAAgB,EAGhF,UAAWe,EAAAA,GACT,qIACAf,IAAU,QAAU,SAAW,UAC/BL,EACI,oCACA,wDAAA,EAGL,SAAAD,EAAU,IAAKwB,GACdF,EAAAA,IAACG,EAAAA,kBAAA,CAEC,KAAAD,EACA,OAAQA,EAAK,OAASrB,EACtB,SAAU,IAAME,EAAWmB,EAAK,IAAI,EACpC,QAAQ,WACR,SAAAjB,CAAA,EALKiB,EAAK,IAAA,CAOb,CAAA,CAAA,CACH,CAAA,CAAA,CAGN,CACA1B,EAAyB,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),j=require("react"),h=require("../../../utils/cn.cjs"),p=require("../../Modal.cjs"),t=require("../parts.cjs");function s({className:n,languages:o,open:a,onOpenChange:i,current:c,currentLang:d,setCurrent:u,modalTitle:g,showFlag:l=!1,inverse:m=!1,align:v,value:S,defaultValue:M,onChange:q,...f}){const x=j.useRef(null);return e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:x,className:h.cn("relative inline-flex",n),...f,children:e.jsx(t.LanguageTrigger,{inverse:m,open:a,showFlag:l,currentLang:d,onClick:()=>i(!a),ariaProps:{haspopup:"dialog",expanded:a}})}),e.jsx(p.Modal,{open:a,onClose:()=>i(!1),title:g,size:"sm",children:e.jsx("div",{role:"listbox","aria-label":"Select language",className:"grid min-w-[19rem] gap-1.5",children:o.map(r=>e.jsx(t.LanguageOptionRow,{lang:r,active:r.code===c,onSelect:()=>u(r.code),variant:"modal",showFlag:l},r.code))})})]})}s.displayName="LanguageSwitcherModal";exports.LanguageSwitcherModal=s;
3
+ //# sourceMappingURL=Modal.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.cjs","sources":["../../../../../src/components/LanguageSwitcher/variants/Modal.tsx"],"sourcesContent":["\"use client\";\nimport { useRef } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { Modal } from \"../../Modal\";\nimport { LanguageTrigger, LanguageOptionRow } from \"../parts\";\nimport type { LanguageSwitcherVariantProps } from \"../types\";\n\nexport function LanguageSwitcherModal({\n className,\n languages,\n open,\n onOpenChange,\n current,\n currentLang,\n setCurrent,\n modalTitle,\n showFlag = false,\n inverse = false,\n align,\n value,\n defaultValue,\n onChange,\n ...props\n}: LanguageSwitcherVariantProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n\n return (\n <>\n <div ref={rootRef} className={cn(\"relative inline-flex\", className)} {...props}>\n <LanguageTrigger\n inverse={inverse}\n open={open}\n showFlag={showFlag}\n currentLang={currentLang}\n onClick={() => onOpenChange(!open)}\n ariaProps={{ haspopup: \"dialog\", expanded: open }}\n />\n </div>\n <Modal open={open} onClose={() => onOpenChange(false)} title={modalTitle} size=\"sm\">\n <div role=\"listbox\" aria-label=\"Select language\" className=\"grid min-w-[19rem] gap-1.5\">\n {languages.map((lang) => (\n <LanguageOptionRow\n key={lang.code}\n lang={lang}\n active={lang.code === current}\n onSelect={() => setCurrent(lang.code)}\n variant=\"modal\"\n showFlag={showFlag}\n />\n ))}\n </div>\n </Modal>\n </>\n );\n}\nLanguageSwitcherModal.displayName = \"LanguageSwitcherModal\";"],"names":["LanguageSwitcherModal","className","languages","open","onOpenChange","current","currentLang","setCurrent","modalTitle","showFlag","inverse","align","value","defaultValue","onChange","props","rootRef","useRef","jsxs","Fragment","jsx","cn","LanguageTrigger","Modal","lang","LanguageOptionRow"],"mappings":"kOAOO,SAASA,EAAsB,CACpC,UAAAC,EACA,UAAAC,EACA,KAAAC,EACA,aAAAC,EACA,QAAAC,EACA,YAAAC,EACA,WAAAC,EACA,WAAAC,EACA,SAAAC,EAAW,GACX,QAAAC,EAAU,GACV,MAAAC,EACA,MAAAC,EACA,aAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAiC,CAC/B,MAAMC,EAAUC,EAAAA,OAAuB,IAAI,EAE3C,OACEC,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAC,EAAAA,IAAC,MAAA,CAAI,IAAKJ,EAAS,UAAWK,KAAG,uBAAwBpB,CAAS,EAAI,GAAGc,EACvE,SAAAK,EAAAA,IAACE,EAAAA,gBAAA,CACC,QAAAZ,EACA,KAAAP,EACA,SAAAM,EACA,YAAAH,EACA,QAAS,IAAMF,EAAa,CAACD,CAAI,EACjC,UAAW,CAAE,SAAU,SAAU,SAAUA,CAAA,CAAK,CAAA,EAEpD,EACAiB,EAAAA,IAACG,EAAAA,OAAM,KAAApB,EAAY,QAAS,IAAMC,EAAa,EAAK,EAAG,MAAOI,EAAY,KAAK,KAC7E,SAAAY,MAAC,MAAA,CAAI,KAAK,UAAU,aAAW,kBAAkB,UAAU,6BACxD,SAAAlB,EAAU,IAAKsB,GACdJ,EAAAA,IAACK,EAAAA,kBAAA,CAEC,KAAAD,EACA,OAAQA,EAAK,OAASnB,EACtB,SAAU,IAAME,EAAWiB,EAAK,IAAI,EACpC,QAAQ,QACR,SAAAf,CAAA,EALKe,EAAK,IAAA,CAOb,EACH,CAAA,CACF,CAAA,EACF,CAEJ,CACAxB,EAAsB,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),i=require("react"),s=require("./variants/Quiet.cjs"),n=require("./variants/Marquee.cjs"),d=require("./variants/Strip.cjs"),t=i.forwardRef(({option:u="quiet",...e},o)=>u==="marquee"?r.jsx(n.LogoCloudMarquee,{ref:o,...e}):u==="strip"?r.jsx(d.LogoCloudStrip,{ref:o,...e}):r.jsx(s.LogoCloudQuiet,{ref:o,...e}));t.displayName="LogoCloud";exports.LogoCloud=t;
2
+ //# sourceMappingURL=LogoCloud.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogoCloud.cjs","sources":["../../../../src/components/LogoCloud/LogoCloud.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { LogoCloudProps } from \"./types\";\nimport { LogoCloudQuiet } from \"./variants/Quiet\";\nimport { LogoCloudMarquee } from \"./variants/Marquee\";\nimport { LogoCloudStrip } from \"./variants/Strip\";\n\nexport const LogoCloud = forwardRef<HTMLDivElement, LogoCloudProps>(\n ({ option = \"quiet\", ...props }, ref) => {\n if (option === \"marquee\") return <LogoCloudMarquee ref={ref} {...props} />;\n if (option === \"strip\") return <LogoCloudStrip ref={ref} {...props} />;\n return <LogoCloudQuiet ref={ref} {...props} />;\n },\n);\nLogoCloud.displayName = \"LogoCloud\";"],"names":["LogoCloud","forwardRef","option","props","ref","LogoCloudMarquee","LogoCloudStrip","jsx","LogoCloudQuiet"],"mappings":"gPAMaA,EAAYC,EAAAA,WACvB,CAAC,CAAE,OAAAC,EAAS,QAAS,GAAGC,CAAA,EAASC,IAC3BF,IAAW,gBAAmBG,EAAAA,iBAAA,CAAiB,IAAAD,EAAW,GAAGD,EAAO,EACpED,IAAW,cAAiBI,EAAAA,eAAA,CAAe,IAAAF,EAAW,GAAGD,EAAO,EAC7DI,EAAAA,IAACC,EAAAA,eAAA,CAAe,IAAAJ,EAAW,GAAGD,CAAA,CAAO,CAEhD,EACAH,EAAU,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("../../utils/cn.cjs"),n=({name:e})=>t.jsx("span",{className:"text-lg font-semibold tracking-tight text-foreground/45 transition-colors duration-200 group-hover:text-foreground",children:e}),a=({logo:e})=>e.src?t.jsx("img",{src:e.src,alt:e.name,loading:"lazy",className:r.cn("max-h-7 w-auto opacity-50 grayscale transition-all duration-200 group-hover:opacity-90 group-hover:grayscale-0","h-7")}):t.jsx(n,{name:e.name});function s({title:e,className:o}){return e?t.jsx("p",{className:r.cn("mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground",o),children:e}):null}exports.LogoCloudTitle=s;exports.LogoMark=a;
2
+ //# sourceMappingURL=parts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.cjs","sources":["../../../../src/components/LogoCloud/parts.tsx"],"sourcesContent":["import { cn } from \"../../utils/cn\";\nimport type { LogoItem } from \"./types\";\n\nconst LogoText = ({ name }: { name: string }) => (\n <span className=\"text-lg font-semibold tracking-tight text-foreground/45 transition-colors duration-200 group-hover:text-foreground\">\n {name}\n </span>\n);\n\nexport const LogoMark = ({ logo }: { logo: LogoItem }) =>\n logo.src ? (\n <img\n src={logo.src}\n alt={logo.name}\n loading=\"lazy\"\n className={cn(\n \"max-h-7 w-auto opacity-50 grayscale transition-all duration-200 group-hover:opacity-90 group-hover:grayscale-0\",\n \"h-7\",\n )}\n />\n ) : (\n <LogoText name={logo.name} />\n );\n\nexport function LogoCloudTitle({ title, className }: { title?: string; className?: string }) {\n if (!title) return null;\n return (\n <p className={cn(\"mb-8 text-center text-xs font-semibold uppercase tracking-[0.18em] text-muted-foreground\", className)}>\n {title}\n </p>\n );\n}"],"names":["LogoText","name","jsx","LogoMark","logo","cn","LogoCloudTitle","title","className"],"mappings":"qJAGMA,EAAW,CAAC,CAAE,KAAAC,CAAA,IAClBC,MAAC,OAAA,CAAK,UAAU,qHACb,SAAAD,EACH,EAGWE,EAAW,CAAC,CAAE,KAAAC,CAAA,IACzBA,EAAK,IACHF,EAAAA,IAAC,MAAA,CACC,IAAKE,EAAK,IACV,IAAKA,EAAK,KACV,QAAQ,OACR,UAAWC,EAAAA,GACT,iHACA,KAAA,CACF,CACF,EAEAH,EAAAA,IAACF,EAAA,CAAS,KAAMI,EAAK,IAAA,CAAM,EAGxB,SAASE,EAAe,CAAE,MAAAC,EAAO,UAAAC,GAAqD,CAC3F,OAAKD,QAEF,IAAA,CAAE,UAAWF,EAAAA,GAAG,2FAA4FG,CAAS,EACnH,SAAAD,EACH,EAJiB,IAMrB"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),m=require("../../../utils/cn.cjs"),o=require("../parts.cjs"),s=t.forwardRef(({className:n,logos:r,title:i,...d},u)=>{const c=[...r,...r];return e.jsxs("div",{ref:u,className:m.cn("w-full overflow-hidden",n),...d,children:[e.jsx(o.LogoCloudTitle,{title:i}),e.jsx("div",{className:"mask-fade-x",children:e.jsx("div",{className:"flex w-max animate-marquee gap-14 pr-14 motion-reduce:animate-none",children:c.map((a,l)=>e.jsx("div",{className:"group shrink-0",children:e.jsx(o.LogoMark,{logo:a})},`${a.name}-${l}`))})})]})});s.displayName="LogoCloudMarquee";exports.LogoCloudMarquee=s;
2
+ //# sourceMappingURL=Marquee.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Marquee.cjs","sources":["../../../../../src/components/LogoCloud/variants/Marquee.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { LogoMark, LogoCloudTitle } from \"../parts\";\nimport type { LogoItem } from \"../types\";\n\ninterface MarqueeProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n}\n\nexport const LogoCloudMarquee = forwardRef<HTMLDivElement, MarqueeProps>(\n ({ className, logos, title, ...props }, ref) => {\n const doubled = [...logos, ...logos];\n return (\n <div ref={ref} className={cn(\"w-full overflow-hidden\", className)} {...props}>\n <LogoCloudTitle title={title} />\n <div className=\"mask-fade-x\">\n <div className=\"flex w-max animate-marquee gap-14 pr-14 motion-reduce:animate-none\">\n {doubled.map((logo, i) => (\n <div key={`${logo.name}-${i}`} className=\"group shrink-0\">\n <LogoMark logo={logo} />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n },\n);\nLogoCloudMarquee.displayName = \"LogoCloudMarquee\";"],"names":["LogoCloudMarquee","forwardRef","className","logos","title","props","ref","doubled","jsxs","cn","jsx","LogoCloudTitle","logo","i","LogoMark"],"mappings":"qMAUaA,EAAmBC,EAAAA,WAC9B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,GAAGC,CAAA,EAASC,IAAQ,CAC9C,MAAMC,EAAU,CAAC,GAAGJ,EAAO,GAAGA,CAAK,EACnC,OACEK,OAAC,OAAI,IAAAF,EAAU,UAAWG,KAAG,yBAA0BP,CAAS,EAAI,GAAGG,EACrE,SAAA,CAAAK,MAACC,EAAAA,gBAAe,MAAAP,EAAc,EAC9BM,EAAAA,IAAC,MAAA,CAAI,UAAU,cACb,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,qEACZ,SAAAH,EAAQ,IAAI,CAACK,EAAMC,IAClBH,EAAAA,IAAC,MAAA,CAA8B,UAAU,iBACvC,SAAAA,EAAAA,IAACI,EAAAA,SAAA,CAAS,KAAAF,EAAY,CAAA,EADd,GAAGA,EAAK,IAAI,IAAIC,CAAC,EAE3B,CACD,EACH,CAAA,CACF,CAAA,EACF,CAEJ,CACF,EACAb,EAAiB,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),c=require("react"),n=require("../../../utils/cn.cjs"),s=require("../parts.cjs"),o=c.forwardRef(({className:t,logos:i,title:l,...a},u)=>e.jsxs("div",{ref:u,className:n.cn("w-full",t),...a,children:[e.jsx(s.LogoCloudTitle,{title:l}),e.jsx("ul",{className:"flex flex-wrap items-center justify-center gap-x-12 gap-y-6",children:i.map(r=>e.jsx("li",{className:"group",children:e.jsx(s.LogoMark,{logo:r})},r.name))})]}));o.displayName="LogoCloudQuiet";exports.LogoCloudQuiet=o;
2
+ //# sourceMappingURL=Quiet.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Quiet.cjs","sources":["../../../../../src/components/LogoCloud/variants/Quiet.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { LogoMark, LogoCloudTitle } from \"../parts\";\nimport type { LogoItem } from \"../types\";\n\ninterface QuietProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n}\n\n/** quiet — unbounded spread of wordmarks. */\nexport const LogoCloudQuiet = forwardRef<HTMLDivElement, QuietProps>(\n ({ className, logos, title, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <LogoCloudTitle title={title} />\n <ul className=\"flex flex-wrap items-center justify-center gap-x-12 gap-y-6\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"group\">\n <LogoMark logo={logo} />\n </li>\n ))}\n </ul>\n </div>\n ),\n);\nLogoCloudQuiet.displayName = \"LogoCloudQuiet\";"],"names":["LogoCloudQuiet","forwardRef","className","logos","title","props","ref","jsxs","cn","jsx","LogoCloudTitle","logo","LogoMark"],"mappings":"qMAWaA,EAAiBC,EAAAA,WAC5B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,GAAGC,GAASC,IACtCC,OAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,KAAG,SAAUN,CAAS,EAAI,GAAGG,EACrD,SAAA,CAAAI,MAACC,EAAAA,gBAAe,MAAAN,EAAc,QAC7B,KAAA,CAAG,UAAU,8DACX,SAAAD,EAAM,IAAKQ,GACVF,EAAAA,IAAC,MAAmB,UAAU,QAC5B,eAACG,WAAA,CAAS,KAAAD,CAAA,CAAY,GADfA,EAAK,IAEd,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,EACAX,EAAe,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react"),d=require("../../../utils/cn.cjs"),o=require("../parts.cjs"),s=u.forwardRef(({className:t,logos:a,title:l,...i},c)=>e.jsxs("div",{ref:c,className:d.cn("w-full",t),...i,children:[e.jsx(o.LogoCloudTitle,{title:l}),e.jsx("ul",{className:"flex flex-wrap items-center justify-center gap-x-10 gap-y-4 rounded-2xl border border-border bg-surface px-6 py-7 sm:gap-x-14",children:a.map(r=>e.jsx("li",{className:"group",children:e.jsx(o.LogoMark,{logo:r})},r.name))})]}));s.displayName="LogoCloudStrip";exports.LogoCloudStrip=s;
2
+ //# sourceMappingURL=Strip.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Strip.cjs","sources":["../../../../../src/components/LogoCloud/variants/Strip.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from \"react\";\nimport { cn } from \"../../../utils/cn\";\nimport { LogoMark, LogoCloudTitle } from \"../parts\";\nimport type { LogoItem } from \"../types\";\n\ninterface StripProps extends HTMLAttributes<HTMLDivElement> {\n logos: LogoItem[];\n title?: string;\n}\n\nexport const LogoCloudStrip = forwardRef<HTMLDivElement, StripProps>(\n ({ className, logos, title, ...props }, ref) => (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n <LogoCloudTitle title={title} />\n <ul className=\"flex flex-wrap items-center justify-center gap-x-10 gap-y-4 rounded-2xl border border-border bg-surface px-6 py-7 sm:gap-x-14\">\n {logos.map((logo) => (\n <li key={logo.name} className=\"group\">\n <LogoMark logo={logo} />\n </li>\n ))}\n </ul>\n </div>\n ),\n);\nLogoCloudStrip.displayName = \"LogoCloudStrip\";"],"names":["LogoCloudStrip","forwardRef","className","logos","title","props","ref","jsxs","cn","jsx","LogoCloudTitle","logo","LogoMark"],"mappings":"qMAUaA,EAAiBC,EAAAA,WAC5B,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,GAAGC,GAASC,IACtCC,OAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,KAAG,SAAUN,CAAS,EAAI,GAAGG,EACrD,SAAA,CAAAI,MAACC,EAAAA,gBAAe,MAAAN,EAAc,QAC7B,KAAA,CAAG,UAAU,gIACX,SAAAD,EAAM,IAAKQ,GACVF,EAAAA,IAAC,MAAmB,UAAU,QAC5B,eAACG,WAAA,CAAS,KAAAD,CAAA,CAAY,GADfA,EAAK,IAEd,CACD,CAAA,CACH,CAAA,CAAA,CACF,CAEJ,EACAX,EAAe,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),u=require("react"),n=require("../../utils/cn.cjs"),J=require("../../utils/contrast.cjs"),x=require("../../icons.cjs"),B="text-on-secondary",b="text-foreground",Q={classic:{shell:"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",trigger:"text-muted-foreground hover:text-foreground hover:bg-surface",triggerOpen:"bg-surface text-foreground",badge:"bg-primary-soft text-primary",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"border-t border-border bg-background",mobileButton:`${b} hover:bg-surface`,mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",brandText:b,brandDot:"bg-foreground"},floating:{shell:"px-0",bar:"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",header:"px-3 sm:px-6",trigger:"text-muted-foreground hover:text-foreground hover:bg-surface",triggerOpen:"bg-surface text-foreground",badge:"bg-primary-soft text-primary",panel:"border-border bg-surface shadow-raised",columnTitle:"text-muted-foreground/70",columnLink:"hover:bg-surface-strong",linkDescription:"text-muted-foreground",mobilePanel:"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",mobileButton:`${b} hover:bg-surface`,mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",brandText:b,brandDot:"bg-foreground"},inverse:{shell:"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",trigger:"text-on-secondary/60 hover:text-on-secondary hover:bg-white/10",triggerOpen:"bg-white/10 text-on-secondary",badge:"bg-white/15 text-on-secondary",panel:"border-white/10 bg-[#161616]",columnTitle:"text-on-secondary/45",columnLink:"hover:bg-white/10",linkDescription:"text-on-secondary/50",mobilePanel:"border-t border-white/10 bg-[#101010]",mobileButton:`${B} hover:bg-white/10`,mobileLink:"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary",brandText:B,brandDot:"bg-on-secondary"}},$=({className:q,variant:w="classic",brand:g,logo:E,logoSrc:k,logoAlt:I,logoClassName:S,brandHref:z="#",items:p,actions:m,cta:h,languageSwitcher:f,sticky:A=!0,LinkComponent:F,onKeyDown:j,...R})=>{const X=u.useId(),d=F??"a",[M,i]=u.useState(null),[c,v]=u.useState(!1),[y,C]=u.useState(null),t=Q[w],_=()=>i(null),N=()=>{i(null),v(!1),C(null)},L=r=>`${X}-panel-${r}`,T=E??(k?e.jsx("img",{src:k,alt:I??(typeof g=="string"?g:"Logo"),className:n.cn("h-7 w-auto",S)}):null),G=T?e.jsx("span",{className:"flex items-center",children:T}):e.jsxs("span",{className:n.cn("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight",t.brandText),children:[e.jsx("span",{"aria-hidden":!0,className:n.cn("inline-block h-2.5 w-2.5 rounded-sm",t.brandDot)}),g]}),O=n.cn("flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150",t.trigger),D=r=>{var l;return e.jsx("div",{className:n.cn("grid gap-x-10 gap-y-8 sm:grid-cols-2",r.featured?"":"lg:grid-cols-3"),children:(l=r.columns)==null?void 0:l.map((s,a)=>e.jsxs("div",{children:[s.title?e.jsx("h4",{className:n.cn("text-xs font-semibold uppercase tracking-[0.14em]",t.columnTitle),children:s.title}):null,e.jsx("ul",{className:n.cn(s.title&&"mt-3","space-y-0.5"),children:s.links.map(o=>e.jsx("li",{children:e.jsxs(d,{href:o.href,onClick:N,className:n.cn("-mx-2 block rounded-md px-2 py-2 transition-colors duration-150",t.columnLink),children:[e.jsx("span",{className:"block text-sm font-medium text-foreground",children:o.label}),o.description?e.jsx("span",{className:n.cn("mt-0.5 block text-[13px] leading-snug",t.linkDescription),children:o.description}):null]})},o.href))})]},s.title??a))})},P=(r,l=!1)=>{const s=r.featured;if(!s)return null;const a=s.accent?{backgroundColor:s.accent,color:J.getContrastText(s.accent)}:void 0;return e.jsxs(d,{href:s.href,onClick:N,className:n.cn("group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5",l&&"mt-8",!s.accent&&"bg-primary text-on-primary"),style:a,children:[e.jsxs("div",{className:"flex h-full flex-col justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-display text-base font-semibold tracking-tight",children:s.title}),s.description?e.jsx("p",{className:"mt-1.5 text-[13px] leading-relaxed opacity-80",children:s.description}):null]}),s.cta?e.jsxs("span",{className:"text-sm font-semibold underline decoration-1 underline-offset-4",children:[s.cta," →"]}):null]}),e.jsx("div",{"aria-hidden":!0,className:"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40"})]})},H=r=>{r.key==="Escape"&&N(),j==null||j(r)};return e.jsxs("header",{className:n.cn("relative w-full transition-colors duration-200",A&&"sticky top-0 z-50",t.shell,t.header,q),onKeyDown:H,...R,children:[e.jsxs("nav",{className:n.cn("relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200",t.bar),onMouseLeave:_,"aria-label":"Mega menu",children:[e.jsx(d,{href:z,className:"shrink-0",children:G}),e.jsx("ul",{className:"hidden items-center gap-1 lg:flex",children:p.map((r,l)=>{var o;const s=!!((o=r.columns)!=null&&o.length||r.featured),a=M===l;return e.jsx("li",{className:"relative",children:s?e.jsxs("button",{type:"button","aria-haspopup":"true","aria-expanded":a,"aria-controls":L(l),onClick:()=>i(a?null:l),onMouseEnter:()=>i(l),className:n.cn(O,a&&t.triggerOpen),children:[e.jsxs("span",{className:"flex items-center gap-1.5",children:[r.label,r.badge?e.jsx("span",{className:n.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",t.badge),children:r.badge}):null]}),e.jsx(x.ChevronDown,{className:n.cn("h-4 w-4 shrink-0 transition-transform duration-150",a&&"rotate-180")})]}):e.jsxs(d,{href:r.href??"#",className:O,children:[r.label,r.badge?e.jsx("span",{className:n.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",t.badge),children:r.badge}):null]})},r.label)})}),e.jsxs("div",{className:"hidden items-center gap-3 lg:flex",children:[f,m,h]}),f?e.jsx("div",{className:"flex items-center lg:hidden",children:f}):null,e.jsx("button",{type:"button","aria-label":c?"Close menu":"Open menu","aria-expanded":c,onClick:()=>v(r=>!r),className:n.cn("inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden","transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t.mobileButton),children:c?e.jsx(x.X,{className:"h-5 w-5"}):e.jsx(x.Menu,{className:"h-5 w-5"})})]}),p.map((r,l)=>{var a;if(!((a=r.columns)!=null&&a.length)&&!r.featured)return null;const s=M===l;return e.jsx("div",{id:L(l),role:"region","aria-label":`${r.label} menu`,onMouseEnter:()=>i(l),className:n.cn("absolute top-full z-50 pt-2 transition-all duration-150",w==="floating"?"inset-x-0 mx-auto w-full max-w-5xl":"inset-x-0",s?"visible translate-y-0 opacity-100":"pointer-events-none invisible -translate-y-1 opacity-0"),children:e.jsxs("div",{className:n.cn("overflow-hidden rounded-xl border p-6 md:p-8",t.panel,r.featured?"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12":""),children:[D(r),r.featured&&e.jsx("div",{className:n.cn("mt-8 max-w-sm lg:mt-0 lg:w-64"),children:P(r)})]})},r.label)}),e.jsx("div",{className:n.cn("grid transition-[grid-template-rows,opacity] duration-200 lg:hidden",c?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0",t.mobilePanel),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("ul",{className:"flex flex-col py-4",children:[p.map((r,l)=>{var s;return(s=r.columns)!=null&&s.length||r.featured?e.jsxs("li",{className:"px-5",children:[e.jsxs("button",{type:"button","aria-expanded":y===l,onClick:()=>C(a=>a===l?null:l),className:n.cn("flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",t.mobileButton),children:[e.jsxs("span",{className:"flex items-center gap-2",children:[r.label,r.badge?e.jsx("span",{className:n.cn("rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide",t.badge),children:r.badge}):null]}),e.jsx(x.ChevronDown,{className:n.cn("h-4 w-4 shrink-0 transition-transform duration-150",y===l&&"rotate-180")})]}),e.jsx("div",{className:n.cn("grid transition-[grid-template-rows,opacity] duration-200",y===l?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0"),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("div",{className:"py-2 pl-1",children:[D(r),r.featured?e.jsx("div",{className:"max-w-sm",children:P(r,!0)}):null]})})})]},r.label):e.jsx("li",{className:"px-5",children:e.jsx(d,{href:r.href??"#",onClick:()=>v(!1),className:n.cn("block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",t.mobileLink),children:r.label})},r.label)}),h?e.jsx("li",{className:"px-8 pb-2 pt-3",children:h}):m?e.jsx("li",{className:"mt-3 flex flex-wrap gap-3 px-8 pb-2",children:m}):null]})})})]})};$.displayName="MegaMenu";exports.MegaMenu=$;
3
+ //# sourceMappingURL=MegaMenu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MegaMenu.cjs","sources":["../../../../src/components/MegaMenu/MegaMenu.tsx"],"sourcesContent":["\"use client\";\nimport { useId, useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { getContrastText } from \"../../utils/contrast\";\nimport { ChevronDown, Menu, X } from \"../../icons\";\nimport type { MegaMenuProps, MegaMenuVariant, MegaMenuItem } from \"./types\";\n\ninterface MegaMenuStyle {\n shell: string;\n bar: string;\n header: string;\n trigger: string;\n triggerOpen: string;\n badge: string;\n panel: string;\n columnTitle: string;\n columnLink: string;\n linkDescription: string;\n mobilePanel: string;\n mobileButton: string;\n mobileLink: string;\n brandText: string;\n brandDot: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<MegaMenuVariant, MegaMenuStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileButton: `${light} hover:bg-surface`,\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: light,\n brandDot: \"bg-foreground\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n trigger: \"text-muted-foreground hover:text-foreground hover:bg-surface\",\n triggerOpen: \"bg-surface text-foreground\",\n badge: \"bg-primary-soft text-primary\",\n panel: \"border-border bg-surface shadow-raised\",\n columnTitle: \"text-muted-foreground/70\",\n columnLink: \"hover:bg-surface-strong\",\n linkDescription: \"text-muted-foreground\",\n mobilePanel: \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileButton: `${light} hover:bg-surface`,\n mobileLink: \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n brandText: light,\n brandDot: \"bg-foreground\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n trigger: \"text-on-secondary/60 hover:text-on-secondary hover:bg-white/10\",\n triggerOpen: \"bg-white/10 text-on-secondary\",\n badge: \"bg-white/15 text-on-secondary\",\n panel: \"border-white/10 bg-[#161616]\",\n columnTitle: \"text-on-secondary/45\",\n columnLink: \"hover:bg-white/10\",\n linkDescription: \"text-on-secondary/50\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileButton: `${inverse} hover:bg-white/10`,\n mobileLink: \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n },\n};\n\nexport const MegaMenu = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n items,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n onKeyDown,\n ...props\n}: MegaMenuProps) => {\n const ids = useId();\n const Link = LinkComponent ?? \"a\";\n const [openIndex, setOpenIndex] = useState<number | null>(null);\n const [mobileOpen, setMobileOpen] = useState(false);\n const [mobileExpanded, setMobileExpanded] = useState<number | null>(null);\n const s = styles[variant];\n\n const closePanels = () => setOpenIndex(null);\n const closeAll = () => {\n setOpenIndex(null);\n setMobileOpen(false);\n setMobileExpanded(null);\n };\n\n const panelId = (i: number) => `${ids}-panel-${i}`;\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n const triggerClasses = cn(\n \"flex items-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150\",\n s.trigger,\n );\n\n const renderColumns = (item: MegaMenuItem) => (\n <div\n className={cn(\n \"grid gap-x-10 gap-y-8 sm:grid-cols-2\",\n item.featured ? \"\" : \"lg:grid-cols-3\",\n )}\n >\n {item.columns?.map((column, ci) => (\n <div key={column.title ?? ci}>\n {column.title ? (\n <h4\n className={cn(\n \"text-xs font-semibold uppercase tracking-[0.14em]\",\n s.columnTitle,\n )}\n >\n {column.title}\n </h4>\n ) : null}\n <ul className={cn(column.title && \"mt-3\", \"space-y-0.5\")}>\n {column.links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n onClick={closeAll}\n className={cn(\n \"-mx-2 block rounded-md px-2 py-2 transition-colors duration-150\",\n s.columnLink,\n )}\n >\n <span className=\"block text-sm font-medium text-foreground\">\n {link.label}\n </span>\n {link.description ? (\n <span\n className={cn(\n \"mt-0.5 block text-[13px] leading-snug\",\n s.linkDescription,\n )}\n >\n {link.description}\n </span>\n ) : null}\n </Link>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n\n const renderFeatured = (item: MegaMenuItem, mobile = false) => {\n const featured = item.featured;\n if (!featured) return null;\n const featuredStyle = featured.accent\n ? { backgroundColor: featured.accent, color: getContrastText(featured.accent) }\n : undefined;\n\n return (\n <Link\n href={featured.href}\n onClick={closeAll}\n className={cn(\n \"group relative block overflow-hidden rounded-lg p-6 transition-transform duration-150 hover:-translate-y-0.5\",\n mobile && \"mt-8\",\n !featured.accent && \"bg-primary text-on-primary\",\n )}\n style={featuredStyle}\n >\n <div className=\"flex h-full flex-col justify-between gap-4\">\n <div>\n <h4 className=\"font-display text-base font-semibold tracking-tight\">\n {featured.title}\n </h4>\n {featured.description ? (\n <p className=\"mt-1.5 text-[13px] leading-relaxed opacity-80\">\n {featured.description}\n </p>\n ) : null}\n </div>\n {featured.cta ? (\n <span className=\"text-sm font-semibold underline decoration-1 underline-offset-4\">\n {featured.cta} →\n </span>\n ) : null}\n </div>\n <div\n aria-hidden\n className=\"pointer-events-none absolute -right-8 -top-8 h-28 w-28 rounded-full opacity-20 blur-2xl bg-black/40\"\n />\n </Link>\n );\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Escape\") {\n closeAll();\n }\n onKeyDown?.(event);\n };\n\n return (\n <header\n className={cn(\n \"relative w-full transition-colors duration-200\",\n sticky && \"sticky top-0 z-50\",\n s.shell,\n s.header,\n className,\n )}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <nav className={cn(\"relative flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} onMouseLeave={closePanels} aria-label=\"Mega menu\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className=\"hidden items-center gap-1 lg:flex\">\n {items.map((item, i) => {\n const hasPanel = Boolean(item.columns?.length || item.featured);\n const open = openIndex === i;\n return (\n <li key={item.label} className=\"relative\">\n {hasPanel ? (\n <button\n type=\"button\"\n aria-haspopup=\"true\"\n aria-expanded={open}\n aria-controls={panelId(i)}\n onClick={() => setOpenIndex(open ? null : i)}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(triggerClasses, open && s.triggerOpen)}\n >\n <span className=\"flex items-center gap-1.5\">\n {item.label}\n {item.badge ? (\n <span\n className={cn(\n \"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\",\n s.badge,\n )}\n >\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n open && \"rotate-180\",\n )}\n />\n </button>\n ) : (\n <Link href={item.href ?? \"#\"} className={triggerClasses}>\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </Link>\n )}\n </li>\n );\n })}\n </ul>\n\n <div className=\"hidden items-center gap-3 lg:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n {languageSwitcher ? (\n <div className=\"flex items-center lg:hidden\">{languageSwitcher}</div>\n ) : null}\n\n <button\n type=\"button\"\n aria-label={mobileOpen ? \"Close menu\" : \"Open menu\"}\n aria-expanded={mobileOpen}\n onClick={() => setMobileOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md lg:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.mobileButton,\n )}\n >\n {mobileOpen ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n {items.map((item, i) => {\n if (!item.columns?.length && !item.featured) return null;\n const open = openIndex === i;\n return (\n <div\n key={item.label}\n id={panelId(i)}\n role=\"region\"\n aria-label={`${item.label} menu`}\n onMouseEnter={() => setOpenIndex(i)}\n className={cn(\n \"absolute top-full z-50 pt-2 transition-all duration-150\",\n variant === \"floating\" ? \"inset-x-0 mx-auto w-full max-w-5xl\" : \"inset-x-0\",\n open\n ? \"visible translate-y-0 opacity-100\"\n : \"pointer-events-none invisible -translate-y-1 opacity-0\",\n )}\n >\n <div\n className={cn(\n \"overflow-hidden rounded-xl border p-6 md:p-8\",\n s.panel,\n item.featured ? \"lg:grid lg:grid-cols-[minmax(0,1fr)_auto] lg:gap-12\" : \"\",\n )}\n >\n {renderColumns(item)}\n {item.featured && (\n <div className={cn(\"mt-8 max-w-sm lg:mt-0 lg:w-64\")}>\n {renderFeatured(item)}\n </div>\n )}\n </div>\n </div>\n );\n })}\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 lg:hidden\",\n mobileOpen ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className=\"flex flex-col py-4\">\n {items.map((item, i) =>\n item.columns?.length || item.featured ? (\n <li key={item.label} className=\"px-5\">\n <button\n type=\"button\"\n aria-expanded={mobileExpanded === i}\n onClick={() =>\n setMobileExpanded((prev) => (prev === i ? null : i))\n }\n className={cn(\n \"flex w-full items-center justify-between rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileButton,\n )}\n >\n <span className=\"flex items-center gap-2\">\n {item.label}\n {item.badge ? (\n <span className={cn(\"rounded-full px-1.5 py-0.5 text-[10px] font-semibold tracking-wide\", s.badge)}>\n {item.badge}\n </span>\n ) : null}\n </span>\n <ChevronDown\n className={cn(\n \"h-4 w-4 shrink-0 transition-transform duration-150\",\n mobileExpanded === i && \"rotate-180\",\n )}\n />\n </button>\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200\",\n mobileExpanded === i\n ? \"grid-rows-[1fr] opacity-100\"\n : \"grid-rows-[0fr] opacity-0\",\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <div className=\"py-2 pl-1\">\n {renderColumns(item)}\n {item.featured ? (\n <div className=\"max-w-sm\">{renderFeatured(item, true)}</div>\n ) : null}\n </div>\n </div>\n </div>\n </li>\n ) : (\n <li key={item.label} className=\"px-5\">\n <Link\n href={item.href ?? \"#\"}\n onClick={() => setMobileOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {item.label}\n </Link>\n </li>\n ),\n )}\n {cta ? (\n <li className=\"px-8 pb-2 pt-3\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-8 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nMegaMenu.displayName = \"MegaMenu\";"],"names":["inverse","light","styles","MegaMenu","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","items","actions","cta","languageSwitcher","sticky","LinkComponent","onKeyDown","props","ids","useId","Link","openIndex","setOpenIndex","useState","mobileOpen","setMobileOpen","mobileExpanded","setMobileExpanded","s","closePanels","closeAll","panelId","i","logoNode","jsx","cn","brandNode","jsxs","triggerClasses","renderColumns","item","column","ci","link","renderFeatured","mobile","featured","featuredStyle","getContrastText","handleKeyDown","event","hasPanel","_a","open","ChevronDown","o","X","Menu","prev"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),t=require("react"),w=require("../utils/cn.cjs"),j=require("../icons.cjs"),N={sm:"max-w-sm",md:"max-w-lg",lg:"max-w-2xl"},v=t.forwardRef(({className:x,open:c,onClose:o,title:s,description:n,footer:u,size:b="md",children:p,...h},i)=>{const d=t.useId(),f=t.useId(),l=t.useRef(null),a=t.useRef(o);return t.useEffect(()=>{a.current=o},[o]),t.useEffect(()=>{const e=l.current;e&&(e.hasAttribute("popover")||e.setAttribute("popover","auto"))},[]),t.useEffect(()=>{const e=l.current;e&&(c?(e.matches(":popover-open")||e.showPopover(),document.body.style.overflow="hidden"):(e.matches(":popover-open")&&e.hidePopover(),document.body.style.overflow=""))},[c]),t.useEffect(()=>{const e=l.current;if(!e)return;const m=y=>{var g;y.newState==="closed"&&((g=a.current)==null||g.call(a))};return e.addEventListener("toggle",m),()=>e.removeEventListener("toggle",m)},[]),t.useEffect(()=>()=>{document.body.style.overflow=""},[]),r.jsxs("div",{ref:e=>{l.current=e,typeof i=="function"?i(e):i&&(i.current=e)},role:"dialog","aria-modal":"true","aria-labelledby":s?d:void 0,"aria-describedby":n?f:void 0,className:w.cn("modal-anim modal-backdrop fixed inset-0 z-[100] m-auto h-fit max-h-[calc(100vh-2rem)] w-fit max-w-[calc(100vw-2rem)] overflow-y-auto rounded-2xl border border-border bg-surface p-6 text-foreground shadow-overlay",N[b],x),...h,children:[s?r.jsx("h2",{id:d,className:"pr-8 font-display text-lg font-semibold tracking-tight text-foreground",children:s}):null,n?r.jsx("p",{id:f,className:"mt-1.5 text-sm leading-6 text-muted-foreground",children:n}):null,r.jsx("button",{type:"button","aria-label":"Close dialog",onClick:o,className:"absolute right-4 top-4 inline-flex h-8 w-8 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors duration-150 hover:bg-surface-strong hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",children:r.jsx(j.X,{className:"h-4 w-4"})}),r.jsx("div",{className:s||n?"mt-4":"pt-8",children:p}),u?r.jsx("div",{className:"mt-6 flex flex-wrap items-center justify-end gap-3",children:u}):null]})});v.displayName="Modal";exports.Modal=v;
3
+ //# sourceMappingURL=Modal.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.cjs","sources":["../../../src/components/Modal.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef, useEffect, useId, useRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { cn } from \"../utils/cn\";\nimport { X } from \"../icons\";\n\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n open: boolean;\n onClose: () => void;\n /** Dialog heading (required for a11y; auto-linked via `aria-labelledby`). */\n title?: ReactNode;\n description?: ReactNode;\n /** Rendered below the content, e.g. actions. */\n footer?: ReactNode;\n /** Content width. Defaults to `md`. */\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst sizes: Record<NonNullable<ModalProps[\"size\"]>, string> = {\n sm: \"max-w-sm\",\n md: \"max-w-lg\",\n lg: \"max-w-2xl\",\n};\n\n/**\n * Accessible dialog built on the HTML Popover API.\n *\n * `popover=\"auto\"` renders in the top layer and gives light-dismiss (outside\n * click + `Escape`), automatic focus movement and restoration for free, so no\n * portal, focus trap or key handlers are needed. State stays controlled via\n * `open` / `onClose`.\n */\nexport const Modal = forwardRef<HTMLDivElement, ModalProps>(\n ({ className, open, onClose, title, description, footer, size = \"md\", children, ...props }, ref) => {\n const titleId = useId();\n const descriptionId = useId();\n const internalRef = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n useEffect(() => {\n const el = internalRef.current;\n if (!el) return;\n if (!el.hasAttribute(\"popover\")) el.setAttribute(\"popover\", \"auto\");\n }, []);\n\n useEffect(() => {\n const el = internalRef.current;\n if (!el) return;\n if (open) {\n if (!el.matches(\":popover-open\")) el.showPopover();\n document.body.style.overflow = \"hidden\";\n } else {\n if (el.matches(\":popover-open\")) el.hidePopover();\n document.body.style.overflow = \"\";\n }\n }, [open]);\n\n useEffect(() => {\n const el = internalRef.current;\n if (!el) return;\n const onToggle = (event: Event) => {\n if ((event as ToggleEvent).newState === \"closed\") onCloseRef.current?.();\n };\n el.addEventListener(\"toggle\", onToggle);\n return () => el.removeEventListener(\"toggle\", onToggle);\n }, []);\n\n useEffect(\n () => () => {\n document.body.style.overflow = \"\";\n },\n [],\n );\n\n return (\n <div\n ref={(node) => {\n internalRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(\n \"modal-anim modal-backdrop fixed inset-0 z-[100] m-auto h-fit max-h-[calc(100vh-2rem)] w-fit max-w-[calc(100vw-2rem)] overflow-y-auto rounded-2xl border border-border bg-surface p-6 text-foreground shadow-overlay\",\n sizes[size],\n className,\n )}\n {...props}\n >\n {title ? (\n <h2\n id={titleId}\n className=\"pr-8 font-display text-lg font-semibold tracking-tight text-foreground\"\n >\n {title}\n </h2>\n ) : null}\n {description ? (\n <p id={descriptionId} className=\"mt-1.5 text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Close dialog\"\n onClick={onClose}\n className=\"absolute right-4 top-4 inline-flex h-8 w-8 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors duration-150 hover:bg-surface-strong hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n <div className={title || description ? \"mt-4\" : \"pt-8\"}>{children}</div>\n {footer ? (\n <div className=\"mt-6 flex flex-wrap items-center justify-end gap-3\">{footer}</div>\n ) : null}\n </div>\n );\n },\n);\nModal.displayName = \"Modal\";"],"names":["sizes","Modal","forwardRef","className","open","onClose","title","description","footer","size","children","props","ref","titleId","useId","descriptionId","internalRef","useRef","onCloseRef","useEffect","el","onToggle","event","_a","jsxs","node","cn","jsx","X"],"mappings":"+LAiBMA,EAAyD,CAC7D,GAAI,WACJ,GAAI,WACJ,GAAI,WACN,EAUaC,EAAQC,EAAAA,WACnB,CAAC,CAAE,UAAAC,EAAW,KAAAC,EAAM,QAAAC,EAAS,MAAAC,EAAO,YAAAC,EAAa,OAAAC,EAAQ,KAAAC,EAAO,KAAM,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAAQ,CAClG,MAAMC,EAAUC,EAAAA,MAAA,EACVC,EAAgBD,EAAAA,MAAA,EAChBE,EAAcC,EAAAA,OAA8B,IAAI,EAChDC,EAAaD,EAAAA,OAAOZ,CAAO,EAEjCc,OAAAA,EAAAA,UAAU,IAAM,CACdD,EAAW,QAAUb,CACvB,EAAG,CAACA,CAAO,CAAC,EAEZc,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAKJ,EAAY,QAClBI,IACAA,EAAG,aAAa,SAAS,GAAGA,EAAG,aAAa,UAAW,MAAM,EACpE,EAAG,CAAA,CAAE,EAELD,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAKJ,EAAY,QAClBI,IACDhB,GACGgB,EAAG,QAAQ,eAAe,KAAM,YAAA,EACrC,SAAS,KAAK,MAAM,SAAW,WAE3BA,EAAG,QAAQ,eAAe,KAAM,YAAA,EACpC,SAAS,KAAK,MAAM,SAAW,IAEnC,EAAG,CAAChB,CAAI,CAAC,EAETe,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAKJ,EAAY,QACvB,GAAI,CAACI,EAAI,OACT,MAAMC,EAAYC,GAAiB,OAC5BA,EAAsB,WAAa,YAAUC,EAAAL,EAAW,UAAX,MAAAK,EAAA,KAAAL,GACpD,EACA,OAAAE,EAAG,iBAAiB,SAAUC,CAAQ,EAC/B,IAAMD,EAAG,oBAAoB,SAAUC,CAAQ,CACxD,EAAG,CAAA,CAAE,EAELF,EAAAA,UACE,IAAM,IAAM,CACV,SAAS,KAAK,MAAM,SAAW,EACjC,EACA,CAAA,CAAC,EAIDK,EAAAA,KAAC,MAAA,CACC,IAAMC,GAAS,CACbT,EAAY,QAAUS,EAClB,OAAOb,GAAQ,WAAYA,EAAIa,CAAI,EAC9Bb,MAAS,QAAUa,EAC9B,EACA,KAAK,SACL,aAAW,OACX,kBAAiBnB,EAAQO,EAAU,OACnC,mBAAkBN,EAAcQ,EAAgB,OAChD,UAAWW,EAAAA,GACT,sNACA1B,EAAMS,CAAI,EACVN,CAAA,EAED,GAAGQ,EAEH,SAAA,CAAAL,EACCqB,EAAAA,IAAC,KAAA,CACC,GAAId,EACJ,UAAU,yEAET,SAAAP,CAAA,CAAA,EAED,KACHC,QACE,IAAA,CAAE,GAAIQ,EAAe,UAAU,iDAC7B,WACH,EACE,KACJY,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,aAAW,eACX,QAAStB,EACT,UAAU,8QAEV,SAAAsB,EAAAA,IAACC,EAAAA,EAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CAAA,QAExB,MAAA,CAAI,UAAWtB,GAASC,EAAc,OAAS,OAAS,SAAAG,EAAS,EACjEF,EACCmB,EAAAA,IAAC,MAAA,CAAI,UAAU,qDAAsD,WAAO,EAC1E,IAAA,CAAA,CAAA,CAGV,CACF,EACA1B,EAAM,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),q=require("react"),o=require("../../utils/cn.cjs"),f=require("../../icons.cjs"),p="text-on-secondary",t="text-foreground",B={classic:{shell:"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",link:"text-muted-foreground hover:text-foreground",mobilePanel:"border-t border-border bg-background",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",menuButton:`${t} hover:bg-surface`,brandText:t,brandDot:"bg-foreground",desktopList:"hidden items-center gap-7 md:flex"},floating:{shell:"px-0",bar:"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70",header:"px-3 sm:px-6",link:"text-muted-foreground hover:text-foreground",mobilePanel:"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface",mobileLink:"text-muted-foreground hover:bg-surface hover:text-foreground",menuButton:`${t} hover:bg-surface`,brandText:t,brandDot:"bg-foreground",desktopList:"hidden items-center gap-7 md:flex"},inverse:{shell:"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md",bar:"mx-auto max-w-6xl px-5 sm:px-8",header:"px-0",link:"text-on-secondary/60 hover:text-on-secondary",mobilePanel:"border-t border-white/10 bg-[#101010]",mobileLink:"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary",menuButton:`${p} hover:bg-white/10`,brandText:p,brandDot:"bg-on-secondary",desktopList:"hidden items-center gap-7 md:flex"}},g=({className:v,variant:m="classic",brand:a,logo:j,logoSrc:b,logoAlt:N,logoClassName:k,brandHref:w="#",links:x,actions:d,cta:i,languageSwitcher:l,sticky:y=!0,LinkComponent:L,...P})=>{const[s,u]=q.useState(!1),c=L??"a",r=B[m],h=j??(b?e.jsx("img",{src:b,alt:N??(typeof a=="string"?a:"Logo"),className:o.cn("h-7 w-auto",k)}):null),T=h?e.jsx("span",{className:"flex items-center",children:h}):e.jsxs("span",{className:o.cn("flex items-center gap-2 font-display text-[17px] font-bold tracking-tight",r.brandText),children:[e.jsx("span",{"aria-hidden":!0,className:o.cn("inline-block h-2.5 w-2.5 rounded-sm",r.brandDot)}),a]});return e.jsxs("header",{className:o.cn("w-full transition-colors duration-200",y&&"sticky top-0 z-50",r.shell,r.header,v),...P,children:[e.jsxs("nav",{className:o.cn("flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200",r.bar),"aria-label":"Main navigation",children:[e.jsx(c,{href:w,className:"shrink-0",children:T}),e.jsx("ul",{className:r.desktopList,children:x.map(n=>e.jsx("li",{children:e.jsx(c,{href:n.href,className:o.cn("text-sm font-medium transition-colors duration-150",r.link),children:n.label})},n.href))}),e.jsxs("div",{className:"hidden items-center gap-3 md:flex",children:[l,d,i]}),l?e.jsx("div",{className:"flex items-center md:hidden",children:l}):null,e.jsx("button",{type:"button","aria-label":s?"Close menu":"Open menu","aria-expanded":s,onClick:()=>u(n=>!n),className:o.cn("inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden","transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",r.menuButton),children:s?e.jsx(f.X,{className:"h-5 w-5"}):e.jsx(f.Menu,{className:"h-5 w-5"})})]}),e.jsx("div",{className:o.cn("grid transition-[grid-template-rows,opacity] duration-200 md:hidden",s?"grid-rows-[1fr] opacity-100":"grid-rows-[0fr] opacity-0",r.mobilePanel),children:e.jsx("div",{className:"min-h-0 overflow-hidden",children:e.jsxs("ul",{className:o.cn("flex flex-col py-4",m!=="floating"&&"px-5"),children:[x.map(n=>e.jsx("li",{children:e.jsx(c,{href:n.href,onClick:()=>u(!1),className:o.cn("block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150",r.mobileLink),children:n.label})},n.href)),i?e.jsx("li",{className:"mt-3 px-2 pb-2",children:i}):d?e.jsx("li",{className:"mt-3 flex flex-wrap gap-3 px-2 pb-2",children:d}):null]})})})]})};g.displayName="Navbar";exports.Navbar=g;
3
+ //# sourceMappingURL=Navbar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Navbar.cjs","sources":["../../../../src/components/Navbar/Navbar.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Menu, X } from \"../../icons\";\nimport type { NavbarProps, NavbarVariant } from \"./types\";\n\ninterface NavbarStyle {\n shell: string;\n bar: string;\n header: string;\n link: string;\n mobilePanel: string;\n mobileLink: string;\n menuButton: string;\n brandText: string;\n brandDot: string;\n desktopList: string;\n}\n\nconst inverse = \"text-on-secondary\";\nconst light = \"text-foreground\";\n\nconst styles: Record<NavbarVariant, NavbarStyle> = {\n classic: {\n shell: \"border-b border-border bg-background/85 backdrop-blur-md supports-[backdrop-filter]:bg-background/75\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel: \"border-t border-border bg-background\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n floating: {\n shell: \"px-0\",\n bar: \"mx-auto mt-3 max-w-5xl rounded-xl border border-border bg-surface/90 px-5 shadow-soft backdrop-blur-md supports-[backdrop-filter]:bg-surface/70\",\n header: \"px-3 sm:px-6\",\n link: \"text-muted-foreground hover:text-foreground\",\n mobilePanel:\n \"mx-3 mb-3 max-w-5xl overflow-hidden rounded-b-xl border border-border bg-surface\",\n mobileLink:\n \"text-muted-foreground hover:bg-surface hover:text-foreground\",\n menuButton: `${light} hover:bg-surface`,\n brandText: light,\n brandDot: \"bg-foreground\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n inverse: {\n shell: \"border-b border-white/10 bg-[#101010]/85 backdrop-blur-md\",\n bar: \"mx-auto max-w-6xl px-5 sm:px-8\",\n header: \"px-0\",\n link: \"text-on-secondary/60 hover:text-on-secondary\",\n mobilePanel: \"border-t border-white/10 bg-[#101010]\",\n mobileLink:\n \"text-on-secondary/70 hover:bg-white/10 hover:text-on-secondary\",\n menuButton: `${inverse} hover:bg-white/10`,\n brandText: inverse,\n brandDot: \"bg-on-secondary\",\n desktopList: \"hidden items-center gap-7 md:flex\",\n },\n};\n\nexport const Navbar = ({\n className,\n variant = \"classic\",\n brand,\n logo,\n logoSrc,\n logoAlt,\n logoClassName,\n brandHref = \"#\",\n links,\n actions,\n cta,\n languageSwitcher,\n sticky = true,\n LinkComponent,\n ...props\n}: NavbarProps) => {\n const [open, setOpen] = useState(false);\n const Link = LinkComponent ?? \"a\";\n const s = styles[variant];\n\n const logoNode =\n logo ??\n (logoSrc ? (\n <img\n src={logoSrc}\n alt={logoAlt ?? (typeof brand === \"string\" ? brand : \"Logo\")}\n className={cn(\"h-7 w-auto\", logoClassName)}\n />\n ) : null);\n\n const brandNode = logoNode ? (\n <span className=\"flex items-center\">{logoNode}</span>\n ) : (\n <span className={cn(\"flex items-center gap-2 font-display text-[17px] font-bold tracking-tight\", s.brandText)}>\n <span aria-hidden className={cn(\"inline-block h-2.5 w-2.5 rounded-sm\", s.brandDot)} />\n {brand}\n </span>\n );\n\n return (\n <header className={cn(\"w-full transition-colors duration-200\", sticky && \"sticky top-0 z-50\", s.shell, s.header, className)} {...props}>\n <nav className={cn(\"flex h-16 w-full items-center justify-between gap-4 transition-colors duration-200\", s.bar)} aria-label=\"Main navigation\">\n <Link href={brandHref} className=\"shrink-0\">\n {brandNode}\n </Link>\n\n <ul className={s.desktopList}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n className={cn(\"text-sm font-medium transition-colors duration-150\", s.link)}\n >\n {link.label}\n </Link>\n </li>\n ))}\n </ul>\n\n <div className=\"hidden items-center gap-3 md:flex\">\n {languageSwitcher}\n {actions}\n {cta}\n </div>\n\n {languageSwitcher ? (\n <div className=\"flex items-center md:hidden\">{languageSwitcher}</div>\n ) : null}\n\n <button\n type=\"button\"\n aria-label={open ? \"Close menu\" : \"Open menu\"}\n aria-expanded={open}\n onClick={() => setOpen((o) => !o)}\n className={cn(\n \"inline-flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-md md:hidden\",\n \"transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n s.menuButton,\n )}\n >\n {open ? <X className=\"h-5 w-5\" /> : <Menu className=\"h-5 w-5\" />}\n </button>\n </nav>\n\n <div\n className={cn(\n \"grid transition-[grid-template-rows,opacity] duration-200 md:hidden\",\n open ? \"grid-rows-[1fr] opacity-100\" : \"grid-rows-[0fr] opacity-0\",\n s.mobilePanel,\n )}\n >\n <div className=\"min-h-0 overflow-hidden\">\n <ul className={cn(\"flex flex-col py-4\", variant !== \"floating\" && \"px-5\")}>\n {links.map((link) => (\n <li key={link.href}>\n <Link\n href={link.href}\n onClick={() => setOpen(false)}\n className={cn(\n \"block rounded-md px-2 py-2.5 text-sm font-medium transition-colors duration-150\",\n s.mobileLink,\n )}\n >\n {link.label}\n </Link>\n </li>\n ))}\n {cta ? (\n <li className=\"mt-3 px-2 pb-2\">{cta}</li>\n ) : actions ? (\n <li className=\"mt-3 flex flex-wrap gap-3 px-2 pb-2\">{actions}</li>\n ) : null}\n </ul>\n </div>\n </div>\n </header>\n );\n};\nNavbar.displayName = \"Navbar\";"],"names":["inverse","light","styles","Navbar","className","variant","brand","logo","logoSrc","logoAlt","logoClassName","brandHref","links","actions","cta","languageSwitcher","sticky","LinkComponent","props","open","setOpen","useState","Link","s","logoNode","jsx","cn","brandNode","jsxs","link","o","X","Menu"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),i=require("./variants/Inline.cjs"),l=require("./variants/Card.cjs"),o=require("./variants/Underline.cjs"),n=s=>{const{option:t="inline",...e}=s;return t==="card"?r.jsx(l.NewsletterCard,{...e}):t==="underline"?r.jsx(o.NewsletterUnderline,{...e}):r.jsx(i.NewsletterInline,{...e})};n.displayName="Newsletter";exports.Newsletter=n;
2
+ //# sourceMappingURL=Newsletter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Newsletter.cjs","sources":["../../../../src/components/Newsletter/Newsletter.tsx"],"sourcesContent":["import type { NewsletterProps } from \"./types\";\nimport { NewsletterInline } from \"./variants/Inline\";\nimport { NewsletterCard } from \"./variants/Card\";\nimport { NewsletterUnderline } from \"./variants/Underline\";\n\nexport const Newsletter = (props: NewsletterProps) => {\n const { option = \"inline\", ...rest } = props;\n if (option === \"card\") return <NewsletterCard {...rest} />;\n if (option === \"underline\") return <NewsletterUnderline {...rest} />;\n return <NewsletterInline {...rest} />;\n};\nNewsletter.displayName = \"Newsletter\";"],"names":["Newsletter","props","option","rest","jsx","NewsletterCard","NewsletterUnderline","NewsletterInline"],"mappings":"+NAKaA,EAAcC,GAA2B,CACpD,KAAM,CAAE,OAAAC,EAAS,SAAU,GAAGC,GAASF,EACvC,OAAIC,IAAW,OAAeE,EAAAA,IAACC,EAAAA,eAAA,CAAgB,GAAGF,EAAM,EACpDD,IAAW,YAAoBE,EAAAA,IAACE,EAAAA,oBAAA,CAAqB,GAAGH,EAAM,EAC3DC,MAACG,EAAAA,iBAAA,CAAkB,GAAGJ,CAAA,CAAM,CACrC,EACAH,EAAW,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),s=require("../../icons.cjs"),n="w-full rounded-lg border border-border bg-surface px-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background";function o({message:e}){return t.jsxs("p",{className:"flex items-center gap-2 rounded-lg border border-accent/40 bg-accent/10 px-4 py-3.5 text-sm font-medium text-accent",role:"status",children:[t.jsx(s.Check,{className:"h-4 w-4"}),e]})}function u({error:e,note:r}){return e?t.jsx("p",{className:"mt-2 text-sm font-medium text-red-500",role:"alert",children:e}):r?t.jsx("p",{className:"mt-3 text-xs leading-5 text-muted-foreground",children:r}):null}exports.NewsletterNote=u;exports.NewsletterSuccess=o;exports.inputBase=n;
2
+ //# sourceMappingURL=parts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.cjs","sources":["../../../../src/components/Newsletter/parts.tsx"],"sourcesContent":["import { Check } from \"../../icons\";\n\nexport const inputBase =\n \"w-full rounded-lg border border-border bg-surface px-4 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:ring-offset-background\";\n\nexport function NewsletterSuccess({ message }: { message: string }) {\n return (\n <p className=\"flex items-center gap-2 rounded-lg border border-accent/40 bg-accent/10 px-4 py-3.5 text-sm font-medium text-accent\" role=\"status\">\n <Check className=\"h-4 w-4\" />\n {message}\n </p>\n );\n}\n\nexport function NewsletterNote({ error, note }: { error: string | null; note?: string }) {\n if (error) {\n return <p className=\"mt-2 text-sm font-medium text-red-500\" role=\"alert\">{error}</p>;\n }\n if (note) {\n return <p className=\"mt-3 text-xs leading-5 text-muted-foreground\">{note}</p>;\n }\n return null;\n}"],"names":["inputBase","NewsletterSuccess","message","jsxs","jsx","Check","NewsletterNote","error","note"],"mappings":"kJAEaA,EACX,oNAEK,SAASC,EAAkB,CAAE,QAAAC,GAAgC,CAClE,OACEC,EAAAA,KAAC,IAAA,CAAE,UAAU,sHAAsH,KAAK,SACtI,SAAA,CAAAC,EAAAA,IAACC,EAAAA,MAAA,CAAM,UAAU,SAAA,CAAU,EAC1BH,CAAA,EACH,CAEJ,CAEO,SAASI,EAAe,CAAE,MAAAC,EAAO,KAAAC,GAAiD,CACvF,OAAID,QACM,IAAA,CAAE,UAAU,wCAAwC,KAAK,QAAS,SAAAA,EAAM,EAE9EC,EACKJ,EAAAA,IAAC,IAAA,CAAE,UAAU,+CAAgD,SAAAI,EAAK,EAEpE,IACT"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react");function c(e){const[l,u]=s.useState(""),[o,i]=s.useState(!1),[a,t]=s.useState(null);return{email:l,done:o,error:a,handleSubmit:r=>{r.preventDefault();const n=l.trim();if(!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(n)){t("Please enter a valid email.");return}t(null),i(!0),e==null||e(n)},updateEmail:r=>{u(r),a&&t(null)}}}exports.useNewsletterForm=c;
3
+ //# sourceMappingURL=useNewsletterForm.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNewsletterForm.cjs","sources":["../../../../src/components/Newsletter/useNewsletterForm.ts"],"sourcesContent":["\"use client\";\nimport { useState, type FormEvent } from \"react\";\n\nexport function useNewsletterForm(onSubmit?: (email: string) => void) {\n const [email, setEmail] = useState(\"\");\n const [done, setDone] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault();\n const value = email.trim();\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n setError(\"Please enter a valid email.\");\n return;\n }\n setError(null);\n setDone(true);\n onSubmit?.(value);\n };\n\n const updateEmail = (value: string) => {\n setEmail(value);\n if (error) setError(null);\n };\n\n return { email, done, error, handleSubmit, updateEmail };\n}"],"names":["useNewsletterForm","onSubmit","email","setEmail","useState","done","setDone","error","setError","event","value"],"mappings":"yGAGO,SAASA,EAAkBC,EAAoC,CACpE,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAE,EAC/B,CAACC,EAAMC,CAAO,EAAIF,EAAAA,SAAS,EAAK,EAChC,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAwB,IAAI,EAmBtD,MAAO,CAAE,MAAAF,EAAO,KAAAG,EAAM,MAAAE,EAAO,aAjBPE,GAAqB,CACzCA,EAAM,eAAA,EACN,MAAMC,EAAQR,EAAM,KAAA,EACpB,GAAI,CAAC,6BAA6B,KAAKQ,CAAK,EAAG,CAC7CF,EAAS,6BAA6B,EACtC,MACF,CACAA,EAAS,IAAI,EACbF,EAAQ,EAAI,EACZL,GAAA,MAAAA,EAAWS,EACb,EAO2C,YALtBA,GAAkB,CACrCP,EAASO,CAAK,EACVH,KAAgB,IAAI,CAC1B,CAE2C,CAC7C"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("../../../utils/cn.cjs"),t=require("../../../icons.cjs"),h=require("../useNewsletterForm.cjs"),s=require("../parts.cjs");function i({className:l,placeholder:n="you@company.com",buttonLabel:o="Join",successMessage:a="You’re on the list!",note:c,onSubmit:m,...u}){const{email:d,done:f,error:x,handleSubmit:g,updateEmail:p}=h.useNewsletterForm(m);return e.jsx("form",{onSubmit:g,className:r.cn("w-full",l),...u,children:f?e.jsx(s.NewsletterSuccess,{message:a}):e.jsxs("div",{className:"rounded-xl border border-border bg-surface p-7",children:[e.jsxs("div",{className:"mb-5 flex items-center gap-3",children:[e.jsx("span",{className:"inline-flex h-9 w-9 items-center justify-center rounded-lg bg-primary-soft text-primary",children:e.jsx(t.Mail,{className:"h-4 w-4"})}),e.jsx("p",{className:"font-display text-lg font-semibold tracking-tight text-foreground",children:"Monthly digest"})]}),e.jsx("label",{htmlFor:"newsletter-email",className:"sr-only",children:"Your email address"}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row",children:[e.jsx("input",{id:"newsletter-email",type:"email",autoComplete:"email",value:d,onChange:b=>p(b.target.value),placeholder:n,className:r.cn(s.inputBase,"h-11")}),e.jsxs("button",{type:"submit",className:"inline-flex h-11 shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg bg-primary px-5 text-sm font-semibold text-on-primary transition-colors duration-200 hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",children:[o,e.jsx(t.ArrowRight,{className:"h-4 w-4 opacity-60"})]})]}),e.jsx(s.NewsletterNote,{error:x,note:c})]})})}i.displayName="NewsletterCard";exports.NewsletterCard=i;
3
+ //# sourceMappingURL=Card.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.cjs","sources":["../../../../../src/components/Newsletter/variants/Card.tsx"],"sourcesContent":["\"use client\";\nimport { cn } from \"../../../utils/cn\";\nimport { ArrowRight, Mail } from \"../../../icons\";\nimport { useNewsletterForm } from \"../useNewsletterForm\";\nimport { inputBase, NewsletterSuccess, NewsletterNote } from \"../parts\";\nimport type { NewsletterProps } from \"../types\";\n\ninterface CardProps extends Omit<NewsletterProps, \"option\"> {}\n\nexport function NewsletterCard({\n className,\n placeholder = \"you@company.com\",\n buttonLabel = \"Join\",\n successMessage = \"You’re on the list!\",\n note,\n onSubmit,\n ...props\n}: CardProps) {\n const { email, done, error, handleSubmit, updateEmail } = useNewsletterForm(onSubmit);\n\n return (\n <form onSubmit={handleSubmit} className={cn(\"w-full\", className)} {...props}>\n {done ? (\n <NewsletterSuccess message={successMessage} />\n ) : (\n <div className=\"rounded-xl border border-border bg-surface p-7\">\n <div className=\"mb-5 flex items-center gap-3\">\n <span className=\"inline-flex h-9 w-9 items-center justify-center rounded-lg bg-primary-soft text-primary\">\n <Mail className=\"h-4 w-4\" />\n </span>\n <p className=\"font-display text-lg font-semibold tracking-tight text-foreground\">\n Monthly digest\n </p>\n </div>\n <label htmlFor=\"newsletter-email\" className=\"sr-only\">\n Your email address\n </label>\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <input\n id=\"newsletter-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(e) => updateEmail(e.target.value)}\n placeholder={placeholder}\n className={cn(inputBase, \"h-11\")}\n />\n <button\n type=\"submit\"\n className=\"inline-flex h-11 shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg bg-primary px-5 text-sm font-semibold text-on-primary transition-colors duration-200 hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n {buttonLabel}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n </div>\n <NewsletterNote error={error} note={note} />\n </div>\n )}\n </form>\n );\n}\nNewsletterCard.displayName = \"NewsletterCard\";"],"names":["NewsletterCard","className","placeholder","buttonLabel","successMessage","note","onSubmit","props","email","done","error","handleSubmit","updateEmail","useNewsletterForm","jsx","cn","NewsletterSuccess","jsxs","Mail","e","inputBase","ArrowRight","NewsletterNote"],"mappings":"wPASO,SAASA,EAAe,CAC7B,UAAAC,EACA,YAAAC,EAAc,kBACd,YAAAC,EAAc,OACd,eAAAC,EAAiB,sBACjB,KAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAc,CACZ,KAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,aAAAC,EAAc,YAAAC,CAAA,EAAgBC,EAAAA,kBAAkBP,CAAQ,EAEpF,OACEQ,MAAC,QAAK,SAAUH,EAAc,UAAWI,EAAAA,GAAG,SAAUd,CAAS,EAAI,GAAGM,EACnE,SAAAE,EACCK,MAACE,EAAAA,mBAAkB,QAASZ,CAAA,CAAgB,EAE5Ca,EAAAA,KAAC,MAAA,CAAI,UAAU,iDACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAH,EAAAA,IAAC,QAAK,UAAU,0FACd,eAACI,EAAAA,KAAA,CAAK,UAAU,UAAU,CAAA,CAC5B,EACAJ,EAAAA,IAAC,IAAA,CAAE,UAAU,oEAAoE,SAAA,gBAAA,CAEjF,CAAA,EACF,QACC,QAAA,CAAM,QAAQ,mBAAmB,UAAU,UAAU,SAAA,qBAEtD,EACAG,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAH,EAAAA,IAAC,QAAA,CACC,GAAG,mBACH,KAAK,QACL,aAAa,QACb,MAAON,EACP,SAAWW,GAAMP,EAAYO,EAAE,OAAO,KAAK,EAC3C,YAAAjB,EACA,UAAWa,EAAAA,GAAGK,EAAAA,UAAW,MAAM,CAAA,CAAA,EAEjCH,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,UAAU,6UAET,SAAA,CAAAd,EACDW,EAAAA,IAACO,EAAAA,WAAA,CAAW,UAAU,oBAAA,CAAqB,CAAA,CAAA,CAAA,CAC7C,EACF,EACAP,EAAAA,IAACQ,EAAAA,eAAA,CAAe,MAAAZ,EAAc,KAAAL,CAAA,CAAY,CAAA,CAAA,CAC5C,CAAA,CAEJ,CAEJ,CACAL,EAAe,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("../../../utils/cn.cjs"),b=require("../../../icons.cjs"),h=require("../useNewsletterForm.cjs"),s=require("../parts.cjs");function t({className:i,placeholder:n="you@company.com",buttonLabel:l="Join",successMessage:o="You’re on the list!",note:a,onSubmit:c,...u}){const{email:m,done:d,error:f,handleSubmit:g,updateEmail:p}=h.useNewsletterForm(c);return e.jsx("form",{onSubmit:g,className:r.cn("w-full",i),...u,children:d?e.jsx(s.NewsletterSuccess,{message:o}):e.jsxs(e.Fragment,{children:[e.jsx("label",{htmlFor:"newsletter-email",className:"sr-only",children:"Your email address"}),e.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row",children:[e.jsx("input",{id:"newsletter-email",type:"email",autoComplete:"email",value:m,onChange:x=>p(x.target.value),placeholder:n,className:r.cn(s.inputBase,"h-11")}),e.jsxs("button",{type:"submit",className:"inline-flex h-11 shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg bg-primary px-5 text-sm font-semibold text-on-primary transition-colors duration-200 hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",children:[l,e.jsx(b.ArrowRight,{className:"h-4 w-4 opacity-60"})]})]}),e.jsx(s.NewsletterNote,{error:f,note:a})]})})}t.displayName="NewsletterInline";exports.NewsletterInline=t;
3
+ //# sourceMappingURL=Inline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inline.cjs","sources":["../../../../../src/components/Newsletter/variants/Inline.tsx"],"sourcesContent":["\"use client\";\nimport { cn } from \"../../../utils/cn\";\nimport { ArrowRight } from \"../../../icons\";\nimport { useNewsletterForm } from \"../useNewsletterForm\";\nimport { inputBase, NewsletterSuccess, NewsletterNote } from \"../parts\";\nimport type { NewsletterProps } from \"../types\";\n\ninterface InlineProps extends Omit<NewsletterProps, \"option\"> {}\n\nexport function NewsletterInline({\n className,\n placeholder = \"you@company.com\",\n buttonLabel = \"Join\",\n successMessage = \"You’re on the list!\",\n note,\n onSubmit,\n ...props\n}: InlineProps) {\n const { email, done, error, handleSubmit, updateEmail } = useNewsletterForm(onSubmit);\n\n return (\n <form onSubmit={handleSubmit} className={cn(\"w-full\", className)} {...props}>\n {done ? (\n <NewsletterSuccess message={successMessage} />\n ) : (\n <>\n <label htmlFor=\"newsletter-email\" className=\"sr-only\">\n Your email address\n </label>\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <input\n id=\"newsletter-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(e) => updateEmail(e.target.value)}\n placeholder={placeholder}\n className={cn(inputBase, \"h-11\")}\n />\n <button\n type=\"submit\"\n className=\"inline-flex h-11 shrink-0 cursor-pointer items-center justify-center gap-2 rounded-lg bg-primary px-5 text-sm font-semibold text-on-primary transition-colors duration-200 hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\"\n >\n {buttonLabel}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n </div>\n <NewsletterNote error={error} note={note} />\n </>\n )}\n </form>\n );\n}\nNewsletterInline.displayName = \"NewsletterInline\";"],"names":["NewsletterInline","className","placeholder","buttonLabel","successMessage","note","onSubmit","props","email","done","error","handleSubmit","updateEmail","useNewsletterForm","cn","jsx","NewsletterSuccess","jsxs","Fragment","e","inputBase","ArrowRight","NewsletterNote"],"mappings":"wPASO,SAASA,EAAiB,CAC/B,UAAAC,EACA,YAAAC,EAAc,kBACd,YAAAC,EAAc,OACd,eAAAC,EAAiB,sBACjB,KAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAgB,CACd,KAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,aAAAC,EAAc,YAAAC,CAAA,EAAgBC,EAAAA,kBAAkBP,CAAQ,EAEpF,aACG,OAAA,CAAK,SAAUK,EAAc,UAAWG,KAAG,SAAUb,CAAS,EAAI,GAAGM,EACnE,SAAAE,EACCM,EAAAA,IAACC,EAAAA,mBAAkB,QAASZ,CAAA,CAAgB,EAE5Ca,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAH,MAAC,QAAA,CAAM,QAAQ,mBAAmB,UAAU,UAAU,SAAA,qBAEtD,EACAE,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAF,EAAAA,IAAC,QAAA,CACC,GAAG,mBACH,KAAK,QACL,aAAa,QACb,MAAOP,EACP,SAAWW,GAAMP,EAAYO,EAAE,OAAO,KAAK,EAC3C,YAAAjB,EACA,UAAWY,EAAAA,GAAGM,EAAAA,UAAW,MAAM,CAAA,CAAA,EAEjCH,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,UAAU,6UAET,SAAA,CAAAd,EACDY,EAAAA,IAACM,EAAAA,WAAA,CAAW,UAAU,oBAAA,CAAqB,CAAA,CAAA,CAAA,CAC7C,EACF,EACAN,EAAAA,IAACO,EAAAA,eAAA,CAAe,MAAAZ,EAAc,KAAAL,CAAA,CAAY,CAAA,CAAA,CAC5C,CAAA,CAEJ,CAEJ,CACAL,EAAiB,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),g=require("../../../utils/cn.cjs"),h=require("../../../icons.cjs"),N=require("../useNewsletterForm.cjs"),r=require("../parts.cjs");function t({className:s,placeholder:o="you@company.com",buttonLabel:n="Join",successMessage:l="You’re on the list!",note:i,onSubmit:a,...u}){const{email:m,done:c,error:d,handleSubmit:x,updateEmail:p}=N.useNewsletterForm(a);return e.jsxs("form",{onSubmit:x,className:g.cn("w-full",s),...u,children:[c?e.jsx(r.NewsletterSuccess,{message:l}):e.jsxs("div",{className:"flex items-end gap-3 border-b border-foreground/20 pb-3 transition-colors duration-200 focus-within:border-foreground",children:[e.jsx("label",{htmlFor:"newsletter-email",className:"sr-only",children:"Your email address"}),e.jsx("input",{id:"newsletter-email",type:"email",autoComplete:"email",value:m,onChange:f=>p(f.target.value),placeholder:o,className:"w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground focus:outline-none"}),e.jsxs("button",{type:"submit",className:"inline-flex shrink-0 cursor-pointer items-center gap-1.5 text-sm font-semibold text-foreground transition-colors duration-150 hover:text-primary",children:[n,e.jsx(h.ArrowRight,{className:"h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5"})]})]}),e.jsx(r.NewsletterNote,{error:d,note:i})]})}t.displayName="NewsletterUnderline";exports.NewsletterUnderline=t;
3
+ //# sourceMappingURL=Underline.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Underline.cjs","sources":["../../../../../src/components/Newsletter/variants/Underline.tsx"],"sourcesContent":["\"use client\";\nimport { cn } from \"../../../utils/cn\";\nimport { ArrowRight } from \"../../../icons\";\nimport { useNewsletterForm } from \"../useNewsletterForm\";\nimport { NewsletterSuccess, NewsletterNote } from \"../parts\";\nimport type { NewsletterProps } from \"../types\";\n\ninterface UnderlineProps extends Omit<NewsletterProps, \"option\"> {}\n\nexport function NewsletterUnderline({\n className,\n placeholder = \"you@company.com\",\n buttonLabel = \"Join\",\n successMessage = \"You’re on the list!\",\n note,\n onSubmit,\n ...props\n}: UnderlineProps) {\n const { email, done, error, handleSubmit, updateEmail } = useNewsletterForm(onSubmit);\n\n return (\n <form onSubmit={handleSubmit} className={cn(\"w-full\", className)} {...props}>\n {done ? (\n <NewsletterSuccess message={successMessage} />\n ) : (\n <div className=\"flex items-end gap-3 border-b border-foreground/20 pb-3 transition-colors duration-200 focus-within:border-foreground\">\n <label htmlFor=\"newsletter-email\" className=\"sr-only\">\n Your email address\n </label>\n <input\n id=\"newsletter-email\"\n type=\"email\"\n autoComplete=\"email\"\n value={email}\n onChange={(e) => updateEmail(e.target.value)}\n placeholder={placeholder}\n className=\"w-full bg-transparent text-sm text-foreground placeholder:text-muted-foreground focus:outline-none\"\n />\n <button\n type=\"submit\"\n className=\"inline-flex shrink-0 cursor-pointer items-center gap-1.5 text-sm font-semibold text-foreground transition-colors duration-150 hover:text-primary\"\n >\n {buttonLabel}\n <ArrowRight className=\"h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5\" />\n </button>\n </div>\n )}\n <NewsletterNote error={error} note={note} />\n </form>\n );\n}\nNewsletterUnderline.displayName = \"NewsletterUnderline\";"],"names":["NewsletterUnderline","className","placeholder","buttonLabel","successMessage","note","onSubmit","props","email","done","error","handleSubmit","updateEmail","useNewsletterForm","jsxs","cn","jsx","NewsletterSuccess","e","ArrowRight","NewsletterNote"],"mappings":"wPASO,SAASA,EAAoB,CAClC,UAAAC,EACA,YAAAC,EAAc,kBACd,YAAAC,EAAc,OACd,eAAAC,EAAiB,sBACjB,KAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EAAmB,CACjB,KAAM,CAAE,MAAAC,EAAO,KAAAC,EAAM,MAAAC,EAAO,aAAAC,EAAc,YAAAC,CAAA,EAAgBC,EAAAA,kBAAkBP,CAAQ,EAEpF,OACEQ,OAAC,OAAA,CAAK,SAAUH,EAAc,UAAWI,EAAAA,GAAG,SAAUd,CAAS,EAAI,GAAGM,EACnE,SAAA,CAAAE,EACCO,EAAAA,IAACC,qBAAkB,QAASb,CAAA,CAAgB,EAE5CU,EAAAA,KAAC,MAAA,CAAI,UAAU,wHACb,SAAA,CAAAE,MAAC,QAAA,CAAM,QAAQ,mBAAmB,UAAU,UAAU,SAAA,qBAEtD,EACAA,EAAAA,IAAC,QAAA,CACC,GAAG,mBACH,KAAK,QACL,aAAa,QACb,MAAOR,EACP,SAAWU,GAAMN,EAAYM,EAAE,OAAO,KAAK,EAC3C,YAAAhB,EACA,UAAU,oGAAA,CAAA,EAEZY,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,UAAU,mJAET,SAAA,CAAAX,EACDa,EAAAA,IAACG,EAAAA,WAAA,CAAW,UAAU,uEAAA,CAAwE,CAAA,CAAA,CAAA,CAChG,EACF,EAEFH,EAAAA,IAACI,EAAAA,eAAA,CAAe,MAAAV,EAAc,KAAAL,CAAA,CAAY,CAAA,EAC5C,CAEJ,CACAL,EAAoB,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),a=require("react"),P=require("./variants/Cards.cjs"),d=require("./variants/Bento.cjs"),j=require("./variants/Compact.cjs"),u=({className:i,plans:r,option:o="cards",defaultBilling:g="monthly",onSelect:t,...e})=>{const[n,s]=a.useState(g);return o==="compact"?c.jsx(j.PricingCompact,{className:i,plans:r,billing:n,onSelect:t,...e}):o==="bento"?c.jsx(d.PricingBento,{className:i,plans:r,billing:n,onSelect:t,...e}):c.jsx(P.PricingCards,{className:i,plans:r,billing:n,onSelect:t,onBillingChange:s,...e})};u.displayName="Pricing";exports.Pricing=u;
3
+ //# sourceMappingURL=Pricing.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pricing.cjs","sources":["../../../../src/components/Pricing/Pricing.tsx"],"sourcesContent":["\"use client\";\nimport { useState } from \"react\";\nimport type { PricingProps } from \"./types\";\nimport { PricingCards } from \"./variants/Cards\";\nimport { PricingBento } from \"./variants/Bento\";\nimport { PricingCompact } from \"./variants/Compact\";\n\nexport const Pricing = ({\n className,\n plans,\n option = \"cards\",\n defaultBilling = \"monthly\",\n onSelect,\n ...props\n}: PricingProps) => {\n const [billing, setBilling] = useState<\"monthly\" | \"yearly\">(defaultBilling);\n\n if (option === \"compact\") {\n return <PricingCompact className={className} plans={plans} billing={billing} onSelect={onSelect} {...props} />;\n }\n\n if (option === \"bento\") {\n return <PricingBento className={className} plans={plans} billing={billing} onSelect={onSelect} {...props} />;\n }\n\n return (\n <PricingCards\n className={className}\n plans={plans}\n billing={billing}\n onSelect={onSelect}\n onBillingChange={setBilling}\n {...props}\n />\n );\n};\nPricing.displayName = \"Pricing\";"],"names":["Pricing","className","plans","option","defaultBilling","onSelect","props","billing","setBilling","useState","PricingCompact","PricingBento","jsx","PricingCards"],"mappings":"gPAOaA,EAAU,CAAC,CACtB,UAAAC,EACA,MAAAC,EACA,OAAAC,EAAS,QACT,eAAAC,EAAiB,UACjB,SAAAC,EACA,GAAGC,CACL,IAAoB,CAClB,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA+BL,CAAc,EAE3E,OAAID,IAAW,gBACLO,EAAAA,eAAA,CAAe,UAAAT,EAAsB,MAAAC,EAAc,QAAAK,EAAkB,SAAAF,EAAqB,GAAGC,EAAO,EAG1GH,IAAW,cACLQ,EAAAA,aAAA,CAAa,UAAAV,EAAsB,MAAAC,EAAc,QAAAK,EAAkB,SAAAF,EAAqB,GAAGC,EAAO,EAI1GM,EAAAA,IAACC,EAAAA,aAAA,CACC,UAAAZ,EACA,MAAAC,EACA,QAAAK,EACA,SAAAF,EACA,gBAAiBG,EAChB,GAAGF,CAAA,CAAA,CAGV,EACAN,EAAQ,YAAc"}
@@ -0,0 +1,3 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),t=require("../../utils/cn.cjs"),l=require("../../utils/contrast.cjs"),a=require("../../utils/useTokenForeground.cjs"),u=require("../../icons.cjs");function m({value:e,billing:s,dim:r}){return e===null?o.jsx("span",{children:"Custom"}):o.jsxs(o.Fragment,{children:[o.jsxs("span",{className:"text-[2.6rem] font-semibold tracking-tight sm:text-[3rem]",children:["$",e]}),o.jsxs("span",{className:t.cn("text-sm font-normal",r&&"opacity-60"),children:["/",s==="monthly"?"mo":"yr"]})]})}function d({billing:e,onChange:s,dark:r}){const n=a.useTokenForeground("--color-accent");return o.jsxs("div",{className:"mb-10 flex items-center justify-center gap-4",children:[o.jsx("span",{className:t.cn("text-sm font-medium transition-colors",e==="monthly"?r?"text-white":"text-foreground":"text-muted-foreground"),children:"Monthly"}),o.jsx("button",{type:"button",role:"switch","aria-checked":e==="yearly","aria-label":"Billing period",onClick:()=>s(e==="monthly"?"yearly":"monthly"),className:t.cn("relative inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full transition-colors duration-200","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",e==="yearly"?"bg-primary":"bg-border"),children:o.jsx("span",{className:t.cn("inline-block h-4 w-4 transform rounded-full bg-white shadow transition-transform duration-200",e==="yearly"?"translate-x-6":"translate-x-1")})}),o.jsxs("span",{className:t.cn("flex items-center gap-2 text-sm font-medium transition-colors",e==="yearly"?r?"text-white":"text-foreground":"text-muted-foreground"),children:["Yearly",o.jsx("span",{className:"rounded-full bg-accent px-2 py-0.5 text-xs font-semibold",style:{color:n},children:"−2 ay"})]})]})}function f({plan:e,billing:s,onSelect:r,dark:n}){const i=e.highlighted&&!e.customColor,c=e.customColor?l.getContrastText(e.customColor,"#111111","#ffffff"):void 0;return o.jsxs("button",{type:"button",onClick:()=>r==null?void 0:r(e,s),className:t.cn("inline-flex h-11 cursor-pointer items-center justify-center gap-2 rounded-lg px-5 text-sm font-semibold transition-colors duration-200","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",i||e.customColor?"hover:brightness-95":n?"bg-white text-black hover:bg-white/90":"border border-border text-foreground hover:bg-surface"),style:e.customColor?{backgroundColor:e.customColor,color:c}:i?{backgroundColor:"rgb(var(--color-primary))",color:"rgb(var(--color-on-primary))"}:void 0,children:[e.cta||"Start",o.jsx(u.ArrowRight,{className:"h-4 w-4 opacity-60"})]})}exports.BillingToggle=d;exports.PlanButton=f;exports.PriceValue=m;
3
+ //# sourceMappingURL=parts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.cjs","sources":["../../../../src/components/Pricing/parts.tsx"],"sourcesContent":["\"use client\";\nimport { cn } from \"../../utils/cn\";\nimport { getContrastText } from \"../../utils/contrast\";\nimport { useTokenForeground } from \"../../utils/useTokenForeground\";\nimport { ArrowRight } from \"../../icons\";\nimport type { Plan } from \"./types\";\n\nexport function PriceValue({\n value,\n billing,\n dim,\n}: {\n value: number | null;\n billing: \"monthly\" | \"yearly\";\n /** False when rendered on a colored background where opacity would kill contrast. */\n dim?: boolean;\n}) {\n if (value === null) {\n return <span>Custom</span>;\n }\n return (\n <>\n <span className=\"text-[2.6rem] font-semibold tracking-tight sm:text-[3rem]\">${value}</span>\n <span className={cn(\"text-sm font-normal\", dim && \"opacity-60\")}>\n /{billing === \"monthly\" ? \"mo\" : \"yr\"}\n </span>\n </>\n );\n}\n\nexport function BillingToggle({\n billing,\n onChange,\n dark,\n}: {\n billing: \"monthly\" | \"yearly\";\n onChange: (b: \"monthly\" | \"yearly\") => void;\n dark?: boolean;\n}) {\n // The accent token is a background color, but its shipped \"on-accent\"\n // pairing isn't guaranteed to be contrast-safe (e.g. white on amber).\n // Derive the badge text color from the actual accent value instead.\n const accentText = useTokenForeground(\"--color-accent\");\n return (\n <div className=\"mb-10 flex items-center justify-center gap-4\">\n <span\n className={cn(\n \"text-sm font-medium transition-colors\",\n billing === \"monthly\" ? (dark ? \"text-white\" : \"text-foreground\") : \"text-muted-foreground\",\n )}\n >\n Monthly\n </span>\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={billing === \"yearly\"}\n aria-label=\"Billing period\"\n onClick={() => onChange(billing === \"monthly\" ? \"yearly\" : \"monthly\")}\n className={cn(\n \"relative inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n billing === \"yearly\" ? \"bg-primary\" : \"bg-border\",\n )}\n >\n <span\n className={cn(\n \"inline-block h-4 w-4 transform rounded-full bg-white shadow transition-transform duration-200\",\n billing === \"yearly\" ? \"translate-x-6\" : \"translate-x-1\",\n )}\n />\n </button>\n <span\n className={cn(\n \"flex items-center gap-2 text-sm font-medium transition-colors\",\n billing === \"yearly\" ? (dark ? \"text-white\" : \"text-foreground\") : \"text-muted-foreground\",\n )}\n >\n Yearly\n <span\n className=\"rounded-full bg-accent px-2 py-0.5 text-xs font-semibold\"\n style={{ color: accentText }}\n >\n −2 ay\n </span>\n </span>\n </div>\n );\n}\n\nexport function PlanButton({\n plan,\n billing,\n onSelect,\n dark,\n}: {\n plan: Plan;\n billing: \"monthly\" | \"yearly\";\n onSelect?: (plan: Plan, billing: \"monthly\" | \"yearly\") => void;\n dark?: boolean;\n}) {\n const isHighlighted = plan.highlighted && !plan.customColor;\n const fg = plan.customColor ? getContrastText(plan.customColor, \"#111111\", \"#ffffff\") : undefined;\n return (\n <button\n type=\"button\"\n onClick={() => onSelect?.(plan, billing)}\n className={cn(\n \"inline-flex h-11 cursor-pointer items-center justify-center gap-2 rounded-lg px-5 text-sm font-semibold transition-colors duration-200\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n isHighlighted || plan.customColor\n ? \"hover:brightness-95\"\n : dark\n ? \"bg-white text-black hover:bg-white/90\"\n : \"border border-border text-foreground hover:bg-surface\",\n )}\n style={\n plan.customColor\n ? { backgroundColor: plan.customColor, color: fg }\n : isHighlighted\n ? {\n backgroundColor: \"rgb(var(--color-primary))\",\n color: \"rgb(var(--color-on-primary))\",\n }\n : undefined\n }\n >\n {plan.cta || \"Start\"}\n <ArrowRight className=\"h-4 w-4 opacity-60\" />\n </button>\n );\n}"],"names":["PriceValue","value","billing","dim","jsx","jsxs","Fragment","cn","BillingToggle","onChange","dark","accentText","useTokenForeground","PlanButton","plan","onSelect","isHighlighted","fg","getContrastText","ArrowRight"],"mappings":"wQAOO,SAASA,EAAW,CACzB,MAAAC,EACA,QAAAC,EACA,IAAAC,CACF,EAKG,CACD,OAAIF,IAAU,KACLG,EAAAA,IAAC,QAAK,SAAA,QAAA,CAAM,EAGnBC,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAD,EAAAA,KAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,CAAA,IAAEJ,CAAA,EAAM,SACnF,OAAA,CAAK,UAAWM,EAAAA,GAAG,sBAAuBJ,GAAO,YAAY,EAAG,SAAA,CAAA,IAC7DD,IAAY,UAAY,KAAO,IAAA,CAAA,CACnC,CAAA,EACF,CAEJ,CAEO,SAASM,EAAc,CAC5B,QAAAN,EACA,SAAAO,EACA,KAAAC,CACF,EAIG,CAID,MAAMC,EAAaC,EAAAA,mBAAmB,gBAAgB,EACtD,OACEP,EAAAA,KAAC,MAAA,CAAI,UAAU,+CACb,SAAA,CAAAD,EAAAA,IAAC,OAAA,CACC,UAAWG,EAAAA,GACT,wCACAL,IAAY,UAAaQ,EAAO,aAAe,kBAAqB,uBAAA,EAEvE,SAAA,SAAA,CAAA,EAGDN,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,KAAK,SACL,eAAcF,IAAY,SAC1B,aAAW,iBACX,QAAS,IAAMO,EAASP,IAAY,UAAY,SAAW,SAAS,EACpE,UAAWK,EAAAA,GACT,iHACA,2IACAL,IAAY,SAAW,aAAe,WAAA,EAGxC,SAAAE,EAAAA,IAAC,OAAA,CACC,UAAWG,EAAAA,GACT,gGACAL,IAAY,SAAW,gBAAkB,eAAA,CAC3C,CAAA,CACF,CAAA,EAEFG,EAAAA,KAAC,OAAA,CACC,UAAWE,EAAAA,GACT,gEACAL,IAAY,SAAYQ,EAAO,aAAe,kBAAqB,uBAAA,EAEtE,SAAA,CAAA,SAECN,EAAAA,IAAC,OAAA,CACC,UAAU,2DACV,MAAO,CAAE,MAAOO,CAAA,EACjB,SAAA,OAAA,CAAA,CAED,CAAA,CAAA,CACF,EACF,CAEJ,CAEO,SAASE,EAAW,CACzB,KAAAC,EACA,QAAAZ,EACA,SAAAa,EACA,KAAAL,CACF,EAKG,CACD,MAAMM,EAAgBF,EAAK,aAAe,CAACA,EAAK,YAC1CG,EAAKH,EAAK,YAAcI,EAAAA,gBAAgBJ,EAAK,YAAa,UAAW,SAAS,EAAI,OACxF,OACET,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMU,GAAA,YAAAA,EAAWD,EAAMZ,GAChC,UAAWK,EAAAA,GACT,yIACA,sGACAS,GAAiBF,EAAK,YAClB,sBACAJ,EACE,wCACA,uDAAA,EAER,MACEI,EAAK,YACD,CAAE,gBAAiBA,EAAK,YAAa,MAAOG,CAAA,EAC5CD,EACE,CACE,gBAAiB,4BACjB,MAAO,8BAAA,EAET,OAGP,SAAA,CAAAF,EAAK,KAAO,QACbV,EAAAA,IAACe,EAAAA,WAAA,CAAW,UAAU,oBAAA,CAAqB,CAAA,CAAA,CAAA,CAGjD"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("../../../utils/cn.cjs"),g=require("../../../utils/contrast.cjs"),n=require("../parts.cjs"),f=require("../../../icons.cjs"),l=({className:d,plans:a,billing:o,onSelect:m,...x})=>e.jsx("div",{className:s.cn("w-full",d),...x,children:e.jsx("div",{className:"grid grid-cols-1 gap-4 lg:grid-cols-2",children:a.map(r=>{const c=r.highlighted&&!r.customColor,t=r.customColor||(c?"rgb(var(--color-primary))":void 0),u=r.customColor?g.getContrastText(r.customColor,"#111111","#ffffff"):c?"rgb(var(--color-on-primary))":void 0;return e.jsxs("div",{className:s.cn("flex h-full flex-col rounded-xl p-8",t?"lg:col-span-2":"border border-border bg-surface"),style:t?{backgroundColor:t,color:u}:void 0,children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:s.cn("font-display text-xl font-semibold tracking-tight",t?"text-current":"text-foreground"),children:r.name}),r.description?e.jsx("p",{className:s.cn("mt-1.5 text-sm",t?void 0:"text-muted-foreground"),children:r.description}):null]}),e.jsx("div",{className:s.cn("font-display",t?"text-current":"text-foreground"),children:e.jsx(n.PriceValue,{value:o==="monthly"?r.monthly:r.yearly,billing:o,dim:!t})})]}),e.jsx("ul",{className:s.cn("mt-7 grid grid-cols-1 gap-x-8 gap-y-2.5 text-sm sm:grid-cols-2",t?"lg:max-w-2xl":void 0),children:r.features.map(i=>e.jsxs("li",{className:s.cn("flex items-start gap-2.5",t?"text-current":"text-muted-foreground"),children:[e.jsx(f.Check,{className:s.cn("mt-0.5 h-4 w-4 shrink-0",t?"text-current":"text-primary")}),i]},i))}),e.jsx("div",{className:"mt-8",children:e.jsx(n.PlanButton,{plan:r,billing:o,onSelect:m,dark:!t})})]},r.name)})})});l.displayName="PricingBento";exports.PricingBento=l;
2
+ //# sourceMappingURL=Bento.cjs.map