@smicolon/fasla-ui 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (962) hide show
  1. package/README.md +24 -5
  2. package/dist/cli/index.js +2983 -648
  3. package/dist/index.cjs +50 -12
  4. package/dist/index.js +50 -12
  5. package/dist/motion/index.cjs +12 -0
  6. package/dist/motion/index.d.cts +7 -0
  7. package/dist/motion/index.d.ts +7 -0
  8. package/dist/motion/index.js +12 -0
  9. package/dist/registry/index.cjs +4 -4
  10. package/dist/registry/index.js +4 -4
  11. package/dist/tokens/index.cjs +34 -8
  12. package/dist/tokens/index.d.cts +23 -1
  13. package/dist/tokens/index.d.ts +23 -1
  14. package/dist/tokens/index.js +34 -8
  15. package/package.json +6 -1
  16. package/registry/blocks/about-approach-stack-cards/AboutApproachStackCards.tsx +305 -0
  17. package/registry/blocks/about-approach-stack-cards/index.ts +9 -0
  18. package/registry/blocks/about-bento/AboutBento.tsx +442 -0
  19. package/registry/blocks/about-bento/index.ts +9 -0
  20. package/registry/blocks/about-collage-hero/AboutCollageHero.tsx +285 -0
  21. package/registry/blocks/about-collage-hero/index.ts +8 -0
  22. package/registry/blocks/about-color-bento/AboutColorBento.tsx +235 -0
  23. package/registry/blocks/about-color-bento/index.ts +6 -0
  24. package/registry/blocks/about-culture-masonry/AboutCultureMasonry.tsx +305 -0
  25. package/registry/blocks/about-culture-masonry/index.ts +9 -0
  26. package/registry/blocks/about-headline-photos/AboutHeadlinePhotos.tsx +270 -0
  27. package/registry/blocks/about-headline-photos/index.ts +8 -0
  28. package/registry/blocks/about-impact-stats-band/AboutImpactStatsBand.test.tsx +45 -0
  29. package/registry/blocks/about-impact-stats-band/AboutImpactStatsBand.tsx +348 -0
  30. package/registry/blocks/about-impact-stats-band/index.ts +9 -0
  31. package/registry/blocks/about-letter-card/AboutLetterCard.tsx +403 -0
  32. package/registry/blocks/about-letter-card/index.ts +9 -0
  33. package/registry/blocks/about-mission-statement-hero/AboutMissionStatementHero.tsx +282 -0
  34. package/registry/blocks/about-mission-statement-hero/index.ts +8 -0
  35. package/registry/blocks/about-numbered-rows/AboutNumberedRows.tsx +289 -0
  36. package/registry/blocks/about-numbered-rows/index.ts +7 -0
  37. package/registry/blocks/about-split-panel/AboutSplitPanel.tsx +247 -0
  38. package/registry/blocks/about-split-panel/index.ts +8 -0
  39. package/registry/blocks/about-spotlight/AboutSpotlight.tsx +260 -0
  40. package/registry/blocks/about-spotlight/index.ts +7 -0
  41. package/registry/blocks/about-statement-band/AboutStatementBand.tsx +236 -0
  42. package/registry/blocks/about-statement-band/index.ts +7 -0
  43. package/registry/blocks/about-story-photos/AboutStoryPhotos.test.tsx +12 -0
  44. package/registry/blocks/about-story-photos/AboutStoryPhotos.tsx +252 -0
  45. package/registry/blocks/about-story-photos/index.ts +8 -0
  46. package/registry/blocks/about-story-snapshots/AboutStorySnapshots.tsx +239 -0
  47. package/registry/blocks/about-story-snapshots/index.ts +8 -0
  48. package/registry/blocks/about-type-stack/AboutTypeStack.tsx +205 -0
  49. package/registry/blocks/about-type-stack/index.ts +6 -0
  50. package/registry/blocks/about-values-connector-list/AboutValuesConnectorList.tsx +316 -0
  51. package/registry/blocks/about-values-connector-list/index.ts +7 -0
  52. package/registry/blocks/about-values-focus/AboutValuesFocus.tsx +303 -0
  53. package/registry/blocks/about-values-focus/index.ts +8 -0
  54. package/registry/blocks/about-values-spotlight/AboutValuesSpotlight.tsx +265 -0
  55. package/registry/blocks/about-values-spotlight/index.ts +8 -0
  56. package/registry/blocks/auth-centered-card-sign-in/AuthCenteredCardSignIn.tsx +373 -0
  57. package/registry/blocks/auth-centered-card-sign-in/index.ts +9 -0
  58. package/registry/blocks/auth-check-your-email/AuthCheckYourEmail.tsx +366 -0
  59. package/registry/blocks/auth-check-your-email/index.ts +7 -0
  60. package/registry/blocks/auth-forgot-password/AuthForgotPassword.tsx +265 -0
  61. package/registry/blocks/auth-forgot-password/index.ts +8 -0
  62. package/registry/blocks/auth-locked-session-re-authenticate/AuthLockedSessionReAuthenticate.tsx +305 -0
  63. package/registry/blocks/auth-locked-session-re-authenticate/index.ts +8 -0
  64. package/registry/blocks/auth-magic-link-request/AuthMagicLinkRequest.tsx +336 -0
  65. package/registry/blocks/auth-magic-link-request/index.ts +8 -0
  66. package/registry/blocks/auth-minimal-centered-sign-in/AuthMinimalCenteredSignIn.tsx +261 -0
  67. package/registry/blocks/auth-minimal-centered-sign-in/index.ts +8 -0
  68. package/registry/blocks/auth-multi-step-sign-up-wizard/AuthMultiStepSignUpWizard.tsx +460 -0
  69. package/registry/blocks/auth-multi-step-sign-up-wizard/index.ts +8 -0
  70. package/registry/blocks/auth-otp-verification/AuthOtpVerification.tsx +348 -0
  71. package/registry/blocks/auth-otp-verification/index.ts +7 -0
  72. package/registry/blocks/auth-passkey-sign-in/AuthPasskeySignIn.tsx +294 -0
  73. package/registry/blocks/auth-passkey-sign-in/index.ts +8 -0
  74. package/registry/blocks/auth-password-changed/AuthPasswordChanged.tsx +239 -0
  75. package/registry/blocks/auth-password-changed/index.ts +8 -0
  76. package/registry/blocks/auth-phone-number-sign-in/AuthPhoneNumberSignIn.tsx +402 -0
  77. package/registry/blocks/auth-phone-number-sign-in/index.ts +10 -0
  78. package/registry/blocks/auth-photo-background-sign-in/AuthPhotoBackgroundSignIn.tsx +398 -0
  79. package/registry/blocks/auth-photo-background-sign-in/index.ts +10 -0
  80. package/registry/blocks/auth-profile-setup-onboarding/AuthProfileSetupOnboarding.tsx +420 -0
  81. package/registry/blocks/auth-profile-setup-onboarding/index.ts +7 -0
  82. package/registry/blocks/auth-qr-device-login/AuthQrDeviceLogin.tsx +303 -0
  83. package/registry/blocks/auth-qr-device-login/index.ts +7 -0
  84. package/registry/blocks/auth-reset-password/AuthResetPassword.tsx +313 -0
  85. package/registry/blocks/auth-reset-password/index.ts +7 -0
  86. package/registry/blocks/auth-sign-in-error-state/AuthSignInErrorState.tsx +419 -0
  87. package/registry/blocks/auth-sign-in-error-state/index.ts +9 -0
  88. package/registry/blocks/auth-sign-up-benefits-column/AuthSignUpBenefitsColumn.tsx +481 -0
  89. package/registry/blocks/auth-sign-up-benefits-column/index.ts +10 -0
  90. package/registry/blocks/auth-sign-up-password-strength/AuthSignUpPasswordStrength.tsx +511 -0
  91. package/registry/blocks/auth-sign-up-password-strength/index.ts +8 -0
  92. package/registry/blocks/auth-social-first-sign-in/AuthSocialFirstSignIn.tsx +337 -0
  93. package/registry/blocks/auth-social-first-sign-in/index.ts +9 -0
  94. package/registry/blocks/auth-split-photo-sign-in/AuthSplitPhotoSignIn.tsx +472 -0
  95. package/registry/blocks/auth-split-photo-sign-in/index.ts +11 -0
  96. package/registry/blocks/auth-split-testimonial-sign-up/AuthSplitTestimonialSignUp.tsx +548 -0
  97. package/registry/blocks/auth-split-testimonial-sign-up/index.ts +11 -0
  98. package/registry/blocks/auth-tabbed-sign-in-sign-up/AuthTabbedSignInSignUp.tsx +566 -0
  99. package/registry/blocks/auth-tabbed-sign-in-sign-up/index.ts +11 -0
  100. package/registry/blocks/auth-team-invite-accept/AuthTeamInviteAccept.tsx +372 -0
  101. package/registry/blocks/auth-team-invite-accept/index.ts +9 -0
  102. package/registry/blocks/auth-two-factor-authenticator/AuthTwoFactorAuthenticator.tsx +333 -0
  103. package/registry/blocks/auth-two-factor-authenticator/index.ts +7 -0
  104. package/registry/blocks/auth-two-factor-method-chooser/AuthTwoFactorMethodChooser.tsx +290 -0
  105. package/registry/blocks/auth-two-factor-method-chooser/index.ts +8 -0
  106. package/registry/blocks/auth-waitlist-early-access/AuthWaitlistEarlyAccess.tsx +430 -0
  107. package/registry/blocks/auth-waitlist-early-access/index.ts +11 -0
  108. package/registry/blocks/blog-cards-alongside.test.tsx +176 -0
  109. package/registry/blocks/blog-cards-author-spotlight/BlogCardsAuthorSpotlight.tsx +342 -0
  110. package/registry/blocks/blog-cards-author-spotlight/index.ts +6 -0
  111. package/registry/blocks/blog-cards-bento-editorial-grid/BlogCardsBentoEditorialGrid.tsx +345 -0
  112. package/registry/blocks/blog-cards-bento-editorial-grid/index.ts +7 -0
  113. package/registry/blocks/blog-cards-browse.test.tsx +367 -0
  114. package/registry/blocks/blog-cards-classic-3-up-grid/BlogCardsClassic3UpGrid.tsx +287 -0
  115. package/registry/blocks/blog-cards-classic-3-up-grid/index.ts +7 -0
  116. package/registry/blocks/blog-cards-compact-4-up-thumb-grid/BlogCardsCompact4UpThumbGrid.tsx +265 -0
  117. package/registry/blocks/blog-cards-compact-4-up-thumb-grid/index.ts +7 -0
  118. package/registry/blocks/blog-cards-dark-editorial-feature/BlogCardsDarkEditorialFeature.tsx +287 -0
  119. package/registry/blocks/blog-cards-dark-editorial-feature/index.ts +6 -0
  120. package/registry/blocks/blog-cards-featured-two-up/BlogCardsFeaturedTwoUp.tsx +295 -0
  121. package/registry/blocks/blog-cards-featured-two-up/index.ts +7 -0
  122. package/registry/blocks/blog-cards-features.test.tsx +183 -0
  123. package/registry/blocks/blog-cards-filter-sidebar-results/BlogCardsFilterSidebarResults.tsx +582 -0
  124. package/registry/blocks/blog-cards-filter-sidebar-results/index.ts +6 -0
  125. package/registry/blocks/blog-cards-grids.test.tsx +110 -0
  126. package/registry/blocks/blog-cards-hairline-text-index/BlogCardsHairlineTextIndex.tsx +193 -0
  127. package/registry/blocks/blog-cards-hairline-text-index/index.ts +7 -0
  128. package/registry/blocks/blog-cards-journal-bento/BlogCardsJournalBento.tsx +409 -0
  129. package/registry/blocks/blog-cards-journal-bento/index.ts +8 -0
  130. package/registry/blocks/blog-cards-latest-popular-split/BlogCardsLatestPopularSplit.tsx +258 -0
  131. package/registry/blocks/blog-cards-latest-popular-split/index.ts +7 -0
  132. package/registry/blocks/blog-cards-lead-ranked-picks/BlogCardsLeadRankedPicks.tsx +276 -0
  133. package/registry/blocks/blog-cards-lead-ranked-picks/index.ts +6 -0
  134. package/registry/blocks/blog-cards-left-thumb-row-cards/BlogCardsLeftThumbRowCards.tsx +288 -0
  135. package/registry/blocks/blog-cards-left-thumb-row-cards/index.ts +7 -0
  136. package/registry/blocks/blog-cards-lists.test.tsx +93 -0
  137. package/registry/blocks/blog-cards-magazine-cover-story/BlogCardsMagazineCoverStory.tsx +326 -0
  138. package/registry/blocks/blog-cards-magazine-cover-story/index.ts +6 -0
  139. package/registry/blocks/blog-cards-newsletter-latest/BlogCardsNewsletterLatest.tsx +291 -0
  140. package/registry/blocks/blog-cards-newsletter-latest/index.ts +6 -0
  141. package/registry/blocks/blog-cards-numbered-reading-list/BlogCardsNumberedReadingList.tsx +275 -0
  142. package/registry/blocks/blog-cards-numbered-reading-list/index.ts +7 -0
  143. package/registry/blocks/blog-cards-overlay-photo-trio/BlogCardsOverlayPhotoTrio.tsx +279 -0
  144. package/registry/blocks/blog-cards-overlay-photo-trio/index.ts +7 -0
  145. package/registry/blocks/blog-cards-post-carousel-with-controls/BlogCardsPostCarouselWithControls.tsx +257 -0
  146. package/registry/blocks/blog-cards-post-carousel-with-controls/index.ts +6 -0
  147. package/registry/blocks/blog-cards-pull-quote-feature/BlogCardsPullQuoteFeature.tsx +245 -0
  148. package/registry/blocks/blog-cards-pull-quote-feature/index.ts +6 -0
  149. package/registry/blocks/blog-cards-related-posts-strip/BlogCardsRelatedPostsStrip.tsx +247 -0
  150. package/registry/blocks/blog-cards-related-posts-strip/index.ts +6 -0
  151. package/registry/blocks/blog-cards-search-chips-results/BlogCardsSearchChipsResults.tsx +473 -0
  152. package/registry/blocks/blog-cards-search-chips-results/index.ts +6 -0
  153. package/registry/blocks/blog-cards-split-feature/BlogCardsSplitFeature.tsx +214 -0
  154. package/registry/blocks/blog-cards-split-feature/index.ts +6 -0
  155. package/registry/blocks/careers/careers.test.tsx +414 -0
  156. package/registry/blocks/careers/careers.tsx +391 -0
  157. package/registry/blocks/careers/index.ts +27 -0
  158. package/registry/blocks/careers-about-card-role-list/CareersAboutCardRoleList.tsx +235 -0
  159. package/registry/blocks/careers-about-card-role-list/index.ts +8 -0
  160. package/registry/blocks/careers-featured-role-spotlight/CareersFeaturedRoleSpotlight.tsx +271 -0
  161. package/registry/blocks/careers-featured-role-spotlight/index.ts +8 -0
  162. package/registry/blocks/careers-no-open-roles-empty-state/CareersNoOpenRolesEmptyState.tsx +330 -0
  163. package/registry/blocks/careers-no-open-roles-empty-state/index.ts +8 -0
  164. package/registry/blocks/careers-open-roles-hairline-list/CareersOpenRolesHairlineList.tsx +320 -0
  165. package/registry/blocks/careers-open-roles-hairline-list/index.ts +6 -0
  166. package/registry/blocks/careers-open-vacancies-table/CareersOpenVacanciesTable.tsx +493 -0
  167. package/registry/blocks/careers-open-vacancies-table/index.ts +6 -0
  168. package/registry/blocks/careers-perks-benefits/CareersPerksBenefits.tsx +181 -0
  169. package/registry/blocks/careers-perks-benefits/index.ts +8 -0
  170. package/registry/blocks/careers-role-cards-grid/CareersRoleCardsGrid.tsx +405 -0
  171. package/registry/blocks/careers-role-cards-grid/index.ts +6 -0
  172. package/registry/blocks/careers-role-detail-page/CareersRoleDetailPage.tsx +541 -0
  173. package/registry/blocks/careers-role-detail-page/index.ts +10 -0
  174. package/registry/blocks/careers-role-detail-panel/CareersRoleDetailPanel.tsx +255 -0
  175. package/registry/blocks/careers-role-detail-panel/index.ts +6 -0
  176. package/registry/blocks/careers-roles-by-department/CareersRolesByDepartment.tsx +242 -0
  177. package/registry/blocks/careers-roles-by-department/index.ts +7 -0
  178. package/registry/blocks/careers-roles-list-accordion-expanded/CareersRolesListAccordionExpanded.tsx +558 -0
  179. package/registry/blocks/careers-roles-list-accordion-expanded/index.ts +9 -0
  180. package/registry/blocks/contact-us/contact-us.test.tsx +239 -0
  181. package/registry/blocks/contact-us/contact-us.tsx +989 -0
  182. package/registry/blocks/contact-us/index.ts +34 -0
  183. package/registry/blocks/contact-us-bento-grid/ContactUsBentoGrid.tsx +304 -0
  184. package/registry/blocks/contact-us-bento-grid/index.ts +5 -0
  185. package/registry/blocks/contact-us-bento-grid.test.tsx +102 -0
  186. package/registry/blocks/contact-us-book-a-call/ContactUsBookACall.tsx +403 -0
  187. package/registry/blocks/contact-us-book-a-call/index.ts +7 -0
  188. package/registry/blocks/contact-us-book-a-call.test.tsx +134 -0
  189. package/registry/blocks/contact-us-classic-centered/ContactUsClassicCentered.tsx +199 -0
  190. package/registry/blocks/contact-us-classic-centered/index.ts +6 -0
  191. package/registry/blocks/contact-us-dark-statement/ContactUsDarkStatement.tsx +218 -0
  192. package/registry/blocks/contact-us-dark-statement/index.ts +6 -0
  193. package/registry/blocks/contact-us-editorial-and-address-card/ContactUsEditorialAndAddressCard.tsx +212 -0
  194. package/registry/blocks/contact-us-editorial-and-address-card/index.ts +6 -0
  195. package/registry/blocks/contact-us-editorial-statement/ContactUsEditorialStatement.tsx +205 -0
  196. package/registry/blocks/contact-us-editorial-statement/index.ts +6 -0
  197. package/registry/blocks/contact-us-form-contact-methods/ContactUsFormContactMethods.tsx +272 -0
  198. package/registry/blocks/contact-us-form-contact-methods/index.ts +6 -0
  199. package/registry/blocks/contact-us-form-with-faq/ContactUsFormWithFaq.tsx +383 -0
  200. package/registry/blocks/contact-us-form-with-faq/index.ts +7 -0
  201. package/registry/blocks/contact-us-form-with-faq.test.tsx +161 -0
  202. package/registry/blocks/contact-us-forms.test.tsx +333 -0
  203. package/registry/blocks/contact-us-global-offices-table/ContactUsGlobalOfficesTable.tsx +301 -0
  204. package/registry/blocks/contact-us-global-offices-table/index.ts +5 -0
  205. package/registry/blocks/contact-us-global-offices-table.test.tsx +100 -0
  206. package/registry/blocks/contact-us-grand-headline-form/ContactUsGrandHeadlineForm.tsx +180 -0
  207. package/registry/blocks/contact-us-grand-headline-form/index.ts +6 -0
  208. package/registry/blocks/contact-us-hours-and-availability/ContactUsHoursAndAvailability.tsx +412 -0
  209. package/registry/blocks/contact-us-hours-and-availability/index.ts +5 -0
  210. package/registry/blocks/contact-us-hours-and-availability.test.tsx +123 -0
  211. package/registry/blocks/contact-us-hq-feature/ContactUsHqFeature.tsx +281 -0
  212. package/registry/blocks/contact-us-hq-feature/index.ts +5 -0
  213. package/registry/blocks/contact-us-hq-feature.test.tsx +102 -0
  214. package/registry/blocks/contact-us-map-split/ContactUsMapSplit.tsx +211 -0
  215. package/registry/blocks/contact-us-map-split/index.ts +5 -0
  216. package/registry/blocks/contact-us-map-split.test.tsx +70 -0
  217. package/registry/blocks/contact-us-named-owners/ContactUsNamedOwners.tsx +324 -0
  218. package/registry/blocks/contact-us-named-owners/index.ts +6 -0
  219. package/registry/blocks/contact-us-named-owners.test.tsx +116 -0
  220. package/registry/blocks/contact-us-newsletter-combo/ContactUsNewsletterCombo.tsx +363 -0
  221. package/registry/blocks/contact-us-newsletter-combo/index.ts +6 -0
  222. package/registry/blocks/contact-us-newsletter-combo.test.tsx +165 -0
  223. package/registry/blocks/contact-us-office-cards/ContactUsOfficeCards.tsx +235 -0
  224. package/registry/blocks/contact-us-office-cards/index.ts +5 -0
  225. package/registry/blocks/contact-us-office-cards.test.tsx +71 -0
  226. package/registry/blocks/contact-us-oversized-wordmark/ContactUsOversizedWordmark.tsx +222 -0
  227. package/registry/blocks/contact-us-oversized-wordmark/index.ts +6 -0
  228. package/registry/blocks/contact-us-photo-and-dark-panel/ContactUsPhotoAndDarkPanel.tsx +185 -0
  229. package/registry/blocks/contact-us-photo-and-dark-panel/index.ts +6 -0
  230. package/registry/blocks/contact-us-photo-forms.test.tsx +311 -0
  231. package/registry/blocks/contact-us-pitch-and-inquiry/ContactUsPitchAndInquiry.tsx +202 -0
  232. package/registry/blocks/contact-us-pitch-and-inquiry/index.ts +6 -0
  233. package/registry/blocks/contact-us-rtl.test.tsx +105 -0
  234. package/registry/blocks/contact-us-ruled-split-form/ContactUsRuledSplitForm.tsx +214 -0
  235. package/registry/blocks/contact-us-ruled-split-form/index.ts +6 -0
  236. package/registry/blocks/contact-us-social-rail/ContactUsSocialRail.tsx +270 -0
  237. package/registry/blocks/contact-us-social-rail/index.ts +7 -0
  238. package/registry/blocks/contact-us-social-rail.test.tsx +121 -0
  239. package/registry/blocks/contact-us-split-photo-dark/ContactUsSplitPhotoDark.tsx +185 -0
  240. package/registry/blocks/contact-us-split-photo-dark/index.ts +6 -0
  241. package/registry/blocks/contact-us-support-channels/ContactUsSupportChannels.tsx +267 -0
  242. package/registry/blocks/contact-us-support-channels/index.ts +5 -0
  243. package/registry/blocks/contact-us-support-channels.test.tsx +81 -0
  244. package/registry/blocks/data-table/DataTable.test.tsx +1 -34
  245. package/registry/blocks/data-table/DataTable.tsx +0 -139
  246. package/registry/blocks/data-table/index.ts +1 -8
  247. package/registry/blocks/error-state-access-denied-403/ErrorStateAccessDenied403.tsx +324 -0
  248. package/registry/blocks/error-state-access-denied-403/index.ts +10 -0
  249. package/registry/blocks/error-state-broken-trail-breadcrumb/ErrorStateBrokenTrailBreadcrumb.tsx +179 -0
  250. package/registry/blocks/error-state-broken-trail-breadcrumb/index.ts +8 -0
  251. package/registry/blocks/error-state-centered-minimal/ErrorStateCenteredMinimal.tsx +119 -0
  252. package/registry/blocks/error-state-centered-minimal/index.ts +7 -0
  253. package/registry/blocks/error-state-colour-field-scatter/ErrorStateColourFieldScatter.tsx +144 -0
  254. package/registry/blocks/error-state-colour-field-scatter/index.ts +7 -0
  255. package/registry/blocks/error-state-countdown-redirect/ErrorStateCountdownRedirect.tsx +272 -0
  256. package/registry/blocks/error-state-countdown-redirect/index.ts +7 -0
  257. package/registry/blocks/error-state-dark-spotlight/ErrorStateDarkSpotlight.tsx +156 -0
  258. package/registry/blocks/error-state-dark-spotlight/index.ts +7 -0
  259. package/registry/blocks/error-state-display-numeral-split/ErrorStateDisplayNumeralSplit.tsx +156 -0
  260. package/registry/blocks/error-state-display-numeral-split/index.ts +8 -0
  261. package/registry/blocks/error-state-editorial-photo-split/ErrorStateEditorialPhotoSplit.tsx +156 -0
  262. package/registry/blocks/error-state-editorial-photo-split/index.ts +8 -0
  263. package/registry/blocks/error-state-empty-search-results/ErrorStateEmptySearchResults.tsx +243 -0
  264. package/registry/blocks/error-state-empty-search-results/index.ts +6 -0
  265. package/registry/blocks/error-state-error-card-panel/ErrorStateErrorCardPanel.tsx +213 -0
  266. package/registry/blocks/error-state-error-card-panel/index.ts +7 -0
  267. package/registry/blocks/error-state-full-bleed-photo/ErrorStateFullBleedPhoto.tsx +130 -0
  268. package/registry/blocks/error-state-full-bleed-photo/index.ts +8 -0
  269. package/registry/blocks/error-state-ghost-watermark/ErrorStateGhostWatermark.tsx +115 -0
  270. package/registry/blocks/error-state-ghost-watermark/index.ts +7 -0
  271. package/registry/blocks/error-state-helpful-links-list/ErrorStateHelpfulLinksList.tsx +185 -0
  272. package/registry/blocks/error-state-helpful-links-list/index.ts +8 -0
  273. package/registry/blocks/error-state-illustrated-empty-state/ErrorStateIllustratedEmptyState.tsx +201 -0
  274. package/registry/blocks/error-state-illustrated-empty-state/index.ts +7 -0
  275. package/registry/blocks/error-state-layered-badge-centered/ErrorStateLayeredBadgeCentered.tsx +138 -0
  276. package/registry/blocks/error-state-layered-badge-centered/index.ts +7 -0
  277. package/registry/blocks/error-state-light-editorial/ErrorStateLightEditorial.tsx +126 -0
  278. package/registry/blocks/error-state-light-editorial/index.ts +7 -0
  279. package/registry/blocks/error-state-maintenance-mode/ErrorStateMaintenanceMode.tsx +255 -0
  280. package/registry/blocks/error-state-maintenance-mode/index.ts +6 -0
  281. package/registry/blocks/error-state-marquee-404-band/ErrorStateMarquee404Band.tsx +316 -0
  282. package/registry/blocks/error-state-marquee-404-band/index.ts +7 -0
  283. package/registry/blocks/error-state-offline-state/ErrorStateOfflineState.tsx +188 -0
  284. package/registry/blocks/error-state-offline-state/index.ts +7 -0
  285. package/registry/blocks/error-state-photo-collage-scatter/ErrorStatePhotoCollageScatter.tsx +224 -0
  286. package/registry/blocks/error-state-photo-collage-scatter/index.ts +8 -0
  287. package/registry/blocks/error-state-popular-pages-grid/ErrorStatePopularPagesGrid.tsx +195 -0
  288. package/registry/blocks/error-state-popular-pages-grid/index.ts +9 -0
  289. package/registry/blocks/error-state-recovery-bento/ErrorStateRecoveryBento.tsx +274 -0
  290. package/registry/blocks/error-state-recovery-bento/index.ts +7 -0
  291. package/registry/blocks/error-state-search-recovery/ErrorStateSearchRecovery.tsx +173 -0
  292. package/registry/blocks/error-state-search-recovery/index.ts +7 -0
  293. package/registry/blocks/error-state-server-error-500/ErrorStateServerError500.tsx +277 -0
  294. package/registry/blocks/error-state-server-error-500/index.ts +9 -0
  295. package/registry/blocks/error-state-sitemap-columns/ErrorStateSitemapColumns.tsx +192 -0
  296. package/registry/blocks/error-state-sitemap-columns/index.ts +9 -0
  297. package/registry/blocks/error-state-split-colour-panel/ErrorStateSplitColourPanel.tsx +156 -0
  298. package/registry/blocks/error-state-split-colour-panel/index.ts +7 -0
  299. package/registry/blocks/error-state-support-escalation-band/ErrorStateSupportEscalationBand.tsx +186 -0
  300. package/registry/blocks/error-state-support-escalation-band/index.ts +8 -0
  301. package/registry/blocks/error-state-terminal-console/ErrorStateTerminalConsole.tsx +208 -0
  302. package/registry/blocks/error-state-terminal-console/index.ts +8 -0
  303. package/registry/blocks/faq-accent-active-card/FaqAccentActiveCard.tsx +186 -0
  304. package/registry/blocks/faq-accent-active-card/index.ts +1 -0
  305. package/registry/blocks/faq-category-chip-grid/FaqCategoryChipGrid.tsx +425 -0
  306. package/registry/blocks/faq-category-chip-grid/index.ts +8 -0
  307. package/registry/blocks/faq-category-columns/FaqCategoryColumns.tsx +248 -0
  308. package/registry/blocks/faq-category-columns/index.ts +8 -0
  309. package/registry/blocks/faq-chat-thread/FaqChatThread.tsx +273 -0
  310. package/registry/blocks/faq-chat-thread/index.ts +7 -0
  311. package/registry/blocks/faq-classic-centered/FaqClassicCentered.tsx +190 -0
  312. package/registry/blocks/faq-classic-centered/index.ts +7 -0
  313. package/registry/blocks/faq-contact-cta-card/FaqContactCtaCard.tsx +229 -0
  314. package/registry/blocks/faq-contact-cta-card/index.ts +9 -0
  315. package/registry/blocks/faq-dark-panel/FaqDarkPanel.tsx +186 -0
  316. package/registry/blocks/faq-dark-panel/index.ts +1 -0
  317. package/registry/blocks/faq-featured-question/FaqFeaturedQuestion.tsx +221 -0
  318. package/registry/blocks/faq-featured-question/index.ts +1 -0
  319. package/registry/blocks/faq-grouped-sections/FaqGroupedSections.tsx +266 -0
  320. package/registry/blocks/faq-grouped-sections/index.ts +8 -0
  321. package/registry/blocks/faq-help-hero-popular/FaqHelpHeroPopular.tsx +212 -0
  322. package/registry/blocks/faq-help-hero-popular/index.ts +7 -0
  323. package/registry/blocks/faq-masonry-cards/FaqMasonryCards.tsx +268 -0
  324. package/registry/blocks/faq-masonry-cards/index.ts +7 -0
  325. package/registry/blocks/faq-media-split/FaqMediaSplit.tsx +197 -0
  326. package/registry/blocks/faq-media-split/index.ts +8 -0
  327. package/registry/blocks/faq-mono-index/FaqMonoIndex.tsx +247 -0
  328. package/registry/blocks/faq-mono-index/index.ts +1 -0
  329. package/registry/blocks/faq-newsletter-close/FaqNewsletterClose.tsx +314 -0
  330. package/registry/blocks/faq-newsletter-close/index.ts +8 -0
  331. package/registry/blocks/faq-numbered-editorial/FaqNumberedEditorial.tsx +190 -0
  332. package/registry/blocks/faq-numbered-editorial/index.ts +1 -0
  333. package/registry/blocks/faq-search-categories/FaqSearchCategories.tsx +312 -0
  334. package/registry/blocks/faq-search-categories/index.ts +8 -0
  335. package/registry/blocks/faq-sidebar-nav/FaqSidebarNav.tsx +390 -0
  336. package/registry/blocks/faq-sidebar-nav/index.ts +8 -0
  337. package/registry/blocks/faq-soft-filled-rows/FaqSoftFilledRows.tsx +209 -0
  338. package/registry/blocks/faq-soft-filled-rows/index.ts +1 -0
  339. package/registry/blocks/faq-split-sticky/FaqSplitSticky.tsx +205 -0
  340. package/registry/blocks/faq-split-sticky/index.ts +7 -0
  341. package/registry/blocks/faq-support-channels/FaqSupportChannels.tsx +266 -0
  342. package/registry/blocks/faq-support-channels/index.ts +8 -0
  343. package/registry/blocks/faq-support-stats/FaqSupportStats.tsx +242 -0
  344. package/registry/blocks/faq-support-stats/index.ts +8 -0
  345. package/registry/blocks/faq-table-compact/FaqTableCompact.tsx +220 -0
  346. package/registry/blocks/faq-table-compact/index.ts +1 -0
  347. package/registry/blocks/faq-tabs-by-topic/FaqTabsByTopic.tsx +347 -0
  348. package/registry/blocks/faq-tabs-by-topic/index.ts +8 -0
  349. package/registry/blocks/faq-topic-tiles/FaqTopicTiles.tsx +254 -0
  350. package/registry/blocks/faq-topic-tiles/index.ts +7 -0
  351. package/registry/blocks/faq-two-column-grid/FaqTwoColumnGrid.tsx +256 -0
  352. package/registry/blocks/faq-two-column-grid/index.ts +7 -0
  353. package/registry/blocks/faq-uppercase-dense/FaqUppercaseDense.tsx +213 -0
  354. package/registry/blocks/faq-uppercase-dense/index.ts +1 -0
  355. package/registry/blocks/features/features.tsx +164 -0
  356. package/registry/blocks/features/index.ts +12 -0
  357. package/registry/blocks/features-accordion-photo/FeaturesAccordionPhoto.tsx +149 -0
  358. package/registry/blocks/features-accordion-photo/index.ts +7 -0
  359. package/registry/blocks/features-colour-block-cards/FeaturesColourBlockCards.tsx +118 -0
  360. package/registry/blocks/features-colour-block-cards/index.ts +8 -0
  361. package/registry/blocks/features-compact-icon-index/FeaturesCompactIconIndex.tsx +136 -0
  362. package/registry/blocks/features-compact-icon-index/index.ts +7 -0
  363. package/registry/blocks/features-compare-panels-chat-answer/FeaturesComparePanelsChatAnswer.tsx +346 -0
  364. package/registry/blocks/features-compare-panels-chat-answer/index.ts +8 -0
  365. package/registry/blocks/features-editorial-photo-split/FeaturesEditorialPhotoSplit.tsx +118 -0
  366. package/registry/blocks/features-editorial-photo-split/index.ts +7 -0
  367. package/registry/blocks/features-expanding-step-cards/FeaturesExpandingStepCards.tsx +300 -0
  368. package/registry/blocks/features-expanding-step-cards/index.ts +7 -0
  369. package/registry/blocks/features-feature-checklist-columns/FeaturesFeatureChecklistColumns.tsx +158 -0
  370. package/registry/blocks/features-feature-checklist-columns/index.ts +7 -0
  371. package/registry/blocks/features-feature-list-thumbnails/FeaturesFeatureListThumbnails.tsx +137 -0
  372. package/registry/blocks/features-feature-list-thumbnails/index.ts +7 -0
  373. package/registry/blocks/features-full-bleed-photo-banner/FeaturesFullBleedPhotoBanner.tsx +116 -0
  374. package/registry/blocks/features-full-bleed-photo-banner/index.ts +7 -0
  375. package/registry/blocks/features-icon-card-grid/FeaturesIconCardGrid.tsx +120 -0
  376. package/registry/blocks/features-icon-card-grid/index.ts +7 -0
  377. package/registry/blocks/features-icon-titled-preview-rail/FeaturesIconTitledPreviewRail.tsx +321 -0
  378. package/registry/blocks/features-icon-titled-preview-rail/index.ts +7 -0
  379. package/registry/blocks/features-icons-numbers.test.tsx +107 -0
  380. package/registry/blocks/features-interactive.test.tsx +175 -0
  381. package/registry/blocks/features-media-rail/FeaturesMediaRail.tsx +119 -0
  382. package/registry/blocks/features-media-rail/index.ts +7 -0
  383. package/registry/blocks/features-notched-photo-columns/FeaturesNotchedPhotoColumns.tsx +209 -0
  384. package/registry/blocks/features-notched-photo-columns/index.ts +7 -0
  385. package/registry/blocks/features-numbered-feature-rows/FeaturesNumberedFeatureRows.tsx +107 -0
  386. package/registry/blocks/features-numbered-feature-rows/index.ts +7 -0
  387. package/registry/blocks/features-numbered-steps-floating-cards/FeaturesNumberedStepsFloatingCards.tsx +324 -0
  388. package/registry/blocks/features-numbered-steps-floating-cards/index.ts +8 -0
  389. package/registry/blocks/features-perforated-photo-strip/FeaturesPerforatedPhotoStrip.tsx +218 -0
  390. package/registry/blocks/features-perforated-photo-strip/index.ts +7 -0
  391. package/registry/blocks/features-photo-bento/FeaturesPhotoBento.tsx +160 -0
  392. package/registry/blocks/features-photo-bento/index.ts +8 -0
  393. package/registry/blocks/features-photo-carousel/FeaturesPhotoCarousel.tsx +249 -0
  394. package/registry/blocks/features-photo-carousel/index.ts +7 -0
  395. package/registry/blocks/features-photo-collage/FeaturesPhotoCollage.tsx +143 -0
  396. package/registry/blocks/features-photo-collage/index.ts +7 -0
  397. package/registry/blocks/features-photo-feature-chips/FeaturesPhotoFeatureChips.tsx +125 -0
  398. package/registry/blocks/features-photo-feature-chips/index.ts +7 -0
  399. package/registry/blocks/features-photo-led.test.tsx +177 -0
  400. package/registry/blocks/features-photo-tabs-panel/FeaturesPhotoTabsPanel.tsx +197 -0
  401. package/registry/blocks/features-photo-tabs-panel/index.ts +7 -0
  402. package/registry/blocks/features-portrait-photo-cards-link-row/FeaturesPortraitPhotoCardsLinkRow.tsx +202 -0
  403. package/registry/blocks/features-portrait-photo-cards-link-row/index.ts +7 -0
  404. package/registry/blocks/features-product-in-use.test.tsx +188 -0
  405. package/registry/blocks/features-showcase-card-pair/FeaturesShowcaseCardPair.tsx +161 -0
  406. package/registry/blocks/features-showcase-card-pair/index.ts +7 -0
  407. package/registry/blocks/features-solid-colour-cards/FeaturesSolidColourCards.tsx +264 -0
  408. package/registry/blocks/features-solid-colour-cards/index.ts +7 -0
  409. package/registry/blocks/features-split-photo-icon-list/FeaturesSplitPhotoIconList.tsx +117 -0
  410. package/registry/blocks/features-split-photo-icon-list/index.ts +7 -0
  411. package/registry/blocks/features-stat-feature-band/FeaturesStatFeatureBand.tsx +114 -0
  412. package/registry/blocks/features-stat-feature-band/index.ts +7 -0
  413. package/registry/blocks/features-tinted-product-bento/FeaturesTintedProductBento.tsx +252 -0
  414. package/registry/blocks/features-tinted-product-bento/index.ts +7 -0
  415. package/registry/blocks/footer/footer.test.tsx +253 -0
  416. package/registry/blocks/footer/footer.tsx +554 -0
  417. package/registry/blocks/footer/index.ts +31 -0
  418. package/registry/blocks/footer-accordion-sitemap/FooterAccordionSitemap.tsx +260 -0
  419. package/registry/blocks/footer-accordion-sitemap/index.ts +7 -0
  420. package/registry/blocks/footer-bars.test.tsx +121 -0
  421. package/registry/blocks/footer-bento-tile/FooterBentoTile.tsx +331 -0
  422. package/registry/blocks/footer-bento-tile/index.ts +6 -0
  423. package/registry/blocks/footer-big-question-cta/FooterBigQuestionCta.tsx +250 -0
  424. package/registry/blocks/footer-big-question-cta/index.ts +6 -0
  425. package/registry/blocks/footer-big-type-link-stack/FooterBigTypeLinkStack.tsx +275 -0
  426. package/registry/blocks/footer-big-type-link-stack/index.ts +6 -0
  427. package/registry/blocks/footer-brand-panel-split/FooterBrandPanelSplit.tsx +163 -0
  428. package/registry/blocks/footer-brand-panel-split/index.ts +6 -0
  429. package/registry/blocks/footer-brand.test.tsx +608 -0
  430. package/registry/blocks/footer-careers-culture/FooterCareersCulture.tsx +297 -0
  431. package/registry/blocks/footer-careers-culture/index.ts +7 -0
  432. package/registry/blocks/footer-centered-brand-minimal/FooterCenteredBrandMinimal.tsx +121 -0
  433. package/registry/blocks/footer-centered-brand-minimal/index.ts +6 -0
  434. package/registry/blocks/footer-commerce.test.tsx +208 -0
  435. package/registry/blocks/footer-community-events/FooterCommunityEvents.tsx +263 -0
  436. package/registry/blocks/footer-community-events/index.ts +8 -0
  437. package/registry/blocks/footer-community.test.tsx +309 -0
  438. package/registry/blocks/footer-contact-first/FooterContactFirst.tsx +242 -0
  439. package/registry/blocks/footer-contact-first/index.ts +7 -0
  440. package/registry/blocks/footer-contact.test.tsx +285 -0
  441. package/registry/blocks/footer-controls.test.tsx +78 -0
  442. package/registry/blocks/footer-cta-band-columns/FooterCtaBandColumns.tsx +225 -0
  443. package/registry/blocks/footer-cta-band-columns/index.ts +6 -0
  444. package/registry/blocks/footer-cta.test.tsx +445 -0
  445. package/registry/blocks/footer-dashboard-slim-bar/FooterDashboardSlimBar.tsx +148 -0
  446. package/registry/blocks/footer-dashboard-slim-bar/index.ts +6 -0
  447. package/registry/blocks/footer-docs-page/FooterDocsPage.tsx +261 -0
  448. package/registry/blocks/footer-docs-page/index.ts +9 -0
  449. package/registry/blocks/footer-ecommerce-mega/FooterEcommerceMega.tsx +289 -0
  450. package/registry/blocks/footer-ecommerce-mega/index.ts +6 -0
  451. package/registry/blocks/footer-floating-demo-card/FooterFloatingDemoCard.tsx +261 -0
  452. package/registry/blocks/footer-floating-demo-card/index.ts +6 -0
  453. package/registry/blocks/footer-four-column-directory/FooterFourColumnDirectory.tsx +104 -0
  454. package/registry/blocks/footer-four-column-directory/index.ts +6 -0
  455. package/registry/blocks/footer-giant-wordmark/FooterGiantWordmark.tsx +252 -0
  456. package/registry/blocks/footer-giant-wordmark/index.ts +6 -0
  457. package/registry/blocks/footer-image-backed-brand/FooterImageBackedBrand.tsx +251 -0
  458. package/registry/blocks/footer-image-backed-brand/index.ts +6 -0
  459. package/registry/blocks/footer-index-numbered-columns/FooterIndexNumberedColumns.tsx +236 -0
  460. package/registry/blocks/footer-index-numbered-columns/index.ts +7 -0
  461. package/registry/blocks/footer-inline-preferences/FooterInlinePreferences.tsx +164 -0
  462. package/registry/blocks/footer-inline-preferences/index.ts +7 -0
  463. package/registry/blocks/footer-legal-first-slim/FooterLegalFirstSlim.tsx +174 -0
  464. package/registry/blocks/footer-legal-first-slim/index.ts +6 -0
  465. package/registry/blocks/footer-legal.test.tsx +180 -0
  466. package/registry/blocks/footer-local-business/FooterLocalBusiness.tsx +258 -0
  467. package/registry/blocks/footer-local-business/index.ts +7 -0
  468. package/registry/blocks/footer-marquee-strip/FooterMarqueeStrip.tsx +244 -0
  469. package/registry/blocks/footer-marquee-strip/index.ts +6 -0
  470. package/registry/blocks/footer-multi-region/FooterMultiRegion.tsx +310 -0
  471. package/registry/blocks/footer-multi-region/index.ts +7 -0
  472. package/registry/blocks/footer-newsletter-split/FooterNewsletterSplit.tsx +255 -0
  473. package/registry/blocks/footer-newsletter-split/index.ts +6 -0
  474. package/registry/blocks/footer-product-family-switcher/FooterProductFamilySwitcher.tsx +241 -0
  475. package/registry/blocks/footer-product-family-switcher/index.ts +7 -0
  476. package/registry/blocks/footer-service-promise-band/FooterServicePromiseBand.tsx +237 -0
  477. package/registry/blocks/footer-service-promise-band/index.ts +7 -0
  478. package/registry/blocks/footer-single-line-bar/FooterSingleLineBar.tsx +107 -0
  479. package/registry/blocks/footer-single-line-bar/index.ts +6 -0
  480. package/registry/blocks/footer-sitemap.test.tsx +390 -0
  481. package/registry/blocks/footer-split-hairline-micro/FooterSplitHairlineMicro.tsx +100 -0
  482. package/registry/blocks/footer-split-hairline-micro/index.ts +6 -0
  483. package/registry/blocks/footer-support-contact/FooterSupportContact.tsx +204 -0
  484. package/registry/blocks/footer-support-contact/index.ts +7 -0
  485. package/registry/blocks/footer-trust-compliance/FooterTrustCompliance.tsx +234 -0
  486. package/registry/blocks/footer-trust-compliance/index.ts +7 -0
  487. package/registry/blocks/footer-two-row-compact/FooterTwoRowCompact.tsx +124 -0
  488. package/registry/blocks/footer-two-row-compact/index.ts +6 -0
  489. package/registry/blocks/footer-two-tier-doormat/FooterTwoTierDoormat.tsx +232 -0
  490. package/registry/blocks/footer-two-tier-doormat/index.ts +8 -0
  491. package/registry/blocks/footer-utility.test.tsx +406 -0
  492. package/registry/blocks/footer-wide-sitemap-mega/FooterWideSitemapMega.tsx +227 -0
  493. package/registry/blocks/footer-wide-sitemap-mega/index.ts +6 -0
  494. package/registry/blocks/gallery-album-cards/GalleryAlbumCards.tsx +243 -0
  495. package/registry/blocks/gallery-album-cards/index.ts +8 -0
  496. package/registry/blocks/gallery-before-after-compare/GalleryBeforeAfterCompare.tsx +269 -0
  497. package/registry/blocks/gallery-before-after-compare/index.ts +7 -0
  498. package/registry/blocks/gallery-contact-sheet-wall/GalleryContactSheetWall.tsx +299 -0
  499. package/registry/blocks/gallery-contact-sheet-wall/index.ts +9 -0
  500. package/registry/blocks/gallery-culture-photo-grid/GalleryCulturePhotoGrid.tsx +203 -0
  501. package/registry/blocks/gallery-culture-photo-grid/index.ts +8 -0
  502. package/registry/blocks/gallery-dark-cinema-wall/GalleryDarkCinemaWall.tsx +180 -0
  503. package/registry/blocks/gallery-dark-cinema-wall/index.ts +7 -0
  504. package/registry/blocks/gallery-editorial-split/GalleryEditorialSplit.tsx +188 -0
  505. package/registry/blocks/gallery-editorial-split/index.ts +8 -0
  506. package/registry/blocks/gallery-featured-thumb-rail/GalleryFeaturedThumbRail.tsx +397 -0
  507. package/registry/blocks/gallery-featured-thumb-rail/index.ts +8 -0
  508. package/registry/blocks/gallery-filmstrip-carousel/GalleryFilmstripCarousel.tsx +384 -0
  509. package/registry/blocks/gallery-filmstrip-carousel/index.ts +8 -0
  510. package/registry/blocks/gallery-filter-tabs-grid/GalleryFilterTabsGrid.tsx +403 -0
  511. package/registry/blocks/gallery-filter-tabs-grid/index.ts +9 -0
  512. package/registry/blocks/gallery-full-bleed-slider/GalleryFullBleedSlider.tsx +309 -0
  513. package/registry/blocks/gallery-full-bleed-slider/index.ts +8 -0
  514. package/registry/blocks/gallery-horizontal-scroll-rail/GalleryHorizontalScrollRail.tsx +300 -0
  515. package/registry/blocks/gallery-horizontal-scroll-rail/index.ts +8 -0
  516. package/registry/blocks/gallery-hover-caption-cards/GalleryHoverCaptionCards.tsx +244 -0
  517. package/registry/blocks/gallery-hover-caption-cards/index.ts +8 -0
  518. package/registry/blocks/gallery-hover-index-list/GalleryHoverIndexList.tsx +253 -0
  519. package/registry/blocks/gallery-hover-index-list/index.ts +9 -0
  520. package/registry/blocks/gallery-lightbox-viewer/GalleryLightboxViewer.tsx +329 -0
  521. package/registry/blocks/gallery-lightbox-viewer/index.ts +7 -0
  522. package/registry/blocks/gallery-masonry-gallery/GalleryMasonryGallery.tsx +251 -0
  523. package/registry/blocks/gallery-masonry-gallery/index.ts +7 -0
  524. package/registry/blocks/gallery-mosaic-statement-tile/GalleryMosaicStatementTile.tsx +159 -0
  525. package/registry/blocks/gallery-mosaic-statement-tile/index.ts +8 -0
  526. package/registry/blocks/gallery-photo-bento/GalleryPhotoBento.tsx +166 -0
  527. package/registry/blocks/gallery-photo-bento/index.ts +8 -0
  528. package/registry/blocks/gallery-photo-spotlight/GalleryPhotoSpotlight.tsx +305 -0
  529. package/registry/blocks/gallery-photo-spotlight/index.ts +9 -0
  530. package/registry/blocks/gallery-scattered-collage/GalleryScatteredCollage.tsx +286 -0
  531. package/registry/blocks/gallery-scattered-collage/index.ts +9 -0
  532. package/registry/blocks/gallery-social-feed-strip/GallerySocialFeedStrip.tsx +288 -0
  533. package/registry/blocks/gallery-social-feed-strip/index.ts +8 -0
  534. package/registry/blocks/gallery-timeline-gallery/GalleryTimelineGallery.tsx +243 -0
  535. package/registry/blocks/gallery-timeline-gallery/index.ts +8 -0
  536. package/registry/blocks/gallery-video-gallery/GalleryVideoGallery.tsx +362 -0
  537. package/registry/blocks/gallery-video-gallery/index.ts +8 -0
  538. package/registry/blocks/hero-annotated-object/HeroAnnotatedObject.tsx +310 -0
  539. package/registry/blocks/hero-annotated-object/index.ts +10 -0
  540. package/registry/blocks/hero-arc-gallery/HeroArcGallery.tsx +244 -0
  541. package/registry/blocks/hero-arc-gallery/index.ts +9 -0
  542. package/registry/blocks/hero-bento-split/HeroBentoSplit.tsx +266 -0
  543. package/registry/blocks/hero-bento-split/index.ts +9 -0
  544. package/registry/blocks/hero-brand-color-block/HeroBrandColorBlock.tsx +259 -0
  545. package/registry/blocks/hero-brand-color-block/index.ts +8 -0
  546. package/registry/blocks/hero-colour-stage/HeroColourStage.tsx +292 -0
  547. package/registry/blocks/hero-colour-stage/index.ts +8 -0
  548. package/registry/blocks/hero-component-pattern/HeroComponentPattern.tsx +248 -0
  549. package/registry/blocks/hero-component-pattern/index.ts +9 -0
  550. package/registry/blocks/hero-curved-media-rail/HeroCurvedMediaRail.tsx +272 -0
  551. package/registry/blocks/hero-curved-media-rail/index.ts +8 -0
  552. package/registry/blocks/hero-duo-card/HeroDuoCard.tsx +210 -0
  553. package/registry/blocks/hero-duo-card/index.ts +8 -0
  554. package/registry/blocks/hero-editorial-arch/HeroEditorialArch.tsx +226 -0
  555. package/registry/blocks/hero-editorial-arch/index.ts +10 -0
  556. package/registry/blocks/hero-editorial-triptych/HeroEditorialTriptych.tsx +252 -0
  557. package/registry/blocks/hero-editorial-triptych/index.ts +9 -0
  558. package/registry/blocks/hero-floating-integrations/HeroFloatingIntegrations.tsx +454 -0
  559. package/registry/blocks/hero-floating-integrations/index.ts +11 -0
  560. package/registry/blocks/hero-framed-full-bleed/HeroFramedFullBleed.tsx +226 -0
  561. package/registry/blocks/hero-framed-full-bleed/index.ts +9 -0
  562. package/registry/blocks/hero-framed-studio-card/HeroFramedStudioCard.tsx +264 -0
  563. package/registry/blocks/hero-framed-studio-card/index.ts +8 -0
  564. package/registry/blocks/hero-illustration-split/HeroIllustrationSplit.tsx +200 -0
  565. package/registry/blocks/hero-illustration-split/index.ts +8 -0
  566. package/registry/blocks/hero-inline-image-headline/HeroInlineImageHeadline.tsx +305 -0
  567. package/registry/blocks/hero-inline-image-headline/index.ts +8 -0
  568. package/registry/blocks/hero-masked-type-reveal/HeroMaskedTypeReveal.tsx +323 -0
  569. package/registry/blocks/hero-masked-type-reveal/index.ts +9 -0
  570. package/registry/blocks/hero-motion.test.tsx +185 -0
  571. package/registry/blocks/hero-orbit-track/HeroOrbitTrack.tsx +238 -0
  572. package/registry/blocks/hero-orbit-track/index.ts +8 -0
  573. package/registry/blocks/hero-photo-constellation/HeroPhotoConstellation.tsx +228 -0
  574. package/registry/blocks/hero-photo-constellation/index.ts +8 -0
  575. package/registry/blocks/hero-scramble-decode/HeroScrambleDecode.tsx +381 -0
  576. package/registry/blocks/hero-scramble-decode/index.ts +7 -0
  577. package/registry/blocks/hero-shape-grid/HeroShapeGrid.tsx +279 -0
  578. package/registry/blocks/hero-shape-grid/index.ts +8 -0
  579. package/registry/blocks/hero-split-band-headline/HeroSplitBandHeadline.tsx +242 -0
  580. package/registry/blocks/hero-split-band-headline/index.ts +8 -0
  581. package/registry/blocks/hero-split-flap-counters/HeroSplitFlapCounters.tsx +323 -0
  582. package/registry/blocks/hero-split-flap-counters/index.ts +8 -0
  583. package/registry/blocks/hero-studio-mosaic/HeroStudioMosaic.tsx +332 -0
  584. package/registry/blocks/hero-studio-mosaic/index.ts +9 -0
  585. package/registry/blocks/hero-textured-dark/HeroTexturedDark.tsx +378 -0
  586. package/registry/blocks/hero-textured-dark/index.ts +10 -0
  587. package/registry/blocks/hero-twin-panels/HeroTwinPanels.tsx +231 -0
  588. package/registry/blocks/hero-twin-panels/index.ts +9 -0
  589. package/registry/blocks/hero-velocity-marquee/HeroVelocityMarquee.tsx +392 -0
  590. package/registry/blocks/hero-velocity-marquee/index.ts +8 -0
  591. package/registry/blocks/hero-video-in-type/HeroVideoInType.tsx +374 -0
  592. package/registry/blocks/hero-video-in-type/index.ts +9 -0
  593. package/registry/blocks/hero-video-spotlight/HeroVideoSpotlight.tsx +292 -0
  594. package/registry/blocks/hero-video-spotlight/index.ts +9 -0
  595. package/registry/blocks/hero-wave-band/HeroWaveBand.tsx +309 -0
  596. package/registry/blocks/hero-wave-band/index.ts +8 -0
  597. package/registry/blocks/how-it-works/how-it-works.tsx +330 -0
  598. package/registry/blocks/how-it-works/index.ts +28 -0
  599. package/registry/blocks/how-it-works-accordion-steps/HowItWorksAccordionSteps.tsx +213 -0
  600. package/registry/blocks/how-it-works-accordion-steps/index.ts +7 -0
  601. package/registry/blocks/how-it-works-center-spine-timeline/HowItWorksCenterSpineTimeline.tsx +200 -0
  602. package/registry/blocks/how-it-works-center-spine-timeline/index.ts +7 -0
  603. package/registry/blocks/how-it-works-column-panels/HowItWorksColumnPanels.tsx +299 -0
  604. package/registry/blocks/how-it-works-column-panels/index.ts +6 -0
  605. package/registry/blocks/how-it-works-contained-timeline/HowItWorksContainedTimeline.tsx +223 -0
  606. package/registry/blocks/how-it-works-contained-timeline/index.ts +8 -0
  607. package/registry/blocks/how-it-works-diagonal-photo-collage/HowItWorksDiagonalPhotoCollage.tsx +170 -0
  608. package/registry/blocks/how-it-works-diagonal-photo-collage/index.ts +7 -0
  609. package/registry/blocks/how-it-works-fanned-dissolve-cards/HowItWorksFannedDissolveCards.tsx +258 -0
  610. package/registry/blocks/how-it-works-fanned-dissolve-cards/index.ts +8 -0
  611. package/registry/blocks/how-it-works-full-bleed-step-panel/HowItWorksFullBleedStepPanel.tsx +319 -0
  612. package/registry/blocks/how-it-works-full-bleed-step-panel/index.ts +7 -0
  613. package/registry/blocks/how-it-works-grids.test.tsx +292 -0
  614. package/registry/blocks/how-it-works-interactive.test.tsx +262 -0
  615. package/registry/blocks/how-it-works-numbered-editorial-rows/HowItWorksNumberedEditorialRows.tsx +177 -0
  616. package/registry/blocks/how-it-works-numbered-editorial-rows/index.ts +7 -0
  617. package/registry/blocks/how-it-works-numbered-instruction-panels/HowItWorksNumberedInstructionPanels.tsx +226 -0
  618. package/registry/blocks/how-it-works-numbered-instruction-panels/index.ts +6 -0
  619. package/registry/blocks/how-it-works-numbered-photo-steps/HowItWorksNumberedPhotoSteps.tsx +150 -0
  620. package/registry/blocks/how-it-works-numbered-photo-steps/index.ts +7 -0
  621. package/registry/blocks/how-it-works-orbital-process/HowItWorksOrbitalProcess.tsx +317 -0
  622. package/registry/blocks/how-it-works-orbital-process/index.ts +7 -0
  623. package/registry/blocks/how-it-works-overlay-numeral-cards/HowItWorksOverlayNumeralCards.tsx +145 -0
  624. package/registry/blocks/how-it-works-overlay-numeral-cards/index.ts +7 -0
  625. package/registry/blocks/how-it-works-phase-line/HowItWorksPhaseLine.tsx +147 -0
  626. package/registry/blocks/how-it-works-phase-line/index.ts +8 -0
  627. package/registry/blocks/how-it-works-photo-bento-steps/HowItWorksPhotoBentoSteps.tsx +178 -0
  628. package/registry/blocks/how-it-works-photo-bento-steps/index.ts +7 -0
  629. package/registry/blocks/how-it-works-photo-rail-progress/HowItWorksPhotoRailProgress.tsx +231 -0
  630. package/registry/blocks/how-it-works-photo-rail-progress/index.ts +7 -0
  631. package/registry/blocks/how-it-works-pill-timeline/HowItWorksPillTimeline.tsx +181 -0
  632. package/registry/blocks/how-it-works-pill-timeline/index.ts +8 -0
  633. package/registry/blocks/how-it-works-rounded-cards-device-crop/HowItWorksRoundedCardsDeviceCrop.tsx +286 -0
  634. package/registry/blocks/how-it-works-rounded-cards-device-crop/index.ts +6 -0
  635. package/registry/blocks/how-it-works-six-card-grid/HowItWorksSixCardGrid.tsx +385 -0
  636. package/registry/blocks/how-it-works-six-card-grid/index.ts +6 -0
  637. package/registry/blocks/how-it-works-split-feature-band/HowItWorksSplitFeatureBand.tsx +316 -0
  638. package/registry/blocks/how-it-works-split-feature-band/index.ts +6 -0
  639. package/registry/blocks/how-it-works-split-photo-step-list/HowItWorksSplitPhotoStepList.tsx +179 -0
  640. package/registry/blocks/how-it-works-split-photo-step-list/index.ts +7 -0
  641. package/registry/blocks/how-it-works-stacked-media-text/HowItWorksStackedMediaText.tsx +310 -0
  642. package/registry/blocks/how-it-works-stacked-media-text/index.ts +8 -0
  643. package/registry/blocks/how-it-works-step-tabs-photo-panel/HowItWorksStepTabsPhotoPanel.tsx +245 -0
  644. package/registry/blocks/how-it-works-step-tabs-photo-panel/index.ts +7 -0
  645. package/registry/blocks/how-it-works-tall-visual-rail/HowItWorksTallVisualRail.tsx +349 -0
  646. package/registry/blocks/how-it-works-tall-visual-rail/index.ts +7 -0
  647. package/registry/blocks/how-it-works-timelines.test.tsx +265 -0
  648. package/registry/blocks/how-it-works-vertical-timeline-card/HowItWorksVerticalTimelineCard.tsx +169 -0
  649. package/registry/blocks/how-it-works-vertical-timeline-card/index.ts +8 -0
  650. package/registry/blocks/how-it-works-visual-steps.test.tsx +368 -0
  651. package/registry/blocks/logo-cloud-bento-logo-wall/LogoCloudBentoLogoWall.tsx +159 -0
  652. package/registry/blocks/logo-cloud-bento-logo-wall/index.ts +7 -0
  653. package/registry/blocks/logo-cloud-bordered-cell-grid/LogoCloudBorderedCellGrid.tsx +132 -0
  654. package/registry/blocks/logo-cloud-bordered-cell-grid/index.ts +7 -0
  655. package/registry/blocks/logo-cloud-centered-caption-row/LogoCloudCenteredCaptionRow.tsx +141 -0
  656. package/registry/blocks/logo-cloud-centered-caption-row/index.ts +7 -0
  657. package/registry/blocks/logo-cloud-contained-card/LogoCloudContainedCard.tsx +106 -0
  658. package/registry/blocks/logo-cloud-contained-card/index.ts +7 -0
  659. package/registry/blocks/logo-cloud-dark-logo-wall/LogoCloudDarkLogoWall.tsx +123 -0
  660. package/registry/blocks/logo-cloud-dark-logo-wall/index.ts +7 -0
  661. package/registry/blocks/logo-cloud-divider-rule-row/LogoCloudDividerRuleRow.tsx +156 -0
  662. package/registry/blocks/logo-cloud-divider-rule-row/index.ts +7 -0
  663. package/registry/blocks/logo-cloud-editorial-eyebrow-split/LogoCloudEditorialEyebrowSplit.tsx +121 -0
  664. package/registry/blocks/logo-cloud-editorial-eyebrow-split/index.ts +7 -0
  665. package/registry/blocks/logo-cloud-enterprise-wall/LogoCloudEnterpriseWall.tsx +114 -0
  666. package/registry/blocks/logo-cloud-enterprise-wall/index.ts +7 -0
  667. package/registry/blocks/logo-cloud-flanked-heading/LogoCloudFlankedHeading.tsx +162 -0
  668. package/registry/blocks/logo-cloud-flanked-heading/index.ts +8 -0
  669. package/registry/blocks/logo-cloud-grid-closing-cta/LogoCloudGridClosingCta.tsx +173 -0
  670. package/registry/blocks/logo-cloud-grid-closing-cta/index.ts +8 -0
  671. package/registry/blocks/logo-cloud-heading-grid/LogoCloudHeadingGrid.tsx +124 -0
  672. package/registry/blocks/logo-cloud-heading-grid/index.ts +7 -0
  673. package/registry/blocks/logo-cloud-heading-left-grid-right/LogoCloudHeadingLeftGridRight.tsx +172 -0
  674. package/registry/blocks/logo-cloud-heading-left-grid-right/index.ts +8 -0
  675. package/registry/blocks/logo-cloud-logo-metric-tiles/LogoCloudLogoMetricTiles.tsx +159 -0
  676. package/registry/blocks/logo-cloud-logo-metric-tiles/index.ts +8 -0
  677. package/registry/blocks/logo-cloud-logo-quote-cards/LogoCloudLogoQuoteCards.tsx +162 -0
  678. package/registry/blocks/logo-cloud-logo-quote-cards/index.ts +8 -0
  679. package/registry/blocks/logo-cloud-logo-testimonial-strip/LogoCloudLogoTestimonialStrip.tsx +159 -0
  680. package/registry/blocks/logo-cloud-logo-testimonial-strip/index.ts +8 -0
  681. package/registry/blocks/logo-cloud-named-integration-cards/LogoCloudNamedIntegrationCards.tsx +186 -0
  682. package/registry/blocks/logo-cloud-named-integration-cards/index.ts +9 -0
  683. package/registry/blocks/logo-cloud-pyramid-row-stack/LogoCloudPyramidRowStack.tsx +156 -0
  684. package/registry/blocks/logo-cloud-pyramid-row-stack/index.ts +7 -0
  685. package/registry/blocks/logo-cloud-quote-panel-grid/LogoCloudQuotePanelGrid.tsx +177 -0
  686. package/registry/blocks/logo-cloud-quote-panel-grid/index.ts +8 -0
  687. package/registry/blocks/logo-cloud-scatter-field/LogoCloudScatterField.tsx +190 -0
  688. package/registry/blocks/logo-cloud-scatter-field/index.ts +8 -0
  689. package/registry/blocks/logo-cloud-side-label-rail/LogoCloudSideLabelRail.tsx +139 -0
  690. package/registry/blocks/logo-cloud-side-label-rail/index.ts +7 -0
  691. package/registry/blocks/logo-cloud-stat-rail-above-grid/LogoCloudStatRailAboveGrid.tsx +173 -0
  692. package/registry/blocks/logo-cloud-stat-rail-above-grid/index.ts +8 -0
  693. package/registry/blocks/logo-cloud-tabbed-industry-filter/LogoCloudTabbedIndustryFilter.tsx +200 -0
  694. package/registry/blocks/logo-cloud-tabbed-industry-filter/index.ts +8 -0
  695. package/registry/blocks/navbar/index.ts +22 -11
  696. package/registry/blocks/navbar/navbar.test.tsx +42 -0
  697. package/registry/blocks/navbar/navbar.tsx +455 -0
  698. package/registry/blocks/navbar-active-action-with-border/NavbarActiveActionWithBorder.tsx +120 -0
  699. package/registry/blocks/navbar-active-action-with-border/index.ts +6 -0
  700. package/registry/blocks/navbar-active-action-with-round/NavbarActiveActionWithRound.tsx +120 -0
  701. package/registry/blocks/navbar-active-action-with-round/index.ts +6 -0
  702. package/registry/blocks/navbar-centered-floating/NavbarCenteredFloating.tsx +121 -0
  703. package/registry/blocks/navbar-centered-floating/index.ts +6 -0
  704. package/registry/blocks/navbar-default/NavbarDefault.tsx +102 -0
  705. package/registry/blocks/navbar-default/index.ts +6 -0
  706. package/registry/blocks/navbar-e-commerce/NavbarECommerce.tsx +212 -0
  707. package/registry/blocks/navbar-e-commerce/index.ts +6 -0
  708. package/registry/blocks/navbar-extended-at-top/NavbarExtendedAtTop.tsx +155 -0
  709. package/registry/blocks/navbar-extended-at-top/index.ts +7 -0
  710. package/registry/blocks/navbar-multiple-action/NavbarMultipleAction.tsx +133 -0
  711. package/registry/blocks/navbar-multiple-action/index.ts +6 -0
  712. package/registry/blocks/navbar-multiple-icon/NavbarMultipleIcon.tsx +132 -0
  713. package/registry/blocks/navbar-multiple-icon/index.ts +6 -0
  714. package/registry/blocks/navbar-rounded/NavbarRounded.tsx +140 -0
  715. package/registry/blocks/navbar-rounded/index.ts +6 -0
  716. package/registry/blocks/navbar-rounded-small/NavbarRoundedSmall.tsx +143 -0
  717. package/registry/blocks/navbar-rounded-small/index.ts +6 -0
  718. package/registry/blocks/navbar-small/NavbarSmall.tsx +142 -0
  719. package/registry/blocks/navbar-small/index.ts +6 -0
  720. package/registry/blocks/navbar-with-centered-logo/NavbarWithCenteredLogo.tsx +118 -0
  721. package/registry/blocks/navbar-with-centered-logo/index.ts +6 -0
  722. package/registry/blocks/navbar-with-cta-button/NavbarWithCtaButton.tsx +131 -0
  723. package/registry/blocks/navbar-with-cta-button/index.ts +6 -0
  724. package/registry/blocks/navbar-with-dropdown/NavbarWithDropdown.tsx +118 -0
  725. package/registry/blocks/navbar-with-dropdown/index.ts +6 -0
  726. package/registry/blocks/navbar-with-icon-indicator-avatar/NavbarWithIconIndicatorAvatar.tsx +85 -0
  727. package/registry/blocks/navbar-with-icon-indicator-avatar/index.ts +6 -0
  728. package/registry/blocks/navbar-with-search-input/NavbarWithSearchInput.tsx +90 -0
  729. package/registry/blocks/navbar-with-search-input/index.ts +6 -0
  730. package/registry/blocks/navbar-with-submenu/NavbarWithSubmenu.tsx +156 -0
  731. package/registry/blocks/navbar-with-submenu/index.ts +6 -0
  732. package/registry/blocks/page-header/PageHeader.tsx +5 -9
  733. package/registry/blocks/pricing/index.ts +20 -0
  734. package/registry/blocks/pricing/pricing.test.tsx +82 -0
  735. package/registry/blocks/pricing/pricing.tsx +343 -0
  736. package/registry/blocks/pricing-comparison-matrix/PricingComparisonMatrix.tsx +336 -0
  737. package/registry/blocks/pricing-comparison-matrix/index.ts +10 -0
  738. package/registry/blocks/pricing-plan-picker-summary/PricingPlanPickerSummary.tsx +399 -0
  739. package/registry/blocks/pricing-plan-picker-summary/index.ts +8 -0
  740. package/registry/blocks/pricing-plan-spotlight/PricingPlanSpotlight.tsx +281 -0
  741. package/registry/blocks/pricing-plan-spotlight/index.ts +7 -0
  742. package/registry/blocks/pricing-tiers/PricingTiers.tsx +264 -0
  743. package/registry/blocks/pricing-tiers/index.ts +8 -0
  744. package/registry/blocks/pricing-two-plan-compare/PricingTwoPlanCompare.tsx +187 -0
  745. package/registry/blocks/pricing-two-plan-compare/index.ts +7 -0
  746. package/registry/blocks/social-proof/index.ts +36 -0
  747. package/registry/blocks/social-proof/social-proof.test.tsx +504 -0
  748. package/registry/blocks/social-proof/social-proof.tsx +759 -0
  749. package/registry/blocks/social-proof-app-review-row/SocialProofAppReviewRow.tsx +168 -0
  750. package/registry/blocks/social-proof-app-review-row/index.ts +7 -0
  751. package/registry/blocks/social-proof-arch-portrait-quote/SocialProofArchPortraitQuote.tsx +114 -0
  752. package/registry/blocks/social-proof-arch-portrait-quote/index.ts +6 -0
  753. package/registry/blocks/social-proof-avatar-selector-row/SocialProofAvatarSelectorRow.tsx +276 -0
  754. package/registry/blocks/social-proof-avatar-selector-row/index.ts +7 -0
  755. package/registry/blocks/social-proof-benefit-title-cards/SocialProofBenefitTitleCards.tsx +182 -0
  756. package/registry/blocks/social-proof-benefit-title-cards/index.ts +8 -0
  757. package/registry/blocks/social-proof-bracket-framed-quote/SocialProofBracketFramedQuote.tsx +120 -0
  758. package/registry/blocks/social-proof-bracket-framed-quote/index.ts +6 -0
  759. package/registry/blocks/social-proof-case-study-row/SocialProofCaseStudyRow.tsx +210 -0
  760. package/registry/blocks/social-proof-case-study-row/index.ts +7 -0
  761. package/registry/blocks/social-proof-centered-logo-spotlight/SocialProofCenteredLogoSpotlight.tsx +103 -0
  762. package/registry/blocks/social-proof-centered-logo-spotlight/index.ts +6 -0
  763. package/registry/blocks/social-proof-classic-trio-grid/SocialProofClassicTrioGrid.tsx +138 -0
  764. package/registry/blocks/social-proof-classic-trio-grid/index.ts +7 -0
  765. package/registry/blocks/social-proof-dark-editorial-split/SocialProofDarkEditorialSplit.tsx +111 -0
  766. package/registry/blocks/social-proof-dark-editorial-split/index.ts +6 -0
  767. package/registry/blocks/social-proof-giant-quote-duo/SocialProofGiantQuoteDuo.tsx +156 -0
  768. package/registry/blocks/social-proof-giant-quote-duo/index.ts +8 -0
  769. package/registry/blocks/social-proof-highlighted-phrase-spotlight/SocialProofHighlightedPhraseSpotlight.tsx +130 -0
  770. package/registry/blocks/social-proof-highlighted-phrase-spotlight/index.ts +7 -0
  771. package/registry/blocks/social-proof-overlay-photo-quote/SocialProofOverlayPhotoQuote.tsx +111 -0
  772. package/registry/blocks/social-proof-overlay-photo-quote/index.ts +7 -0
  773. package/registry/blocks/social-proof-persona-pillars/SocialProofPersonaPillars.tsx +253 -0
  774. package/registry/blocks/social-proof-persona-pillars/index.ts +7 -0
  775. package/registry/blocks/social-proof-progress-carousel/SocialProofProgressCarousel.tsx +249 -0
  776. package/registry/blocks/social-proof-progress-carousel/index.ts +8 -0
  777. package/registry/blocks/social-proof-proof-bento/SocialProofProofBento.tsx +218 -0
  778. package/registry/blocks/social-proof-proof-bento/index.ts +6 -0
  779. package/registry/blocks/social-proof-spotlight-carousel/SocialProofSpotlightCarousel.tsx +212 -0
  780. package/registry/blocks/social-proof-spotlight-carousel/index.ts +7 -0
  781. package/registry/blocks/social-proof-staggered-columns/SocialProofStaggeredColumns.tsx +227 -0
  782. package/registry/blocks/social-proof-staggered-columns/index.ts +7 -0
  783. package/registry/blocks/social-proof-stat-story-cards/SocialProofStatStoryCards.tsx +218 -0
  784. package/registry/blocks/social-proof-stat-story-cards/index.ts +7 -0
  785. package/registry/blocks/social-proof-tinted-panel-portrait/SocialProofTintedPanelPortrait.tsx +130 -0
  786. package/registry/blocks/social-proof-tinted-panel-portrait/index.ts +7 -0
  787. package/registry/blocks/social-proof-tweet-wall/SocialProofTweetWall.tsx +179 -0
  788. package/registry/blocks/social-proof-tweet-wall/index.ts +7 -0
  789. package/registry/blocks/social-proof-vertical-column-wall/SocialProofVerticalColumnWall.tsx +220 -0
  790. package/registry/blocks/social-proof-vertical-column-wall/index.ts +7 -0
  791. package/registry/blocks/social-proof-video-story-cards/SocialProofVideoStoryCards.tsx +177 -0
  792. package/registry/blocks/social-proof-video-story-cards/index.ts +7 -0
  793. package/registry/blocks/social-proof-workplace-portrait-stories/SocialProofWorkplacePortraitStories.tsx +320 -0
  794. package/registry/blocks/social-proof-workplace-portrait-stories/index.ts +7 -0
  795. package/registry/blocks/team/index.ts +21 -0
  796. package/registry/blocks/team/team-classes.test.ts +35 -0
  797. package/registry/blocks/team/team.tsx +315 -0
  798. package/registry/blocks/team-annotated-portrait-lineup/TeamAnnotatedPortraitLineup.tsx +310 -0
  799. package/registry/blocks/team-annotated-portrait-lineup/index.ts +8 -0
  800. package/registry/blocks/team-annotated-portrait-lineup/team-annotated-portrait-lineup.test.tsx +71 -0
  801. package/registry/blocks/team-compact-directory-rows/TeamCompactDirectoryRows.tsx +190 -0
  802. package/registry/blocks/team-compact-directory-rows/compact-directory-rows.test.tsx +40 -0
  803. package/registry/blocks/team-compact-directory-rows/index.ts +7 -0
  804. package/registry/blocks/team-department-tabs-directory/TeamDepartmentTabsDirectory.tsx +414 -0
  805. package/registry/blocks/team-department-tabs-directory/department-tabs-directory.test.tsx +87 -0
  806. package/registry/blocks/team-department-tabs-directory/index.ts +10 -0
  807. package/registry/blocks/team-founder-spotlight/TeamFounderSpotlight.tsx +176 -0
  808. package/registry/blocks/team-founder-spotlight/index.ts +8 -0
  809. package/registry/blocks/team-founder-spotlight/team-founder-spotlight.test.tsx +70 -0
  810. package/registry/blocks/team-grid-backdrop-roster/TeamGridBackdropRoster.tsx +234 -0
  811. package/registry/blocks/team-grid-backdrop-roster/grid-backdrop-roster.test.tsx +72 -0
  812. package/registry/blocks/team-grid-backdrop-roster/index.ts +8 -0
  813. package/registry/blocks/team-hairline-grid/TeamHairlineGrid.tsx +190 -0
  814. package/registry/blocks/team-hairline-grid/hairline-grid.test.tsx +49 -0
  815. package/registry/blocks/team-hairline-grid/index.ts +1 -0
  816. package/registry/blocks/team-leadership-grid/TeamLeadershipGrid.tsx +183 -0
  817. package/registry/blocks/team-leadership-grid/index.ts +7 -0
  818. package/registry/blocks/team-leadership-grid/team-leadership-grid.test.tsx +38 -0
  819. package/registry/blocks/team-member-carousel/TeamMemberCarousel.tsx +178 -0
  820. package/registry/blocks/team-member-carousel/index.ts +7 -0
  821. package/registry/blocks/team-member-carousel/team-member-carousel.test.tsx +58 -0
  822. package/registry/blocks/team-member-table/TeamMemberTable.tsx +184 -0
  823. package/registry/blocks/team-member-table/index.ts +7 -0
  824. package/registry/blocks/team-member-table/member-table.test.tsx +43 -0
  825. package/registry/blocks/team-meta-profile-cards/TeamMetaProfileCards.tsx +155 -0
  826. package/registry/blocks/team-meta-profile-cards/index.ts +7 -0
  827. package/registry/blocks/team-meta-profile-cards/team-meta-profile-cards.test.tsx +29 -0
  828. package/registry/blocks/team-overlay-portrait-cards/TeamOverlayPortraitCards.tsx +145 -0
  829. package/registry/blocks/team-overlay-portrait-cards/index.ts +7 -0
  830. package/registry/blocks/team-overlay-portrait-cards/team-overlay-portrait-cards.test.tsx +49 -0
  831. package/registry/blocks/team-portrait-wall/TeamPortraitWall.tsx +131 -0
  832. package/registry/blocks/team-portrait-wall/index.ts +1 -0
  833. package/registry/blocks/team-portrait-wall/portrait-wall.test.tsx +45 -0
  834. package/registry/blocks/team-split-intro-member-rail/TeamSplitIntroMemberRail.tsx +203 -0
  835. package/registry/blocks/team-split-intro-member-rail/index.ts +7 -0
  836. package/registry/blocks/team-split-intro-member-rail/split-intro-member-rail.test.tsx +52 -0
  837. package/registry/blocks/team-we-re-hiring-cta/TeamWeReHiringCta.tsx +192 -0
  838. package/registry/blocks/team-we-re-hiring-cta/index.ts +7 -0
  839. package/registry/blocks/team-we-re-hiring-cta/we-re-hiring-cta.test.tsx +44 -0
  840. package/registry/blocks/video-call/index.ts +53 -0
  841. package/registry/blocks/video-call/video-call-around.test.tsx +427 -0
  842. package/registry/blocks/video-call/video-call-before.test.tsx +438 -0
  843. package/registry/blocks/video-call/video-call-hero.test.tsx +236 -0
  844. package/registry/blocks/video-call/video-call-stages.test.tsx +477 -0
  845. package/registry/blocks/video-call/video-call.test.tsx +794 -0
  846. package/registry/blocks/video-call/video-call.tsx +1282 -0
  847. package/registry/blocks/video-call-ai-meeting-recap/VideoCallAiMeetingRecap.tsx +466 -0
  848. package/registry/blocks/video-call-ai-meeting-recap/index.ts +9 -0
  849. package/registry/blocks/video-call-call-controls-dock/VideoCallCallControlsDock.tsx +211 -0
  850. package/registry/blocks/video-call-call-controls-dock/index.ts +6 -0
  851. package/registry/blocks/video-call-call-ended-summary/VideoCallCallEndedSummary.tsx +464 -0
  852. package/registry/blocks/video-call-call-ended-summary/index.ts +10 -0
  853. package/registry/blocks/video-call-call-with-side-panel/VideoCallCallWithSidePanel.tsx +357 -0
  854. package/registry/blocks/video-call-call-with-side-panel/index.ts +6 -0
  855. package/registry/blocks/video-call-captions-reactions/VideoCallCaptionsReactions.tsx +467 -0
  856. package/registry/blocks/video-call-captions-reactions/index.ts +10 -0
  857. package/registry/blocks/video-call-grid-gallery-call/VideoCallGridGalleryCall.tsx +312 -0
  858. package/registry/blocks/video-call-grid-gallery-call/index.ts +6 -0
  859. package/registry/blocks/video-call-hero-call-mockup/VideoCallHeroCallMockup.tsx +349 -0
  860. package/registry/blocks/video-call-hero-call-mockup/index.ts +7 -0
  861. package/registry/blocks/video-call-incoming-call/VideoCallIncomingCall.tsx +336 -0
  862. package/registry/blocks/video-call-incoming-call/index.ts +7 -0
  863. package/registry/blocks/video-call-join-link-dial-in/VideoCallJoinLinkDialIn.tsx +409 -0
  864. package/registry/blocks/video-call-join-link-dial-in/index.ts +9 -0
  865. package/registry/blocks/video-call-pre-join-lobby/VideoCallPreJoinLobby.tsx +345 -0
  866. package/registry/blocks/video-call-pre-join-lobby/index.ts +7 -0
  867. package/registry/blocks/video-call-screen-share-stage/VideoCallScreenShareStage.tsx +379 -0
  868. package/registry/blocks/video-call-screen-share-stage/index.ts +7 -0
  869. package/registry/blocks/video-call-speaker-filmstrip/VideoCallSpeakerFilmstrip.tsx +303 -0
  870. package/registry/blocks/video-call-speaker-filmstrip/index.ts +6 -0
  871. package/registry/blocks/video-call-upcoming-meetings/VideoCallUpcomingMeetings.tsx +349 -0
  872. package/registry/blocks/video-call-upcoming-meetings/index.ts +7 -0
  873. package/registry/blocks/video-call-waiting-room-knock/VideoCallWaitingRoomKnock.tsx +412 -0
  874. package/registry/blocks/video-call-waiting-room-knock/index.ts +7 -0
  875. package/registry/text-props-undefined.test.tsx +3 -26
  876. package/registry/ui/accordion/accordion.test.tsx +320 -0
  877. package/registry/ui/accordion/accordion.tsx +353 -0
  878. package/registry/ui/accordion/index.ts +15 -0
  879. package/registry/ui/alert/alert.test.tsx +325 -0
  880. package/registry/ui/alert/alert.tsx +384 -0
  881. package/registry/ui/alert/index.ts +10 -0
  882. package/registry/ui/alert-dialog/alert-dialog.test.tsx +396 -0
  883. package/registry/ui/alert-dialog/alert-dialog.tsx +423 -0
  884. package/registry/ui/alert-dialog/index.ts +21 -0
  885. package/registry/ui/avatar/avatar.test.tsx +2 -2
  886. package/registry/ui/avatar/avatar.tsx +3 -7
  887. package/registry/ui/breadcrumb/breadcrumb.test.tsx +305 -0
  888. package/registry/ui/breadcrumb/breadcrumb.tsx +205 -0
  889. package/registry/ui/breadcrumb/index.ts +11 -0
  890. package/registry/ui/button/button.test.tsx +353 -40
  891. package/registry/ui/button/button.tsx +304 -30
  892. package/registry/ui/calendar/calendar.test.tsx +192 -0
  893. package/registry/ui/calendar/calendar.tsx +405 -0
  894. package/registry/ui/calendar/index.ts +1 -0
  895. package/registry/ui/carousel/carousel.test.tsx +720 -0
  896. package/registry/ui/carousel/carousel.tsx +554 -0
  897. package/registry/ui/carousel/index.ts +11 -0
  898. package/registry/ui/checkbox/checkbox.test.tsx +318 -2
  899. package/registry/ui/checkbox/checkbox.tsx +253 -67
  900. package/registry/ui/checkbox/index.ts +1 -1
  901. package/registry/ui/content-carousel/content-carousel.test.tsx +303 -0
  902. package/registry/ui/content-carousel/content-carousel.tsx +180 -0
  903. package/registry/ui/content-carousel/index.ts +8 -0
  904. package/registry/ui/date-picker/date-picker.test.tsx +216 -0
  905. package/registry/ui/date-picker/date-picker.tsx +461 -0
  906. package/registry/ui/date-picker/index.ts +8 -0
  907. package/registry/ui/dialog/dialog.test.tsx +438 -0
  908. package/registry/ui/dialog/dialog.tsx +533 -0
  909. package/registry/ui/dialog/index.ts +20 -0
  910. package/registry/ui/dropdown-menu/dropdown-menu.test.tsx +502 -0
  911. package/registry/ui/dropdown-menu/dropdown-menu.tsx +627 -0
  912. package/registry/ui/dropdown-menu/index.ts +32 -0
  913. package/registry/ui/fasla-logo/fasla-logo.tsx +101 -0
  914. package/registry/ui/fasla-logo/index.ts +1 -0
  915. package/registry/ui/input/index.ts +10 -1
  916. package/registry/ui/input/input.test.tsx +251 -44
  917. package/registry/ui/input/input.tsx +311 -40
  918. package/registry/ui/input-number/index.ts +1 -0
  919. package/registry/ui/input-number/input-number.test.tsx +302 -0
  920. package/registry/ui/input-number/input-number.tsx +398 -0
  921. package/registry/ui/input-otp/index.ts +7 -0
  922. package/registry/ui/input-otp/input-otp.test.tsx +299 -0
  923. package/registry/ui/input-otp/input-otp.tsx +279 -0
  924. package/registry/ui/pagination/index.ts +12 -0
  925. package/registry/ui/pagination/pagination.test.tsx +330 -0
  926. package/registry/ui/pagination/pagination.tsx +336 -0
  927. package/registry/ui/progress/index.ts +8 -0
  928. package/registry/ui/progress/progress.test.tsx +168 -0
  929. package/registry/ui/progress/progress.tsx +165 -0
  930. package/registry/ui/select/index.ts +12 -1
  931. package/registry/ui/select/select.test.tsx +505 -0
  932. package/registry/ui/select/select.tsx +658 -56
  933. package/registry/ui/sheet/index.ts +19 -0
  934. package/registry/ui/sheet/sheet.test.tsx +411 -0
  935. package/registry/ui/sheet/sheet.tsx +496 -0
  936. package/registry/{blocks → ui}/sidebar/index.ts +10 -5
  937. package/registry/ui/sidebar/sidebar.test.tsx +224 -0
  938. package/registry/ui/sidebar/sidebar.tsx +754 -0
  939. package/registry/ui/slider/index.ts +8 -0
  940. package/registry/ui/slider/slider.test.tsx +231 -0
  941. package/registry/ui/slider/slider.tsx +319 -0
  942. package/registry/ui/social-icons/index.ts +1 -0
  943. package/registry/ui/social-icons/social-icons.tsx +284 -0
  944. package/registry/ui/steps/index.ts +16 -0
  945. package/registry/ui/steps/steps.test.tsx +435 -0
  946. package/registry/ui/steps/steps.tsx +571 -0
  947. package/registry/ui/switch/switch.tsx +3 -2
  948. package/registry/ui/tabs/index.ts +4 -0
  949. package/registry/ui/tabs/tabs.test.tsx +576 -0
  950. package/registry/ui/tabs/tabs.tsx +324 -112
  951. package/registry/ui/textarea/index.ts +1 -1
  952. package/registry/ui/textarea/textarea.test.tsx +294 -0
  953. package/registry/ui/textarea/textarea.tsx +329 -56
  954. package/registry/ui/tooltip/index.ts +14 -0
  955. package/registry/ui/tooltip/tooltip.test.tsx +301 -0
  956. package/registry/ui/tooltip/tooltip.tsx +409 -0
  957. package/registry.json +9702 -139
  958. package/tailwind-preset.ts +2 -2
  959. package/registry/blocks/navbar/Navbar.test.tsx +0 -12
  960. package/registry/blocks/navbar/Navbar.tsx +0 -175
  961. package/registry/blocks/sidebar/Sidebar.test.tsx +0 -39
  962. package/registry/blocks/sidebar/Sidebar.tsx +0 -212
