rothzerg-ui 0.1.2 → 0.1.3

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 (255) hide show
  1. package/dist/blocks/app-download/AppDownload.cjs +7 -5
  2. package/dist/blocks/app-download/AppDownload.cjs.map +1 -1
  3. package/dist/blocks/app-download/AppDownload.d.ts.map +1 -1
  4. package/dist/blocks/app-download/AppDownload.js +7 -5
  5. package/dist/blocks/app-download/AppDownload.js.map +1 -1
  6. package/dist/blocks/auth-form/AuthForm.cjs +11 -9
  7. package/dist/blocks/auth-form/AuthForm.cjs.map +1 -1
  8. package/dist/blocks/auth-form/AuthForm.d.ts.map +1 -1
  9. package/dist/blocks/auth-form/AuthForm.js +11 -9
  10. package/dist/blocks/auth-form/AuthForm.js.map +1 -1
  11. package/dist/blocks/blog-post/BlogPost.cjs +55 -20
  12. package/dist/blocks/blog-post/BlogPost.cjs.map +1 -1
  13. package/dist/blocks/blog-post/BlogPost.d.ts +7 -1
  14. package/dist/blocks/blog-post/BlogPost.d.ts.map +1 -1
  15. package/dist/blocks/blog-post/BlogPost.js +55 -20
  16. package/dist/blocks/blog-post/BlogPost.js.map +1 -1
  17. package/dist/blocks/changelog/Changelog.cjs +8 -6
  18. package/dist/blocks/changelog/Changelog.cjs.map +1 -1
  19. package/dist/blocks/changelog/Changelog.d.ts.map +1 -1
  20. package/dist/blocks/changelog/Changelog.js +8 -6
  21. package/dist/blocks/changelog/Changelog.js.map +1 -1
  22. package/dist/blocks/coming-soon/ComingSoon.cjs +4 -3
  23. package/dist/blocks/coming-soon/ComingSoon.cjs.map +1 -1
  24. package/dist/blocks/coming-soon/ComingSoon.d.ts.map +1 -1
  25. package/dist/blocks/coming-soon/ComingSoon.js +4 -3
  26. package/dist/blocks/coming-soon/ComingSoon.js.map +1 -1
  27. package/dist/blocks/command-palette/CommandPalette.cjs +110 -0
  28. package/dist/blocks/command-palette/CommandPalette.cjs.map +1 -0
  29. package/dist/blocks/command-palette/CommandPalette.d.ts +44 -0
  30. package/dist/blocks/command-palette/CommandPalette.d.ts.map +1 -0
  31. package/dist/blocks/command-palette/CommandPalette.js +110 -0
  32. package/dist/blocks/command-palette/CommandPalette.js.map +1 -0
  33. package/dist/blocks/command-palette/index.d.ts +3 -0
  34. package/dist/blocks/command-palette/index.d.ts.map +1 -0
  35. package/dist/blocks/contact-form/ContactForm.cjs +16 -14
  36. package/dist/blocks/contact-form/ContactForm.cjs.map +1 -1
  37. package/dist/blocks/contact-form/ContactForm.d.ts.map +1 -1
  38. package/dist/blocks/contact-form/ContactForm.js +16 -14
  39. package/dist/blocks/contact-form/ContactForm.js.map +1 -1
  40. package/dist/blocks/cookie-consent/CookieConsent.cjs +9 -7
  41. package/dist/blocks/cookie-consent/CookieConsent.cjs.map +1 -1
  42. package/dist/blocks/cookie-consent/CookieConsent.d.ts.map +1 -1
  43. package/dist/blocks/cookie-consent/CookieConsent.js +9 -7
  44. package/dist/blocks/cookie-consent/CookieConsent.js.map +1 -1
  45. package/dist/blocks/cta/CTA.cjs +9 -6
  46. package/dist/blocks/cta/CTA.cjs.map +1 -1
  47. package/dist/blocks/cta/CTA.d.ts.map +1 -1
  48. package/dist/blocks/cta/CTA.js +9 -6
  49. package/dist/blocks/cta/CTA.js.map +1 -1
  50. package/dist/blocks/empty-state/EmptyState.cjs +5 -3
  51. package/dist/blocks/empty-state/EmptyState.cjs.map +1 -1
  52. package/dist/blocks/empty-state/EmptyState.d.ts.map +1 -1
  53. package/dist/blocks/empty-state/EmptyState.js +5 -3
  54. package/dist/blocks/empty-state/EmptyState.js.map +1 -1
  55. package/dist/blocks/error-page/ErrorPage.cjs +5 -3
  56. package/dist/blocks/error-page/ErrorPage.cjs.map +1 -1
  57. package/dist/blocks/error-page/ErrorPage.d.ts.map +1 -1
  58. package/dist/blocks/error-page/ErrorPage.js +5 -3
  59. package/dist/blocks/error-page/ErrorPage.js.map +1 -1
  60. package/dist/blocks/faq/FAQ.cjs +8 -6
  61. package/dist/blocks/faq/FAQ.cjs.map +1 -1
  62. package/dist/blocks/faq/FAQ.d.ts.map +1 -1
  63. package/dist/blocks/faq/FAQ.js +8 -6
  64. package/dist/blocks/faq/FAQ.js.map +1 -1
  65. package/dist/blocks/features-grid/FeaturesGrid.cjs +9 -7
  66. package/dist/blocks/features-grid/FeaturesGrid.cjs.map +1 -1
  67. package/dist/blocks/features-grid/FeaturesGrid.d.ts.map +1 -1
  68. package/dist/blocks/features-grid/FeaturesGrid.js +9 -7
  69. package/dist/blocks/features-grid/FeaturesGrid.js.map +1 -1
  70. package/dist/blocks/footer/Footer.cjs +11 -8
  71. package/dist/blocks/footer/Footer.cjs.map +1 -1
  72. package/dist/blocks/footer/Footer.d.ts.map +1 -1
  73. package/dist/blocks/footer/Footer.js +11 -8
  74. package/dist/blocks/footer/Footer.js.map +1 -1
  75. package/dist/blocks/hero/Hero.cjs +9 -6
  76. package/dist/blocks/hero/Hero.cjs.map +1 -1
  77. package/dist/blocks/hero/Hero.d.ts.map +1 -1
  78. package/dist/blocks/hero/Hero.js +9 -6
  79. package/dist/blocks/hero/Hero.js.map +1 -1
  80. package/dist/blocks/index.d.ts +3 -1
  81. package/dist/blocks/index.d.ts.map +1 -1
  82. package/dist/blocks/maintenance/Maintenance.cjs +6 -5
  83. package/dist/blocks/maintenance/Maintenance.cjs.map +1 -1
  84. package/dist/blocks/maintenance/Maintenance.d.ts.map +1 -1
  85. package/dist/blocks/maintenance/Maintenance.js +6 -5
  86. package/dist/blocks/maintenance/Maintenance.js.map +1 -1
  87. package/dist/blocks/newsletter/Newsletter.cjs +9 -7
  88. package/dist/blocks/newsletter/Newsletter.cjs.map +1 -1
  89. package/dist/blocks/newsletter/Newsletter.d.ts.map +1 -1
  90. package/dist/blocks/newsletter/Newsletter.js +9 -7
  91. package/dist/blocks/newsletter/Newsletter.js.map +1 -1
  92. package/dist/blocks/notification-center/NotificationCenter.cjs +10 -7
  93. package/dist/blocks/notification-center/NotificationCenter.cjs.map +1 -1
  94. package/dist/blocks/notification-center/NotificationCenter.d.ts.map +1 -1
  95. package/dist/blocks/notification-center/NotificationCenter.js +10 -7
  96. package/dist/blocks/notification-center/NotificationCenter.js.map +1 -1
  97. package/dist/blocks/onboarding/Onboarding.cjs +8 -25
  98. package/dist/blocks/onboarding/Onboarding.cjs.map +1 -1
  99. package/dist/blocks/onboarding/Onboarding.d.ts.map +1 -1
  100. package/dist/blocks/onboarding/Onboarding.js +8 -25
  101. package/dist/blocks/onboarding/Onboarding.js.map +1 -1
  102. package/dist/blocks/pricing/Pricing.cjs +6 -4
  103. package/dist/blocks/pricing/Pricing.cjs.map +1 -1
  104. package/dist/blocks/pricing/Pricing.d.ts.map +1 -1
  105. package/dist/blocks/pricing/Pricing.js +6 -4
  106. package/dist/blocks/pricing/Pricing.js.map +1 -1
  107. package/dist/blocks/pricing-comparison/PricingComparison.cjs +5 -3
  108. package/dist/blocks/pricing-comparison/PricingComparison.cjs.map +1 -1
  109. package/dist/blocks/pricing-comparison/PricingComparison.d.ts.map +1 -1
  110. package/dist/blocks/pricing-comparison/PricingComparison.js +5 -3
  111. package/dist/blocks/pricing-comparison/PricingComparison.js.map +1 -1
  112. package/dist/blocks/profile-page/ProfilePage.cjs +14 -11
  113. package/dist/blocks/profile-page/ProfilePage.cjs.map +1 -1
  114. package/dist/blocks/profile-page/ProfilePage.d.ts.map +1 -1
  115. package/dist/blocks/profile-page/ProfilePage.js +14 -11
  116. package/dist/blocks/profile-page/ProfilePage.js.map +1 -1
  117. package/dist/blocks/settings-page/SettingsPage.cjs +10 -8
  118. package/dist/blocks/settings-page/SettingsPage.cjs.map +1 -1
  119. package/dist/blocks/settings-page/SettingsPage.d.ts.map +1 -1
  120. package/dist/blocks/settings-page/SettingsPage.js +10 -8
  121. package/dist/blocks/settings-page/SettingsPage.js.map +1 -1
  122. package/dist/blocks/sidebar/Sidebar.cjs +51 -13
  123. package/dist/blocks/sidebar/Sidebar.cjs.map +1 -1
  124. package/dist/blocks/sidebar/Sidebar.d.ts +11 -1
  125. package/dist/blocks/sidebar/Sidebar.d.ts.map +1 -1
  126. package/dist/blocks/sidebar/Sidebar.js +51 -13
  127. package/dist/blocks/sidebar/Sidebar.js.map +1 -1
  128. package/dist/blocks/stats/Stats.cjs +9 -6
  129. package/dist/blocks/stats/Stats.cjs.map +1 -1
  130. package/dist/blocks/stats/Stats.d.ts.map +1 -1
  131. package/dist/blocks/stats/Stats.js +9 -6
  132. package/dist/blocks/stats/Stats.js.map +1 -1
  133. package/dist/blocks/team-grid/TeamGrid.cjs +11 -8
  134. package/dist/blocks/team-grid/TeamGrid.cjs.map +1 -1
  135. package/dist/blocks/team-grid/TeamGrid.d.ts.map +1 -1
  136. package/dist/blocks/team-grid/TeamGrid.js +11 -8
  137. package/dist/blocks/team-grid/TeamGrid.js.map +1 -1
  138. package/dist/blocks/testimonials/Testimonials.cjs +9 -7
  139. package/dist/blocks/testimonials/Testimonials.cjs.map +1 -1
  140. package/dist/blocks/testimonials/Testimonials.d.ts.map +1 -1
  141. package/dist/blocks/testimonials/Testimonials.js +9 -7
  142. package/dist/blocks/testimonials/Testimonials.js.map +1 -1
  143. package/dist/components/alert/Alert.cjs +4 -2
  144. package/dist/components/alert/Alert.cjs.map +1 -1
  145. package/dist/components/alert/Alert.d.ts.map +1 -1
  146. package/dist/components/alert/Alert.js +4 -2
  147. package/dist/components/alert/Alert.js.map +1 -1
  148. package/dist/components/banner/Banner.cjs +2 -1
  149. package/dist/components/banner/Banner.cjs.map +1 -1
  150. package/dist/components/banner/Banner.d.ts.map +1 -1
  151. package/dist/components/banner/Banner.js +2 -1
  152. package/dist/components/banner/Banner.js.map +1 -1
  153. package/dist/components/breadcrumb/Breadcrumb.cjs +15 -2
  154. package/dist/components/breadcrumb/Breadcrumb.cjs.map +1 -1
  155. package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -1
  156. package/dist/components/breadcrumb/Breadcrumb.js +15 -2
  157. package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
  158. package/dist/components/button/Button.cjs +16 -2
  159. package/dist/components/button/Button.cjs.map +1 -1
  160. package/dist/components/button/Button.d.ts.map +1 -1
  161. package/dist/components/button/Button.js +17 -3
  162. package/dist/components/button/Button.js.map +1 -1
  163. package/dist/components/checkbox/Checkbox.cjs +1 -1
  164. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  165. package/dist/components/checkbox/Checkbox.js +1 -1
  166. package/dist/components/checkbox/Checkbox.js.map +1 -1
  167. package/dist/components/code-block/CodeBlock.cjs +6 -2
  168. package/dist/components/code-block/CodeBlock.cjs.map +1 -1
  169. package/dist/components/code-block/CodeBlock.d.ts.map +1 -1
  170. package/dist/components/code-block/CodeBlock.js +6 -2
  171. package/dist/components/code-block/CodeBlock.js.map +1 -1
  172. package/dist/components/code-block/highlight.cjs +328 -0
  173. package/dist/components/code-block/highlight.cjs.map +1 -0
  174. package/dist/components/code-block/highlight.d.ts +7 -0
  175. package/dist/components/code-block/highlight.d.ts.map +1 -0
  176. package/dist/components/code-block/highlight.js +328 -0
  177. package/dist/components/code-block/highlight.js.map +1 -0
  178. package/dist/components/columns/Columns.cjs +38 -0
  179. package/dist/components/columns/Columns.cjs.map +1 -0
  180. package/dist/components/columns/Columns.d.ts +52 -0
  181. package/dist/components/columns/Columns.d.ts.map +1 -0
  182. package/dist/components/columns/Columns.js +38 -0
  183. package/dist/components/columns/Columns.js.map +1 -0
  184. package/dist/components/columns/index.d.ts +3 -0
  185. package/dist/components/columns/index.d.ts.map +1 -0
  186. package/dist/components/empty-content/EmptyContent.cjs +5 -3
  187. package/dist/components/empty-content/EmptyContent.cjs.map +1 -1
  188. package/dist/components/empty-content/EmptyContent.d.ts.map +1 -1
  189. package/dist/components/empty-content/EmptyContent.js +5 -3
  190. package/dist/components/empty-content/EmptyContent.js.map +1 -1
  191. package/dist/components/grid/Grid.cjs +66 -0
  192. package/dist/components/grid/Grid.cjs.map +1 -0
  193. package/dist/components/grid/Grid.d.ts +67 -0
  194. package/dist/components/grid/Grid.d.ts.map +1 -0
  195. package/dist/components/grid/Grid.js +66 -0
  196. package/dist/components/grid/Grid.js.map +1 -0
  197. package/dist/components/grid/index.d.ts +3 -0
  198. package/dist/components/grid/index.d.ts.map +1 -0
  199. package/dist/components/index.d.ts +8 -0
  200. package/dist/components/index.d.ts.map +1 -1
  201. package/dist/components/resizable/Resizable.cjs +4 -4
  202. package/dist/components/resizable/Resizable.cjs.map +1 -1
  203. package/dist/components/resizable/Resizable.d.ts +2 -1
  204. package/dist/components/resizable/Resizable.d.ts.map +1 -1
  205. package/dist/components/resizable/Resizable.js +4 -4
  206. package/dist/components/resizable/Resizable.js.map +1 -1
  207. package/dist/components/rows/Rows.cjs +38 -0
  208. package/dist/components/rows/Rows.cjs.map +1 -0
  209. package/dist/components/rows/Rows.d.ts +50 -0
  210. package/dist/components/rows/Rows.d.ts.map +1 -0
  211. package/dist/components/rows/Rows.js +38 -0
  212. package/dist/components/rows/Rows.js.map +1 -0
  213. package/dist/components/rows/index.d.ts +3 -0
  214. package/dist/components/rows/index.d.ts.map +1 -0
  215. package/dist/components/stat-card/StatCard.cjs +6 -4
  216. package/dist/components/stat-card/StatCard.cjs.map +1 -1
  217. package/dist/components/stat-card/StatCard.d.ts.map +1 -1
  218. package/dist/components/stat-card/StatCard.js +6 -4
  219. package/dist/components/stat-card/StatCard.js.map +1 -1
  220. package/dist/components/stepper/Stepper.cjs +5 -3
  221. package/dist/components/stepper/Stepper.cjs.map +1 -1
  222. package/dist/components/stepper/Stepper.d.ts.map +1 -1
  223. package/dist/components/stepper/Stepper.js +5 -3
  224. package/dist/components/stepper/Stepper.js.map +1 -1
  225. package/dist/components/text/Text.cjs +56 -0
  226. package/dist/components/text/Text.cjs.map +1 -0
  227. package/dist/components/text/Text.d.ts +48 -0
  228. package/dist/components/text/Text.d.ts.map +1 -0
  229. package/dist/components/text/Text.js +56 -0
  230. package/dist/components/text/Text.js.map +1 -0
  231. package/dist/components/text/index.d.ts +3 -0
  232. package/dist/components/text/index.d.ts.map +1 -0
  233. package/dist/components/timeline/Timeline.cjs +6 -4
  234. package/dist/components/timeline/Timeline.cjs.map +1 -1
  235. package/dist/components/timeline/Timeline.d.ts.map +1 -1
  236. package/dist/components/timeline/Timeline.js +6 -4
  237. package/dist/components/timeline/Timeline.js.map +1 -1
  238. package/dist/components/tooltip/Tooltip.cjs +2 -2
  239. package/dist/components/tooltip/Tooltip.cjs.map +1 -1
  240. package/dist/components/tooltip/Tooltip.d.ts.map +1 -1
  241. package/dist/components/tooltip/Tooltip.js +3 -3
  242. package/dist/components/tooltip/Tooltip.js.map +1 -1
  243. package/dist/index.cjs +13 -0
  244. package/dist/index.cjs.map +1 -1
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +13 -0
  247. package/dist/index.js.map +1 -1
  248. package/dist/provider/RothzergProvider.cjs +41 -44
  249. package/dist/provider/RothzergProvider.cjs.map +1 -1
  250. package/dist/provider/RothzergProvider.d.ts +1 -1
  251. package/dist/provider/RothzergProvider.d.ts.map +1 -1
  252. package/dist/provider/RothzergProvider.js +41 -44
  253. package/dist/provider/RothzergProvider.js.map +1 -1
  254. package/dist/styles.css +845 -25
  255. package/package.json +1 -1
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  ;/* empty css */
5
+ const Rows = require("../../components/rows/Rows.cjs");
6
+ const Text = require("../../components/text/Text.cjs");
5
7
  function AppleIcon() {
6
8
  return /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z" }) });
7
9
  }
