@smicolon/fasla-ui 0.6.0 → 0.7.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 +2284 -194
  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,218 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { Play, X } from "lucide-react"
5
+ import { cn } from "../../../src/lib/utils"
6
+ import { Button, buttonVariants } from "../../ui/button/button"
7
+ import {
8
+ Isolated,
9
+ SocialProofAuthor,
10
+ SocialProofPhoto,
11
+ SocialProofQuote,
12
+ SocialProofSection,
13
+ SocialProofStars,
14
+ useVideoPlayback,
15
+ type SocialProofLocale,
16
+ type SocialProofPerson,
17
+ type SocialProofPhotos,
18
+ } from "../social-proof/social-proof"
19
+
20
+ /*
21
+ * Figma: `Social Proof` (46368:3361), Type=Proof Bento.
22
+ *
23
+ * A header with a `See all case studies` button (Ghost, xs) at its end, over
24
+ * a bento of five tiles in two rows: a wide `primary` tint holding the
25
+ * featured quote and its author beside a `primary` stat tile (figure, label,
26
+ * company); then a `warning` rating tile (five stars, 4.9, the review count),
27
+ * a `card` quote tile with its author, and a video tile, a photo with a play
28
+ * button and a pill saying whose story it is and how long. Phones stack the
29
+ * five tiles in one column.
30
+ *
31
+ * Motion (Figma's ⚡ Motion note): the play button on the video tile starts the
32
+ * story only when the reader clicks or taps it: no hover preview, no autoplay
33
+ * and no pulse. On click the tile swaps its photo for the video with a fade
34
+ * (fadeIn, 180ms). The rest of the bento stays still. Reduced motion: opacity
35
+ * only, 120ms. In RTL the bento mirrors, so on Desktop and Tablet the video
36
+ * tile moves to the opposite end of its row; on Mobile it stays last. The play
37
+ * glyph is not mirrored.
38
+ *
39
+ * Figma shows the poster only; the playing state, with the video's own
40
+ * controls and a button that closes it, is the block's. The video plays when
41
+ * you pass `videoSrc`.
42
+ */
43
+
44
+ export interface SocialProofProofBentoCopy {
45
+ /** Up to 46 characters in English, 40 in Arabic. */
46
+ heading: React.ReactNode
47
+ /** Up to 25 characters in English, 26 in Arabic. */
48
+ button: React.ReactNode
49
+ /** The wide tile. Its quote is up to 290 characters in English, 284 in Arabic. */
50
+ featured: { quote: React.ReactNode; author: SocialProofPerson }
51
+ /** The figure is up to 5 characters in English, 9 in Arabic; the label up to 60 in English, 56 in Arabic; the company up to 20. */
52
+ stat: { value: string; label: React.ReactNode; company: React.ReactNode }
53
+ rating: { value: string; label: React.ReactNode }
54
+ /** The card tile. Its quote is up to 154 characters in English, 136 in Arabic. */
55
+ quote: { quote: React.ReactNode; author: SocialProofPerson }
56
+ /** The pill on the video tile: a short title and a duration, one line, about 30 characters in English and 24 in Arabic. */
57
+ videoLabel: React.ReactNode
58
+ /** The key in `photos` for the video tile's poster. */
59
+ posterId: string
60
+ }
61
+
62
+ const p = (id: string, name: string, role: string): SocialProofPerson => ({ id, name, role })
63
+
64
+ const COPY: Record<SocialProofLocale, SocialProofProofBentoCopy> = {
65
+ en: {
66
+ heading: "Every kind of proof, one glance",
67
+ button: "See all case studies",
68
+ featured: {
69
+ quote: "“We consolidated three design tools and an entire QA checklist into one system. Fasla is the rare platform both our brand team and our engineers call theirs.”",
70
+ author: p("fahad-salem", "Fahad Salem", "Brand Director, Arvenna Bank"),
71
+ },
72
+ stat: { value: "6×", label: "faster brand theming since switching", company: "COBALT SYSTEMS" },
73
+ rating: { value: "4.9", label: "Average across 812 verified reviews" },
74
+ quote: { quote: "“Zero regressions in the migration quarter. QA signed off early.”", author: p("khalid-saad", "Khalid Saad", "Frontend Lead, Atlas Freight") },
75
+ videoLabel: "Watch the story · 2:14",
76
+ posterId: "proof-bento-video",
77
+ },
78
+ ar: {
79
+ heading: "كل أشكال الإثبات في نظرة واحدة",
80
+ button: "اعرض كل دراسات الحالة",
81
+ featured: {
82
+ quote: "«دمجنا ثلاث أدوات تصميم وقائمة فحص جودة كاملة في نظام واحد. وفاصلة من المنصات النادرة التي يعدّها فريق العلامة والمهندسون أداتهم.»",
83
+ author: p("fahad-salem", "فهد سالم", "مدير العلامة التجارية، بنك أرفينا"),
84
+ },
85
+ stat: { value: "6×", label: "أسرع في تطبيق سمات العلامة منذ الانتقال", company: "كوبالت سيستمز" },
86
+ rating: { value: "4.9", label: "متوسط 812 تقييمًا موثّقًا" },
87
+ quote: { quote: "«لا تراجعات في ربع الانتقال، ووافق فريق الجودة مبكرًا.»", author: p("khalid-saad", "خالد سعد", "قائد الواجهات الأمامية، أطلس فريت") },
88
+ videoLabel: "شاهد القصة، 2:14",
89
+ posterId: "proof-bento-video",
90
+ },
91
+ }
92
+
93
+ export interface SocialProofProofBentoProps extends Omit<React.HTMLAttributes<HTMLElement>, "title">, Partial<SocialProofProofBentoCopy> {
94
+ /** Which language the default copy is in. The page's `dir` sets the direction. */
95
+ locale?: SocialProofLocale
96
+ /** Avatar photos by person id, and the video tile's poster by its `posterId`. */
97
+ photos?: SocialProofPhotos
98
+ /** The video the tile plays. Without it the tile is a still. */
99
+ videoSrc?: string
100
+ /** The file's media type, such as "video/mp4". */
101
+ videoType?: string
102
+ /** Where the header button goes. */
103
+ href?: string
104
+ }
105
+
106
+ export function SocialProofProofBento({
107
+ locale = "en",
108
+ heading,
109
+ button,
110
+ featured,
111
+ stat,
112
+ rating,
113
+ quote,
114
+ videoLabel,
115
+ posterId,
116
+ photos,
117
+ videoSrc,
118
+ videoType,
119
+ href = "#",
120
+ className,
121
+ ...props
122
+ }: SocialProofProofBentoProps) {
123
+ const copy = COPY[locale]
124
+ const headingId = React.useId()
125
+ const f = featured ?? copy.featured
126
+ const s = stat ?? copy.stat
127
+ const r = rating ?? copy.rating
128
+ const q = quote ?? copy.quote
129
+ const { videoRef, playRef, started, play, stop, labels, available } = useVideoPlayback(videoSrc, locale)
130
+ const label = videoLabel ?? copy.videoLabel
131
+ const poster = photos?.[posterId ?? copy.posterId]
132
+ const videoId = React.useId()
133
+
134
+ return (
135
+ <SocialProofSection labelledBy={headingId} className={className} contentClassName="items-stretch gap-10" {...props}>
136
+ <header className="flex w-full items-center justify-between gap-6 [@container(min-width:64rem)]:gap-12">
137
+ <h2 id={headingId} className="text-2xl font-semibold text-foreground [@container(min-width:40rem)]:text-3xl">
138
+ {heading ?? copy.heading}
139
+ </h2>
140
+ <a href={href} className={buttonVariants({ variant: "ghost", size: "xs", className: "shrink-0" })}>
141
+ {button ?? copy.button}
142
+ </a>
143
+ </header>
144
+ <div className="flex w-full flex-col gap-6">
145
+ <div className="flex flex-col gap-6 [@container(min-width:40rem)]:flex-row">
146
+ <figure className="m-0 flex min-w-0 flex-col justify-between gap-6 rounded-xl bg-primary/10 p-8 [@container(min-width:40rem)]:min-h-[220px] [@container(min-width:40rem)]:flex-[2] [@container(min-width:64rem)]:min-h-[280px] [@container(min-width:64rem)]:flex-[784]">
147
+ <SocialProofQuote quote={f.quote} className="text-lg font-medium text-foreground [@container(min-width:64rem)]:text-xl" />
148
+ <SocialProofAuthor person={f.author} photos={photos} />
149
+ </figure>
150
+ <div className="flex flex-col justify-between gap-6 rounded-xl bg-primary p-8 text-primary-foreground [@container(min-width:40rem)]:flex-1 [@container(min-width:64rem)]:flex-[408]">
151
+ <p className="flex flex-col gap-1">
152
+ <span className="text-6xl font-semibold">
153
+ <Isolated>{s.value}</Isolated>
154
+ </span>
155
+ <span className="text-base">
156
+ <Isolated>{s.label}</Isolated>
157
+ </span>
158
+ </p>
159
+ <p className="text-xs font-medium">
160
+ <bdi>{s.company}</bdi>
161
+ </p>
162
+ </div>
163
+ </div>
164
+ <div className="flex flex-col gap-6 [@container(min-width:40rem)]:flex-row [&>*]:min-w-0 [&>*]:flex-1">
165
+ <div className="flex min-h-[240px] flex-col items-center justify-center gap-3 rounded-xl bg-warning/10 p-6 text-center">
166
+ <SocialProofStars locale={locale} className="[&_svg]:size-6" />
167
+ <p className="text-5xl font-semibold text-foreground">
168
+ <Isolated>{r.value}</Isolated>
169
+ </p>
170
+ <p className="text-sm text-muted-foreground">
171
+ <Isolated>{r.label}</Isolated>
172
+ </p>
173
+ </div>
174
+ <figure className="m-0 flex min-h-[240px] flex-col justify-between gap-6 rounded-xl border border-border bg-card p-6">
175
+ <SocialProofQuote quote={q.quote} className="text-base text-foreground" />
176
+ <SocialProofAuthor person={q.author} photos={photos} />
177
+ </figure>
178
+ <div className={cn("relative isolate flex min-h-[240px] flex-col items-center justify-between overflow-hidden rounded-xl bg-muted p-5", started && "bg-background-inverse")} role="group" aria-labelledby={videoId}>
179
+ {started && videoSrc ? (
180
+ <video ref={videoRef} controls playsInline preload="metadata" aria-labelledby={videoId} className="absolute inset-0 -z-10 size-full object-contain">
181
+ <source src={videoSrc} type={videoType} />
182
+ </video>
183
+ ) : (
184
+ <SocialProofPhoto src={poster} className="absolute inset-0 -z-10" />
185
+ )}
186
+ {started ? (
187
+ <Button type="button" variant="secondary" size="icon-sm" radius="rounded" aria-label={labels.stop} onClick={stop} className="self-end">
188
+ <X aria-hidden />
189
+ </Button>
190
+ ) : (
191
+ <>
192
+ <div className="flex flex-1 items-center justify-center">
193
+ <Button ref={playRef} type="button" variant="secondary" size="icon-md" radius="rounded" aria-label={labels.play} aria-describedby={videoId} aria-disabled={available ? undefined : true} onClick={play}>
194
+ <Play aria-hidden fill="currentColor" />
195
+ </Button>
196
+ </div>
197
+ <p id={videoId} className="whitespace-nowrap rounded-lg bg-background px-2.5 py-1.5 text-xs font-medium text-foreground">
198
+ <Isolated>{label}</Isolated>
199
+ </p>
200
+ </>
201
+ )}
202
+ {started ? (
203
+ <p id={videoId} className="sr-only">
204
+ {label}
205
+ </p>
206
+ ) : null}
207
+ </div>
208
+ </div>
209
+ </div>
210
+ </SocialProofSection>
211
+ )
212
+ }
213
+
214
+ /**
215
+ * The default copy, English and Arabic, as `locale` picks it. Spread it to
216
+ * change a few strings and keep the rest.
217
+ */
218
+ export const socialProofProofBentoCopy = COPY
@@ -0,0 +1,6 @@
1
+ export {
2
+ SocialProofProofBento,
3
+ socialProofProofBentoCopy,
4
+ type SocialProofProofBentoCopy,
5
+ type SocialProofProofBentoProps,
6
+ } from "./SocialProofProofBento"
@@ -0,0 +1,212 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { cn } from "../../../src/lib/utils"
5
+ import { Avatar } from "../../ui/avatar/avatar"
6
+ import { CarouselDots } from "../../ui/carousel/carousel"
7
+ import {
8
+ Isolated,
9
+ SocialProofQuote,
10
+ SocialProofSection,
11
+ SocialProofStepper,
12
+ stepKeys,
13
+ useStepper,
14
+ useSwipeStep,
15
+ type SocialProofLocale,
16
+ type SocialProofPerson,
17
+ type SocialProofPhotos,
18
+ } from "../social-proof/social-proof"
19
+
20
+ /*
21
+ * Figma: `Social Proof` (46368:3361), Type=Spotlight Carousel.
22
+ *
23
+ * One quote at a time, centred in 2XL (XL on phones), the author under it
24
+ * with the Avatar drawn at 56px, previous and next arrows (Icon Button,
25
+ * Outline xs) either side, and the Carousel dots under it. On phones the
26
+ * arrows drop below the quote, either side of the dots.
27
+ *
28
+ * Motion (Figma's ⚡ Motion note): arrows and dots step through four quotes,
29
+ * one at a time. Manual only: no autoplay, no timer, and paging stops at the
30
+ * first and last quote instead of wrapping, so previous is disabled on the
31
+ * first. On change the outgoing quote fades out and the new quote, avatar and
32
+ * name slide up 10px with a fade (slideUp, 180ms); the active dot stretches
33
+ * to a pill. The arrow keys move between quotes; Tab reaches the arrows and
34
+ * the dots. On phones, swiping the quote also steps. Reduced motion: opacity
35
+ * only, 120ms. In RTL the first quote is the rightmost dot, and the left
36
+ * arrow goes to the next quote.
37
+ *
38
+ * Figma shows the first quote. The other three are quotes the same people
39
+ * give elsewhere in the set: Tariq Zaki's from Centered Logo Spotlight, Ziad
40
+ * Karam's from Overlay Photo Quote and Yousef Amin's from Dark Editorial
41
+ * Split.
42
+ */
43
+
44
+ export interface SocialProofSpotlightCarouselItem {
45
+ /** Up to 164 characters in English, 133 in Arabic. */
46
+ quote: React.ReactNode
47
+ author: SocialProofPerson
48
+ }
49
+
50
+ export interface SocialProofSpotlightCarouselCopy {
51
+ /** Names the carousel for assistive tech. */
52
+ label: string
53
+ /** The quotes, in order. Four, as Figma's dots count them. */
54
+ items: SocialProofSpotlightCarouselItem[]
55
+ }
56
+
57
+ const p = (id: string, name: string, role: string): SocialProofPerson => ({ id, name, role })
58
+
59
+ /** Figma's copy, English and Arabic. Every person and company is invented. */
60
+ const COPY: Record<SocialProofLocale, SocialProofSpotlightCarouselCopy> = {
61
+ en: {
62
+ label: "Customer quotes",
63
+ items: [
64
+ {
65
+ quote: "“Support tickets about visual bugs dropped to almost zero. Our team finally talks about features, not fixes.”",
66
+ author: p("rashed-al-amri", "Rashed Al-Amri", "Design Ops Manager, Willow & Co"),
67
+ },
68
+ {
69
+ quote: "“Fasla turned our design language into a growth channel. Every launch ships looking exactly like us — on the first try.”",
70
+ author: p("tariq-zaki", "Tariq Zaki", "Head of Product, Marlow HR"),
71
+ },
72
+ {
73
+ quote: "“Half our team works from the field. Fasla is why the app they carry looks as considered as the site we pitch with.”",
74
+ author: p("ziad-karam", "Ziad Karam", "CEO, Quillfield"),
75
+ },
76
+ {
77
+ quote: "“Fasla set a new bar for quality — and the team hit it while shipping ahead of schedule.”",
78
+ author: p("yousef-amin", "Yousef Amin", "Co-founder, Halcyon Games"),
79
+ },
80
+ ],
81
+ },
82
+ ar: {
83
+ label: "اقتباسات العملاء",
84
+ items: [
85
+ {
86
+ quote: "«كادت بلاغات الأخطاء البصرية تختفي من الدعم، وصار فريقنا يناقش الميزات أخيرًا لا الإصلاحات.»",
87
+ author: p("rashed-al-amri", "راشد العمري", "مدير عمليات التصميم، ويلو آند كو"),
88
+ },
89
+ {
90
+ quote: "«جعلت فاصلة هويتنا البصرية مصدرًا للنمو، فكل إطلاق يخرج بصورتنا تمامًا من المحاولة الأولى.»",
91
+ author: p("tariq-zaki", "طارق زكي", "رئيس المنتج، مارلو إتش آر"),
92
+ },
93
+ {
94
+ quote: "«نصف فريقنا يعمل في الميدان، وبفضل فاصلة يبدو التطبيق الذي يستخدمونه متقنًا كموقعنا الذي نقدّم به عروضنا.»",
95
+ author: p("ziad-karam", "زياد كرم", "الرئيس التنفيذي، كويلفيلد"),
96
+ },
97
+ {
98
+ quote: "«رفعت فاصلة سقف الجودة، وبلغه الفريق وأطلق قبل موعده.»",
99
+ author: p("yousef-amin", "يوسف أمين", "شريك مؤسس، هالسيون غيمز"),
100
+ },
101
+ ],
102
+ },
103
+ }
104
+
105
+ /** Each dot's accessible name, per language. */
106
+ const DOT_LABEL: Record<SocialProofLocale, (index: number, count: number) => string> = {
107
+ en: (index, count) => `Quote ${index + 1} of ${count}`,
108
+ ar: (index, count) => `الاقتباس ${index + 1} من ${count}`,
109
+ }
110
+
111
+ export interface SocialProofSpotlightCarouselProps
112
+ extends Omit<React.HTMLAttributes<HTMLElement>, "title">,
113
+ Partial<SocialProofSpotlightCarouselCopy> {
114
+ /** Which language the default copy is in. The page's `dir` sets the direction. */
115
+ locale?: SocialProofLocale
116
+ /** Avatar photos by person id. Without them the avatars show initials. */
117
+ photos?: SocialProofPhotos
118
+ /** The quote shown, from 0, to control the carousel. */
119
+ index?: number
120
+ /** Called when the arrows, dots, keys or a swipe change the quote. */
121
+ onIndexChange?: (index: number) => void
122
+ }
123
+
124
+ export function SocialProofSpotlightCarousel({
125
+ locale = "en",
126
+ label,
127
+ items,
128
+ photos,
129
+ index: indexProp,
130
+ onIndexChange,
131
+ className,
132
+ ...props
133
+ }: SocialProofSpotlightCarouselProps) {
134
+ const copy = COPY[locale]
135
+ const list = items ?? copy.items
136
+ const slideId = React.useId()
137
+ const { ref, index, go } = useStepper<HTMLDivElement>({ count: list.length, index: indexProp, onIndexChange })
138
+ const swipe = useSwipeStep((delta) => go(index + delta))
139
+ const item = list[index]
140
+ if (!item) return null
141
+
142
+ return (
143
+ <SocialProofSection
144
+ aria-label={label ?? copy.label}
145
+ aria-roledescription="carousel"
146
+ className={cn("lg:px-24", className)}
147
+ contentClassName="max-w-[1248px]"
148
+ onKeyDown={stepKeys(index, list.length, go)}
149
+ {...props}
150
+ >
151
+ <div
152
+ className={cn(
153
+ "grid w-full items-center gap-x-5 gap-y-10 [grid-template-areas:'slide_slide_slide_slide_slide'_'._prev_dots_next_.'] [grid-template-columns:1fr_auto_auto_auto_1fr]",
154
+ "[@container(min-width:40rem)]:gap-x-10 [@container(min-width:40rem)]:px-4 [@container(min-width:40rem)]:[grid-template-areas:'prev_slide_next'_'._dots_.'] [@container(min-width:40rem)]:[grid-template-columns:auto_1fr_auto]",
155
+ "[@container(min-width:64rem)]:px-16"
156
+ )}
157
+ >
158
+ <SocialProofStepper
159
+ index={index}
160
+ count={list.length}
161
+ onIndexChange={go}
162
+ locale={locale}
163
+ variant="outline"
164
+ controls={slideId}
165
+ className="contents [&>*:first-child]:[grid-area:prev] [&>*:last-child]:[grid-area:next]"
166
+ />
167
+ <div
168
+ ref={ref}
169
+ id={slideId}
170
+ role="group"
171
+ aria-roledescription="slide"
172
+ aria-label={DOT_LABEL[locale](index, list.length)}
173
+ aria-live="polite"
174
+ tabIndex={0}
175
+ className="rounded-md [grid-area:slide] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
176
+ {...swipe}
177
+ >
178
+ <figure className="m-0 flex flex-col items-center gap-8 text-center">
179
+ <SocialProofQuote
180
+ key={`quote-${index}`}
181
+ data-step-item="slide"
182
+ quote={item.quote}
183
+ className="text-xl text-foreground [@container(min-width:40rem)]:text-2xl"
184
+ />
185
+ <figcaption key={`author-${index}`} data-step-item="slide" className="flex flex-col items-center gap-2">
186
+ <Avatar aria-hidden size="32" radius="rounded" src={photos?.[item.author.id]} name={item.author.name} className="size-14" />
187
+ <span className="flex flex-col">
188
+ <cite className="text-sm font-medium not-italic text-foreground">{item.author.name}</cite>
189
+ <span className="text-xs text-muted-foreground">
190
+ <Isolated>{item.author.role}</Isolated>
191
+ </span>
192
+ </span>
193
+ </figcaption>
194
+ </figure>
195
+ </div>
196
+ <CarouselDots
197
+ count={list.length}
198
+ activeIndex={index}
199
+ onActiveIndexChange={go}
200
+ label={DOT_LABEL[locale]}
201
+ className="[grid-area:dots]"
202
+ />
203
+ </div>
204
+ </SocialProofSection>
205
+ )
206
+ }
207
+
208
+ /**
209
+ * The default copy, English and Arabic, as `locale` picks it. Spread it to
210
+ * change a few strings and keep the rest.
211
+ */
212
+ export const socialProofSpotlightCarouselCopy = COPY
@@ -0,0 +1,7 @@
1
+ export {
2
+ SocialProofSpotlightCarousel,
3
+ socialProofSpotlightCarouselCopy,
4
+ type SocialProofSpotlightCarouselCopy,
5
+ type SocialProofSpotlightCarouselProps,
6
+ type SocialProofSpotlightCarouselItem,
7
+ } from "./SocialProofSpotlightCarousel"
@@ -0,0 +1,227 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import { cn } from "../../../src/lib/utils"
5
+ import {
6
+ Isolated,
7
+ SocialProofAuthor,
8
+ SocialProofQuote,
9
+ SocialProofSection,
10
+ STAGGERED_DRIFT_SPEED,
11
+ driftDuration,
12
+ toColumns,
13
+ useCanDrift,
14
+ useColumnCount,
15
+ useDrift,
16
+ type SocialProofLocale,
17
+ type SocialProofPerson,
18
+ type SocialProofPhotos,
19
+ } from "../social-proof/social-proof"
20
+
21
+ /*
22
+ * Figma: `Social Proof` (46368:3361), Type=Staggered Columns.
23
+ *
24
+ * A header with the heading at the start and a short line at the end, over
25
+ * six quote cards in staggered columns: the author first, then the quote, on
26
+ * a `secondary` card. Desktop has three columns of two, the middle column set
27
+ * 56px lower; Tablet two columns of three, the second set lower, the cards
28
+ * dealt into them in turn; phones one column. Each column is its own stack,
29
+ * so a longer quote pushes down only the cards under it.
30
+ *
31
+ * Motion (Figma's ⚡ Motion note): the columns drift continuously one way,
32
+ * alternating by column: the first up, the second down, the third up, linear,
33
+ * at about 40px per second (`STAGGERED_DRIFT_SPEED`) and looping without a
34
+ * seam. Each column is its own window, as Figma's column frames are: it clips
35
+ * what drifts past its top and bottom, and holds its cards again below (the
36
+ * repeat, hidden from assistive technology and out of the Tab order) so the
37
+ * wrap is invisible. At the start of a loop the layout is the resting one,
38
+ * the middle column 56px lower. It
39
+ * runs only while the block is in the viewport, pauses while the pointer is
40
+ * over it or focus is inside it, and stands still with reduced motion. Tablet
41
+ * drifts the same way; phones stack one column, which stays still. In RTL the
42
+ * column order mirrors and the vertical directions do not change.
43
+ */
44
+
45
+ export interface SocialProofStaggeredColumnsItem {
46
+ /** Up to 154 characters in English, 136 in Arabic. */
47
+ quote: React.ReactNode
48
+ author: SocialProofPerson
49
+ }
50
+
51
+ export interface SocialProofStaggeredColumnsCopy {
52
+ heading: React.ReactNode
53
+ /** The line at the end of the header. Hidden when empty. */
54
+ description: React.ReactNode
55
+ /** The cards, in reading order. Six, as Figma lays them out. */
56
+ items: SocialProofStaggeredColumnsItem[]
57
+ }
58
+
59
+ /** Figma's copy, English and Arabic. Every person and company is invented. */
60
+ const COPY: Record<SocialProofLocale, SocialProofStaggeredColumnsCopy> = {
61
+ en: {
62
+ heading: "Word travels between teams",
63
+ description: "Six teams, six stories — same system underneath.",
64
+ items: [
65
+ {
66
+ quote: "“The theming engine paid for itself the week a client asked for white-label. We said yes in the same meeting.”",
67
+ author: { id: "bader-al-ghamdi", name: "Bader Al-Ghamdi", role: "CTO, Beacon Analytics" },
68
+ },
69
+ {
70
+ quote: "“Quillfield looks like a company three times our size. Two designers, one system, zero excuses.”",
71
+ author: { id: "ziad-karam", name: "Ziad Karam", role: "CEO, Quillfield" },
72
+ },
73
+ {
74
+ quote: "“I benchmarked the bundle before and after. Lighter, faster, and somehow prettier.”",
75
+ author: { id: "hani-jaber", name: "Hani Jaber", role: "Staff Engineer, Clearfen" },
76
+ },
77
+ {
78
+ quote: "“Our game dashboards finally match our brand. Players noticed before the press did.”",
79
+ author: { id: "yousef-amin", name: "Yousef Amin", role: "Co-founder, Halcyon Games" },
80
+ },
81
+ {
82
+ quote: "“Procurement approved it in record time. Even legal liked the docs.”",
83
+ author: { id: "tariq-zaki", name: "Tariq Zaki", role: "Head of Product, Marlow HR" },
84
+ },
85
+ {
86
+ quote: "“Every audit finding used to be a design debate. Now it's a token change.”",
87
+ author: { id: "fahad-salem", name: "Fahad Salem", role: "Brand Director, Arvenna Bank" },
88
+ },
89
+ ],
90
+ },
91
+ ar: {
92
+ heading: "سمعة تتناقلها الفرق",
93
+ description: "ستة فرق وست قصص، ونظام واحد يجمعها.",
94
+ items: [
95
+ {
96
+ quote: "«استردّ محرك السمات كلفته حين طلب عميل نسخة تحمل علامته، فوافقنا في الاجتماع نفسه.»",
97
+ author: { id: "bader-al-ghamdi", name: "بدر الغامدي", role: "الرئيس التقني، بيكون أناليتكس" },
98
+ },
99
+ {
100
+ quote: "«تبدو كويلفيلد شركة أكبر منا بثلاث مرات: مصممان ونظام واحد، ولا مجال للأعذار.»",
101
+ author: { id: "ziad-karam", name: "زياد كرم", role: "الرئيس التنفيذي، كويلفيلد" },
102
+ },
103
+ {
104
+ quote: "«قِست حجم الشيفرة قبل الانتقال وبعده، فصارت أخف وأسرع، وأجمل أيضًا.»",
105
+ author: { id: "hani-jaber", name: "هاني جابر", role: "مهندس أول، كليرفين" },
106
+ },
107
+ {
108
+ quote: "«صارت لوحات ألعابنا تشبه علامتنا أخيرًا، ولاحظ اللاعبون ذلك قبل الصحافة.»",
109
+ author: { id: "yousef-amin", name: "يوسف أمين", role: "شريك مؤسس، هالسيون غيمز" },
110
+ },
111
+ {
112
+ quote: "«وافق قسم المشتريات في وقت قياسي. حتى القسم القانوني أعجبه التوثيق.»",
113
+ author: { id: "tariq-zaki", name: "طارق زكي", role: "رئيس المنتج، مارلو إتش آر" },
114
+ },
115
+ {
116
+ quote: "«كانت كل ملاحظة تدقيق تفتح نقاشًا في التصميم، والآن يكفيها تعديل رمز واحد.»",
117
+ author: { id: "fahad-salem", name: "فهد سالم", role: "مدير العلامة التجارية، بنك أرفينا" },
118
+ },
119
+ ],
120
+ },
121
+ }
122
+
123
+ export interface SocialProofStaggeredColumnsProps
124
+ extends Omit<React.HTMLAttributes<HTMLElement>, "title">,
125
+ Partial<SocialProofStaggeredColumnsCopy> {
126
+ /** Which language the default copy is in. The page's `dir` sets the direction. */
127
+ locale?: SocialProofLocale
128
+ /** Avatar photos by person id. Without them the avatars show initials. */
129
+ photos?: SocialProofPhotos
130
+ }
131
+
132
+ /** The gap between a column's cards, `gap-6`, which the loop's distance includes. */
133
+ const CARD_GAP = 24
134
+
135
+ export function SocialProofStaggeredColumns({
136
+ locale = "en",
137
+ heading,
138
+ description,
139
+ items,
140
+ photos,
141
+ className,
142
+ ...props
143
+ }: SocialProofStaggeredColumnsProps) {
144
+ const copy = COPY[locale]
145
+ const headingId = React.useId()
146
+ const list = items ?? copy.items
147
+ const line = description === undefined ? copy.description : description
148
+ const [gridRef, columnCount] = useColumnCount<HTMLDivElement>()
149
+ const columns = toColumns(list.map((item, index) => ({ item, index })), columnCount)
150
+ const canDrift = useCanDrift() && columnCount > 1
151
+ const driftRef = useDrift<HTMLDivElement>(
152
+ (root) => {
153
+ if (columnCount < 2) return []
154
+ return Array.from(root.querySelectorAll<HTMLElement>("[data-drift]")).flatMap((column, columnIndex) => {
155
+ const first = column.firstElementChild as HTMLElement | null
156
+ if (!first || typeof column.animate !== "function") return []
157
+ // One copy's height and the gap before the repeat: moving that far puts the repeat where the first copy began.
158
+ // Measured, not `offsetHeight`, which rounds: a fraction of a pixel would show as a jump at the wrap.
159
+ const distance = first.getBoundingClientRect().height + CARD_GAP
160
+ return [
161
+ column.animate([{ transform: "translateY(0)" }, { transform: `translateY(${-distance}px)` }], {
162
+ duration: driftDuration(distance, STAGGERED_DRIFT_SPEED),
163
+ iterations: Infinity,
164
+ easing: "linear",
165
+ // The first, third... columns climb; the second, fourth... fall. Same in RTL.
166
+ direction: columnIndex % 2 === 0 ? "normal" : "reverse",
167
+ }),
168
+ ]
169
+ })
170
+ },
171
+ [columnCount, canDrift]
172
+ )
173
+
174
+ return (
175
+ <SocialProofSection labelledBy={headingId} className={className} contentClassName="gap-12" {...props}>
176
+ <header className="flex w-full flex-col gap-3 [@container(min-width:64rem)]:flex-row [@container(min-width:64rem)]:items-end [@container(min-width:64rem)]:gap-12">
177
+ <h2 id={headingId} className="min-w-0 flex-1 text-2xl font-semibold text-foreground [@container(min-width:40rem)]:text-3xl">
178
+ <Isolated>{heading ?? copy.heading}</Isolated>
179
+ </h2>
180
+ {line ? (
181
+ <p className="text-base text-muted-foreground [@container(min-width:64rem)]:w-80 [@container(min-width:64rem)]:shrink-0 [@container(min-width:64rem)]:text-end">
182
+ <Isolated>{line}</Isolated>
183
+ </p>
184
+ ) : null}
185
+ </header>
186
+ <div ref={driftRef} className="w-full">
187
+ <div ref={gridRef} className="flex w-full items-start gap-6">
188
+ {columns.map((column, columnIndex) => {
189
+ const cards = column.map(({ item, index }) => (
190
+ <li key={index} className="rounded-xl bg-secondary p-8">
191
+ <figure className="m-0 flex flex-col gap-5">
192
+ <SocialProofAuthor person={item.author} photos={photos} />
193
+ <SocialProofQuote quote={item.quote} className="text-base text-foreground" />
194
+ </figure>
195
+ </li>
196
+ ))
197
+ return (
198
+ // Each column is its own window, as Figma's column frames are: it clips what drifts past its top and bottom.
199
+ // The stagger is its margin, so it stays out of the loop's distance.
200
+ <div key={columnIndex} className={cn("min-w-0 flex-1 overflow-hidden", columnIndex === 1 && "mt-14")}>
201
+ <div data-drift="" className="relative">
202
+ <ul className="m-0 flex list-none flex-col gap-6 p-0">{cards}</ul>
203
+ {canDrift ? (
204
+ <ul
205
+ // The repeat is only there for the loop: hidden from assistive technology and out of the Tab order.
206
+ aria-hidden="true"
207
+ ref={(el) => el?.setAttribute("inert", "")}
208
+ className="absolute inset-x-0 top-full m-0 mt-6 flex list-none flex-col gap-6 p-0"
209
+ >
210
+ {cards}
211
+ </ul>
212
+ ) : null}
213
+ </div>
214
+ </div>
215
+ )
216
+ })}
217
+ </div>
218
+ </div>
219
+ </SocialProofSection>
220
+ )
221
+ }
222
+
223
+ /**
224
+ * The default copy, English and Arabic, as `locale` picks it. Spread it to
225
+ * change a few strings and keep the rest.
226
+ */
227
+ export const socialProofStaggeredColumnsCopy = COPY