@@ -0,0 +1,366 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { ArrowLeft, Inbox, RefreshCw } from "lucide-react"
5
+ import { cn } from "../../../src/lib/utils"
6
+ import { Button, buttonVariants } from "../../ui/button/button"
7
+ import { SocialIcon } from "../../ui/social-icons/social-icons"
8
+
9
+ /*
10
+ * Figma: `Authentications` (42586:4669), Type=Check Your Email.
11
+ *
12
+ * The screen after a magic link is sent: a drawing of the letter with a
13
+ * tick, the address it went to, shortcuts to Gmail and Outlook, a resend
14
+ * button that counts down before it can be pressed again, and a way back to
15
+ * sign in under a rule.
16
+ *
17
+ * Mobile first: the base classes are Figma's Mobile (360), `md:` its Tablet
18
+ * (768) and `lg:` its Desktop (1440). The column keeps 432px from Tablet up;
19
+ * on a phone it fills the width and the two mail buttons stack. Direction is
20
+ * the page's `dir`; every side is a logical one. The drawing is never
21
+ * mirrored, and the countdown keeps Western digits in both languages.
22
+ */
23
+
24
+ export interface AuthCheckYourEmailLink {
25
+ label: React.ReactNode
26
+ href: string
27
+ }
28
+
29
+ export interface AuthCheckYourEmailCopy {
30
+ /** The page's heading, an `h1`. */
31
+ heading: React.ReactNode
32
+ /** The line under the heading. `{email}` is replaced by `email`. */
33
+ description: string
34
+ /** The button that opens Gmail. Hidden when null. */
35
+ gmailLink: AuthCheckYourEmailLink | null
36
+ /** The button that opens Outlook. Hidden when null. */
37
+ outlookLink: AuthCheckYourEmailLink | null
38
+ /** The resend button, once it can be pressed. */
39
+ resendLabel: string
40
+ /** The resend button while it counts down. `{time}` is replaced by the time left, as 0:42. */
41
+ resendCountdown: string
42
+ /** Read out while `onResend` runs. */
43
+ pendingLabel: string
44
+ /** Shown for a moment after `onResend` settles. */
45
+ resentMessage: React.ReactNode
46
+ /** Shown when `onResend` rejects. */
47
+ error: React.ReactNode
48
+ /** The help line under the rule. Hidden when empty. */
49
+ help: React.ReactNode
50
+ /** The link back to sign in. Hidden when null. */
51
+ backLink: AuthCheckYourEmailLink | null
52
+ }
53
+
54
+ /** Figma's copy, English and Arabic. */
55
+ const COPY: Record<"en" | "ar", AuthCheckYourEmailCopy> = {
56
+ en: {
57
+ heading: "Check your inbox",
58
+ description: "We sent a sign-in link to {email}. Open it on this device to continue.",
59
+ gmailLink: { label: "Open Gmail", href: "https://mail.google.com" },
60
+ outlookLink: { label: "Open Outlook", href: "https://outlook.live.com" },
61
+ resendLabel: "Resend email",
62
+ resendCountdown: "Resend email in {time}",
63
+ pendingLabel: "Sending the email again",
64
+ resentMessage: "We sent the email again.",
65
+ error: "We couldn’t send the email. Try again in a moment.",
66
+ help: "Did not get it? Check your spam folder, or try a different address.",
67
+ backLink: { label: "Back to sign in", href: "#sign-in" },
68
+ },
69
+ ar: {
70
+ heading: "تفقّد بريدك الوارد",
71
+ description: "أرسلنا رابط الدخول إلى {email}. افتحه على هذا الجهاز للمتابعة.",
72
+ gmailLink: {
73
+ label: (
74
+ <>
75
+ فتح <bdi dir="ltr">Gmail</bdi>
76
+ </>
77
+ ),
78
+ href: "https://mail.google.com",
79
+ },
80
+ outlookLink: {
81
+ label: (
82
+ <>
83
+ فتح <bdi dir="ltr">Outlook</bdi>
84
+ </>
85
+ ),
86
+ href: "https://outlook.live.com",
87
+ },
88
+ resendLabel: "إعادة إرسال البريد",
89
+ resendCountdown: "إعادة الإرسال خلال {time}",
90
+ pendingLabel: "جارٍ إعادة إرسال البريد",
91
+ resentMessage: "أعدنا إرسال البريد.",
92
+ error: "تعذّر إرسال البريد. حاول مجددًا بعد قليل.",
93
+ help: "لم يصلك؟ تفقّد مجلد الرسائل غير المرغوب فيها، أو جرّب عنوانًا آخر.",
94
+ backLink: { label: "العودة إلى تسجيل الدخول", href: "#sign-in" },
95
+ },
96
+ }
97
+
98
+ export interface AuthCheckYourEmailProps
99
+ extends Omit<React.HTMLAttributes<HTMLElement>, "title">,
100
+ Partial<AuthCheckYourEmailCopy> {
101
+ /** Which language the default copy is in. The page's `dir` sets the direction. */
102
+ locale?: "en" | "ar"
103
+ /**
104
+ * The address the link went to, shown in `description`.
105
+ * @default "alex@northwind.co"
106
+ */
107
+ email?: string
108
+ /**
109
+ * Seconds before the resend button can be pressed, counted again after each resend.
110
+ * @default 60
111
+ */
112
+ resendDelay?: number
113
+ /**
114
+ * Runs when the resend button is pressed. While its promise is pending the
115
+ * button shows its spinner; then the countdown starts again.
116
+ */
117
+ onResend?: () => Promise<void> | void
118
+ }
119
+
120
+ /** Seconds as m:ss, in Western digits. */
121
+ const clock = (seconds: number) => `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, "0")}`
122
+
123
+ /** Splits a copy string on `{name}` and puts `value` in its place. */
124
+ function fill(template: string, name: string, value: React.ReactNode) {
125
+ const [before, after] = template.split(`{${name}}`)
126
+ return after === undefined ? template : (
127
+ <>
128
+ {before}
129
+ {value}
130
+ {after}
131
+ </>
132
+ )
133
+ }
134
+
135
+ /** Counts `seconds` down to 0, once a second. `restart` starts it again. */
136
+ function useCountdown(seconds: number) {
137
+ const [left, setLeft] = React.useState(seconds)
138
+ const [round, setRound] = React.useState(0)
139
+ React.useEffect(() => {
140
+ setLeft(seconds)
141
+ if (seconds <= 0) return
142
+ const timer = window.setInterval(() => {
143
+ setLeft((current) => {
144
+ if (current <= 1) window.clearInterval(timer)
145
+ return Math.max(0, current - 1)
146
+ })
147
+ }, 1000)
148
+ return () => window.clearInterval(timer)
149
+ }, [seconds, round])
150
+ return [left, () => setRound((count) => count + 1)] as const
151
+ }
152
+
153
+ /** Whether the visitor asks for reduced motion. False on the server. */
154
+ const reducedMotion = () => typeof window === "undefined" || window.matchMedia("(prefers-reduced-motion: reduce)").matches
155
+
156
+ const LINK =
157
+ "rounded-sm underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring"
158
+
159
+ export function AuthCheckYourEmail({
160
+ locale = "en",
161
+ heading,
162
+ description,
163
+ gmailLink,
164
+ outlookLink,
165
+ resendLabel,
166
+ resendCountdown,
167
+ pendingLabel,
168
+ resentMessage,
169
+ error,
170
+ help,
171
+ backLink,
172
+ email = "alex@northwind.co",
173
+ resendDelay = 60,
174
+ onResend,
175
+ className,
176
+ ...props
177
+ }: AuthCheckYourEmailProps) {
178
+ const copy = COPY[locale]
179
+ const headingId = React.useId()
180
+ const artRef = React.useRef<HTMLDivElement>(null)
181
+ const copyRef = React.useRef<HTMLDivElement>(null)
182
+ const refreshRef = React.useRef<SVGSVGElement>(null)
183
+ const [left, restart] = useCountdown(resendDelay)
184
+ const [status, setStatus] = React.useState<"idle" | "pending" | "resent" | "error">("idle")
185
+ const gmail = gmailLink === undefined ? copy.gmailLink : gmailLink
186
+ const outlook = outlookLink === undefined ? copy.outlookLink : outlookLink
187
+ const back = backLink === undefined ? copy.backLink : backLink
188
+ const helpText = help ?? copy.help
189
+ const waiting = left > 0
190
+
191
+ // Figma's entrance: the letter opens once (the drawing rises out of a
192
+ // fade over 500ms), and the copy fades in under it.
193
+ React.useLayoutEffect(() => {
194
+ const art = artRef.current
195
+ const text = copyRef.current
196
+ if (!art || !text || typeof art.animate !== "function" || reducedMotion()) return
197
+ const easing = "cubic-bezier(0, 0, 0.2, 1)"
198
+ const animations = [
199
+ art.animate([{ opacity: 0, transform: "translateY(12px) scale(0.96)" }, { opacity: 1, transform: "none" }], { duration: 500, easing, fill: "backwards" }),
200
+ text.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 320, delay: 250, easing, fill: "backwards" }),
201
+ ]
202
+ return () => animations.forEach((animation) => animation.cancel())
203
+ }, [])
204
+
205
+ // When the countdown ends the refresh icon turns once.
206
+ React.useEffect(() => {
207
+ const icon = refreshRef.current
208
+ if (waiting || !icon || typeof icon.animate !== "function" || reducedMotion()) return
209
+ icon.animate([{ transform: "rotate(0deg)" }, { transform: "rotate(360deg)" }], { duration: 500, easing: "ease-out" })
210
+ }, [waiting])
211
+
212
+ // "Sent again" shows for a moment, then the line clears.
213
+ React.useEffect(() => {
214
+ if (status !== "resent") return
215
+ const timer = window.setTimeout(() => setStatus("idle"), 4000)
216
+ return () => window.clearTimeout(timer)
217
+ }, [status])
218
+
219
+ const resend = async () => {
220
+ setStatus("pending")
221
+ try {
222
+ await onResend?.()
223
+ setStatus("resent")
224
+ restart()
225
+ } catch {
226
+ setStatus("error")
227
+ }
228
+ }
229
+
230
+ const address = (
231
+ <bdi dir="ltr">{email}</bdi>
232
+ )
233
+
234
+ return (
235
+ <section aria-labelledby={headingId} className={cn("flex justify-center bg-background p-8 md:p-16 lg:p-24", className)} {...props}>
236
+ <div className="flex w-full flex-col items-center gap-8 md:max-w-[432px]">
237
+ <div ref={artRef} className="flex h-40 w-56 items-center justify-center md:h-[200px] md:w-[280px]">
238
+ <MailSent className="h-full w-auto" />
239
+ </div>
240
+
241
+ <div ref={copyRef} className="flex w-full flex-col items-center gap-8">
242
+ <div className="flex w-full flex-col items-center gap-2 text-center">
243
+ <h1 id={headingId} className="text-2xl font-semibold text-foreground md:text-3xl">
244
+ {heading ?? copy.heading}
245
+ </h1>
246
+ <p className="text-sm text-muted-foreground">{fill(description ?? copy.description, "email", address)}</p>
247
+ </div>
248
+
249
+ <div className="flex w-full flex-col gap-2.5">
250
+ {gmail || outlook ? (
251
+ <div className="flex w-full flex-col gap-2.5 md:flex-row">
252
+ {gmail ? (
253
+ <a href={gmail.href} target="_blank" rel="noreferrer" className={buttonVariants({ variant: "outline", size: "lg", className: "w-full min-w-0 md:flex-1" })}>
254
+ <SocialIcon platform="google" className="size-4" />
255
+ {gmail.label}
256
+ </a>
257
+ ) : null}
258
+ {outlook ? (
259
+ <a href={outlook.href} target="_blank" rel="noreferrer" className={buttonVariants({ variant: "outline", size: "lg", className: "w-full min-w-0 md:flex-1" })}>
260
+ <Inbox size={16} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" />
261
+ {outlook.label}
262
+ </a>
263
+ ) : null}
264
+ </div>
265
+ ) : null}
266
+ <Button
267
+ type="button"
268
+ variant="outline"
269
+ disabled={waiting}
270
+ loading={status === "pending"}
271
+ loadingLabel={pendingLabel ?? copy.pendingLabel}
272
+ onClick={resend}
273
+ className="w-full"
274
+ >
275
+ {status === "pending" ? null : (
276
+ <RefreshCw ref={refreshRef} size={16} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" />
277
+ )}
278
+ <span className="tabular-nums">
279
+ {waiting
280
+ ? fill(resendCountdown ?? copy.resendCountdown, "time", <bdi dir="ltr">{clock(left)}</bdi>)
281
+ : (resendLabel ?? copy.resendLabel)}
282
+ </span>
283
+ </Button>
284
+ {/* Announced when the button can be pressed again, not every second. */}
285
+ <p role="status" className="sr-only">
286
+ {waiting ? null : (resendLabel ?? copy.resendLabel)}
287
+ </p>
288
+ <p role="status" className="text-center text-sm text-muted-foreground empty:hidden">
289
+ {status === "resent" ? (resentMessage ?? copy.resentMessage) : null}
290
+ </p>
291
+ <p role="alert" className="text-center text-sm text-destructive empty:hidden">
292
+ {status === "error" ? (error ?? copy.error) : null}
293
+ </p>
294
+ </div>
295
+
296
+ {helpText || back ? (
297
+ <>
298
+ {/* Separator: swap for the Separator component once it ships. */}
299
+ <div data-separator="" aria-hidden="true" className="h-px w-full shrink-0 bg-border" />
300
+ <div className="flex w-full flex-col items-center gap-2 text-center">
301
+ {helpText ? <p className="text-xs text-muted-foreground">{helpText}</p> : null}
302
+ {back ? (
303
+ <a href={back.href} className={cn("inline-flex items-center gap-1.5 text-sm font-medium text-foreground", LINK)}>
304
+ <ArrowLeft size={14} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" className="shrink-0 rtl:-scale-x-100" />
305
+ {back.label}
306
+ </a>
307
+ ) : null}
308
+ </div>
309
+ </>
310
+ ) : null}
311
+ </div>
312
+ </div>
313
+ </section>
314
+ )
315
+ }
316
+
317
+ /**
318
+ * Figma's "Mail Sent" drawing: an open envelope with a ticked letter. Figma
319
+ * clips the envelope's bottom edge at its frame; here the whole drawing shows.
320
+ * Decorative.
321
+ */
322
+ function MailSent({ className }: { className?: string }) {
323
+ return (
324
+ <svg viewBox="0 -2.143 228 204.286" fill="none" aria-hidden="true" className={className}>
325
+ <path
326
+ className="fill-foreground"
327
+ d="M225.575 75.9803C225.494 75.9804 225.414 75.9554 225.347 75.9088L114.931 -0.98843C114.595 -1.22132 114.196 -1.34579 113.787 -1.34511C113.378 -1.34442 112.98 -1.21862 112.644 -0.9846L3.02416 75.9075C2.98124 75.9377 2.93279 75.9591 2.88158 75.9706C2.83038 75.982 2.77742 75.9833 2.72573 75.9743C2.67403 75.9653 2.62462 75.9462 2.58031 75.9181C2.536 75.89 2.49767 75.8534 2.46749 75.8105C2.43731 75.7676 2.41588 75.7191 2.40442 75.6679C2.39296 75.6167 2.3917 75.5637 2.40071 75.512C2.40972 75.4604 2.42882 75.4109 2.45693 75.3666C2.48503 75.3223 2.52159 75.284 2.56452 75.2538L112.186 -1.63831C112.655 -1.96596 113.214 -2.1421 113.786 -2.14306C114.359 -2.14402 114.917 -1.96975 115.388 -1.64368L225.804 75.2528C225.874 75.3014 225.927 75.371 225.954 75.4515C225.981 75.532 225.982 75.6191 225.957 75.7002C225.931 75.7813 225.881 75.8521 225.812 75.9024C225.744 75.9527 225.661 75.9798 225.576 75.9798L225.575 75.9803Z"
328
+ />
329
+ <path className="fill-border" d="M9.28809 78.7057L113.896 1.17822L219.245 78.7047L115.377 143.159L9.28809 78.7057Z" />
330
+ <path
331
+ className="fill-border"
332
+ d="M69.5707 180.13H17.8923C17.5752 180.13 17.2613 180.068 16.9684 179.946C16.6754 179.825 16.4093 179.647 16.1851 179.423C15.9609 179.199 15.783 178.933 15.6617 178.64C15.5404 178.347 15.4779 178.033 15.4779 177.716C15.4779 177.399 15.5404 177.085 15.6617 176.792C15.783 176.499 15.9609 176.233 16.1851 176.008C16.4093 175.784 16.6754 175.606 16.9684 175.485C17.2613 175.364 17.5752 175.301 17.8923 175.301H69.5707C69.8878 175.301 70.2017 175.364 70.4947 175.485C70.7876 175.606 71.0538 175.784 71.278 176.008C71.5022 176.233 71.68 176.499 71.8013 176.792C71.9227 177.085 71.9851 177.399 71.9851 177.716C71.9851 178.033 71.9227 178.347 71.8013 178.64C71.68 178.933 71.5022 179.199 71.278 179.423C71.0538 179.647 70.7876 179.825 70.4947 179.946C70.2017 180.068 69.8878 180.13 69.5707 180.13Z"
333
+ />
334
+ <path
335
+ className="fill-success"
336
+ d="M36.4335 169.75H17.8923C17.252 169.75 16.6379 169.495 16.1851 169.043C15.7323 168.59 15.4779 167.976 15.4779 167.335C15.4779 166.695 15.7323 166.081 16.1851 165.628C16.6379 165.175 17.252 164.921 17.8923 164.921H36.4335C37.0739 164.921 37.688 165.175 38.1408 165.628C38.5936 166.081 38.8479 166.695 38.8479 167.335C38.8479 167.976 38.5936 168.59 38.1408 169.043C37.688 169.495 37.0739 169.75 36.4335 169.75Z"
337
+ />
338
+ <path
339
+ className="fill-background"
340
+ d="M115.367 121.887C114.974 121.888 114.585 121.811 114.221 121.663L49.7065 94.8936V11.1018C49.7074 10.3608 50.0021 9.65053 50.526 9.12663C51.0499 8.60272 51.7602 8.30801 52.5011 8.30713H176.268C177.009 8.30801 177.72 8.60272 178.243 9.12663C178.767 9.65053 179.062 10.3608 179.063 11.1018V94.9521L178.942 95.0032L116.547 121.65C116.174 121.807 115.772 121.888 115.367 121.888V121.887Z"
341
+ />
342
+ <path
343
+ className="fill-foreground"
344
+ d="M115.367 122.086C114.948 122.087 114.533 122.006 114.145 121.847L49.5068 95.0267V11.1013C49.5077 10.3074 49.8235 9.54627 50.3848 8.98492C50.9462 8.42357 51.7073 8.10781 52.5012 8.10693H176.268C177.062 8.10788 177.823 8.42365 178.385 8.98499C178.946 9.54633 179.262 10.3074 179.263 11.1013V95.0836L116.626 121.834C116.227 122.001 115.799 122.087 115.367 122.086ZM50.3053 94.4932L114.451 121.109C115.049 121.352 115.72 121.348 116.315 121.098L178.464 94.5566V11.1013C178.464 10.519 178.232 9.96084 177.82 9.54914C177.409 9.13744 176.85 8.90585 176.268 8.90518H52.5012C51.9189 8.90579 51.3607 9.13735 50.949 9.54906C50.5373 9.96078 50.3057 10.519 50.3051 11.1013L50.3053 94.4932Z"
345
+ />
346
+ <path
347
+ className="fill-foreground"
348
+ d="M224.777 75.1809H224.697L178.863 94.7523L116.154 121.53C115.908 121.633 115.646 121.687 115.38 121.688C115.114 121.689 114.85 121.638 114.604 121.538L49.9062 94.6963L2.94605 75.2126L2.8743 75.1807H2.79437C2.05342 75.1816 1.34309 75.4764 0.819227 76.0004C0.295363 76.5244 0.00074326 77.2349 0 77.9758V199.347C0.000878539 200.088 0.295595 200.798 0.819499 201.322C1.3434 201.846 2.05372 202.141 2.79463 202.142H224.777C225.517 202.141 226.228 201.846 226.752 201.322C227.276 200.798 227.57 200.088 227.571 199.347V77.9758C227.57 77.2349 227.276 76.5246 226.752 76.0007C226.228 75.4767 225.518 75.1819 224.777 75.1809ZM226.773 199.347C226.773 199.877 226.563 200.384 226.188 200.759C225.814 201.133 225.306 201.343 224.777 201.343H2.79514C2.26578 201.343 1.75814 201.133 1.3838 200.759C1.00945 200.384 0.799025 199.877 0.798755 199.347V77.9761C0.799526 77.4598 0.999807 76.9639 1.35772 76.5919C1.71564 76.2199 2.20348 76.0006 2.71929 75.9799L49.9065 95.5592L114.298 122.276C114.995 122.56 115.776 122.556 116.47 122.264L178.864 95.6187L224.858 75.9797C225.372 76.0022 225.859 76.2222 226.215 76.594C226.572 76.9657 226.772 77.4606 226.773 77.9758L226.773 199.347Z"
349
+ />
350
+ <path
351
+ className="fill-success"
352
+ d="M108.316 95.899C106.102 95.9032 103.946 95.1873 102.175 93.8592L102.065 93.7767L78.9385 76.071C76.7755 74.4137 75.3594 71.965 75.0017 69.2636C74.6441 66.5621 75.3743 63.8293 77.0316 61.6662C78.689 59.5032 81.1377 58.0871 83.8391 57.7294C86.5405 57.3718 89.2734 58.102 91.4365 59.7593L106.416 71.2448L141.815 25.079C142.636 24.0082 143.66 23.1096 144.828 22.4345C145.997 21.7595 147.287 21.3211 148.624 21.1445C149.962 20.9679 151.321 21.0566 152.625 21.4054C153.928 21.7542 155.15 22.3563 156.221 23.1774L156.001 23.4762L156.226 23.1817C158.386 24.8417 159.8 27.2906 160.156 29.9912C160.513 32.6919 159.783 35.4236 158.128 37.5872L116.49 91.8891C115.527 93.1405 114.289 94.1531 112.871 94.8485C111.454 95.5439 109.895 95.9034 108.316 95.899Z"
353
+ />
354
+ <path
355
+ className="fill-border"
356
+ d="M69.5707 190.511H17.8923C17.5752 190.511 17.2613 190.448 16.9684 190.327C16.6754 190.206 16.4093 190.028 16.1851 189.804C15.9609 189.58 15.783 189.313 15.6617 189.02C15.5404 188.728 15.4779 188.414 15.4779 188.097C15.4779 187.779 15.5404 187.466 15.6617 187.173C15.783 186.88 15.9609 186.613 16.1851 186.389C16.4093 186.165 16.6754 185.987 16.9684 185.866C17.2613 185.745 17.5752 185.682 17.8923 185.682H69.5707C69.8878 185.682 70.2017 185.745 70.4947 185.866C70.7876 185.987 71.0538 186.165 71.278 186.389C71.5022 186.613 71.68 186.88 71.8013 187.173C71.9227 187.466 71.9851 187.779 71.9851 188.097C71.9851 188.414 71.9227 188.728 71.8013 189.02C71.68 189.313 71.5022 189.58 71.278 189.804C71.0538 190.028 70.7876 190.206 70.4947 190.327C70.2017 190.448 69.8878 190.511 69.5707 190.511Z"
357
+ />
358
+ </svg>
359
+ )
360
+ }
361
+
362
+ /**
363
+ * The default copy, English and Arabic, as `locale` picks it. Spread it to
364
+ * change a few strings and keep the rest.
365
+ */
366
+ export const authCheckYourEmailCopy = COPY
@@ -0,0 +1,7 @@
1
+ export {
2
+ AuthCheckYourEmail,
3
+ authCheckYourEmailCopy,
4
+ type AuthCheckYourEmailLink,
5
+ type AuthCheckYourEmailCopy,
6
+ type AuthCheckYourEmailProps,
7
+ } from "./AuthCheckYourEmail"
@@ -0,0 +1,265 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { ArrowLeft, Building2, Check, CircleHelp, KeyRound, Mail } from "lucide-react"
5
+ import { cn } from "../../../src/lib/utils"
6
+ import { Button } from "../../ui/button/button"
7
+ import { Input } from "../../ui/input/input"
8
+
9
+ /*
10
+ * Figma: `Authentications` (42586:4669), Type=Forgot Password.
11
+ *
12
+ * One column on a plain page: a link back to sign in, a key tile, the heading,
13
+ * an email field and Send reset link, then a rule and two ways to get help.
14
+ *
15
+ * Mobile first: the base classes are Figma's Mobile (360), `md:` its Tablet
16
+ * (768) and `lg:` its Desktop (1440). The column keeps 400px from Tablet up
17
+ * and fills the width on a phone, where the heading steps down. Direction is
18
+ * the page's `dir`; every side is a logical one, and the back arrow mirrors.
19
+ */
20
+
21
+ export interface AuthForgotPasswordLink {
22
+ label: React.ReactNode
23
+ href: string
24
+ }
25
+
26
+ export interface AuthForgotPasswordHelpLink extends AuthForgotPasswordLink {
27
+ /** A 14px glyph before the label. */
28
+ icon?: React.ReactNode
29
+ }
30
+
31
+ export interface AuthForgotPasswordCopy {
32
+ /** The link over the heading, back to sign in. Hidden when null. */
33
+ backLink: AuthForgotPasswordLink | null
34
+ /** The page's heading, an `h1`. */
35
+ heading: React.ReactNode
36
+ /** The line under the heading. Hidden when empty. */
37
+ description: React.ReactNode
38
+ emailLabel: React.ReactNode
39
+ emailPlaceholder: string
40
+ submitLabel: React.ReactNode
41
+ /** Read out while `onSubmit` runs. */
42
+ pendingLabel: string
43
+ /** The button's label for a moment once the link is sent. */
44
+ sentLabel: React.ReactNode
45
+ /** Shown under the button when `onSubmit` rejects. */
46
+ error: React.ReactNode
47
+ /** The small heading over the help links. */
48
+ helpHeading: React.ReactNode
49
+ /** The ways to get help under the rule. The rule and the list are hidden when empty. */
50
+ helpLinks: AuthForgotPasswordHelpLink[]
51
+ }
52
+
53
+ const ICON = { size: 14, strokeWidth: 1.5, absoluteStrokeWidth: true, "aria-hidden": true, className: "size-3.5 shrink-0" } as const
54
+
55
+ /** Figma's copy, English and Arabic. */
56
+ const COPY: Record<"en" | "ar", AuthForgotPasswordCopy> = {
57
+ en: {
58
+ backLink: { label: "Back to sign in", href: "#sign-in" },
59
+ heading: "Forgot your password?",
60
+ description: "Enter the email you use for Fasla and we will send you a link to set a new password.",
61
+ emailLabel: "Email address",
62
+ emailPlaceholder: "you@company.com",
63
+ submitLabel: "Send reset link",
64
+ pendingLabel: "Sending the link",
65
+ sentLabel: "Link sent",
66
+ error: "We couldn’t send the link. Check the email address and try again.",
67
+ helpHeading: "Still stuck?",
68
+ helpLinks: [
69
+ { label: "Contact support", href: "#support", icon: <CircleHelp {...ICON} /> },
70
+ { label: "Sign in with your organisation (SSO)", href: "#sso", icon: <Building2 {...ICON} /> },
71
+ ],
72
+ },
73
+ ar: {
74
+ backLink: { label: "العودة إلى تسجيل الدخول", href: "#sign-in" },
75
+ heading: "نسيت كلمة المرور؟",
76
+ description: "أدخل البريد الإلكتروني الذي تستخدمه في فاصلة، وسنرسل إليك رابطًا لتعيين كلمة مرور جديدة.",
77
+ emailLabel: "البريد الإلكتروني",
78
+ emailPlaceholder: "you@company.com",
79
+ submitLabel: "إرسال رابط إعادة التعيين",
80
+ pendingLabel: "جارٍ إرسال الرابط",
81
+ sentLabel: "أُرسل الرابط",
82
+ error: "تعذّر إرسال الرابط. تحقّق من البريد الإلكتروني ثم حاول مجددًا.",
83
+ helpHeading: "ما زلت تواجه مشكلة؟",
84
+ helpLinks: [
85
+ { label: "تواصل مع الدعم", href: "#support", icon: <CircleHelp {...ICON} /> },
86
+ {
87
+ label: (
88
+ <>
89
+ سجّل الدخول عبر مؤسستك (<bdi dir="ltr">SSO</bdi>)
90
+ </>
91
+ ),
92
+ href: "#sso",
93
+ icon: <Building2 {...ICON} />,
94
+ },
95
+ ],
96
+ },
97
+ }
98
+
99
+ export interface AuthForgotPasswordProps
100
+ extends Omit<React.HTMLAttributes<HTMLElement>, "title" | "onSubmit">,
101
+ Partial<AuthForgotPasswordCopy> {
102
+ /** Which language the default copy is in. The page's `dir` sets the direction. */
103
+ locale?: "en" | "ar"
104
+ /**
105
+ * Runs when the form is sent, with the email. While its promise is pending
106
+ * the button shows its spinner; once it resolves the button says
107
+ * `sentLabel` for a moment. A rejection shows `error`.
108
+ */
109
+ onSubmit?: (values: { email: string }) => Promise<void> | void
110
+ }
111
+
112
+ const LINK =
113
+ "rounded-sm underline-offset-4 hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring"
114
+
115
+ /** How long the button says the link was sent before it can send again. */
116
+ const SENT_MS = 1200
117
+
118
+ /**
119
+ * Figma's entrance: the column fades in and rises 10px, its parts 60ms apart.
120
+ * Runs once; skipped under prefers-reduced-motion.
121
+ */
122
+ function useEntrance(ref: React.RefObject<HTMLElement | null>, { rise = 10, duration = 320, stagger = 60 } = {}) {
123
+ React.useLayoutEffect(() => {
124
+ const root = ref.current
125
+ if (!root || typeof root.animate !== "function") return
126
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return
127
+ const parts = Array.from(root.querySelectorAll<HTMLElement>("[data-entrance]"))
128
+ const animations = parts.map((part, index) =>
129
+ part.animate(
130
+ [{ opacity: 0, transform: `translateY(${rise}px)` }, { opacity: 1, transform: "none" }],
131
+ { duration, delay: index * stagger, easing: "cubic-bezier(0, 0, 0.2, 1)", fill: "backwards" }
132
+ )
133
+ )
134
+ return () => animations.forEach((animation) => animation.cancel())
135
+ }, [ref, rise, duration, stagger])
136
+ }
137
+
138
+ export function AuthForgotPassword({
139
+ locale = "en",
140
+ backLink,
141
+ heading,
142
+ description,
143
+ emailLabel,
144
+ emailPlaceholder,
145
+ submitLabel,
146
+ pendingLabel,
147
+ sentLabel,
148
+ error,
149
+ helpHeading,
150
+ helpLinks,
151
+ onSubmit,
152
+ className,
153
+ ...props
154
+ }: AuthForgotPasswordProps) {
155
+ const copy = COPY[locale]
156
+ const headingId = React.useId()
157
+ const columnRef = React.useRef<HTMLDivElement>(null)
158
+ const [status, setStatus] = React.useState<"idle" | "pending" | "sent" | "error">("idle")
159
+ const back = backLink === undefined ? copy.backLink : backLink
160
+ const subline = description ?? copy.description
161
+ const help = helpLinks ?? copy.helpLinks
162
+ useEntrance(columnRef)
163
+
164
+ React.useEffect(() => {
165
+ if (status !== "sent") return
166
+ const timer = window.setTimeout(() => setStatus("idle"), SENT_MS)
167
+ return () => window.clearTimeout(timer)
168
+ }, [status])
169
+
170
+ const submit = async (event: React.FormEvent<HTMLFormElement>) => {
171
+ event.preventDefault()
172
+ if (!onSubmit) return
173
+ const data = new FormData(event.currentTarget)
174
+ setStatus("pending")
175
+ try {
176
+ await onSubmit({ email: String(data.get("email") ?? "") })
177
+ setStatus("sent")
178
+ } catch {
179
+ setStatus("error")
180
+ }
181
+ }
182
+
183
+ return (
184
+ <section aria-labelledby={headingId} className={cn("flex justify-center bg-background p-8 md:p-16 lg:p-24", className)} {...props}>
185
+ <div ref={columnRef} className="flex w-full flex-col items-start gap-8 md:max-w-[400px]">
186
+ {back ? (
187
+ <a data-entrance="" href={back.href} className={cn("flex items-center gap-1.5 text-sm font-medium text-muted-foreground hover:text-foreground", LINK)}>
188
+ <ArrowLeft size={15} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" className="size-[15px] shrink-0 rtl:-scale-x-100" />
189
+ {back.label}
190
+ </a>
191
+ ) : null}
192
+
193
+ <div data-entrance="" className="flex w-full flex-col items-start gap-2">
194
+ <div className="flex size-[52px] items-center justify-center rounded-md bg-muted text-foreground">
195
+ <KeyRound size={24} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" className="size-6" />
196
+ </div>
197
+ <h1 id={headingId} className="text-2xl font-semibold text-foreground md:text-3xl">
198
+ {heading ?? copy.heading}
199
+ </h1>
200
+ {subline ? <p className="text-sm text-muted-foreground">{subline}</p> : null}
201
+ </div>
202
+
203
+ <form data-entrance="" onSubmit={submit} className="w-full">
204
+ <fieldset disabled={status === "pending"} className="flex w-full min-w-0 flex-col gap-4">
205
+ <Input
206
+ type="email"
207
+ name="email"
208
+ autoComplete="email"
209
+ required
210
+ label={emailLabel ?? copy.emailLabel}
211
+ placeholder={emailPlaceholder ?? copy.emailPlaceholder}
212
+ startIcon={<Mail size={16} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" />}
213
+ />
214
+ <Button
215
+ type="submit"
216
+ loading={status === "pending"}
217
+ loadingLabel={pendingLabel ?? copy.pendingLabel}
218
+ aria-disabled={status === "sent" || undefined}
219
+ onClick={(event) => status === "sent" && event.preventDefault()}
220
+ className="w-full"
221
+ >
222
+ {status === "sent" ? (
223
+ <>
224
+ <Check size={16} strokeWidth={1.5} absoluteStrokeWidth aria-hidden="true" />
225
+ {sentLabel ?? copy.sentLabel}
226
+ </>
227
+ ) : (
228
+ (submitLabel ?? copy.submitLabel)
229
+ )}
230
+ </Button>
231
+ <p role="status" className="text-sm text-destructive empty:hidden">
232
+ {status === "error" ? (error ?? copy.error) : null}
233
+ </p>
234
+ </fieldset>
235
+ </form>
236
+
237
+ {help.length > 0 ? (
238
+ <>
239
+ {/* Separator: swap for the Separator component once it ships. */}
240
+ <div data-separator="" aria-hidden="true" className="h-px w-full shrink-0 bg-border" />
241
+ <nav data-entrance="" aria-label={typeof (helpHeading ?? copy.helpHeading) === "string" ? String(helpHeading ?? copy.helpHeading) : undefined} className="flex w-full flex-col gap-2.5">
242
+ <p className="text-xs font-semibold text-muted-foreground">{helpHeading ?? copy.helpHeading}</p>
243
+ <ul className="flex flex-col gap-2.5">
244
+ {help.map((link, index) => (
245
+ <li key={index}>
246
+ <a href={link.href} className={cn("inline-flex items-center gap-2 text-sm font-medium text-foreground", LINK)}>
247
+ {link.icon}
248
+ <span>{link.label}</span>
249
+ </a>
250
+ </li>
251
+ ))}
252
+ </ul>
253
+ </nav>
254
+ </>
255
+ ) : null}
256
+ </div>
257
+ </section>
258
+ )
259
+ }
260
+
261
+ /**
262
+ * The default copy, English and Arabic, as `locale` picks it. Spread it to
263
+ * change a few strings and keep the rest.
264
+ */
265
+ export const authForgotPasswordCopy = COPY
@@ -0,0 +1,8 @@
1
+ export {
2
+ AuthForgotPassword,
3
+ authForgotPasswordCopy,
4
+ type AuthForgotPasswordLink,
5
+ type AuthForgotPasswordHelpLink,
6
+ type AuthForgotPasswordCopy,
7
+ type AuthForgotPasswordProps,
8
+ } from "./AuthForgotPassword"