@@ -37,10 +39,10 @@ function AppDownload({
37
39
  className = ""
38
40
  }) {
39
41
  const classes = ["rz-app-download", `rz-app-download--${layout}`, className].filter(Boolean).join(" ");
40
- const contentSide = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-app-download__content", children: [
41
- eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rz-app-download__eyebrow", children: eyebrow }),
42
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "rz-app-download__title", children: title }),
43
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rz-app-download__description", children: description }),
42
+ const contentSide = /* @__PURE__ */ jsxRuntime.jsxs(Rows.Rows, { className: "rz-app-download__content", children: [
43
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "p", className: "rz-app-download__eyebrow", children: eyebrow }),
44
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "h2", className: "rz-app-download__title", children: title }),
45
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "p", className: "rz-app-download__description", children: description }),
44
46
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__buttons", children: stores.map((store) => {
45
47
  const meta = STORE_META[store.type];
46
48
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -83,7 +85,7 @@ function AppDownload({
83
85
  ] });
84
86
  const visualSide = showQR ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__visual", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-app-download__qr", children: [
85
87
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__qr-placeholder", "aria-hidden": "true" }),
86
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rz-app-download__qr-label", children: "Scan to download" })
88
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "p", className: "rz-app-download__qr-label", children: "Scan to download" })
87
89
  ] }) }) : showMockup ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__visual", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__mockup", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__mockup-screen", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-app-download__mockup-notch" }) }) }) }) : null;
88
90
  if (layout === "centered") {
89
91
  return /* @__PURE__ */ jsxRuntime.jsx("section", { className: classes, "aria-label": "App download", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-app-download__inner", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"AppDownload.cjs","sources":["../../../src/blocks/app-download/AppDownload.tsx"],"sourcesContent":["import './app-download.css';\n\nexport type AppDownloadLayout = 'centered' | 'split';\n\nexport interface AppStore {\n type: 'appstore' | 'googleplay';\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppFeature {\n text: string;\n}\n\nexport interface AppDownloadProps {\n title?: string;\n description?: string;\n eyebrow?: string;\n stores?: AppStore[];\n features?: AppFeature[];\n rating?: number;\n ratingCount?: string;\n showMockup?: boolean;\n showQR?: boolean;\n layout?: AppDownloadLayout;\n className?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\"/>\n </svg>\n );\n}\n\nfunction PlayIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M3.18 23.48c-.39-.23-.68-.64-.68-1.15V1.67c0-.51.29-.92.68-1.15l.12-.06 12.1 12.1v.28L3.3 23.54l-.12-.06zm16.46-9.76l-2.93 1.69-3.23-3.23 3.23-3.23 2.93 1.69c.84.48.84 1.6 0 2.08zm-4.95-4.78L3.41.66C3.71.5 4.07.52 4.41.68l.12.07L17 8.35l-2.31 2.59z\"/>\n </svg>\n );\n}\n\nfunction CheckCircle() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction StarIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/>\n </svg>\n );\n}\n\nconst STORE_META = {\n appstore: { sub: 'Download on the', name: 'App Store', Icon: AppleIcon },\n googleplay: { sub: 'Get it on', name: 'Google Play', Icon: PlayIcon },\n};\n\nexport function AppDownload({\n title = 'Take it with you',\n description = 'Download our app and stay connected wherever you go. Available on iOS and Android.',\n eyebrow = 'Mobile App',\n stores = [{ type: 'appstore' }, { type: 'googleplay' }],\n features = [\n { text: 'Works offline — sync when back online' },\n { text: 'Native push notifications' },\n { text: 'Biometric authentication' },\n { text: 'Free forever, no credit card required' },\n ],\n rating,\n ratingCount,\n showMockup = true,\n showQR = false,\n layout = 'split',\n className = '',\n}: AppDownloadProps) {\n const classes = ['rz-app-download', `rz-app-download--${layout}`, className].filter(Boolean).join(' ');\n\n const contentSide = (\n <div className=\"rz-app-download__content\">\n {eyebrow && <p className=\"rz-app-download__eyebrow\">{eyebrow}</p>}\n <h2 className=\"rz-app-download__title\">{title}</h2>\n <p className=\"rz-app-download__description\">{description}</p>\n\n <div className=\"rz-app-download__buttons\">\n {stores.map((store) => {\n const meta = STORE_META[store.type];\n return (\n <a\n key={store.type}\n href={store.href ?? '#'}\n className=\"rz-app-download__store-btn\"\n onClick={store.onClick ? (e) => { e.preventDefault(); store.onClick!(); } : undefined}\n aria-label={`${meta.name}`}\n >\n <meta.Icon />\n <div>\n <span className=\"rz-app-download__store-sub\">{meta.sub}</span>\n <span className=\"rz-app-download__store-name\">{meta.name}</span>\n </div>\n </a>\n );\n })}\n </div>\n\n {rating !== undefined && (\n <div className=\"rz-app-download__rating\">\n <div className=\"rz-app-download__stars\">\n {Array.from({ length: 5 }).map((_, i) => (\n <StarIcon key={i} />\n ))}\n </div>\n <span><strong>{rating}</strong> / 5</span>\n {ratingCount && <span>({ratingCount} reviews)</span>}\n </div>\n )}\n\n {features.length > 0 && (\n <div className=\"rz-app-download__features\">\n {features.map((f, i) => (\n <div key={i} className=\"rz-app-download__feature\">\n <span className=\"rz-app-download__feature-icon\">\n <CheckCircle />\n </span>\n {f.text}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n\n const visualSide = showQR ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__qr\">\n <div className=\"rz-app-download__qr-placeholder\" aria-hidden=\"true\" />\n <p className=\"rz-app-download__qr-label\">Scan to download</p>\n </div>\n </div>\n ) : showMockup ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__mockup\">\n <div className=\"rz-app-download__mockup-screen\">\n <div className=\"rz-app-download__mockup-notch\" />\n </div>\n </div>\n </div>\n ) : null;\n\n if (layout === 'centered') {\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n }\n\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n}\n"],"names":["jsx","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"AppDownload.cjs","sources":["../../../src/blocks/app-download/AppDownload.tsx"],"sourcesContent":["import { Text } from '../../components/text';\nimport { Rows } from '../../components/rows';\nimport './app-download.css';\n\nexport type AppDownloadLayout = 'centered' | 'split';\n\nexport interface AppStore {\n type: 'appstore' | 'googleplay';\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppFeature {\n text: string;\n}\n\nexport interface AppDownloadProps {\n title?: string;\n description?: string;\n eyebrow?: string;\n stores?: AppStore[];\n features?: AppFeature[];\n rating?: number;\n ratingCount?: string;\n showMockup?: boolean;\n showQR?: boolean;\n layout?: AppDownloadLayout;\n className?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\"/>\n </svg>\n );\n}\n\nfunction PlayIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M3.18 23.48c-.39-.23-.68-.64-.68-1.15V1.67c0-.51.29-.92.68-1.15l.12-.06 12.1 12.1v.28L3.3 23.54l-.12-.06zm16.46-9.76l-2.93 1.69-3.23-3.23 3.23-3.23 2.93 1.69c.84.48.84 1.6 0 2.08zm-4.95-4.78L3.41.66C3.71.5 4.07.52 4.41.68l.12.07L17 8.35l-2.31 2.59z\"/>\n </svg>\n );\n}\n\nfunction CheckCircle() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction StarIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/>\n </svg>\n );\n}\n\nconst STORE_META = {\n appstore: { sub: 'Download on the', name: 'App Store', Icon: AppleIcon },\n googleplay: { sub: 'Get it on', name: 'Google Play', Icon: PlayIcon },\n};\n\nexport function AppDownload({\n title = 'Take it with you',\n description = 'Download our app and stay connected wherever you go. Available on iOS and Android.',\n eyebrow = 'Mobile App',\n stores = [{ type: 'appstore' }, { type: 'googleplay' }],\n features = [\n { text: 'Works offline — sync when back online' },\n { text: 'Native push notifications' },\n { text: 'Biometric authentication' },\n { text: 'Free forever, no credit card required' },\n ],\n rating,\n ratingCount,\n showMockup = true,\n showQR = false,\n layout = 'split',\n className = '',\n}: AppDownloadProps) {\n const classes = ['rz-app-download', `rz-app-download--${layout}`, className].filter(Boolean).join(' ');\n\n const contentSide = (\n <Rows className=\"rz-app-download__content\">\n {eyebrow && <Text as=\"p\" className=\"rz-app-download__eyebrow\">{eyebrow}</Text>}\n <Text as=\"h2\" className=\"rz-app-download__title\">{title}</Text>\n <Text as=\"p\" className=\"rz-app-download__description\">{description}</Text>\n\n <div className=\"rz-app-download__buttons\">\n {stores.map((store) => {\n const meta = STORE_META[store.type];\n return (\n <a\n key={store.type}\n href={store.href ?? '#'}\n className=\"rz-app-download__store-btn\"\n onClick={store.onClick ? (e) => { e.preventDefault(); store.onClick!(); } : undefined}\n aria-label={`${meta.name}`}\n >\n <meta.Icon />\n <div>\n <span className=\"rz-app-download__store-sub\">{meta.sub}</span>\n <span className=\"rz-app-download__store-name\">{meta.name}</span>\n </div>\n </a>\n );\n })}\n </div>\n\n {rating !== undefined && (\n <div className=\"rz-app-download__rating\">\n <div className=\"rz-app-download__stars\">\n {Array.from({ length: 5 }).map((_, i) => (\n <StarIcon key={i} />\n ))}\n </div>\n <span><strong>{rating}</strong> / 5</span>\n {ratingCount && <span>({ratingCount} reviews)</span>}\n </div>\n )}\n\n {features.length > 0 && (\n <div className=\"rz-app-download__features\">\n {features.map((f, i) => (\n <div key={i} className=\"rz-app-download__feature\">\n <span className=\"rz-app-download__feature-icon\">\n <CheckCircle />\n </span>\n {f.text}\n </div>\n ))}\n </div>\n )}\n </Rows>\n );\n\n const visualSide = showQR ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__qr\">\n <div className=\"rz-app-download__qr-placeholder\" aria-hidden=\"true\" />\n <Text as=\"p\" className=\"rz-app-download__qr-label\">Scan to download</Text>\n </div>\n </div>\n ) : showMockup ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__mockup\">\n <div className=\"rz-app-download__mockup-screen\">\n <div className=\"rz-app-download__mockup-notch\" />\n </div>\n </div>\n </div>\n ) : null;\n\n if (layout === 'centered') {\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n }\n\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n}\n"],"names":["jsx","jsxs","Rows","Text"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AppDownload.d.ts","sourceRoot":"","sources":["../../../src/blocks/app-download/AppDownload.tsx"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD,wBAAgB,WAAW,CAAC,EAC1B,KAA0B,EAC1B,WAAkG,EAClG,OAAsB,EACtB,MAAuD,EACvD,QAKC,EACD,MAAM,EACN,WAAW,EACX,UAAiB,EACjB,MAAc,EACd,MAAgB,EAChB,SAAc,GACf,EAAE,gBAAgB,2CA6FlB"}
1
+ {"version":3,"file":"AppDownload.d.ts","sourceRoot":"","sources":["../../../src/blocks/app-download/AppDownload.tsx"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAC;AAE5B,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD,wBAAgB,WAAW,CAAC,EAC1B,KAA0B,EAC1B,WAAkG,EAClG,OAAsB,EACtB,MAAuD,EACvD,QAKC,EACD,MAAM,EACN,WAAW,EACX,UAAiB,EACjB,MAAc,EACd,MAAgB,EAChB,SAAc,GACf,EAAE,gBAAgB,2CA6FlB"}
@@ -1,5 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  /* empty css */
3
+ import { Rows } from "../../components/rows/Rows.js";
4
+ import { Text } from "../../components/text/Text.js";
3
5
  function AppleIcon() {
4
6
  return /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z" }) });
5
7
  }
@@ -35,10 +37,10 @@ function AppDownload({
35
37
  className = ""
36
38
  }) {
37
39
  const classes = ["rz-app-download", `rz-app-download--${layout}`, className].filter(Boolean).join(" ");
38
- const contentSide = /* @__PURE__ */ jsxs("div", { className: "rz-app-download__content", children: [
39
- eyebrow && /* @__PURE__ */ jsx("p", { className: "rz-app-download__eyebrow", children: eyebrow }),
40
- /* @__PURE__ */ jsx("h2", { className: "rz-app-download__title", children: title }),
41
- /* @__PURE__ */ jsx("p", { className: "rz-app-download__description", children: description }),
40
+ const contentSide = /* @__PURE__ */ jsxs(Rows, { className: "rz-app-download__content", children: [
41
+ eyebrow && /* @__PURE__ */ jsx(Text, { as: "p", className: "rz-app-download__eyebrow", children: eyebrow }),
42
+ /* @__PURE__ */ jsx(Text, { as: "h2", className: "rz-app-download__title", children: title }),
43
+ /* @__PURE__ */ jsx(Text, { as: "p", className: "rz-app-download__description", children: description }),
42
44
  /* @__PURE__ */ jsx("div", { className: "rz-app-download__buttons", children: stores.map((store) => {
43
45
  const meta = STORE_META[store.type];
44
46
  return /* @__PURE__ */ jsxs(
@@ -81,7 +83,7 @@ function AppDownload({
81
83
  ] });
82
84
  const visualSide = showQR ? /* @__PURE__ */ jsx("div", { className: "rz-app-download__visual", children: /* @__PURE__ */ jsxs("div", { className: "rz-app-download__qr", children: [
83
85
  /* @__PURE__ */ jsx("div", { className: "rz-app-download__qr-placeholder", "aria-hidden": "true" }),
84
- /* @__PURE__ */ jsx("p", { className: "rz-app-download__qr-label", children: "Scan to download" })
86
+ /* @__PURE__ */ jsx(Text, { as: "p", className: "rz-app-download__qr-label", children: "Scan to download" })
85
87
  ] }) }) : showMockup ? /* @__PURE__ */ jsx("div", { className: "rz-app-download__visual", children: /* @__PURE__ */ jsx("div", { className: "rz-app-download__mockup", children: /* @__PURE__ */ jsx("div", { className: "rz-app-download__mockup-screen", children: /* @__PURE__ */ jsx("div", { className: "rz-app-download__mockup-notch" }) }) }) }) : null;
86
88
  if (layout === "centered") {
87
89
  return /* @__PURE__ */ jsx("section", { className: classes, "aria-label": "App download", children: /* @__PURE__ */ jsxs("div", { className: "rz-app-download__inner", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"AppDownload.js","sources":["../../../src/blocks/app-download/AppDownload.tsx"],"sourcesContent":["import './app-download.css';\n\nexport type AppDownloadLayout = 'centered' | 'split';\n\nexport interface AppStore {\n type: 'appstore' | 'googleplay';\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppFeature {\n text: string;\n}\n\nexport interface AppDownloadProps {\n title?: string;\n description?: string;\n eyebrow?: string;\n stores?: AppStore[];\n features?: AppFeature[];\n rating?: number;\n ratingCount?: string;\n showMockup?: boolean;\n showQR?: boolean;\n layout?: AppDownloadLayout;\n className?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\"/>\n </svg>\n );\n}\n\nfunction PlayIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M3.18 23.48c-.39-.23-.68-.64-.68-1.15V1.67c0-.51.29-.92.68-1.15l.12-.06 12.1 12.1v.28L3.3 23.54l-.12-.06zm16.46-9.76l-2.93 1.69-3.23-3.23 3.23-3.23 2.93 1.69c.84.48.84 1.6 0 2.08zm-4.95-4.78L3.41.66C3.71.5 4.07.52 4.41.68l.12.07L17 8.35l-2.31 2.59z\"/>\n </svg>\n );\n}\n\nfunction CheckCircle() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction StarIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/>\n </svg>\n );\n}\n\nconst STORE_META = {\n appstore: { sub: 'Download on the', name: 'App Store', Icon: AppleIcon },\n googleplay: { sub: 'Get it on', name: 'Google Play', Icon: PlayIcon },\n};\n\nexport function AppDownload({\n title = 'Take it with you',\n description = 'Download our app and stay connected wherever you go. Available on iOS and Android.',\n eyebrow = 'Mobile App',\n stores = [{ type: 'appstore' }, { type: 'googleplay' }],\n features = [\n { text: 'Works offline — sync when back online' },\n { text: 'Native push notifications' },\n { text: 'Biometric authentication' },\n { text: 'Free forever, no credit card required' },\n ],\n rating,\n ratingCount,\n showMockup = true,\n showQR = false,\n layout = 'split',\n className = '',\n}: AppDownloadProps) {\n const classes = ['rz-app-download', `rz-app-download--${layout}`, className].filter(Boolean).join(' ');\n\n const contentSide = (\n <div className=\"rz-app-download__content\">\n {eyebrow && <p className=\"rz-app-download__eyebrow\">{eyebrow}</p>}\n <h2 className=\"rz-app-download__title\">{title}</h2>\n <p className=\"rz-app-download__description\">{description}</p>\n\n <div className=\"rz-app-download__buttons\">\n {stores.map((store) => {\n const meta = STORE_META[store.type];\n return (\n <a\n key={store.type}\n href={store.href ?? '#'}\n className=\"rz-app-download__store-btn\"\n onClick={store.onClick ? (e) => { e.preventDefault(); store.onClick!(); } : undefined}\n aria-label={`${meta.name}`}\n >\n <meta.Icon />\n <div>\n <span className=\"rz-app-download__store-sub\">{meta.sub}</span>\n <span className=\"rz-app-download__store-name\">{meta.name}</span>\n </div>\n </a>\n );\n })}\n </div>\n\n {rating !== undefined && (\n <div className=\"rz-app-download__rating\">\n <div className=\"rz-app-download__stars\">\n {Array.from({ length: 5 }).map((_, i) => (\n <StarIcon key={i} />\n ))}\n </div>\n <span><strong>{rating}</strong> / 5</span>\n {ratingCount && <span>({ratingCount} reviews)</span>}\n </div>\n )}\n\n {features.length > 0 && (\n <div className=\"rz-app-download__features\">\n {features.map((f, i) => (\n <div key={i} className=\"rz-app-download__feature\">\n <span className=\"rz-app-download__feature-icon\">\n <CheckCircle />\n </span>\n {f.text}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n\n const visualSide = showQR ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__qr\">\n <div className=\"rz-app-download__qr-placeholder\" aria-hidden=\"true\" />\n <p className=\"rz-app-download__qr-label\">Scan to download</p>\n </div>\n </div>\n ) : showMockup ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__mockup\">\n <div className=\"rz-app-download__mockup-screen\">\n <div className=\"rz-app-download__mockup-notch\" />\n </div>\n </div>\n </div>\n ) : null;\n\n if (layout === 'centered') {\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n }\n\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AppDownload.js","sources":["../../../src/blocks/app-download/AppDownload.tsx"],"sourcesContent":["import { Text } from '../../components/text';\nimport { Rows } from '../../components/rows';\nimport './app-download.css';\n\nexport type AppDownloadLayout = 'centered' | 'split';\n\nexport interface AppStore {\n type: 'appstore' | 'googleplay';\n href?: string;\n onClick?: () => void;\n}\n\nexport interface AppFeature {\n text: string;\n}\n\nexport interface AppDownloadProps {\n title?: string;\n description?: string;\n eyebrow?: string;\n stores?: AppStore[];\n features?: AppFeature[];\n rating?: number;\n ratingCount?: string;\n showMockup?: boolean;\n showQR?: boolean;\n layout?: AppDownloadLayout;\n className?: string;\n}\n\nfunction AppleIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z\"/>\n </svg>\n );\n}\n\nfunction PlayIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M3.18 23.48c-.39-.23-.68-.64-.68-1.15V1.67c0-.51.29-.92.68-1.15l.12-.06 12.1 12.1v.28L3.3 23.54l-.12-.06zm16.46-9.76l-2.93 1.69-3.23-3.23 3.23-3.23 2.93 1.69c.84.48.84 1.6 0 2.08zm-4.95-4.78L3.41.66C3.71.5 4.07.52 4.41.68l.12.07L17 8.35l-2.31 2.59z\"/>\n </svg>\n );\n}\n\nfunction CheckCircle() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction StarIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"/>\n </svg>\n );\n}\n\nconst STORE_META = {\n appstore: { sub: 'Download on the', name: 'App Store', Icon: AppleIcon },\n googleplay: { sub: 'Get it on', name: 'Google Play', Icon: PlayIcon },\n};\n\nexport function AppDownload({\n title = 'Take it with you',\n description = 'Download our app and stay connected wherever you go. Available on iOS and Android.',\n eyebrow = 'Mobile App',\n stores = [{ type: 'appstore' }, { type: 'googleplay' }],\n features = [\n { text: 'Works offline — sync when back online' },\n { text: 'Native push notifications' },\n { text: 'Biometric authentication' },\n { text: 'Free forever, no credit card required' },\n ],\n rating,\n ratingCount,\n showMockup = true,\n showQR = false,\n layout = 'split',\n className = '',\n}: AppDownloadProps) {\n const classes = ['rz-app-download', `rz-app-download--${layout}`, className].filter(Boolean).join(' ');\n\n const contentSide = (\n <Rows className=\"rz-app-download__content\">\n {eyebrow && <Text as=\"p\" className=\"rz-app-download__eyebrow\">{eyebrow}</Text>}\n <Text as=\"h2\" className=\"rz-app-download__title\">{title}</Text>\n <Text as=\"p\" className=\"rz-app-download__description\">{description}</Text>\n\n <div className=\"rz-app-download__buttons\">\n {stores.map((store) => {\n const meta = STORE_META[store.type];\n return (\n <a\n key={store.type}\n href={store.href ?? '#'}\n className=\"rz-app-download__store-btn\"\n onClick={store.onClick ? (e) => { e.preventDefault(); store.onClick!(); } : undefined}\n aria-label={`${meta.name}`}\n >\n <meta.Icon />\n <div>\n <span className=\"rz-app-download__store-sub\">{meta.sub}</span>\n <span className=\"rz-app-download__store-name\">{meta.name}</span>\n </div>\n </a>\n );\n })}\n </div>\n\n {rating !== undefined && (\n <div className=\"rz-app-download__rating\">\n <div className=\"rz-app-download__stars\">\n {Array.from({ length: 5 }).map((_, i) => (\n <StarIcon key={i} />\n ))}\n </div>\n <span><strong>{rating}</strong> / 5</span>\n {ratingCount && <span>({ratingCount} reviews)</span>}\n </div>\n )}\n\n {features.length > 0 && (\n <div className=\"rz-app-download__features\">\n {features.map((f, i) => (\n <div key={i} className=\"rz-app-download__feature\">\n <span className=\"rz-app-download__feature-icon\">\n <CheckCircle />\n </span>\n {f.text}\n </div>\n ))}\n </div>\n )}\n </Rows>\n );\n\n const visualSide = showQR ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__qr\">\n <div className=\"rz-app-download__qr-placeholder\" aria-hidden=\"true\" />\n <Text as=\"p\" className=\"rz-app-download__qr-label\">Scan to download</Text>\n </div>\n </div>\n ) : showMockup ? (\n <div className=\"rz-app-download__visual\">\n <div className=\"rz-app-download__mockup\">\n <div className=\"rz-app-download__mockup-screen\">\n <div className=\"rz-app-download__mockup-notch\" />\n </div>\n </div>\n </div>\n ) : null;\n\n if (layout === 'centered') {\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n }\n\n return (\n <section className={classes} aria-label=\"App download\">\n <div className=\"rz-app-download__inner\">\n {contentSide}\n {visualSide}\n </div>\n </section>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const cn = require("../../utils/cn.cjs");
5
5
  const Button = require("../../components/button/Button.cjs");
6
6
  ;/* empty css */
7
+ const Rows = require("../../components/rows/Rows.cjs");
8
+ const Text = require("../../components/text/Text.cjs");
7
9
  const defaultLoginFields = [
8
10
  { name: "email", label: "Email", type: "email", placeholder: "you@example.com", required: true },
9
11
  { name: "password", label: "Password", type: "password", placeholder: "••••••••", required: true }
@@ -38,10 +40,10 @@ function AuthForm({
38
40
  const resolvedTitle = title ?? (mode === "login" ? "Welcome back" : "Create an account");
39
41
  const resolvedSubtitle = subtitle ?? (mode === "login" ? "Sign in to your account" : "Start your free account today");
40
42
  const resolvedSubmit = submitLabel ?? (mode === "login" ? "Sign In" : "Create Account");
41
- const formContent = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-auth-form__card", children: [
43
+ const formContent = /* @__PURE__ */ jsxRuntime.jsxs(Rows.Rows, { className: "rz-auth-form__card", children: [
42
44
  logo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__logo", children: logo }),
43
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "rz-auth-form__title", children: resolvedTitle }),
44
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rz-auth-form__subtitle", children: resolvedSubtitle }),
45
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "h1", className: "rz-auth-form__title", children: resolvedTitle }),
46
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "p", className: "rz-auth-form__subtitle", children: resolvedSubtitle }),
45
47
  socialProviders.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
46
48
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__social", children: socialProviders.map((p) => /* @__PURE__ */ jsxRuntime.jsxs("button", { type: "button", className: "rz-auth-form__social-btn", onClick: p.onClick, children: [
47
49
  p.icon,
@@ -51,7 +53,7 @@ function AuthForm({
51
53
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__divider", children: "or" })
52
54
  ] }),
53
55
  /* @__PURE__ */ jsxRuntime.jsxs("form", { className: "rz-auth-form__body", onSubmit, children: [
54
- resolvedFields.map((field) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-auth-form__field", children: [
56
+ resolvedFields.map((field) => /* @__PURE__ */ jsxRuntime.jsxs(Rows.Rows, { className: "rz-auth-form__field", children: [
55
57
  /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: field.name, className: "rz-auth-form__label", children: field.label }),
56
58
  /* @__PURE__ */ jsxRuntime.jsx(
57
59
  "input",
@@ -71,7 +73,7 @@ function AuthForm({
71
73
  ] }, field.name)),
72
74
  /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { type: "submit", fullWidth: true, loading, className: "rz-auth-form__submit", children: resolvedSubmit })
73
75
  ] }),
74
- footerText && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "rz-auth-form__footer", children: [
76
+ footerText && /* @__PURE__ */ jsxRuntime.jsxs(Text.Text, { as: "p", className: "rz-auth-form__footer", children: [
75
77
  footerText,
76
78
  " ",
77
79
  footerLinkLabel && /* @__PURE__ */ jsxRuntime.jsx("a", { href: "#", className: "rz-auth-form__footer-link", onClick: (e) => {
@@ -85,13 +87,13 @@ function AuthForm({
85
87
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__panel", children: formContent }),
86
88
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__side", children: sideContent ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
87
89
  /* @__PURE__ */ jsxRuntime.jsx("div", {}),
88
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
89
- sideQuote && /* @__PURE__ */ jsxRuntime.jsxs("blockquote", { className: "rz-auth-form__side-quote", children: [
90
+ /* @__PURE__ */ jsxRuntime.jsxs(Rows.Rows, { children: [
91
+ sideQuote && /* @__PURE__ */ jsxRuntime.jsxs(Text.Text, { as: "blockquote", className: "rz-auth-form__side-quote", children: [
90
92
  "“",
91
93
  sideQuote,
92
94
  "”"
93
95
  ] }),
94
- sideAttribution && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "rz-auth-form__side-attribution", children: [
96
+ sideAttribution && /* @__PURE__ */ jsxRuntime.jsxs(Text.Text, { as: "p", className: "rz-auth-form__side-attribution", children: [
95
97
  "— ",
96
98
  sideAttribution
97
99
  ] })
@@ -99,7 +101,7 @@ function AuthForm({
99
101
  ] }) })
100
102
  ] });
101
103
  }
102
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn.cn("rz-auth-form rz-auth-form--centered", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__panel", style: { flex: "none", borderRadius: 12, border: "1px solid var(--rz-color-border)", boxShadow: "var(--rz-shadow-lg, 0 8px 30px rgba(0,0,0,0.1))" }, children: formContent }) });
104
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn.cn("rz-auth-form rz-auth-form--centered", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-auth-form__panel rz-auth-form__panel--card", children: formContent }) });
103
105
  }
104
106
  exports.AuthForm = AuthForm;
105
107
  //# sourceMappingURL=AuthForm.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthForm.cjs","sources":["../../../src/blocks/auth-form/AuthForm.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../../components/button/Button';\nimport './auth-form.css';\n\nexport type AuthFormMode = 'login' | 'register';\nexport type AuthFormLayout = 'centered' | 'split';\n\nexport interface SocialProvider {\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface AuthFormField {\n name: string;\n label: string;\n type?: string;\n placeholder?: string;\n required?: boolean;\n}\n\nexport interface AuthFormProps {\n mode?: AuthFormMode;\n layout?: AuthFormLayout;\n logo?: React.ReactNode;\n title?: string;\n subtitle?: string;\n fields?: AuthFormField[];\n socialProviders?: SocialProvider[];\n showForgotPassword?: boolean;\n onForgotPassword?: () => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n submitLabel?: string;\n loading?: boolean;\n footerText?: string;\n footerLinkLabel?: string;\n onFooterLink?: () => void;\n /** Split layout: side panel content */\n sideQuote?: string;\n sideAttribution?: string;\n sideContent?: React.ReactNode;\n className?: string;\n}\n\nconst defaultLoginFields: AuthFormField[] = [\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: '••••••••', required: true },\n];\n\nconst defaultRegisterFields: AuthFormField[] = [\n { name: 'name', label: 'Full Name', type: 'text', placeholder: 'Jane Doe', required: true },\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: 'Min. 8 characters', required: true },\n];\n\nexport function AuthForm({\n mode = 'login',\n layout = 'centered',\n logo,\n title,\n subtitle,\n fields,\n socialProviders = [],\n showForgotPassword = true,\n onForgotPassword,\n onSubmit,\n submitLabel,\n loading = false,\n footerText,\n footerLinkLabel,\n onFooterLink,\n sideQuote,\n sideAttribution,\n sideContent,\n className,\n}: AuthFormProps) {\n const resolvedFields = fields ?? (mode === 'login' ? defaultLoginFields : defaultRegisterFields);\n const resolvedTitle = title ?? (mode === 'login' ? 'Welcome back' : 'Create an account');\n const resolvedSubtitle = subtitle ?? (mode === 'login' ? 'Sign in to your account' : 'Start your free account today');\n const resolvedSubmit = submitLabel ?? (mode === 'login' ? 'Sign In' : 'Create Account');\n\n const formContent = (\n <div className=\"rz-auth-form__card\">\n {logo && <div className=\"rz-auth-form__logo\">{logo}</div>}\n <h1 className=\"rz-auth-form__title\">{resolvedTitle}</h1>\n <p className=\"rz-auth-form__subtitle\">{resolvedSubtitle}</p>\n\n {socialProviders.length > 0 && (\n <>\n <div className=\"rz-auth-form__social\">\n {socialProviders.map((p) => (\n <button key={p.label} type=\"button\" className=\"rz-auth-form__social-btn\" onClick={p.onClick}>\n {p.icon}\n Continue with {p.label}\n </button>\n ))}\n </div>\n <div className=\"rz-auth-form__divider\">or</div>\n </>\n )}\n\n <form className=\"rz-auth-form__body\" onSubmit={onSubmit}>\n {resolvedFields.map((field) => (\n <div key={field.name} className=\"rz-auth-form__field\">\n <label htmlFor={field.name} className=\"rz-auth-form__label\">{field.label}</label>\n <input\n id={field.name}\n name={field.name}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n required={field.required}\n className=\"rz-auth-form__input\"\n />\n {field.name === 'password' && mode === 'login' && showForgotPassword && (\n <a href=\"#\" className=\"rz-auth-form__forgot\" onClick={(e) => { e.preventDefault(); onForgotPassword?.(); }}>\n Forgot password?\n </a>\n )}\n </div>\n ))}\n <Button type=\"submit\" fullWidth loading={loading} className=\"rz-auth-form__submit\">\n {resolvedSubmit}\n </Button>\n </form>\n\n {footerText && (\n <p className=\"rz-auth-form__footer\">\n {footerText}{' '}\n {footerLinkLabel && (\n <a href=\"#\" className=\"rz-auth-form__footer-link\" onClick={(e) => { e.preventDefault(); onFooterLink?.(); }}>\n {footerLinkLabel}\n </a>\n )}\n </p>\n )}\n </div>\n );\n\n if (layout === 'split') {\n return (\n <div className={cn('rz-auth-form rz-auth-form--split', className)}>\n <div className=\"rz-auth-form__panel\">\n {formContent}\n </div>\n <div className=\"rz-auth-form__side\">\n {sideContent ?? (\n <>\n <div />\n <div>\n {sideQuote && <blockquote className=\"rz-auth-form__side-quote\">&ldquo;{sideQuote}&rdquo;</blockquote>}\n {sideAttribution && <p className=\"rz-auth-form__side-attribution\">— {sideAttribution}</p>}\n </div>\n </>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn('rz-auth-form rz-auth-form--centered', className)}>\n <div className=\"rz-auth-form__panel\" style={{ flex: 'none', borderRadius: 12, border: '1px solid var(--rz-color-border)', boxShadow: 'var(--rz-shadow-lg, 0 8px 30px rgba(0,0,0,0.1))' }}>\n {formContent}\n </div>\n </div>\n );\n}\n"],"names":["jsxs","jsx","Fragment","Button","cn"],"mappings":";;;;;;AA6CA,MAAM,qBAAsC;AAAA,EAC1C,EAAE,MAAM,SAAS,OAAO,SAAS,MAAM,SAAS,aAAa,mBAAmB,UAAU,KAAA;AAAA,EAC1F,EAAE,MAAM,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,YAAY,UAAU,KAAA;AAC9F;AAEA,MAAM,wBAAyC;AAAA,EAC7C,EAAE,MAAM,QAAQ,OAAO,aAAa,MAAM,QAAQ,aAAa,YAAY,UAAU,KAAA;AAAA,EACrF,EAAE,MAAM,SAAS,OAAO,SAAS,MAAM,SAAS,aAAa,mBAAmB,UAAU,KAAA;AAAA,EAC1F,EAAE,MAAM,YAAY,OAAO,YAAY,MAAM,YAAY,aAAa,qBAAqB,UAAU,KAAA;AACvG;AAEO,SAAS,SAAS;AAAA,EACvB,OAAO;AAAA,EACP,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB,CAAA;AAAA,EAClB,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,iBAAiB,WAAW,SAAS,UAAU,qBAAqB;AAC1E,QAAM,gBAAgB,UAAU,SAAS,UAAU,iBAAiB;AACpE,QAAM,mBAAmB,aAAa,SAAS,UAAU,4BAA4B;AACrF,QAAM,iBAAiB,gBAAgB,SAAS,UAAU,YAAY;AAEtE,QAAM,cACJA,2BAAAA,KAAC,OAAA,EAAI,WAAU,sBACZ,UAAA;AAAA,IAAA,QAAQC,2BAAAA,IAAC,OAAA,EAAI,WAAU,sBAAsB,UAAA,MAAK;AAAA,IACnDA,2BAAAA,IAAC,MAAA,EAAG,WAAU,uBAAuB,UAAA,eAAc;AAAA,IACnDA,2BAAAA,IAAC,KAAA,EAAE,WAAU,0BAA0B,UAAA,kBAAiB;AAAA,IAEvD,gBAAgB,SAAS,KACxBD,2BAAAA,KAAAE,WAAAA,UAAA,EACE,UAAA;AAAA,MAAAD,+BAAC,OAAA,EAAI,WAAU,wBACZ,UAAA,gBAAgB,IAAI,CAAC,MACpBD,2BAAAA,KAAC,UAAA,EAAqB,MAAK,UAAS,WAAU,4BAA2B,SAAS,EAAE,SACjF,UAAA;AAAA,QAAA,EAAE;AAAA,QAAK;AAAA,QACO,EAAE;AAAA,MAAA,EAAA,GAFN,EAAE,KAGf,CACD,GACH;AAAA,MACAC,2BAAAA,IAAC,OAAA,EAAI,WAAU,yBAAwB,UAAA,KAAA,CAAE;AAAA,IAAA,GAC3C;AAAA,IAGFD,2BAAAA,KAAC,QAAA,EAAK,WAAU,sBAAqB,UAClC,UAAA;AAAA,MAAA,eAAe,IAAI,CAAC,UACnBA,2BAAAA,KAAC,OAAA,EAAqB,WAAU,uBAC9B,UAAA;AAAA,QAAAC,2BAAAA,IAAC,WAAM,SAAS,MAAM,MAAM,WAAU,uBAAuB,gBAAM,MAAA,CAAM;AAAA,QACzEA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,IAAI,MAAM;AAAA,YACV,MAAM,MAAM;AAAA,YACZ,MAAM,MAAM,QAAQ;AAAA,YACpB,aAAa,MAAM;AAAA,YACnB,UAAU,MAAM;AAAA,YAChB,WAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEX,MAAM,SAAS,cAAc,SAAS,WAAW,sBAChDA,2BAAAA,IAAC,KAAA,EAAE,MAAK,KAAI,WAAU,wBAAuB,SAAS,CAAC,MAAM;AAAE,YAAE,eAAA;AAAkB;AAAA,QAAsB,GAAG,UAAA,mBAAA,CAE5G;AAAA,MAAA,KAbM,MAAM,IAehB,CACD;AAAA,MACDA,2BAAAA,IAACE,OAAAA,UAAO,MAAK,UAAS,WAAS,MAAC,SAAkB,WAAU,wBACzD,UAAA,eAAA,CACH;AAAA,IAAA,GACF;AAAA,IAEC,cACCH,2BAAAA,KAAC,KAAA,EAAE,WAAU,wBACV,UAAA;AAAA,MAAA;AAAA,MAAY;AAAA,MACZ,kDACE,KAAA,EAAE,MAAK,KAAI,WAAU,6BAA4B,SAAS,CAAC,MAAM;AAAE,UAAE,eAAA;AAAkB;AAAA,MAAkB,GACvG,UAAA,gBAAA,CACH;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAGF,MAAI,WAAW,SAAS;AACtB,2CACG,OAAA,EAAI,WAAWI,GAAAA,GAAG,oCAAoC,SAAS,GAC9D,UAAA;AAAA,MAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,uBACZ,UAAA,aACH;AAAA,MACAA,+BAAC,OAAA,EAAI,WAAU,sBACZ,yBACCD,2BAAAA,KAAAE,qBAAA,EACE,UAAA;AAAA,QAAAD,2BAAAA,IAAC,OAAA,EAAI;AAAA,wCACJ,OAAA,EACE,UAAA;AAAA,UAAA,aAAaD,2BAAAA,KAAC,cAAA,EAAW,WAAU,4BAA2B,UAAA;AAAA,YAAA;AAAA,YAAQ;AAAA,YAAU;AAAA,UAAA,GAAO;AAAA,UACvF,mBAAmBA,2BAAAA,KAAC,KAAA,EAAE,WAAU,kCAAiC,UAAA;AAAA,YAAA;AAAA,YAAG;AAAA,UAAA,EAAA,CAAgB;AAAA,QAAA,EAAA,CACvF;AAAA,MAAA,EAAA,CACF,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,EAEJ;AAEA,SACEC,2BAAAA,IAAC,SAAI,WAAWG,GAAAA,GAAG,uCAAuC,SAAS,GACjE,UAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,uBAAsB,OAAO,EAAE,MAAM,QAAQ,cAAc,IAAI,QAAQ,oCAAoC,WAAW,kDAAA,GAClI,UAAA,YAAA,CACH,EAAA,CACF;AAEJ;;"}
1
+ {"version":3,"file":"AuthForm.cjs","sources":["../../../src/blocks/auth-form/AuthForm.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../../components/button/Button';\nimport { Text } from '../../components/text';\nimport { Rows } from '../../components/rows';\nimport './auth-form.css';\n\nexport type AuthFormMode = 'login' | 'register';\nexport type AuthFormLayout = 'centered' | 'split';\n\nexport interface SocialProvider {\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface AuthFormField {\n name: string;\n label: string;\n type?: string;\n placeholder?: string;\n required?: boolean;\n}\n\nexport interface AuthFormProps {\n mode?: AuthFormMode;\n layout?: AuthFormLayout;\n logo?: React.ReactNode;\n title?: string;\n subtitle?: string;\n fields?: AuthFormField[];\n socialProviders?: SocialProvider[];\n showForgotPassword?: boolean;\n onForgotPassword?: () => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n submitLabel?: string;\n loading?: boolean;\n footerText?: string;\n footerLinkLabel?: string;\n onFooterLink?: () => void;\n /** Split layout: side panel content */\n sideQuote?: string;\n sideAttribution?: string;\n sideContent?: React.ReactNode;\n className?: string;\n}\n\nconst defaultLoginFields: AuthFormField[] = [\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: '••••••••', required: true },\n];\n\nconst defaultRegisterFields: AuthFormField[] = [\n { name: 'name', label: 'Full Name', type: 'text', placeholder: 'Jane Doe', required: true },\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: 'Min. 8 characters', required: true },\n];\n\nexport function AuthForm({\n mode = 'login',\n layout = 'centered',\n logo,\n title,\n subtitle,\n fields,\n socialProviders = [],\n showForgotPassword = true,\n onForgotPassword,\n onSubmit,\n submitLabel,\n loading = false,\n footerText,\n footerLinkLabel,\n onFooterLink,\n sideQuote,\n sideAttribution,\n sideContent,\n className,\n}: AuthFormProps) {\n const resolvedFields = fields ?? (mode === 'login' ? defaultLoginFields : defaultRegisterFields);\n const resolvedTitle = title ?? (mode === 'login' ? 'Welcome back' : 'Create an account');\n const resolvedSubtitle = subtitle ?? (mode === 'login' ? 'Sign in to your account' : 'Start your free account today');\n const resolvedSubmit = submitLabel ?? (mode === 'login' ? 'Sign In' : 'Create Account');\n\n const formContent = (\n <Rows className=\"rz-auth-form__card\">\n {logo && <div className=\"rz-auth-form__logo\">{logo}</div>}\n <Text as=\"h1\" className=\"rz-auth-form__title\">{resolvedTitle}</Text>\n <Text as=\"p\" className=\"rz-auth-form__subtitle\">{resolvedSubtitle}</Text>\n\n {socialProviders.length > 0 && (\n <>\n <div className=\"rz-auth-form__social\">\n {socialProviders.map((p) => (\n <button key={p.label} type=\"button\" className=\"rz-auth-form__social-btn\" onClick={p.onClick}>\n {p.icon}\n Continue with {p.label}\n </button>\n ))}\n </div>\n <div className=\"rz-auth-form__divider\">or</div>\n </>\n )}\n\n <form className=\"rz-auth-form__body\" onSubmit={onSubmit}>\n {resolvedFields.map((field) => (\n <Rows key={field.name} className=\"rz-auth-form__field\">\n <label htmlFor={field.name} className=\"rz-auth-form__label\">{field.label}</label>\n <input\n id={field.name}\n name={field.name}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n required={field.required}\n className=\"rz-auth-form__input\"\n />\n {field.name === 'password' && mode === 'login' && showForgotPassword && (\n <a href=\"#\" className=\"rz-auth-form__forgot\" onClick={(e) => { e.preventDefault(); onForgotPassword?.(); }}>\n Forgot password?\n </a>\n )}\n </Rows>\n ))}\n <Button type=\"submit\" fullWidth loading={loading} className=\"rz-auth-form__submit\">\n {resolvedSubmit}\n </Button>\n </form>\n\n {footerText && (\n <Text as=\"p\" className=\"rz-auth-form__footer\">\n {footerText}{' '}\n {footerLinkLabel && (\n <a href=\"#\" className=\"rz-auth-form__footer-link\" onClick={(e) => { e.preventDefault(); onFooterLink?.(); }}>\n {footerLinkLabel}\n </a>\n )}\n </Text>\n )}\n </Rows>\n );\n\n if (layout === 'split') {\n return (\n <div className={cn('rz-auth-form rz-auth-form--split', className)}>\n <div className=\"rz-auth-form__panel\">\n {formContent}\n </div>\n <div className=\"rz-auth-form__side\">\n {sideContent ?? (\n <>\n <div />\n <Rows>\n {sideQuote && <Text as=\"blockquote\" className=\"rz-auth-form__side-quote\">&ldquo;{sideQuote}&rdquo;</Text>}\n {sideAttribution && <Text as=\"p\" className=\"rz-auth-form__side-attribution\">— {sideAttribution}</Text>}\n </Rows>\n </>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn('rz-auth-form rz-auth-form--centered', className)}>\n <div className=\"rz-auth-form__panel rz-auth-form__panel--card\">\n {formContent}\n </div>\n </div>\n );\n}\n"],"names":["jsxs","Rows","jsx","Text","Fragment","Button","cn"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AuthForm.d.ts","sourceRoot":"","sources":["../../../src/blocks/auth-form/AuthForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,iBAAiB,CAAC;AAEzB,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,QAAQ,CAAC,EACvB,IAAc,EACd,MAAmB,EACnB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,eAAoB,EACpB,kBAAyB,EACzB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,OAAe,EACf,UAAU,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,eAAe,EACf,WAAW,EACX,SAAS,GACV,EAAE,aAAa,2CA2Ff"}
1
+ {"version":3,"file":"AuthForm.d.ts","sourceRoot":"","sources":["../../../src/blocks/auth-form/AuthForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,iBAAiB,CAAC;AAEzB,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,UAAU,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,QAAQ,CAAC,EACvB,IAAc,EACd,MAAmB,EACnB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,MAAM,EACN,eAAoB,EACpB,kBAAyB,EACzB,gBAAgB,EAChB,QAAQ,EACR,WAAW,EACX,OAAe,EACf,UAAU,EACV,eAAe,EACf,YAAY,EACZ,SAAS,EACT,eAAe,EACf,WAAW,EACX,SAAS,GACV,EAAE,aAAa,2CA2Ff"}
@@ -2,6 +2,8 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
2
  import { cn } from "../../utils/cn.js";
3
3
  import { Button } from "../../components/button/Button.js";
4
4
  /* empty css */
5
+ import { Rows } from "../../components/rows/Rows.js";
6
+ import { Text } from "../../components/text/Text.js";
5
7
  const defaultLoginFields = [
6
8
  { name: "email", label: "Email", type: "email", placeholder: "you@example.com", required: true },
7
9
  { name: "password", label: "Password", type: "password", placeholder: "••••••••", required: true }
@@ -36,10 +38,10 @@ function AuthForm({
36
38
  const resolvedTitle = title ?? (mode === "login" ? "Welcome back" : "Create an account");
37
39
  const resolvedSubtitle = subtitle ?? (mode === "login" ? "Sign in to your account" : "Start your free account today");
38
40
  const resolvedSubmit = submitLabel ?? (mode === "login" ? "Sign In" : "Create Account");
39
- const formContent = /* @__PURE__ */ jsxs("div", { className: "rz-auth-form__card", children: [
41
+ const formContent = /* @__PURE__ */ jsxs(Rows, { className: "rz-auth-form__card", children: [
40
42
  logo && /* @__PURE__ */ jsx("div", { className: "rz-auth-form__logo", children: logo }),
41
- /* @__PURE__ */ jsx("h1", { className: "rz-auth-form__title", children: resolvedTitle }),
42
- /* @__PURE__ */ jsx("p", { className: "rz-auth-form__subtitle", children: resolvedSubtitle }),
43
+ /* @__PURE__ */ jsx(Text, { as: "h1", className: "rz-auth-form__title", children: resolvedTitle }),
44
+ /* @__PURE__ */ jsx(Text, { as: "p", className: "rz-auth-form__subtitle", children: resolvedSubtitle }),
43
45
  socialProviders.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
44
46
  /* @__PURE__ */ jsx("div", { className: "rz-auth-form__social", children: socialProviders.map((p) => /* @__PURE__ */ jsxs("button", { type: "button", className: "rz-auth-form__social-btn", onClick: p.onClick, children: [
45
47
  p.icon,
@@ -49,7 +51,7 @@ function AuthForm({
49
51
  /* @__PURE__ */ jsx("div", { className: "rz-auth-form__divider", children: "or" })
50
52
  ] }),
51
53
  /* @__PURE__ */ jsxs("form", { className: "rz-auth-form__body", onSubmit, children: [
52
- resolvedFields.map((field) => /* @__PURE__ */ jsxs("div", { className: "rz-auth-form__field", children: [
54
+ resolvedFields.map((field) => /* @__PURE__ */ jsxs(Rows, { className: "rz-auth-form__field", children: [
53
55
  /* @__PURE__ */ jsx("label", { htmlFor: field.name, className: "rz-auth-form__label", children: field.label }),
54
56
  /* @__PURE__ */ jsx(
55
57
  "input",
@@ -69,7 +71,7 @@ function AuthForm({
69
71
  ] }, field.name)),
70
72
  /* @__PURE__ */ jsx(Button, { type: "submit", fullWidth: true, loading, className: "rz-auth-form__submit", children: resolvedSubmit })
71
73
  ] }),
72
- footerText && /* @__PURE__ */ jsxs("p", { className: "rz-auth-form__footer", children: [
74
+ footerText && /* @__PURE__ */ jsxs(Text, { as: "p", className: "rz-auth-form__footer", children: [
73
75
  footerText,
74
76
  " ",
75
77
  footerLinkLabel && /* @__PURE__ */ jsx("a", { href: "#", className: "rz-auth-form__footer-link", onClick: (e) => {
@@ -83,13 +85,13 @@ function AuthForm({
83
85
  /* @__PURE__ */ jsx("div", { className: "rz-auth-form__panel", children: formContent }),
84
86
  /* @__PURE__ */ jsx("div", { className: "rz-auth-form__side", children: sideContent ?? /* @__PURE__ */ jsxs(Fragment, { children: [
85
87
  /* @__PURE__ */ jsx("div", {}),
86
- /* @__PURE__ */ jsxs("div", { children: [
87
- sideQuote && /* @__PURE__ */ jsxs("blockquote", { className: "rz-auth-form__side-quote", children: [
88
+ /* @__PURE__ */ jsxs(Rows, { children: [
89
+ sideQuote && /* @__PURE__ */ jsxs(Text, { as: "blockquote", className: "rz-auth-form__side-quote", children: [
88
90
  "“",
89
91
  sideQuote,
90
92
  "”"
91
93
  ] }),
92
- sideAttribution && /* @__PURE__ */ jsxs("p", { className: "rz-auth-form__side-attribution", children: [
94
+ sideAttribution && /* @__PURE__ */ jsxs(Text, { as: "p", className: "rz-auth-form__side-attribution", children: [
93
95
  "— ",
94
96
  sideAttribution
95
97
  ] })
@@ -97,7 +99,7 @@ function AuthForm({
97
99
  ] }) })
98
100
  ] });
99
101
  }
100
- return /* @__PURE__ */ jsx("div", { className: cn("rz-auth-form rz-auth-form--centered", className), children: /* @__PURE__ */ jsx("div", { className: "rz-auth-form__panel", style: { flex: "none", borderRadius: 12, border: "1px solid var(--rz-color-border)", boxShadow: "var(--rz-shadow-lg, 0 8px 30px rgba(0,0,0,0.1))" }, children: formContent }) });
102
+ return /* @__PURE__ */ jsx("div", { className: cn("rz-auth-form rz-auth-form--centered", className), children: /* @__PURE__ */ jsx("div", { className: "rz-auth-form__panel rz-auth-form__panel--card", children: formContent }) });
101
103
  }
102
104
  export {
103
105
  AuthForm
@@ -1 +1 @@
1
- {"version":3,"file":"AuthForm.js","sources":["../../../src/blocks/auth-form/AuthForm.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../../components/button/Button';\nimport './auth-form.css';\n\nexport type AuthFormMode = 'login' | 'register';\nexport type AuthFormLayout = 'centered' | 'split';\n\nexport interface SocialProvider {\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface AuthFormField {\n name: string;\n label: string;\n type?: string;\n placeholder?: string;\n required?: boolean;\n}\n\nexport interface AuthFormProps {\n mode?: AuthFormMode;\n layout?: AuthFormLayout;\n logo?: React.ReactNode;\n title?: string;\n subtitle?: string;\n fields?: AuthFormField[];\n socialProviders?: SocialProvider[];\n showForgotPassword?: boolean;\n onForgotPassword?: () => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n submitLabel?: string;\n loading?: boolean;\n footerText?: string;\n footerLinkLabel?: string;\n onFooterLink?: () => void;\n /** Split layout: side panel content */\n sideQuote?: string;\n sideAttribution?: string;\n sideContent?: React.ReactNode;\n className?: string;\n}\n\nconst defaultLoginFields: AuthFormField[] = [\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: '••••••••', required: true },\n];\n\nconst defaultRegisterFields: AuthFormField[] = [\n { name: 'name', label: 'Full Name', type: 'text', placeholder: 'Jane Doe', required: true },\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: 'Min. 8 characters', required: true },\n];\n\nexport function AuthForm({\n mode = 'login',\n layout = 'centered',\n logo,\n title,\n subtitle,\n fields,\n socialProviders = [],\n showForgotPassword = true,\n onForgotPassword,\n onSubmit,\n submitLabel,\n loading = false,\n footerText,\n footerLinkLabel,\n onFooterLink,\n sideQuote,\n sideAttribution,\n sideContent,\n className,\n}: AuthFormProps) {\n const resolvedFields = fields ?? (mode === 'login' ? defaultLoginFields : defaultRegisterFields);\n const resolvedTitle = title ?? (mode === 'login' ? 'Welcome back' : 'Create an account');\n const resolvedSubtitle = subtitle ?? (mode === 'login' ? 'Sign in to your account' : 'Start your free account today');\n const resolvedSubmit = submitLabel ?? (mode === 'login' ? 'Sign In' : 'Create Account');\n\n const formContent = (\n <div className=\"rz-auth-form__card\">\n {logo && <div className=\"rz-auth-form__logo\">{logo}</div>}\n <h1 className=\"rz-auth-form__title\">{resolvedTitle}</h1>\n <p className=\"rz-auth-form__subtitle\">{resolvedSubtitle}</p>\n\n {socialProviders.length > 0 && (\n <>\n <div className=\"rz-auth-form__social\">\n {socialProviders.map((p) => (\n <button key={p.label} type=\"button\" className=\"rz-auth-form__social-btn\" onClick={p.onClick}>\n {p.icon}\n Continue with {p.label}\n </button>\n ))}\n </div>\n <div className=\"rz-auth-form__divider\">or</div>\n </>\n )}\n\n <form className=\"rz-auth-form__body\" onSubmit={onSubmit}>\n {resolvedFields.map((field) => (\n <div key={field.name} className=\"rz-auth-form__field\">\n <label htmlFor={field.name} className=\"rz-auth-form__label\">{field.label}</label>\n <input\n id={field.name}\n name={field.name}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n required={field.required}\n className=\"rz-auth-form__input\"\n />\n {field.name === 'password' && mode === 'login' && showForgotPassword && (\n <a href=\"#\" className=\"rz-auth-form__forgot\" onClick={(e) => { e.preventDefault(); onForgotPassword?.(); }}>\n Forgot password?\n </a>\n )}\n </div>\n ))}\n <Button type=\"submit\" fullWidth loading={loading} className=\"rz-auth-form__submit\">\n {resolvedSubmit}\n </Button>\n </form>\n\n {footerText && (\n <p className=\"rz-auth-form__footer\">\n {footerText}{' '}\n {footerLinkLabel && (\n <a href=\"#\" className=\"rz-auth-form__footer-link\" onClick={(e) => { e.preventDefault(); onFooterLink?.(); }}>\n {footerLinkLabel}\n </a>\n )}\n </p>\n )}\n </div>\n );\n\n if (layout === 'split') {\n return (\n <div className={cn('rz-auth-form rz-auth-form--split', className)}>\n <div className=\"rz-auth-form__panel\">\n {formContent}\n </div>\n <div className=\"rz-auth-form__side\">\n {sideContent ?? (\n <>\n <div />\n <div>\n {sideQuote && <blockquote className=\"rz-auth-form__side-quote\">&ldquo;{sideQuote}&rdquo;</blockquote>}\n {sideAttribution && <p className=\"rz-auth-form__side-attribution\">— {sideAttribution}</p>}\n </div>\n </>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn('rz-auth-form rz-auth-form--centered', className)}>\n <div className=\"rz-auth-form__panel\" style={{ flex: 'none', borderRadius: 12, border: '1px solid var(--rz-color-border)', boxShadow: 'var(--rz-shadow-lg, 0 8px 30px rgba(0,0,0,0.1))' }}>\n {formContent}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthForm.js","sources":["../../../src/blocks/auth-form/AuthForm.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../../components/button/Button';\nimport { Text } from '../../components/text';\nimport { Rows } from '../../components/rows';\nimport './auth-form.css';\n\nexport type AuthFormMode = 'login' | 'register';\nexport type AuthFormLayout = 'centered' | 'split';\n\nexport interface SocialProvider {\n label: string;\n icon?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport interface AuthFormField {\n name: string;\n label: string;\n type?: string;\n placeholder?: string;\n required?: boolean;\n}\n\nexport interface AuthFormProps {\n mode?: AuthFormMode;\n layout?: AuthFormLayout;\n logo?: React.ReactNode;\n title?: string;\n subtitle?: string;\n fields?: AuthFormField[];\n socialProviders?: SocialProvider[];\n showForgotPassword?: boolean;\n onForgotPassword?: () => void;\n onSubmit?: (e: React.FormEvent<HTMLFormElement>) => void;\n submitLabel?: string;\n loading?: boolean;\n footerText?: string;\n footerLinkLabel?: string;\n onFooterLink?: () => void;\n /** Split layout: side panel content */\n sideQuote?: string;\n sideAttribution?: string;\n sideContent?: React.ReactNode;\n className?: string;\n}\n\nconst defaultLoginFields: AuthFormField[] = [\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: '••••••••', required: true },\n];\n\nconst defaultRegisterFields: AuthFormField[] = [\n { name: 'name', label: 'Full Name', type: 'text', placeholder: 'Jane Doe', required: true },\n { name: 'email', label: 'Email', type: 'email', placeholder: 'you@example.com', required: true },\n { name: 'password', label: 'Password', type: 'password', placeholder: 'Min. 8 characters', required: true },\n];\n\nexport function AuthForm({\n mode = 'login',\n layout = 'centered',\n logo,\n title,\n subtitle,\n fields,\n socialProviders = [],\n showForgotPassword = true,\n onForgotPassword,\n onSubmit,\n submitLabel,\n loading = false,\n footerText,\n footerLinkLabel,\n onFooterLink,\n sideQuote,\n sideAttribution,\n sideContent,\n className,\n}: AuthFormProps) {\n const resolvedFields = fields ?? (mode === 'login' ? defaultLoginFields : defaultRegisterFields);\n const resolvedTitle = title ?? (mode === 'login' ? 'Welcome back' : 'Create an account');\n const resolvedSubtitle = subtitle ?? (mode === 'login' ? 'Sign in to your account' : 'Start your free account today');\n const resolvedSubmit = submitLabel ?? (mode === 'login' ? 'Sign In' : 'Create Account');\n\n const formContent = (\n <Rows className=\"rz-auth-form__card\">\n {logo && <div className=\"rz-auth-form__logo\">{logo}</div>}\n <Text as=\"h1\" className=\"rz-auth-form__title\">{resolvedTitle}</Text>\n <Text as=\"p\" className=\"rz-auth-form__subtitle\">{resolvedSubtitle}</Text>\n\n {socialProviders.length > 0 && (\n <>\n <div className=\"rz-auth-form__social\">\n {socialProviders.map((p) => (\n <button key={p.label} type=\"button\" className=\"rz-auth-form__social-btn\" onClick={p.onClick}>\n {p.icon}\n Continue with {p.label}\n </button>\n ))}\n </div>\n <div className=\"rz-auth-form__divider\">or</div>\n </>\n )}\n\n <form className=\"rz-auth-form__body\" onSubmit={onSubmit}>\n {resolvedFields.map((field) => (\n <Rows key={field.name} className=\"rz-auth-form__field\">\n <label htmlFor={field.name} className=\"rz-auth-form__label\">{field.label}</label>\n <input\n id={field.name}\n name={field.name}\n type={field.type ?? 'text'}\n placeholder={field.placeholder}\n required={field.required}\n className=\"rz-auth-form__input\"\n />\n {field.name === 'password' && mode === 'login' && showForgotPassword && (\n <a href=\"#\" className=\"rz-auth-form__forgot\" onClick={(e) => { e.preventDefault(); onForgotPassword?.(); }}>\n Forgot password?\n </a>\n )}\n </Rows>\n ))}\n <Button type=\"submit\" fullWidth loading={loading} className=\"rz-auth-form__submit\">\n {resolvedSubmit}\n </Button>\n </form>\n\n {footerText && (\n <Text as=\"p\" className=\"rz-auth-form__footer\">\n {footerText}{' '}\n {footerLinkLabel && (\n <a href=\"#\" className=\"rz-auth-form__footer-link\" onClick={(e) => { e.preventDefault(); onFooterLink?.(); }}>\n {footerLinkLabel}\n </a>\n )}\n </Text>\n )}\n </Rows>\n );\n\n if (layout === 'split') {\n return (\n <div className={cn('rz-auth-form rz-auth-form--split', className)}>\n <div className=\"rz-auth-form__panel\">\n {formContent}\n </div>\n <div className=\"rz-auth-form__side\">\n {sideContent ?? (\n <>\n <div />\n <Rows>\n {sideQuote && <Text as=\"blockquote\" className=\"rz-auth-form__side-quote\">&ldquo;{sideQuote}&rdquo;</Text>}\n {sideAttribution && <Text as=\"p\" className=\"rz-auth-form__side-attribution\">— {sideAttribution}</Text>}\n </Rows>\n </>\n )}\n </div>\n </div>\n );\n }\n\n return (\n <div className={cn('rz-auth-form rz-auth-form--centered', className)}>\n <div className=\"rz-auth-form__panel rz-auth-form__panel--card\">\n {formContent}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -3,6 +3,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const cn = require("../../utils/cn.cjs");
5
5
  ;/* empty css */
6
+ const Columns = require("../../components/columns/Columns.cjs");
7
+ const Rows = require("../../components/rows/Rows.cjs");
8
+ const Text = require("../../components/text/Text.cjs");
9
+ function resolveTag(tag) {
10
+ return typeof tag === "string" ? { label: tag } : tag;
11
+ }
6
12
  function BlogPost({
7
13
  title,
8
14
  excerpt,
@@ -19,29 +25,58 @@ function BlogPost({
19
25
  className
20
26
  }) {
21
27
  const initials = author ? author.avatarInitials ?? author.name.split(" ").map((w) => w[0]).join("").slice(0, 2).toUpperCase() : "";
22
- return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: cn.cn("rz-blog-post", className), children: [
23
- /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "rz-blog-post__header", children: [
24
- category && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__category", children: category }),
25
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "rz-blog-post__title", children: title }),
26
- excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rz-blog-post__excerpt", children: excerpt }),
27
- author && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-blog-post__author", children: [
28
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__author-avatar", children: author.avatarSrc ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: author.avatarSrc, alt: author.name }) : initials }),
29
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
30
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "rz-blog-post__author-name", children: author.name }),
31
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rz-blog-post__author-meta", children: [
32
- author.role && /* @__PURE__ */ jsxRuntime.jsx("span", { children: author.role }),
33
- author.role && (publishedAt || readingTime) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__author-dot" }),
34
- publishedAt && /* @__PURE__ */ jsxRuntime.jsx("span", { children: new Date(publishedAt).toLocaleDateString(void 0, { year: "numeric", month: "long", day: "numeric" }) }),
35
- publishedAt && readingTime && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__author-dot" }),
36
- readingTime && /* @__PURE__ */ jsxRuntime.jsx("span", { children: readingTime })
37
- ] })
38
- ] })
28
+ const jsonLd = {
29
+ "@context": "https://schema.org",
30
+ "@type": "BlogPosting",
31
+ headline: title,
32
+ ...excerpt && { description: excerpt },
33
+ ...coverSrc && { image: coverSrc },
34
+ ...publishedAt && { datePublished: publishedAt },
35
+ ...author && {
36
+ author: {
37
+ "@type": "Person",
38
+ name: author.name,
39
+ ...author.href && { url: author.href }
40
+ }
41
+ },
42
+ ...tags && tags.length > 0 && {
43
+ keywords: tags.map(resolveTag).map((t) => t.label).join(", ")
44
+ }
45
+ };
46
+ const authorContent = author && /* @__PURE__ */ jsxRuntime.jsxs(Columns.Columns, { className: "rz-blog-post__author", children: [
47
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__author-avatar", children: author.avatarSrc ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: author.avatarSrc, alt: author.name }) : initials }),
48
+ /* @__PURE__ */ jsxRuntime.jsxs(Rows.Rows, { children: [
49
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "p", className: "rz-blog-post__author-name", children: author.name }),
50
+ /* @__PURE__ */ jsxRuntime.jsxs(Columns.Columns, { className: "rz-blog-post__author-meta", children: [
51
+ author.role && /* @__PURE__ */ jsxRuntime.jsx("span", { children: author.role }),
52
+ author.role && (publishedAt || readingTime) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__author-dot" }),
53
+ publishedAt && /* @__PURE__ */ jsxRuntime.jsx("span", { children: new Date(publishedAt).toLocaleDateString(void 0, { year: "numeric", month: "long", day: "numeric" }) }),
54
+ publishedAt && readingTime && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__author-dot" }),
55
+ readingTime && /* @__PURE__ */ jsxRuntime.jsx("span", { children: readingTime })
39
56
  ] })
57
+ ] })
58
+ ] });
59
+ return /* @__PURE__ */ jsxRuntime.jsxs("article", { className: cn.cn("rz-blog-post", className), itemScope: true, itemType: "https://schema.org/BlogPosting", children: [
60
+ /* @__PURE__ */ jsxRuntime.jsx(
61
+ "script",
62
+ {
63
+ type: "application/ld+json",
64
+ dangerouslySetInnerHTML: { __html: JSON.stringify(jsonLd) }
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "rz-blog-post__header", children: [
68
+ category && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__category", itemProp: "articleSection", children: category }),
69
+ /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "h1", className: "rz-blog-post__title", itemProp: "headline", children: title }),
70
+ excerpt && /* @__PURE__ */ jsxRuntime.jsx(Text.Text, { as: "p", className: "rz-blog-post__excerpt", itemProp: "description", children: excerpt }),
71
+ author && (author.href ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: author.href, className: "rz-blog-post__author-link", itemProp: "author", itemScope: true, itemType: "https://schema.org/Person", children: authorContent }) : /* @__PURE__ */ jsxRuntime.jsx("div", { itemProp: "author", itemScope: true, itemType: "https://schema.org/Person", children: authorContent }))
40
72
  ] }),
41
- coverSrc && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__cover", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: coverSrc, alt: coverAlt }) }),
42
- content ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__body", dangerouslySetInnerHTML: { __html: content } }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__body", children }),
73
+ coverSrc && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__cover", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: coverSrc, alt: coverAlt, itemProp: "image" }) }),
74
+ content ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__body", itemProp: "articleBody", dangerouslySetInnerHTML: { __html: content } }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__body", itemProp: "articleBody", children }),
43
75
  (tags || shareSlot) && /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "rz-blog-post__footer", children: [
44
- tags && tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__tags", children: tags.map((t) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__tag", children: t }, t)) }),
76
+ tags && tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__tags", children: tags.map((t, i) => {
77
+ const tag = resolveTag(t);
78
+ return tag.href ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: tag.href, className: "rz-blog-post__tag rz-blog-post__tag--link", children: tag.label }, i) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rz-blog-post__tag", children: tag.label }, i);
79
+ }) }),
45
80
  shareSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rz-blog-post__share", children: shareSlot })
46
81
  ] })
47
82
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPost.cjs","sources":["../../../src/blocks/blog-post/BlogPost.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport './blog-post.css';\n\nexport interface BlogPostAuthor {\n name: string;\n avatarSrc?: string;\n avatarInitials?: string;\n role?: string;\n}\n\nexport interface BlogPostProps {\n title: string;\n excerpt?: string;\n category?: string;\n coverSrc?: string;\n coverAlt?: string;\n author?: BlogPostAuthor;\n publishedAt?: string;\n readingTime?: string;\n tags?: string[];\n children?: React.ReactNode;\n /** Rendered instead of children when provided */\n content?: string;\n shareSlot?: React.ReactNode;\n className?: string;\n}\n\nexport function BlogPost({\n title,\n excerpt,\n category,\n coverSrc,\n coverAlt = '',\n author,\n publishedAt,\n readingTime,\n tags,\n children,\n content,\n shareSlot,\n className,\n}: BlogPostProps) {\n const initials = author\n ? author.avatarInitials ?? author.name.split(' ').map((w) => w[0]).join('').slice(0, 2).toUpperCase()\n : '';\n\n return (\n <article className={cn('rz-blog-post', className)}>\n {/* Header */}\n <header className=\"rz-blog-post__header\">\n {category && <span className=\"rz-blog-post__category\">{category}</span>}\n <h1 className=\"rz-blog-post__title\">{title}</h1>\n {excerpt && <p className=\"rz-blog-post__excerpt\">{excerpt}</p>}\n\n {author && (\n <div className=\"rz-blog-post__author\">\n <div className=\"rz-blog-post__author-avatar\">\n {author.avatarSrc ? (\n <img src={author.avatarSrc} alt={author.name} />\n ) : (\n initials\n )}\n </div>\n <div>\n <p className=\"rz-blog-post__author-name\">{author.name}</p>\n <div className=\"rz-blog-post__author-meta\">\n {author.role && <span>{author.role}</span>}\n {author.role && (publishedAt || readingTime) && <span className=\"rz-blog-post__author-dot\" />}\n {publishedAt && <span>{new Date(publishedAt).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}</span>}\n {publishedAt && readingTime && <span className=\"rz-blog-post__author-dot\" />}\n {readingTime && <span>{readingTime}</span>}\n </div>\n </div>\n </div>\n )}\n </header>\n\n {/* Cover image */}\n {coverSrc && (\n <div className=\"rz-blog-post__cover\">\n <img src={coverSrc} alt={coverAlt} />\n </div>\n )}\n\n {/* Body */}\n {content ? (\n <div className=\"rz-blog-post__body\" dangerouslySetInnerHTML={{ __html: content }} />\n ) : (\n <div className=\"rz-blog-post__body\">{children}</div>\n )}\n\n {/* Footer */}\n {(tags || shareSlot) && (\n <footer className=\"rz-blog-post__footer\">\n {tags && tags.length > 0 && (\n <div className=\"rz-blog-post__tags\">\n {tags.map((t) => <span key={t} className=\"rz-blog-post__tag\">{t}</span>)}\n </div>\n )}\n {shareSlot && <div className=\"rz-blog-post__share\">{shareSlot}</div>}\n </footer>\n )}\n </article>\n );\n}\n"],"names":["cn","jsxs","jsx"],"mappings":";;;;;AA4BO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkB;AAChB,QAAM,WAAW,SACb,OAAO,kBAAkB,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,YAAA,IACtF;AAEJ,yCACG,WAAA,EAAQ,WAAWA,GAAAA,GAAG,gBAAgB,SAAS,GAE9C,UAAA;AAAA,IAAAC,2BAAAA,KAAC,UAAA,EAAO,WAAU,wBACf,UAAA;AAAA,MAAA,YAAYC,2BAAAA,IAAC,QAAA,EAAK,WAAU,0BAA0B,UAAA,UAAS;AAAA,MAChEA,2BAAAA,IAAC,MAAA,EAAG,WAAU,uBAAuB,UAAA,OAAM;AAAA,MAC1C,WAAWA,2BAAAA,IAAC,KAAA,EAAE,WAAU,yBAAyB,UAAA,SAAQ;AAAA,MAEzD,UACCD,2BAAAA,KAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,QAAAC,+BAAC,OAAA,EAAI,WAAU,+BACZ,UAAA,OAAO,YACNA,+BAAC,OAAA,EAAI,KAAK,OAAO,WAAW,KAAK,OAAO,KAAA,CAAM,IAE9C,UAEJ;AAAA,wCACC,OAAA,EACC,UAAA;AAAA,UAAAA,2BAAAA,IAAC,KAAA,EAAE,WAAU,6BAA6B,UAAA,OAAO,MAAK;AAAA,UACtDD,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACZ,UAAA;AAAA,YAAA,OAAO,QAAQC,+BAAC,QAAA,EAAM,UAAA,OAAO,MAAK;AAAA,YAClC,OAAO,SAAS,eAAe,gBAAgBA,2BAAAA,IAAC,QAAA,EAAK,WAAU,4BAA2B;AAAA,YAC1F,eAAeA,2BAAAA,IAAC,QAAA,EAAM,UAAA,IAAI,KAAK,WAAW,EAAE,mBAAmB,QAAW,EAAE,MAAM,WAAW,OAAO,QAAQ,KAAK,UAAA,CAAW,GAAE;AAAA,YAC9H,eAAe,eAAeA,2BAAAA,IAAC,QAAA,EAAK,WAAU,4BAA2B;AAAA,YACzE,eAAeA,2BAAAA,IAAC,QAAA,EAAM,UAAA,YAAA,CAAY;AAAA,UAAA,EAAA,CACrC;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GAEJ;AAAA,IAGC,YACCA,2BAAAA,IAAC,OAAA,EAAI,WAAU,uBACb,UAAAA,2BAAAA,IAAC,OAAA,EAAI,KAAK,UAAU,KAAK,SAAA,CAAU,EAAA,CACrC;AAAA,IAID,UACCA,2BAAAA,IAAC,OAAA,EAAI,WAAU,sBAAqB,yBAAyB,EAAE,QAAQ,QAAA,GAAW,IAElFA,2BAAAA,IAAC,OAAA,EAAI,WAAU,sBAAsB,UAAS;AAAA,KAI9C,QAAQ,cACRD,2BAAAA,KAAC,UAAA,EAAO,WAAU,wBACf,UAAA;AAAA,MAAA,QAAQ,KAAK,SAAS,oCACpB,OAAA,EAAI,WAAU,sBACZ,UAAA,KAAK,IAAI,CAAC,qCAAO,QAAA,EAAa,WAAU,qBAAqB,UAAA,EAAA,GAAlC,CAAoC,CAAO,GACzE;AAAA,MAED,aAAaC,2BAAAA,IAAC,OAAA,EAAI,WAAU,uBAAuB,UAAA,UAAA,CAAU;AAAA,IAAA,EAAA,CAChE;AAAA,EAAA,GAEJ;AAEJ;;"}
1
+ {"version":3,"file":"BlogPost.cjs","sources":["../../../src/blocks/blog-post/BlogPost.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Text } from '../../components/text';\nimport { Columns } from '../../components/columns';\nimport { Rows } from '../../components/rows';\nimport './blog-post.css';\n\nexport interface BlogPostAuthor {\n name: string;\n href?: string;\n avatarSrc?: string;\n avatarInitials?: string;\n role?: string;\n}\n\nexport interface BlogPostTag {\n label: string;\n href?: string;\n}\n\nexport interface BlogPostProps {\n title: string;\n excerpt?: string;\n category?: string;\n coverSrc?: string;\n coverAlt?: string;\n author?: BlogPostAuthor;\n publishedAt?: string;\n readingTime?: string;\n /** Tags can be plain strings or objects with label + href */\n tags?: Array<BlogPostTag | string>;\n children?: React.ReactNode;\n /** Rendered instead of children when provided */\n content?: string;\n shareSlot?: React.ReactNode;\n className?: string;\n}\n\nfunction resolveTag(tag: BlogPostTag | string): BlogPostTag {\n return typeof tag === 'string' ? { label: tag } : tag;\n}\n\nexport function BlogPost({\n title,\n excerpt,\n category,\n coverSrc,\n coverAlt = '',\n author,\n publishedAt,\n readingTime,\n tags,\n children,\n content,\n shareSlot,\n className,\n}: BlogPostProps) {\n const initials = author\n ? author.avatarInitials ?? author.name.split(' ').map((w) => w[0]).join('').slice(0, 2).toUpperCase()\n : '';\n\n /* ─── JSON-LD structured data ───────────────────────────── */\n const jsonLd = {\n '@context': 'https://schema.org',\n '@type': 'BlogPosting',\n headline: title,\n ...(excerpt && { description: excerpt }),\n ...(coverSrc && { image: coverSrc }),\n ...(publishedAt && { datePublished: publishedAt }),\n ...(author && {\n author: {\n '@type': 'Person',\n name: author.name,\n ...(author.href && { url: author.href }),\n },\n }),\n ...(tags && tags.length > 0 && {\n keywords: tags.map(resolveTag).map((t) => t.label).join(', '),\n }),\n };\n\n const authorContent = author && (\n <Columns className=\"rz-blog-post__author\">\n <div className=\"rz-blog-post__author-avatar\">\n {author.avatarSrc ? (\n <img src={author.avatarSrc} alt={author.name} />\n ) : (\n initials\n )}\n </div>\n <Rows>\n <Text as=\"p\" className=\"rz-blog-post__author-name\">{author.name}</Text>\n <Columns className=\"rz-blog-post__author-meta\">\n {author.role && <span>{author.role}</span>}\n {author.role && (publishedAt || readingTime) && <span className=\"rz-blog-post__author-dot\" />}\n {publishedAt && <span>{new Date(publishedAt).toLocaleDateString(undefined, { year: 'numeric', month: 'long', day: 'numeric' })}</span>}\n {publishedAt && readingTime && <span className=\"rz-blog-post__author-dot\" />}\n {readingTime && <span>{readingTime}</span>}\n </Columns>\n </Rows>\n </Columns>\n );\n\n return (\n <article className={cn('rz-blog-post', className)} itemScope itemType=\"https://schema.org/BlogPosting\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}\n />\n\n {/* Header */}\n <header className=\"rz-blog-post__header\">\n {category && (\n <span className=\"rz-blog-post__category\" itemProp=\"articleSection\">{category}</span>\n )}\n <Text as=\"h1\" className=\"rz-blog-post__title\" itemProp=\"headline\">{title}</Text>\n {excerpt && (\n <Text as=\"p\" className=\"rz-blog-post__excerpt\" itemProp=\"description\">{excerpt}</Text>\n )}\n\n {author && (\n author.href ? (\n <a href={author.href} className=\"rz-blog-post__author-link\" itemProp=\"author\" itemScope itemType=\"https://schema.org/Person\">\n {authorContent}\n </a>\n ) : (\n <div itemProp=\"author\" itemScope itemType=\"https://schema.org/Person\">\n {authorContent}\n </div>\n )\n )}\n </header>\n\n {/* Cover image */}\n {coverSrc && (\n <div className=\"rz-blog-post__cover\">\n <img src={coverSrc} alt={coverAlt} itemProp=\"image\" />\n </div>\n )}\n\n {/* Body */}\n {content ? (\n <div className=\"rz-blog-post__body\" itemProp=\"articleBody\" dangerouslySetInnerHTML={{ __html: content }} />\n ) : (\n <div className=\"rz-blog-post__body\" itemProp=\"articleBody\">{children}</div>\n )}\n\n {/* Footer */}\n {(tags || shareSlot) && (\n <footer className=\"rz-blog-post__footer\">\n {tags && tags.length > 0 && (\n <div className=\"rz-blog-post__tags\">\n {tags.map((t, i) => {\n const tag = resolveTag(t);\n return tag.href ? (\n <a key={i} href={tag.href} className=\"rz-blog-post__tag rz-blog-post__tag--link\">\n {tag.label}\n </a>\n ) : (\n <span key={i} className=\"rz-blog-post__tag\">{tag.label}</span>\n );\n })}\n </div>\n )}\n {shareSlot && <div className=\"rz-blog-post__share\">{shareSlot}</div>}\n </footer>\n )}\n </article>\n );\n}\n"],"names":["jsxs","Columns","jsx","Rows","Text","cn"],"mappings":"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"}